Files
speckle-server/packages/frontend-2/components/viewer/dataviewer/Object.vue
T
Dimitrie Stefanescu 3c15e888be 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>
2024-05-30 14:12:49 +02:00

62 lines
1.6 KiB
Vue

<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>