feat(frontend): ロールごとの分配係数(multiplier)をフロントエンドから入力できるようにする - #563
Merged
Conversation
splits / scheduled の作成フローで multiplier が 1 固定だったため、両画面の 対象ロール行に「分配係数」入力欄を追加した。 係数は SplitsCreator が multiplierTop / multiplierBottom を整数除算して 評価する (SplitsCreator.sol:322) ため、1.5 を 3/2 として送ると 1 に切り捨て られ、0.5 に至ってはロール全員の取り分が 0 になる。ロール配分は最後に roleTotalAllocation で正規化される (SplitsCreator.sol:212) ので、アクティブな ロール全体を同じ定数倍しても結果は変わらない。この性質を使い、係数を一括で 共通分母に載せた整数比として送ることで、コントラクトを変更せずに小数係数と 1 未満の係数を正しく反映させている (1.5, 1 → 3/1, 2/1)。 - utils/multiplier.ts: 入力のパース・検証・一括パック(文字列の桁を直接 扱い浮動小数誤差を回避、最後に GCD で約分) - components/splits/RoleMultiplierField.tsx: 両画面共通の係数入力欄 - splits: 不正な係数はプレビュー・作成をブロックし、プレビュー画面の対象 当番一覧に係数を併記 - scheduled: 送信時に一括パックして multiplierTops / multiplierBottoms に反映 Closes #528 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
yu23ki14
approved these changes
Aug 19, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #528
概要
分配ルール作成(splits)と予約分配作成(scheduled)で
multiplier: 1にハードコードされていたロールごとの分配係数を、UI から入力できるようにしました。Issue には「送信パイプラインは既に係数に対応しているのでフロントの入力 UI を足すだけ」とありましたが、実際には
SplitsCreator.sol:322がroleMultiplier = multiplierTop / multiplierBottomと整数除算しているため、そのまま1.5を3/2として送ると 1 に切り捨てられて係数が効かず、0.5(1/2)に至っては そのロールの全員の取り分が 0 になります。コントラクトは変更せずに解決しています。ロール配分は最後に
roleTotalAllocationで正規化される(SplitsCreator.sol:212)ため、アクティブなロール全体を同じ定数倍しても結果は変わりません。この性質を使い、係数を一括で共通分母に載せた整数比として送るようにしました。1.5,13/1,2/10.5,11/1,2/11.25,0.5,35/1,2/1,12/11.5(単独ロール)1/1(単独では係数は比率として意味を持たないため)比率は厳密に保たれ、小数係数・1 未満の係数も正しく分配に反映されます。
変更内容
pkgs/frontend/utils/multiplier.ts(新規) — 係数のパース / 検証 / 一括パック。文字列の桁を直接扱うので1.15 * 100 = 114.99…のような浮動小数の破綻がありません。0・負数・非数・小数第 3 位以上は無効。最後に GCD で約分し、オンチェーンの整数を小さく保ちます。app/components/splits/RoleMultiplierField.tsx(新規) — 両画面共通の「分配係数 [ 1 ] 倍」入力。FieldLabel+Input+Typographyで構成し、不正時はaria-invalidとエラーメッセージを表示します。$treeId_.splits.new.tsx—RoleInput.multiplierを生入力のstringに変更、updateMultiplierを追加、選択中のロール行の下に入力欄を表示。isFormValidに係数バリデーションを追加(不正な間は「プレビューを見る」を押せない)。プレビュー画面の「対象にした当番」に(1.5倍)を併記。$treeId_.scheduled.new.tsx— 同じ入力欄を追加し、submitCreateで一括パックしてmultiplierTops/multiplierBottomsに反映。不正な値は toast で中断。受け入れ条件
multiplierTops/multiplierBottomsに反映されて送信されるpnpm frontend typecheckが通る検証
pnpm frontend typecheck/pnpm frontend build/biome checkすべて通過""・.・0・-1・1.234・1e3が無効判定になること)🤖 Generated with Claude Code