Analysis Catalog: multi-select and bulk actions

クローズ
#190 コメント 0 件 リアクション 0 件 担当者 1 名 GitHub で見る

メンテナーはふだん 1 日以内に返信

@alex-rawlings-yyc がすでに取り組んでいます。

2026年10月8日 から。

  • #400 @alex-rawlings-yyc による — オープン

評価

難易度
5/5
見積もり時間
1週間以上
初心者へのやさしさ
35/100
issue の種類
機能追加
明瞭さ
おおむね明確
活発さ
静か
技術スタック
typescript
領域
frontend

調査の方向性

#184(元に戻す/やり直し)と #186(カタログ行のチェックボックス)から始め、その後、analysisId をキーとするカタログのミューテーションパスを確認します。実装前に、部分的な失敗、フィルター選択、影響範囲に関して列挙されている質問を解決します。これらのケースについて合意された動作で、カタログが安全な複数選択と一括操作をサポートすれば完了です。

索引モデルが issue の本文から書いたものです。

説明

enhancement

Checkboxes on Analysis Catalog rows (#186), then one action applied to the selection: delete these twelve, merge these five into that one, clear a gloss on all of them.

Blocked by #184 (Undo/Redo). Bulk is not technically hard — because catalog mutations are keyed by analysisId, a bulk action is a loop over ids, or better a single action taking ids[] so it is one transaction and one re-render. The blocker is safety: single-row delete without undo is a sharp edge you can reason about, while bulk delete without undo is forty mistakes at once, possibly with a partial failure halfway through, possibly on rows a filter is hiding.

Note this only works cleanly because mutations are analysis-keyed. Had they stayed token-keyed, a bulk action would have to expand each analysis into its N token refs, and every one of those calls would fork — producing N private copies, the exact opposite of the intent.

Use cases

  • Corrections that span rows. One mis-split word is already one row and one edit. But wrongly splitting a prefix such as un- across forty different words is forty rows, and no amount of shared-payload reuse collapses it — they are genuinely different analyses.
  • Cleanup. Filter to zero-usage rows, select all, delete.
  • Homograph consolidation. Merge several competing rows into one canonical analysis.

Design questions to settle

  • Partial failure. If row 17 of 40 throws, what state is the user in? Needs an answer that is not "hope", which is why undo comes first.
  • Selection versus filter. Select 40 rows, then change the filter — is the selection preserved? Does the action apply to rows the user can no longer see? This is a reliable bug factory; decide explicitly.
  • Blast radius display. A bulk delete needs to state total affected usages, not just row count. Twelve rows can be thousands of verses.

Related

user-questions.md parks a separate bulk-acceptance question ("Suggestion engine: bulk acceptance"). Both are "apply one decision to many things" and probably deserve one interaction model rather than two — worth designing together.

Blocked by: #184. Follow-up to #186.

主要言語
TypeScript
スター
2
フォーク
0
平均マージ
1日 1時間
マージ済み PR(30日)
101

環境構築

このプロジェクトには開発コンテナ、Dockerfile、コントリビューションガイドがありません。まず README を読み、一般的な手順ははじめてのコントリビューションガイドを参照してください。

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

sillsdev/interlinearizer-extension のほかの issue

sillsdev/interlinearizer-extension の issue をすべて見る

似ている issue

TypeScript の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。