import _ from 'lodash'; import { DockerContainer } from '@/react/docker/containers/types'; import { Environment } from '@/portainer/environments/types'; import { createStore } from '@/react/docker/containers/ListView/ContainersDatatable/datatable-store'; import { useColumns } from '@/react/docker/containers/ListView/ContainersDatatable/columns'; import { ContainersDatatableActions } from '@/react/docker/containers/ListView/ContainersDatatable/ContainersDatatableActions'; import { ContainersDatatableSettings } from '@/react/docker/containers/ListView/ContainersDatatable/ContainersDatatableSettings'; import { Datatable, TableSettingsMenu } from '@@/datatables'; import { buildAction, QuickActionsSettings, } from '@@/datatables/QuickActionsSettings'; import { ColumnVisibilityMenu } from '@@/datatables/ColumnVisibilityMenu'; import { useContainers } from '../../containers/queries/containers'; import { RowProvider } from '../../containers/ListView/ContainersDatatable/RowContext'; const storageKey = 'stack-containers'; const useStore = createStore(storageKey); const actions = [ buildAction('logs', 'Logs'), buildAction('inspect', 'Inspect'), buildAction('stats', 'Stats'), buildAction('exec', 'Console'), buildAction('attach', 'Attach'), ]; export interface Props { environment: Environment; stackName: string; } export function StackContainersDatatable({ environment, stackName }: Props) { const settings = useStore(); const columns = useColumns(false); const hidableColumns = _.compact( columns.filter((col) => col.canHide).map((col) => col.id) ); const containersQuery = useContainers( environment.Id, true, { label: [`com.docker.compose.project=${stackName}`], }, settings.autoRefreshRate * 1000 ); return ( ( )} initialTableState={{ hiddenColumns: settings.hiddenColumns }} renderTableSettings={(tableInstance) => { const columnsToHide = tableInstance.allColumns.filter((colInstance) => hidableColumns?.includes(colInstance.id) ); return ( <> columns={columnsToHide} onChange={(hiddenColumns) => { settings.setHiddenColumns(hiddenColumns); tableInstance.setHiddenColumns(hiddenColumns); }} value={settings.hiddenColumns} /> } > ); }} storageKey={storageKey} dataset={containersQuery.data || []} isLoading={containersQuery.isLoading} emptyContentLabel="No containers found" /> ); }