@piveau/piveau-hub-ui-modules 4.6.23 → 4.6.24
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.
- package/dist/data-provider-interface/components/FileUpload.vue.d.ts +1 -1
- package/dist/data-provider-interface/components/FileUpload.vue.mjs +146 -132
- package/dist/data-provider-interface/components/FileUpload.vue.mjs.map +1 -1
- package/dist/data-provider-interface/components/SimpleSelect.vue.mjs +41 -40
- package/dist/data-provider-interface/components/SimpleSelect.vue.mjs.map +1 -1
- package/dist/data-provider-interface/config/dcatap/input-definition.mjs +4 -2
- package/dist/data-provider-interface/config/dcatap/input-definition.mjs.map +1 -1
- package/dist/data-provider-interface/config/dcatapde/input-definition.mjs +1 -0
- package/dist/data-provider-interface/config/dcatapde/input-definition.mjs.map +1 -1
- package/dist/piveau-hub-ui-modules.css +1 -1
- 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
|
|
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
|
|
5
|
-
import { reactive as O, ref as S,
|
|
6
|
-
import { onClickOutside as
|
|
7
|
-
import { useRuntimeEnv as
|
|
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
|
|
12
|
-
const
|
|
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
|
|
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: ((
|
|
35
|
+
validExtensions: ((t = this.$env.content.dataProviderInterface.uploadFileTypes) == null ? void 0 : t.split(",")) || []
|
|
32
36
|
};
|
|
33
37
|
},
|
|
34
38
|
computed: {
|
|
35
|
-
...
|
|
39
|
+
...y("auth", [
|
|
36
40
|
"getUserData",
|
|
37
41
|
"getIsEditMode"
|
|
38
42
|
]),
|
|
39
|
-
...
|
|
43
|
+
...y("dpiStore", [
|
|
40
44
|
"getData"
|
|
41
|
-
])
|
|
42
|
-
getCatalogue() {
|
|
43
|
-
return E("dcat:catalog").value;
|
|
44
|
-
}
|
|
45
|
+
])
|
|
45
46
|
},
|
|
46
47
|
methods: {
|
|
47
|
-
...
|
|
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(
|
|
57
|
-
const
|
|
58
|
-
this.validExtensions && this.validExtensions.length ? this.validExtensions.includes(
|
|
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(
|
|
69
|
-
let e =
|
|
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,49 @@ 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
|
|
80
|
+
const t = this.$refs.fileupload, e = this.findParentInputGroupOfElement(t);
|
|
80
81
|
if (!e)
|
|
81
82
|
return null;
|
|
82
|
-
const
|
|
83
|
-
return Array.from(
|
|
83
|
+
const d = e.parentElement.querySelectorAll(".formkit-input-group-repeatable");
|
|
84
|
+
return Array.from(d).indexOf(e);
|
|
84
85
|
},
|
|
85
|
-
async uploadOrReplaceFile({ file:
|
|
86
|
-
var
|
|
87
|
-
const e = ((
|
|
88
|
-
if (e &&
|
|
89
|
-
const
|
|
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 b = (i = this.$route.query) == null ? void 0 : i.edit, w = this.findDistributionAccessUrlIndex(), h = (m = this.getData("distributions")) == null ? void 0 : m[b], v = (g = h == null ? void 0 : h["dcat:accessURL"]) == null ? void 0 : g[w], U = v == null ? void 0 : v["@id"];
|
|
90
91
|
if (U) {
|
|
91
|
-
const
|
|
92
|
-
return await this.uploadFile(
|
|
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/${
|
|
95
|
+
url: `${this.$env.api.fileUploadUrl}data/${R}?catalog=${this.catalogId}`
|
|
95
96
|
});
|
|
96
97
|
}
|
|
97
98
|
}
|
|
98
|
-
return await this.uploadFile(
|
|
99
|
+
return await this.uploadFile(t);
|
|
99
100
|
},
|
|
100
|
-
async uploadFile(
|
|
101
|
+
async uploadFile(t, e = {}) {
|
|
101
102
|
this.isLoading = !0;
|
|
102
|
-
const
|
|
103
|
-
|
|
104
|
-
const
|
|
103
|
+
const r = new FormData();
|
|
104
|
+
r.append("file", t);
|
|
105
|
+
const d = this.catalogId;
|
|
106
|
+
debugger;
|
|
107
|
+
const f = this.getUserData.rtpToken, a = {
|
|
105
108
|
method: "POST",
|
|
106
|
-
url: `${this.$env.api.fileUploadUrl}data?catalog=${
|
|
109
|
+
url: `${this.$env.api.fileUploadUrl}data?catalog=${d}`,
|
|
107
110
|
...e
|
|
108
|
-
},
|
|
109
|
-
method:
|
|
110
|
-
url:
|
|
111
|
+
}, p = {
|
|
112
|
+
method: a.method,
|
|
113
|
+
url: a.url,
|
|
111
114
|
headers: {
|
|
112
115
|
"Content-Type": "multipart/form-data",
|
|
113
|
-
Authorization: `Bearer ${
|
|
116
|
+
Authorization: `Bearer ${f}`
|
|
114
117
|
},
|
|
115
|
-
data:
|
|
118
|
+
data: r
|
|
116
119
|
};
|
|
117
120
|
try {
|
|
118
|
-
const i = await C.request(
|
|
119
|
-
this.context.model = `${this.$env.api.fileUploadUrl}${
|
|
121
|
+
const i = await C.request(p), m = i.data.result.location.substring(i.data.result.location.indexOf("/") + 1);
|
|
122
|
+
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
123
|
} catch (i) {
|
|
121
124
|
this.isLoading = !1, this.fail = !0, console.error(i);
|
|
122
125
|
}
|
|
@@ -129,163 +132,174 @@ const H = {
|
|
|
129
132
|
});
|
|
130
133
|
},
|
|
131
134
|
setup() {
|
|
132
|
-
const { t
|
|
133
|
-
|
|
135
|
+
const { t } = N();
|
|
136
|
+
x();
|
|
134
137
|
var e = O({
|
|
135
138
|
active: !1
|
|
136
139
|
});
|
|
137
|
-
const
|
|
138
|
-
|
|
140
|
+
const r = S("fload");
|
|
141
|
+
$(r, (i) => {
|
|
139
142
|
e.active = !1;
|
|
140
143
|
});
|
|
141
|
-
function
|
|
144
|
+
function d(i) {
|
|
142
145
|
e.active = !e.active;
|
|
143
146
|
}
|
|
147
|
+
const f = H(), a = B("catalog"), p = A(
|
|
148
|
+
() => {
|
|
149
|
+
var i;
|
|
150
|
+
return (
|
|
151
|
+
// Extract from catalog input field
|
|
152
|
+
(a == null ? void 0 : a.value.value) || ((i = f.value.edit) == null ? void 0 : i.catalog)
|
|
153
|
+
);
|
|
154
|
+
}
|
|
155
|
+
);
|
|
144
156
|
return {
|
|
145
157
|
drop: e,
|
|
146
|
-
onClickOutside:
|
|
147
|
-
triggerDropdown:
|
|
148
|
-
t
|
|
158
|
+
onClickOutside: $,
|
|
159
|
+
triggerDropdown: d,
|
|
160
|
+
t,
|
|
161
|
+
catalogId: p
|
|
149
162
|
};
|
|
150
163
|
}
|
|
151
|
-
},
|
|
164
|
+
}), W = { class: "position-relative w-100" }, j = {
|
|
152
165
|
key: 0,
|
|
153
166
|
ref: "fLoad",
|
|
154
167
|
class: "selectListUpload fileuploadList"
|
|
155
|
-
},
|
|
168
|
+
}, z = {
|
|
156
169
|
key: 0,
|
|
157
170
|
class: "w-100 position-relative"
|
|
158
|
-
},
|
|
171
|
+
}, J = ["data-type"], Q = { class: "file-div position-relative" }, X = ["accept", "disabled"], Y = {
|
|
159
172
|
class: "upload-feedback position-absolute d-flex",
|
|
160
173
|
style: { right: "0" }
|
|
161
|
-
},
|
|
174
|
+
}, Z = {
|
|
162
175
|
key: 0,
|
|
163
176
|
class: "lds-ring"
|
|
164
|
-
},
|
|
177
|
+
}, _ = { key: 1 }, ee = { key: 2 }, te = {
|
|
165
178
|
key: 0,
|
|
166
179
|
class: "dURLText my-3"
|
|
167
|
-
},
|
|
180
|
+
}, ie = ["href"], oe = {
|
|
168
181
|
key: 1,
|
|
169
182
|
class: "allowedTypesWrapper"
|
|
170
|
-
},
|
|
183
|
+
}, le = {
|
|
171
184
|
key: 0,
|
|
172
185
|
class: "errorSub my-3 d-flex"
|
|
173
|
-
},
|
|
174
|
-
function
|
|
175
|
-
const
|
|
176
|
-
return
|
|
177
|
-
|
|
178
|
-
|
|
186
|
+
}, se = { class: "d-flex flex-wrap w-100" };
|
|
187
|
+
function ae(t, e, r, d, f, a) {
|
|
188
|
+
const p = T("FormKit");
|
|
189
|
+
return o(), l(L, null, [
|
|
190
|
+
n("div", W, [
|
|
191
|
+
I(p, {
|
|
179
192
|
name: "mode",
|
|
180
193
|
validation: "required",
|
|
181
194
|
type: "text",
|
|
182
195
|
class: "selectInputField formkit-inner",
|
|
183
196
|
readonly: "readonly",
|
|
184
|
-
onClick: e[0] || (e[0] = (i) =>
|
|
185
|
-
placeholder:
|
|
197
|
+
onClick: e[0] || (e[0] = (i) => t.triggerDropdown()),
|
|
198
|
+
placeholder: t.t("message.dataupload.info.preferredInput"),
|
|
186
199
|
modelValue: t.inputChoice,
|
|
187
200
|
"onUpdate:modelValue": e[1] || (e[1] = (i) => t.inputChoice = i),
|
|
188
201
|
"validation-messages": {
|
|
189
|
-
required:
|
|
202
|
+
required: t.t("message.dataupload.info.preferredInput")
|
|
190
203
|
}
|
|
191
204
|
}, null, 8, ["placeholder", "modelValue", "validation-messages"]),
|
|
192
|
-
e[9] || (e[9] =
|
|
193
|
-
|
|
194
|
-
|
|
205
|
+
e[9] || (e[9] = s()),
|
|
206
|
+
t.drop.active ? (o(), l("ul", j, [
|
|
207
|
+
n("li", {
|
|
195
208
|
onClick: e[2] || (e[2] = (i) => {
|
|
196
|
-
t.uploadFileSwitch = !0,
|
|
209
|
+
t.uploadFileSwitch = !0, t.toggleUploadUrl();
|
|
197
210
|
}),
|
|
198
211
|
class: "p-2 border-b border-gray-200 data-[selected=true]:bg-blue-100 choosableItemsAC"
|
|
199
|
-
},
|
|
200
|
-
e[8] || (e[8] =
|
|
201
|
-
|
|
212
|
+
}, c(t.$t("message.dataupload.datasets.conditional.fileupload")), 1),
|
|
213
|
+
e[8] || (e[8] = s()),
|
|
214
|
+
n("li", {
|
|
202
215
|
onClick: e[3] || (e[3] = (i) => {
|
|
203
|
-
t.uploadURL = !0,
|
|
216
|
+
t.uploadURL = !0, t.toggleUploadFileSwitch();
|
|
204
217
|
}),
|
|
205
218
|
class: "p-2 border-b border-gray-200 data-[selected=true]:bg-blue-100 choosableItemsAC"
|
|
206
|
-
},
|
|
207
|
-
], 512)) :
|
|
219
|
+
}, c(t.$t("message.dataupload.datasets.conditional.URL")), 1)
|
|
220
|
+
], 512)) : u("", !0)
|
|
208
221
|
]),
|
|
209
|
-
e[19] || (e[19] =
|
|
210
|
-
t.uploadURL && !t.uploadFileSwitch ? (
|
|
211
|
-
|
|
222
|
+
e[19] || (e[19] = s()),
|
|
223
|
+
t.uploadURL && !t.uploadFileSwitch ? (o(), l("div", z, [
|
|
224
|
+
I(p, {
|
|
212
225
|
id: "aUrlLink",
|
|
213
226
|
modelValue: t.URLValue,
|
|
214
227
|
"onUpdate:modelValue": e[4] || (e[4] = (i) => t.URLValue = i),
|
|
215
228
|
class: "selectInputField formkit-inner",
|
|
216
229
|
type: "url",
|
|
217
230
|
name: "@id",
|
|
218
|
-
placeholder:
|
|
219
|
-
onInput:
|
|
231
|
+
placeholder: t.context.attrs.placeholder,
|
|
232
|
+
onInput: t.saveUrl,
|
|
220
233
|
validation: "required|url",
|
|
221
234
|
"validation-visibility": "live",
|
|
222
235
|
"validation-messages": {
|
|
223
|
-
required:
|
|
224
|
-
url:
|
|
236
|
+
required: t.t("message.dataupload.datasets.conditional.URL"),
|
|
237
|
+
url: t.t("message.dataupload.info.urlFormat")
|
|
225
238
|
}
|
|
226
239
|
}, null, 8, ["modelValue", "placeholder", "onInput", "validation-messages"])
|
|
227
|
-
])) :
|
|
228
|
-
e[20] || (e[20] =
|
|
229
|
-
t.uploadFileSwitch ? (
|
|
240
|
+
])) : u("", !0),
|
|
241
|
+
e[20] || (e[20] = s()),
|
|
242
|
+
t.uploadFileSwitch ? (o(), l("div", D({
|
|
230
243
|
key: 1,
|
|
231
244
|
ref: "fileupload",
|
|
232
|
-
class: ["p-3 w-100", `formkit-input-element formkit-input-element--${
|
|
233
|
-
"data-type":
|
|
234
|
-
},
|
|
235
|
-
G(
|
|
245
|
+
class: ["p-3 w-100", `formkit-input-element formkit-input-element--${t.context.type}`],
|
|
246
|
+
"data-type": t.context.type
|
|
247
|
+
}, t.$attrs), [
|
|
248
|
+
G(n("input", {
|
|
236
249
|
type: "text",
|
|
237
|
-
"onUpdate:modelValue": e[5] || (e[5] = (i) =>
|
|
238
|
-
onBlur: e[6] || (e[6] = (...i) =>
|
|
250
|
+
"onUpdate:modelValue": e[5] || (e[5] = (i) => t.context.model = i),
|
|
251
|
+
onBlur: e[6] || (e[6] = (...i) => t.context.blurHandler && t.context.blurHandler(...i)),
|
|
239
252
|
hidden: ""
|
|
240
253
|
}, null, 544), [
|
|
241
|
-
[P,
|
|
254
|
+
[P, t.context.model]
|
|
242
255
|
]),
|
|
243
|
-
e[16] || (e[16] =
|
|
244
|
-
|
|
245
|
-
|
|
256
|
+
e[16] || (e[16] = s()),
|
|
257
|
+
n("div", Q, [
|
|
258
|
+
n("input", {
|
|
246
259
|
class: "mt-3",
|
|
247
260
|
type: "file",
|
|
248
261
|
id: "aUrlFL",
|
|
249
262
|
name: "fileUpload",
|
|
250
|
-
onChange: e[7] || (e[7] = (i) =>
|
|
251
|
-
accept: t.validExtensions
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
263
|
+
onChange: e[7] || (e[7] = (i) => t.validateFile(i)),
|
|
264
|
+
accept: t.validExtensions,
|
|
265
|
+
disabled: t.isLoading || !t.catalogId
|
|
266
|
+
}, null, 40, X),
|
|
267
|
+
e[14] || (e[14] = s()),
|
|
268
|
+
n("div", Y, [
|
|
269
|
+
t.isLoading ? (o(), l("div", Z)) : u("", !0),
|
|
270
|
+
e[12] || (e[12] = s()),
|
|
271
|
+
t.success ? (o(), l("div", _, e[10] || (e[10] = [
|
|
272
|
+
n("i", { class: "material-icons d-flex check-icon" }, "check_circle", -1)
|
|
273
|
+
]))) : u("", !0),
|
|
274
|
+
e[13] || (e[13] = s()),
|
|
275
|
+
t.fail ? (o(), l("div", ee, e[11] || (e[11] = [
|
|
276
|
+
n("i", { class: "material-icons d-flex close-icon" }, "error", -1)
|
|
277
|
+
]))) : u("", !0)
|
|
264
278
|
])
|
|
265
279
|
]),
|
|
266
|
-
e[17] || (e[17] =
|
|
267
|
-
t.success ? (
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
href:
|
|
271
|
-
},
|
|
272
|
-
])) :
|
|
273
|
-
e[18] || (e[18] =
|
|
274
|
-
t.validExtensions && t.validExtensions.length ? (
|
|
275
|
-
t.success ?
|
|
276
|
-
e[15] || (e[15] =
|
|
277
|
-
|
|
278
|
-
(
|
|
280
|
+
e[17] || (e[17] = s()),
|
|
281
|
+
t.success ? (o(), l("p", te, [
|
|
282
|
+
s(c(t.$t("message.metadata.downloadUrl")) + ": ", 1),
|
|
283
|
+
n("a", {
|
|
284
|
+
href: t.context.model
|
|
285
|
+
}, c(t.context.model), 9, ie)
|
|
286
|
+
])) : u("", !0),
|
|
287
|
+
e[18] || (e[18] = s()),
|
|
288
|
+
t.validExtensions && t.validExtensions.length ? (o(), l("div", oe, [
|
|
289
|
+
t.success ? u("", !0) : (o(), l("p", le, "Allowed types: ")),
|
|
290
|
+
e[15] || (e[15] = s()),
|
|
291
|
+
n("div", se, [
|
|
292
|
+
(o(!0), l(L, null, q(t.validExtensions, (i) => (o(), l("span", {
|
|
279
293
|
key: i,
|
|
280
294
|
class: "mr-1 mb-1 allowedFTypes"
|
|
281
|
-
},
|
|
295
|
+
}, c(i), 1))), 128))
|
|
282
296
|
])
|
|
283
|
-
])) :
|
|
284
|
-
], 16,
|
|
297
|
+
])) : u("", !0)
|
|
298
|
+
], 16, J)) : u("", !0)
|
|
285
299
|
], 64);
|
|
286
300
|
}
|
|
287
|
-
const
|
|
301
|
+
const $e = /* @__PURE__ */ K(M, [["render", ae], ["__scopeId", "data-v-1ed0ff85"]]);
|
|
288
302
|
export {
|
|
289
|
-
|
|
303
|
+
$e as default
|
|
290
304
|
};
|
|
291
305
|
//# 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 debugger;\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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"}
|