Editor has no 'apply same settings to all paths' — user with 10 paths that should all be fill / red / density 0.5 must edit each path one at a time #212

Closed
opened 2026-10-04 00:02:06 +00:00 by Mark · 1 comment
Owner

Finding

src/components/editor/EditorRightPanel.tsx's "Path Properties" section applies changes to a single selected path (per the selectedPath computation at line 98). The controls are:

  • Stitch Type (onUpdateSelectedPathStitchType)
  • Density (onUpdateSelectedPathDensity)
  • Thread Color (onUpdateSelectedPathColor — per #185 fix)

Each change targets the single selected path. There's no "apply to all" or "apply to selected" affordance.

A user with 10 paths that should all be:

  • Stitch type: Fill
  • Density: 0.5
  • Thread color: Same red

...must:

  1. Select path 1, set Fill, 0.5, red
  2. Select path 2, set Fill, 0.5, red
  3. ... 8 more times

30 operations instead of 3.

grep -n 'applyToAll\|applyAll\|setAllPaths' src/components/editor/ returns 0 hits.

Where

  • Path properties: src/components/editor/EditorRightPanel.tsx:267-320
  • No apply-all: grep -n 'applyToAll' src/components/editor/ returns 0
  • Multi-select: selectedPathId: string | null (single, per #188)
  • Workspace contrast: setAllPaths doesn't exist in workspace either (per #197/200)

Suggested fix shape

Two approaches:

  1. "Apply to all" buttons next to each control:
<div className="flex items-center gap-1">
  <select value={selectedPath.stitchType} onChange={...}>
    <option value="satin">Satin</option>
    ...
  </select>
  <button onClick={() => onApplyToAllPaths({ stitchType: newType })} title="Apply to all paths">
    <ArrowDownToLine size={10} />
  </button>
</div>

onApplyToAllPaths updates all paths in one reducer action, pushing history once.

  1. "Apply to selection" requires multi-select (#188). When 2+ paths are selected, the right panel shows controls that target the selection. The "Apply to all" button is then a special case of "Apply to selection" with all paths selected.

The second approach is the more powerful one but requires #188 to land first. The first approach (apply-to-all) is the smaller, scoped fix.

Severity

Medium. The user can apply per-path. Power users with many paths of the same type notice.

Discovered by

Gap analysis (2026-10-02) of editor bulk operations.

  • #188 (open) — Editor multi-path selection. The proper foundation for "apply to selection."
  • #198 (open) — Editor default-stitch-type setting. A separate solution to the same problem (set a default so new paths inherit).
  • #208 (open) — Editor show/hide all paths. Same bulk-affordance pattern.
## Finding `src/components/editor/EditorRightPanel.tsx`'s "Path Properties" section applies changes to a single selected path (per the `selectedPath` computation at line 98). The controls are: - Stitch Type (`onUpdateSelectedPathStitchType`) - Density (`onUpdateSelectedPathDensity`) - Thread Color (`onUpdateSelectedPathColor` — per #185 fix) Each change targets the single selected path. There's no "apply to all" or "apply to selected" affordance. A user with 10 paths that should all be: - Stitch type: Fill - Density: 0.5 - Thread color: Same red ...must: 1. Select path 1, set Fill, 0.5, red 2. Select path 2, set Fill, 0.5, red 3. ... 8 more times 30 operations instead of 3. `grep -n 'applyToAll\|applyAll\|setAllPaths' src/components/editor/` returns 0 hits. ## Where - Path properties: `src/components/editor/EditorRightPanel.tsx:267-320` - No apply-all: `grep -n 'applyToAll' src/components/editor/` returns 0 - Multi-select: `selectedPathId: string | null` (single, per #188) - Workspace contrast: `setAllPaths` doesn't exist in workspace either (per #197/200) ## Suggested fix shape Two approaches: 1. **"Apply to all" buttons next to each control**: ```tsx <div className="flex items-center gap-1"> <select value={selectedPath.stitchType} onChange={...}> <option value="satin">Satin</option> ... </select> <button onClick={() => onApplyToAllPaths({ stitchType: newType })} title="Apply to all paths"> <ArrowDownToLine size={10} /> </button> </div> ``` `onApplyToAllPaths` updates all paths in one reducer action, pushing history once. 2. **"Apply to selection" requires multi-select (#188)**. When 2+ paths are selected, the right panel shows controls that target the selection. The "Apply to all" button is then a special case of "Apply to selection" with all paths selected. The second approach is the more powerful one but requires #188 to land first. The first approach (apply-to-all) is the smaller, scoped fix. ## Severity Medium. The user can apply per-path. Power users with many paths of the same type notice. ## Discovered by Gap analysis (2026-10-02) of editor bulk operations. ## Related - #188 (open) — Editor multi-path selection. The proper foundation for "apply to selection." - #198 (open) — Editor default-stitch-type setting. A separate solution to the same problem (set a default so new paths inherit). - #208 (open) — Editor show/hide all paths. Same bulk-affordance pattern.
Author
Owner

Shipped #212 — Editor right panel adds Apply-to-all icon buttons (ArrowDownToLine) next to Stitch Type, Density, and Thread Color.

  • Click stamps the current value onto every path in one click (no need to select them all first).
  • Each button is gated on paths.length >= 2 AND the selection agreeing on the value (no Mixed broadcast).
  • One pushHistory per click — Ctrl+Z reverts the bulk stamp.
  • 122 panel tests + full suite 1042 pass; tsc/eslint clean.

Commit: 85a61b8 on main. Approach 1 from the suggestion (Apply to all next to each control) rather than the more-powerful Approach 2 (Apply to selection) — Approach 2 depends on #188 multi-select landing first.

Shipped #212 — Editor right panel adds Apply-to-all icon buttons (ArrowDownToLine) next to Stitch Type, Density, and Thread Color. - Click stamps the current value onto every path in one click (no need to select them all first). - Each button is gated on `paths.length >= 2` AND the selection agreeing on the value (no Mixed broadcast). - One pushHistory per click — Ctrl+Z reverts the bulk stamp. - 122 panel tests + full suite 1042 pass; tsc/eslint clean. Commit: 85a61b8 on main. Approach 1 from the suggestion (Apply to all next to each control) rather than the more-powerful Approach 2 (Apply to selection) — Approach 2 depends on #188 multi-select landing first.
Mark closed this issue 2026-10-04 03:53:08 +00:00
Sign in to join this conversation.
No description provided.