Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

10 — Interaction Specification (Feature Flags Module)

Module-specific interactions layered on 00-shared/08. Covers every input modality on phone/tablet/desktop.


1. Phone / touch

GestureBehaviourWhere
Taptoggle switch, row → detail, chip filter, menu openlist, detail
Tap on switch while pendingignored (switch disabled during flight)all toggles
Long-pressenter selection mode (bulk), open AppMenu when menu existslist rows
Swipe left/rightnone (delete is destructive → menu + dialog only; 00-shared/08 §1 keeps ≤ 2 non-destructive actions)
Pull downRefreshIndicator → full list refetch and FeatureFlagsCubit.refresh() (gating set stays in sync)list
Hardware backsheet → dismiss (selection kept); detail → list; editor dirty → discard confirmall
Edge swipedrawer (shell)

2. Keyboard / desktop / mouse

InputBehaviour
Tabchips → rows (row = one stop: switch+menu) → FAB; focus ring primary
Spacetoggles focused switch; toggles chip selection
Enteropens focused row detail; submits editor; applies bulk
Esccloses sheet / dialog / discards editor (with confirm if dirty)
Ctrl/Cmd+Nnew flag (editor, create mode)
Ctrl/Cmd+Click / Shift+Clickmulti-select rows for bulk
Right-clickAppMenu (same as long-press)
Hoverrow tint m-fast; tooltip after 500 ms (switch disabled reason, key copy)
Arrowsnavigate chip rows in module filter; move between switch and menu in a row

3. Haptics (mobile)

EventHapticRef
Toggle applied (200)lightImpact
Toggle rollback (error)mediumImpact
Copy keyselectionClick
Bulk appliedlightImpact
Delete confirmheavyImpact
Ruleoff when system haptics off; none on desktop08 §3

4. Motion language (module extension of 08 §4)

TransitionDuration/curveUsed by
List → detailm-base slide (hero optional m-slow)rows
Row insert/removem-entrance fade-up stagger 40 msafter bulk/delete refresh
Switch state changem-fast color/thumball toggles
Filter chip swap / tabm-base cross-fade of list contentfilter row
Sheet (bulk)m-base bottom slide, r-xl topbulk
Result rowsm-entrance fade-upbulk results
Error rollbackAnimatedSwitcher fade + error ring (no shake on toggles)switches

Reduced motion: fades + m-instant only; no stagger, no hero.

5. Micro-interactions catalogue (module)

InteractionDetail
Switch flippedthumb animates m-fast; row enters pending ("Saving…") without blocking other rows
Save in editorbutton loading swap m-base; double-tap locked
Copy keysnackbar "Copied" + selectionClick
Bulk applyprogress bar m-base; count "Applying 3 of 5"
Deletedialog m-base scale+fade; row fade-out on 200
Filter changelist content cross-fade m-slow; active chip secondaryContainer
Gating flip (client)gated widgets appear/disappear with m-fast fade — never a full-screen reload

6. Frustration controls (shared 08 §6 + module)

  • All presses respond < 100 ms with m-fast ripple.
  • Every network action shows pending state (switch pending, save spinner, bulk progress).
  • Writes disabled while offline; tooltip explains.
  • 429 → countdown; no auto-retry (rate-limit.constants.ts:6).
  • Errors persist as banners/snackbars until dismissed or corrected; toggles roll back visibly (never silently).

7. Special interactions

  • Bulk partial-failure retry: "Retry failed (n)" re-sends only missing keys (feature-flags.service.ts:40-44 sequential apply → client diffs by key).
  • Deep-link prefilter: studylyon://settings/feature-flags?module=biometric pre-selects the chip; :key deep link loads detail directly (404 → "flag not found" + back).
  • Selection persistence: bulk sheet dismissal keeps selection; re-open restores it.
  • No drag/drop, no QR, no media in this module.

8. Validation of interaction to server semantics

  • Toggle rollback on error matches server truth (no cache of a state the server rejected).
  • Editor never claims description/module saved (repo drops them, feature-flag.repository.ts:40).
  • Bulk results respect sequential no-transaction semantics (feature-flags.service.ts:40-44).
  • Delete shows the re-create caveat (unique index + soft delete, OQ-4).
  • Org overlay UI merges before PATCH (full-replace semantics, organizations.service.ts:149-151).
  • Enabled set refresh keeps client gating aligned with GET /feature-flags/enabled (feature-flag.repository.ts:28-30).