{"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":"2JAGe,MAAKA,UAASC,CAAsB,CACjD,WAAW,SAAU,CACnB,MAAO,CACL,UACA,gBACA,kBACA,YACA,mBACA,OACA,cACA,oBACD,CACL,CAEE,SAAU,CACRC,EAAM,IAAM,CACN,KAAK,sBACP,KAAK,yBAAyB,OAAO,OAAW,EAAI,CAE5D,CAAK,EAED,KAAK,kBAAmB,CAC5B,CAEE,YAAa,CACX,qBAAqB,KAAK,aAAa,CAC3C,CAEE,yBAAyBC,EAAQ,CAC/B,KAAK,eAAiBA,EAAO,KACjC,CAEE,oBAAoBA,EAAQ,CAC1B,KAAK,UAAYA,EAAO,MAExBA,EAAO,kBAAkBA,EAAO,MAAM,OAAQA,EAAO,MAAM,MAAM,EAEjED,EAAM,IAAM,CACVC,EAAO,MAAO,CACpB,CAAK,CACL,CAEE,mBAAoB,CAClB,KAAK,cAAe,EACpB,KAAK,cAAgB,sBAAsB,KAAK,kBAAkB,KAAK,IAAI,CAAC,CAChF,CAEE,eAAgB,CACd,GAAI,CAAC,KAAK,iBAAkB,OAE5B,MAAMC,EAAQ,IAAI,KAAK,KAAK,cAAc,QAAQ,KAAK,EACjDC,EAAS,IAAI,KAAI,EAAG,QAAS,EAAGD,EAAM,QAAS,EAErD,KAAK,cAAc,YAAcE,EAAiBD,EAAS,IAAM,CAAE,UAAW,GAAM,CACxF,CAEE,0BAA0BE,EAAO,CAC/B,KAAK,iBAAiBA,EAAM,OAAO,gBAAgB,CACvD,CAEE,iBAAiBC,EAAO,CAKtB,GAJI,OAAOA,GAAU,WACnBA,EAAQ,KAAK,MAAMA,CAAK,GAGtB,CAACA,GAAS,OAAO,KAAKA,CAAK,EAAE,SAAW,EAC1C,OAGF,KAAM,CAAE,OAAAC,EAAQ,oBAAqBC,EAAmB,YAAaC,CAAiB,EAAKH,EAE3F,KAAK,sBAAsB,SAAWC,IAAW,IAEjD,IAAIG,EACJ,KAAK,sBAAsB,iBAAiB,QAAQ,EAAE,QAASC,GAAW,CACxE,IAAIC,EAAU,GAEVL,IAAW,IACbK,EAAUD,EAAO,QAAU,GAClBJ,IAAW,MACpBK,EAAUH,EAAkB,QAAQ,SAASE,EAAO,MAAO,EAAE,CAAC,GAAK,GAGrEA,EAAO,SAAW,CAACC,EAEfD,EAAO,WACTD,EAAWC,EAEnB,CAAK,GAEG,CAACD,GAAYA,EAAS,YACpBH,IAAW,IACTC,GAAqBA,IAAsB,GAC7C,KAAK,sBAAsB,MAAQA,EAC1BC,EAAkB,QAAQ,CAAC,GAAK,EACzC,KAAK,sBAAsB,MAAQ,IAC1BA,EAAkB,QAAQ,CAAC,GAAK,EACzC,KAAK,sBAAsB,MAAQ,IAC1BA,EAAkB,OAAS,EACpC,KAAK,sBAAsB,MAAQA,EAAkB,CAAC,EAAE,SAAU,EAElE,KAAK,sBAAsB,MAAQ,GAGrC,KAAK,sBAAsB,MAAQ,GAG3C,CAEE,iCAAkC,CAC5B,SAAS,kBAAoB,WAEjC,KAAK,WAAY,CACrB,CAEE,qBAAsB,CACf,KAAK,gBAEN,KAAK,cACP,aAAa,KAAK,WAAW,EAC7B,KAAK,YAAc,QAGjB,KAAK,4BACP,KAAK,0BAA0B,MAAO,EACtC,KAAK,0BAA4B,QAGnC,KAAK,YAAc,WAAW,IAAM,KAAK,WAAY,EAAE,IAAK,EAChE,CAEE,YAAa,CACX,GAAI,CAAC,KAAK,cAAe,OAErB,KAAK,cACP,aAAa,KAAK,WAAW,EAC7B,KAAK,YAAc,QAGjB,KAAK,4BACP,KAAK,0BAA0B,MAAO,EACtC,KAAK,0BAA4B,QAGnC,KAAK,0BAA4B,IAAI,gBAErC,MAAMI,EAAY,KAAK,mBAAqB,KAAK,gBAAgB,MAAQ,OACnEC,EAAO,KAAK,cAAgB,KAAK,WAAW,MAAQ,OACtDC,EAAyBF,CAAS,GAAK,KAAK,iBAAmBA,IAAW,KAAK,qBAAuB,IACtGE,EAAyBD,CAAI,GAAK,KAAK,YAAcA,IAAM,KAAK,gBAAkB,IAEtF,MAAME,EAAO,CACX,2BAA4B,KAAK,oBACjC,gCAAiC,KAAK,yCACtC,qBAAsB,KAAK,yCAC5B,EACGD,EAAyBF,CAAS,IAAGG,EAAK,2BAA6BH,GACvEE,EAAyBD,CAAI,IAAGE,EAAK,qBAAuBF,GAEhE,MAAM,KAAK,yBAA0B,CACnC,GAAG,KAAK,sBACR,KAAM,KAAK,UAAUE,CAAI,CAC1B,CAAA,EACE,KAAK,MAAOC,GAAa,CACxB,GAAIA,EAAS,SAAW,IACtB,MAAIA,EAAS,QAAQ,IAAI,cAAc,EAAE,SAAS,4BAA4B,GAC5E,OAAO,MAAM,oBAAoB,MAAMA,EAAS,KAAI,CAAE,EAGlD,IAAI,MAAM,2BAA2BA,EAAS,MAAM,EAAE,EAG9D,OAAO,MAAM,oBAAoB,MAAMA,EAAS,KAAI,CAAE,CACvD,CAAA,EACA,MAAOC,GAAU,CACZA,aAAiB,eAIrB,QAAQ,KAAK,mCAAoCA,CAAK,EAEtD,KAAK,qBAAuB,GAC5B,KAAK,gBAAkB,GAC/B,CAAO,CACP,CAEE,IAAI,eAAgB,CAClB,MAAML,EAAY,KAAK,mBAAqB,KAAK,gBAAgB,MAAQ,OACnEC,EAAO,KAAK,cAAgB,KAAK,WAAW,MAAQ,OAC1D,OACGC,EAAyBF,CAAS,GAAK,KAAK,iBAAmBA,GAC/DE,EAAyBD,CAAI,GAAK,KAAK,YAAcA,CAE5D,CAEE,IAAI,uBAAwB,CAC1B,MAAO,CACL,OAAQ,OACR,YAAa,UACb,OAAQ,KAAK,0BAA0B,OACvC,QAAS,CACP,OAAQ,mBACR,eAAgB,mBAChB,eAAgB,SAAS,cAAc,yBAAyB,EAAE,OACnE,CACF,CACL,CAEE,IAAI,sBAAuB,CACzB,OAAO,KAAK,QAAQ,QAAQ,uBAAyB,MACzD,CAEE,IAAI,0BAA2B,CAC7B,MAAMK,EAAiB,SAAS,cAAc,qCAAqC,EAEnF,OAAO,KAAK,YAAY,qCAAqCA,EAAgB,iBAAiB,CAClG,CAEE,IAAI,0BAA2B,CAC7B,OAAO,KAAK,QAAQ,QAAQ,wBAChC,CAEE,IAAI,qBAAqBC,EAAO,CAC1B,KAAK,4BACP,KAAK,uBAAuB,OAAS,CAACA,EAE5C,CAEE,IAAI,gBAAgBA,EAAO,CACrB,KAAK,uBACP,KAAK,kBAAkB,OAAS,CAACA,EAEvC,CAEE,IAAI,2CAA4C,CAC9C,MAAMC,EAAQ,KAAK,QAAQ,cAAc,oCAAoC,EAC7E,OAAKA,EAEEA,EAAM,MAFM,EAGvB,CAEE,IAAI,0CAA2C,CAC7C,MAAMA,EAAQ,KAAK,QAAQ,cAAc,+CAA+C,EACxF,OAAKA,EAEEA,EAAM,QAAU,OAFJ,EAGvB,CAEE,IAAI,qBAAsB,CACxB,OAAO,KAAK,QAAQ,QAAQ,mBAChC,CACA"}