mirror of
https://github.com/Unleash/unleash.git
synced 2025-09-24 17:51:14 +02:00
refactor: simplify lifecycle filter components and remove unused getStageCount function
This commit is contained in:
parent
37ae29ca5a
commit
ca86a4e428
@ -25,16 +25,12 @@ const StyledChip = styled(Chip, {
|
|||||||
},
|
},
|
||||||
}));
|
}));
|
||||||
|
|
||||||
interface ILifecycleFiltersBaseProps<T> {
|
interface ILifecycleFiltersBaseProps {
|
||||||
state: FilterItemParamHolder;
|
state: FilterItemParamHolder;
|
||||||
onChange: (value: FilterItemParamHolder) => void;
|
onChange: (value: FilterItemParamHolder) => void;
|
||||||
total?: number;
|
total?: number;
|
||||||
children?: ReactNode;
|
children?: ReactNode;
|
||||||
countData?: T;
|
countData?: Record<LifecycleStage['name'], number>;
|
||||||
getStageCount: (
|
|
||||||
lifecycle: LifecycleStage['name'] | null,
|
|
||||||
data?: T,
|
|
||||||
) => number | undefined;
|
|
||||||
sx?: SxProps<Theme>;
|
sx?: SxProps<Theme>;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -62,15 +58,14 @@ const lifecycleOptions: {
|
|||||||
{ label: 'Cleanup', value: 'completed' },
|
{ label: 'Cleanup', value: 'completed' },
|
||||||
];
|
];
|
||||||
|
|
||||||
export const LifecycleFilters = <T,>({
|
export const LifecycleFilters = ({
|
||||||
state,
|
state,
|
||||||
onChange,
|
onChange,
|
||||||
total,
|
total,
|
||||||
children,
|
children,
|
||||||
countData,
|
countData,
|
||||||
getStageCount,
|
|
||||||
sx,
|
sx,
|
||||||
}: ILifecycleFiltersBaseProps<T>) => {
|
}: ILifecycleFiltersBaseProps) => {
|
||||||
const current = state.lifecycle?.values ?? [];
|
const current = state.lifecycle?.values ?? [];
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@ -81,7 +76,7 @@ export const LifecycleFilters = <T,>({
|
|||||||
value === null
|
value === null
|
||||||
? !state.lifecycle
|
? !state.lifecycle
|
||||||
: current.includes(value);
|
: current.includes(value);
|
||||||
const count = getStageCount(value, countData);
|
const count = value ? countData?.[value] : total;
|
||||||
const dynamicLabel =
|
const dynamicLabel =
|
||||||
isActive && Number.isInteger(total)
|
isActive && Number.isInteger(total)
|
||||||
? `${label} (${total === count ? total : `${total} of ${count}`})`
|
? `${label} (${total === count ? total : `${total} of ${count}`})`
|
||||||
|
@ -40,14 +40,20 @@ export const FeatureLifecycleFilters: FC<ILifecycleFiltersProps> = ({
|
|||||||
children,
|
children,
|
||||||
}) => {
|
}) => {
|
||||||
const { lifecycleCount } = useLifecycleCount();
|
const { lifecycleCount } = useLifecycleCount();
|
||||||
|
const countData = Object.entries(lifecycleCount || {}).reduce(
|
||||||
|
(acc, [key, value]) => {
|
||||||
|
acc[key === 'preLive' ? 'pre-live' : key] = value;
|
||||||
|
return acc;
|
||||||
|
},
|
||||||
|
{} as Record<string, number>,
|
||||||
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<LifecycleFilters
|
<LifecycleFilters
|
||||||
state={state}
|
state={state}
|
||||||
onChange={onChange}
|
onChange={onChange}
|
||||||
total={total}
|
total={total}
|
||||||
countData={lifecycleCount}
|
countData={countData}
|
||||||
getStageCount={getStageCount}
|
|
||||||
sx={{
|
sx={{
|
||||||
padding: (theme) =>
|
padding: (theme) =>
|
||||||
`${theme.spacing(1.5)} ${theme.spacing(3)} 0 ${theme.spacing(3)}`,
|
`${theme.spacing(1.5)} ${theme.spacing(3)} 0 ${theme.spacing(3)}`,
|
||||||
|
@ -1,30 +1,9 @@
|
|||||||
import type { FC, ReactNode } from 'react';
|
import type { FC, ReactNode } from 'react';
|
||||||
|
import { useEffect } from 'react';
|
||||||
import type { FilterItemParamHolder } from '../../../filter/Filters/Filters.tsx';
|
import type { FilterItemParamHolder } from '../../../filter/Filters/Filters.tsx';
|
||||||
import type { LifecycleStage } from '../../../feature/FeatureView/FeatureOverview/FeatureLifecycle/LifecycleStage.tsx';
|
|
||||||
import { useProjectStatus } from 'hooks/api/getters/useProjectStatus/useProjectStatus';
|
import { useProjectStatus } from 'hooks/api/getters/useProjectStatus/useProjectStatus';
|
||||||
import { LifecycleFilters } from '../../../common/LifecycleFilters/LifecycleFilters.tsx';
|
import { LifecycleFilters } from '../../../common/LifecycleFilters/LifecycleFilters.tsx';
|
||||||
|
|
||||||
const getStageCount = (
|
|
||||||
lifecycle: LifecycleStage['name'] | null,
|
|
||||||
lifecycleSummary?: { [key: string]: { currentFlags: number } },
|
|
||||||
) => {
|
|
||||||
if (!lifecycleSummary) {
|
|
||||||
return undefined;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (lifecycle === null) {
|
|
||||||
return (
|
|
||||||
(lifecycleSummary.initial?.currentFlags || 0) +
|
|
||||||
(lifecycleSummary.preLive?.currentFlags || 0) +
|
|
||||||
(lifecycleSummary.live?.currentFlags || 0) +
|
|
||||||
(lifecycleSummary.completed?.currentFlags || 0)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
const key = lifecycle === 'pre-live' ? 'preLive' : lifecycle;
|
|
||||||
return lifecycleSummary[key]?.currentFlags;
|
|
||||||
};
|
|
||||||
|
|
||||||
interface IProjectLifecycleFiltersProps {
|
interface IProjectLifecycleFiltersProps {
|
||||||
projectId: string;
|
projectId: string;
|
||||||
state: FilterItemParamHolder;
|
state: FilterItemParamHolder;
|
||||||
@ -41,7 +20,26 @@ export const ProjectLifecycleFilters: FC<IProjectLifecycleFiltersProps> = ({
|
|||||||
children,
|
children,
|
||||||
}) => {
|
}) => {
|
||||||
const { data } = useProjectStatus(projectId);
|
const { data } = useProjectStatus(projectId);
|
||||||
const lifecycleSummary = data?.lifecycleSummary;
|
const lifecycleSummary = Object.entries(
|
||||||
|
data?.lifecycleSummary || {},
|
||||||
|
).reduce(
|
||||||
|
(acc, [key, value]) => {
|
||||||
|
acc[key === 'preLive' ? 'pre-live' : key] = value.currentFlags || 0;
|
||||||
|
return acc;
|
||||||
|
},
|
||||||
|
{} as Record<string, number>,
|
||||||
|
);
|
||||||
|
|
||||||
|
const isArchivedFilterActive = state.archived?.values?.includes('true');
|
||||||
|
useEffect(() => {
|
||||||
|
if (isArchivedFilterActive && state.lifecycle) {
|
||||||
|
onChange({ ...state, lifecycle: null });
|
||||||
|
}
|
||||||
|
}, [isArchivedFilterActive, state, onChange]);
|
||||||
|
|
||||||
|
if (isArchivedFilterActive) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<LifecycleFilters
|
<LifecycleFilters
|
||||||
@ -49,7 +47,6 @@ export const ProjectLifecycleFilters: FC<IProjectLifecycleFiltersProps> = ({
|
|||||||
onChange={onChange}
|
onChange={onChange}
|
||||||
total={total}
|
total={total}
|
||||||
countData={lifecycleSummary}
|
countData={lifecycleSummary}
|
||||||
getStageCount={getStageCount}
|
|
||||||
>
|
>
|
||||||
{children}
|
{children}
|
||||||
</LifecycleFilters>
|
</LifecycleFilters>
|
||||||
|
Loading…
Reference in New Issue
Block a user