1
0
Fork 0
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:
Chaim Lev-Ari 2023-07-14 08:48:08 +03:00 committed by GitHub
parent 0bcb57568c
commit 615af4fdee
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
9 changed files with 119 additions and 197 deletions

View file

@ -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>
)}
/>
);
}

View file

@ -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>(),
];

View file

@ -0,0 +1 @@
export { ConfigsDatatable } from './ConfigsDatatable';

View 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),
}));
}

View 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;
};