1
0
Fork 0
mirror of https://github.com/portainer/portainer.git synced 2025-07-24 07:49:41 +02:00

refactor(kube/apps): migrate integrated apps table to react [EE-4690] (#11025)

This commit is contained in:
Chaim Lev-Ari 2024-04-02 22:37:47 +03:00 committed by GitHub
parent 26bb028ace
commit 946166319f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
16 changed files with 291 additions and 260 deletions

View file

@ -0,0 +1,59 @@
import LaptopCode from '@/assets/ico/laptop-code.svg?c';
import { Datatable, TableSettingsMenu } from '@@/datatables';
import { useRepeater } from '@@/datatables/useRepeater';
import { TableSettingsMenuAutoRefresh } from '@@/datatables/TableSettingsMenuAutoRefresh';
import { useTableStateWithStorage } from '@@/datatables/useTableState';
import {
BasicTableSettings,
refreshableSettings,
RefreshableTableSettings,
} from '@@/datatables/types';
import { columns } from './columns';
import { IntegratedApp } from './types';
interface TableSettings extends BasicTableSettings, RefreshableTableSettings {}
export function IntegratedAppsDatatable({
dataset,
onRefresh,
isLoading,
tableKey,
tableTitle,
}: {
dataset: Array<IntegratedApp>;
onRefresh: () => void;
isLoading: boolean;
tableKey: string;
tableTitle: string;
}) {
const tableState = useTableStateWithStorage<TableSettings>(
tableKey,
'Name',
(set) => ({
...refreshableSettings(set),
})
);
useRepeater(tableState.autoRefreshRate, onRefresh);
return (
<Datatable
dataset={dataset}
settingsManager={tableState}
columns={columns}
disableSelect
title={tableTitle}
titleIcon={LaptopCode}
isLoading={isLoading}
renderTableSettings={() => (
<TableSettingsMenu>
<TableSettingsMenuAutoRefresh
value={tableState.autoRefreshRate}
onChange={tableState.setAutoRefreshRate}
/>
</TableSettingsMenu>
)}
/>
);
}

View file

@ -0,0 +1,5 @@
import { createColumnHelper } from '@tanstack/react-table';
import { IntegratedApp } from './types';
export const helper = createColumnHelper<IntegratedApp>();

View file

@ -0,0 +1,22 @@
import { CellContext } from '@tanstack/react-table';
import { Link } from '@@/Link';
import { helper } from './columns.helper';
import { IntegratedApp } from './types';
export const name = helper.accessor('Name', {
header: 'Name',
cell: Cell,
});
function Cell({ row: { original: item } }: CellContext<IntegratedApp, string>) {
return (
<Link
to="kubernetes.applications.application"
params={{ name: item.Name, namespace: item.ResourcePool }}
>
{item.Name}
</Link>
);
}

View file

@ -0,0 +1,22 @@
import { truncate } from '@/portainer/filters/filters';
import { helper } from './columns.helper';
import { name } from './columns.name';
export const columns = [
name,
helper.accessor('StackName', {
header: 'Stack',
cell: ({ getValue }) => getValue() || '-',
}),
helper.accessor('Image', {
header: 'Image',
cell: ({ row: { original: item } }) => (
<>
{truncate(item.Image, 64)}
{item.Containers?.length > 1 && <>+ {item.Containers.length - 1}</>}
</>
),
}),
];

View file

@ -0,0 +1,3 @@
import { KubernetesApplication } from '@/kubernetes/models/application/models';
export type IntegratedApp = KubernetesApplication;