diff --git a/src/__tests__/components/Sidebar.test.tsx b/src/__tests__/components/Sidebar.test.tsx index 285dfb41a8..2c10a750de 100644 --- a/src/__tests__/components/Sidebar.test.tsx +++ b/src/__tests__/components/Sidebar.test.tsx @@ -11,14 +11,33 @@ import createMockStore from 'redux-mock-store' import thunk from 'redux-thunk' import Sidebar from '../../components/Sidebar' +import Permissions from '../../model/Permissions' import { RootState } from '../../store' const mockStore = createMockStore([thunk]) describe('Sidebar', () => { let history = createMemoryHistory() + const allPermissions = [ + Permissions.ReadPatients, + Permissions.WritePatients, + Permissions.ReadAppointments, + Permissions.WriteAppointments, + Permissions.DeleteAppointment, + Permissions.AddAllergy, + Permissions.AddDiagnosis, + Permissions.RequestLab, + Permissions.CancelLab, + Permissions.CompleteLab, + Permissions.ViewLab, + Permissions.ViewLabs, + Permissions.ViewIncidents, + Permissions.ViewIncident, + Permissions.ReportIncident, + ] const store = mockStore({ components: { sidebarCollapsed: false }, + user: { permissions: allPermissions }, } as any) const setup = (location: string) => { history = createMemoryHistory() diff --git a/src/components/Sidebar.tsx b/src/components/Sidebar.tsx index f6b6436f17..91e99f6ff4 100644 --- a/src/components/Sidebar.tsx +++ b/src/components/Sidebar.tsx @@ -4,12 +4,14 @@ import { useTranslation } from 'react-i18next' import { useSelector, useDispatch } from 'react-redux' import { useLocation, useHistory } from 'react-router-dom' +import Permissions from '../model/Permissions' import { RootState } from '../store' import { updateSidebar } from './component-slice' const Sidebar = () => { const dispatch = useDispatch() const { sidebarCollapsed } = useSelector((state: RootState) => state.components) + const permissions = useSelector((state: RootState) => state.user.permissions) const { t } = useTranslation() const path = useLocation() @@ -118,24 +120,28 @@ const Sidebar = () => { {splittedPath[1].includes('patient') && expandedItem === 'patient' && ( - navigateTo('/patients/new')} - active={splittedPath[1].includes('patients') && splittedPath.length > 2} - > - - {!sidebarCollapsed && t('patients.newPatient')} - - navigateTo('/patients')} - active={splittedPath[1].includes('patients') && splittedPath.length < 3} - > - - {!sidebarCollapsed && t('patients.patientsList')} - + {permissions.includes(Permissions.WritePatients) && ( + navigateTo('/patients/new')} + active={splittedPath[1].includes('patients') && splittedPath.length > 2} + > + + {!sidebarCollapsed && t('patients.newPatient')} + + )} + {permissions.includes(Permissions.ReadPatients) && ( + navigateTo('/patients')} + active={splittedPath[1].includes('patients') && splittedPath.length < 3} + > + + {!sidebarCollapsed && t('patients.patientsList')} + + )} )} @@ -164,24 +170,28 @@ const Sidebar = () => { {splittedPath[1].includes('appointment') && expandedItem === 'appointment' && ( - navigateTo('/appointments/new')} - active={splittedPath[1].includes('appointments') && splittedPath.length > 2} - > - - {!sidebarCollapsed && t('scheduling.appointments.new')} - - navigateTo('/appointments')} - active={splittedPath[1].includes('appointments') && splittedPath.length < 3} - > - - {!sidebarCollapsed && t('scheduling.appointments.schedule')} - + {permissions.includes(Permissions.WriteAppointments) && ( + navigateTo('/appointments/new')} + active={splittedPath[1].includes('appointments') && splittedPath.length > 2} + > + + {!sidebarCollapsed && t('scheduling.appointments.new')} + + )} + {permissions.includes(Permissions.ReadAppointments) && ( + navigateTo('/appointments')} + active={splittedPath[1].includes('appointments') && splittedPath.length < 3} + > + + {!sidebarCollapsed && t('scheduling.appointments.schedule')} + + )} )} @@ -210,24 +220,28 @@ const Sidebar = () => { {splittedPath[1].includes('labs') && expandedItem === 'labs' && ( - navigateTo('/labs/new')} - active={splittedPath[1].includes('labs') && splittedPath.length > 2} - > - - {!sidebarCollapsed && t('labs.requests.new')} - - navigateTo('/labs')} - active={splittedPath[1].includes('labs') && splittedPath.length < 3} - > - - {!sidebarCollapsed && t('labs.requests.label')} - + {permissions.includes(Permissions.RequestLab) && ( + navigateTo('/labs/new')} + active={splittedPath[1].includes('labs') && splittedPath.length > 2} + > + + {!sidebarCollapsed && t('labs.requests.new')} + + )} + {permissions.includes(Permissions.ViewLabs) && ( + navigateTo('/labs')} + active={splittedPath[1].includes('labs') && splittedPath.length < 3} + > + + {!sidebarCollapsed && t('labs.requests.label')} + + )} )} @@ -256,24 +270,28 @@ const Sidebar = () => { {splittedPath[1].includes('incidents') && expandedItem === 'incidents' && ( - navigateTo('/incidents/new')} - active={splittedPath[1].includes('incidents') && splittedPath.length > 2} - > - - {!sidebarCollapsed && t('incidents.reports.new')} - - navigateTo('/incidents')} - active={splittedPath[1].includes('incidents') && splittedPath.length < 3} - > - - {!sidebarCollapsed && t('incidents.reports.label')} - + {permissions.includes(Permissions.ReportIncident) && ( + navigateTo('/incidents/new')} + active={splittedPath[1].includes('incidents') && splittedPath.length > 2} + > + + {!sidebarCollapsed && t('incidents.reports.new')} + + )} + {permissions.includes(Permissions.ViewIncidents) && ( + navigateTo('/incidents')} + active={splittedPath[1].includes('incidents') && splittedPath.length < 3} + > + + {!sidebarCollapsed && t('incidents.reports.label')} + + )} )}