{"version":3,"file":"attached_media_controller-Cv8w_3es.js","sources":["../../../app/javascript/controllers/editor/attached_media_controller.js"],"sourcesContent":["import {Controller} from \"@hotwired/stimulus\"\nimport {DirectUpload} from \"@rails/activestorage\"\n\nimport {useToastNotifiers} from \"../mixins/useToastNotifiers\"\n\nclass DirectUploadStatusCode {\n  constructor(responseString) {\n    this.statusCode = Number.parseInt(responseString.split(\"Status: \")[1])\n  }\n\n  get forbidden() {\n    return this.statusCode === 403\n  }\n}\n\nexport default class extends Controller {\n  static values = {\n    expiredSubscription: String,\n    inputName: String,\n    upload: { type: Boolean, default: true }\n  }\n\n  static targets = [\"input\", \"overlay\", \"removeButton\", \"overlayRemoveButton\", \"error\", \"retryButton\", \"overlayActions\"]\n\n  initialize() {\n    if(this.uploadValue) {\n      this.upload = new DirectUpload(this.inputTarget.files[0], this.inputTarget.dataset.directUploadUrl, this)\n    } else {\n      this.element.removeAttribute(\"data-uploading\")\n      this.element.removeAttribute(\"data-upload-error\")\n      this.element.setAttribute(\"data-uploaded\", \"\")\n      this.overlayTarget.classList.add(\"hidden\")\n      this.removeButtonTarget.classList.add(\"group-hover:flex\")\n    }\n  }\n\n  connect() {\n    useToastNotifiers(this)\n\n    if(this.uploadValue) {\n      this.startUpload()\n    }\n  }\n\n  startUpload() {\n    this.element.setAttribute(\"data-uploading\", \"\")\n\n    this.upload.create((error, blob) => {\n      if(error) {\n        this.onUploadError(error)\n      } else {\n        this.element.removeAttribute(\"data-uploading\")\n        this.element.removeAttribute(\"data-upload-error\")\n\n        this.element.setAttribute(\"data-uploaded\", \"\")\n\n        let hiddenField = document.createElement('input')\n        hiddenField.type = \"hidden\"\n        hiddenField.value = blob.signed_id;\n        hiddenField.name = `${this.inputNameValue}[signed_id]`\n\n        this.element.appendChild(hiddenField)\n\n        hiddenField = document.createElement('input')\n        hiddenField.type = \"hidden\"\n        hiddenField.value = blob.key;\n        hiddenField.name = `${this.inputNameValue}[id]`\n\n        this.element.appendChild(hiddenField)\n      }\n    })\n  }\n\n  retryUpload() {\n    this.displayInitialState()\n    this.startUpload()\n  }\n\n  remove() {\n    this.dispatch('removed', {\n      detail: this.element\n    })\n\n    this.element.remove()\n  }\n\n  // private\n\n  directUploadWillStoreFileWithXHR(request) {\n    request.upload.addEventListener(\n      \"progress\",\n      event => this.directUploadDidProgress(event)\n    )\n  }\n\n  directUploadDidProgress(event) {\n    if(event.loaded === event.total) {\n      this.overlayTarget.classList.add(\"hidden\")\n      this.removeButtonTarget.classList.add(\"group-hover:flex\")\n    }\n  }\n\n  onUploadError(error) {\n    const statusCode = new DirectUploadStatusCode(error)\n\n    if(statusCode.forbidden) {\n      this.showToastErrorMessage(this.expiredSubscriptionValue)\n    }\n\n    this.overlayActionsTarget.classList.remove(\"hidden\")\n\n    this.element.removeAttribute(\"data-uploading\")\n    this.element.setAttribute(\"data-upload-error\", \"\")\n\n    this.showOverlay()\n\n    this.removeButtonTarget.classList.remove(\"group-hover:flex\")\n    this.overlayRemoveButtonTarget.classList.add(\"group-hover:flex\")\n\n    this.retryButtonTarget.classList.add(\"hidden\", \"group-hover:flex\")\n    this.errorTarget.classList.remove(\"hidden\")\n  }\n\n  showOverlay() {\n    this.overlayTarget.classList.remove(\"hidden\")\n    this.overlayTarget.classList.add(\"hover:bg-blush-80\")\n    this.overlayTarget.querySelector(\"[data-spinner]\").classList.add(\"hidden\")\n  }\n\n  displayInitialState() {\n    this.overlayTarget.classList.remove(\"hidden\")\n\n    this.overlayActionsTarget.classList.add(\"hidden\")\n    this.overlayTarget.querySelector(\"[data-spinner]\").classList.remove(\"hidden\")\n\n    this.retryButtonTarget.classList.add(\"hidden\")\n    this.retryButtonTarget.classList.remove(\"group-hover:flex\")\n\n    this.overlayRemoveButtonTarget.classList.remove(\"group-hover:flex\")\n\n    this.removeButtonTarget.classList.remove(\"group-hover:flex\")\n    this.errorTarget.classList.add(\"hidden\")\n  }\n\n  get forbidden() {\n    return 403\n  }\n\n  get inputName() {\n    return this.inputNameValue || \"attachments[]\"\n  }\n}\n"],"names":["DirectUploadStatusCode","responseString","attached_media_controller","Controller","DirectUpload","useToastNotifiers","error","blob","hiddenField","request","event","__publicField"],"mappings":"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"}