-
Notifications
You must be signed in to change notification settings - Fork 46
/
Copy pathuserSelectors.ts
37 lines (33 loc) · 1.76 KB
/
userSelectors.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import type { BuiltinRole } from 'common/api/osrdEditoastApi';
import { REQUIRED_USER_ROLES_FOR } from 'common/authorization/roleBaseAccessControl';
import type { RootState } from 'reducers';
import type { UserState } from 'reducers/user';
import { makeSubSelector } from 'utils/selectors';
export const getUser = (state: RootState) => state.user;
const makeUserSelector = makeSubSelector<UserState>(getUser);
export const getUserPreferences = makeUserSelector('userPreferences');
const makeUserPreferencesSelector =
makeSubSelector<UserState['userPreferences']>(getUserPreferences);
export const getIsUserLogged = makeUserSelector('isLogged');
export const getLoginError = makeUserSelector('loginError');
export const getUserSafeWord = makeUserPreferencesSelector('safeWord');
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);
return requiredRoles.every((role) => userRoles.includes(role));
};
export const userHasOnlyStdcmRoles = (state: RootState) => {
const userRoles = getUserRoles(state);
return (
userRoles.length === REQUIRED_USER_ROLES_FOR.USER_PROFILE.STDCM.length &&
userRoles.every((role) => REQUIRED_USER_ROLES_FOR.USER_PROFILE.STDCM.includes(role))
);
};
export const getIsOperationalStudyProfile = makeUserHasAllRequiredRolesSelector(
REQUIRED_USER_ROLES_FOR.USER_PROFILE.OPERATIONAL_STUDIES
);