1
0
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:
Tymoteusz Czech 2025-09-11 11:42:42 +02:00
parent 37ae29ca5a
commit ca86a4e428
No known key found for this signature in database
GPG Key ID: 133555230D88D75F
3 changed files with 34 additions and 36 deletions

View File

@ -25,16 +25,12 @@ const StyledChip = styled(Chip, {
},
}));
interface ILifecycleFiltersBaseProps<T> {
interface ILifecycleFiltersBaseProps {
state: FilterItemParamHolder;
onChange: (value: FilterItemParamHolder) => void;
total?: number;
children?: ReactNode;
countData?: T;
getStageCount: (
lifecycle: LifecycleStage['name'] | null,
data?: T,
) => number | undefined;
countData?: Record<LifecycleStage['name'], number>;
sx?: SxProps<Theme>;
}
@ -62,15 +58,14 @@ const lifecycleOptions: {
{ label: 'Cleanup', value: 'completed' },
];
export const LifecycleFilters = <T,>({
export const LifecycleFilters = ({
state,
onChange,
total,
children,
countData,
getStageCount,
sx,
}: ILifecycleFiltersBaseProps<T>) => {
}: ILifecycleFiltersBaseProps) => {
const current = state.lifecycle?.values ?? [];
return (
@ -81,7 +76,7 @@ export const LifecycleFilters = <T,>({
value === null
? !state.lifecycle
: current.includes(value);
const count = getStageCount(value, countData);
const count = value ? countData?.[value] : total;
const dynamicLabel =
isActive && Number.isInteger(total)
? `${label} (${total === count ? total : `${total} of ${count}`})`

View File

@ -40,14 +40,20 @@ export const FeatureLifecycleFilters: FC<ILifecycleFiltersProps> = ({
children,
}) => {
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 (
<LifecycleFilters
state={state}
onChange={onChange}
total={total}
countData={lifecycleCount}
getStageCount={getStageCount}
countData={countData}
sx={{
padding: (theme) =>
`${theme.spacing(1.5)} ${theme.spacing(3)} 0 ${theme.spacing(3)}`,

View File

@ -1,30 +1,9 @@
import type { FC, ReactNode } from 'react';
import { useEffect } from 'react';
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 { 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 {
projectId: string;
state: FilterItemParamHolder;
@ -41,7 +20,26 @@ export const ProjectLifecycleFilters: FC<IProjectLifecycleFiltersProps> = ({
children,
}) => {
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 (
<LifecycleFilters
@ -49,7 +47,6 @@ export const ProjectLifecycleFilters: FC<IProjectLifecycleFiltersProps> = ({
onChange={onChange}
total={total}
countData={lifecycleSummary}
getStageCount={getStageCount}
>
{children}
</LifecycleFilters>