Skip to content

Commit

Permalink
Merge pull request #1464 from jpuzz0/MTV-1871-vm-table-retain-sort
Browse files Browse the repository at this point in the history
[MTV-1871] Sorting virtual machines isn't saved while refresh
  • Loading branch information
metalice authored Feb 11, 2025
2 parents b93fcb8 + 810352f commit 2077a60
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 4 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
import React, { createContext, FC, PropsWithChildren, useContext } from 'react';

import { ResourceField, SortType, useSort } from '@kubev2v/common';

type TableSortContextProps = {
activeSort: SortType;
setActiveSort: (activeSort: SortType) => void;
compareFn: (a: unknown, b: unknown) => number;
};

const defaultTableSortContext = {
activeSort: { isAsc: true, resourceFieldId: undefined, label: '' },
setActiveSort: () => undefined,
compareFn: () => undefined,
};

const TableSortContext = createContext<TableSortContextProps>(defaultTableSortContext);

type TableSortContextProviderProps = PropsWithChildren & {
fields: ResourceField[];
};

export const TableSortContextProvider: FC<TableSortContextProviderProps> = ({
fields,
children,
}) => {
const [activeSort, setActiveSort, compareFn] = useSort(fields);

return (
<TableSortContext.Provider value={{ activeSort, setActiveSort, compareFn }}>
{children}
</TableSortContext.Provider>
);
};

export const useTableSortContext = () => useContext(TableSortContext);
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@ import {
useFields,
usePagination,
UserSettings,
useSort,
useUrlFilters,
ValueMatcher,
withTr,
Expand All @@ -42,6 +41,8 @@ import {
} from '@patternfly/react-core';
import { FilterIcon } from '@patternfly/react-icons';

import { useTableSortContext } from '../TableSortContext';

import { ManageColumnsToolbar } from './ManageColumnsToolbar';

import './StandardPage.style.css';
Expand Down Expand Up @@ -299,7 +300,7 @@ export function StandardPage<T>({
});
const clearAllFilters = () => setSelectedFilters({});
const [fields, setFields] = useFields(namespace, fieldsMetadata, userSettings?.fields);
const [activeSort, setActiveSort, compareFn] = useSort(fields);
const { activeSort, setActiveSort, compareFn } = useTableSortContext();

const supportedMatchers = extraSupportedMatchers
? reduceValueFilters(extraSupportedMatchers, defaultValueMatchers)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import {
StandardPageWithSelection,
StandardPageWithSelectionProps,
} from 'src/components/page/StandardPageWithSelection';
import { TableSortContextProvider } from 'src/components/TableSortContext';
import { usePlanMigration } from 'src/modules/Plans/hooks/usePlanMigration';
import { isPlanArchived, isPlanExecuting } from 'src/modules/Plans/utils';
import { useForkliftTranslation } from 'src/utils/i18n';
Expand Down Expand Up @@ -266,11 +267,12 @@ export const MigrationVirtualMachinesList: FC<{ obj: PlanData }> = ({ obj }) =>
const canSelectWhenNotExecuting = (item: VMData) =>
(item?.statusVM?.started === undefined || item?.statusVM?.error !== undefined) && !isExecuting;

const fieldsMetadata = fieldsMetadataFactory(t);
const props: PageWithSelectionProps = {
fieldsMetadata,
dataSource: [vmData || [], true, undefined],
CellMapper: MigrationVirtualMachinesRow,
ExpandedComponent: MigrationVirtualMachinesRowExtended,
fieldsMetadata: fieldsMetadataFactory(t),
title: t('Virtual Machines'),
userSettings: userSettings,
namespace: '',
Expand All @@ -288,5 +290,9 @@ export const MigrationVirtualMachinesList: FC<{ obj: PlanData }> = ({ obj }) =>
GlobalActionToolbarItems: actions,
};

return <PageWithSelection {...extendedProps} />;
return (
<TableSortContextProvider fields={fieldsMetadata}>
<PageWithSelection {...extendedProps} />
</TableSortContextProvider>
);
};

0 comments on commit 2077a60

Please sign in to comment.