@@ -40,7 +40,6 @@ document.addEventListener("DOMContentLoaded", function () {
40
40
} ) ;
41
41
} ) ;
42
42
43
-
44
43
function initializeCalendar ( ) {
45
44
const formattedAppointments = formatAppointmentsForCalendar ( appointments ) ;
46
45
const calendarEl = document . getElementById ( 'calendar' ) ;
@@ -244,7 +243,6 @@ function setUserStaffAdminFlag() {
244
243
} ) ;
245
244
}
246
245
247
-
248
246
function handleCalendarRightClick ( event , date ) {
249
247
if ( ! AppState . isUserStaffAdmin ) {
250
248
showErrorModal ( notStaffMemberTxt )
@@ -376,6 +374,15 @@ function fetchServices(isEditMode = false) {
376
374
. catch ( error => console . error ( "Error fetching services: " , error ) ) ;
377
375
}
378
376
377
+ function fetchStaffMembers ( isEditMode = false ) {
378
+ let url = isEditMode && AppState . eventIdSelected ? `${ fetchStaffListURL } ?appointmentId=${ AppState . eventIdSelected } ` : fetchStaffListURL ;
379
+ return fetch ( url )
380
+ . then ( response => response . json ( ) )
381
+ . then ( data => data . staff_members )
382
+ . catch ( error => console . error ( "Error fetching staff members: " , error ) ) ;
383
+
384
+ }
385
+
379
386
async function populateServices ( selectedServiceId , isEditMode = false ) {
380
387
const services = await fetchServices ( isEditMode ) ;
381
388
if ( ! services ) {
@@ -394,6 +401,24 @@ async function populateServices(selectedServiceId, isEditMode = false) {
394
401
return selectElement ;
395
402
}
396
403
404
+ async function populateStaffMembers ( selectedStaffId , isEditMode = false ) {
405
+ const staffMembers = await fetchStaffMembers ( isEditMode ) ;
406
+ if ( ! staffMembers ) {
407
+ showErrorModal ( noStaffMemberTxt )
408
+ }
409
+ const selectElement = document . createElement ( 'select' ) ;
410
+ staffMembers . forEach ( staff => {
411
+ const option = document . createElement ( 'option' ) ;
412
+ option . value = staff . id ; // Accessing the id
413
+ option . textContent = staff . name ; // Accessing the name
414
+ if ( staff . id === selectedStaffId ) {
415
+ option . defaultSelected = true ;
416
+ }
417
+ selectElement . appendChild ( option ) ;
418
+ } ) ;
419
+ return selectElement ;
420
+ }
421
+
397
422
function getCSRFToken ( ) {
398
423
const metaTag = document . querySelector ( 'meta[name="csrf-token"]' ) ;
399
424
if ( metaTag ) {
@@ -483,13 +508,13 @@ function createNewAppointment(dateInput) {
483
508
} ) ;
484
509
}
485
510
486
-
487
511
async function showCreateAppointmentModal ( defaultStartTime , formattedDate ) {
488
512
const servicesDropdown = await populateServices ( null , false ) ;
513
+ const staffDropdown = await populateStaffMembers ( null , false ) ;
489
514
servicesDropdown . id = "serviceSelect" ;
490
515
servicesDropdown . disabled = false ; // Enable dropdown
491
516
492
- document . getElementById ( 'eventModalBody' ) . innerHTML = prepareCreateAppointmentModalContent ( servicesDropdown , defaultStartTime , formattedDate ) ;
517
+ document . getElementById ( 'eventModalBody' ) . innerHTML = prepareCreateAppointmentModalContent ( servicesDropdown , staffDropdown , defaultStartTime , formattedDate ) ;
493
518
494
519
adjustCreateAppointmentModalButtons ( ) ;
495
520
AppState . isCreating = true ;
@@ -504,7 +529,6 @@ function adjustCreateAppointmentModalButtons() {
504
529
document . getElementById ( "eventGoBtn" ) . style . display = "none" ;
505
530
}
506
531
507
-
508
532
// ################################################################ //
509
533
// Show Event Modal //
510
534
// ################################################################ //
@@ -543,13 +567,23 @@ async function getServiceDropdown(serviceId, isEditMode) {
543
567
return servicesDropdown ;
544
568
}
545
569
570
+ // Populate Staff Dropdown
571
+ async function getStaffDropdown ( staffId , isEditMode ) {
572
+ const staffDropdown = await populateStaffMembers ( staffId , ! isEditMode ) ;
573
+ staffDropdown . id = "staffSelect" ;
574
+ staffDropdown . disabled = ! isEditMode ;
575
+ return staffDropdown ;
576
+ }
577
+
546
578
// Show Event Modal
547
579
async function showEventModal ( eventId = null , isEditMode , isCreatingMode = false , defaultStartTime = '' ) {
548
580
const appointment = await getAppointmentData ( eventId , isCreatingMode , defaultStartTime ) ;
549
581
if ( ! appointment ) return ;
550
582
551
583
const servicesDropdown = await getServiceDropdown ( appointment . service_id , isEditMode ) ;
552
- document . getElementById ( 'eventModalBody' ) . innerHTML = generateModalContent ( appointment , servicesDropdown , isEditMode ) ;
584
+ const staffDropdown = await getStaffDropdown ( appointment . staff_id , isEditMode ) ;
585
+
586
+ document . getElementById ( 'eventModalBody' ) . innerHTML = generateModalContent ( appointment , servicesDropdown , isEditMode , staffDropdown ) ;
553
587
adjustModalButtonsVisibility ( isEditMode , isCreatingMode ) ;
554
588
$ ( '#eventDetailsModal' ) . modal ( 'show' ) ;
555
589
}
@@ -587,6 +621,7 @@ function toggleEditMode() {
587
621
588
622
function updateModalUIForEditMode ( modal , isEditingAppointment ) {
589
623
const inputs = modal . querySelectorAll ( "input" ) ;
624
+ const staffDropdown = document . getElementById ( "staffSelect" ) ;
590
625
const servicesDropdown = document . getElementById ( "serviceSelect" ) ;
591
626
const editButton = document . getElementById ( "eventEditBtn" ) ;
592
627
const submitButton = document . getElementById ( "eventSubmitBtn" ) ;
@@ -599,6 +634,7 @@ function updateModalUIForEditMode(modal, isEditingAppointment) {
599
634
600
635
// Toggle input and dropdown enable/disable state
601
636
inputs . forEach ( input => input . disabled = ! isEditingAppointment ) ;
637
+ staffDropdown . disabled = ! isEditingAppointment ;
602
638
servicesDropdown . disabled = ! isEditingAppointment ;
603
639
604
640
// Toggle visibility of UI elements
@@ -618,7 +654,6 @@ function toggleElementVisibility(element, isVisible) {
618
654
}
619
655
}
620
656
621
-
622
657
// ################################################################ //
623
658
// Submit Logic //
624
659
// ################################################################ //
@@ -651,7 +686,13 @@ async function submitChanges() {
651
686
function collectFormDataFromModal ( modal ) {
652
687
const inputs = modal . querySelectorAll ( "input" ) ;
653
688
const serviceId = modal . querySelector ( "#serviceSelect" ) . value ;
654
- const data = { isCreating : AppState . isCreating , service_id : serviceId , appointment_id : AppState . eventIdSelected } ;
689
+ const staffId = modal . querySelector ( "#staffSelect" ) . value ;
690
+ const data = {
691
+ isCreating : AppState . isCreating ,
692
+ service_id : serviceId ,
693
+ staff_id : staffId ,
694
+ appointment_id : AppState . eventIdSelected
695
+ } ;
655
696
656
697
inputs . forEach ( input => {
657
698
if ( input . name !== "date" ) {
@@ -711,22 +752,6 @@ async function sendAppointmentData(data) {
711
752
} ) ;
712
753
}
713
754
714
- // Handle response from server
715
- async function handleAppointmentResponse ( response ) {
716
- if ( ! response . ok ) {
717
- throw new Error ( response . message ) ;
718
- }
719
-
720
- const responseData = await response . json ( ) ;
721
- if ( AppState . isCreating ) {
722
- addNewAppointmentToCalendar ( responseData . appt [ 0 ] ) ;
723
- } else {
724
- updateExistingAppointmentInCalendar ( responseData . appt ) ;
725
- }
726
-
727
- AppState . calendar . render ( ) ;
728
- }
729
-
730
755
// Add new appointment to calendar
731
756
function addNewAppointmentToCalendar ( newAppointment ) {
732
757
const newEvent = formatAppointmentsForCalendar ( [ newAppointment ] ) [ 0 ] ;
0 commit comments