{"version":3,"file":"form_component-DUqmYxhe.js","sources":["../../../app/components/alex_fuse/attendance_show/form_component/form_component.js"],"sourcesContent":["import { defer, formatTimeString, isVariableDefinedNotNull } from '@slideslive/fuse-kit/utils';\nimport ApplicationController from 'modules/application_controller';\n\nexport default class extends ApplicationController {\n static get targets() {\n return [\n 'elapsed',\n 'projectSelect',\n 'eventRoleSelect',\n 'startedAt',\n 'startedAtSpinner',\n 'note',\n 'noteSpinner',\n 'toggleResultTarget',\n ];\n }\n\n connect() {\n defer(() => {\n if (this.reloadAttendanceList) {\n this.attendanceListController.reload(undefined, true);\n }\n });\n\n this.updateElapsedLoop();\n }\n\n disconnect() {\n cancelAnimationFrame(this.updateRequest);\n }\n\n startedAtTargetConnected(target) {\n this.savedStartedAt = target.value;\n }\n\n noteTargetConnected(target) {\n this.savedNote = target.value;\n\n target.setSelectionRange(target.value.length, target.value.length);\n\n defer(() => {\n target.focus();\n });\n }\n\n updateElapsedLoop() {\n this.updateElapsed();\n this.updateRequest = requestAnimationFrame(this.updateElapsedLoop.bind(this));\n }\n\n updateElapsed() {\n if (!this.hasElapsedTarget) return;\n\n const start = new Date(this.elapsedTarget.dataset.start);\n const millis = new Date().getTime() - start.getTime();\n\n this.elapsedTarget.textContent = formatTimeString(millis / 1000, { useColons: true });\n }\n\n updateEventRolesFromEvent(event) {\n this.updateEventRoles(event.detail.customProperties);\n }\n\n updateEventRoles(props) {\n if (typeof props === 'string') {\n props = JSON.parse(props);\n }\n\n if (!props || Object.keys(props).length === 0) {\n return;\n }\n\n const { prefix, selected_event_role: selectedEventRole, event_roles: enabledEventRoles } = props;\n\n this.eventRoleSelectTarget.required = prefix === 'E';\n\n let selected;\n this.eventRoleSelectTarget.querySelectorAll('option').forEach((option) => {\n let enabled = false;\n\n if (prefix === 'P') {\n enabled = option.value === '';\n } else if (prefix === 'E') {\n enabled = enabledEventRoles.indexOf(parseInt(option.value, 10)) >= 0;\n }\n\n option.disabled = !enabled;\n\n if (option.selected) {\n selected = option;\n }\n });\n\n if (!selected || selected.disabled) {\n if (prefix === 'E') {\n if (selectedEventRole && selectedEventRole !== '') {\n this.eventRoleSelectTarget.value = selectedEventRole;\n } else if (enabledEventRoles.indexOf(4) >= 0) {\n this.eventRoleSelectTarget.value = '4';\n } else if (enabledEventRoles.indexOf(1) >= 0) {\n this.eventRoleSelectTarget.value = '1';\n } else if (enabledEventRoles.length > 0) {\n this.eventRoleSelectTarget.value = enabledEventRoles[0].toString();\n } else {\n this.eventRoleSelectTarget.value = '';\n }\n } else {\n this.eventRoleSelectTarget.value = '';\n }\n }\n }\n\n saveToggleWhenDocumentInvisible() {\n if (document.visibilityState === 'visible') return;\n\n this.saveToggle();\n }\n\n debouncedSaveToggle() {\n if (!this.toggleChanged) return;\n\n if (this.saveTimeout) {\n clearTimeout(this.saveTimeout);\n this.saveTimeout = undefined;\n }\n\n if (this.saveToggleAbortController) {\n this.saveToggleAbortController.abort();\n this.saveToggleAbortController = undefined;\n }\n\n this.saveTimeout = setTimeout(() => this.saveToggle(), 15000);\n }\n\n saveToggle() {\n if (!this.toggleChanged) return;\n\n if (this.saveTimeout) {\n clearTimeout(this.saveTimeout);\n this.saveTimeout = undefined;\n }\n\n if (this.saveToggleAbortController) {\n this.saveToggleAbortController.abort();\n this.saveToggleAbortController = undefined;\n }\n\n this.saveToggleAbortController = new AbortController();\n\n const startedAt = this.hasStartedAtTarget ? this.startedAtTarget.value : undefined;\n const note = this.hasNoteTarget ? this.noteTarget.value : undefined;\n if (isVariableDefinedNotNull(startedAt) && this.savedStartedAt !== startedAt) this.showStartedAtSpinner = true;\n if (isVariableDefinedNotNull(note) && this.savedNote !== note) this.showNoteSpinner = true;\n\n const body = {\n alex_running_attendance_id: this.runningAttendanceId,\n open_attendance_header_dropdown: this.openAttendanceHeaderDropdownOnSaveToggle,\n toggle_result_target: this.attendanceToggleResultTargetForSaveToggle,\n };\n if (isVariableDefinedNotNull(startedAt)) body.alex_attendance_started_at = startedAt;\n if (isVariableDefinedNotNull(note)) body.alex_attendance_note = note;\n\n fetch(this.attendanceToggleNotePath, {\n ...this.saveToggleRequestInit,\n body: JSON.stringify(body),\n })\n .then(async (response) => {\n if (response.status !== 200) {\n if (response.headers.get('content-type').includes('text/vnd.turbo-stream.html')) {\n window.Turbo.renderStreamMessage(await response.text());\n }\n\n throw new Error(`Request failed. Status: ${response.status}`);\n }\n\n window.Turbo.renderStreamMessage(await response.text());\n })\n .catch((error) => {\n if (error instanceof DOMException) {\n return;\n }\n\n console.warn(`Saving attendance toggle failed:`, error);\n\n this.showStartedAtSpinner = false;\n this.showNoteSpinner = false;\n });\n }\n\n get toggleChanged() {\n const startedAt = this.hasStartedAtTarget ? this.startedAtTarget.value : undefined;\n const note = this.hasNoteTarget ? this.noteTarget.value : undefined;\n return (\n (isVariableDefinedNotNull(startedAt) && this.savedStartedAt !== startedAt) ||\n (isVariableDefinedNotNull(note) && this.savedNote !== note)\n );\n }\n\n get saveToggleRequestInit() {\n return {\n method: 'POST',\n credentials: 'include',\n signal: this.saveToggleAbortController.signal,\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n 'X-CSRF-Token': document.querySelector('meta[name=\"csrf-token\"]').content,\n },\n };\n }\n\n get reloadAttendanceList() {\n return this.element.dataset.reloadAttendanceList === 'true';\n }\n\n get attendanceListController() {\n const attendanceList = document.querySelector('[data-controller=\"attendance-list\"]');\n\n return this.application.getControllerForElementAndIdentifier(attendanceList, 'attendance-list');\n }\n\n get attendanceToggleNotePath() {\n return this.element.dataset.attendanceToggleNotePath;\n }\n\n set showStartedAtSpinner(value) {\n if (this.hasStartedAtSpinnerTarget) {\n this.startedAtSpinnerTarget.hidden = !value;\n }\n }\n\n set showNoteSpinner(value) {\n if (this.hasNoteSpinnerTarget) {\n this.noteSpinnerTarget.hidden = !value;\n }\n }\n\n get attendanceToggleResultTargetForSaveToggle() {\n const input = this.element.querySelector('input[name=\"toggle_result_target\"]');\n if (!input) return '';\n\n return input.value;\n }\n\n get openAttendanceHeaderDropdownOnSaveToggle() {\n const input = this.element.querySelector('input[name=\"open_attendance_header_dropdown\"]');\n if (!input) return false;\n\n return input.value === 'true';\n }\n\n get runningAttendanceId() {\n return this.element.dataset.runningAttendanceId;\n }\n}\n"],"names":["form_component","ApplicationController","defer","target","start","millis","formatTimeString","event","props","prefix","selectedEventRole","enabledEventRoles","selected","option","enabled","startedAt","note","isVariableDefinedNotNull","body","response","error","attendanceList","value","input"],"mappings":"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"}