ff6433128a
* Add Dialog * Add options to embed dialog * Min Height of Clipboard Input multiline to 3 lines * Check for visibility * Link to change access of project * Rename to guided mode * Change icon when user clicks copy button * Update Menu styles based on agi feedback * Update graphql.ts * Embed Options as hashState * Auto grow Clipboard Input * embed state and more options * Tidyups * Footer only shows when !embedOptions.isTransparent * Add auto/manual Load * Add Pre setup component * WIP Button Group mobile * Updates around manual load * Viewer Share nav * Add embed dialog to project page * Minor fixes * Check for federated * Responsive Tidyups * Responsive Fixes. Fix console issues * Add Alert to Version Embed * Disable Zoom * GQL updates * Comment Slideshow * GraphQl changes * Fix visibility * Build fix * Revert "Build fix" This reverts commit 0e706cbd9fde78204032bb1ec4421b1742d023ac. * remove unneeded change, revert yarn.lock * Test Commit * Remove commit test * Fix build * Update Tailwind. Add base url env * fix for portal scope issue * useLogger * useLogger * chore(fe2): include NUXT_PUBLIC_BASE_URL in deployment manifests * lazy load optimization * lint fixes * Updates * Re-add guided open Dialog sections * Prevent login popup on embed * Tidy up mobile combined button group * Tidy up embed Dialogs * Small styling issues * Update scrolling in embed dialog * Move selection info when embed * Testing fixes * Discuss in Speckle * Responsive Dialog Changes * Fix bug * WIP Manual Load * Fix nuxt errors * Fix nuxt logger issue * Fix embed dialog overflows * New Dialog layout * Responsive Breakpoint change * Preview Image * Fix bug with dialogSection * Hide selection info on mobile when thread is open * Footer Model Name * Overflow on ClipboardInput * Style fixes * Tidy ups * Responsive updates * Responsive fixes * Update button * Changes from testing * Fix embed height with footer * Fix Dialog Section * Fixes from testing * Move "reset filters" on embed * Small fixes * Updates from CR 1 * CR Comments 2 * Updates from CR * Add deserializeEmbedOptions helper * DialogSection changes * Revert changes in TextArea * Updates from CR * Only check for noscroll in watch * Update useRoute * Comment Slideshow mode * Changes from testing * Fix mobile share button * onMounted warn fixes * Updates from testing * Remove nesting of ManualLoad * Keep Speckle text on mobile * minor cleanup & bugfixes * Add target prop to Logo * navbar flash fix + more cleanup * Fix urls * Footer Logo changes * Remove viewer-transparent from layout * Add Reply in Speckle * Remove Anchored Points from embed * Final changes pre CR * Fix Anchored Points * Update packages/frontend-2/components/project/model-page/dialog/embed/Embed.vue Co-authored-by: Kristaps Fabians Geikins <fabians@speckle.systems> * Fixes from CR * Updates from cr * Changes WIP * Fix for dialog opening * Changes from PR * Updates to check embed in activity * fix(fe2): project settings dialog error * Make Team open section on click of "Manage" * Fixes from merge * Changes from cr * Compare old to new in watch * Fix logo in footer of embed * Fixes from merge * Fix build. Fix lazy load * Updates from Benjamin * Fix transparent bg --------- Co-authored-by: Kristaps Fabians Geikins <fabis94@live.com> Co-authored-by: Iain Sproat <68657+iainsproat@users.noreply.github.com> Co-authored-by: Kristaps Fabians Geikins <fabians@speckle.systems>
150 lines
4.1 KiB
Vue
150 lines
4.1 KiB
Vue
<template>
|
|
<div>
|
|
<ViewerPostSetupWrapper>
|
|
<div class="flex-1">
|
|
<!-- Nav -->
|
|
<Portal to="navigation">
|
|
<ViewerScope :state="state">
|
|
<HeaderNavLink
|
|
:to="`/projects/${project?.id}`"
|
|
:name="project?.name"
|
|
></HeaderNavLink>
|
|
<ViewerExplorerNavbarLink />
|
|
</ViewerScope>
|
|
</Portal>
|
|
|
|
<ClientOnly>
|
|
<!-- Tour host -->
|
|
<div
|
|
v-if="showTour"
|
|
class="fixed w-full h-[100dvh] flex justify-center items-center pointer-events-none z-[100]"
|
|
>
|
|
<TourOnboarding />
|
|
</div>
|
|
<!-- Viewer host -->
|
|
<div
|
|
class="special-gradient absolute z-10 overflow-hidden w-screen"
|
|
:class="
|
|
isEmbedEnabled
|
|
? isTransparent
|
|
? 'viewer-transparent h-[100dvh]'
|
|
: 'h-[calc(100dvh-3.5rem)]'
|
|
: 'h-[100dvh]'
|
|
"
|
|
>
|
|
<ViewerBase />
|
|
<Transition
|
|
enter-from-class="opacity-0"
|
|
enter-active-class="transition duration-1000"
|
|
>
|
|
<ViewerAnchoredPoints v-show="showControls" />
|
|
</Transition>
|
|
</div>
|
|
|
|
<!-- Global loading bar -->
|
|
<ViewerLoadingBar class="z-20" />
|
|
|
|
<!-- Sidebar controls -->
|
|
<Transition
|
|
enter-from-class="opacity-0"
|
|
enter-active-class="transition duration-1000"
|
|
>
|
|
<ViewerControls v-show="showControls" class="z-20" />
|
|
</Transition>
|
|
|
|
<!-- Viewer Object Selection Info Display -->
|
|
<Transition
|
|
v-if="!hideSelectionInfo"
|
|
enter-from-class="opacity-0"
|
|
enter-active-class="transition duration-1000"
|
|
>
|
|
<div v-show="showControls">
|
|
<ViewerSelectionSidebar class="z-20" />
|
|
</div>
|
|
</Transition>
|
|
<!-- Shows up when filters are applied for an easy return to normality -->
|
|
<ViewerGlobalFilterReset class="z-20" :embed="!!isEmbedEnabled" />
|
|
</ClientOnly>
|
|
</div>
|
|
</ViewerPostSetupWrapper>
|
|
<ViewerEmbedFooter
|
|
:name="modelName || 'Loading...'"
|
|
:date="lastUpdate"
|
|
:url="route.path"
|
|
/>
|
|
<Portal to="primary-actions">
|
|
<HeaderNavShare
|
|
v-if="project"
|
|
:resource-id-string="modelId"
|
|
:project-id="project.id"
|
|
:visibility="project.visibility"
|
|
/>
|
|
</Portal>
|
|
</div>
|
|
</template>
|
|
<script setup lang="ts">
|
|
import {
|
|
useSetupViewer,
|
|
type InjectableViewerState
|
|
} from '~~/lib/viewer/composables/setup'
|
|
import dayjs from 'dayjs'
|
|
import { graphql } from '~~/lib/common/generated/gql'
|
|
import { useEmbed } from '~/lib/viewer/composables/setup/embed'
|
|
import { useViewerTour } from '~/lib/viewer/composables/tour'
|
|
|
|
const emit = defineEmits<{
|
|
setup: [InjectableViewerState]
|
|
}>()
|
|
|
|
const route = useRoute()
|
|
const { showTour, showControls } = useViewerTour()
|
|
|
|
const modelId = computed(() => route.params.modelId as string)
|
|
|
|
const projectId = computed(() => route.params.id as string)
|
|
|
|
const state = useSetupViewer({
|
|
projectId
|
|
})
|
|
const { isEnabled: isEmbedEnabled, hideSelectionInfo, isTransparent } = useEmbed()
|
|
|
|
emit('setup', state)
|
|
|
|
const {
|
|
resources: {
|
|
response: { project }
|
|
}
|
|
} = state
|
|
|
|
graphql(`
|
|
fragment ModelPageProject on Project {
|
|
id
|
|
createdAt
|
|
name
|
|
visibility
|
|
}
|
|
`)
|
|
|
|
const title = computed(() =>
|
|
project.value?.name.length ? `Viewer - ${project.value.name}` : ''
|
|
)
|
|
|
|
const modelName = computed(() => {
|
|
if (project.value?.models?.items && project.value.models.items.length > 0) {
|
|
return project.value.models.items[0].name
|
|
} else {
|
|
return project.value?.name
|
|
}
|
|
})
|
|
|
|
const lastUpdate = computed(() => {
|
|
if (project.value?.models?.items[0] && project.value.models.items[0].updatedAt) {
|
|
return 'Updated ' + dayjs(project.value.models.items[0].updatedAt).fromNow()
|
|
} else if (project.value) {
|
|
return 'Created ' + dayjs(project.value.createdAt).fromNow()
|
|
} else return undefined
|
|
})
|
|
|
|
useHead({ title })
|
|
</script>
|