-
Notifications
You must be signed in to change notification settings - Fork 173
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
adds a raw data viewer for advanced users (#2296)
* feat(gendo): scaffolding * feat(gendo): wip * feat(gendo): wip * feat(gendo): wip * feat(gendo): wip * feat(gendo): wip * feat(gendo): it's alive * feat(gendo): wip * feat(gendo): blobifies responses to make gergo happy * feat(gendo): ratelimiting + lints * feat(gendo): prettier fix * feat(gendo): last fixes * feat(gendo): clarifications * feat(gendo): helm base * feat(dataviewer): raw first pass * feat(dataviewer): some styling * feat(dataviewer): objects in new + fixes * feat(dataviewer): resources support for object cards * feat(dataviewer): adds selected object support * feat(dataviewer): removes button from main sidebar, integrates with explorer * feat(dataviewer): some value handling fixes * feat(dataviewer): linting fixes * feat(dataviewer): show raw viewer within Scene Explorer * feat(dataviewer): Update copy and labels * feat(dataviewer): Improve row borders and divider * Apply suggestions from code review * feat(dataviewer): Make sure arrow doesn't shrink --------- Co-authored-by: andrewwallacespeckle <139135120+andrewwallacespeckle@users.noreply.github.com> Co-authored-by: Benjamin Ottensten <benjamin.ottensten@gmail.com>
- Loading branch information
1 parent
bd7dd40
commit 3c15e88
Showing
13 changed files
with
336 additions
and
33 deletions.
There are no files selected for viewing
This file contains 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
61 changes: 61 additions & 0 deletions
61
packages/frontend-2/components/viewer/dataviewer/Object.vue
This file contains 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,61 @@ | ||
<template> | ||
<div> | ||
<CommonLoadingBar v-show="loading" :loading="loading" /> | ||
<div class="space-y-1"> | ||
<div v-for="kvp in limitedKvps" :key="kvp.key"> | ||
<ViewerDataviewerRow :prop="kvp" /> | ||
</div> | ||
<div v-if="limit < kvps.length"> | ||
<FormButton text full-width size="xs" @click="limit += 20"> | ||
show more | ||
</FormButton> | ||
</div> | ||
</div> | ||
</div> | ||
</template> | ||
<script setup lang="ts"> | ||
import { CommonLoadingBar } from '@speckle/ui-components' | ||
import { useLazyQuery } from '@vue/apollo-composable' | ||
import { useInjectedViewerState } from '~/lib/viewer/composables/setup' | ||
import { viewerRawObjectQuery } from '~/lib/viewer/graphql/queries' | ||
const { projectId } = useInjectedViewerState() | ||
const props = defineProps<{ | ||
object: Record<string, unknown> | ||
}>() | ||
const { result, loading, load } = useLazyQuery(viewerRawObjectQuery, () => ({ | ||
streamId: projectId.value, | ||
objectId: props.object['referencedId'] as string | ||
})) | ||
if (props.object['referencedId']) { | ||
load() | ||
} | ||
const kvps = computed(() => { | ||
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access | ||
const obj = (result.value?.stream?.object?.data || props.object) as Record< | ||
string, | ||
unknown | ||
> | ||
const keys = Object.keys(obj) | ||
const localKvps = [] | ||
for (const key of keys) { | ||
// if (!obj[key]) continue // TODO: deal with null/undef | ||
const value = obj[key] || obj[key] === 0 ? obj[key] : 'null' | ||
localKvps.push({ | ||
key, | ||
value, | ||
type: Array.isArray(value) ? 'array' : typeof value | ||
}) | ||
} | ||
return localKvps | ||
}) | ||
const limit = ref(20) | ||
const limitedKvps = computed(() => { | ||
return kvps.value.slice(0, limit.value) | ||
}) | ||
</script> |
43 changes: 43 additions & 0 deletions
43
packages/frontend-2/components/viewer/dataviewer/Panel.vue
This file contains 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
<template> | ||
<div class="px-2 divide-y divide-dashed divide-outline-3"> | ||
<div v-for="obj in rootObjs" :key="obj.referencedId" class="py-3"> | ||
<div class="font-bold text-xs pl-1 mb-2 text-foreground-1"> | ||
{{ obj.name }} | ||
</div> | ||
<ViewerDataviewerObject :object="obj" /> | ||
</div> | ||
</div> | ||
</template> | ||
<script setup lang="ts"> | ||
import { useSelectionUtilities } from '~/lib/viewer/composables/ui' | ||
import { useInjectedViewerLoadedResources } from '~~/lib/viewer/composables/setup' | ||
const { modelsAndVersionIds, objects } = useInjectedViewerLoadedResources() | ||
const { objects: selectedObjects } = useSelectionUtilities() | ||
const rootObjs = computed(() => { | ||
const selection = selectedObjects.value.map((o) => ({ | ||
referencedId: o.id, | ||
name: 'Selection', | ||
// eslint-disable-next-line camelcase | ||
speckle_type: 'reference' | ||
})) | ||
const models = modelsAndVersionIds.value.map((m) => ({ | ||
referencedId: m.model.loadedVersion.items[0].referencedObject, | ||
name: m.model.name, | ||
// eslint-disable-next-line camelcase | ||
speckle_type: 'reference' | ||
})) | ||
const objs = objects.value.map((m) => ({ | ||
referencedId: m.objectId, | ||
name: 'Object ' + m.objectId, | ||
// eslint-disable-next-line camelcase | ||
speckle_type: 'reference' | ||
})) | ||
return [...selection, ...models, ...objs] | ||
}) | ||
</script> |
This file contains 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,64 @@ | ||
<template> | ||
<div | ||
:class="`w-full bg-foundation-2 hover:bg-blue-500/5 rounded px-1 py-1 border-l-2 text-xs ${ | ||
expandable ? 'border-blue-500' : 'border-transparent' | ||
} ${expanded ? 'border-neutral-500 border-opacity-30' : ''}`" | ||
> | ||
<!-- eslint-disable-next-line vuejs-accessibility/click-events-have-key-events --> | ||
<div | ||
:class="`grid grid-cols-3 ${expandable ? 'cursor-pointer' : ''}`" | ||
@click="handleExpand" | ||
> | ||
<div class="col-span-1 mr-1 flex items-center text-foreground-2 font-semibold"> | ||
<ChevronRightIcon | ||
v-if="expandable" | ||
:class="`w-3 ${expanded ? 'rotate-90' : ''} transition shrink-0 `" | ||
/> | ||
<span class="select-all truncate">{{ prop.key }}</span> | ||
</div> | ||
<div v-if="!expandable" class="col-span-2 truncate select-all"> | ||
{{ prop.value }} | ||
</div> | ||
<div v-if="expandable" class="col-span-2 truncate"> | ||
{{ prop.type }} | ||
<span v-if="prop.type === 'array'" class="text-foreground-2 text-xs"> | ||
({{ arrayLen }}) | ||
</span> | ||
</div> | ||
</div> | ||
<div v-if="expandable && expanded" class="w-full pl-1 pt-2"> | ||
<ViewerDataviewerObject :object="castProp" /> | ||
</div> | ||
</div> | ||
</template> | ||
<script setup lang="ts"> | ||
import { ChevronRightIcon } from '@heroicons/vue/20/solid' | ||
const props = defineProps<{ | ||
prop: { | ||
key: string | ||
value: unknown | ||
type: string | ||
} | ||
}>() | ||
const expanded = ref(false) | ||
const expandable = computed(() => { | ||
return props.prop.type === 'array' || props.prop.type === 'object' | ||
}) | ||
const arrayLen = computed(() => { | ||
if (props.prop.type !== 'array') return | ||
const arr = props.prop.value as unknown[] | ||
return arr.length | ||
}) | ||
const castProp = computed(() => { | ||
return props.prop.value as Record<string, unknown> | ||
}) | ||
const handleExpand = () => { | ||
if (!expandable.value) return | ||
expanded.value = !expanded.value | ||
} | ||
</script> |
This file contains 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
This file contains 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
This file contains 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
Oops, something went wrong.