Skip to content

Commit cac94b9

Browse files
authored
Merge branch 'main' into kfluxui-194
2 parents cf24cdd + 850c442 commit cac94b9

File tree

20 files changed

+296
-225
lines changed

20 files changed

+296
-225
lines changed

codecv.yml

+4-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,10 @@ coverage:
99
project:
1010
default:
1111
target: auto
12-
threshold: 0.2%
12+
threshold: 1%
13+
patch:
14+
default:
15+
informational: true
1316

1417
ignore:
1518
- "**/*__data__*/*.ts"

src/components/ApplicationDetails/tabs/overview/visualization/hooks/useAppWorkflowData.ts

+9-30
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ import { useAppApplicationTestNodes } from './useAppApplicationTestNodes';
1414
import { useAppBuildNodes } from './useAppBuildNodes';
1515
import { useAppComponentsNodes } from './useAppComponentsNodes';
1616
import { useAppReleaseNodes } from './useAppReleaseNodes';
17-
import { useAppReleasePlanNodes } from './useAppReleasePlanNodes';
1817

1918
export const useAppWorkflowData = (
2019
applicationName: string,
@@ -63,35 +62,17 @@ export const useAppWorkflowData = (
6362
applicationIntegrationTestNodes,
6463
]);
6564

66-
const [releaseNodes, releaseGroup, releaseTasks, releasesLoaded, releasesError] =
67-
useAppReleaseNodes(
68-
namespace,
69-
applicationName,
70-
expanded ? applicationIntegrationTestTasks : [testsGroup?.id ?? ''],
71-
expanded,
72-
);
73-
74-
const [
75-
managedEnvironmentNodes,
76-
managedEnvironmentGroup,
77-
managedEnvironmentsLoaded,
78-
managedEnvironmentsError,
79-
] = useAppReleasePlanNodes(namespace, applicationName, releaseTasks, expanded);
65+
const [releaseNodes, releaseGroup, , releasesLoaded, releasesError] = useAppReleaseNodes(
66+
namespace,
67+
applicationName,
68+
expanded ? applicationIntegrationTestTasks : [testsGroup?.id ?? ''],
69+
expanded,
70+
);
8071

8172
const allResourcesLoaded: boolean =
82-
componentsLoaded &&
83-
buildsLoaded &&
84-
applicationTestsLoaded &&
85-
releasesLoaded &&
86-
managedEnvironmentsLoaded;
73+
componentsLoaded && buildsLoaded && applicationTestsLoaded && releasesLoaded;
8774

88-
const errors = [
89-
...componentsErrors,
90-
...buildsErrors,
91-
...applicationErrors,
92-
...releasesError,
93-
...managedEnvironmentsError,
94-
];
75+
const errors = [...componentsErrors, ...buildsErrors, ...applicationErrors, ...releasesError];
9576

9677
if (!allResourcesLoaded || errors.length > 0) {
9778
return [{ nodes: [], edges: [] }, allResourcesLoaded, errors];
@@ -103,7 +84,6 @@ export const useAppWorkflowData = (
10384
...(buildNodes?.length ? buildNodes : [buildGroup]),
10485
...applicationIntegrationTestNodes,
10586
...(releaseNodes?.length ? releaseNodes : [releaseGroup]),
106-
...(managedEnvironmentNodes?.length ? managedEnvironmentNodes : [managedEnvironmentGroup]),
10787
];
10888
const spacerNodes = getSpacerNodes(resourceNodes, NodeType.SPACER_NODE);
10989
const nodes = [
@@ -113,13 +93,12 @@ export const useAppWorkflowData = (
11393
buildGroup,
11494
testsGroup,
11595
releaseGroup,
116-
managedEnvironmentGroup,
11796
];
11897
const edges = getEdgesFromNodes(nodes, NodeType.SPACER_NODE);
11998

12099
return [{ nodes, edges }, true, errors];
121100
}
122-
const nodes = [componentGroup, buildGroup, testsGroup, releaseGroup, managedEnvironmentGroup];
101+
const nodes = [componentGroup, buildGroup, testsGroup, releaseGroup];
123102
const edges = getEdgesFromNodes(nodes, NodeType.SPACER_NODE);
124103

125104
return [{ nodes, edges }, true, errors];

src/components/ApplicationDetails/tabs/overview/visualization/utils/node-utils.ts

+7-16
Original file line numberDiff line numberDiff line change
@@ -114,23 +114,14 @@ export const getLinkDataForElement = (
114114
: {
115115
tab: 'integrationtests',
116116
};
117-
case WorkflowNodeType.STATIC_ENVIRONMENT:
118-
return {
119-
tab: 'deployments',
120-
filter:
121-
!groupNode && !isDisabled
122-
? { name: 'name', value: label }
123-
: { name: 'envType', value: 'default,static' },
124-
};
125-
case WorkflowNodeType.MANAGED_ENVIRONMENT:
126117
case WorkflowNodeType.RELEASE:
127-
return {
128-
tab: 'deployments',
129-
filter:
130-
!groupNode && !isDisabled
131-
? { name: 'name', value: label }
132-
: { name: 'envType', value: 'managed' },
133-
};
118+
return !groupNode && !isDisabled
119+
? {
120+
path: `/workspaces/${workspace}/applications/${
121+
element.getData().application
122+
}/releases/${label}`,
123+
}
124+
: { tab: 'releases' };
134125
default:
135126
return {
136127
tab: 'overview',

src/components/Applications/ApplicationListView.tsx

+46-10
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,20 @@ import {
55
EmptyStateBody,
66
PageSection,
77
PageSectionVariants,
8+
SearchInput,
89
Spinner,
910
Toolbar,
1011
ToolbarContent,
1112
ToolbarItem,
1213
} from '@patternfly/react-core';
14+
import { debounce } from 'lodash-es';
1315
import emptyStateImgUrl from '../../assets/Application.svg';
1416
import { useApplications } from '../../hooks/useApplications';
17+
import { useSearchParam } from '../../hooks/useSearchParam';
1518
import { ApplicationModel, ComponentModel } from '../../models';
1619
import { Table } from '../../shared';
1720
import AppEmptyState from '../../shared/components/empty-state/AppEmptyState';
21+
import FilteredEmptyState from '../../shared/components/empty-state/FilteredEmptyState';
1822
import { ApplicationKind } from '../../types';
1923
import { useApplicationBreadcrumbs } from '../../utils/breadcrumb-utils';
2024
import { useAccessReviewForModel } from '../../utils/rbac';
@@ -29,12 +33,29 @@ const ApplicationListView: React.FC<React.PropsWithChildren<unknown>> = () => {
2933
const applicationBreadcrumbs = useApplicationBreadcrumbs();
3034
const [canCreateApplication] = useAccessReviewForModel(ApplicationModel, 'create');
3135
const [canCreateComponent] = useAccessReviewForModel(ComponentModel, 'create');
36+
const [nameFilter, setNameFilter] = useSearchParam('name', '');
3237

3338
const [applications, loaded] = useApplications(namespace, workspace);
3439
applications?.sort(
3540
(app1, app2) =>
3641
+new Date(app2.metadata?.creationTimestamp) - +new Date(app1.metadata?.creationTimestamp),
3742
);
43+
const filteredApplications = React.useMemo(() => {
44+
const lowerCaseNameFilter = nameFilter.toLowerCase();
45+
return applications?.filter(
46+
(app) =>
47+
app.spec.displayName?.toLowerCase().includes(lowerCaseNameFilter) ??
48+
app.metadata.name.includes(lowerCaseNameFilter),
49+
);
50+
}, [nameFilter, applications]);
51+
52+
const onClearFilters = () => {
53+
setNameFilter('');
54+
};
55+
56+
const onNameInput = debounce((n: string) => {
57+
setNameFilter(n);
58+
}, 600);
3859

3960
if (!loaded) {
4061
return (
@@ -86,6 +107,17 @@ const ApplicationListView: React.FC<React.PropsWithChildren<unknown>> = () => {
86107
<>
87108
<Toolbar usePageInsets>
88109
<ToolbarContent>
110+
<ToolbarItem className="pf-v5-u-ml-0">
111+
<SearchInput
112+
name="nameInput"
113+
data-test="name-input-filter"
114+
type="search"
115+
aria-label="name filter"
116+
placeholder="Filter by name..."
117+
onChange={(_, n) => onNameInput(n)}
118+
value={nameFilter}
119+
/>
120+
</ToolbarItem>
89121
<ToolbarItem>
90122
<ButtonWithAccessTooltip
91123
variant="primary"
@@ -104,16 +136,20 @@ const ApplicationListView: React.FC<React.PropsWithChildren<unknown>> = () => {
104136
</ToolbarItem>
105137
</ToolbarContent>
106138
</Toolbar>
107-
<Table
108-
data={applications}
109-
aria-label="Application List"
110-
Header={ApplicationListHeader}
111-
Row={ApplicationListRow}
112-
loaded
113-
getRowProps={(obj: ApplicationKind) => ({
114-
id: obj.metadata?.name,
115-
})}
116-
/>
139+
{filteredApplications.length !== 0 ? (
140+
<Table
141+
data={filteredApplications}
142+
aria-label="Application List"
143+
Header={ApplicationListHeader}
144+
Row={ApplicationListRow}
145+
loaded
146+
getRowProps={(obj: ApplicationKind) => ({
147+
id: obj.metadata?.name,
148+
})}
149+
/>
150+
) : (
151+
<FilteredEmptyState onClearFilters={onClearFilters} />
152+
)}
117153
</>
118154
)}
119155
</PageSection>

0 commit comments

Comments
 (0)