From 8e688b277b96b81592a1db4e027d31b7eea24d5f Mon Sep 17 00:00:00 2001
From: mic29226 <michael.peters@fokus.fraunhofer.de>
Date: Tue, 18 Mar 2025 10:48:54 +0100
Subject: [PATCH] fixed the kardinality of the widget

---
 .../components/WidgetInput.vue                | 86 +++++++++++++++++--
 .../config/dcatapde_BFS/input-definition.ts   |  2 +-
 .../views/InputPage.vue                       |  2 +-
 .../lib/form/inputDefinitions.ts              |  2 +-
 4 files changed, 83 insertions(+), 9 deletions(-)

diff --git a/packages/piveau-hub-ui-modules/lib/data-provider-interface/components/WidgetInput.vue b/packages/piveau-hub-ui-modules/lib/data-provider-interface/components/WidgetInput.vue
index 61261ef13..2f96c43ae 100644
--- a/packages/piveau-hub-ui-modules/lib/data-provider-interface/components/WidgetInput.vue
+++ b/packages/piveau-hub-ui-modules/lib/data-provider-interface/components/WidgetInput.vue
@@ -1,17 +1,26 @@
 <template>
     <div class="formkitProperty">
-        <h4 class="">Widget</h4>
+        <h4 class="">Tag</h4>
 
         <div class="formkitCmpWrap d-flex p-3 w-100">
 
             <div class="formkit-inner">
                 <input readonly="" placeholder="Wählen Sie die Art des Widgets aus" class="formkit-input" type="text"
-                    name="mode" id="input_164" aria-required="true" value="" aria-describedby="input_164-rule_required">
+                    name="mode" aria-required="true" :value="widgetType" aria-describedby="input_164-rule_required"
+                    @click="activeList = !activeList">
+                <ul ref="dropdownListWidget" v-show="activeList" class="autocompleteResultList">
+                    <li v-for="match in matches" :key="match" @click="setValue(match); activeList = !activeList"
+                        class="p-2 border-b border-gray-200 data-[selected=true]:bg-blue-100 choosableItemsAC">{{ match
+                        }}
+                    </li>
+                </ul>
             </div>
-            <button class="ml-3 btn btn-secondary" :class="{ activeLeading: isLeading }" type="button" @click="isLeading">
-                Primär?
-            </button>
 
+            <!-- Liste Distribution/ Widget/ Report --- leading kann nur 1 sein und auch nur ein widget -->
+            <button class="ml-3 widgetButton" v-if="widgetType === 'Widget'"
+                :class="{ activeLeading: activeButton,}" type="button" @click="isLeading">
+                Leading
+            </button>
         </div>
     </div>
 
@@ -19,13 +28,57 @@
 
 </template>
 <script setup>
+import { ref, watch } from 'vue';
+import { getNode } from '@formkit/core'
+
 const props = defineProps({
     context: Object
 })
+let disList = ref(getNode('Distributions').value['distributionList'])
+
+
+// Init every dis as distribution - default state
+props.context.node.input({ type: 'distribution' })
+let activeButton = ref(false)
 
 const isLeading = () => {
 
-    return true
+    checkForLead()
+   
+    console.log(props.context.value['type']);
+    if (props.context.value['type'] != 'LeadingWidget' && !activeLeadingWidget.value) {
+        props.context.node.input({ type: 'LeadingWidget' })
+        activeButton.value = !activeButton.value
+    } else {
+        activeLeadingWidget.value = false
+        activeButton.value = false
+        props.context.node.input({ type: 'Widget' })
+    }
+
+}
+const activeList = ref(false)
+const matches = ref(['Distribution', 'Widget', 'Report'])
+let activeLeadingWidget = ref(false)
+let widgetType = ref('')
+
+const checkForLead = () => {
+    disList.value = getNode('Distributions').value['distributionList']
+    console.log(disList.value, getNode('Distributions').value['distributionList']);
+
+    for (let index = 0; index < disList.value.length; index++) {
+        console.log(disList.value[index]['Mandatory']['pv:DistributionType']['type']);
+
+        if (disList.value[index]['Mandatory']['pv:DistributionType']['type'] === 'LeadingWidget') {
+            activeLeadingWidget.value = true
+        }
+    }
+}
+
+const setValue = (item) => {
+    checkForLead()
+    console.log(getNode('Distributions').value['distributionList'].length);
+    props.context.node.input({ type: item })
+    widgetType.value = item
 }
 </script>
 <style scoped>
@@ -37,5 +90,26 @@ const isLeading = () => {
 
     flex-grow: 1;
 
+}
+
+.formkitCmpWrap {
+    position: relative;
+}
+
+.widgetButton {
+    border-color: lightgray;
+
+    &:hover {
+        background-color: green;
+        color: white;
+    }
+
+}
+
+.activeLeading {
+    background-color: green;
+    color: white;
+    border-color: green;
+
 }
 </style>
\ No newline at end of file
diff --git a/packages/piveau-hub-ui-modules/lib/data-provider-interface/config/dcatapde_BFS/input-definition.ts b/packages/piveau-hub-ui-modules/lib/data-provider-interface/config/dcatapde_BFS/input-definition.ts
index 8de969b8a..657020c24 100644
--- a/packages/piveau-hub-ui-modules/lib/data-provider-interface/config/dcatapde_BFS/input-definition.ts
+++ b/packages/piveau-hub-ui-modules/lib/data-provider-interface/config/dcatapde_BFS/input-definition.ts
@@ -1377,7 +1377,7 @@ const dcatapProperties: InputDefinition = {
   distributions: {
     isWidget: {
       identifier: "widget",
-      name: "pv:isWidget",
+      name: "pv:DistributionType",
       $formkit: "widget",
       class: "property inDistribution",
     },
diff --git a/packages/piveau-hub-ui-modules/lib/data-provider-interface/views/InputPage.vue b/packages/piveau-hub-ui-modules/lib/data-provider-interface/views/InputPage.vue
index 5ca7d8654..ca65d5249 100644
--- a/packages/piveau-hub-ui-modules/lib/data-provider-interface/views/InputPage.vue
+++ b/packages/piveau-hub-ui-modules/lib/data-provider-interface/views/InputPage.vue
@@ -3,7 +3,7 @@
     <div ref="fkInputContainer" class="inputContainer" v-if="isInput">
       <div class="formContainer formkit position-relative">
 
-        <!-- <details>{{ formValues }}</details> -->
+        <details>{{ formValues }}</details>
         <FormKit type="form" v-model="formValues" :actions="false" :plugins="[stepPlugin]" id="dpiForm"
           @change="saveFormValues({ property: property, page: page, distid: id, values: formValues })"
           @click="saveFormValues({ property: property, page: page, distid: id, values: formValues })" @submit.prevent=""
diff --git a/packages/piveau-hub-ui-modules/lib/form/inputDefinitions.ts b/packages/piveau-hub-ui-modules/lib/form/inputDefinitions.ts
index de8ef3926..b5e5dc9b5 100644
--- a/packages/piveau-hub-ui-modules/lib/form/inputDefinitions.ts
+++ b/packages/piveau-hub-ui-modules/lib/form/inputDefinitions.ts
@@ -17,7 +17,7 @@ export default {
     component: Repeatable,
   },
   widget: {
-    type: "list",
+    type: "input",
     component: WidgetInput,
   },
   id: {
-- 
GitLab