{"version":3,"file":"validation-66f7a613.js","sources":["../../../app/javascript/javascripts/utils/custom_validators.ts","../../../app/javascript/javascripts/composables/inquiry/validation.ts"],"sourcesContent":["// Vuelidateで使うカスタムバリデーション関数\n\nimport { helpers } from '@vuelidate/validators';\n\n/**\n * 電話番号の桁数が正しい\n */\nexport const telDigitLength = (tel: number | string) => {\n if(!helpers.req(tel)) return true;\n\n // ハイフンなどを取り除く\n const numOnly = tel.toString().replace(/[--ー―]/g, \"\");\n\n // 正しい桁数:携帯電話の場合は11桁、それ以外は10桁\n const validLength = /^(090|080|070|050|090|080|070|050)/.test(numOnly) ? 11 : 10;\n\n return numOnly.length === validLength;\n}\n\n/**\n * 電話番号のフォーマットが正しい\n */\nexport const telFormat = (tel: number | string) => {\n return !helpers.req(tel) || !telDigitLength(tel) || /^[00][0-90-9]{1,4}[--ー―]{0,1}[0-90-9]{2,4}[--ー―]{0,1}[0-90-9]{4}$/.test(tel.toString())\n}\n\n/**\n * 年収のフォーマットが正しい\n */\nexport const annualIncomeFormat = (num: number | string) => {\n // 半角数字のみを許容し、0で始まらないことを確認する正規表現\n const regex = /^(?!0)[0-9]+$/;\n return regex.test(num.toString());\n}\n\nexport default {\n telDigitLength,\n telFormat,\n annualIncomeFormat\n};\n","// 問い合わせフォームのバリデーション\n// vuelidateのラッパーなので、利用の際はvuelidateのドキュメント(https://vuelidate-next.netlify.app/)も参照ください。\n\nimport { useVuelidate } from '@vuelidate/core';\nimport { required, maxLength, email, helpers } from '@vuelidate/validators';\nimport { telDigitLength, telFormat } from '@/javascripts/utils/custom_validators';\n\nimport type { Ref } from 'vue';\nimport type { Validation, ValidationRuleCollection } from '@vuelidate/core';\nimport type Inquiry from '@/javascripts/utils/inquiry';\n\n/** バリデーションする項目 */\nexport type ValidationKey =\n 'employmentTypeCd' | 'wishfulTimeCd' | 'prefectureCd' |\n 'lastName' | 'firstName' | 'lastNameKana' | 'firstNameKana' |\n 'birthYearCd' | 'phone' | 'email' | 'comment';\n\n/** お名前のバリデーションルール */\nconst nameValidators: ValidationRuleCollection = {\n required: helpers.withMessage('お名前を入力してください', required),\n maxLength: helpers.withMessage('30文字以内で入力してください', maxLength(30))\n};\n\n/** ふりがなのバリデーションルール */\nconst kanaValidators: ValidationRuleCollection = {\n required: helpers.withMessage('ふりがなを入力してください', required),\n maxLength: helpers.withMessage('30文字以内で入力してください', maxLength(30))\n};\n\n/** バリデーションルールのテンプレート */\nexport type ValidationRules = {\n [keys in ValidationKey]: ValidationRuleCollection\n};\n\nexport const rules: ValidationRules = {\n employmentTypeCd: {\n required: helpers.withMessage('ご希望の雇用形態を選択してください', required)\n },\n wishfulTimeCd: {\n required: helpers.withMessage('ご希望の転職時期を選択してください', required)\n },\n prefectureCd: {\n required: helpers.withMessage('お住まいの都道府県を選択してください', required)\n },\n lastName: nameValidators,\n firstName: nameValidators,\n lastNameKana: kanaValidators,\n firstNameKana: kanaValidators,\n birthYearCd: {\n required: helpers.withMessage('生まれ年を選択してください', required)\n },\n phone: {\n required: helpers.withMessage('電話番号を入力してください', required),\n telDigitLength: helpers.withMessage('電話番号の桁数が正しくありません', telDigitLength),\n telFormat: helpers.withMessage('電話番号が正しくありません', telFormat)\n },\n email: {\n email: helpers.withMessage('メールアドレスが正しくありません', email),\n maxLength: helpers.withMessage('80文字以内で入力してください', maxLength(80))\n },\n comment: {\n maxLength: helpers.withMessage('400文字以内で入力してください', maxLength(400))\n }\n}\n\n/** バリデーション対象となる問い合わせオブジェクト */\ntype InquiryObj = Pick;\n\n/** 問い合わせバリデーション */\nexport type InquiryValidation = Validation;\n\n/** バリデーションルール(バリデーション項目を指定) */\nexport type PickValidationRules = Pick;\n/** 問い合わせバリデーション(バリデーション項目を指定) */\nexport type PickInquiryValidation = Validation, InquiryObj>;\n\n/**\n * 問い合わせフォームのバリデーションに関するコンポーザブル関数\n * @param inquiry バリデーションする問い合わせインスタンス\n */\nexport function useInquiryValidation(inquiry: InquiryObj | Ref): Ref;\n\n/**\n * 問い合わせフォームのバリデーションに関するコンポーザブル関数(バリデーション項目を指定)\n * @param inquiry バリデーションする問い合わせインスタンス\n * @param validationFields バリデーションする項目\n */\nexport function useInquiryValidation(\n inquiry: InquiryObj | Ref,\n validationFields: T[]\n): Ref>;\n\n// オーバーロード関数の実装\nexport function useInquiryValidation(\n inquiry: InquiryObj | Ref,\n validationFields?: T[]\n) {\n if (validationFields) {\n const pickRules = validationFields.reduce((obj, key) => {\n obj[key] = rules[key];\n return obj;\n }, {} as PickValidationRules);\n return useVuelidate(pickRules, inquiry, { $autoDirty: true });\n }\n else {\n return useVuelidate(rules, inquiry, { $autoDirty: true });\n }\n}\n\nexport default useInquiryValidation;\n"],"names":["telDigitLength","tel","helpers","numOnly","validLength","telFormat","annualIncomeFormat","num","nameValidators","required","maxLength","kanaValidators","rules","email","useInquiryValidation","inquiry","validationFields","pickRules","obj","key","useVuelidate"],"mappings":"0XAOa,MAAAA,EAAkBC,GAAyB,CACnD,GAAA,CAACC,EAAQ,IAAID,CAAG,EAAU,MAAA,GAG7B,MAAME,EAAUF,EAAI,SAAA,EAAW,QAAQ,UAAW,EAAE,EAG9CG,EAAc,qCAAqC,KAAKD,CAAO,EAAI,GAAK,GAE9E,OAAOA,EAAQ,SAAWC,CAC5B,EAKaC,EAAaJ,GACjB,CAACC,EAAQ,IAAID,CAAG,GAAK,CAACD,EAAeC,CAAG,GAAK,oEAAoE,KAAKA,EAAI,SAAU,CAAA,EAMhIK,EAAsBC,GAEnB,gBACD,KAAKA,EAAI,SAAU,CAAA,ECd5BC,EAAmD,CACvD,SAAUN,EAAQ,YAAY,eAAgBO,CAAQ,EACtD,UAAWP,EAAQ,YAAY,kBAAmBQ,EAAU,EAAE,CAAC,CACjE,EAGMC,EAAmD,CACvD,SAAUT,EAAQ,YAAY,gBAAiBO,CAAQ,EACvD,UAAWP,EAAQ,YAAY,kBAAmBQ,EAAU,EAAE,CAAC,CACjE,EAOaE,EAAyB,CACpC,iBAAkB,CAChB,SAAUV,EAAQ,YAAY,oBAAqBO,CAAQ,CAC7D,EACA,cAAe,CACb,SAAUP,EAAQ,YAAY,oBAAqBO,CAAQ,CAC7D,EACA,aAAc,CACZ,SAAUP,EAAQ,YAAY,qBAAsBO,CAAQ,CAC9D,EACA,SAAUD,EACV,UAAWA,EACX,aAAcG,EACd,cAAeA,EACf,YAAa,CACX,SAAUT,EAAQ,YAAY,gBAAiBO,CAAQ,CACzD,EACA,MAAO,CACL,SAAUP,EAAQ,YAAY,gBAAiBO,CAAQ,EACvD,eAAgBP,EAAQ,YAAY,mBAAoBF,CAAc,EACtE,UAAWE,EAAQ,YAAY,gBAAiBG,CAAS,CAC3D,EACA,MAAO,CACL,MAAOH,EAAQ,YAAY,mBAAoBW,CAAK,EACpD,UAAWX,EAAQ,YAAY,kBAAmBQ,EAAU,EAAE,CAAC,CACjE,EACA,QAAS,CACP,UAAWR,EAAQ,YAAY,mBAAoBQ,EAAU,GAAG,CAAC,CACnE,CACF,EA8BgB,SAAAI,EACdC,EACAC,EACA,CACA,GAAIA,EAAkB,CACpB,MAAMC,EAAYD,EAAiB,OAAO,CAACE,EAAKC,KAC1CD,EAAAC,CAAG,EAAIP,EAAMO,CAAG,EACbD,GACN,CAA4B,CAAA,EAC/B,OAAOE,EAAaH,EAAWF,EAAS,CAAE,WAAY,GAAM,CAAA,KAG5D,QAAOK,EAAaR,EAAOG,EAAS,CAAE,WAAY,GAAM,CAE5D"}