1
0
Fork 0
mirror of https://github.com/portainer/portainer.git synced 2025-07-23 15:29:42 +02:00

fix(services): separate table state [BE-11401] (#152)

This commit is contained in:
Ali 2024-12-11 11:58:43 +13:00 committed by GitHub
parent 52c90d4d0a
commit 069f22afa4
4 changed files with 25 additions and 16 deletions

View file

@ -31,6 +31,7 @@ const ngModule = angular
'isStackColumnVisible', 'isStackColumnVisible',
'onRefresh', 'onRefresh',
'titleIcon', 'titleIcon',
'tableKey',
]) ])
); );

View file

@ -6,4 +6,5 @@
on-refresh="(getServices)" on-refresh="(getServices)"
is-add-action-visible="true" is-add-action-visible="true"
is-stack-column-visible="true" is-stack-column-visible="true"
table-key="'services'"
></docker-services-datatable> ></docker-services-datatable>

View file

@ -241,7 +241,13 @@
environment="endpoint" environment="endpoint"
></stack-containers-datatable> ></stack-containers-datatable>
<docker-services-datatable ng-if="services && (!orphaned || orphanedRunning)" dataset="services" title-icon="list" on-refresh="(getServices)"></docker-services-datatable> <docker-services-datatable
ng-if="services && (!orphaned || orphanedRunning)"
dataset="services"
title-icon="list"
on-refresh="(getServices)"
table-key="'stack-services'"
></docker-services-datatable>
<!-- access-control-panel --> <!-- access-control-panel -->
<access-control-panel <access-control-panel

View file

@ -28,8 +28,22 @@ import { TableActions } from './TableActions';
import { type TableSettings as TableSettingsType } from './types'; import { type TableSettings as TableSettingsType } from './types';
import { TableSettings } from './TableSettings'; import { TableSettings } from './TableSettings';
const tableKey = 'services'; export function ServicesDatatable({
titleIcon = Shuffle,
dataset,
isAddActionVisible,
isStackColumnVisible,
onRefresh,
tableKey,
}: {
dataset: Array<ServiceViewModel> | undefined;
titleIcon?: IconProps['icon'];
isAddActionVisible?: boolean;
isStackColumnVisible?: boolean;
onRefresh?(): void;
tableKey: string;
}) {
// use a unique tableKey so that unrelated services datatables don't share state
const store = createPersistedStore<TableSettingsType>( const store = createPersistedStore<TableSettingsType>(
tableKey, tableKey,
'name', 'name',
@ -43,19 +57,6 @@ const store = createPersistedStore<TableSettingsType>(
}) })
); );
export function ServicesDatatable({
titleIcon = Shuffle,
dataset,
isAddActionVisible,
isStackColumnVisible,
onRefresh,
}: {
dataset: Array<ServiceViewModel> | undefined;
titleIcon?: IconProps['icon'];
isAddActionVisible?: boolean;
isStackColumnVisible?: boolean;
onRefresh?(): void;
}) {
// useRef so that updating the parent filter doesn't cause a re-render // useRef so that updating the parent filter doesn't cause a re-render
const parentFilteredStatusRef = useRef<Map<string, boolean>>(new Map()); const parentFilteredStatusRef = useRef<Map<string, boolean>>(new Map());
const environmentId = useEnvironmentId(); const environmentId = useEnvironmentId();