Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Security Solution][Detections] Adds a back button to the Tour UI on the Rule Management page #128405

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,15 @@ import React, { createContext, useContext, useEffect, useMemo, FC } from 'react'

import { noop } from 'lodash';
import {
useEuiTour,
EuiTourState,
EuiStatelessTourStep,
EuiSpacer,
EuiButton,
EuiButtonEmpty,
EuiFlexGroup,
EuiFlexItem,
EuiSpacer,
EuiTourState,
EuiTourStepProps,
EuiStatelessTourStep,
useEuiTour,
} from '@elastic/eui';
import { invariant } from '../../../../../../common/utils/invariant';
import { RULES_MANAGEMENT_FEATURE_TOUR_STORAGE_KEY } from '../../../../../../common/constants';
Expand All @@ -37,7 +40,7 @@ const featuresTourSteps: EuiStatelessTourStep[] = [
{
step: 1,
title: i18n.FEATURE_TOUR_IN_MEMORY_TABLE_STEP_TITLE,
content: <></>,
content: <p>{i18n.FEATURE_TOUR_IN_MEMORY_TABLE_STEP}</p>,
stepsTotal: 2,
children: <></>,
onFinish: noop,
Expand Down Expand Up @@ -71,6 +74,7 @@ const RulesFeatureTourContext = createContext<RulesFeatureTourContextType | null
*/
export const RulesFeatureTourContextProvider: FC = ({ children }) => {
const { storage } = useKibana().services;

const initialStore = useMemo<EuiTourState>(
() => ({
...tourConfig,
Expand All @@ -79,43 +83,60 @@ export const RulesFeatureTourContextProvider: FC = ({ children }) => {
[storage]
);

const [stepProps, actions, reducerState] = useEuiTour(featuresTourSteps, initialStore);

const finishTour = actions.finishTour;
const goToNextStep = actions.incrementStep;

const inMemoryTableStepProps = useMemo(
const [tourSteps, tourActions, tourState] = useEuiTour(featuresTourSteps, initialStore);

const enhancedSteps = useMemo<EuiTourStepProps[]>(() => {
return tourSteps.map((item, index, array) => {
return {
...item,
content: (
<>
{item.content}
<EuiSpacer />
<EuiFlexGroup responsive={false} gutterSize="s" alignItems="center">
<EuiFlexItem grow={false}>
<EuiButtonEmpty
color="primary"
size="s"
disabled={index === 0}
onClick={tourActions.decrementStep}
>
{i18n.FEATURE_TOUR_PREV_STEP_BUTTON}
</EuiButtonEmpty>
</EuiFlexItem>
<EuiFlexItem grow={false}>
<EuiButton
color="primary"
size="s"
disabled={index === array.length - 1}
onClick={tourActions.incrementStep}
>
{i18n.FEATURE_TOUR_NEXT_STEP_BUTTON}
</EuiButton>
</EuiFlexItem>
</EuiFlexGroup>
</>
),
};
});
}, [tourSteps, tourActions]);

const providerValue = useMemo<RulesFeatureTourContextType>(
() => ({
...stepProps[0],
content: (
<>
<p>{i18n.FEATURE_TOUR_IN_MEMORY_TABLE_STEP}</p>
<EuiSpacer />
<EuiButton color="primary" onClick={goToNextStep}>
{i18n.FEATURE_TOUR_IN_MEMORY_TABLE_STEP_NEXT}
</EuiButton>
</>
),
steps: {
inMemoryTableStepProps: enhancedSteps[0],
bulkActionsStepProps: enhancedSteps[1],
},
finishTour: tourActions.finishTour,
goToNextStep: tourActions.incrementStep,
}),
[stepProps, goToNextStep]
[enhancedSteps, tourActions]
);

useEffect(() => {
const { isTourActive, currentTourStep } = reducerState;
const { isTourActive, currentTourStep } = tourState;
storage.set(RULES_MANAGEMENT_FEATURE_TOUR_STORAGE_KEY, { isTourActive, currentTourStep });
}, [reducerState, storage]);

const providerValue = useMemo(
() => ({
steps: {
inMemoryTableStepProps,
bulkActionsStepProps: stepProps[1],
},
finishTour,
goToNextStep,
}),
[finishTour, goToNextStep, inMemoryTableStepProps, stepProps]
);
}, [tourState, storage]);

return (
<RulesFeatureTourContext.Provider value={providerValue}>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,20 @@ export const FEATURE_TOUR_TITLE = i18n.translate(
}
);

export const FEATURE_TOUR_PREV_STEP_BUTTON = i18n.translate(
'xpack.securitySolution.detectionEngine.rules.allRules.featureTour.prevStepButtonTitle',
{
defaultMessage: 'Go back',
}
);

export const FEATURE_TOUR_NEXT_STEP_BUTTON = i18n.translate(
'xpack.securitySolution.detectionEngine.rules.allRules.featureTour.nextStepButtonTitle',
{
defaultMessage: 'Ok, got it',
}
);

export const FEATURE_TOUR_IN_MEMORY_TABLE_STEP = i18n.translate(
'xpack.securitySolution.detectionEngine.rules.allRules.featureTour.inMemoryTableStepDescription',
{
Expand All @@ -110,13 +124,6 @@ export const FEATURE_TOUR_IN_MEMORY_TABLE_STEP_TITLE = i18n.translate(
}
);

export const FEATURE_TOUR_IN_MEMORY_TABLE_STEP_NEXT = i18n.translate(
'xpack.securitySolution.detectionEngine.rules.allRules.featureTour.inMemoryTableStepNextButtonTitle',
{
defaultMessage: 'Ok, got it',
}
);

export const FEATURE_TOUR_BULK_ACTIONS_STEP_TITLE = i18n.translate(
'xpack.securitySolution.detectionEngine.rules.allRules.featureTour.bulkActionsStepTitle',
{
Expand Down