1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-04-24 01:18:01 +02:00

Fix/archive table (#1086)

* feat: upgrade search to use the new search component (#1073)

* feat: upgrade project list search to use the new search field

* cleanup unused imports

* feat: add upgraded search to projects and applications, polish search UX

* refactor: TableSearch to new Search common component

Co-authored-by: Fredrik Strand Oseberg <fredrik.no@gmail.com>

* fix: resolve issues with project edit/delete button conditions (#1084)

* fix: fix UPDATE_PROJECT permission checks for editors

* fix: disable delete button for the default project

* fix: warn about access on edit project page

* fix: hide broken project edit/delete buttons for OSS

* refactor: avoid project card clicks when closing modals

* refactor: improve default project deletion message

* refactor: improve project access error text

* Update src/component/project/ProjectCard/ProjectCard.tsx

Co-authored-by: Thomas Heartman <thomas@getunleash.ai>

* refactor: fix string quotes

* refactor: improve disabled menu item contrast

* refactor: remove Enterprise routes for OSS

Co-authored-by: Thomas Heartman <thomas@getunleash.ai>

* fix: archive table small adjustments

* refactor archive table params

Co-authored-by: Nuno Góis <github@nunogois.com>
Co-authored-by: Fredrik Strand Oseberg <fredrik.no@gmail.com>
Co-authored-by: olav <mail@olav.io>
Co-authored-by: Thomas Heartman <thomas@getunleash.ai>
This commit is contained in:
Tymoteusz Czech 2022-06-13 15:22:27 +02:00 committed by GitHub
parent bd4651b9ca
commit dd1246d67c
5 changed files with 17 additions and 38 deletions

View File

@ -25,14 +25,15 @@ import { ReviveArchivedFeatureCell } from 'component/archive/ArchiveTable/Revive
import { useStyles } from '../../feature/FeatureToggleList/styles'; import { useStyles } from '../../feature/FeatureToggleList/styles';
import { featuresPlaceholder } from '../../feature/FeatureToggleList/FeatureToggleListTable'; import { featuresPlaceholder } from '../../feature/FeatureToggleList/FeatureToggleListTable';
import theme from 'themes/theme'; import theme from 'themes/theme';
import { FeatureSchema } from '../../../openapi'; import { FeatureSchema } from 'openapi';
import { useFeatureArchiveApi } from 'hooks/api/actions/useFeatureArchiveApi/useReviveFeatureApi'; import { useFeatureArchiveApi } from 'hooks/api/actions/useFeatureArchiveApi/useReviveFeatureApi';
import useToast from 'hooks/useToast'; import useToast from 'hooks/useToast';
import { formatUnknownError } from 'utils/formatUnknownError'; import { formatUnknownError } from 'utils/formatUnknownError';
import { useSearch } from 'hooks/useSearch'; import { useSearch } from 'hooks/useSearch';
import { FeatureArchivedCell } from '../../common/Table/cells/FeatureArchivedCell/FeatureArchivedCell'; import { FeatureArchivedCell } from './FeatureArchivedCell/FeatureArchivedCell';
import { useVirtualizedRange } from 'hooks/useVirtualizedRange'; import { useVirtualizedRange } from 'hooks/useVirtualizedRange';
import { URLSearchParamsInit } from 'react-router-dom'; import { useSearchParams } from 'react-router-dom';
import { useWindowVirtualizer } from '@tanstack/react-virtual';
export interface IFeaturesArchiveTableProps { export interface IFeaturesArchiveTableProps {
archivedFeatures: FeatureSchema[]; archivedFeatures: FeatureSchema[];
@ -45,13 +46,6 @@ export interface IFeaturesArchiveTableProps {
| SortingRule<string> | SortingRule<string>
| ((prev: SortingRule<string>) => SortingRule<string>) | ((prev: SortingRule<string>) => SortingRule<string>)
) => SortingRule<string>; ) => SortingRule<string>;
searchParams: URLSearchParams;
setSearchParams: (
nextInit: URLSearchParamsInit,
navigateOptions?:
| { replace?: boolean | undefined; state?: any }
| undefined
) => void;
} }
export const ArchiveTable = ({ export const ArchiveTable = ({
@ -60,8 +54,6 @@ export const ArchiveTable = ({
refetch, refetch,
storedParams, storedParams,
setStoredParams, setStoredParams,
searchParams,
setSearchParams,
title, title,
}: IFeaturesArchiveTableProps) => { }: IFeaturesArchiveTableProps) => {
const rowHeight = theme.shape.tableRowHeight; const rowHeight = theme.shape.tableRowHeight;
@ -70,6 +62,7 @@ export const ArchiveTable = ({
const isMediumScreen = useMediaQuery(theme.breakpoints.down('lg')); const isMediumScreen = useMediaQuery(theme.breakpoints.down('lg'));
const { setToastData, setToastApiError } = useToast(); const { setToastData, setToastApiError } = useToast();
const [searchParams, setSearchParams] = useSearchParams();
const { reviveFeature } = useFeatureArchiveApi(); const { reviveFeature } = useFeatureArchiveApi();
const [searchValue, setSearchValue] = useState( const [searchValue, setSearchValue] = useState(
@ -108,7 +101,7 @@ export const ArchiveTable = ({
Cell: FeatureTypeCell, Cell: FeatureTypeCell,
}, },
{ {
Header: 'Feature toggle Name', Header: 'Feature toggle name',
accessor: 'name', accessor: 'name',
searchable: true, searchable: true,
minWidth: 100, minWidth: 100,
@ -249,7 +242,7 @@ export const ArchiveTable = ({
replace: true, replace: true,
}); });
setStoredParams({ id: sortBy[0].id, desc: sortBy[0].desc || false }); setStoredParams({ id: sortBy[0].id, desc: sortBy[0].desc || false });
}, [loading, sortBy, searchValue, setSearchParams, setStoredParams]); }, [loading, sortBy, searchValue]);
const [firstRenderedIndex, lastRenderedIndex] = const [firstRenderedIndex, lastRenderedIndex] =
useVirtualizedRange(rowHeight); useVirtualizedRange(rowHeight);

View File

@ -1,9 +1,9 @@
import React, { VFC } from 'react'; import { VFC } from 'react';
import TimeAgo from 'react-timeago'; import TimeAgo from 'react-timeago';
import { Tooltip, Typography } from '@mui/material'; import { Tooltip, Typography } from '@mui/material';
import { formatDateYMD } from '../../../../../utils/formatDate'; import { formatDateYMD } from 'utils/formatDate';
import { TextCell } from '../TextCell/TextCell'; import { TextCell } from 'component/common/Table/cells/TextCell/TextCell';
import { useLocationSettings } from '../../../../../hooks/useLocationSettings'; import { useLocationSettings } from 'hooks/useLocationSettings';
interface IFeatureArchivedCellProps { interface IFeatureArchivedCellProps {
value?: string | Date | null; value?: string | Date | null;

View File

@ -1,4 +1,4 @@
import { SyntheticEvent, VFC } from 'react'; import { VFC } from 'react';
import { ActionCell } from 'component/common/Table/cells/ActionCell/ActionCell'; import { ActionCell } from 'component/common/Table/cells/ActionCell/ActionCell';
import { Undo } from '@mui/icons-material'; import { Undo } from '@mui/icons-material';
import PermissionIconButton from 'component/common/PermissionIconButton/PermissionIconButton'; import PermissionIconButton from 'component/common/PermissionIconButton/PermissionIconButton';
@ -13,15 +13,10 @@ export const ReviveArchivedFeatureCell: VFC<IReviveArchivedFeatureCell> = ({
onRevive, onRevive,
project, project,
}) => { }) => {
const handleClick = (e: SyntheticEvent<Element, Event>) => {
e.preventDefault();
onRevive();
};
return ( return (
<ActionCell> <ActionCell>
<PermissionIconButton <PermissionIconButton
onClick={handleClick} onClick={onRevive}
projectId={project} projectId={project}
permission={UPDATE_FEATURE} permission={UPDATE_FEATURE}
tooltipProps={{ title: 'Revive feature' }} tooltipProps={{ title: 'Revive feature' }}

View File

@ -1,11 +1,14 @@
import { useFeaturesArchive } from '../../hooks/api/getters/useFeaturesArchive/useFeaturesArchive'; import { useFeaturesArchive } from '../../hooks/api/getters/useFeaturesArchive/useFeaturesArchive';
import { ArchiveTable } from './ArchiveTable/ArchiveTable'; import { ArchiveTable } from './ArchiveTable/ArchiveTable';
import { useSearchParams } from 'react-router-dom';
import { SortingRule } from 'react-table'; import { SortingRule } from 'react-table';
import { usePageTitle } from 'hooks/usePageTitle'; import { usePageTitle } from 'hooks/usePageTitle';
import { createLocalStorage } from 'utils/createLocalStorage'; import { createLocalStorage } from 'utils/createLocalStorage';
const defaultSort: SortingRule<string> = { id: 'createdAt', desc: true }; const defaultSort: SortingRule<string> = { id: 'createdAt', desc: true };
const { value, setValue } = createLocalStorage(
'FeaturesArchiveTable:v1',
defaultSort
);
export const FeaturesArchiveTable = () => { export const FeaturesArchiveTable = () => {
usePageTitle('Archived'); usePageTitle('Archived');
@ -15,19 +18,11 @@ export const FeaturesArchiveTable = () => {
refetchArchived, refetchArchived,
} = useFeaturesArchive(); } = useFeaturesArchive();
const [searchParams, setSearchParams] = useSearchParams();
const { value, setValue } = createLocalStorage(
'FeaturesArchiveTable:v1',
defaultSort
);
return ( return (
<ArchiveTable <ArchiveTable
title="Archived" title="Archived"
archivedFeatures={archivedFeatures} archivedFeatures={archivedFeatures}
loading={loading} loading={loading}
searchParams={searchParams}
setSearchParams={setSearchParams}
storedParams={value} storedParams={value}
setStoredParams={setValue} setStoredParams={setValue}
refetch={refetchArchived} refetch={refetchArchived}

View File

@ -1,5 +1,4 @@
import { ArchiveTable } from './ArchiveTable/ArchiveTable'; import { ArchiveTable } from './ArchiveTable/ArchiveTable';
import { useSearchParams } from 'react-router-dom';
import { SortingRule } from 'react-table'; import { SortingRule } from 'react-table';
import { useProjectFeaturesArchive } from '../../hooks/api/getters/useProjectFeaturesArchive/useProjectFeaturesArchive'; import { useProjectFeaturesArchive } from '../../hooks/api/getters/useProjectFeaturesArchive/useProjectFeaturesArchive';
import { createLocalStorage } from 'utils/createLocalStorage'; import { createLocalStorage } from 'utils/createLocalStorage';
@ -19,7 +18,6 @@ export const ProjectFeaturesArchiveTable = ({
loading, loading,
} = useProjectFeaturesArchive(projectId); } = useProjectFeaturesArchive(projectId);
const [searchParams, setSearchParams] = useSearchParams();
const { value, setValue } = createLocalStorage( const { value, setValue } = createLocalStorage(
`${projectId}:ProjectFeaturesArchiveTable`, `${projectId}:ProjectFeaturesArchiveTable`,
defaultSort defaultSort
@ -30,8 +28,6 @@ export const ProjectFeaturesArchiveTable = ({
title="Project Features Archive" title="Project Features Archive"
archivedFeatures={archivedFeatures} archivedFeatures={archivedFeatures}
loading={loading} loading={loading}
searchParams={searchParams}
setSearchParams={setSearchParams}
storedParams={value} storedParams={value}
setStoredParams={setValue} setStoredParams={setValue}
refetch={refetchArchived} refetch={refetchArchived}