{"version":3,"sources":["webpack:///./app/javascript/calendar/filters.js"],"names":["loadCalendarFilters","$","show","ajax","url","window","calendarSettings","filtersLink","method","dataType","success","data","filtersList","filtersListOthers","empty","forEach","filter","admin","isAdmin","listItem","class","filterSpan","text","title","dataId","id","deleteLink","href","style","append","owner","hide","updateQuickButtons","error","xhr","status","console","applyCalendarFilters","baseUrl","location","URL","params","searchParams","therapistAutocomplete","document","querySelector","therapistIds","JSON","parse","value","length","set","join","modeTypeIds","patientIds","search","toString","loadCalendarFilterById","loadFilterLink","replace","val","prop","quick_button","patient_ids","option","setValue","clear","mode_type_ids","therapist_ids","saveCalendarFilter","saveFilterLink","addClass","removeClass","serialize","newCalendarFilter","event","preventDefault","loadCalendarFilter","target","attr","deleteCalendarFilter","dUrl","deleteFilterLink","eId","parent","confirm","registerFilters","off","on","this","closest","modal"],"mappings":"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","file":"js/73-1f48c0bf0dfab1a56ce8.chunk.js","sourcesContent":["import { constructURL } from 'helpers/url';\n\n// Loads calendar filters via an AJAX request and updates the filter lists in the UI.\n// Assigns the method to the `window` object for global access.\n//\n// @return {void}\nconst loadCalendarFilters = () => {\n $('#filterMask').show();\n $.ajax({\n url: window.calendarSettings.filtersLink,\n method: 'GET',\n dataType: 'json',\n success(data) {\n const filtersList = $('#calendarFiltersSavedFilters');\n const filtersListOthers = $('#calendarFiltersSavedFiltersOthers');\n // Clear any existing items\n filtersList.empty();\n filtersListOthers.empty();\n // Loop through the data and create list items\n data.forEach((filter) => {\n if ((filter.admin && window.calendarSettings.isAdmin) || (!filter.admin && !window.calendarSettings.isAdmin)) {\n const listItem = $('
  • ', { class: 'saved-calendar-filter list-group-item py-1 px-2' });\n const filterSpan = $('', { class: 'loadFilter filter', text: filter.title, dataId: filter.id });\n const deleteLink = $('', {\n href: '#',\n class: 'deleteFilter',\n style: 'float:right;',\n dataId: filter.id,\n }).append($('', { class: 'bi bi-trash' }));\n if (filter.owner) {\n listItem.append(filterSpan).append(deleteLink);\n filtersList.append(listItem);\n } else {\n listItem.append(filterSpan);\n filtersListOthers.append(listItem);\n }\n }\n });\n $('#filterMask').hide();\n // Load quick buttons as defined in the calendar\n window.updateQuickButtons?.();\n },\n error(xhr, status, error) {\n console.error('Unable to load calendar filters:', status, error);\n $('#filterMask').hide();\n },\n });\n};\n// assign this to the window since we will call it directly sometimes\nwindow.loadCalendarFilters = loadCalendarFilters;\n\n// Applies filters to the calendar based on selected options.\n//\n// @param {boolean} admin - Indicates if the user is an admin.\n// @return {void}\nconst applyCalendarFilters = (admin) => {\n let baseUrl = window.location.href;\n // Get existing URL parameters\n const url = new URL(baseUrl);\n const params = url.searchParams;\n // Therapist IDS (only admin)\n const therapistAutocomplete = document.querySelector('awc-autocomplete#therapists_ids');\n if (therapistAutocomplete) {\n const therapistIds = JSON.parse(therapistAutocomplete.value || '[]');\n if (therapistIds.length > 0) {\n params.set('therapists', therapistIds.join(','));\n } else {\n params.delete('therapists');\n }\n }\n // Mode Type IDS\n const modeTypeIds = JSON.parse(document.querySelector('awc-autocomplete#mode_type_ids').value || '[]');\n if (modeTypeIds.length > 0) {\n params.set('types', modeTypeIds.join(','));\n } else {\n params.delete('types');\n }\n // Patient IDS\n const patientIds = JSON.parse(document.querySelector('awc-autocomplete#patient_ids').value || '[]');\n if (patientIds.length > 0) {\n params.set('patients', patientIds.join(','));\n } else {\n params.delete('patients');\n }\n url.search = params.toString();\n window.location = url.toString();\n};\n\n// Loads a calendar filter by its ID via an AJAX request and populates the filter form.\n//\n// @param {number} id - The ID of the calendar filter to load.\n// @return {void}\nconst loadCalendarFilterById = (id) => {\n const url = window.calendarSettings?.loadFilterLink.replace('000', id);\n $.ajax({\n url,\n method: 'GET',\n dataType: 'json',\n success(data) {\n $('#calendar_filter_id').val(data.id);\n $('#calendar_filter_title').val(data.title);\n $('#calendar_filter_quick_button').prop('checked', data.quick_button);\n data.patient_ids.forEach((option) => {\n document.querySelector('awc-autocomplete#patient_ids').setValue(option[1], option[0]);\n });\n if (document.querySelector('awc-autocomplete#mode_type_ids')) {\n document.querySelector('awc-autocomplete#mode_type_ids').clear();\n data.mode_type_ids.forEach((option) => {\n document.querySelector('awc-autocomplete#mode_type_ids').setValue(option[1], option[0]);\n });\n }\n if (document.querySelector('awc-autocomplete#therapists_ids')) {\n document.querySelector('awc-autocomplete#therapists_ids').clear();\n data.therapist_ids.forEach((option) => {\n document.querySelector('awc-autocomplete#therapists_ids').setValue(option[1], option[0]);\n });\n }\n },\n error(xhr, status, error) {\n console.error('Request failed:', status, error);\n },\n });\n};\n\n// Saves the current filter configuration via an AJAX request.\n//\n// @return {void}\nconst saveCalendarFilter = () => {\n if (window?.calendarSettings?.saveFilterLink) {\n $('#calendarFilterSaveFilter').prop('disabled', true);\n $('#calendarFilterSaveError').addClass('hidden');\n // Make sure filter has name, public/private\n if ($('#calendar_filter_title').val() === '' || $('#calendar_filter_status').val() === '') {\n $('#calendarFilterSaveError').removeClass('hidden');\n $('#calendarFilterSaveFilter').prop('disabled', false);\n return false;\n }\n $.ajax({\n url: window?.calendarSettings?.saveFilterLink,\n method: 'POST',\n dataType: 'json',\n data: $('#caseload-new-form').serialize(),\n success(data) {\n loadCalendarFilters();\n loadCalendarFilterById(data.id);\n $('#calendarFilterSaveFilter').prop('disabled', false);\n },\n error(xhr, status, error) {\n console.error('AJAX request failed:', status, error);\n },\n });\n }\n};\n\n// Prepares the UI for creating a new filter by clearing the form inputs.\n//\n// @param {Event} event - The event object triggering this action.\n// @return {void}\nconst newCalendarFilter = (event) => {\n if (event) { event.preventDefault(); }\n $('#calendarFilterSaveFilter').prop('disabled', false);\n $('#calendar_filter_id').val('');\n $('#calendar_filter_title').val('');\n $('#calendar_filter_quick_button').prop('checked', false);\n document.querySelector('awc-autocomplete#patient_ids').clear();\n document.querySelector('awc-autocomplete#mode_type_ids').clear();\n if (document.querySelector('awc-autocomplete#therapists_ids')) {\n document.querySelector('awc-autocomplete#therapists_ids').clear();\n }\n};\n\n// Loads a calendar filter back into the form based on the event's data.\n//\n// @param {Event} event - The event object containing the filter ID.\n// @return {void}\nconst loadCalendarFilter = (event) => {\n event.preventDefault();\n newCalendarFilter(event);\n const id = $(event.target).attr('dataid');\n if (id) {\n loadCalendarFilterById(id);\n }\n};\n\n// Deletes a filter via an AJAX request, after confirming with the user.\n//\n// @param {Event} event - The event object triggering this action.\n// @return {void}\nconst deleteCalendarFilter = (event) => {\n event.preventDefault();\n const dUrl = window.calendarSettings?.deleteFilterLink;\n const eId = $(event.target).parent().attr('dataid');\n if (!dUrl || !eId || !window.confirm(\"You're about to delete this filter. Are you sure?\")) {\n return;\n }\n $.ajax({\n url: dUrl.replace('000', eId),\n method: 'POST',\n dataType: 'json',\n success(data) {\n loadCalendarFilters();\n newCalendarFilter();\n },\n error(xhr,status, error) {\n console.error('Request failed:', status, error);\n },\n });\n};\n\n// Registers event listeners for various UI interactions related to filters and initializes the filters.\n//\n// @return {void}\nwindow.registerFilters = () => {\n loadCalendarFilters();\n $(document).off('.calendar');\n $(document).on('click.calendar', '#calendarFiltersApplyFilter', applyCalendarFilters);\n $(document).on('click.calendar', '#calendarFilterSaveFilter', saveCalendarFilter);\n $(document).on('click.calendar', '#calendarFilterNewFilter', newCalendarFilter);\n $(document).on('click.calendar', 'span.loadFilter', loadCalendarFilter);\n $(document).on('click.calendar', 'a.deleteFilter', deleteCalendarFilter);\n $(document).on('click.calendar', '[data-bs-dismiss=\"modal\"]', function () {\n $(this).closest('.modal').modal('hide');\n });\n};\n"],"sourceRoot":""}