@piveau/piveau-hub-ui-modules 4.6.23 → 4.6.25

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/dist/data-provider-interface/components/FileUpload.vue.d.ts +1 -1
  2. package/dist/data-provider-interface/components/FileUpload.vue.mjs +144 -132
  3. package/dist/data-provider-interface/components/FileUpload.vue.mjs.map +1 -1
  4. package/dist/data-provider-interface/components/SimpleSelect.vue.mjs +41 -40
  5. package/dist/data-provider-interface/components/SimpleSelect.vue.mjs.map +1 -1
  6. package/dist/data-provider-interface/components/WidgetInput.vue.d.ts +7 -0
  7. package/dist/data-provider-interface/components/WidgetInput.vue.mjs +73 -0
  8. package/dist/data-provider-interface/components/WidgetInput.vue.mjs.map +1 -0
  9. package/dist/data-provider-interface/components/WidgetInput.vue2.mjs +5 -0
  10. package/dist/data-provider-interface/components/WidgetInput.vue2.mjs.map +1 -0
  11. package/dist/data-provider-interface/config/dcatap/input-definition.mjs +4 -2
  12. package/dist/data-provider-interface/config/dcatap/input-definition.mjs.map +1 -1
  13. package/dist/data-provider-interface/config/dcatapde/input-definition.mjs +1 -0
  14. package/dist/data-provider-interface/config/dcatapde/input-definition.mjs.map +1 -1
  15. package/dist/data-provider-interface/config/dcatapde_BFS/format-types.mjs +276 -0
  16. package/dist/data-provider-interface/config/dcatapde_BFS/format-types.mjs.map +1 -0
  17. package/dist/data-provider-interface/config/dcatapde_BFS/input-definition.d.ts +18 -0
  18. package/dist/data-provider-interface/config/dcatapde_BFS/input-definition.mjs +2146 -0
  19. package/dist/data-provider-interface/config/dcatapde_BFS/input-definition.mjs.map +1 -0
  20. package/dist/data-provider-interface/config/dcatapde_BFS/page-content-config.mjs +24 -0
  21. package/dist/data-provider-interface/config/dcatapde_BFS/page-content-config.mjs.map +1 -0
  22. package/dist/data-provider-interface/config/dcatapde_BFS/prefixes.mjs +28 -0
  23. package/dist/data-provider-interface/config/dcatapde_BFS/prefixes.mjs.map +1 -0
  24. package/dist/data-provider-interface/config/dcatapde_BFS/vocab-prefixes.mjs +34 -0
  25. package/dist/data-provider-interface/config/dcatapde_BFS/vocab-prefixes.mjs.map +1 -0
  26. package/dist/data-provider-interface/config/dpi-spec-config.mjs +23 -11
  27. package/dist/data-provider-interface/config/dpi-spec-config.mjs.map +1 -1
  28. package/dist/data-provider-interface/store/modules/conversionStore.mjs.map +1 -1
  29. package/dist/data-provider-interface/utils/RDFconverter.mjs +340 -173
  30. package/dist/data-provider-interface/utils/RDFconverter.mjs.map +1 -1
  31. package/dist/data-provider-interface/utils/general-helper.mjs +19 -10
  32. package/dist/data-provider-interface/utils/general-helper.mjs.map +1 -1
  33. package/dist/data-provider-interface/utils/inputConverter.mjs +148 -65
  34. package/dist/data-provider-interface/utils/inputConverter.mjs.map +1 -1
  35. package/dist/data-provider-interface/views/InputPage.vue.mjs +32 -30
  36. package/dist/data-provider-interface/views/InputPage.vue.mjs.map +1 -1
  37. package/dist/data-provider-interface/views/OverviewPage/Properties/StringProp.vue.mjs.map +1 -1
  38. package/dist/datasetDetails/properties/DatasetDetailsProperty.vue.mjs +8 -8
  39. package/dist/datasetDetails/properties/DatasetDetailsProperty.vue.mjs.map +1 -1
  40. package/dist/form/inputDefinitions.mjs +21 -16
  41. package/dist/form/inputDefinitions.mjs.map +1 -1
  42. package/dist/piveau-hub-ui-modules.css +1 -1
  43. package/package.json +1 -1
@@ -15,6 +15,7 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
15
15
  }, string, import('@intlify/core-base').RemoveIndexSignature<{
16
16
  [x: string]: import('../../../vue-i18n/dist/vue-i18n.cjs.js').LocaleMessageValue<import('../../../vue-i18n/dist/vue-i18n.cjs.js').VueMessageType>;
17
17
  }>, never, string, string>;
18
+ catalogId: import('vue').ComputedRef<any>;
18
19
  }, {
19
20
  inputChoice: string;
20
21
  error: string;
@@ -27,7 +28,6 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
27
28
  fail: boolean;
28
29
  validExtensions: any;
29
30
  }, {
30
- getCatalogue(): unknown;
31
31
  getData: import('vuex').Computed;
32
32
  getIsEditMode: import('vuex').Computed;
33
33
  getUserData: import('vuex').Computed;
@@ -1,15 +1,19 @@
1
- import { mapGetters as x, mapActions as b } from "vuex";
1
+ import { mapGetters as y, mapActions as F } from "vuex";
2
2
  import C from "axios";
3
3
  import V from "../utils/general-helper.mjs";
4
- import { getNode as E } from "@formkit/core";
5
- import { reactive as O, ref as S, resolveComponent as A, openBlock as a, createElementBlock as n, Fragment as y, createElementVNode as u, createVNode as L, createTextVNode as r, toDisplayString as m, createCommentVNode as p, mergeProps as T, withDirectives as G, vModelText as P, renderList as q } from "vue";
6
- import { onClickOutside as k } from "../../external/@vueuse/core/index";
7
- import { useRuntimeEnv as D } from "../../composables/useRuntimeEnv.mjs";
8
- import "@formkit/vue";
4
+ import "@formkit/core";
5
+ import { defineComponent as E, reactive as O, ref as S, computed as A, resolveComponent as T, openBlock as o, createElementBlock as l, Fragment as L, createElementVNode as n, createVNode as I, createTextVNode as s, toDisplayString as c, createCommentVNode as u, mergeProps as D, withDirectives as G, vModelText as P, renderList as q } from "vue";
6
+ import { onClickOutside as $ } from "../../external/@vueuse/core/index";
7
+ import { useRuntimeEnv as x } from "../../composables/useRuntimeEnv.mjs";
8
+ import { useFormKitNodeById as B } from "@formkit/vue";
9
9
  import { useI18n as N } from "vue-i18n";
10
+ import { useDpiContext as H } from "../composables/useDpiContext.mjs";
11
+ import "vue-router";
12
+ import "../../utils/helpers.mjs";
13
+ import "lodash-es";
10
14
  import "./FileUpload.vue2.mjs";
11
- import B from "../../_virtual/_plugin-vue_export-helper.mjs";
12
- const H = {
15
+ import K from "../../_virtual/_plugin-vue_export-helper.mjs";
16
+ const M = E({
13
17
  props: {
14
18
  context: {
15
19
  type: Object,
@@ -17,7 +21,7 @@ const H = {
17
21
  }
18
22
  },
19
23
  data() {
20
- var l;
24
+ var t;
21
25
  return {
22
26
  inputChoice: "",
23
27
  error: "",
@@ -28,23 +32,20 @@ const H = {
28
32
  isLoading: !1,
29
33
  success: !1,
30
34
  fail: !1,
31
- validExtensions: ((l = this.$env.content.dataProviderInterface.uploadFileTypes) == null ? void 0 : l.split(",")) || []
35
+ validExtensions: ((t = this.$env.content.dataProviderInterface.uploadFileTypes) == null ? void 0 : t.split(",")) || []
32
36
  };
33
37
  },
34
38
  computed: {
35
- ...x("auth", [
39
+ ...y("auth", [
36
40
  "getUserData",
37
41
  "getIsEditMode"
38
42
  ]),
39
- ...x("dpiStore", [
43
+ ...y("dpiStore", [
40
44
  "getData"
41
- ]),
42
- getCatalogue() {
43
- return E("dcat:catalog").value;
44
- }
45
+ ])
45
46
  },
46
47
  methods: {
47
- ...b("dpiStore", [
48
+ ...F("dpiStore", [
48
49
  "saveLocalstorageValues"
49
50
  ]),
50
51
  toggleUploadUrl() {
@@ -53,9 +54,9 @@ const H = {
53
54
  toggleUploadFileSwitch() {
54
55
  this.inputChoice = this.t("message.dataupload.datasets.conditional.URL"), this.uploadFileSwitch && (this.uploadFileSwitch = !this.uploadFileSwitch);
55
56
  },
56
- validateFile(l) {
57
- const o = "." + l.target.files[0].name.split(".").pop().toLowerCase();
58
- this.validExtensions && this.validExtensions.length ? this.validExtensions.includes(o) ? this.uploadOrReplaceFile({ file: l.target.files[0] }) : console.log("Wrong filetype") : (this.error = "", this.uploadOrReplaceFile({ file: l.target.files[0] }));
57
+ validateFile(t) {
58
+ const r = "." + t.target.files[0].name.split(".").pop().toLowerCase();
59
+ this.validExtensions && this.validExtensions.length ? this.validExtensions.includes(r) ? this.uploadOrReplaceFile({ file: t.target.files[0] }) : console.log("Wrong filetype") : (this.error = "", this.uploadOrReplaceFile({ file: t.target.files[0] }));
59
60
  },
60
61
  async saveUrl() {
61
62
  this.URLValue.includes("http://") || this.URLValue.includes("https://") ? await this.context.node.input({ "@id": this.URLValue, mode: this.inputChoice }) : await this.context.node.input({ "@id": "https://" + this.URLValue, mode: this.inputChoice });
@@ -65,8 +66,8 @@ const H = {
65
66
  return this.URLValue = this.context.value["@id"], !0;
66
67
  },
67
68
  // finds the parent input group of a given element.
68
- findParentInputGroupOfElement(l) {
69
- let e = l;
69
+ findParentInputGroupOfElement(t) {
70
+ let e = t;
70
71
  for (; e; ) {
71
72
  if (e.classList.contains("formkit-input-group-repeatable"))
72
73
  return e;
@@ -76,47 +77,47 @@ const H = {
76
77
  },
77
78
  // finds the index of the distribution access URL based on the root of this component.
78
79
  findDistributionAccessUrlIndex() {
79
- const l = this.$refs.fileupload, e = this.findParentInputGroupOfElement(l);
80
+ const t = this.$refs.fileupload, e = this.findParentInputGroupOfElement(t);
80
81
  if (!e)
81
82
  return null;
82
- const s = e.parentElement.querySelectorAll(".formkit-input-group-repeatable");
83
- return Array.from(s).indexOf(e);
83
+ const d = e.parentElement.querySelectorAll(".formkit-input-group-repeatable");
84
+ return Array.from(d).indexOf(e);
84
85
  },
85
- async uploadOrReplaceFile({ file: l }) {
86
- var s, t, d, c, i, f, v;
87
- const e = ((d = (t = (s = this.$env) == null ? void 0 : s.content) == null ? void 0 : t.dataProviderInterface) == null ? void 0 : d.enableFileUploadReplace) || !1, o = ((c = this.$route.query) == null ? void 0 : c.edit) ?? !1;
88
- if (e && o) {
89
- const w = (i = this.$route.query) == null ? void 0 : i.edit, I = this.findDistributionAccessUrlIndex(), h = (f = this.getData("distributions")) == null ? void 0 : f[w], g = (v = h == null ? void 0 : h["dcat:accessURL"]) == null ? void 0 : v[I], U = g == null ? void 0 : g["@id"];
86
+ async uploadOrReplaceFile({ file: t }) {
87
+ var d, f, a, p, i, m, g;
88
+ const e = ((a = (f = (d = this.$env) == null ? void 0 : d.content) == null ? void 0 : f.dataProviderInterface) == null ? void 0 : a.enableFileUploadReplace) || !1, r = ((p = this.$route.query) == null ? void 0 : p.edit) ?? !1;
89
+ if (e && r) {
90
+ const w = (i = this.$route.query) == null ? void 0 : i.edit, b = this.findDistributionAccessUrlIndex(), h = (m = this.getData("distributions")) == null ? void 0 : m[w], v = (g = h == null ? void 0 : h["dcat:accessURL"]) == null ? void 0 : g[b], U = v == null ? void 0 : v["@id"];
90
91
  if (U) {
91
- const R = this.$env.api.fileUploadUrl, F = V.getFileIdByAccessUrl({ accessUrl: U, fileUploadUrl: R });
92
- return await this.uploadFile(l, {
92
+ const k = this.$env.api.fileUploadUrl, R = V.getFileIdByAccessUrl({ accessUrl: U, fileUploadUrl: k });
93
+ return await this.uploadFile(t, {
93
94
  method: "PUT",
94
- url: `${this.$env.api.fileUploadUrl}data/${F}?catalog=${this.getCatalogue}`
95
+ url: `${this.$env.api.fileUploadUrl}data/${R}?catalog=${this.catalogId}`
95
96
  });
96
97
  }
97
98
  }
98
- return await this.uploadFile(l);
99
+ return await this.uploadFile(t);
99
100
  },
100
- async uploadFile(l, e = {}) {
101
+ async uploadFile(t, e = {}) {
101
102
  this.isLoading = !0;
102
- const o = new FormData();
103
- o.append("file", l);
104
- const s = this.getCatalogue, t = this.getUserData.rtpToken, d = {
103
+ const r = new FormData();
104
+ r.append("file", t);
105
+ const d = this.catalogId, f = this.getUserData.rtpToken, a = {
105
106
  method: "POST",
106
- url: `${this.$env.api.fileUploadUrl}data?catalog=${s}`,
107
+ url: `${this.$env.api.fileUploadUrl}data?catalog=${d}`,
107
108
  ...e
108
- }, c = {
109
- method: d.method,
110
- url: d.url,
109
+ }, p = {
110
+ method: a.method,
111
+ url: a.url,
111
112
  headers: {
112
113
  "Content-Type": "multipart/form-data",
113
- Authorization: `Bearer ${t}`
114
+ Authorization: `Bearer ${f}`
114
115
  },
115
- data: o
116
+ data: r
116
117
  };
117
118
  try {
118
- const i = await C.request(c), f = i.data.result.location.substring(i.data.result.location.indexOf("/") + 1);
119
- this.context.model = `${this.$env.api.fileUploadUrl}${f}`, this.isLoading = !1, this.success = !0, await this.context.node.input({ "@id": `${this.$env.api.fileUploadUrl}${f}` });
119
+ const i = await C.request(p), m = i.data.result.location.substring(i.data.result.location.indexOf("/") + 1);
120
+ this.context.model = `${this.$env.api.fileUploadUrl}${m}`, this.isLoading = !1, this.success = !0, await this.context.node.input({ "@id": `${this.$env.api.fileUploadUrl}${m}` });
120
121
  } catch (i) {
121
122
  this.isLoading = !1, this.fail = !0, console.error(i);
122
123
  }
@@ -129,163 +130,174 @@ const H = {
129
130
  });
130
131
  },
131
132
  setup() {
132
- const { t: l } = N();
133
- D();
133
+ const { t } = N();
134
+ x();
134
135
  var e = O({
135
136
  active: !1
136
137
  });
137
- const o = S("fload");
138
- k(o, (t) => {
138
+ const r = S("fload");
139
+ $(r, (i) => {
139
140
  e.active = !1;
140
141
  });
141
- function s(t) {
142
+ function d(i) {
142
143
  e.active = !e.active;
143
144
  }
145
+ const f = H(), a = B("catalog"), p = A(
146
+ () => {
147
+ var i;
148
+ return (
149
+ // Extract from catalog input field
150
+ (a == null ? void 0 : a.value.value) || ((i = f.value.edit) == null ? void 0 : i.catalog)
151
+ );
152
+ }
153
+ );
144
154
  return {
145
155
  drop: e,
146
- onClickOutside: k,
147
- triggerDropdown: s,
148
- t: l
156
+ onClickOutside: $,
157
+ triggerDropdown: d,
158
+ t,
159
+ catalogId: p
149
160
  };
150
161
  }
151
- }, K = { class: "position-relative w-100" }, M = {
162
+ }), W = { class: "position-relative w-100" }, j = {
152
163
  key: 0,
153
164
  ref: "fLoad",
154
165
  class: "selectListUpload fileuploadList"
155
- }, W = {
166
+ }, z = {
156
167
  key: 0,
157
168
  class: "w-100 position-relative"
158
- }, j = ["data-type"], z = { class: "file-div position-relative" }, J = ["accept"], Q = {
169
+ }, J = ["data-type"], Q = { class: "file-div position-relative" }, X = ["accept", "disabled"], Y = {
159
170
  class: "upload-feedback position-absolute d-flex",
160
171
  style: { right: "0" }
161
- }, X = {
172
+ }, Z = {
162
173
  key: 0,
163
174
  class: "lds-ring"
164
- }, Y = { key: 1 }, Z = { key: 2 }, _ = {
175
+ }, _ = { key: 1 }, ee = { key: 2 }, te = {
165
176
  key: 0,
166
177
  class: "dURLText my-3"
167
- }, $ = ["href"], ee = {
178
+ }, ie = ["href"], oe = {
168
179
  key: 1,
169
180
  class: "allowedTypesWrapper"
170
- }, te = {
181
+ }, le = {
171
182
  key: 0,
172
183
  class: "errorSub my-3 d-flex"
173
- }, ie = { class: "d-flex flex-wrap w-100" };
174
- function le(l, e, o, s, t, d) {
175
- const c = A("FormKit");
176
- return a(), n(y, null, [
177
- u("div", K, [
178
- L(c, {
184
+ }, se = { class: "d-flex flex-wrap w-100" };
185
+ function ae(t, e, r, d, f, a) {
186
+ const p = T("FormKit");
187
+ return o(), l(L, null, [
188
+ n("div", W, [
189
+ I(p, {
179
190
  name: "mode",
180
191
  validation: "required",
181
192
  type: "text",
182
193
  class: "selectInputField formkit-inner",
183
194
  readonly: "readonly",
184
- onClick: e[0] || (e[0] = (i) => s.triggerDropdown()),
185
- placeholder: s.t("message.dataupload.info.preferredInput"),
195
+ onClick: e[0] || (e[0] = (i) => t.triggerDropdown()),
196
+ placeholder: t.t("message.dataupload.info.preferredInput"),
186
197
  modelValue: t.inputChoice,
187
198
  "onUpdate:modelValue": e[1] || (e[1] = (i) => t.inputChoice = i),
188
199
  "validation-messages": {
189
- required: s.t("message.dataupload.info.preferredInput")
200
+ required: t.t("message.dataupload.info.preferredInput")
190
201
  }
191
202
  }, null, 8, ["placeholder", "modelValue", "validation-messages"]),
192
- e[9] || (e[9] = r()),
193
- s.drop.active ? (a(), n("ul", M, [
194
- u("li", {
203
+ e[9] || (e[9] = s()),
204
+ t.drop.active ? (o(), l("ul", j, [
205
+ n("li", {
195
206
  onClick: e[2] || (e[2] = (i) => {
196
- t.uploadFileSwitch = !0, d.toggleUploadUrl();
207
+ t.uploadFileSwitch = !0, t.toggleUploadUrl();
197
208
  }),
198
209
  class: "p-2 border-b border-gray-200 data-[selected=true]:bg-blue-100 choosableItemsAC"
199
- }, m(l.$t("message.dataupload.datasets.conditional.fileupload")), 1),
200
- e[8] || (e[8] = r()),
201
- u("li", {
210
+ }, c(t.$t("message.dataupload.datasets.conditional.fileupload")), 1),
211
+ e[8] || (e[8] = s()),
212
+ n("li", {
202
213
  onClick: e[3] || (e[3] = (i) => {
203
- t.uploadURL = !0, d.toggleUploadFileSwitch();
214
+ t.uploadURL = !0, t.toggleUploadFileSwitch();
204
215
  }),
205
216
  class: "p-2 border-b border-gray-200 data-[selected=true]:bg-blue-100 choosableItemsAC"
206
- }, m(l.$t("message.dataupload.datasets.conditional.URL")), 1)
207
- ], 512)) : p("", !0)
217
+ }, c(t.$t("message.dataupload.datasets.conditional.URL")), 1)
218
+ ], 512)) : u("", !0)
208
219
  ]),
209
- e[19] || (e[19] = r()),
210
- t.uploadURL && !t.uploadFileSwitch ? (a(), n("div", W, [
211
- L(c, {
220
+ e[19] || (e[19] = s()),
221
+ t.uploadURL && !t.uploadFileSwitch ? (o(), l("div", z, [
222
+ I(p, {
212
223
  id: "aUrlLink",
213
224
  modelValue: t.URLValue,
214
225
  "onUpdate:modelValue": e[4] || (e[4] = (i) => t.URLValue = i),
215
226
  class: "selectInputField formkit-inner",
216
227
  type: "url",
217
228
  name: "@id",
218
- placeholder: o.context.attrs.placeholder,
219
- onInput: d.saveUrl,
229
+ placeholder: t.context.attrs.placeholder,
230
+ onInput: t.saveUrl,
220
231
  validation: "required|url",
221
232
  "validation-visibility": "live",
222
233
  "validation-messages": {
223
- required: s.t("message.dataupload.datasets.conditional.URL"),
224
- url: s.t("message.dataupload.info.urlFormat")
234
+ required: t.t("message.dataupload.datasets.conditional.URL"),
235
+ url: t.t("message.dataupload.info.urlFormat")
225
236
  }
226
237
  }, null, 8, ["modelValue", "placeholder", "onInput", "validation-messages"])
227
- ])) : p("", !0),
228
- e[20] || (e[20] = r()),
229
- t.uploadFileSwitch ? (a(), n("div", T({
238
+ ])) : u("", !0),
239
+ e[20] || (e[20] = s()),
240
+ t.uploadFileSwitch ? (o(), l("div", D({
230
241
  key: 1,
231
242
  ref: "fileupload",
232
- class: ["p-3 w-100", `formkit-input-element formkit-input-element--${o.context.type}`],
233
- "data-type": o.context.type
234
- }, l.$attrs), [
235
- G(u("input", {
243
+ class: ["p-3 w-100", `formkit-input-element formkit-input-element--${t.context.type}`],
244
+ "data-type": t.context.type
245
+ }, t.$attrs), [
246
+ G(n("input", {
236
247
  type: "text",
237
- "onUpdate:modelValue": e[5] || (e[5] = (i) => o.context.model = i),
238
- onBlur: e[6] || (e[6] = (...i) => o.context.blurHandler && o.context.blurHandler(...i)),
248
+ "onUpdate:modelValue": e[5] || (e[5] = (i) => t.context.model = i),
249
+ onBlur: e[6] || (e[6] = (...i) => t.context.blurHandler && t.context.blurHandler(...i)),
239
250
  hidden: ""
240
251
  }, null, 544), [
241
- [P, o.context.model]
252
+ [P, t.context.model]
242
253
  ]),
243
- e[16] || (e[16] = r()),
244
- u("div", z, [
245
- u("input", {
254
+ e[16] || (e[16] = s()),
255
+ n("div", Q, [
256
+ n("input", {
246
257
  class: "mt-3",
247
258
  type: "file",
248
259
  id: "aUrlFL",
249
260
  name: "fileUpload",
250
- onChange: e[7] || (e[7] = (i) => d.validateFile(i)),
251
- accept: t.validExtensions
252
- }, null, 40, J),
253
- e[14] || (e[14] = r()),
254
- u("div", Q, [
255
- t.isLoading ? (a(), n("div", X)) : p("", !0),
256
- e[12] || (e[12] = r()),
257
- t.success ? (a(), n("div", Y, e[10] || (e[10] = [
258
- u("i", { class: "material-icons d-flex check-icon" }, "check_circle", -1)
259
- ]))) : p("", !0),
260
- e[13] || (e[13] = r()),
261
- t.fail ? (a(), n("div", Z, e[11] || (e[11] = [
262
- u("i", { class: "material-icons d-flex close-icon" }, "error", -1)
263
- ]))) : p("", !0)
261
+ onChange: e[7] || (e[7] = (i) => t.validateFile(i)),
262
+ accept: t.validExtensions,
263
+ disabled: t.isLoading || !t.catalogId
264
+ }, null, 40, X),
265
+ e[14] || (e[14] = s()),
266
+ n("div", Y, [
267
+ t.isLoading ? (o(), l("div", Z)) : u("", !0),
268
+ e[12] || (e[12] = s()),
269
+ t.success ? (o(), l("div", _, e[10] || (e[10] = [
270
+ n("i", { class: "material-icons d-flex check-icon" }, "check_circle", -1)
271
+ ]))) : u("", !0),
272
+ e[13] || (e[13] = s()),
273
+ t.fail ? (o(), l("div", ee, e[11] || (e[11] = [
274
+ n("i", { class: "material-icons d-flex close-icon" }, "error", -1)
275
+ ]))) : u("", !0)
264
276
  ])
265
277
  ]),
266
- e[17] || (e[17] = r()),
267
- t.success ? (a(), n("p", _, [
268
- r(m(l.$t("message.metadata.downloadUrl")) + ": ", 1),
269
- u("a", {
270
- href: o.context.model
271
- }, m(o.context.model), 9, $)
272
- ])) : p("", !0),
273
- e[18] || (e[18] = r()),
274
- t.validExtensions && t.validExtensions.length ? (a(), n("div", ee, [
275
- t.success ? p("", !0) : (a(), n("p", te, "Allowed types: ")),
276
- e[15] || (e[15] = r()),
277
- u("div", ie, [
278
- (a(!0), n(y, null, q(t.validExtensions, (i) => (a(), n("span", {
278
+ e[17] || (e[17] = s()),
279
+ t.success ? (o(), l("p", te, [
280
+ s(c(t.$t("message.metadata.downloadUrl")) + ": ", 1),
281
+ n("a", {
282
+ href: t.context.model
283
+ }, c(t.context.model), 9, ie)
284
+ ])) : u("", !0),
285
+ e[18] || (e[18] = s()),
286
+ t.validExtensions && t.validExtensions.length ? (o(), l("div", oe, [
287
+ t.success ? u("", !0) : (o(), l("p", le, "Allowed types: ")),
288
+ e[15] || (e[15] = s()),
289
+ n("div", se, [
290
+ (o(!0), l(L, null, q(t.validExtensions, (i) => (o(), l("span", {
279
291
  key: i,
280
292
  class: "mr-1 mb-1 allowedFTypes"
281
- }, m(i), 1))), 128))
293
+ }, c(i), 1))), 128))
282
294
  ])
283
- ])) : p("", !0)
284
- ], 16, j)) : p("", !0)
295
+ ])) : u("", !0)
296
+ ], 16, J)) : u("", !0)
285
297
  ], 64);
286
298
  }
287
- const he = /* @__PURE__ */ B(H, [["render", le], ["__scopeId", "data-v-a011305e"]]);
299
+ const $e = /* @__PURE__ */ K(M, [["render", ae], ["__scopeId", "data-v-79a163c0"]]);
288
300
  export {
289
- he as default
301
+ $e as default
290
302
  };
291
303
  //# sourceMappingURL=FileUpload.vue.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"FileUpload.vue.mjs","sources":["../../../lib/data-provider-interface/components/FileUpload.vue"],"sourcesContent":["<template>\n\n <div class=\"position-relative w-100 \">\n <FormKit name=\"mode\" validation=\"required\" type=\"text\" class=\"selectInputField formkit-inner \" readonly=\"readonly\"\n @click=\"triggerDropdown()\" :placeholder=\"t('message.dataupload.info.preferredInput')\" v-model=\"inputChoice\" :validation-messages=\"{\n required: t('message.dataupload.info.preferredInput'),\n }\" />\n <ul ref=\"fLoad\" v-if=\"drop.active\" class=\"selectListUpload fileuploadList\">\n <li @click=\"uploadFileSwitch = true; toggleUploadUrl()\"\n class=\"p-2 border-b border-gray-200 data-[selected=true]:bg-blue-100 choosableItemsAC\">{{$t('message.dataupload.datasets.conditional.fileupload')}}</li>\n <li @click=\"uploadURL = true; toggleUploadFileSwitch()\"\n class=\"p-2 border-b border-gray-200 data-[selected=true]:bg-blue-100 choosableItemsAC\">{{$t('message.dataupload.datasets.conditional.URL')}}</li>\n </ul>\n </div>\n <div class=\"w-100 position-relative\" v-if=\"uploadURL && !uploadFileSwitch\">\n\n <FormKit id=\"aUrlLink\" v-model=\"URLValue\" class=\"selectInputField formkit-inner\" type=\"url\" name=\"@id\" :placeholder=\"context.attrs.placeholder\"\n @input=\"saveUrl\" validation=\"required|url\" validation-visibility=\"live\" :validation-messages=\"{\n required: t('message.dataupload.datasets.conditional.URL'),\n url: t('message.dataupload.info.urlFormat')\n }\" />\n\n </div>\n <div v-if=\"uploadFileSwitch\" ref=\"fileupload\" class=\"p-3 w-100\"\n :class=\"`formkit-input-element formkit-input-element--${context.type}`\" :data-type=\"context.type\" v-bind=\"$attrs\">\n <input type=\"text\" v-model=\"context.model\" @blur=\"context.blurHandler\" hidden />\n <div class=\"file-div position-relative\">\n <input class=\"mt-3\" type=\"file\" id=\"aUrlFL\" name=\"fileUpload\" @change=\"validateFile($event)\"\n :accept=\"validExtensions\">\n <div class=\"upload-feedback position-absolute d-flex\" style=\"right: 0\">\n <div v-if=\"isLoading\" class=\"lds-ring\">\n </div>\n <div v-if=\"success\"><i class=\"material-icons d-flex check-icon\">check_circle</i></div>\n <div v-if=\"fail\"><i class=\"material-icons d-flex close-icon\">error</i></div>\n </div>\n </div>\n <p class=\"dURLText my-3\" v-if=\"success\">{{ $t('message.metadata.downloadUrl') }}: <a :href=\"context.model\">{{\n context.model }}</a></p>\n <div v-if=\"validExtensions && validExtensions.length\" class=\"allowedTypesWrapper\">\n <p class=\"errorSub my-3 d-flex \" v-if=\"!success\">Allowed types: </p>\n <div class=\"d-flex flex-wrap w-100\">\n <span v-for=\"types in validExtensions\" :key=\"types\" class=\"mr-1 mb-1 allowedFTypes \">\n {{ types }}\n </span>\n </div>\n\n </div>\n\n\n </div>\n\n</template>\n\n<script>\n/* eslint-disable consistent-return, no-unused-vars */\nimport { mapGetters, mapActions } from 'vuex';\nimport axios from 'axios';\nimport helper from '../utils/general-helper'\nimport { getNode } from '@formkit/core'\n\nimport { reactive, ref, onMounted, computed } from 'vue';\nimport { onClickOutside } from '@vueuse/core'\nimport { useRuntimeEnv } from \"../../composables/useRuntimeEnv.ts\";\nimport { FormKit } from '@formkit/vue';\nimport { useI18n } from 'vue-i18n';\n\nexport default {\n props: {\n context: {\n type: Object,\n required: true,\n },\n },\n\n data() {\n return {\n inputChoice: '',\n error: '',\n URLValue: '',\n uploadURL: false,\n uploadFileSwitch: false,\n checkifSet: false,\n isLoading: false,\n success: false,\n fail: false,\n \n validExtensions: this.$env.content.dataProviderInterface.uploadFileTypes?.split(',') || []\n };\n },\n computed: {\n\n ...mapGetters('auth', [\n 'getUserData',\n 'getIsEditMode'\n ]),\n ...mapGetters('dpiStore', [\n 'getData',\n ]),\n getCatalogue() {\n return getNode('dcat:catalog').value;\n }\n },\n methods: {\n ...mapActions('dpiStore', [\n 'saveLocalstorageValues',\n ]),\n toggleUploadUrl() {\n this.inputChoice = this.t('message.dataupload.datasets.conditional.fileupload')\n if (this.uploadURL) { this.uploadURL = !this.uploadURL }\n },\n toggleUploadFileSwitch() {\n this.inputChoice = this.t('message.dataupload.datasets.conditional.URL')\n if (this.uploadFileSwitch) { this.uploadFileSwitch = !this.uploadFileSwitch }\n },\n validateFile(event) {\n const file = event.target.files[0];\n const fileExtension = '.' + file.name.split('.').pop().toLowerCase();\n if (this.validExtensions && this.validExtensions.length) {\n if (!this.validExtensions.includes(fileExtension)) {\n console.log('Wrong filetype');\n } else {\n this.uploadOrReplaceFile({ file: event.target.files[0] })\n }\n } else {\n this.error = \"\"\n this.uploadOrReplaceFile({ file: event.target.files[0] })\n }\n },\n async saveUrl() {\n\n if (this.URLValue.includes('http://') || this.URLValue.includes('https://')) {\n await this.context.node.input({ '@id': this.URLValue, 'mode': this.inputChoice })\n }\n else await this.context.node.input({ '@id': 'https://' + this.URLValue, 'mode': this.inputChoice })\n\n },\n checkIfPresent() {\n // console.log(this.context.value['@id']);\n if (this.context.value['@id']) {\n // console.log(this.context.value['@id']);\n this.URLValue = this.context.value['@id']\n return true\n }\n else false\n },\n // finds the parent input group of a given element.\n findParentInputGroupOfElement(element) {\n // Start with the given element.\n let currentElement = element;\n\n // Traverse the DOM tree upwards.\n while (currentElement) {\n // If the current element is an input group, return it.\n if (currentElement.classList.contains('formkit-input-group-repeatable')) {\n return currentElement;\n }\n // If not, move to the parent element.\n currentElement = currentElement.parentElement;\n }\n\n // If no input group was found, return null.\n return null;\n },\n // finds the index of the distribution access URL based on the root of this component.\n findDistributionAccessUrlIndex() {\n // todo: find a more stable way to find the index of the distribution access URL.\n // this way uses the DOM tree, which is not stable.\n\n // Start at the root of this component.\n const rootElement = this.$refs.fileupload;\n\n // Find the parent input group of the root element.\n const parentInputGroup = this.findParentInputGroupOfElement(rootElement);\n if (!parentInputGroup) return null;\n\n // Get the parent element of all input groups.\n const parentOfAllInputGroups = parentInputGroup.parentElement;\n const allInputGroupsNodeList = parentOfAllInputGroups.querySelectorAll('.formkit-input-group-repeatable');\n const allInputGroupsArray = Array.from(allInputGroupsNodeList);\n\n // Find the index of the parent input group within the array of all input groups.\n const indexOfParentInputGroup = allInputGroupsArray.indexOf(parentInputGroup);\n\n return indexOfParentInputGroup;\n },\n async uploadOrReplaceFile({ file }) {\n\n const replaceEnabled = this.$env?.content?.dataProviderInterface?.enableFileUploadReplace || false;\n const wantsToReplace = this.$route.query?.edit ?? false;\n\n if (replaceEnabled && wantsToReplace) {\n const distributionIndexToReplace = this.$route.query?.edit;\n const fileIndexToReplace = this.findDistributionAccessUrlIndex();\n\n const targetDistribution = this.getData('distributions')?.[distributionIndexToReplace];\n const targetFile = targetDistribution?.['dcat:accessURL']?.[fileIndexToReplace];\n const accessUrl = targetFile?.['@id'];\n if (accessUrl) {\n const fileUploadUrl = this.$env.api.fileUploadUrl;\n\n const fileId = helper.getFileIdByAccessUrl({ accessUrl, fileUploadUrl })\n\n return await this.uploadFile(file, {\n method: 'PUT',\n url: `${this.$env.api.fileUploadUrl}data/${fileId}?catalog=${this.getCatalogue}`,\n });\n }\n\n }\n\n return await this.uploadFile(file);\n },\n async uploadFile(file, options = {}) {\n\n this.isLoading = true;\n\n const form = new FormData();\n form.append('file', file);\n\n const catalog = this.getCatalogue;\n const token = this.getUserData.rtpToken;\n\n const resolvedOptions = {\n method: 'POST',\n url: `${this.$env.api.fileUploadUrl}data?catalog=${catalog}`,\n ...options,\n };\n\n const requestOptions = {\n method: resolvedOptions.method,\n url: resolvedOptions.url,\n headers: {\n 'Content-Type': 'multipart/form-data',\n Authorization: `Bearer ${token}`,\n },\n data: form,\n };\n\n try {\n\n const result = await axios.request(requestOptions);\n const path = result.data.result.location.substring(result.data.result.location.indexOf('/') + 1);\n this.context.model = `${this.$env.api.fileUploadUrl}${path}`;\n this.isLoading = false;\n this.success = true;\n await this.context.node.input({ '@id': `${this.$env.api.fileUploadUrl}${path}` })\n // this.context.rootEmit('change');\n\n } catch (err) {\n\n this.isLoading = false;\n this.fail = true;\n console.error(err); // eslint-disable-line\n }\n },\n },\n mounted() {\n\n this.$nextTick(function () {\n\n if (this.context.value['@id']) {\n this.uploadURL = true\n this.URLValue = this.context.value['@id']\n this.inputChoice = \"Provide an URL\"\n return true\n }\n else false\n })\n },\n setup() {\n const { t } = useI18n();\n const env = useRuntimeEnv();\n \n\n\n var drop = reactive({\n active: false,\n })\n\n\n const fLoad = ref('fload');\n\n onClickOutside(fLoad, event => {\n drop.active = false\n })\n function triggerDropdown(e) {\n drop.active = !drop.active\n }\n\n return {\n drop,\n onClickOutside,\n triggerDropdown,\n t\n };\n }\n};\n</script>\n\n<style lang=\"scss\" scoped>\n// @import '../../../styles/bootstrap_theme';\n// @import '../../../styles/utils/css-animations';\n.dURLText {}\n\n\n.accessUrl {\n .formkit-outer {}\n}\n\n.file-div {\n display: flex;\n align-items: center;\n}\n\n.upload-feedback {\n padding: 10px;\n}\n\n/*** MATERIAL ICONS ***/\n%modal-icon {\n font-size: 20px;\n cursor: default;\n}\n\n.check-icon {\n @extend %modal-icon;\n color: #28a745;\n}\n\n.close-icon {\n @extend %modal-icon;\n color: red;\n}\n\n.lds-ring {\n display: inline-block;\n position: relative;\n width: 30px;\n height: 30px;\n}\n\n.lds-ring div {\n box-sizing: border-box;\n display: block;\n position: absolute;\n right: 0;\n width: 30px;\n height: 30px;\n border: 8px solid lightgray;\n border-radius: 50%;\n animation: lds-ring 1.2s cubic-bezier(0.5, 0, 0.5, 1) infinite;\n border-color: lightgray transparent transparent transparent;\n}\n\n.lds-ring div:nth-child(1) {\n animation-delay: -0.45s;\n}\n\n.lds-ring div:nth-child(2) {\n animation-delay: -0.3s;\n}\n\n.lds-ring div:nth-child(3) {\n animation-delay: -0.15s;\n}\n\n.error {\n color: red;\n}\n\n.errorSub {\n color: black;\n}\n\n@keyframes lds-ring {\n 0% {\n transform: rotate(0deg);\n }\n\n 100% {\n transform: rotate(360deg);\n }\n}\n\n.allowedFTypes {\n padding: 0.5rem;\n border-radius: 5px;\n border: 1px solid lightgrey;\n}\n\n.allowedTypesWrapper {\n max-width: 100%;\n display: flex;\n flex-wrap: wrap;\n}\n\n.fileuploadList {\n width: 96.7%;\n}\n</style>\n"],"names":["_sfc_main","_a","mapGetters","getNode","mapActions","event","fileExtension","element","currentElement","rootElement","parentInputGroup","allInputGroupsNodeList","file","replaceEnabled","_c","_b","wantsToReplace","_d","distributionIndexToReplace","_e","fileIndexToReplace","targetDistribution","_f","targetFile","_g","accessUrl","fileUploadUrl","fileId","helper","options","form","catalog","token","resolvedOptions","requestOptions","result","axios","path","err","t","useI18n","useRuntimeEnv","drop","reactive","fLoad","ref","onClickOutside","triggerDropdown","e","_hoisted_1","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_12","_hoisted_15","_openBlock","_createElementBlock","_Fragment","_createElementVNode","_createVNode","_component_FormKit","$setup","$data","_cache","$event","_createTextVNode","_hoisted_2","$options","_ctx","_createCommentVNode","_hoisted_3","$props","_mergeProps","args","_vModelText","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","_toDisplayString","_hoisted_13","_hoisted_14","_renderList","types"],"mappings":"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"}
1
+ {"version":3,"file":"FileUpload.vue.mjs","sources":["../../../lib/data-provider-interface/components/FileUpload.vue"],"sourcesContent":["<template>\n <div class=\"position-relative w-100 \">\n <FormKit name=\"mode\" validation=\"required\" type=\"text\" class=\"selectInputField formkit-inner \" readonly=\"readonly\"\n @click=\"triggerDropdown()\" :placeholder=\"t('message.dataupload.info.preferredInput')\" v-model=\"inputChoice\" :validation-messages=\"{\n required: t('message.dataupload.info.preferredInput'),\n }\" />\n <ul ref=\"fLoad\" v-if=\"drop.active\" class=\"selectListUpload fileuploadList\">\n <li @click=\"uploadFileSwitch = true; toggleUploadUrl()\"\n class=\"p-2 border-b border-gray-200 data-[selected=true]:bg-blue-100 choosableItemsAC\">{{$t('message.dataupload.datasets.conditional.fileupload')}}</li>\n <li @click=\"uploadURL = true; toggleUploadFileSwitch()\"\n class=\"p-2 border-b border-gray-200 data-[selected=true]:bg-blue-100 choosableItemsAC\">{{$t('message.dataupload.datasets.conditional.URL')}}</li>\n </ul>\n </div>\n <div class=\"w-100 position-relative\" v-if=\"uploadURL && !uploadFileSwitch\">\n\n <FormKit id=\"aUrlLink\" v-model=\"URLValue\" class=\"selectInputField formkit-inner\" type=\"url\" name=\"@id\" :placeholder=\"context.attrs.placeholder\"\n @input=\"saveUrl\" validation=\"required|url\" validation-visibility=\"live\" :validation-messages=\"{\n required: t('message.dataupload.datasets.conditional.URL'),\n url: t('message.dataupload.info.urlFormat')\n }\" />\n\n </div>\n <div v-if=\"uploadFileSwitch\" ref=\"fileupload\" class=\"p-3 w-100\"\n :class=\"`formkit-input-element formkit-input-element--${context.type}`\" :data-type=\"context.type\" v-bind=\"$attrs\">\n <input type=\"text\" v-model=\"context.model\" @blur=\"context.blurHandler\" hidden />\n <div class=\"file-div position-relative\">\n <input class=\"mt-3\" type=\"file\" id=\"aUrlFL\" name=\"fileUpload\" @change=\"validateFile($event)\"\n :accept=\"validExtensions\" :disabled=\"isLoading || !catalogId\">\n <div class=\"upload-feedback position-absolute d-flex\" style=\"right: 0\">\n <div v-if=\"isLoading\" class=\"lds-ring\">\n </div>\n <div v-if=\"success\"><i class=\"material-icons d-flex check-icon\">check_circle</i></div>\n <div v-if=\"fail\"><i class=\"material-icons d-flex close-icon\">error</i></div>\n </div>\n </div>\n <p class=\"dURLText my-3\" v-if=\"success\">{{ $t('message.metadata.downloadUrl') }}: <a :href=\"context.model\">{{\n context.model }}</a></p>\n <div v-if=\"validExtensions && validExtensions.length\" class=\"allowedTypesWrapper\">\n <p class=\"errorSub my-3 d-flex \" v-if=\"!success\">Allowed types: </p>\n <div class=\"d-flex flex-wrap w-100\">\n <span v-for=\"types in validExtensions\" :key=\"types\" class=\"mr-1 mb-1 allowedFTypes \">\n {{ types }}\n </span>\n </div>\n\n </div>\n\n\n </div>\n\n</template>\n\n<script>\n/* eslint-disable consistent-return, no-unused-vars */\nimport { mapGetters, mapActions } from 'vuex';\nimport axios from 'axios';\nimport helper from '../utils/general-helper'\nimport { getNode } from '@formkit/core'\n\nimport { reactive, ref, onMounted, computed, defineComponent } from 'vue';\nimport { onClickOutside } from '@vueuse/core'\nimport { useRuntimeEnv } from \"../../composables/useRuntimeEnv.ts\";\nimport { FormKit, useFormKitNodeById } from '@formkit/vue';\nimport { useI18n } from 'vue-i18n';\nimport { useDpiContext } from '../composables';\n\nexport default defineComponent({\n props: {\n context: {\n type: Object,\n required: true,\n },\n },\n\n data() {\n return {\n inputChoice: '',\n error: '',\n URLValue: '',\n uploadURL: false,\n uploadFileSwitch: false,\n checkifSet: false,\n isLoading: false,\n success: false,\n fail: false,\n \n validExtensions: this.$env.content.dataProviderInterface.uploadFileTypes?.split(',') || []\n };\n },\n computed: {\n\n ...mapGetters('auth', [\n 'getUserData',\n 'getIsEditMode'\n ]),\n ...mapGetters('dpiStore', [\n 'getData',\n ]),\n },\n methods: {\n ...mapActions('dpiStore', [\n 'saveLocalstorageValues',\n ]),\n toggleUploadUrl() {\n this.inputChoice = this.t('message.dataupload.datasets.conditional.fileupload')\n if (this.uploadURL) { this.uploadURL = !this.uploadURL }\n },\n toggleUploadFileSwitch() {\n this.inputChoice = this.t('message.dataupload.datasets.conditional.URL')\n if (this.uploadFileSwitch) { this.uploadFileSwitch = !this.uploadFileSwitch }\n },\n validateFile(event) {\n const file = event.target.files[0];\n const fileExtension = '.' + file.name.split('.').pop().toLowerCase();\n if (this.validExtensions && this.validExtensions.length) {\n if (!this.validExtensions.includes(fileExtension)) {\n console.log('Wrong filetype');\n } else {\n this.uploadOrReplaceFile({ file: event.target.files[0] })\n }\n } else {\n this.error = \"\"\n this.uploadOrReplaceFile({ file: event.target.files[0] })\n }\n },\n async saveUrl() {\n\n if (this.URLValue.includes('http://') || this.URLValue.includes('https://')) {\n await this.context.node.input({ '@id': this.URLValue, 'mode': this.inputChoice })\n }\n else await this.context.node.input({ '@id': 'https://' + this.URLValue, 'mode': this.inputChoice })\n\n },\n checkIfPresent() {\n // console.log(this.context.value['@id']);\n if (this.context.value['@id']) {\n // console.log(this.context.value['@id']);\n this.URLValue = this.context.value['@id']\n return true\n }\n else false\n },\n // finds the parent input group of a given element.\n findParentInputGroupOfElement(element) {\n // Start with the given element.\n let currentElement = element;\n\n // Traverse the DOM tree upwards.\n while (currentElement) {\n // If the current element is an input group, return it.\n if (currentElement.classList.contains('formkit-input-group-repeatable')) {\n return currentElement;\n }\n // If not, move to the parent element.\n currentElement = currentElement.parentElement;\n }\n\n // If no input group was found, return null.\n return null;\n },\n // finds the index of the distribution access URL based on the root of this component.\n findDistributionAccessUrlIndex() {\n // todo: find a more stable way to find the index of the distribution access URL.\n // this way uses the DOM tree, which is not stable.\n\n // Start at the root of this component.\n const rootElement = this.$refs.fileupload;\n\n // Find the parent input group of the root element.\n const parentInputGroup = this.findParentInputGroupOfElement(rootElement);\n if (!parentInputGroup) return null;\n\n // Get the parent element of all input groups.\n const parentOfAllInputGroups = parentInputGroup.parentElement;\n const allInputGroupsNodeList = parentOfAllInputGroups.querySelectorAll('.formkit-input-group-repeatable');\n const allInputGroupsArray = Array.from(allInputGroupsNodeList);\n\n // Find the index of the parent input group within the array of all input groups.\n const indexOfParentInputGroup = allInputGroupsArray.indexOf(parentInputGroup);\n\n return indexOfParentInputGroup;\n },\n async uploadOrReplaceFile({ file }) {\n\n const replaceEnabled = this.$env?.content?.dataProviderInterface?.enableFileUploadReplace || false;\n const wantsToReplace = this.$route.query?.edit ?? false;\n\n if (replaceEnabled && wantsToReplace) {\n const distributionIndexToReplace = this.$route.query?.edit;\n const fileIndexToReplace = this.findDistributionAccessUrlIndex();\n\n const targetDistribution = this.getData('distributions')?.[distributionIndexToReplace];\n const targetFile = targetDistribution?.['dcat:accessURL']?.[fileIndexToReplace];\n const accessUrl = targetFile?.['@id'];\n if (accessUrl) {\n const fileUploadUrl = this.$env.api.fileUploadUrl;\n\n const fileId = helper.getFileIdByAccessUrl({ accessUrl, fileUploadUrl })\n\n return await this.uploadFile(file, {\n method: 'PUT',\n url: `${this.$env.api.fileUploadUrl}data/${fileId}?catalog=${this.catalogId}`,\n });\n }\n\n }\n\n return await this.uploadFile(file);\n },\n async uploadFile(file, options = {}) {\n\n this.isLoading = true;\n\n const form = new FormData();\n form.append('file', file);\n\n const catalog = this.catalogId;\n const token = this.getUserData.rtpToken;\n\n const resolvedOptions = {\n method: 'POST',\n url: `${this.$env.api.fileUploadUrl}data?catalog=${catalog}`,\n ...options,\n };\n\n const requestOptions = {\n method: resolvedOptions.method,\n url: resolvedOptions.url,\n headers: {\n 'Content-Type': 'multipart/form-data',\n Authorization: `Bearer ${token}`,\n },\n data: form,\n };\n\n try {\n\n const result = await axios.request(requestOptions);\n const path = result.data.result.location.substring(result.data.result.location.indexOf('/') + 1);\n this.context.model = `${this.$env.api.fileUploadUrl}${path}`;\n this.isLoading = false;\n this.success = true;\n await this.context.node.input({ '@id': `${this.$env.api.fileUploadUrl}${path}` })\n // this.context.rootEmit('change');\n\n } catch (err) {\n\n this.isLoading = false;\n this.fail = true;\n console.error(err); // eslint-disable-line\n }\n },\n },\n mounted() {\n\n this.$nextTick(function () {\n\n if (this.context.value['@id']) {\n this.uploadURL = true\n this.URLValue = this.context.value['@id']\n this.inputChoice = \"Provide an URL\"\n return true\n }\n else false\n })\n },\n setup() {\n const { t } = useI18n();\n const env = useRuntimeEnv();\n \n\n\n var drop = reactive({\n active: false,\n })\n\n\n const fLoad = ref('fload');\n\n onClickOutside(fLoad, event => {\n drop.active = false\n })\n function triggerDropdown(e) {\n drop.active = !drop.active\n }\n\n const dpiContext = useDpiContext();\n\n const catalogIdFromFormkit = useFormKitNodeById('catalog')\n\n const catalogId = computed(() =>\n // Extract from catalog input field\n catalogIdFromFormkit?.value.value\n // Try to recover if catalog is empty for some reason\n || dpiContext.value.edit?.catalog \n );\n\n return {\n drop,\n onClickOutside,\n triggerDropdown,\n t,\n catalogId,\n };\n },\n});\n</script>\n\n<style lang=\"scss\" scoped>\n// @import '../../../styles/bootstrap_theme';\n// @import '../../../styles/utils/css-animations';\n.dURLText {}\n\n\n.accessUrl {\n .formkit-outer {}\n}\n\n.file-div {\n display: flex;\n align-items: center;\n}\n\n.upload-feedback {\n padding: 10px;\n}\n\n/*** MATERIAL ICONS ***/\n%modal-icon {\n font-size: 20px;\n cursor: default;\n}\n\n.check-icon {\n @extend %modal-icon;\n color: #28a745;\n}\n\n.close-icon {\n @extend %modal-icon;\n color: red;\n}\n\n.lds-ring {\n display: inline-block;\n position: relative;\n width: 30px;\n height: 30px;\n}\n\n.lds-ring div {\n box-sizing: border-box;\n display: block;\n position: absolute;\n right: 0;\n width: 30px;\n height: 30px;\n border: 8px solid lightgray;\n border-radius: 50%;\n animation: lds-ring 1.2s cubic-bezier(0.5, 0, 0.5, 1) infinite;\n border-color: lightgray transparent transparent transparent;\n}\n\n.lds-ring div:nth-child(1) {\n animation-delay: -0.45s;\n}\n\n.lds-ring div:nth-child(2) {\n animation-delay: -0.3s;\n}\n\n.lds-ring div:nth-child(3) {\n animation-delay: -0.15s;\n}\n\n.error {\n color: red;\n}\n\n.errorSub {\n color: black;\n}\n\n@keyframes lds-ring {\n 0% {\n transform: rotate(0deg);\n }\n\n 100% {\n transform: rotate(360deg);\n }\n}\n\n.allowedFTypes {\n padding: 0.5rem;\n border-radius: 5px;\n border: 1px solid lightgrey;\n}\n\n.allowedTypesWrapper {\n max-width: 100%;\n display: flex;\n flex-wrap: wrap;\n}\n\n.fileuploadList {\n width: 96.7%;\n}\n</style>\n"],"names":["_sfc_main","defineComponent","_a","mapGetters","mapActions","event","fileExtension","element","currentElement","rootElement","parentInputGroup","allInputGroupsNodeList","file","replaceEnabled","_c","_b","wantsToReplace","_d","distributionIndexToReplace","_e","fileIndexToReplace","targetDistribution","_f","targetFile","_g","accessUrl","fileUploadUrl","fileId","helper","options","form","catalog","token","resolvedOptions","requestOptions","result","axios","path","err","useI18n","useRuntimeEnv","drop","reactive","fLoad","ref","onClickOutside","triggerDropdown","e","dpiContext","useDpiContext","catalogIdFromFormkit","useFormKitNodeById","catalogId","computed","_hoisted_1","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_12","_hoisted_15","_openBlock","_createElementBlock","_Fragment","_createElementVNode","_createVNode","_component_FormKit","_ctx","_cache","$event","_createTextVNode","_hoisted_2","_createCommentVNode","_hoisted_3","_mergeProps","args","_vModelText","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","_toDisplayString","_hoisted_13","_hoisted_14","_renderList","types"],"mappings":"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"}