import { ReactNode } from 'react'; import { SetNotificationType } from '../../Provider'; import { DefaultOperationOptions, ResourcePaths } from '../../types'; import type { SortOptionType } from './hooks/useSort'; import type { BaseResource } from '../../pages/types'; import type { ApiSearchParams, IndexPageTemplateProps } from '../../templates/IndexPage/types'; export type SearchParamsChangeHandler
= ( /** * 全ての検索パラメータ * URLクエリに反映されているものと同値 */ params: Exclude
& {
sortBy?: P['sortBy'] extends SortOptionType ? SortOptionType : P['sortBy'] extends string ? string : any;
},
/**
* 補足情報
*/
details: {
/**
* filtersで設定された検索パラメータ
* TODO: 型推論の改善
*/
filters: P;
/**
* filters以外で設定された検索パラメータ
* (ページネーションなどmeta情報含む)
*/
others: P;
}) => void;
export type SearchParamsStoreOptions = {
/**
* 保存するパラメーターのkey一覧
* フィルタと表示切り替えで設定されているパラメーターのうち、 SessionStorage に保存するパラメーターだけを指定します
*/
storeKeys: string[];
/**
* ユーザーと事業所など、整合させるためのkeyとvalueのペア
* ここで指定したペアを鍵として SessionStorage にパラメーターが保持されます
* 復元は、ペアと一致するデータが SessionStorage にある場合に限って行われます
*/
contextPairs: {
[key: string]: string;
};
};
export type IndexPageContainerSortProps = {
/**
* ソート用のクエリパラメータのkey
* default: sort_by
*/
queryKey?: string;
/**
* value, direcitonからクエリパラメータのvalueを作成する関数
* default: ({value, direction}) => `${value}_${direction}`
* directionがnullの場合のdefault: ({value, direction}) => `${value}`
*/
encodeQueryValue?: ({ value, direction, }: {
value: string;
direction: 'asc' | 'desc' | '';
}) => string;
decodeQueryValue?: (query: string) => {
value: string;
direction: 'asc' | 'desc' | '';
};
/**
* ソート項目 それぞれ昇順と降順を選択可能
*/
choices: ({
/**
* ソート項目のラベル
* {label}の新しい順 / {label}の古い順として表示
*/
label: string;
/**
* クエリパラメータのvalue
*/
value: string;
} & ({
/**
* 指定した場合デフォルト値になる
* disableDirectionがtrueの場合に、デフォルト値にしたい場合はtrueを設定する
*/
default?: 'asc' | 'desc';
disableDirection?: false;
} | {
default?: boolean;
/**
* 昇順・降順の設定ができない場合に指定する
*/
disableDirection: true;
}))[];
/**
* ソートボタンを非表示にする設定
* table形式でヘッダーからのみソートを行えるようにしたい場合に利用してください
*/
buttonHidden?: boolean;
};
export type IndexPageContainerLabels = {
/**
* リソース(メインで扱うオブジェクト)
*/
resources: {
/**
* レコードの名称
* 削除・一括操作時のメッセージ表示などに使われます
* default: 情報
*/
record: string;
};
/**
* 各操作時
*/
actions: {
/**
* 作成開始時のボタンラベル
* default: 追加
*/
new: string;
};
};
type DeepOptional = {
/**
* Sectionの子要素
* 標準UI以外のコンポーネントも含めて表示可能
*/
children: ReactNode;
/**
* ラベルの設定を記述します
* 各所に分散している設定を集約する予定です
*/
labels?: IndexPageContainerLabelsProps;
/**
* 画面全体に Loading を表示
*/
isLoadingAll?: boolean;
/**
* ソート 渡した場合ソートボタンを表示
*
* @use ListControlArea, ListArea
*/
sort?: IndexPageContainerSortProps;
/**
* 検索フィルタやページネーションの変更時に呼び出されるハンドラ
*
* @use ListControlArea
*/
onChangeSearchParams?: SearchParamsChangeHandler ;
/**
* 検索パラメータ変換関数
* あるパラメーターの値を変更した際に、ほかのパラメーターの状態を書き換える場合に指定
* パラメータ間の依存関係に基づいて、パラメータ全体を整形します(未指定の場合は変更したパラメーターの値だけが変更されたと見做されます)
* 用例: 特定の条件が選択されたときに、関連する別の条件を自動的に設定/解除する
* @experimental AS95 まとめて検索の一環で実装されており、 EXPERIMENTAL_ListControlArea と組み合わせてのみ利用できます
*/
transformSearchParams?: (prevParams: P) => P;
/**
* 検索パラメータの保存・復元オプション
* このオプションが指定されている場合、以下のロジックが動作します
* - 検索パラメータが変更されたとき、その設定状態を SessionStorage に保持します
* - ページ移動後に再度アクセスしたとき、保存された検索パラメータを自動的に復元します(別ページへの遷移時を含む)
* - URLに明示的にビュー以外のパラメータが指定されている場合は、それが優先されます
* @experimental AS95 まとめて検索の一環で実装されており、 EXPERIMENTAL_ListControlArea と組み合わせてのみ利用できます
*/
searchParamsStoreOptions?: SearchParamsStoreOptions;
/**
* 一覧画面で表示するリソースの再読み込みを行う場合に用いられる処理
* must be memoize
*
* @use ListControlArea
*/
refetchResources?: () => Promise = IndexPageContainerProps & Pick