1
0
Fork 0
mirror of https://github.com/portainer/portainer.git synced 2025-07-25 08:19:40 +02:00

refactor(app): details widget migration [EE-5352] (#8886)

This commit is contained in:
Ali 2023-05-29 15:06:14 +12:00 committed by GitHub
parent fdd79cece8
commit af77e33993
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
57 changed files with 2046 additions and 1079 deletions

View file

@ -1,106 +0,0 @@
import { Box } from 'lucide-react';
import { DockerContainer } from '@/react/docker/containers/types';
import { Environment } from '@/react/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 { useShowGPUsColumn } from '@/react/docker/containers/utils';
import { Datatable, Table } from '@@/datatables';
import {
buildAction,
QuickActionsSettings,
} from '@@/datatables/QuickActionsSettings';
import { ColumnVisibilityMenu } from '@@/datatables/ColumnVisibilityMenu';
import { TableSettingsProvider } from '@@/datatables/useTableSettings';
import { useTableState } from '@@/datatables/useTableState';
import { useContainers } from '../../containers/queries/containers';
import { RowProvider } from '../../containers/ListView/ContainersDatatable/RowContext';
const storageKey = 'stack-containers';
const settingsStore = 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 tableState = useTableState(settingsStore, storageKey);
const isGPUsColumnVisible = useShowGPUsColumn(environment.Id);
const columns = useColumns(false, isGPUsColumnVisible);
const containersQuery = useContainers(environment.Id, {
filters: {
label: [`com.docker.compose.project=${stackName}`],
},
autoRefreshRate: tableState.autoRefreshRate * 1000,
});
return (
<RowProvider context={{ environment }}>
<TableSettingsProvider settings={settingsStore}>
<Datatable
title="Containers"
titleIcon={Box}
settingsManager={tableState}
columns={columns}
renderTableActions={(selectedRows) => (
<ContainersDatatableActions
selectedItems={selectedRows}
isAddActionVisible={false}
endpointId={environment.Id}
/>
)}
initialTableState={{
columnVisibility: Object.fromEntries(
tableState.hiddenColumns.map((col) => [col, false])
),
}}
renderTableSettings={(tableInstance) => {
const columnsToHide = tableInstance
.getAllColumns()
.filter((col) => col.getCanHide());
return (
<>
<ColumnVisibilityMenu<DockerContainer>
columns={columnsToHide}
onChange={(hiddenColumns) => {
tableState.setHiddenColumns(hiddenColumns);
tableInstance.setColumnVisibility(
Object.fromEntries(
hiddenColumns.map((col) => [col, false])
)
);
}}
value={tableState.hiddenColumns}
/>
<Table.SettingsMenu
quickActions={<QuickActionsSettings actions={actions} />}
>
<ContainersDatatableSettings settings={tableState} />
</Table.SettingsMenu>
</>
);
}}
dataset={containersQuery.data || []}
isLoading={containersQuery.isLoading}
emptyContentLabel="No containers found"
/>
</TableSettingsProvider>
</RowProvider>
);
}

View file

@ -1,21 +0,0 @@
import { openSwitchPrompt } from '@@/modals/SwitchPrompt';
import { ModalType } from '@@/modals';
import { buildConfirmButton } from '@@/modals/utils';
export async function confirmStackUpdate(
message: string,
defaultValue: boolean
) {
const result = await openSwitchPrompt(
'Are you sure?',
'Re-pull image and redeploy',
{
message,
confirmButton: buildConfirmButton('Update'),
modalType: ModalType.Warn,
defaultValue,
}
);
return result ? { pullImage: result.value } : undefined;
}

View file

@ -1,25 +0,0 @@
export type StackId = number;
export enum StackType {
/**
* Represents a stack managed via docker stack
*/
DockerSwarm = 1,
/**
* Represents a stack managed via docker-compose
*/
DockerCompose,
/**
* Represents a stack managed via kubectl
*/
Kubernetes,
/**
* Represents a stack managed via Nomad
*/
Nomad,
}
export enum StackStatus {
Active = 1,
Inactive,
}