1
0
Fork 0
mirror of https://github.com/portainer/portainer.git synced 2025-07-20 22:09:41 +02:00
portainer/app/react/components/datatables/useTableState.ts
Chaim Lev-Ari ba19aab8dc
Some checks are pending
ci / build_images (map[arch:amd64 platform:linux]) (push) Waiting to run
ci / build_images (map[arch:amd64 platform:windows version:1809]) (push) Waiting to run
ci / build_images (map[arch:amd64 platform:windows version:ltsc2022]) (push) Waiting to run
ci / build_images (map[arch:arm64 platform:linux]) (push) Waiting to run
ci / build_manifests (push) Blocked by required conditions
/ triage (push) Waiting to run
Lint / Run linters (push) Waiting to run
Test / test-server (map[arch:arm64 platform:linux]) (push) Waiting to run
Test / test-client (push) Waiting to run
Test / test-server (map[arch:amd64 platform:linux]) (push) Waiting to run
Test / test-server (map[arch:amd64 platform:windows version:1809]) (push) Waiting to run
Test / test-server (map[arch:amd64 platform:windows version:ltsc2022]) (push) Waiting to run
refactor(registries): migrate repos table to react [EE-6451] (#10830)
2024-01-02 14:04:15 +07:00

56 lines
1.5 KiB
TypeScript

import { useMemo, useState } from 'react';
import { useStore } from 'zustand';
import { useSearchBarState } from './SearchBar';
import { BasicTableSettings, createPersistedStore } from './types';
export type TableState<TSettings extends BasicTableSettings> = TSettings & {
setSearch: (search: string) => void;
search: string;
};
export function useTableState<
TSettings extends BasicTableSettings = BasicTableSettings,
>(
store: ReturnType<typeof createPersistedStore<TSettings>>,
storageKey: string
) {
const settings = useStore(store);
const [search, setSearch] = useSearchBarState(storageKey);
return useMemo(
() => ({ ...settings, setSearch, search }),
[settings, search, setSearch]
);
}
export function useTableStateWithStorage(
...args: Parameters<typeof createPersistedStore>
) {
const [store] = useState(() => createPersistedStore(...args));
return useTableState(store, args[0]);
}
export function useTableStateWithoutStorage(
defaultSortKey?: string
): BasicTableSettings & {
setSearch: (search: string) => void;
search: string;
} {
const [search, setSearch] = useState('');
const [pageSize, setPageSize] = useState(10);
const [sortBy, setSortBy] = useState(
defaultSortKey ? { id: defaultSortKey, desc: false } : undefined
);
return {
search,
setSearch,
pageSize,
setPageSize,
setSortBy: (id: string | undefined, desc: boolean) =>
setSortBy(id ? { id, desc } : undefined),
sortBy,
};
}