Files
jobtrackingapp/docs/redesign/phase-3/JOBS_WORKSPACE.md
T
2026-09-10 18:15:05 +02:00

52 lines
5.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Jobs workspace
ARC-06; PRES-J01–PRES-J10, PRES-W01, PRES-E07–PRES-E09, PRES-S03. [Current JobTable](../../../job-tracker-ui/src/components/JobTable.tsx), [KanbanBoard](../../../job-tracker-ui/src/components/KanbanBoard.tsx), SavedViewsMenu and EditJobDialog remain the owners.
## Structure and defaults
Page header: Jobs, result count and Add/import job. Secondary row: Tracked, Discover, Follow-ups, Companies, Offers; Trash in visible utilities menu. Inside Tracked: **Table / Board** switch, Search, Filters, Saved views, Columns, Comfortable/Compact. Desktop defaults to Table; phone Table choice means structured cards. The view switch is not another primary nav destination.
Explicit view query wins over an optional remembered owner-local choice. First use stays table; saved preference must not override a shared URL. Existing /kanban remains functional until matching query semantics and keyboard behavior work in the unified owner. Do not recreate AddJobModal or create jobs as a side effect of route mounting.
## Table information
| Default visible | Optional but preserved | Conditional new columns |
|---|---|---|
| Selection, company, role with next-action cue, status, location, deadline, applied date, row actions | Existing days-since and external source link toggles; page size 15/20/25; all current toggle behavior | Follow-up date, package readiness, recorded match with provenance, favourite/priority after its explicit contract |
Show “Not applied” for null DateApplied, not today or zero days. Long text wraps to a controlled second line with full accessible text and full page access. A row action must not also navigate; selection/status menu/external link remain independent. Do not hide existing information under hover-only interaction. Salary, contacts, descriptions and full timeline belong in preview/detail rather than making every row tall.
New optional match cells need bounded list data, not a request or AI call for every row. Unknown/insufficient match shows no invented percentage.
## Filter and saved-view contract
Retain server q, status (including raw custom values), companyId, location, needsFollowUp, readiness, deleted/includeDeleted, sortBy, sortDir and pagination. Filter changes reset pagination as today. Search retains debounce/error behavior. Active filters are visible chips with Clear all; clear does not alter column/density settings or stored named views.
Saved views already exist and are justified by repeat searches. Preserve create/select/delete and owner isolation. Do not introduce a second “saved filter” store. View/layout/density may be added only through versioned compatible presentation metadata; existing saved views must still load. Board must apply the same supported filters and result scope before consolidation; retain existing large-list limits explicitly, never silently omit jobs.
Selection is explicit and page-scoped unless a later “all matching” server contract is added. Show selected count and scope. On view/filter/result changes clear invalid selections deliberately, with no action on invisible stale IDs.
## Bulk and row actions
Keep edit, exact status choice, delete-to-trash, restore and existing confirmation/partial failure behavior. After partial failure report successes/failures and keep failed items actionable; never announce all succeeded. Confirmation names count and action. Trash retains deleted-only behavior and restoration, not permanent deletion.
JSON/CSV import/export stays in Settings → Data with a contextual Jobs utility link to that existing function. Preserve B05 bytes/formula safety; do not export only the visible page without explicit labeling.
## Status semantics and customization
Current statuses: Saved, Interested, Preparing, Applied, Waiting, Interview, Offer, Rejected, Ghosted, Withdrawn. Keep aliases, raw/custom values, unknown Other fallback and server rules. Board groups are NotApplied, Active and Closed; group-drop destinations Saved, Applied and Rejected remain distinct from precise status choices. Offer is active on the board despite its success analytics category.
NEW-03 proposes an owner status configuration screen under Settings, reached from Jobs: label, order and explicit mapping to existing system semantics. Until a backend contract exists, keep current free-text/custom behavior and Other group. Do not replace defaults with illustrative Screening/Final Interview/Accepted or auto-map unknown statuses. Rules, analytics and history mapping require a dedicated cross-layer change and regression before UI adoption.
Favourite/priority is NEW-09: no current JobApplication field was found. Propose a simple owner flag later, default off, independently filterable; do not repurpose Tags, NextAction, operation Priority or status. Defer its control until persistence/ownership and product choice are settled.
## Quick preview
NEW-10 creates an optional **read-only** drawer for scanning: role/company, status/dates, short description, next action, CV/document summary and Open full job. Do not embed another full editable seven-tab workspace or a second save queue. Existing ApplicationWorkspace overlay props remain protected but are not evidence of a currently mounted preview.
Open via explicit row Preview action; role/title link still opens full page. Escape closes and returns focus; opening full page preserves list filters/page/focus context. Mobile may use a full-height preview or go straight to full page if testing shows no benefit; full functionality remains in the full page. No sending, destructive mutation or AI apply inside preview.
## Validation before migration
Use PRES-J05/J06/J07 gaps from Phase 2: saved-view CRUD, partial bulk failure, trash restore, identical table/board filtered records, precise versus coarse stage movement, keyboard pickup/drop/cancel and mobile no-drag alternative. Add real App query/back/capture tests, ownership switching and long Bokmål data. Route and table/board owner changes must land together or keep the old entry; never redirect before parity.