diff --git a/client/src/components/center-calendar/CenterCalendar.js b/client/src/components/center-calendar/CenterCalendar.js index fd43078..2e09acc 100644 --- a/client/src/components/center-calendar/CenterCalendar.js +++ b/client/src/components/center-calendar/CenterCalendar.js @@ -23,13 +23,17 @@ import Select from 'react-select'; const EventsCalendar = () => { const navigate = useNavigate(); + const calendarTabOrder = ['medicalCalendar', 'activitiesCalendar', 'incidentsCalendar', 'mealPlanCalendar', 'reminderDatesCalendar']; + const getFirstVisibleCalendarTab = () => { + return calendarTabOrder.find((tabKey) => AuthService.canViewCalendarTab(tabKey) || AuthService.canEditCalendarTab(tabKey)) || 'medicalCalendar'; + }; const [events, setEvents] = useState([]); const calendarColumnRef = useRef(null); const [listHeight, setListHeight] = useState(null); const [allEvents, setAllEvents] = useState([]); const [targetedEventType, setTargetedEventType] = useState('medical'); - const [currentTab, setCurrentTab] = useState('medicalCalendar'); - const currentTabRef = useRef('medicalCalendar'); + const [currentTab, setCurrentTab] = useState(getFirstVisibleCalendarTab()); + const currentTabRef = useRef(getFirstVisibleCalendarTab()); const [customers, setCustomers] = useState([]); const [resources, setResources] = useState([]); const [fromDate, setFromDate] = useState(new Date(new Date().getFullYear(), new Date().getMonth(), 1)); @@ -126,6 +130,8 @@ const EventsCalendar = () => { const [showDeleteConfirm, setShowDeleteConfirm] = useState(false); const [deleteTargetId, setDeleteTargetId] = useState(null); const [showSpinner, setShowSpinner] = useState(false); + const visibleCalendarTabs = calendarTabOrder.filter((tabKey) => AuthService.canViewCalendarTab(tabKey) || AuthService.canEditCalendarTab(tabKey)); + const canEditCurrentTab = () => AuthService.canEditCalendarTab(currentTab); // Helper function to format name from "lastname, firstname" to "firstname lastname" const formatFullName = (name) => { @@ -245,7 +251,7 @@ const EventsCalendar = () => { setToDate(new Date(endDate.getFullYear(), endDate.getMonth() + 1, 0)); }, onClickDate(date) { - if (currentTabRef.current === 'medicalCalendar') return; + if (currentTabRef.current === 'medicalCalendar' || !AuthService.canEditCalendarTab(currentTabRef.current)) return; // Parse as local date to avoid UTC timezone offset shifting the day const [y, m, d] = date.split('-').map(Number); const localDate = new Date(y, m - 1, d); @@ -258,7 +264,7 @@ const EventsCalendar = () => { setShowCreationModal(true); }, onClickDateTime(dateTime) { - if (currentTabRef.current === 'medicalCalendar') return; + if (currentTabRef.current === 'medicalCalendar' || !AuthService.canEditCalendarTab(currentTabRef.current)) return; setNewEventStartDateTime(new Date(dateTime.replace(' ', 'T'))); setNewEventEndDateTime(new Date(dateTime.replace(' ', 'T'))); setShowCreationModal(true); @@ -343,6 +349,14 @@ const EventsCalendar = () => { }); }, []); + useEffect(() => { + if (!visibleCalendarTabs.includes(currentTab)) { + const nextTab = getFirstVisibleCalendarTab(); + setCurrentTab(nextTab); + currentTabRef.current = nextTab; + } + }, [currentTab]); + useEffect(() => { EventsService.getAllEvents({ from: EventsService.formatDate(fromDate), to: EventsService.formatDate(toDate) }).then(data => setAllEvents(data?.data)); EventsService.getAllEventRecurrences().then(data => setAllEventRecurrences(data?.data || [])); @@ -509,10 +523,12 @@ const EventsCalendar = () => { } const goToEdit = (id) => { + if (!AuthService.canEditMedicalEvents()) return; navigate(`/medical/events/edit/${id}?from=calendar`) } const goToCreateNew = () => { + if (!AuthService.canEditMedicalEvents()) return; navigate(`/medical/events`) } @@ -530,6 +546,7 @@ const EventsCalendar = () => { } const disableEvent = (id) => { + if (!AuthService.canEditCalendarTab(currentTab)) return; // Handle recurring event instances const isRecurInstance = typeof id === 'string' && id.startsWith('recur-'); if (isRecurInstance) { @@ -596,6 +613,7 @@ const EventsCalendar = () => { // Edit modal functions (for non-medical tabs) const openEditModal = (calendarEvent) => { + if (!AuthService.canEditCalendarTab(currentTab)) return; // Check if this is a recurring event instance (ID starts with 'recur-') const isRecurInstance = typeof calendarEvent.id === 'string' && calendarEvent.id.startsWith('recur-'); let eventData; @@ -676,6 +694,7 @@ const EventsCalendar = () => { }; const handleEditSave = () => { + if (!AuthService.canEditCalendarTab(currentTab)) return; const userName = localStorage.getItem('user') && JSON.parse(localStorage.getItem('user'))?.name; let data = { @@ -813,6 +832,7 @@ const EventsCalendar = () => { } const goToTab = (value) => { + if (!value || !visibleCalendarTabs.includes(value)) return; setTargetedEventType(eventTypeMap[value]); setCurrentTab(value); currentTabRef.current = value; @@ -834,13 +854,13 @@ const EventsCalendar = () => { {calendarEvent?.doctor &&
{`${note?.author}: ${note?.content}`}
})}