{"version":3,"file":"js/app.26f8c373.js","mappings":"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","sources":["webpack://python-webpack-boilerplate/./src/legacyFormHandlers.js","webpack://python-webpack-boilerplate/./src/application/app.js"],"sourcesContent":["import { getCsrfToken } from 'utils';\n\nconst setAssignEditorFormError = errorText => {\n  const errorEl = document.querySelector('#assign-editors-modal .error-message');\n  if (errorText) {\n    errorEl.innerText = errorText;\n    errorEl.classList.remove('d-none');\n  } else {\n    errorEl.innerText = '';\n    errorEl.classList.add('d-none');\n  }\n};\n\nconst setFormIsFetching = (isFetching = true) => {\n  const formEl = document.querySelector('#assign-editors-form');\n  Array.from(formEl.querySelectorAll('[name=\"assign-editors\"]')).forEach(el => {\n    el.disabled = isFetching;\n  });\n\n  if (isFetching) {\n    formEl.querySelector('.buttons-active').classList.add('d-none');\n    formEl.querySelector('.buttons-disabled').classList.remove('d-none');\n  } else {\n    formEl.querySelector('.buttons-disabled').classList.add('d-none');\n    formEl.querySelector('.buttons-active').classList.remove('d-none');\n  }\n};\n\nconst handleAssignEditorsModalHide = evt => {\n  // Reset form values and error message when the modal is closed.\n  const modalEl = evt.target;\n  Array.from(modalEl.querySelectorAll('[name=\"assign-editors\"]')).forEach(el => {\n    el.checked = el.dataset.hasOwnProperty('initialChecked');\n  });\n  setAssignEditorFormError(null);\n  setFormIsFetching(false);\n};\n\nconst handleAssignEditorsFormSubmit = evt => {\n  evt.preventDefault();\n  const formEl = evt.target;\n  const ids = Array.from(formEl.querySelectorAll('[name=assign-editors]:checked')).map(el => parseInt(el.value, 10));\n  const csrfToken = formEl.querySelector('[name=csrfmiddlewaretoken]').value;\n  const body = JSON.stringify({ profile_ids: ids });\n\n  // Update UI state\n  setFormIsFetching(true);\n\n  // Make ajax call\n  fetch(formEl.action, {\n    credentials: 'include',\n    method: formEl.method,\n    headers: {\n      'Content-Type': 'application/json; charset=utf-8',\n      'X-CSRFToken': csrfToken,\n    },\n    body,\n  })\n    .then(response => {\n      if (response.status === 400) {\n        // validation errors\n        response.json().then(data => {\n          setFormIsFetching(false);\n          setAssignEditorFormError(data.detail);\n        });\n      } else if (!response.ok) {\n        throw new Error(response.statusText);\n      } else {\n        window.location.reload();\n      }\n      return response;\n    })\n    .catch(err => {\n      setFormIsFetching(false);\n      setAssignEditorFormError('Something went wrong. Please try your request again later.');\n      console.error(err);\n    });\n};\n\nconst oneShotForm = function (selector, successMessage, removeForm) {\n  const myForm = document.querySelector(selector);\n  if (!myForm) return null;\n\n  myForm.onsubmit = function (event) {\n    event.preventDefault();\n    Array.from(document.querySelectorAll('.one-shot-form-alert')).forEach(el => el.remove());\n\n    const formData = new FormData(event.target);\n    fetch(this.action, {\n      credentials: 'include',\n      method: this.method,\n      headers: {\n        Accept: 'application/json',\n        'X-CSRFToken': getCsrfToken(),\n      },\n      body: formData,\n    })\n      .then(response => {\n        if (!response.ok && response.status !== 400) throw new Error(response.statusText);\n        return response;\n      })\n      .then(response => response.json())\n      .then(data => {\n        handleFormSuccess();\n      })\n      .catch(err => {\n        console.error(err);\n        handleFormError();\n      });\n  };\n\n  function handleFormSuccess () {\n    const msg = `\n      <div class=\"alert alert-warning alert-dismissible fade show\" role=\"alert\">\n        ${successMessage}\n        <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"alert\" aria-label=\"Close\"></button>\n      </div>\n    `;\n    const msgEl = document.createElement('div');\n    msgEl.innerHTML = msg;\n\n    const msgContainer = document.querySelector('#messages');\n    msgContainer.append(msgEl);\n\n    if (removeForm) {\n      myForm.remove(); // reset form data\n    }\n  }\n\n  function handleFormError () {\n    const msg = `\n      <div class=\"alert alert-warning one-shot-form-alert\">\n        <strong>Error!</strong> Please try to submit again.\n      </div>\n    `;\n    const msgEl = document.createElement('div');\n    msgEl.innerHTML = msg;\n\n    const msgContainer = document.querySelector('#messages');\n    msgContainer.append(msgEl);\n  }\n};\n\ndocument.addEventListener(\"DOMContentLoaded\", function(event) {\n  const editorsFormEl = document.getElementById('assign-editors-form');\n  if (editorsFormEl) {\n    editorsFormEl.onsubmit = handleAssignEditorsFormSubmit;\n  }\n  const editorsModalEl = document.getElementById('assign-editors-modal');\n  if (editorsModalEl) {\n    editorsModalEl.addEventListener('hidden.bs.modal', handleAssignEditorsModalHide);\n  }\n\n  oneShotForm('.event-recertify', 'Event recertified.', false);\n  oneShotForm('.event-publish', 'Event updated.', false);\n  oneShotForm('.poi-recertify', 'Point of interest recertified.', false);\n  oneShotForm('.poi-publish', 'Point of interest updated.', false);\n});\n","import React from 'react';\nimport { createRoot } from 'react-dom/client';\nimport { FilterContextProvider, UserContextProvider } from 'context';\nimport getPageComponents from 'reactEnvironmentInit';\nimport * as components from 'components';\n\n// main stylesheet\nimport 'styles/index.scss';\n\n// external global js\nimport 'bootstrap/dist/js/bootstrap.bundle';\n\n// Font Awesome initialization\nimport 'fontAwesomeInit';\n\n// Sentry initialization\nimport 'sentryInit';\n\n// TODO - legacy forms\nimport 'legacyFormHandlers';\n\nconst { ErrorBoundary } = components;\n\nconst pageComponents = getPageComponents(components);\n\nconst AppRoot = () => (\n  <ErrorBoundary>\n    <UserContextProvider>\n      <FilterContextProvider>\n        {pageComponents}\n      </FilterContextProvider>\n    </UserContextProvider>\n  </ErrorBoundary>\n);\n\nconst container = document.getElementById('react-root');\nconst root = createRoot(container);\nroot.render(<AppRoot />);\n"],"names":["setAssignEditorFormError","errorText","errorEl","document","querySelector","innerText","classList","remove","add","setFormIsFetching","isFetching","formEl","Array","from","querySelectorAll","forEach","el","disabled","handleAssignEditorsModalHide","evt","modalEl","target","checked","dataset","hasOwnProperty","handleAssignEditorsFormSubmit","preventDefault","ids","map","parseInt","value","csrfToken","body","JSON","stringify","profile_ids","fetch","action","credentials","method","headers","then","response","status","json","data","detail","ok","Error","statusText","window","location","reload","catch","err","console","error","oneShotForm","selector","successMessage","removeForm","myForm","onsubmit","event","formData","FormData","this","Accept","getCsrfToken","msg","msgEl","createElement","innerHTML","append","handleFormSuccess","handleFormError","addEventListener","editorsFormEl","getElementById","editorsModalEl","ErrorBoundary","components","pageComponents","getPageComponents","AppRoot","React","UserContextProvider","FilterContextProvider","container","createRoot","render"],"sourceRoot":""}