diff --git a/front/public/locales/en/operationalStudies/scenario.json b/front/public/locales/en/operationalStudies/scenario.json index 31846360e17..4dbfd2b65fa 100644 --- a/front/public/locales/en/operationalStudies/scenario.json +++ b/front/public/locales/en/operationalStudies/scenario.json @@ -26,6 +26,9 @@ "modifyScenario": "Modify scenario", "moreDetails": "more details", "noElectricalProfileSet": "No electrical profile", + "pacedTrain": { + "pacedTrain": "Paced train" + }, "scenarioCancel": "Cancel", "scenarioCreateButton": "Create a scenario", "scenarioCreationTitle": "Create a scenario", diff --git a/front/public/locales/fr/operationalStudies/scenario.json b/front/public/locales/fr/operationalStudies/scenario.json index 162c440f044..3027d5b56d3 100644 --- a/front/public/locales/fr/operationalStudies/scenario.json +++ b/front/public/locales/fr/operationalStudies/scenario.json @@ -25,6 +25,9 @@ "modifyScenario": "Modifier le scénario", "moreDetails": "plus de détails", "noElectricalProfileSet": "Pas de profil électrique", + "pacedTrain": { + "pacedTrain": "Mission" + }, "scenarioCancel": "Annuler", "scenarioCreateButton": "Créer le scénario", "scenarioCreationTitle": "Créer un scénario", diff --git a/front/src/common/UserSettings.tsx b/front/src/common/UserSettings.tsx index e33cc9ab638..025866bd593 100644 --- a/front/src/common/UserSettings.tsx +++ b/front/src/common/UserSettings.tsx @@ -8,14 +8,17 @@ import { useSelector } from 'react-redux'; import InputSNCF from 'common/BootstrapSNCF/InputSNCF'; import { ModalBodySNCF, ModalHeaderSNCF } from 'common/BootstrapSNCF/ModalSNCF'; import { updateUserPreferences } from 'reducers/user'; -import { getUserPreferences } from 'reducers/user/userSelectors'; +import { getIsSuperUser, getUserPreferences } from 'reducers/user/userSelectors'; import { useAppDispatch } from 'store'; import { useDebounce } from 'utils/helpers'; +import SwitchSNCF from './BootstrapSNCF/SwitchSNCF/SwitchSNCF'; + const UserSettings = () => { const userPreferences = useSelector(getUserPreferences); const [safeWordText, setSafeWordText] = useState(userPreferences.safeWord); const dispatch = useAppDispatch(); + const isSuperUser = useSelector(getIsSuperUser); const debouncedSafeWord = useDebounce(safeWordText, 500); @@ -23,7 +26,7 @@ const UserSettings = () => { dispatch(updateUserPreferences({ ...userPreferences, safeWord: debouncedSafeWord })); }, [debouncedSafeWord]); - const { t } = useTranslation(['home/navbar']); + const { t } = useTranslation(['home/navbar', 'operationalStudies/scenario']); return ( <> @@ -55,6 +58,28 @@ const UserSettings = () => { {t('safeWordHelp')} + { + // TODO PACEDTRAIN: Remove switch after development pacedTrain feature + isSuperUser && ( +
+ + dispatch( + updateUserPreferences({ + ...userPreferences, + showPacedTrains: !userPreferences.showPacedTrains, + }) + ) + } + /> +
{t('operationalStudies/scenario:pacedTrain.pacedTrain')}
+
+ ) + } ); diff --git a/front/src/reducers/user/index.ts b/front/src/reducers/user/index.ts index b34bca12b0f..0ad83a5e172 100644 --- a/front/src/reducers/user/index.ts +++ b/front/src/reducers/user/index.ts @@ -7,7 +7,8 @@ export interface UserState { isLogged: boolean; loginError?: ApiError; username: string; - userPreferences: { safeWord: string }; + // TODO PACEDTRAIN: Remove pacedTrain after development pacedTrain feature + userPreferences: { safeWord: string; showPacedTrains?: boolean }; userRoles: BuiltinRole[]; account: Record; } @@ -16,7 +17,8 @@ export const userInitialState: UserState = { isLogged: false, loginError: undefined, username: '', - userPreferences: { safeWord: '' }, + // TODO PACEDTRAIN: Remove pacedTrain after development pacedTrain feature + userPreferences: { safeWord: '', showPacedTrains: false }, userRoles: [], account: {}, }; @@ -45,7 +47,11 @@ export const userSlice = createSlice({ setUserRoles(state, action: PayloadAction) { state.userRoles = action.payload || []; }, - updateUserPreferences(state, action: PayloadAction<{ safeWord: string }>) { + updateUserPreferences( + state, + // TODO PACEDTRAIN: Remove pacedTrain after development pacedTrain feature + action: PayloadAction<{ safeWord: string; showPacedTrains?: boolean }> + ) { state.userPreferences = action.payload; }, }, diff --git a/front/src/reducers/user/userSelectors.ts b/front/src/reducers/user/userSelectors.ts index 1efb786c121..2df3a6ec90b 100644 --- a/front/src/reducers/user/userSelectors.ts +++ b/front/src/reducers/user/userSelectors.ts @@ -16,6 +16,9 @@ export const getUsername = makeUserSelector('username'); export const getUserRoles = makeUserSelector('userRoles'); export const getIsSuperUser = (state: RootState) => getUserRoles(state).includes('Superuser'); +// TODO PACEDTRAIN: Remove pacedTrain after development pacedTrain feature +export const getShowPacedTrains = makeUserPreferencesSelector('showPacedTrains'); + const makeUserHasAllRequiredRolesSelector = (requiredRoles: BuiltinRole[]) => (state: RootState) => { const userRoles = getUserRoles(state);