diff --git a/api/package.json b/api/package.json index c989ef1..41acb8b 100644 --- a/api/package.json +++ b/api/package.json @@ -1,6 +1,6 @@ { "name": "taskview-ce-api-server", - "version": "1.48.3", + "version": "1.48.4", "scripts": { "dev": "bun run --watch ./server.ts", "start": "NODE_ENV=production node ./dist/taskview-server.js", diff --git a/package.json b/package.json index 8b10eed..48fc115 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "taskview-ce-monorepo", - "version": "1.48.3", + "version": "1.48.4", "private": true, "description": "TaskView CE monorepo containing web, API, and packages", "workspaces": [ diff --git a/web/package.json b/web/package.json index 46adbba..37b690c 100644 --- a/web/package.json +++ b/web/package.json @@ -2,7 +2,7 @@ "name": "web-nuxt-ui", "private": true, "type": "module", - "version": "1.48.3", + "version": "1.48.4", "scripts": { "dev": "vite", "build:packages": "pnpm --filter taskview-db-schemas build && pnpm --filter taskview-api build", diff --git a/web/src/components/features/main/MainScreen.vue b/web/src/components/features/main/MainScreen.vue index 7f62c1e..10884ae 100644 --- a/web/src/components/features/main/MainScreen.vue +++ b/web/src/components/features/main/MainScreen.vue @@ -39,10 +39,22 @@ import { useI18n } from 'vue-i18n' import TvCollapseSidebarDesktop from '@/components/features/base/TvCollapseSidebarDesktop.vue' import { useLsRef } from '@/composables/useLsRef' +import { useRefreshOnResume } from '@/composables/useRefreshOnResume' +import { useBaseScreenStore } from '@/stores/base-screen.store' +import { useCollaborationStore } from '@/stores/collaboration.store' import DesktopScreen from './screen-main/DesktopScreen.vue' import DashboardList from './screen-main/DashboardList.vue' const { t } = useI18n() const view = useLsRef<'list' | 'widgets'>('main-screen-view', 'list') + +const baseScreenStore = useBaseScreenStore() +const collaborationStore = useCollaborationStore() + +useRefreshOnResume(() => { + baseScreenStore.fetchAllState() + baseScreenStore.fetchAllAvailableLists() + collaborationStore.fetchAllCollaborationUsers() +}) diff --git a/web/src/composables/useRefreshOnResume.ts b/web/src/composables/useRefreshOnResume.ts new file mode 100644 index 0000000..9630c03 --- /dev/null +++ b/web/src/composables/useRefreshOnResume.ts @@ -0,0 +1,26 @@ +import { onScopeDispose } from 'vue' +import { useEventListener } from '@vueuse/core' +import { App } from '@capacitor/app' + +export function useRefreshOnResume(onResume: () => void) { + let last = 0 + const trigger = () => { + const now = Date.now() + if (now - last < 1000) return + last = now + onResume() + } + + useEventListener(document, 'visibilitychange', () => { + if (!document.hidden) trigger() + }) + + let remove: (() => void) | undefined + App.addListener('appStateChange', ({ isActive }) => { + if (isActive) trigger() + }).then((handle) => { + remove = () => handle.remove() + }) + + onScopeDispose(() => remove?.()) +}