Skip to content
Snippets Groups Projects
user.selectors.ts 1.15 KiB
Newer Older
import { rootSelector } from '@/redux/root/root.selectors';
import { createSelector } from '@reduxjs/toolkit';
import { projectIdSelector } from '@/redux/project/project.selectors';
import { hasPrivilegeToObject } from '@/redux/user/user.utils';
import { UserPrivilege } from '@/types/models';

export const userSelector = createSelector(rootSelector, state => state.user);

export const authenticatedUserSelector = createSelector(userSelector, state => state.authenticated);
export const loadingUserSelector = createSelector(userSelector, state => state.loading);
export const loginUserSelector = createSelector(userSelector, state => state.login);
export const userRoleSelector = createSelector(userSelector, state => state.role);
export const userPrivilegesSelector = createSelector(
  userSelector,
  state => state.userData?.privileges || [],
);
export const hasPrivilegeToWriteProjectSelector = createSelector(
  userPrivilegesSelector,
  projectIdSelector,
  (userPrivileges: UserPrivilege[], projectId: string | undefined): boolean => {
    if (!projectId) {
      return false;
    }
    return hasPrivilegeToObject(userPrivileges, 'WRITE_PROJECT', projectId);
  },
);