{"version":3,"file":"search_condition_change-BvPI1FaO.js","sources":["../../../app/frontend/entrypoints/jobs/index/search_condition_change.js"],"sourcesContent":["/* eslint-disable no-use-before-define,no-param-reassign,import/prefer-default-export */\nimport { slideDown, slideUp } from '../../slide_toggle';\n\n// PC/SPの検索条件を変更した時の処理\nexport function searchConditionChange() {\n const form = document.querySelector('form[action=\"/jobs/search\"]');\n const inputPrefecture = form.querySelector('#js-input-prefecture');\n const inputLicense = form.querySelector('#js-input-license');\n\n // [PCのみ] 検索フォームの開閉\n setSlideToggleForSearchForm();\n\n // [初回のみ] 都道府県の子のチェックがtr要素内全てONの場合、tr要素内の親のチェックをつける\n initializePrefectureParentCheckbox(form);\n\n // 親子のチェックボックスの値変更時の処理\n onParentChildCheckboxChanged(form, inputPrefecture, inputLicense);\n\n // リセットボタンをクリックされた時の処理\n clickedResetButton(form, inputPrefecture, inputLicense);\n}\n\n// [初回のみ] 都道府県の子のチェックがtr要素内全てONの場合、tr要素内の親のチェックをつける\nfunction initializePrefectureParentCheckbox(form) {\n const prefectureParentCheckboxes = form.querySelectorAll('.js-parent-checkbox');\n prefectureParentCheckboxes.forEach((prefectureParentCheckbox) => {\n // `tr`要素まで遡りそこに所属する子のcheckboxを取得\n const childrenCheckboxes = prefectureParentCheckbox.closest('tr').querySelectorAll('.js-child-checkbox');\n // 子のチェックボックスが全てチェックされたかどうかを判定\n const allChecked = Array.from(childrenCheckboxes).every(child => child.checked);\n // 親のチェックボックスを変更\n prefectureParentCheckbox.checked = allChecked;\n });\n}\n\n// [PCのみ] 検索条件のフォームの開閉\nfunction setSlideToggleForSearchForm() {\n const searchFormToggle = document.querySelector('#js-search_form_toggle');\n const searchForm = document.querySelector('#js-search_form');\n if (!searchFormToggle || !searchForm) return;\n\n searchFormToggle.addEventListener('click', () => {\n if (searchForm.classList.contains('-opened')) {\n // 閉じる処理\n slideUp(searchForm);\n searchForm.classList.remove('-opened');\n } else {\n // 開く処理\n slideDown(searchForm);\n searchForm.classList.add('-opened');\n }\n });\n}\n\n\n// 親子のチェックボックスの値変更時の処理\nfunction onParentChildCheckboxChanged(form, inputPrefecture, inputLicense) {\n const checkboxes = form.querySelectorAll('.js-parent-child-checkbox input[type=checkbox]');\n checkboxes.forEach((checkbox) => {\n checkbox.addEventListener('change', () => {\n // `.js-parent-checkbox`があるかどうか\n if (checkbox.classList.contains('js-parent-checkbox')) {\n onParentCheckboxChanged(checkbox);\n } else {\n onChildCheckboxChanged(checkbox);\n }\n\n // SPの場合は、チェックボックスの値をテキストに反映させる\n // SPのみ表示の要素があるかどうか\n if (inputPrefecture && inputLicense) {\n // name属性に`prefecture_names`が含まれる子のチェックボックスの値を取得\n const prefectureNames = Array.from(form.querySelectorAll('input[name=\"jobs_search[prefecture_names][]\"].js-child-checkbox'))\n .filter(prefectureName => prefectureName.checked)\n .map(prefectureName => prefectureName.value);\n // name属性に`license_names`が含まれる子のチェックボックスの値を取得\n const licenseNames = Array.from(form.querySelectorAll('input[name=\"jobs_search[license_names][]\"].js-child-checkbox'))\n .filter(licenseName => licenseName.checked)\n .map(licenseName => licenseName.value);\n // inputPrefectureのテキストを反映させる(input要素ではなくdiv要素になっているため)\n inputPrefecture.textContent = prefectureNames.join(',');\n // inputLicenseのテキストを反映させる(input要素ではなくdiv要素になっているため)\n inputLicense.textContent = licenseNames.join(',');\n }\n });\n });\n}\n\n// 親のチェックボックスがチェックされた際のロジック\nfunction onParentCheckboxChanged(checkbox) {\n // `tr`要素まで遡りそこに所属する子のcheckboxを取得\n const childrenCheckboxes = checkbox.closest('tr').querySelectorAll('.js-child-checkbox');\n childrenCheckboxes.forEach((childCheckbox) => {\n if (checkbox.checked) {\n // 親がONの時、所属する全ての子をONにする\n childCheckbox.checked = true;\n } else {\n // 親がOFFの時、所属する全ての子をOFFにする\n childCheckbox.checked = false;\n }\n });\n}\n\n// 子のチェックボックスがチェックされた際のロジック\nfunction onChildCheckboxChanged(checkbox) {\n // `tr`要素まで遡りそこに所属する親のcheckboxを取得\n const group = checkbox.closest('tr');\n const parentCheckbox = group.querySelector('.js-parent-checkbox');\n // 親チェックボックスが存在する時\n if (parentCheckbox) {\n // 子のチェックボックスが全てチェックされたかどうかを判定\n const allChecked = Array.from(group.querySelectorAll('.js-child-checkbox')).every(child => child.checked);\n // 親のチェックボックスを変更\n parentCheckbox.checked = allChecked;\n }\n}\n\n// リセットボタンをクリックされた時の処理\nfunction clickedResetButton(form, inputPrefecture, inputLicense) {\n const formResetButton = form.querySelector('#js-form-reset');\n\n formResetButton.addEventListener('click', () => {\n // テキストボックスの値を全て空にする\n const textboxes = form.querySelectorAll('input[type=\"text\"]');\n textboxes.forEach((textbox) => {\n textbox.value = '';\n });\n\n // セレクトボックスの値を初期値に戻す\n const selectboxes = form.querySelectorAll('select');\n selectboxes.forEach((selectbox) => {\n // 初期状態に戻すためにはselectedIndexを0に設定する\n selectbox.selectedIndex = 0;\n });\n\n // 検索条件のチェックボックスを全て外す\n const checkboxes = form.querySelectorAll('input[type=\"checkbox\"]');\n checkboxes.forEach((checkbox) => {\n checkbox.checked = false;\n });\n\n // inputPrefecture, inputLicenseのテキストを初期値に戻す\n if (inputPrefecture && inputLicense) {\n inputPrefecture.textContent = '';\n inputLicense.textContent = '';\n }\n });\n}\n"],"names":["searchConditionChange","form","inputPrefecture","inputLicense","setSlideToggleForSearchForm","initializePrefectureParentCheckbox","onParentChildCheckboxChanged","clickedResetButton","prefectureParentCheckbox","childrenCheckboxes","allChecked","child","searchFormToggle","searchForm","slideUp","slideDown","checkbox","onParentCheckboxChanged","onChildCheckboxChanged","prefectureNames","prefectureName","licenseNames","licenseName","childCheckbox","group","parentCheckbox","textbox","selectbox"],"mappings":"sDAIO,SAASA,GAAwB,CACtC,MAAMC,EAAO,SAAS,cAAc,6BAA6B,EAC3DC,EAAkBD,EAAK,cAAc,sBAAsB,EAC3DE,EAAeF,EAAK,cAAc,mBAAmB,EAG3DG,IAGAC,EAAmCJ,CAAI,EAGvCK,EAA6BL,EAAMC,EAAiBC,CAAY,EAGhEI,EAAmBN,EAAMC,EAAiBC,CAAY,CACxD,CAGA,SAASE,EAAmCJ,EAAM,CACbA,EAAK,iBAAiB,qBAAqB,EACnD,QAASO,GAA6B,CAE/D,MAAMC,EAAqBD,EAAyB,QAAQ,IAAI,EAAE,iBAAiB,oBAAoB,EAEjGE,EAAa,MAAM,KAAKD,CAAkB,EAAE,MAAME,GAASA,EAAM,OAAO,EAE9EH,EAAyB,QAAUE,CACvC,CAAG,CACH,CAGA,SAASN,GAA8B,CACrC,MAAMQ,EAAmB,SAAS,cAAc,wBAAwB,EAClEC,EAAa,SAAS,cAAc,iBAAiB,EACvD,CAACD,GAAoB,CAACC,GAE1BD,EAAiB,iBAAiB,QAAS,IAAM,CAC3CC,EAAW,UAAU,SAAS,SAAS,GAEzCC,EAAQD,CAAU,EAClBA,EAAW,UAAU,OAAO,SAAS,IAGrCE,EAAUF,CAAU,EACpBA,EAAW,UAAU,IAAI,SAAS,EAExC,CAAG,CACH,CAIA,SAASP,EAA6BL,EAAMC,EAAiBC,EAAc,CACtDF,EAAK,iBAAiB,gDAAgD,EAC9E,QAASe,GAAa,CAC/BA,EAAS,iBAAiB,SAAU,IAAM,CAUxC,GARIA,EAAS,UAAU,SAAS,oBAAoB,EAClDC,EAAwBD,CAAQ,EAEhCE,EAAuBF,CAAQ,EAK7Bd,GAAmBC,EAAc,CAEnC,MAAMgB,EAAkB,MAAM,KAAKlB,EAAK,iBAAiB,iEAAiE,CAAC,EACxH,OAAOmB,GAAkBA,EAAe,OAAO,EAC/C,IAAIA,GAAkBA,EAAe,KAAK,EAEvCC,EAAe,MAAM,KAAKpB,EAAK,iBAAiB,8DAA8D,CAAC,EAClH,OAAOqB,GAAeA,EAAY,OAAO,EACzC,IAAIA,GAAeA,EAAY,KAAK,EAEvCpB,EAAgB,YAAciB,EAAgB,KAAK,GAAG,EAEtDhB,EAAa,YAAckB,EAAa,KAAK,GAAG,CACjD,CACP,CAAK,CACL,CAAG,CACH,CAGA,SAASJ,EAAwBD,EAAU,CAEdA,EAAS,QAAQ,IAAI,EAAE,iBAAiB,oBAAoB,EACpE,QAASO,GAAkB,CACxCP,EAAS,QAEXO,EAAc,QAAU,GAGxBA,EAAc,QAAU,EAE9B,CAAG,CACH,CAGA,SAASL,EAAuBF,EAAU,CAExC,MAAMQ,EAAQR,EAAS,QAAQ,IAAI,EAC7BS,EAAiBD,EAAM,cAAc,qBAAqB,EAEhE,GAAIC,EAAgB,CAElB,MAAMf,EAAa,MAAM,KAAKc,EAAM,iBAAiB,oBAAoB,CAAC,EAAE,MAAMb,GAASA,EAAM,OAAO,EAExGc,EAAe,QAAUf,CAC1B,CACH,CAGA,SAASH,EAAmBN,EAAMC,EAAiBC,EAAc,CACvCF,EAAK,cAAc,gBAAgB,EAE3C,iBAAiB,QAAS,IAAM,CAE5BA,EAAK,iBAAiB,oBAAoB,EAClD,QAASyB,GAAY,CAC7BA,EAAQ,MAAQ,EACtB,CAAK,EAGmBzB,EAAK,iBAAiB,QAAQ,EACtC,QAAS0B,GAAc,CAEjCA,EAAU,cAAgB,CAChC,CAAK,EAGkB1B,EAAK,iBAAiB,wBAAwB,EACtD,QAASe,GAAa,CAC/BA,EAAS,QAAU,EACzB,CAAK,EAGGd,GAAmBC,IACrBD,EAAgB,YAAc,GAC9BC,EAAa,YAAc,GAEjC,CAAG,CACH"}