/** * validation.ts - フィルター値のバリデーション純粋関数 * * このファイルは、フィルター入力値のバリデーションロジックを提供する純粋関数群です。 * React hooksから独立しており、ユニットテストが容易で、他のプロジェクトでも再利用可能です。 * * @example * ```tsx * const result = validateFilterInput({ * inputType: "checkbox", * operator: "in", * selectedValues: ["active", "pending"], * selectedRadioValue: "", * startDate: "", * endDate: "", * value: "", * isRangeOperator: false, * }); * console.log(result); // { isValid: true, errorMessage: "" } * ``` */ import type { MultiFilterConditionConfig, FilterTypeConfig } from "../types"; import type { ConditionState } from "../hooks/useMultiConditionState"; export type ValidateFilterInputParams = { /** 入力タイプ (checkbox, radio, text, date) */ inputType: string; /** 選択中のオペレーター */ operator: string; /** チェックボックスで選択された値の配列 */ selectedValues: (string | boolean)[]; /** ラジオボタンで選択された値 */ selectedRadioValue: string | boolean; /** 日付範囲の開始日 */ startDate: string; /** 日付範囲の終了日 */ endDate: string; /** テキスト/日付入力値 */ value: string; /** 範囲指定オペレーターかどうか */ isRangeOperator: boolean; /** カスタムバリデーション関数(オプション) */ customValidation?: (values: (string | boolean)[], operator: string) => { isValid: boolean; errorMessage: string; }; }; export type ValidationResult = { /** バリデーションが成功したかどうか */ isValid: boolean; /** エラーメッセージ(isValidがfalseの場合) */ errorMessage: string; }; /** * フィルター入力値の完全なバリデーションを行う純粋関数 * * 以下のバリデーションを順番に実行します: * 1. 必須入力チェック * 2. カスタムバリデーション(定義されている場合) * 3. デフォルトのバリデーション(日付妥当性チェックなど) * * @param params - バリデーションパラメーター * @returns バリデーション結果 */ export declare const validateFilterInput: (params: ValidateFilterInputParams) => ValidationResult; export type CanApplyFilterParams = { /** 入力タイプ (checkbox, radio, text, date) */ inputType: string; /** チェックボックスで選択された値の配列 */ selectedValues: (string | boolean)[]; /** ラジオボタンで選択された値 */ selectedRadioValue: string | boolean; /** 日付範囲の開始日 */ startDate: string; /** 日付範囲の終了日 */ endDate: string; /** テキスト/日付入力値 */ value: string; /** 範囲指定オペレーターかどうか */ isRangeOperator: boolean; }; /** * 適用ボタンの有効/無効を判定する純粋関数 * * 必須入力チェックのみを行います(カスタムバリデーションやデフォルトバリデーションは実行しません)。 * これにより、ユーザーが入力中でもリアルタイムに適用ボタンの状態を更新できます。 * * @param params - 判定パラメーター * @returns 適用可能かどうか */ export declare const canApplyFilter: (params: CanApplyFilterParams) => boolean; /** * 条件が必須かどうかを判定する純粋関数 */ export declare const isRequiredCondition: (config: MultiFilterConditionConfig) => boolean; /** * 複数条件フィルタ全体のバリデーションを行う純粋関数 * * 1. 条件が1つ以上存在するかチェック * 2. 少なくとも1つの条件が入力されているかチェック * 3. 必須条件がすべて入力されているかチェック */ export declare const validateMultiConditions: (conditions: ConditionState[], filterConfig?: FilterTypeConfig) => ValidationResult; /** * 複数条件フィルタが適用可能かどうかを判定する純粋関数 * * 必須入力チェックのみを行い、カスタムバリデーションは実行しない。 * リアルタイムに適用ボタンの有効/無効を更新するために使用。 */ export declare const canApplyMultiConditions: (conditions: ConditionState[], filterConfig?: FilterTypeConfig) => boolean;