概要
分配ルール作成(splits)と予約分配作成(scheduled)のフローで、ロールごとの分配係数(multiplier / 倍率)をフロントエンドから入力できない 。現状はどちらも multiplier: 1 でハードコードされており、UI から変更する手段が無い。main ブランチの旧 splits 作成画面には「分配係数」の入力欄が存在していたため、v3 への移行時にこの機能が欠落した形になっている。
対象ファイル
pkgs/frontend/app/routes/$treeId_.splits.new.tsx
pkgs/frontend/app/routes/$treeId_.scheduled.new.tsx
現状
両画面とも RoleInput に multiplier: number フィールドを持つが、シード時に multiplier: 1 で固定され、それを編集する UI が無い。
splits.new.tsx: setRoles で multiplier: 1 を初期化(calcSplitsParams で top/bottom に分解して送信済み)。
scheduled.new.tsx: 同様に multiplier: 1 固定。submitCreate 内で multiplier を top/bottom に分解して multiplierTops / multiplierBottoms として送信済み。
つまり送信パイプラインは既に係数に対応している ため、必要なのは入力 UI と roles ステートを更新するハンドラの追加が中心。
main の参考実装
main の $treeId_.splits.new.tsx には以下のような係数入力 UI がある(Chakra ベースなので v3 のデザインシステムへ移植が必要):
const handleUpdateMultiplier = ( e ) => {
update ( fieldIndex , { ...field , multiplier : Number ( e . target . value ) } ) ;
} ;
// ...
< Text fontSize = "sm" > 分配係数</ Text >
< CommonInput type = "number" value = { field . multiplier }
onChange = { handleUpdateMultiplier} placeholder = "例: 1, 1.5 10" / >
< Text as = "span" > 倍</ Text >
コントラクト側の調査結果
Note
Issue 起票時の不安点だった「scheduled はコントラクト側が係数を受け付けるか不明」について調査済み。コントラクト変更は不要 。
ScheduledDistributor の InitParams(pkgs/contract/contracts/scheduleddistributor/IScheduledDistributor.sol)は既に係数を受け取る:
struct InitParams {
...
uint256 [] hatIds;
uint256 [] multiplierTops;
uint256 [] multiplierBottoms;
address [][] confirmedWearers;
...
}
フロントの createScheduledDistributor も既に multiplierTops / multiplierBottoms を渡している(現状は常に 1/1)。よって splits・scheduled いずれもフロントエンドのみの変更で対応可能 。
対応方針(案)
対象ロール(当番)の行、もしくは「詳細」ダイアログ内に係数入力欄を追加する。v3 のデザインシステム(~/components/ui/input の Input + Typography / FieldLabel)で実装し、text-*/font-* 直書きは避ける。
roles[key].multiplier を更新する updateMultiplier(hatId, value) ハンドラを両画面に追加。
既存の top/bottom 分解ロジック(calcSplitsParams / submitCreate)はそのまま流用できる。小数(例 1.5)も対応すること。
バリデーション: 0 や負数・非数を弾く(最低でも正の数)。
splits 側はプレビュー(previewSplits)に係数が反映されることを確認。
受け入れ条件
概要
分配ルール作成(splits)と予約分配作成(scheduled)のフローで、ロールごとの分配係数(multiplier / 倍率)をフロントエンドから入力できない。現状はどちらも
multiplier: 1でハードコードされており、UI から変更する手段が無い。mainブランチの旧 splits 作成画面には「分配係数」の入力欄が存在していたため、v3 への移行時にこの機能が欠落した形になっている。対象ファイル
pkgs/frontend/app/routes/$treeId_.splits.new.tsxpkgs/frontend/app/routes/$treeId_.scheduled.new.tsx現状
両画面とも
RoleInputにmultiplier: numberフィールドを持つが、シード時にmultiplier: 1で固定され、それを編集する UI が無い。splits.new.tsx:setRolesでmultiplier: 1を初期化(calcSplitsParamsで top/bottom に分解して送信済み)。scheduled.new.tsx: 同様にmultiplier: 1固定。submitCreate内で multiplier を top/bottom に分解してmultiplierTops/multiplierBottomsとして送信済み。つまり送信パイプラインは既に係数に対応しているため、必要なのは入力 UI と
rolesステートを更新するハンドラの追加が中心。mainの参考実装mainの$treeId_.splits.new.tsxには以下のような係数入力 UI がある(Chakra ベースなので v3 のデザインシステムへ移植が必要):コントラクト側の調査結果
Note
Issue 起票時の不安点だった「scheduled はコントラクト側が係数を受け付けるか不明」について調査済み。コントラクト変更は不要。
ScheduledDistributorのInitParams(pkgs/contract/contracts/scheduleddistributor/IScheduledDistributor.sol)は既に係数を受け取る:フロントの
createScheduledDistributorも既にmultiplierTops/multiplierBottomsを渡している(現状は常に1/1)。よって splits・scheduled いずれもフロントエンドのみの変更で対応可能。対応方針(案)
~/components/ui/inputのInput+Typography/FieldLabel)で実装し、text-*/font-*直書きは避ける。roles[key].multiplierを更新するupdateMultiplier(hatId, value)ハンドラを両画面に追加。calcSplitsParams/submitCreate)はそのまま流用できる。小数(例 1.5)も対応すること。previewSplits)に係数が反映されることを確認。受け入れ条件
multiplierTops/multiplierBottomsに反映されて送信されるpnpm frontend typecheckが通る