{"version":3,"file":"DistributionInputPage.vue.mjs","sources":["../../../lib/data-provider-interface/views/DistributionInputPage.vue"],"sourcesContent":["<template>\n  <h1>{{ $t('message.dataupload.info.distributions') }}</h1>\n  <hr>\n  <div name=\"distribution-stepper-list\" class=\"distributionsListClass\">\n    <FormKit type=\"list\" name=\"distributionList\">\n      <section v-for=\"(dist, index) in list.disList\" :key=\"dist.id\" class=\"distributionOuter\">\n        <div class=\"d-flex m-4 align-items-center justify-content-between\">\n          <h2 class=\"m-0\">\n            <!-- {{\n              props?.values?.Distributions?.distributionList?.[index]?.Mandatory?.['dct:title']?.[0]?.['@value']\n                ? props.values.Distributions.distributionList[index].Mandatory['dct:title'][0]['@value']\n                : `Distribution ${index + 1}`\n            }} -->\n            {{\n              (() => {\n                const titles =\n                  props?.values?.Distributions?.distributionList?.[index]?.Mandatory?.[\n                  'dct:title'\n                  ] || [];\n\n                // Try English title first\n                const enTitle = titles.find(t => t['@language'] === 'en')?.['@value'];\n\n                // If english title is not available, Fallback to first available title in the array\n                const fallbackTitle = titles[0]?.['@value'];\n\n                // Final chosen title\n                return enTitle || fallbackTitle || `Distribution ${index + 1}`;\n            })()\n            }}\n            |\n            {{ props?.values?.Distributions?.distributionList?.[index]?.Advised?.['dct:format']?.name }}\n          </h2>\n          <div>\n            <button class=\"btn btn-secondary\" type=\"button\" @click=\"editDis(index)\">{{ $t('message.datasetDetails.edit')\n            }}</button>\n            <!-- <button class=\"btn btn-secondary\" type=\"button\" @click=\"removeDis(index)\">{{\n              $t('message.datasetDetails.delete') }}</button> -->\n            <button class=\"btn btn-secondary\" type=\"button\" @click=\"openDeleteConfirmation(dist.id)\">\n              {{ $t('message.datasetDetails.delete') }}\n            </button>\n          </div>\n        </div>\n        <div class=\"disInputWrapper\" :class=\"{ 'd-none': !list.disList[index].isActive }\">\n          <DistributionStepper :name=\"dist.name\" :index=\"index\" :schema=\"props.schema\" :values=\"props.values\"\n            :distributionList=\"disIndex\">\n          </DistributionStepper>\n\n        </div>\n\n      </section>\n    </FormKit>\n    <button type=\"button\" class=\"btn btn-secondary\" @click=\"addDistribution\">{{\n      $t('message.dataupload.info.newDistribution')\n    }}</button>\n    <!-- <button type=\"button\" class=\"btn btn-secondary\" @click=\"deleteAllDistributions\">{{\n      $t('message.dataupload.info.deleteDistribution') }}</button> -->\n    <button type=\"button\" class=\"btn btn-secondary\" @click=\"openDeleteConfirmation(null)\">{{\n      $t('message.dataupload.info.deleteDistribution') }}</button>\n\n    <div v-if=\"showConfirmDialog\" class=\"confirmation-overlay\" @click.self=\"closeConfirmDialog\">\n      <div class=\"confirmation-dialog\">\n        <div class=\"confirmation-header\">\n          <h3>Attention</h3>\n        </div>\n        <div class=\"confirmation-body\">\n          <p>{{ confirmMessage }}</p>\n        </div>\n        <div class=\"confirmation-footer\">\n          <button class=\"btn btn-danger\" @click=\"executeDelete\">Confirm Delete</button>\n          <button class=\"btn btn-secondary\" @click=\"closeConfirmDialog\">Cancel and Exit</button>\n        </div>\n      </div>\n    </div>\n  </div>\n</template>\n<script setup>\nimport { ref, onMounted, nextTick, computed } from 'vue';\nimport { useStore } from 'vuex';\nimport DistributionStepper from '../components/DistributionStepper.vue';\nimport { cloneDeep } from 'lodash';\nimport { useDpiStepper } from '../composables/useDpiStepper';\n\nconst props = defineProps({\n  values: Object,\n  schema: Object,\n})\n\nconst disIndex = ref([])\nconst store = useStore();\nconst showConfirmDialog = ref(false);\nconst deleteIndex = ref(null);\nconst confirmMessage = ref('');\n\nconst list = ref({\n  disList: [],\n})\nonMounted(async () => {\n  // Load DOM\n  await nextTick()\n  if (props.values.Distributions.distributionList.length != 0) {\n    for (let index = 0; index < props.values.Distributions.distributionList.length; index++) {\n      disIndex.value.push('distribution ' + index)\n      list.value.disList.push({ id: crypto.randomUUID(), 'name': 'distribution ' + index, 'isActive': false })\n    }\n  }\n})\nconst addDistribution = () => {\n  // list.value.disList.push({ 'name': 'distribution ' + list.value.disList.length, 'isActive': false })\n  const id = crypto.randomUUID();\n  const newDist = { id, name: 'distribution ' + list.value.disList.length, isActive: false };\n\n  // Add to local list\n  list.value.disList.push(newDist);\n\n  // Also make sure the Vuex values array stays in sync\n  const newValues = cloneDeep(props.values);\n  if (!Array.isArray(newValues.Distributions.distributionList)) {\n    newValues.Distributions.distributionList = [];\n  }\n  newValues.Distributions.distributionList.push({\n    Mandatory: { 'dct:title': [{ '@value': '' }] },\n    Advised: { 'dct:format': { name: '' } }\n  });\n\n  store.dispatch('dpiStore/saveFormValues', { property: 'datasets', values: newValues });\n\n  editDis(list.value.disList.length - 1)\n}\nconst editDis = (i) => {\n  list.value.disList.forEach((el, index) => {\n    if (i != index) {\n      el.isActive = false\n    }\n  }\n  )\n  list.value.disList[i].isActive = !list.value.disList[i].isActive\n}\nconst removeDis = (id) => {\n  // const newValues = cloneDeep(props.values);\n  // newValues.Distributions.distributionList.splice(i, 1);\n\n  // store.dispatch('dpiStore/saveFormValues', { property: 'datasets', values: newValues });\n  // list.value.disList.splice(i, 1)\n\n  // Find correct distribution by ID\n  const indexInList = list.value.disList.findIndex(d => d.id === id);\n  if (indexInList === -1) return;\n\n  // Clone and update the values\n  const newValues = cloneDeep(props.values);\n  newValues.Distributions.distributionList.splice(indexInList, 1);\n  store.dispatch('dpiStore/saveFormValues', { property: 'datasets', values: newValues });\n\n  // Update local list\n  list.value.disList.splice(indexInList, 1);\n}\n\nconst openDeleteConfirmation = (id = null) => {\n  deleteIndex.value = id;\n  confirmMessage.value = (id === null || id === undefined)\n    ? 'Are you sure you want to delete all distributions?'\n    : 'Are you sure you want to delete this distribution? - It will only be effective when you publish the dataset.';\n  showConfirmDialog.value = true;\n};\n\nconst closeConfirmDialog = () => {\n  showConfirmDialog.value = false;\n  deleteIndex.value = null;\n};\n\nconst executeDelete = () => {\n  if (deleteIndex.value === null) {\n    // Delete all distributions\n    deleteAllDistributions();\n  } else {\n    // Delete single distribution\n    removeDis(deleteIndex.value);\n  }\n  closeConfirmDialog();\n};\n\nconst deleteAllDistributions = () => {\n  const newValues = cloneDeep(props.values);\n  newValues.Distributions.distributionList = [];\n  store.dispatch('dpiStore/saveFormValues', { property: 'datasets', values: newValues });\n\n  list.value.disList = []\n  showConfirmDialog.value = false;\n}\n\n</script>\n\n<style scoped>\n.confirmation-overlay {\n  position: fixed;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  background-color: rgba(0, 0, 0, 0.5);\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  z-index: 1050;\n}\n\n.confirmation-dialog {\n  background: white;\n  border-radius: 5px;\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2);\n  width: 400px;\n  max-width: 90%;\n}\n\n.confirmation-header {\n  padding: 15px 20px;\n  border-bottom: 1px solid #eee;\n}\n\n.confirmation-header h3 {\n  margin: 0;\n  font-size: 1.25rem;\n}\n\n.confirmation-body {\n  padding: 20px;\n}\n\n.confirmation-footer {\n  padding: 15px 20px;\n  border-top: 1px solid #eee;\n  display: flex;\n  justify-content: flex-end;\n  gap: 10px;\n}\n\n.btn-danger {\n  background-color: #dc3545;\n  color: white;\n  border-color: #dc3545;\n}\n\n.btn-danger:hover {\n  background-color: #c82333;\n  border-color: #bd2130;\n}\n</style>"],"names":["props","__props","disIndex","ref","store","useStore","showConfirmDialog","deleteIndex","confirmMessage","list","onMounted","nextTick","index","addDistribution","newDist","newValues","cloneDeep","editDis","el","removeDis","id","indexInList","d","openDeleteConfirmation","closeConfirmDialog","executeDelete","deleteAllDistributions","_createElementVNode","$t","_hoisted_1","_createVNode","_component_FormKit","_openBlock","_createElementBlock","_Fragment","dist","_hoisted_2","_hoisted_3","_toDisplayString","titles","_e","_d","_c","_b","_a","enTitle","_f","t","fallbackTitle","_g","$event","_hoisted_4","_hoisted_5","_normalizeClass","DistributionStepper","_hoisted_6","_hoisted_7"],"mappings":"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"}