Skip to content

Commit 91bb6ec

Browse files
Merge pull request #160 from lokanandaprabhu/feature/SRVKP-6637
SRVKP-6637: Remove All options from project dropdown on overview page for user have no access to all projects
2 parents 14b0032 + ef99454 commit 91bb6ec

File tree

4 files changed

+58
-28
lines changed

4 files changed

+58
-28
lines changed

src/components/pipelines-overview/NamespaceDropdown.tsx

+9-3
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,13 @@ import { alphanumericCompare } from './utils';
1111
import { useTranslation } from 'react-i18next';
1212

1313
import './PipelinesOverview.scss';
14-
import { useK8sWatchResource } from '@openshift-console/dynamic-plugin-sdk';
14+
import {
15+
useFlag,
16+
useK8sWatchResource,
17+
} from '@openshift-console/dynamic-plugin-sdk';
1518
import { Project } from '../../types/openshift';
1619
import { ALL_NAMESPACES_KEY } from '../../consts';
20+
import { FLAGS } from '../../types';
1721

1822
interface NameSpaceDropdownProps {
1923
selected: string;
@@ -26,6 +30,7 @@ const NameSpaceDropdown: React.FC<NameSpaceDropdownProps> = ({
2630
}) => {
2731
const { t } = useTranslation('plugin__pipelines-console-plugin');
2832
const [isOpen, setValue] = React.useState(false);
33+
const canListNS = useFlag(FLAGS.CAN_LIST_NS);
2934
const toggleIsOpen = React.useCallback(() => setValue((v) => !v), []);
3035
const setClosed = React.useCallback(() => setValue(false), []);
3136

@@ -53,8 +58,9 @@ const NameSpaceDropdown: React.FC<NameSpaceDropdownProps> = ({
5358
items.push({ title: selected, key: selected }); // Add current namespace if it isn't included
5459
}
5560
items.sort((a, b) => alphanumericCompare(a.title, b.title));
56-
57-
items.unshift({ title: allNamespacesTitle, key: ALL_NAMESPACES_KEY });
61+
if (canListNS) {
62+
items.unshift({ title: allNamespacesTitle, key: ALL_NAMESPACES_KEY });
63+
}
5864
return items;
5965
}, [projects, projectsLoaded]);
6066

src/components/pipelines-overview/PipelinesOverviewPage.tsx

+22-12
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
import * as React from 'react';
22
import { useTranslation } from 'react-i18next';
3-
import PipelineRunsStatusCard from './PipelineRunsStatusCard';
43
import { Flex, FlexItem } from '@patternfly/react-core';
4+
import PipelineRunsStatusCard from './PipelineRunsStatusCard';
5+
import {
6+
useActiveNamespace,
7+
useFlag,
8+
} from '@openshift-console/dynamic-plugin-sdk';
59
import PipelinesRunsDurationCard from './PipelineRunsDurationCard';
610
import PipelinesRunsTotalCard from './PipelineRunsTotalCard';
711
import PipelinesRunsNumbersChart from './PipelineRunsNumbersChart';
@@ -11,19 +15,18 @@ import PipelineRunsListPage from './list-pages/PipelineRunsListPage';
1115
import TimeRangeDropdown from './TimeRangeDropdown';
1216
import RefreshDropdown from './RefreshDropdown';
1317
import { IntervalOptions, TimeRangeOptions, useQueryParams } from './utils';
14-
import { useActiveNamespace } from '@openshift-console/dynamic-plugin-sdk';
18+
import { ALL_NAMESPACES_KEY } from '../../consts';
19+
import AllProjectsPage from '../projects-list/AllProjectsPage';
20+
import { FLAGS } from '../../types';
1521

1622
const PipelinesOverviewPage: React.FC = () => {
1723
const { t } = useTranslation('plugin__pipelines-console-plugin');
24+
const canListNS = useFlag(FLAGS.CAN_LIST_NS);
1825
const [activeNamespace, setActiveNamespace] = useActiveNamespace();
19-
const [namespace, setNamespace] = React.useState(activeNamespace);
2026
const [timespan, setTimespan] = React.useState(parsePrometheusDuration('1d'));
2127
const [interval, setInterval] = React.useState(
2228
parsePrometheusDuration('30s'),
2329
);
24-
React.useEffect(() => {
25-
setActiveNamespace(namespace);
26-
}, [namespace]);
2730

2831
useQueryParams({
2932
key: 'refreshinterval',
@@ -45,6 +48,10 @@ const PipelinesOverviewPage: React.FC = () => {
4548
loadFormat: parsePrometheusDuration,
4649
});
4750

51+
if (!canListNS && activeNamespace === ALL_NAMESPACES_KEY) {
52+
return <AllProjectsPage pageTitle={t('Overview')} />;
53+
}
54+
4855
return (
4956
<>
5057
<div className="co-m-nav-title">
@@ -54,7 +61,10 @@ const PipelinesOverviewPage: React.FC = () => {
5461
</div>
5562
<Flex className="project-dropdown-label__flex">
5663
<FlexItem>
57-
<NameSpaceDropdown selected={namespace} setSelected={setNamespace} />
64+
<NameSpaceDropdown
65+
selected={activeNamespace}
66+
setSelected={setActiveNamespace}
67+
/>
5868
</FlexItem>
5969
<FlexItem>
6070
<TimeRangeDropdown timespan={timespan} setTimespan={setTimespan} />
@@ -68,7 +78,7 @@ const PipelinesOverviewPage: React.FC = () => {
6878
timespan={timespan}
6979
domain={{ y: [0, 100] }}
7080
bordered={true}
71-
namespace={namespace}
81+
namespace={activeNamespace}
7282
interval={interval}
7383
/>
7484

@@ -79,7 +89,7 @@ const PipelinesOverviewPage: React.FC = () => {
7989
className="pipelines-overview__cards"
8090
>
8191
<PipelinesRunsDurationCard
82-
namespace={namespace}
92+
namespace={activeNamespace}
8393
timespan={timespan}
8494
interval={interval}
8595
bordered={true}
@@ -91,7 +101,7 @@ const PipelinesOverviewPage: React.FC = () => {
91101
className="pipelines-overview__cards"
92102
>
93103
<PipelinesRunsTotalCard
94-
namespace={namespace}
104+
namespace={activeNamespace}
95105
timespan={timespan}
96106
interval={interval}
97107
bordered={true}
@@ -103,7 +113,7 @@ const PipelinesOverviewPage: React.FC = () => {
103113
className="pipelines-overview__cards"
104114
>
105115
<PipelinesRunsNumbersChart
106-
namespace={namespace}
116+
namespace={activeNamespace}
107117
timespan={timespan}
108118
interval={interval}
109119
domain={{ y: [0, 500] }}
@@ -114,7 +124,7 @@ const PipelinesOverviewPage: React.FC = () => {
114124
</div>
115125
<div className="pipelines-metrics__background">
116126
<PipelineRunsListPage
117-
namespace={namespace}
127+
namespace={activeNamespace}
118128
timespan={timespan}
119129
interval={interval}
120130
/>

src/components/pipelines-overview/PipelinesOverviewPageK8s.tsx

+21-11
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,34 @@
11
import * as React from 'react';
22
import { useTranslation } from 'react-i18next';
33
import { Flex, FlexItem } from '@patternfly/react-core';
4+
import {
5+
useActiveNamespace,
6+
useFlag,
7+
} from '@openshift-console/dynamic-plugin-sdk';
48
import { formatPrometheusDuration, parsePrometheusDuration } from './dateTime';
59
import NameSpaceDropdown from './NamespaceDropdown';
610
import TimeRangeDropdown from './TimeRangeDropdown';
711
import RefreshDropdown from './RefreshDropdown';
812
import { IntervalOptions, TimeRangeOptionsK8s, useQueryParams } from './utils';
9-
import { useActiveNamespace } from '@openshift-console/dynamic-plugin-sdk';
1013
import PipelineRunsStatusCardK8s from './PipelineRunsStatusCardK8s';
1114
import PipelineRunsNumbersChartK8s from './PipelineRunsNumbersChartK8s';
1215
import PipelineRunsTotalCardK8s from './PipelineRunsTotalCardK8s';
1316
import PipelineRunsDurationCardK8s from './PipelineRunsDurationCardK8s';
1417
import PipelineRunsListPageK8s from './list-pages/PipelineRunsListPageK8s';
1518
import { K8sDataLimitationAlert } from './K8sDataLimitationAlert';
19+
import { FLAGS } from '../../types';
20+
import { ALL_NAMESPACES_KEY } from '../../consts';
21+
import AllProjectsPage from '../projects-list/AllProjectsPage';
1622
import './PipelinesOverview.scss';
1723

1824
const PipelinesOverviewPageK8s: React.FC = () => {
1925
const { t } = useTranslation('plugin__pipelines-console-plugin');
26+
const canListNS = useFlag(FLAGS.CAN_LIST_NS);
2027
const [activeNamespace, setActiveNamespace] = useActiveNamespace();
21-
const [namespace, setNamespace] = React.useState(activeNamespace);
2228
const [timespan, setTimespan] = React.useState(parsePrometheusDuration('1d'));
2329
const [interval, setInterval] = React.useState(
2430
parsePrometheusDuration('30s'),
2531
);
26-
React.useEffect(() => {
27-
setActiveNamespace(namespace);
28-
}, [namespace]);
2932

3033
useQueryParams({
3134
key: 'refreshinterval',
@@ -47,6 +50,10 @@ const PipelinesOverviewPageK8s: React.FC = () => {
4750
loadFormat: parsePrometheusDuration,
4851
});
4952

53+
if (!canListNS && activeNamespace === ALL_NAMESPACES_KEY) {
54+
return <AllProjectsPage pageTitle={t('Overview')} />;
55+
}
56+
5057
return (
5158
<>
5259
<div className="co-m-nav-title">
@@ -59,7 +66,10 @@ const PipelinesOverviewPageK8s: React.FC = () => {
5966
</div>
6067
<Flex className="project-dropdown-label__flex">
6168
<FlexItem>
62-
<NameSpaceDropdown selected={namespace} setSelected={setNamespace} />
69+
<NameSpaceDropdown
70+
selected={activeNamespace}
71+
setSelected={setActiveNamespace}
72+
/>
6373
</FlexItem>
6474
<FlexItem>
6575
<TimeRangeDropdown timespan={timespan} setTimespan={setTimespan} />
@@ -73,7 +83,7 @@ const PipelinesOverviewPageK8s: React.FC = () => {
7383
timespan={timespan}
7484
domain={{ y: [0, 100] }}
7585
bordered={true}
76-
namespace={namespace}
86+
namespace={activeNamespace}
7787
interval={interval}
7888
/>
7989

@@ -84,7 +94,7 @@ const PipelinesOverviewPageK8s: React.FC = () => {
8494
className="pipelines-overview__cards"
8595
>
8696
<PipelineRunsDurationCardK8s
87-
namespace={namespace}
97+
namespace={activeNamespace}
8898
timespan={timespan}
8999
interval={interval}
90100
bordered={true}
@@ -96,7 +106,7 @@ const PipelinesOverviewPageK8s: React.FC = () => {
96106
className="pipelines-overview__cards"
97107
>
98108
<PipelineRunsTotalCardK8s
99-
namespace={namespace}
109+
namespace={activeNamespace}
100110
timespan={timespan}
101111
interval={interval}
102112
bordered={true}
@@ -108,7 +118,7 @@ const PipelinesOverviewPageK8s: React.FC = () => {
108118
className="pipelines-overview__cards"
109119
>
110120
<PipelineRunsNumbersChartK8s
111-
namespace={namespace}
121+
namespace={activeNamespace}
112122
timespan={timespan}
113123
interval={interval}
114124
domain={{ y: [0, 500] }}
@@ -119,7 +129,7 @@ const PipelinesOverviewPageK8s: React.FC = () => {
119129
</div>
120130
<div className="pipelines-metrics__background">
121131
<PipelineRunsListPageK8s
122-
namespace={namespace}
132+
namespace={activeNamespace}
123133
timespan={timespan}
124134
interval={interval}
125135
/>

src/components/projects-list/AllProjectsPage.tsx

+6-2
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,15 @@ import { useTranslation } from 'react-i18next';
1010
import ProjectsList from './ProjectsList';
1111
import './AllProjectsPage.scss';
1212

13-
const AllProjectsPage = () => {
13+
interface AllProjectsPageProps {
14+
pageTitle?: string;
15+
}
16+
17+
const AllProjectsPage: React.FC<AllProjectsPageProps> = ({ pageTitle }) => {
1418
const { t } = useTranslation('plugin__pipelines-console-plugin');
1519
return (
1620
<>
17-
<ListPageHeader title={t('Pipelines')} />
21+
<ListPageHeader title={pageTitle || t('Pipelines')} />
1822
<TextContent className="cp-all-projects-page-description">
1923
<Text component={TextVariants.p}>
2024
{t('Select a Project to view its details')}

0 commit comments

Comments
 (0)