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

feat: archived row styling (#8608)

1. Added badge
2. Added archived row styling. Button not clickable and gray


![image](https://github.com/user-attachments/assets/a15a3b1d-4caa-448b-a9ed-b60de4115cb7)
This commit is contained in:
Jaanus Sellin 2024-10-31 12:30:00 +02:00 committed by GitHub
parent 5033ed6b45
commit 90ed7b6079
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 68 additions and 6 deletions

View File

@ -17,6 +17,7 @@ test('Preview parent feature', async () => {
feature='featureA' feature='featureA'
project='default' project='default'
type='release' type='release'
archivedAt={null}
searchQuery='' searchQuery=''
dependencyType='child' dependencyType='child'
onTypeClick={() => {}} onTypeClick={() => {}}
@ -44,6 +45,7 @@ test('Preview child features', async () => {
feature='featureA' feature='featureA'
project='default' project='default'
type='release' type='release'
archivedAt={null}
searchQuery='' searchQuery=''
dependencyType='parent' dependencyType='parent'
onTypeClick={() => {}} onTypeClick={() => {}}

View File

@ -22,6 +22,7 @@ test('Display full overview information', () => {
type: 'release', type: 'release',
dependencyType: 'child', dependencyType: 'child',
project: 'my_project', project: 'my_project',
archivedAt: null,
}, },
}} }}
/>, />,
@ -54,6 +55,7 @@ test('Display minimal overview information', () => {
type: '', type: '',
dependencyType: null, dependencyType: null,
project: 'my_project', project: 'my_project',
archivedAt: null,
}, },
}} }}
/>, />,
@ -65,3 +67,26 @@ test('Display minimal overview information', () => {
'/projects/my_project/features/my_feature', '/projects/my_project/features/my_feature',
); );
}); });
test('show archived information', () => {
const FeatureOverviewCell = makeFeatureOverviewCell(noOp, noOp);
render(
<FeatureOverviewCell
row={{
original: {
name: 'archived_feature',
tags: [],
description: '',
type: '',
dependencyType: null,
project: 'my_project',
archivedAt: '2024-11-09',
},
}}
/>,
);
expect(screen.getByText('archived_feature')).toBeInTheDocument();
expect(screen.getByText('Archived')).toBeInTheDocument();
});

View File

@ -22,6 +22,7 @@ interface IFeatureNameCellProps {
| 'tags' | 'tags'
| 'type' | 'type'
| 'dependencyType' | 'dependencyType'
| 'archivedAt'
>; >;
}; };
} }
@ -138,6 +139,22 @@ const FeatureName: FC<{
); );
}; };
const ArchivedFeatureName: FC<{
feature: string;
searchQuery: string;
}> = ({ feature, searchQuery }) => {
return (
<Box
sx={(theme) => ({
fontWeight: theme.typography.fontWeightBold,
color: theme.palette.neutral.main,
})}
>
<Highlighter search={searchQuery}>{feature}</Highlighter>
</Box>
);
};
const RestTags: FC<{ tags: string[]; onClick: (tag: string) => void }> = ({ const RestTags: FC<{ tags: string[]; onClick: (tag: string) => void }> = ({
tags, tags,
onClick, onClick,
@ -236,6 +253,7 @@ const DependencyPreview: FC<{ feature: string; project: string }> = ({
export const PrimaryFeatureInfo: FC<{ export const PrimaryFeatureInfo: FC<{
project: string; project: string;
feature: string; feature: string;
archivedAt: string | null;
searchQuery: string; searchQuery: string;
type: string; type: string;
dependencyType: string; dependencyType: string;
@ -244,6 +262,7 @@ export const PrimaryFeatureInfo: FC<{
}> = ({ }> = ({
project, project,
feature, feature,
archivedAt,
type, type,
searchQuery, searchQuery,
dependencyType, dependencyType,
@ -275,11 +294,19 @@ export const PrimaryFeatureInfo: FC<{
return ( return (
<FeatureNameAndType data-loading> <FeatureNameAndType data-loading>
<TypeIcon /> <TypeIcon />
<FeatureName {archivedAt ? (
project={project} <ArchivedFeatureName
feature={feature} feature={feature}
searchQuery={searchQuery} searchQuery={searchQuery}
/> />
) : (
<FeatureName
project={project}
feature={feature}
searchQuery={searchQuery}
/>
)}
<ConditionallyRender <ConditionallyRender
condition={Boolean(dependencyType)} condition={Boolean(dependencyType)}
show={ show={
@ -305,6 +332,11 @@ export const PrimaryFeatureInfo: FC<{
</HtmlTooltip> </HtmlTooltip>
} }
/> />
{archivedAt && (
<HtmlTooltip arrow title={archivedAt} describeChild>
<Badge color='neutral'>Archived</Badge>
</HtmlTooltip>
)}
</FeatureNameAndType> </FeatureNameAndType>
); );
}; };
@ -343,6 +375,7 @@ export const FeatureOverviewCell =
<PrimaryFeatureInfo <PrimaryFeatureInfo
project={row.original.project || ''} project={row.original.project || ''}
feature={row.original.name} feature={row.original.name}
archivedAt={row.original.archivedAt}
searchQuery={searchQuery} searchQuery={searchQuery}
type={row.original.type || ''} type={row.original.type || ''}
dependencyType={row.original.dependencyType || ''} dependencyType={row.original.dependencyType || ''}

View File

@ -389,6 +389,7 @@ export const ProjectFeatureToggles = ({
project: 'project', project: 'project',
segments: [], segments: [],
stale: false, stale: false,
archivedAt: null,
environments: [ environments: [
{ {
name: 'development', name: 'development',

View File

@ -19,7 +19,7 @@ export interface FeatureSearchResponseSchema {
* The date the feature was archived * The date the feature was archived
* @nullable * @nullable
*/ */
archivedAt?: string | null; archivedAt: string | null;
/** /**
* The date the feature was created * The date the feature was created
* @nullable * @nullable

View File

@ -25,6 +25,7 @@ export const featureSearchResponseSchema = {
'createdBy', 'createdBy',
'environments', 'environments',
'segments', 'segments',
'archivedAt',
], ],
description: 'A feature flag definition', description: 'A feature flag definition',
properties: { properties: {