|
11 | 11 | <v-alert v-if="deleteSubmodels" class="mb-2" variant="tonal" border color="warning">
|
12 | 12 | Warning: If other shells refer to the same submodels, those references are not deleted!
|
13 | 13 | </v-alert>
|
| 14 | + <SubmodelSelection |
| 15 | + v-if="deleteSubmodels" |
| 16 | + :selected="selected" |
| 17 | + :submodel-ids="submodelIds" |
| 18 | + @update:selected="updateSelectedSubmodels" /> |
14 | 19 | </v-card-text>
|
15 | 20 | <v-card-actions>
|
16 | 21 | <v-spacer></v-spacer>
|
|
24 | 29 | <script lang="ts" setup>
|
25 | 30 | import { computed, ref, watch } from 'vue';
|
26 | 31 | import { useRouter } from 'vue-router';
|
| 32 | + import { useAASRepositoryClient } from '@/composables/Client/AASRepositoryClient'; |
| 33 | + import { useSMRepositoryClient } from '@/composables/Client/SMRepositoryClient'; |
27 | 34 | import { useRequestHandling } from '@/composables/RequestHandling';
|
28 | 35 | import { useAASStore } from '@/store/AASDataStore';
|
29 | 36 | import { useNavigationStore } from '@/store/NavigationStore';
|
|
36 | 43 | const navigationStore = useNavigationStore();
|
37 | 44 |
|
38 | 45 | const { getRequest, deleteRequest } = useRequestHandling();
|
| 46 | + const { getSubmodelRefsById } = useAASRepositoryClient(); |
| 47 | + const { fetchSmById } = useSMRepositoryClient(); |
39 | 48 |
|
40 | 49 | const props = defineProps<{
|
41 | 50 | modelValue: boolean;
|
|
50 | 59 | const deleteDialog = ref(false); // Variable to store if the delete dialog is open
|
51 | 60 | const deleteLoading = ref(false); // Variable to store if the AAS is being deleted
|
52 | 61 | const deleteSubmodels = ref(false); // Variable to store if the Submodels should be deleted
|
| 62 | + const submodelIds = ref<any[]>([]); // Variable to store the Submodel Ids of the AAS |
| 63 | + const selected = ref<string[]>([]); // Variable to store the selected Submodel Ids |
53 | 64 |
|
54 | 65 | const submodelRegistryURL = computed(() => navigationStore.getSubmodelRegistryURL); // Get Submodel Registry URL from Store
|
55 | 66 |
|
56 | 67 | watch(
|
57 | 68 | () => props.modelValue,
|
58 |
| - (value) => { |
| 69 | + async (value) => { |
59 | 70 | deleteDialog.value = value;
|
| 71 | + const submodelRefs = await getSubmodelRefsById(props.aas.id); |
| 72 | + submodelIds.value = []; |
| 73 | + selected.value = []; |
| 74 | + for (const submodelRef of submodelRefs) { |
| 75 | + const submodel = await fetchSmById(submodelRef.keys[0].value); |
| 76 | + submodelIds.value.push({ smId: submodelRef.keys[0].value, smIdShort: submodel.idShort, submodel }); |
| 77 | + selected.value.push(submodelRef.keys[0].value); |
| 78 | + } |
60 | 79 | }
|
61 | 80 | );
|
62 | 81 |
|
|
67 | 86 | }
|
68 | 87 | );
|
69 | 88 |
|
| 89 | + function updateSelectedSubmodels(value: string[]): void { |
| 90 | + selected.value = value; |
| 91 | + } |
| 92 | +
|
70 | 93 | async function confirmDelete() {
|
71 | 94 | deleteLoading.value = true;
|
72 | 95 | let error = false;
|
73 | 96 | try {
|
74 | 97 | if (deleteSubmodels.value) {
|
75 |
| - const aasEndpopint = extractEndpointHref(props.aas, 'AAS-3.0'); |
76 |
| - const aasRepoPath = aasEndpopint + '/submodel-refs'; |
77 |
| - const aasRepoContext = 'retrieving Submodel References'; |
| 98 | + // Extract all references in an array called submodelIds from each keys[0].value |
| 99 | + const submodelIds = selected.value; |
78 | 100 | const disableMessage = false;
|
79 |
| - const aasRepoResponse = await getRequest(aasRepoPath, aasRepoContext, disableMessage); |
80 |
| - if (aasRepoResponse.success) { |
81 |
| - const submodelRefs = aasRepoResponse.data.result; |
82 |
| - // Extract all references in an array called submodelIds from each keys[0].value |
83 |
| - const submodelIds = submodelRefs.map((ref: any) => ref.keys[0].value); |
84 |
| - await removeAAS(props.aas); |
85 |
| - // Remove each submodel |
86 |
| - for (const submodelId of submodelIds) { |
87 |
| - const submodelRegistryPath = `${submodelRegistryURL.value}/${base64Encode(submodelId)}`; |
88 |
| - const submodelRegistryResponse = await getRequest( |
89 |
| - submodelRegistryPath, |
90 |
| - 'Removing Submodels', |
91 |
| - disableMessage |
92 |
| - ); |
93 |
| - if (submodelRegistryResponse.success) { |
94 |
| - const submodelHref = extractEndpointHref(submodelRegistryResponse.data, 'SUBMODEL-3.0'); |
95 |
| - const deletePath = submodelHref; |
96 |
| - await deleteRequest(deletePath, 'removing Submodel', disableMessage); |
97 |
| - } else { |
98 |
| - error = true; |
99 |
| - } |
| 101 | + await removeAAS(props.aas); |
| 102 | + // Remove each submodel |
| 103 | + for (const submodelId of submodelIds) { |
| 104 | + const submodelRegistryPath = `${submodelRegistryURL.value}/${base64Encode(submodelId)}`; |
| 105 | + const submodelRegistryResponse = await getRequest( |
| 106 | + submodelRegistryPath, |
| 107 | + 'Removing Submodels', |
| 108 | + disableMessage |
| 109 | + ); |
| 110 | + if (submodelRegistryResponse.success) { |
| 111 | + const submodelHref = extractEndpointHref(submodelRegistryResponse.data, 'SUBMODEL-3.0'); |
| 112 | + const deletePath = submodelHref; |
| 113 | + await deleteRequest(deletePath, 'removing Submodel', disableMessage); |
| 114 | + } else { |
| 115 | + error = true; |
100 | 116 | }
|
101 |
| - } else { |
102 |
| - error = true; |
103 | 117 | }
|
104 | 118 | } else {
|
105 | 119 | await removeAAS(props.aas);
|
|
0 commit comments