ReactとかVueを書くとたまに使うことになるYupというバリデーションライブラリがある。
大抵の場合は効率よく書けるんだけど、込み入ったバリデーションが必要になると困る。
何か抜け道が用意されているだろうと探すとtestというschemeがあるらしい。
GitHub - jquense/yup: Dead simple Object schema validation
適当に用意した雰囲気コードだとこんな感じで書けるらしい。
const canWork = (start, name) => doSomething(); const validationSchema = Yup.object().shape({ worker: Yup.string(), start_date: Yup.date() .required('開始日は必ず入力してください') .test({ name: 'start_date', message: 'この作業者はこの日付には開始できません', test: function (start) { return !canWork(start, this.parent.worker); }, }), });
ポイントとしては以下な気がする。
- testに渡す関数はアロー演算子ではなくfunctionで作る必要がありそう(thisのコンテキスト的に)
- test関数へはテスト対象のフィールド値が渡される
- this.parent.hogehogeで他のフィールドを参照できる
- テスト結果がfalseならバリデーションエラーになる
個人的にはこの手のライブラリは苦手なんだよなぁ。。。
込み入ったことするとややこしいけど、一度導入するとなかなか排除できないし。うぅむ。