mirror of
https://github.com/portainer/portainer.git
synced 2025-08-02 20:35:25 +02:00
refactor(docker/configs): implement table in react [EE-4664] (#8912)
This commit is contained in:
parent
0bcb57568c
commit
615af4fdee
9 changed files with 119 additions and 197 deletions
|
@ -0,0 +1,62 @@
|
|||
import { Clipboard, Plus, Trash2 } from 'lucide-react';
|
||||
|
||||
import { Datatable, TableSettingsMenu } from '@@/datatables';
|
||||
import { TableSettingsMenuAutoRefresh } from '@@/datatables/TableSettingsMenuAutoRefresh';
|
||||
import { useRepeater } from '@@/datatables/useRepeater';
|
||||
import { Button } from '@@/buttons';
|
||||
import { Link } from '@@/Link';
|
||||
import { useTableState } from '@@/datatables/useTableState';
|
||||
|
||||
import { DockerConfig } from '../../types';
|
||||
|
||||
import { columns } from './columns';
|
||||
import { createStore } from './store';
|
||||
|
||||
interface Props {
|
||||
dataset: Array<DockerConfig>;
|
||||
onRemoveClick: (configs: Array<DockerConfig>) => void;
|
||||
onRefresh: () => Promise<void>;
|
||||
}
|
||||
|
||||
const storageKey = 'docker_configs';
|
||||
const settingsStore = createStore(storageKey);
|
||||
|
||||
export function ConfigsDatatable({ dataset, onRefresh, onRemoveClick }: Props) {
|
||||
const tableState = useTableState(settingsStore, storageKey);
|
||||
|
||||
useRepeater(tableState.autoRefreshRate, onRefresh);
|
||||
|
||||
return (
|
||||
<Datatable
|
||||
dataset={dataset}
|
||||
columns={columns}
|
||||
settingsManager={tableState}
|
||||
title="Configs"
|
||||
titleIcon={Clipboard}
|
||||
emptyContentLabel="No config available."
|
||||
renderTableSettings={() => (
|
||||
<TableSettingsMenu>
|
||||
<TableSettingsMenuAutoRefresh
|
||||
value={tableState.autoRefreshRate}
|
||||
onChange={(value) => tableState.setAutoRefreshRate(value)}
|
||||
/>
|
||||
</TableSettingsMenu>
|
||||
)}
|
||||
renderTableActions={(selectedRows) => (
|
||||
<div className="flex items-center gap-3">
|
||||
<Button
|
||||
icon={Trash2}
|
||||
color="dangerlight"
|
||||
onClick={() => onRemoveClick(selectedRows)}
|
||||
disabled={selectedRows.length === 0}
|
||||
>
|
||||
Remove
|
||||
</Button>
|
||||
<Button icon={Plus} as={Link} props={{ to: 'docker.configs.new' }}>
|
||||
Add config
|
||||
</Button>
|
||||
</div>
|
||||
)}
|
||||
/>
|
||||
);
|
||||
}
|
|
@ -0,0 +1,22 @@
|
|||
import { createColumnHelper } from '@tanstack/react-table';
|
||||
|
||||
import { isoDate } from '@/portainer/filters/filters';
|
||||
import { createOwnershipColumn } from '@/react/docker/components/datatable-helpers/createOwnershipColumn';
|
||||
|
||||
import { buildNameColumn } from '@@/datatables/NameCell';
|
||||
|
||||
import { DockerConfig } from '../../types';
|
||||
|
||||
const columnHelper = createColumnHelper<DockerConfig>();
|
||||
|
||||
export const columns = [
|
||||
buildNameColumn<DockerConfig>('Name', 'Id', 'docker.configs.config'),
|
||||
columnHelper.accessor('CreatedAt', {
|
||||
header: 'Creation Date',
|
||||
cell: ({ getValue }) => {
|
||||
const date = getValue();
|
||||
return <time dateTime={date}>{isoDate(date)}</time>;
|
||||
},
|
||||
}),
|
||||
createOwnershipColumn<DockerConfig>(),
|
||||
];
|
|
@ -0,0 +1 @@
|
|||
export { ConfigsDatatable } from './ConfigsDatatable';
|
16
app/react/docker/configs/ListView/ConfigsDatatable/store.ts
Normal file
16
app/react/docker/configs/ListView/ConfigsDatatable/store.ts
Normal file
|
@ -0,0 +1,16 @@
|
|||
import {
|
||||
BasicTableSettings,
|
||||
createPersistedStore,
|
||||
refreshableSettings,
|
||||
RefreshableTableSettings,
|
||||
} from '@@/datatables/types';
|
||||
|
||||
export interface TableSettings
|
||||
extends BasicTableSettings,
|
||||
RefreshableTableSettings {}
|
||||
|
||||
export function createStore(storageKey: string) {
|
||||
return createPersistedStore<TableSettings>(storageKey, 'name', (set) => ({
|
||||
...refreshableSettings(set),
|
||||
}));
|
||||
}
|
8
app/react/docker/configs/types.ts
Normal file
8
app/react/docker/configs/types.ts
Normal file
|
@ -0,0 +1,8 @@
|
|||
import { ResourceControlViewModel } from '@/react/portainer/access-control/models/ResourceControlViewModel';
|
||||
|
||||
export type DockerConfig = {
|
||||
Id: string;
|
||||
Name: string;
|
||||
CreatedAt: string;
|
||||
ResourceControl?: ResourceControlViewModel;
|
||||
};
|
Loading…
Add table
Add a link
Reference in a new issue