chore(release): v1.1.0 - #23
Merged
Merged
Conversation
- Delete app/utils/tanstack-table.ts (valueUpdater had zero callers) - Delete app/utils/tw-helper.ts (tw() identity tag never invoked) - Remove getFirstLetters() from strings.ts (exported, never called) - Remove @tanstack/vue-table dep (only imported by now-deleted file)
Replace manual localStorage.getItem/setItem calls in stores/filters.ts with
useStorage() + skipHydrate(), consistent with schedule.ts / settings.ts / links.ts.
- storageKey ref drives reactive key re-binding when schedule changes
- Custom serializer preserves existing parse/validate logic (ensureArray guards)
- Remove saveFilters() (no longer needed; useStorage writes automatically)
- index.vue: migrate 'op-first-visit-seen' to STORAGE_KEYS.firstVisitSeen
('mindenit:first-visit-seen'), wrap with skipHydrate() to prevent SSR mismatch
- constants/storage.ts: add firstVisitSeen key to registry
…uted - Add shared ScheduleFilters type to app/types/schedule.ts - Remove GroupScheduleFilters, TeacherScheduleFilters, AuditoriumScheduleFilters from query files — all three were structurally identical - Remove duplicate effectiveTimezone computed from useIcsExport.ts and stores/calendar.ts — both now delegate to useTimezone() - Drop resolveTimezone and storeToRefs imports that became unused
- Normalize <script setup lang="ts"> order across 12 non-Ui .vue files (was <script lang="ts" setup>; matches project-dominant style) - Add DIALOG_KEYS constant to constants/dialogs.ts with settings, shortcuts, and scheduleAdd keys - Replace magic useState key strings in 5 components + 1 composable with DIALOG_KEYS.* references
Settings components → settings/: SettingsDialog, SettingsMainView, SettingsLinksManagement Background/decoration → backgrounds/: SnowEffect, WaitHand Banner components → banners/ (new dir): ConsentBanner, HiringInfo, AppOfflineBanner, ScheduleEphemeralBanner Component names are unchanged — nuxt.config uses pathPrefix: false on the catch-all ~/components entry, so subdirectory names do not affect the registered component names.
…and empty offline state - public/sw.js: new plain service worker (no deps). NetworkFirst for navigation (offline falls back to cached shell), CacheFirst for /_nuxt/ and /_fonts/, StaleWhileRevalidate for /_icons/, full bypass for /api/ (TanStack IDB owns schedule data). - app/plugins/sw.client.ts: client-only registration; skipped in dev to avoid Vite hot-reload conflicts. - nuxt.config.ts: icon.localApiEndpoint moved from /api/_nuxt_icon to /_icons so the SW can cleanly separate Nuxt icon requests from backend API traffic. Added /sw.js routeRule with no-cache headers. - app/stores/calendar.ts: add lastUpdatedAt ref (Unix ms). Set via setEvents() from TanStack Query's dataUpdatedAt, enables showing last-fetch time offline. - app/pages/index.vue: destructure dataUpdatedAt, fetchStatus, status from useScheduleQuery; pass updatedAt to setEvents(); compute isOfflineNoData (fetchStatus=paused + status=pending = offline with no IDB data); pass to BigCalendarRoot. - app/components/banners/AppOfflineBanner.vue: when offline, show 'дані від HH:MM' (tzFormat of lastUpdatedAt) instead of static fallback text. - app/components/calendar/Root.vue: add isOfflineNoData prop; new overlay branch 'offline-no-data' renders AppEmptyState with wifi-off icon before the generic error branch, so blank-calendar confusion is replaced by a clear message when the user is offline and IDB cache is empty. - AGENTS.md: remove stale server/api dev-proxy claim (server/api/[...any].ts no longer exists; SDK uses sh.mindenit.org/api directly in dev and prod).
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Release v1.1.0
Promotes
dev→main.Highlights
Release notes
New features
Performance & offline
@iconify-json/*packages — no requests toapi.iconify.designat runtime. Icons render offline and are not blocked by ad-blockers or slow CDN.Fixes
Under the hood
public/sw.js, v3): NetworkFirst shell keyed by pathname (not full URL), CacheFirst assets at/_nuxt/+/_fonts/, SWR for/_icons/. Never intercepts/api/*.app/plugins/sw.client.ts): registers on prod, actively tears down stale workers + caches in dev mode.pnpm preview) — separate origin prevents service worker from leaking across dev/preview sessions./_icons(localApiEndpoint) so SW can distinguish icon fetches from backend API calls.serverBundle: falseon@nuxt/icon— avoids 14 MB of full collection JSONs in the Nitro server bundle.useStorage+skipHydratepattern, eliminating SSR/client hydration mismatch.ScheduleFilterstype deduplicated;DialogConfigextracted toapp/types/dialogs.ts;useDialogManagerusesuseStorage.backgrounds/,banners/,settings/).useCalendarStore.lastUpdatedAttracks last event fetch timestamp for the offline banner.Compare: main...dev