|
15 | 15 | </template> |
16 | 16 |
|
17 | 17 | <v-list-item-title> |
18 | | - {{ nameToDisplay(document) }} |
19 | | - <DescriptionTooltip :description-array="document?.description" /> |
| 18 | + {{ getDocumentTitle(document, i) }} |
| 19 | + <DescriptionTooltip :description-array="getDescriptionArray(document)" /> |
20 | 20 | </v-list-item-title> |
21 | 21 | </v-list-item> |
22 | 22 | </v-expansion-panel-title> |
|
30 | 30 | <!-- Document Versions --> |
31 | 31 | <template v-if="(document.documentVersionInfo ?? []).length > 0"> |
32 | 32 | <div class="text-caption text-subtitleText"> |
33 | | - <template v-if="(document.documentVersionInfo ?? []).length > 0"> |
34 | | - <!-- Tabs for document versions- --> |
35 | | - <v-tabs |
36 | | - :model-value="getVersionTab(document)" |
37 | | - density="comfortable" |
38 | | - color="primary" |
39 | | - class="mt-2" |
40 | | - @update:model-value="(val) => setVersionTab(document, val)"> |
41 | | - <v-tab |
42 | | - v-for="(versionSmc, v) in document.documentVersionInfo ?? []" |
43 | | - :key="versionSmc.id ?? versionSmc.idShort ?? `version-${v}`" |
44 | | - :value="v"> |
45 | | - {{ nameToDisplay(versionSmc) }} |
46 | | - </v-tab> |
47 | | - </v-tabs> |
48 | | - <v-divider class="mt-2" /> |
49 | | - <v-window :model-value="getVersionTab(document)" class="mt-3"> |
50 | | - <v-window-item |
51 | | - v-for="(versionSmc, v) in document.documentVersionInfo ?? []" |
52 | | - :key="versionSmc.id ?? versionSmc.idShort ?? `version-${v}`" |
53 | | - :value="v"> |
54 | | - <div class="pt-4"> |
55 | | - <!-- Table for Version Metadata --> |
56 | | - <VersionMetadataTable :version-smc="versionSmc" /> |
57 | | - |
58 | | - <!-- Tabs for File and Digital Files --> |
59 | | - <VersionAttachments |
60 | | - :version-smc="versionSmc" |
61 | | - :version-index="Number(v)" /> |
62 | | - </div> |
63 | | - </v-window-item> |
64 | | - </v-window> |
65 | | - </template> |
| 33 | + <!-- Tabs for document versions --> |
| 34 | + <v-tabs |
| 35 | + :model-value="getVersionTab(document)" |
| 36 | + density="comfortable" |
| 37 | + color="primary" |
| 38 | + class="mt-2" |
| 39 | + @update:model-value="(val) => onVersionTabUpdate(document, val)"> |
| 40 | + <v-tab |
| 41 | + v-for="(versionSmc, v) in document.documentVersionInfo ?? []" |
| 42 | + :key="versionSmc.id ?? versionSmc.idShort ?? `version-${v}`" |
| 43 | + :value="v"> |
| 44 | + {{ nameToDisplay(versionSmc) }} |
| 45 | + </v-tab> |
| 46 | + </v-tabs> |
| 47 | + <v-divider class="mt-2" /> |
| 48 | + <v-window :model-value="getVersionTab(document)" class="mt-3"> |
| 49 | + <v-window-item |
| 50 | + v-for="(versionSmc, v) in document.documentVersionInfo ?? []" |
| 51 | + :key="versionSmc.id ?? versionSmc.idShort ?? `version-${v}`" |
| 52 | + :value="v"> |
| 53 | + <div class="pt-4"> |
| 54 | + <!-- Table for Version Metadata --> |
| 55 | + <VersionMetadataTable :version-smc="versionSmc" /> |
| 56 | + |
| 57 | + <!-- Tabs for File and Digital Files --> |
| 58 | + <VersionAttachments :version-smc="versionSmc" /> |
| 59 | + </div> |
| 60 | + </v-window-item> |
| 61 | + </v-window> |
66 | 62 | </div> |
67 | 63 | </template> |
68 | 64 |
|
|
91 | 87 | </template> |
92 | 88 |
|
93 | 89 | <script lang="ts" setup> |
| 90 | + import type { DocumentLike, SubmodelElementLike } from './types'; |
94 | 91 | import { onMounted, ref } from 'vue'; |
95 | 92 | import { useReferableUtils } from '@/composables/AAS/ReferableUtils'; |
96 | 93 | import { useSMHandling } from '@/composables/AAS/SMHandling'; |
97 | 94 | import { useSME } from '@/composables/AAS/SubmodelElements/SubmodelElement'; |
98 | 95 | import { getSubmodelElementBySemanticId, getSubmodelElementsBySemanticId } from '@/utils/AAS/SemanticIdUtils'; |
| 96 | + import { getDescriptionArray, getDisplayTitleOrFallback } from './utils/submodelElementUtils'; |
99 | 97 |
|
100 | 98 | defineOptions({ |
101 | 99 | name: 'HandoverDocumentation', |
|
106 | 104 | const { nameToDisplay } = useReferableUtils(); |
107 | 105 | const { hasValue } = useSME(); |
108 | 106 |
|
109 | | - // Properties |
110 | | - const props = defineProps({ |
111 | | - submodelElementData: { |
112 | | - type: Object as any, |
113 | | - default: {} as any, |
114 | | - }, |
115 | | - }); |
| 107 | + // Props |
| 108 | + const props = defineProps<{ |
| 109 | + submodelElementData?: SubmodelElementLike; |
| 110 | + }>(); |
116 | 111 |
|
117 | 112 | // Data |
118 | 113 | const isLoading = ref(false); |
119 | | - const handoverDocumentationData = ref({} as any); |
| 114 | + const handoverDocumentationData = ref<SubmodelElementLike>({}); |
120 | 115 | const panel = ref(null as number | null); |
121 | | - const documents = ref([] as any); |
122 | | - const documentsSml = ref<any>(null); |
| 116 | + const documents = ref<DocumentLike[]>([]); |
| 117 | + const documentsSml = ref<SubmodelElementLike | null>(null); |
123 | 118 | const versionTab = ref<Record<string, number>>({}); |
124 | 119 |
|
125 | 120 | onMounted(() => { |
|
137 | 132 |
|
138 | 133 | handoverDocumentationData.value = await setData( |
139 | 134 | { ...props.submodelElementData }, |
140 | | - props.submodelElementData.path |
| 135 | + props.submodelElementData.path ?? '' |
141 | 136 | ); |
142 | 137 |
|
143 | 138 | // Get Documents SML |
|
155 | 150 | const documentSmcs = getSubmodelElementsBySemanticId( |
156 | 151 | '0173-1#02-ABI500#003/0173-1#01-AHF579#003', |
157 | 152 | documentsSml.value |
158 | | - ); |
| 153 | + ) as SubmodelElementLike[]; |
159 | 154 | documents.value = documentSmcs; |
160 | 155 |
|
161 | 156 | // For each Document → get Document data |
162 | | - documents.value.forEach((doc: any) => { |
| 157 | + documents.value.forEach((doc: DocumentLike) => { |
163 | 158 | //function for Document Versions |
164 | 159 | extractDocumentVersionInfo(doc); |
165 | 160 |
|
|
175 | 170 | const documentIdSmcs = getSubmodelElementsBySemanticId( |
176 | 171 | '0173-1#02-ABI501#003/0173-1#01-AHF580#003', |
177 | 172 | documentIdsSml |
178 | | - ); |
| 173 | + ) as SubmodelElementLike[]; |
179 | 174 |
|
180 | 175 | doc.documentIds = documentIdSmcs; |
181 | 176 | }); |
182 | 177 | isLoading.value = false; |
183 | 178 | } |
184 | 179 |
|
185 | | - function extractDocumentVersionInfo(doc: any): void { |
| 180 | + function extractDocumentVersionInfo(doc: DocumentLike): void { |
186 | 181 | // Get Document Version Info SML (container, one per document) |
187 | 182 | const documentVersionInfoSml = getSubmodelElementBySemanticId('0173-1#02-ABI503#003', doc); |
188 | 183 |
|
|
198 | 193 | const documentVersionInfoSmcs = getSubmodelElementsBySemanticId( |
199 | 194 | '0173-1#02-ABI503#003/0173-1#01-AHF582#003', |
200 | 195 | documentVersionInfoSml |
201 | | - ).filter((sme: any) => hasValue(sme)); |
| 196 | + ).filter((sme: unknown) => hasValue(sme)) as SubmodelElementLike[]; |
202 | 197 |
|
203 | 198 | doc.documentVersionInfo = documentVersionInfoSmcs; |
204 | | - return; |
205 | 199 | } |
206 | | - function getVersionTab(document: any): number { |
| 200 | + function getVersionTab(document: DocumentLike): number { |
207 | 201 | const key = document?.id ?? document?.idShort ?? 'doc'; |
208 | 202 | return versionTab.value[key] ?? 0; |
209 | 203 | } |
210 | | - function setVersionTab(document: any, index: number): void { |
| 204 | + function setVersionTab(document: DocumentLike, index: number): void { |
211 | 205 | const key = document?.id ?? document?.idShort ?? 'doc'; |
212 | 206 | versionTab.value[key] = index; |
213 | 207 | } |
| 208 | + function onVersionTabUpdate(document: DocumentLike, value: unknown): void { |
| 209 | + setVersionTab(document, typeof value === 'number' ? value : 0); |
| 210 | + } |
| 211 | +
|
| 212 | + function getDocumentTitle(document: DocumentLike, index: number): string { |
| 213 | + const documentName = String(nameToDisplay(document) ?? ''); |
| 214 | + return getDisplayTitleOrFallback(documentName, 'Document', index); |
| 215 | + } |
214 | 216 | </script> |
0 commit comments