もしかしたら、意味があったのかもしれませんが、
changed イベント内で
state.fields.find(({code}) => code === fieldCode).validations = [];
があり、削除してみたところ動作しているようです。
条件分岐初期状態
チェックボックスCにチェックで日付欄を出力
date1に未来の日付でエラーになる。
今回試した範囲では
「条件分岐で見えていないものに対して、validationを設定できない」
ということはなさそうです。
再現コード
(() => {
// validations対象のフィールドコードを設定
const fieldCode = "date1";
// 条件分岐判定が作動する条件となるフィールドコードを設定
const checkField = "checkBox1";
fb.events.fields[checkField].changed.push((state) => {
// Validateの規則を追加
state.fields.find(({ code }) => code === fieldCode).validations.push({
params: [],
rule: 'custom_validation1'
});
return state;
});
fb.addValidators = (state) => ({
custom_validation1: {
getMessage: (fieldCode, params) => {
return '未来の日付は選択できません';
},
validate: (value) => {
// 対象年月日が設定されているかチェック
if (state.record[fieldCode]?.value) {
const today = new Date(); // 現在日付を取得
today.setHours(0, 0, 0, 0); // 時分秒を0にセット
const formDate = new Date(state.record[fieldCode].value); // フォーム上の対象年月日を取得
formDate.setHours(0, 0, 0, 0); // 時分秒を0にセット
// 対象年月日が未来日かチェック
if (formDate.getTime() > today.getTime()) {
return false; // 未来日であれば不正な値としてfalseを返す
}
}
return true; // それ以外は正しいとしてtrueを返す
}
}
});
})();