Skip to content

Commit c4f4d44

Browse files
authored
MTV-3731: "Tips and tricks" panel is now persistent available/displayed on all pages (#2107)
Resolves: MTV-3731 Signed-off-by: Sharon Gratch <[email protected]>
1 parent db488a4 commit c4f4d44

36 files changed

+561
-191
lines changed

knip.config.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ export default {
55
'src/overview/OverviewPage.tsx',
66
'src/overview/hooks/OverviewContext.ts',
77
'src/overview/hooks/useOverviewContext.ts',
8+
'src/onlineHelp/tipsAndTricksDrawer/hooks/learningExperienceContext.ts',
9+
'src/onlineHelp/tipsAndTricksDrawer/hooks/useLearningExperienceContext.ts',
810

911
'src/providers/create/ProvidersCreatePage.tsx',
1012
'src/providers/list/ProvidersListPage.tsx',

src/modules/NetworkMaps/views/details/NetworkMapDetailsPage.tsx

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { type FC, memo } from 'react';
2+
import TipsAndTricksDrawer from 'src/onlineHelp/tipsAndTricksDrawer/TipsAndTricksDrawer';
23
import { useForkliftTranslation } from 'src/utils/i18n';
34

45
import { HorizontalNav, type K8sModel } from '@openshift-console/dynamic-plugin-sdk';
@@ -38,7 +39,11 @@ const NetworkMapDetailsPageInternal: FC<{
3839
const NetworkMapDetailsPageInternalMemo = memo(NetworkMapDetailsPageInternal);
3940

4041
const NetworkMapDetailsPage: FC<NetworkMapDetailsPageProps> = ({ name, namespace }) => {
41-
return <NetworkMapDetailsPageInternalMemo name={name} namespace={namespace} />;
42+
return (
43+
<TipsAndTricksDrawer>
44+
<NetworkMapDetailsPageInternalMemo name={name} namespace={namespace} />;
45+
</TipsAndTricksDrawer>
46+
);
4247
};
4348
NetworkMapDetailsPage.displayName = 'NetworkMapDetailsPage';
4449

src/modules/NetworkMaps/views/list/NetworkMapsListPage.tsx

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { loadUserSettings } from 'src/components/common/Page/userSettings';
44
import StandardPage from 'src/components/page/StandardPage';
55
import useGetDeleteAndEditAccessReview from 'src/modules/Providers/hooks/useGetDeleteAndEditAccessReview';
66
import NetworkMapsEmptyState from 'src/networkMaps/components/NetworkMapsEmptyState';
7+
import TipsAndTricksDrawer from 'src/onlineHelp/tipsAndTricksDrawer/TipsAndTricksDrawer';
78

89
import {
910
NetworkMapModel,
@@ -127,23 +128,25 @@ const NetworkMapsListPage: FC<{
127128
}));
128129

129130
return (
130-
<StandardPage<NetworkMapData>
131-
data-testid="network-maps-list"
132-
{...(permissions.canCreate && {
133-
addButton: <NetworkMapsAddButton namespace={namespace} testId="add-network-map-button" />,
134-
})}
135-
dataSource={[data || [], networkMapsLoaded, networkMapsLoadError]}
136-
RowMapper={NetworkMapRow}
137-
fieldsMetadata={fieldsMetadata}
138-
namespace={namespace}
139-
title={t('Network maps')}
140-
titleHelpContent={t(
141-
'Network maps ensure that the network configurations of your migrating virtual machines (VMs) are correctly translated and applied in the target environment.',
142-
)}
143-
userSettings={userSettings}
144-
customNoResultsFound={<NetworkMapsEmptyState namespace={namespace} />}
145-
page={1}
146-
/>
131+
<TipsAndTricksDrawer>
132+
<StandardPage<NetworkMapData>
133+
data-testid="network-maps-list"
134+
{...(permissions.canCreate && {
135+
addButton: <NetworkMapsAddButton namespace={namespace} testId="add-network-map-button" />,
136+
})}
137+
dataSource={[data || [], networkMapsLoaded, networkMapsLoadError]}
138+
RowMapper={NetworkMapRow}
139+
fieldsMetadata={fieldsMetadata}
140+
namespace={namespace}
141+
title={t('Network maps')}
142+
titleHelpContent={t(
143+
'Network maps ensure that the network configurations of your migrating virtual machines (VMs) are correctly translated and applied in the target environment.',
144+
)}
145+
userSettings={userSettings}
146+
customNoResultsFound={<NetworkMapsEmptyState namespace={namespace} />}
147+
page={1}
148+
/>
149+
</TipsAndTricksDrawer>
147150
);
148151
};
149152

src/modules/StorageMaps/views/details/StorageMapDetailsPage.tsx

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { type FC, memo } from 'react';
2+
import TipsAndTricksDrawer from 'src/onlineHelp/tipsAndTricksDrawer/TipsAndTricksDrawer';
23
import { useForkliftTranslation } from 'src/utils/i18n';
34

45
import { HorizontalNav, type K8sModel } from '@openshift-console/dynamic-plugin-sdk';
@@ -38,7 +39,11 @@ const StorageMapDetailsPageInternal: FC<{
3839
const StorageMapDetailsPageInternalMemo = memo(StorageMapDetailsPageInternal);
3940

4041
const StorageMapDetailsPage: FC<StorageMapDetailsPageProps> = ({ name, namespace }) => {
41-
return <StorageMapDetailsPageInternalMemo name={name} namespace={namespace} />;
42+
return (
43+
<TipsAndTricksDrawer>
44+
<StorageMapDetailsPageInternalMemo name={name} namespace={namespace} />
45+
</TipsAndTricksDrawer>
46+
);
4247
};
4348
StorageMapDetailsPage.displayName = 'StorageMapDetailsPage';
4449

src/modules/StorageMaps/views/list/StorageMapsListPage.tsx

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { enumToTuple } from 'src/components/common/FilterGroup/helpers';
33
import { loadUserSettings } from 'src/components/common/Page/userSettings';
44
import StandardPage from 'src/components/page/StandardPage';
55
import useGetDeleteAndEditAccessReview from 'src/modules/Providers/hooks/useGetDeleteAndEditAccessReview';
6+
import TipsAndTricksDrawer from 'src/onlineHelp/tipsAndTricksDrawer/TipsAndTricksDrawer';
67
import StorageMapsEmptyState from 'src/storageMaps/components/StorageMapsEmptyState';
78

89
import {
@@ -127,23 +128,25 @@ const StorageMapsListPage: FC<{
127128
}));
128129

129130
return (
130-
<StandardPage<StorageMapData>
131-
data-testid="network-maps-list"
132-
{...(permissions.canCreate && {
133-
addButton: <StorageMapsAddButton namespace={namespace} testId="add-storage-map-button" />,
134-
})}
135-
dataSource={[data || [], StorageMapsLoaded, StorageMapsLoadError]}
136-
RowMapper={StorageMapRow}
137-
fieldsMetadata={fieldsMetadata}
138-
namespace={namespace}
139-
title={t('Storage maps')}
140-
titleHelpContent={t(
141-
'Storage maps define how the storage of source VMs will be provisioned on the target cluster by linking source storage entities to target storage classes.',
142-
)}
143-
userSettings={userSettings}
144-
customNoResultsFound={<StorageMapsEmptyState namespace={namespace} />}
145-
page={1}
146-
/>
131+
<TipsAndTricksDrawer>
132+
<StandardPage<StorageMapData>
133+
data-testid="network-maps-list"
134+
{...(permissions.canCreate && {
135+
addButton: <StorageMapsAddButton namespace={namespace} testId="add-storage-map-button" />,
136+
})}
137+
dataSource={[data || [], StorageMapsLoaded, StorageMapsLoadError]}
138+
RowMapper={StorageMapRow}
139+
fieldsMetadata={fieldsMetadata}
140+
namespace={namespace}
141+
title={t('Storage maps')}
142+
titleHelpContent={t(
143+
'Storage maps define how the storage of source VMs will be provisioned on the target cluster by linking source storage entities to target storage classes.',
144+
)}
145+
userSettings={userSettings}
146+
customNoResultsFound={<StorageMapsEmptyState namespace={namespace} />}
147+
page={1}
148+
/>
149+
</TipsAndTricksDrawer>
147150
);
148151
};
149152

src/networkMaps/create/NetworkMapCreatePage.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import type { FC } from 'react';
2+
import TipsAndTricksDrawer from 'src/onlineHelp/tipsAndTricksDrawer/TipsAndTricksDrawer';
23

34
import { PageSection, PageSectionTypes, Title } from '@patternfly/react-core';
45
import { useForkliftTranslation } from '@utils/i18n';
@@ -9,7 +10,7 @@ const NetworkMapCreatePage: FC = () => {
910
const { t } = useForkliftTranslation();
1011

1112
return (
12-
<>
13+
<TipsAndTricksDrawer>
1314
<PageSection hasBodyWrapper={false}>
1415
<Title headingLevel="h2">{t('Create network map')}</Title>
1516
</PageSection>
@@ -22,7 +23,7 @@ const NetworkMapCreatePage: FC = () => {
2223
>
2324
<CreateNetworkMapForm />
2425
</PageSection>
25-
</>
26+
</TipsAndTricksDrawer>
2627
);
2728
};
2829

src/onlineHelp/forkliftHelp/ForkliftLearningExperience.tsx

Lines changed: 0 additions & 16 deletions
This file was deleted.

src/onlineHelp/forkliftHelp/topics/const.ts

Lines changed: 0 additions & 12 deletions
This file was deleted.

src/onlineHelp/learningExperience/LearningExperiencePanel.tsx

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
/* eslint-disable @cspell/spellchecker */
2-
import { type FC, useState } from 'react';
1+
import type { FC } from 'react';
32
import HelpTopic from 'src/onlineHelp/learningExperience/HelpTopic';
43
import LearningExperienceSelect from 'src/onlineHelp/learningExperience/LearningExperienceSelect';
54
import LearningTopicsCards from 'src/onlineHelp/learningExperience/LearningTopicsCards';
@@ -13,20 +12,24 @@ import {
1312
DrawerPanelContent,
1413
Title,
1514
} from '@patternfly/react-core';
16-
import { useForkliftTranslation } from '@utils/i18n';
15+
import { TIPS_AND_TRICKS_LABEL } from '@utils/constants';
1716

1817
import '@patternfly/quickstarts/dist/quickstarts.css';
1918
import './LearningExperiencePanel.scss';
2019

2120
type LearningExperiencePanelProps = {
2221
topics: LearningExperienceTopic[];
2322
setIsDrawerOpen: (isOpen: boolean) => void;
23+
selectedTopic: LearningExperienceTopic | undefined;
24+
setSelectedTopic: (selectedTopic?: LearningExperienceTopic) => void;
2425
};
2526

26-
const LearningExperiencePanel: FC<LearningExperiencePanelProps> = ({ setIsDrawerOpen, topics }) => {
27-
const { t } = useForkliftTranslation();
28-
const [selectedTopic, setSelectedTopic] = useState<LearningExperienceTopic | undefined>();
29-
27+
const LearningExperiencePanel: FC<LearningExperiencePanelProps> = ({
28+
selectedTopic,
29+
setIsDrawerOpen,
30+
setSelectedTopic,
31+
topics,
32+
}) => {
3033
return (
3134
<DrawerPanelContent isResizable className="pfext-quick-start__base forklift--learning">
3235
<div className="pfext-quick-start-panel-content__header pfext-quick-start-panel-content__header--blue-white forklift--learning__header">
@@ -38,7 +41,7 @@ const LearningExperiencePanel: FC<LearningExperiencePanelProps> = ({ setIsDrawer
3841
className="pfext-quick-start-panel-content__name"
3942
style={{ marginRight: 'var(--pf-t--global--spacer--md)' }}
4043
>
41-
{t('Tips and tricks')}
44+
{TIPS_AND_TRICKS_LABEL}
4245
</Title>
4346
</div>
4447
<DrawerActions>
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
import { type FC, type PropsWithChildren, useContext, useState } from 'react';
2+
3+
import { Drawer, DrawerContent } from '@patternfly/react-core';
4+
5+
import type { LearningExperienceTopic } from '../learningExperience/types';
6+
7+
import ForkliftLearningExperience from './components/ForkliftLearningExperience';
8+
import TipsAndTricksHeader from './components/TipsAndTricksHeader';
9+
import { createLearningExperienceContext } from './hooks/learningExperienceContext';
10+
import {
11+
loadLearningExperienceContext,
12+
saveLearningExperienceContext,
13+
} from './utils/forkliftLearningExperienceUserSettings';
14+
import { indexToTopic, topicToIndex } from './utils/topicToIndexConvertors';
15+
16+
const TipsAndTricksDrawer1: FC<PropsWithChildren> = ({ children }) => {
17+
const { setUserData, userData: { showLearningPanelByContext } = {} } = useContext(
18+
createLearningExperienceContext,
19+
);
20+
21+
const [panelSelectedTopic, setPanelSelectedTopic] = useState<LearningExperienceTopic | undefined>(
22+
indexToTopic(loadLearningExperienceContext()?.learningExperienceContext),
23+
);
24+
25+
const setIsDrawerOpen = (isOpen: boolean) => {
26+
setUserData({ showLearningPanelByContext: isOpen });
27+
};
28+
29+
const setSelectedTopic = (topic?: LearningExperienceTopic) => {
30+
saveLearningExperienceContext(topicToIndex(topic));
31+
setPanelSelectedTopic(topic);
32+
};
33+
34+
return (
35+
<Drawer isInline isExpanded={showLearningPanelByContext} position="right">
36+
<DrawerContent
37+
panelContent={
38+
<ForkliftLearningExperience
39+
setIsDrawerOpen={setIsDrawerOpen}
40+
setSelectedTopic={setSelectedTopic}
41+
selectedTopic={panelSelectedTopic}
42+
/>
43+
}
44+
>
45+
<TipsAndTricksHeader
46+
isDrawerOpen={showLearningPanelByContext}
47+
setIsDrawerOpen={setIsDrawerOpen}
48+
/>
49+
{children}
50+
</DrawerContent>
51+
</Drawer>
52+
);
53+
};
54+
55+
export default TipsAndTricksDrawer1;

0 commit comments

Comments
 (0)