{"version":3,"file":"city-1cbcdc77.js","sources":["../../../app/javascript/javascripts/composables/inquiry/city.ts"],"sourcesContent":["import { ref, isRef, unref, watchEffect } from 'vue';\nimport axios from 'axios';\n\nimport type { Ref } from 'vue';\nimport type Inquiry from '@/javascripts/utils/inquiry';\nimport type { FormOption } from '@/javascripts/utils/inquiry_form_options';\n\n/**\n * 市区町村に関するコンポーザブル関数\n * @param prefectureCd 都道府県コード\n */\nexport function useCity(prefectureCd: Inquiry['prefectureCd'] | Ref) {\n /** 市区町村の選択肢リスト */\n const cities = ref([]);\n\n /** 市区町村リスト取得時エラー */\n const error = ref();\n\n /**\n * 市区町村の選択肢リストを取得\n */\n async function fetchCities() {\n // 取得前に状態をリセット\n cities.value = [];\n error.value = null;\n\n // 都道府県コード未指定の場合は終了\n if(!unref(prefectureCd)) return;\n\n try {\n // 市区町村の選択肢リストAPIをコール\n const response = await axios.get<{ code: string, name: string }[]>(\n `/api/v1/code/setup_cities/${unref(prefectureCd)}`\n );\n\n // レスポンスの型(code, name)をFormOption型(cd, text)に変換してセット\n cities.value = response.data.map(formOption => ({ cd: formOption.code, text: formOption.name }));\n } catch (e) {\n console.error(e);\n error.value = '選択肢を取得できませんでした';\n }\n }\n\n if(isRef(prefectureCd)) {\n // 引数がリアクティブな値の場合、変更を監視\n watchEffect(fetchCities);\n }\n else {\n // 非リアクティブな値の場合は一度だけ取得\n fetchCities();\n }\n\n return {\n cities,\n error\n };\n}\n\nexport default useCity;\n"],"names":["useCity","prefectureCd","cities","ref","error","fetchCities","unref","response","axios","formOption","e","isRef","watchEffect"],"mappings":"0aAWO,SAASA,EAAQC,EAAsE,CAEtF,MAAAC,EAASC,EAAkB,CAAA,CAAE,EAG7BC,EAAQD,IAKd,eAAeE,GAAc,CAMxB,GAJHH,EAAO,MAAQ,GACfE,EAAM,MAAQ,KAGX,EAACE,EAAML,CAAY,EAElB,GAAA,CAEI,MAAAM,EAAW,MAAMC,EAAM,IAC3B,6BAA6BF,EAAML,CAAY,CAAC,EAAA,EAIlDC,EAAO,MAAQK,EAAS,KAAK,IAAmBE,IAAA,CAAE,GAAIA,EAAW,KAAM,KAAMA,EAAW,IAAA,EAAO,QACxFC,EAAG,CACV,QAAQ,MAAMA,CAAC,EACfN,EAAM,MAAQ,gBAChB,CACF,CAEG,OAAAO,EAAMV,CAAY,EAEnBW,EAAYP,CAAW,EAIXA,IAGP,CACL,OAAAH,EACA,MAAAE,CAAA,CAEJ"}