Skip to content

feat(gradebook): external assessment management panel and drag-and-drop reorder#8463

Open
LWS49 wants to merge 1 commit into
lws49/feat-ext-assessments-pr1-foundationfrom
lws49/feat-ext-assessments-pr2-manage-reorder
Open

feat(gradebook): external assessment management panel and drag-and-drop reorder#8463
LWS49 wants to merge 1 commit into
lws49/feat-ext-assessments-pr1-foundationfrom
lws49/feat-ext-assessments-pr2-manage-reorder

Conversation

@LWS49

@LWS49 LWS49 commented Jun 28, 2026

Copy link
Copy Markdown
Collaborator

Summary

Gives external assessments a proper management home. A single page-level "Manage external assessments" panel (above the tabs) lists every external (Name / Max / Weight / Actions) and hosts Add, Edit, and Delete; it replaces what would otherwise be scattered toolbar buttons and an in-column kebab menu. Externals can be reordered by drag-and-drop, persisted via a new position column and served in canonical order. Adding or editing an external with a non-zero weight while the equal-split default is showing freezes that split first, so setting one real weight does not collapse every other tab to zero.

Design decisions

  • Management lives in one panel gated on canManageWeights but not on weightedViewEnabled - recording a paper-exam grade is valid even with weighting off, so externals must stay manageable; the Weight column is read-only and shown only when the weighted view is on (weight editing stays in Configure Weights, to avoid two edit paths).
  • All rename/delete live in the panel rather than an in-table column kebab - this removes the add-without-delete and toolbar-add-vs-buried-delete asymmetries; the column header keeps only an "External" chip for identification.
  • Adding/editing an external with a non-zero weight while the table shows the equal-split default persists that visible split first (via the existing updateWeights endpoint and the materializedDefaultWeights helper) - otherwise setting one real weight would disengage the fallback and collapse every other tab to its stored 0. No-op when weights are already configured or the new weight is 0.

Regression prevention

Covers: the manage panel (list, add/edit/delete, empty state), the delete prompt (confirm / failure-toast / cancel paths), the edit prompt (rename, max, floor/cap toggles), drag-reorder dispatch and failure rollback, the default-weight materialization on add/edit, and the related gradebook operation thunks and store reducers. Adds the position migration (20260624, reversible); existing externals get sequential positions on migrate, so the change is backward compatible. External-assessments controller and model specs run on CI.

…ete, reorder, weight integration

Adds the management surface on top of the read-only foundation:

- Manage panel (launched from the gradebook + weighted toolbars) with add,
  edit, and delete prompts; drag-and-drop reordering of external columns.
- Weighted-view integration: external rows in Configure Weights (name + single
  weight, no mode/expand), and flat external grouping in the column picker.
- Store reducers + thunks for create/update/delete/reorder; API + types.
- Backend: create/update/destroy/reorder actions with jbuilders; a per-course
  `position` column (append-on-create, reorder! rewrites order); routes.

Import and grade-validation deliberately omitted (PR4 / PR3).
@LWS49 LWS49 force-pushed the lws49/feat-ext-assessments-pr2-manage-reorder branch from e26ee62 to dc5c67b Compare June 29, 2026 04:43
@LWS49 LWS49 force-pushed the lws49/feat-ext-assessments-pr1-foundation branch from d8f247f to 659f621 Compare June 29, 2026 04:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant