From 26bc33a0954820bd1b23b84d1fca3b3f8e38d183 Mon Sep 17 00:00:00 2001 From: Patrick Toal Date: Sun, 15 Mar 2026 22:12:35 -0400 Subject: [PATCH] fix(ui): layout fixes --- .../handoff-2026-03-15-dependency-updates.md | 0 .../handoff-2026-03-15-build-fixes.md | 101 ++++++++++++++++++ src/components/LeftDrawer.vue | 2 +- src/components/ToolbarComponent.vue | 12 +-- src/layouts/MainLayout.vue | 13 ++- 5 files changed, 116 insertions(+), 12 deletions(-) rename docs/{summaries => archive/handoffs}/handoff-2026-03-15-dependency-updates.md (100%) create mode 100644 docs/summaries/handoff-2026-03-15-build-fixes.md diff --git a/docs/summaries/handoff-2026-03-15-dependency-updates.md b/docs/archive/handoffs/handoff-2026-03-15-dependency-updates.md similarity index 100% rename from docs/summaries/handoff-2026-03-15-dependency-updates.md rename to docs/archive/handoffs/handoff-2026-03-15-dependency-updates.md diff --git a/docs/summaries/handoff-2026-03-15-build-fixes.md b/docs/summaries/handoff-2026-03-15-build-fixes.md new file mode 100644 index 0000000..6c56cc1 --- /dev/null +++ b/docs/summaries/handoff-2026-03-15-build-fixes.md @@ -0,0 +1,101 @@ +# Session Handoff: Build Fixes & Dev Environment +**Date:** 2026-03-15 +**Session Duration:** ~2 hours +**Session Focus:** Resolve all TypeScript/ESLint build errors from dependency updates; fix dev server startup +**Context Usage at Handoff:** Medium + +## What Was Accomplished + +1. Fixed 30 TypeScript errors (14 files) → build now passes with 0 errors +2. Fixed 12 ESLint problems (6 errors, 6 warnings) → 0 remaining +3. Fixed `quasar dev` startup error (`FlatESLint is not a constructor`) → downgraded ESLint v10→v9 +4. Fixed missing Appwrite env vars in `.env.local` → app connects to backend on dev + +## Exact State of Work in Progress + +- **Build**: CLEAN — `yarn quasar build` exits 0, no TS or ESLint errors +- **Dev server**: FUNCTIONAL — `quasar dev` starts without errors; ESLint inline checking via `vite-plugin-checker` is restored +- **Runtime**: UNTESTED this session — app has not been manually tested against the dev Appwrite backend + +## Decisions Made This Session + +- **`as unknown as Type` for all Appwrite store casts** — CONFIRMED: Appwrite v23 made `DefaultDocument` strict; it no longer overlaps domain types, so the double-cast is required. Applied to: `boat.ts`, `interval.ts`, `intervalTemplate.ts`, `reservation.ts`, `task.ts` +- **ESLint downgraded v10.0.3 → v9.39.4** — CONFIRMED: `vite-plugin-checker` v0.12.0 calls `FlatESLint` which was merged back into `ESLint` in v10; v9 preserves the API. Also downgraded `@eslint/js` (v10→v9) and `eslint-plugin-vue` (v10→v9) +- **`getWeekdaySkips` removed** — CONFIRMED: removed from `@quasar/quasar-ui-qcalendar` API; `createDayList` now takes `weekdays` array directly as 4th param (previously took `weekdaySkips` computed value) +- **`subtasks` removed from TaskCardComponent template** — ASSUMED SAFE: `Task` type has no `subtasks` field; template refs were dead code. See open question. +- **`no-debugger: 'off'`** — CONFIRMED: hardcoded because `process` is not available in ESLint globals when linting `.js` files (config file context) +- **`.env.local` variable names corrected** — CONFIRMED: file had `VITE_APPWRITE_ENDPOINT` / `VITE_APPWRITE_PROJECT`; `appwrite.ts` reads `VITE_APPWRITE_API_ENDPOINT` / `VITE_APPWRITE_API_PROJECT` + +## Key Numbers Generated or Discovered This Session + +- TypeScript errors at session start: 30 (across 14 files) +- ESLint problems at session start: 12 (6 errors, 6 warnings) +- TypeScript errors at session end: 0 +- ESLint problems at session end: 0 +- ESLint: v10.0.3 → v9.39.4 +- `@eslint/js`: v10 → v9 +- `eslint-plugin-vue`: v10 → v9 +- `register-service-worker`: newly added (was missing from package.json) + +## Conditional Logic Established + +- IF Appwrite SDK returns `DefaultDocument` THEN cast via `as unknown as DomainType` BECAUSE v23 `DefaultDocument` is strict and no longer assignable to domain types that extend `Partial` +- IF `vite-plugin-checker` is v0.12.x THEN ESLint must be v9.x BECAUSE v0.12.x uses `FlatESLint` constructor removed in ESLint v10 +- IF `createDayList` is called from qcalendar THEN pass `weekdays` array as 4th arg directly BECAUSE `getWeekdaySkips` was removed from the qcalendar public API +- IF `.env.local` is updated THEN variable names must match `import.meta.env.VITE_APPWRITE_API_ENDPOINT` / `VITE_APPWRITE_API_PROJECT` as read in `src/boot/appwrite.ts` + +## Files Created or Modified + +| File Path | Action | Description | +|-----------|--------|-------------| +| `src/stores/boat.ts` | Modified | `as unknown as Boat[]` | +| `src/stores/interval.ts` | Modified | `as unknown as Interval` (3 places) | +| `src/stores/intervalTemplate.ts` | Modified | Map callback cast + `as unknown as IntervalTemplate` (3 places); `timeTuple` cast | +| `src/stores/reservation.ts` | Modified | `as unknown as Reservation` (5 places) | +| `src/stores/task.ts` | Modified | `as unknown as Task[]`, `TaskTag[]`, `SkillTag[]`, `Task` (5 places) | +| `src/stores/sampledata/schedule.ts` | Modified | `id`→`$id`, `blocks`→`timeTuples`, removed `reservationDate` | +| `src/components/boat/BoatPreviewComponent.vue` | Modified | `boat.id` → `boat.$id` | +| `src/components/scheduling/boat/BoatScheduleTableComponent.vue` | Modified | `block.id`→`block.$id`; `NodeJS.Timeout`→`ReturnType`; ternary→if/else | +| `src/components/scheduling/boat/CalendarHeaderComponent.vue` | Modified | Removed `getWeekdaySkips` import+computed; `createDayList` now passes `weekdays` directly | +| `src/components/task/TaskCardComponent.vue` | Modified | Removed `defineProps` explicit import; removed `subtasks` template refs | +| `src/components/task/TaskListComponent.vue` | Modified | `task.id` → `task.$id` | +| `src/components/task/TaskTableComponent.vue` | Modified | Removed `defineProps` from explicit import | +| `src/components/ResourceScheduleViewerComponent.vue` | Modified | Removed `|| undefined`; `catch { }`; removed stale eslint-disable comments | +| `src/pages/LoginPage.vue` | Modified | `catch { }` | +| `src/pages/schedule/ManageCalendar.vue` | Modified | `block.id` → `block.$id` | +| `src/boot/appwrite.ts` | Modified | Removed stale `console.log(API_ENDPOINT)` | +| `eslint.config.js` | Modified | `no-debugger` hardcoded to `'off'` | +| `quasar.config.ts` | Modified | ESLint checker restored (had been temporarily removed) | +| `package.json` / `yarn.lock` | Modified | ESLint v10→v9; `@eslint/js` v10→v9; `eslint-plugin-vue` v10→v9; added `register-service-worker` | +| `.env.local` | Modified | Variable names corrected: `VITE_APPWRITE_ENDPOINT`→`VITE_APPWRITE_API_ENDPOINT`, `VITE_APPWRITE_PROJECT`→`VITE_APPWRITE_API_PROJECT`; endpoint URL updated to include `/v1` | +| `docs/summaries/handoff-2026-03-15-build-fixes.md` | Created | This file | +| `docs/archive/handoffs/handoff-2026-03-15-dependency-updates.md` | Archived | Superseded by this handoff | + +## What the NEXT Session Should Do + +1. **First**: Run `quasar dev` and manually test the login flow against the dev Appwrite backend to validate v23 API calls work at runtime +2. **Validate**: Boat listing, reservation creation/cancellation, interval loading — confirm no runtime errors from the v23 positional-param deprecations +3. **Commit**: Stage all modified files and commit as `"fix: Resolve build errors from dependency updates"` (single clean commit covering all TS/ESLint/qcalendar/env fixes) +4. **Optional**: Migrate Appwrite calls from deprecated positional-param style to object-param style (affects all stores — low priority, they still work) +5. **Optional**: Add `subtasks?: Task[]` to `Task` interface in `src/stores/task.ts` if that feature is planned + +## Open Questions Requiring User Input + +- [ ] `task.subtasks` removed from `TaskCardComponent` template — should `subtasks?: Task[]` be added to the `Task` interface for future use, or is subtask support not planned? +- [ ] Appwrite v23 deprecated positional-param overloads (hints in every store call). Migrate now or leave for later? + +## Assumptions That Need Validation + +- ASSUMED: Appwrite v23 positional-param API calls behave identically at runtime to v14 — validate by doing a full login + reservation flow against the dev backend +- ASSUMED: `subtasks` in `TaskCardComponent` was dead/future code — no user confirmed this + +## What NOT to Re-Read + +- `docs/archive/handoffs/handoff-2026-03-15-dependency-updates.md` — archived; superseded by this file +- `docs/archive/handoffs/handoff-2026-03-15-auth-magic-link.md` — archived; auth work complete + +## Files to Load Next Session + +- `src/stores/task.ts` — if adding `subtasks` to Task interface +- `src/boot/appwrite.ts` — if migrating to Appwrite v23 object-param style +- Any store file (`boat.ts`, `interval.ts`, `reservation.ts`, etc.) — if migrating Appwrite calls diff --git a/src/components/LeftDrawer.vue b/src/components/LeftDrawer.vue index 85fb588..7a8f18c 100644 --- a/src/components/LeftDrawer.vue +++ b/src/components/LeftDrawer.vue @@ -78,7 +78,7 @@ import { APP_VERSION } from 'src/version'; function showAbout() { Dialog.create({ title: 'OYS Borrow a Boat', - message: `Version ${APP_VERSION}
Manage a Borrow a Boat program for a Yacht Club.

© Ottawa Yacht Squadron`, + message: `Version ${APP_VERSION}
Manage a Borrow a Boat program for a Yacht Club.

© Oakville Yacht Squadron`, html: true, }); } diff --git a/src/components/ToolbarComponent.vue b/src/components/ToolbarComponent.vue index 98bf937..c435f43 100644 --- a/src/components/ToolbarComponent.vue +++ b/src/components/ToolbarComponent.vue @@ -7,28 +7,20 @@ round icon="menu" aria-label="Menu" - @click="toggleLeftDrawer" /> + @click="$emit('drawer-toggle')" /> {{ pageTitle }}
v{{ APP_VERSION }}
- diff --git a/src/layouts/MainLayout.vue b/src/layouts/MainLayout.vue index e56ce3e..da3f532 100644 --- a/src/layouts/MainLayout.vue +++ b/src/layouts/MainLayout.vue @@ -1,6 +1,11 @@