Files
speckle-server/packages/frontend-2/lib/projects/composables/projectPages.ts
T
Kristaps Fabians Geikins b02a07e2b6 feat: Frontend 2.0 MVP
2023-05-08 10:47:01 +03:00

64 lines
2.1 KiB
TypeScript

import { MaybeRef } from '@vueuse/core'
import { useSynchronizedCookie } from '~~/lib/common/composables/reactiveCookie'
import { GridListToggleValue } from '~~/lib/layout/helpers/components'
import {
useProjectModelUpdateTracking,
useProjectPendingModelUpdateTracking
} from '~~/lib/projects/composables/modelManagement'
import { useProjectUpdateTracking } from '~~/lib/projects/composables/projectManagement'
import {
useProjectPendingVersionUpdateTracking,
useProjectVersionUpdateTracking
} from '~~/lib/projects/composables/versionManagement'
export function useProjectPageItemViewType(contentType: string) {
const viewTypeCookie = useSynchronizedCookie(`projectPage-${contentType}-viewType`)
const gridOrList = computed({
get: () =>
viewTypeCookie.value === GridListToggleValue.List
? GridListToggleValue.List
: GridListToggleValue.Grid,
set: (newVal) => {
viewTypeCookie.value = newVal
}
})
return gridOrList
}
/**
* Invoke this in any of the project pages/subpages to ensure we track realtime updates
* to the project, its versions and/or models
*/
export function useGeneralProjectPageUpdateTracking(
params: {
projectId: MaybeRef<string>
},
options?: Partial<{
notifyOnProjectUpdate: boolean
redirectHomeOnProjectDeletion: boolean
redirectToProjectOnModelDeletion: (modelId: string) => boolean
}>
) {
const projectId = computed(() => unref(params.projectId))
// Project updates + redirect away if project deleted
useProjectUpdateTracking(projectId, undefined, {
redirectOnDeletion: options?.redirectHomeOnProjectDeletion ?? true,
notifyOnUpdate: options?.notifyOnProjectUpdate
})
// Project model update tracking
useProjectModelUpdateTracking(projectId, undefined, {
redirectToProjectOnModelDeletion: options?.redirectToProjectOnModelDeletion
})
// Project version update tracking (e.g. updating model previews, showing new version toast)
useProjectVersionUpdateTracking(projectId)
// FILE IMPORTS:
// Pending model & version update tracking
useProjectPendingVersionUpdateTracking(projectId)
useProjectPendingModelUpdateTracking(projectId)
}