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

fix(k8s-services): avoid rerendering services table [r8s-387] (#832)

This commit is contained in:
Ali 2025-06-27 22:48:40 +12:00 committed by GitHub
parent 8d29b5ae71
commit 303047656e
9 changed files with 216 additions and 99 deletions

View file

@ -16,12 +16,17 @@ import {
} from '../../datatables/DefaultDatatableSettings';
import { SystemResourceDescription } from '../../datatables/SystemResourceDescription';
import { useNamespacesQuery } from '../../namespaces/queries/useNamespacesQuery';
import { useAllVolumesQuery } from '../queries/useVolumesQuery';
import {
convertToVolumeViewModels,
useAllVolumesQuery,
} from '../queries/useVolumesQuery';
import { isSystemNamespace } from '../../namespaces/queries/useIsSystemNamespace';
import { useDeleteVolumes } from '../queries/useDeleteVolumes';
import { isVolumeUsed } from '../utils';
import { K8sVolumeInfo } from '../types';
import { columns } from './columns';
import { VolumeViewModel } from './types';
export function VolumesDatatable() {
const tableState = useTableStateWithStorage<TableSettings>(
@ -45,21 +50,15 @@ export function VolumesDatatable() {
const namespaces = namespaceListQuery.data ?? [];
const volumesQuery = useAllVolumesQuery(envId, {
refetchInterval: tableState.autoRefreshRate * 1000,
select: transformAndFilterVolumes,
});
const volumes = volumesQuery.data ?? [];
const filteredVolumes = tableState.showSystemResources
? volumes
: volumes.filter(
(volume) =>
!isSystemNamespace(volume.ResourcePool.Namespace.Name, namespaces)
);
return (
<Datatable
data-cy="k8s-volumes-datatable"
isLoading={volumesQuery.isLoading || namespaceListQuery.isLoading}
dataset={filteredVolumes}
dataset={volumes}
columns={columns}
settingsManager={tableState}
title="Volumes"
@ -96,4 +95,15 @@ export function VolumesDatatable() {
}
/>
);
function transformAndFilterVolumes(
volumes: K8sVolumeInfo[]
): VolumeViewModel[] {
const transformedVolumes = convertToVolumeViewModels(volumes);
return transformedVolumes.filter(
(volume) =>
tableState.showSystemResources ||
!isSystemNamespace(volume.ResourcePool.Namespace.Name, namespaces)
);
}
}