From 7b037352df3f6777ba2600e35dcd37ff3d8baab7 Mon Sep 17 00:00:00 2001 From: Dimitrie Stefanescu Date: Thu, 8 Jun 2023 09:26:19 +0100 Subject: [PATCH] Dim/fe2/view changes (#1608) * Fixed an issue with curves doubling up on geometry and also not being selectable after the last filtering changes. Added the options to make lines transparent. Added lines to diffing * Points now are diff-able and support proper visual diff-ing. Visual diff filters are now chosen internally by the Differ. Fixed an issue with LineBatch and transparency * Implemented PLAIN visual diff mode, where all objects keep their original materil, but opacity is manipulated via the diff time. Added API member function to switch between the PLAIN and COLORED visual diff modes * feat(fe2): diffs wip * Diffing fixes for instances and blocks. Things seem to be working fine, but there are some caveats. Additionally, some older issues were fixed and diffing now works better on all the rest of the streams * feat(fe2): de-dupes diff results * feat(fe2): wip diffs * feat(fe2): diff transparency goes from 0 to 1 * feat(fe2): diff results display work * feat(fe2): diff results display work * feat(fe2): diff panel work * feat(fe2): diff work: various display changes, coloring toggle, selection logic, selection object display wip * feat(fe2): diff work: cleaned up old/new version, fixed minor bug in viewer diff time when swapping color mode * feat(fe2): diff work: implements custom selection logic and selection display for modified objects (they come in pairs now) * feat(fe2): diff minor fix in selected object display * feat(fe2): wip; trying to fix diff order to be consistent (ordered by date) * feat(fe2): wip, broken state right now * feat(fe2): fixes scrollbars in viewer * feat(fe2): fixes slider sync with diff time * feat(fe2): WIP syncs of diffs (threads, refreshes, etc.) * feat(fe2): diffing polish * speckle shared fix * speckle shared fix * more bugfixes * linter fixess * more CI fixes * fix viewerState serialization * more linting fixess * template fixes * moving tailwind classes to theme package * migrated away from diffString + simplified postSetup * moved diff new/old version resolution to use state.resources * cleanup * updating url threadId & diff command correctly * minor improvements to diff state --------- Co-authored-by: AlexandruPopovici Co-authored-by: Kristaps Fabians Geikins --- packages/frontend-2/assets/css/tailwind.css | 3 +- .../frontend-2/components/viewer/Controls.vue | 18 ++- .../viewer/anchored-point/Thread.vue | 4 +- .../compare-changes/ObjectGroup-old.vue | 58 +++++++ .../viewer/compare-changes/ObjectGroup.vue | 72 +++++++++ .../viewer/compare-changes/Panel.vue | 142 ++++++++++++++++ .../viewer/compare-changes/Version.vue | 30 ++++ .../components/viewer/resources/List.vue | 3 +- .../components/viewer/resources/ModelCard.vue | 16 +- .../viewer/resources/VersionCard.vue | 23 ++- .../components/viewer/selection/Object.vue | 98 ++++++++++- .../components/viewer/selection/Sidebar.vue | 17 +- .../lib/common/composables/async.ts | 11 +- .../frontend-2/lib/common/composables/url.ts | 6 +- .../lib/common/generated/gql/gql.ts | 9 +- .../lib/common/generated/gql/graphql.ts | 15 +- .../lib/common/helpers/accessibility.ts | 13 ++ .../frontend-2/lib/common/helpers/route.ts | 2 +- .../lib/viewer/composables/commentBubbles.ts | 4 +- .../lib/viewer/composables/serialization.ts | 31 +++- .../lib/viewer/composables/setup.ts | 82 ++++++++-- .../lib/viewer/composables/setup/diff.ts | 152 ++++++++++++++++++ .../lib/viewer/composables/setup/postSetup.ts | 131 +++++++++++++-- .../lib/viewer/composables/setup/selection.ts | 26 +++ .../viewer/composables/setup/urlHashState.ts | 25 ++- .../frontend-2/lib/viewer/composables/ui.ts | 42 ++++- .../lib/viewer/composables/viewer.ts | 2 +- .../frontend-2/lib/viewer/graphql/queries.ts | 26 ++- .../projects/[id]/models/[modelId]/index.vue | 2 +- packages/frontend-2/plugins/dayjs.ts | 2 + .../core/typedefs/modelsAndVersions.graphql | 5 + .../server/modules/comments/services/data.ts | 7 +- .../modules/core/graph/generated/graphql.ts | 2 + .../modules/core/services/commit/retrieval.ts | 28 ++-- .../server/test/graphql/generated/graphql.ts | 2 + packages/shared/src/viewer/helpers/route.ts | 13 ++ packages/shared/src/viewer/helpers/state.ts | 21 ++- packages/tailwind-theme/src/plugin.ts | 12 ++ packages/viewer/src/modules/Differ.ts | 4 +- packages/viewer/src/modules/Viewer.ts | 24 ++- utils/ensure-tailwind-deps.mjs | 14 +- workspace.code-workspace | 12 +- 42 files changed, 1112 insertions(+), 97 deletions(-) create mode 100644 packages/frontend-2/components/viewer/compare-changes/ObjectGroup-old.vue create mode 100644 packages/frontend-2/components/viewer/compare-changes/ObjectGroup.vue create mode 100644 packages/frontend-2/components/viewer/compare-changes/Panel.vue create mode 100644 packages/frontend-2/components/viewer/compare-changes/Version.vue create mode 100644 packages/frontend-2/lib/common/helpers/accessibility.ts create mode 100644 packages/frontend-2/lib/viewer/composables/setup/diff.ts diff --git a/packages/frontend-2/assets/css/tailwind.css b/packages/frontend-2/assets/css/tailwind.css index df90400c7..0cef5722a 100644 --- a/packages/frontend-2/assets/css/tailwind.css +++ b/packages/frontend-2/assets/css/tailwind.css @@ -5,7 +5,8 @@ @tailwind utilities; /** - * Don't pollute this - it's going to be bundled in all pages! + * Don't pollute this - it's going to be bundled in all pages! If it's a global style change to what can be + considered the "speckle tailwind theme" then make this change in @speckle/tailwind-theme instead */ /** diff --git a/packages/frontend-2/components/viewer/Controls.vue b/packages/frontend-2/components/viewer/Controls.vue index 13e87246d..e72b63afb 100644 --- a/packages/frontend-2/components/viewer/Controls.vue +++ b/packages/frontend-2/components/viewer/Controls.vue @@ -96,11 +96,15 @@ >
- +
+ + +
@@ -134,6 +138,7 @@ import { ModifierKeys, getKeyboardShortcutTitle } from '@speckle/ui-components' +import { useInjectedViewerInterfaceState } from '~~/lib/viewer/composables/setup' const { zoomExtentsOrSelection, @@ -146,6 +151,9 @@ type ActiveControl = 'none' | 'models' | 'explorer' | 'filters' | 'discussions' const activeControl = ref('models') const scrollableControlsContainer = ref(null as Nullable) +const { + diff: { enabled } +} = useInjectedViewerInterfaceState() const modelsShortcut = ref( `Models (${getKeyboardShortcutTitle([ModifierKeys.AltOrOpt, 'm'])})` diff --git a/packages/frontend-2/components/viewer/anchored-point/Thread.vue b/packages/frontend-2/components/viewer/anchored-point/Thread.vue index a855deec1..00cb97dcb 100644 --- a/packages/frontend-2/components/viewer/anchored-point/Thread.vue +++ b/packages/frontend-2/components/viewer/anchored-point/Thread.vue @@ -37,12 +37,12 @@ >
diff --git a/packages/frontend-2/components/viewer/compare-changes/ObjectGroup-old.vue b/packages/frontend-2/components/viewer/compare-changes/ObjectGroup-old.vue new file mode 100644 index 000000000..2afc04529 --- /dev/null +++ b/packages/frontend-2/components/viewer/compare-changes/ObjectGroup-old.vue @@ -0,0 +1,58 @@ + + diff --git a/packages/frontend-2/components/viewer/compare-changes/ObjectGroup.vue b/packages/frontend-2/components/viewer/compare-changes/ObjectGroup.vue new file mode 100644 index 000000000..dc727ccbe --- /dev/null +++ b/packages/frontend-2/components/viewer/compare-changes/ObjectGroup.vue @@ -0,0 +1,72 @@ + + diff --git a/packages/frontend-2/components/viewer/compare-changes/Panel.vue b/packages/frontend-2/components/viewer/compare-changes/Panel.vue new file mode 100644 index 000000000..f90064005 --- /dev/null +++ b/packages/frontend-2/components/viewer/compare-changes/Panel.vue @@ -0,0 +1,142 @@ + + diff --git a/packages/frontend-2/components/viewer/compare-changes/Version.vue b/packages/frontend-2/components/viewer/compare-changes/Version.vue new file mode 100644 index 000000000..4e46a10fc --- /dev/null +++ b/packages/frontend-2/components/viewer/compare-changes/Version.vue @@ -0,0 +1,30 @@ + + diff --git a/packages/frontend-2/components/viewer/resources/List.vue b/packages/frontend-2/components/viewer/resources/List.vue index dd001a73c..52d854932 100644 --- a/packages/frontend-2/components/viewer/resources/List.vue +++ b/packages/frontend-2/components/viewer/resources/List.vue @@ -41,18 +41,17 @@ diff --git a/packages/frontend-2/components/viewer/resources/VersionCard.vue b/packages/frontend-2/components/viewer/resources/VersionCard.vue index 65cddae9e..4b1e7c30e 100644 --- a/packages/frontend-2/components/viewer/resources/VersionCard.vue +++ b/packages/frontend-2/components/viewer/resources/VersionCard.vue @@ -3,14 +3,18 @@ :class="`bg-foundation group relative block w-full space-y-2 rounded-md pb-2 text-left transition ${ clickable ? 'hover:bg-primary-muted' : 'cursor-default' } - ${!showTimeline ? 'bg-primary-muted' : ''}`" + ${!showTimeline ? 'bg-primary-muted' : ''} + ${isLoaded ? '' : ''} + `" @click="handleClick" >
{{ isLatest ? 'Latest' : timeAgoCreatedAt }}
+ + View Changes + + Currently Viewing
@@ -82,6 +97,7 @@ const props = withDefaults( const emit = defineEmits<{ (e: 'changeVersion', version: string): void + (e: 'viewChanges', version: ViewerModelVersionCardItemFragment): void }>() const isLoaded = computed(() => props.isLoadedVersion) @@ -95,6 +111,7 @@ const createdAt = computed(() => { }) function handleClick() { + console.log('wot') if (props.clickable) emit('changeVersion', props.version.id) } diff --git a/packages/frontend-2/components/viewer/selection/Object.vue b/packages/frontend-2/components/viewer/selection/Object.vue index 5eae08485..2f87f6675 100644 --- a/packages/frontend-2/components/viewer/selection/Object.vue +++ b/packages/frontend-2/components/viewer/selection/Object.vue @@ -1,15 +1,28 @@