@piveau/piveau-hub-ui-modules 4.3.0 → 4.4.0-beta.0
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/AutocompleteInput.vue.mjs +149 -135
- package/dist/data-provider-interface/components/AutocompleteInput.vue.mjs.map +1 -1
- package/dist/data-provider-interface/components/ConditionalInput.vue.mjs +152 -140
- package/dist/data-provider-interface/components/ConditionalInput.vue.mjs.map +1 -1
- package/dist/data-provider-interface/components/DistributionStepper.vue.mjs +60 -60
- package/dist/data-provider-interface/components/DistributionStepper.vue.mjs.map +1 -1
- package/dist/data-provider-interface/components/FileUpload.vue.d.ts +5 -2
- package/dist/data-provider-interface/components/FileUpload.vue.mjs +119 -117
- package/dist/data-provider-interface/components/FileUpload.vue.mjs.map +1 -1
- package/dist/data-provider-interface/components/SimpleInput.vue.mjs +19 -14
- package/dist/data-provider-interface/components/SimpleInput.vue.mjs.map +1 -1
- package/dist/data-provider-interface/components/SimpleSelect.vue.mjs +32 -32
- package/dist/data-provider-interface/components/SimpleSelect.vue.mjs.map +1 -1
- package/dist/data-provider-interface/components/SpatialInput.vue.mjs +90 -94
- package/dist/data-provider-interface/components/SpatialInput.vue.mjs.map +1 -1
- package/dist/data-provider-interface/components/SpatialInput.vue2.mjs +2 -2
- package/dist/data-provider-interface/components/UniqueIdentifierInput.vue.mjs +41 -30
- package/dist/data-provider-interface/components/UniqueIdentifierInput.vue.mjs.map +1 -1
- package/dist/data-provider-interface/config/dcatapde/input-definition.mjs +81 -78
- package/dist/data-provider-interface/config/dcatapde/input-definition.mjs.map +1 -1
- package/dist/data-provider-interface/views/DistributionInputPage.vue.mjs +52 -52
- package/dist/data-provider-interface/views/DistributionInputPage.vue.mjs.map +1 -1
- package/dist/data-provider-interface/views/InputPage.vue.mjs +82 -80
- package/dist/data-provider-interface/views/InputPage.vue.mjs.map +1 -1
- package/dist/form/Repeatable.vue.mjs +37 -37
- package/dist/form/Repeatable.vue.mjs.map +1 -1
- package/dist/piveau-hub-ui-modules.css +1 -1
- package/package.json +1 -1
|
@@ -1,262 +1,276 @@
|
|
|
1
|
-
import { getCurrentInstance as
|
|
2
|
-
import { useStore as
|
|
1
|
+
import { getCurrentInstance as ee, computed as S, ref as y, onMounted as te, watch as B, watchEffect as ne, openBlock as r, createElementBlock as i, unref as u, toDisplayString as p, createCommentVNode as $, createTextVNode as m, createElementVNode as s, withDirectives as X, isRef as N, vModelText as ae, Fragment as L, renderList as V, vShow as oe, normalizeClass as se } from "vue";
|
|
2
|
+
import { useStore as le } from "vuex";
|
|
3
3
|
import { getTranslationFor as O } from "../../utils/helpers.mjs";
|
|
4
|
-
import { getNode as
|
|
5
|
-
import { onClickOutside as
|
|
6
|
-
import
|
|
7
|
-
import
|
|
8
|
-
|
|
4
|
+
import { getNode as re } from "@formkit/core";
|
|
5
|
+
import { onClickOutside as H } from "../../external/@vueuse/core/index";
|
|
6
|
+
import { useI18n as ie } from "vue-i18n";
|
|
7
|
+
import ce from "qs";
|
|
8
|
+
import ue from "axios";
|
|
9
|
+
const de = { class: "formkitProperty" }, fe = {
|
|
10
|
+
key: 0,
|
|
11
|
+
class: "formkitHeader"
|
|
12
|
+
}, pe = { key: 1 }, me = { class: "formkitCmpWrap" }, ve = { class: "formkit-outer" }, he = {
|
|
9
13
|
key: 0,
|
|
10
14
|
class: "d-flex formkit-inner"
|
|
11
|
-
},
|
|
15
|
+
}, ge = { class: "autocompleteInputSingleValue" }, ye = { key: 1 }, xe = { class: "d-flex align-items-center justify-content-center formkit-inner mb-2" }, _e = ["placeholder"], ke = ["onClick"], be = {
|
|
12
16
|
key: 0,
|
|
13
17
|
class: "d-flex flex-wrap"
|
|
14
|
-
},
|
|
18
|
+
}, we = { class: "activeResultsAutocompleteWrapper" }, Ce = ["onClick"], Ie = ["onClick"], Se = { class: "w-100 mt-4" }, Le = { class: "d-flex justify-content-between align-items-center flex-wrap" }, Ve = {
|
|
15
19
|
key: 0,
|
|
16
20
|
class: "annifresultContainer"
|
|
17
|
-
},
|
|
21
|
+
}, Te = ["onClick"], Ae = { class: "d-flex" }, Pe = {
|
|
18
22
|
key: 1,
|
|
19
23
|
class: "d-flex flex-wrap"
|
|
20
|
-
},
|
|
24
|
+
}, $e = ["onClick"], Ne = { class: "formkit-wrapper" }, Oe = { class: "formkit-help" }, We = {
|
|
21
25
|
__name: "AutocompleteInput",
|
|
22
26
|
props: {
|
|
23
27
|
context: Object
|
|
24
28
|
},
|
|
25
|
-
setup(
|
|
26
|
-
let
|
|
27
|
-
const a =
|
|
28
|
-
let
|
|
29
|
-
value: { name:
|
|
30
|
-
}),
|
|
29
|
+
setup(J) {
|
|
30
|
+
let x = ee().appContext.app.config.globalProperties.$env;
|
|
31
|
+
const a = J, R = le(), { t: j, locale: E } = ie();
|
|
32
|
+
let h = S(() => a.context.value), d, _ = a.context.attrs.voc, z = S(() => j("message.dataupload.info.searchVocabulary")), G = S(() => j("message.dataupload.info.matchesNothingFound")), w = y({
|
|
33
|
+
value: { name: z }
|
|
34
|
+
}), f = y(), M = y(null), k = y({}), v = [], C = [], q = y({
|
|
31
35
|
value: !1
|
|
32
36
|
});
|
|
33
|
-
|
|
34
|
-
let
|
|
35
|
-
|
|
37
|
+
y();
|
|
38
|
+
let T = y({});
|
|
39
|
+
te(async () => {
|
|
36
40
|
k.value = "";
|
|
37
|
-
}), q(b, async () => {
|
|
38
|
-
}), q(V, async () => {
|
|
39
41
|
});
|
|
40
|
-
|
|
42
|
+
let D = S(() => {
|
|
43
|
+
try {
|
|
44
|
+
if (a.context.attrs.class.includes("inDistribution"))
|
|
45
|
+
return !0;
|
|
46
|
+
} catch {
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
B(w, async () => {
|
|
50
|
+
}), B(T, async () => {
|
|
51
|
+
});
|
|
52
|
+
const U = async (t) => {
|
|
41
53
|
if (t != null) {
|
|
42
54
|
let n = _ === "iana-media-types" || _ === "spdx-checksum-algorithm", e;
|
|
43
|
-
return await
|
|
55
|
+
return await R.dispatch("dpiStore/requestResourceName", { voc: _, uri: t, envs: x }).then(
|
|
44
56
|
(o) => {
|
|
45
|
-
a.context.attrs.property === "dcatde:politicalGeocodingURI" ? o != null && (e = n ? o.data.result.results.filter((
|
|
57
|
+
a.context.attrs.property === "dcatde:politicalGeocodingURI" ? o != null && (e = n ? o.data.result.results.filter((l) => l.resource === t).map((l) => l.alt_label)[0].en : O(o.data.result.alt_label, "en", [])) : o != null && (e = n ? o.data.result.results.filter((l) => l.resource === t).map((l) => l.pref_label)[0].en : O(o.data.result.pref_label, "en", []));
|
|
46
58
|
}
|
|
47
59
|
), e;
|
|
48
60
|
}
|
|
49
61
|
};
|
|
50
|
-
|
|
51
|
-
const t =
|
|
62
|
+
ne(async () => {
|
|
63
|
+
const t = h.value;
|
|
52
64
|
if (t.hasOwnProperty("name") && t.name === t.resource) {
|
|
53
65
|
let n;
|
|
54
|
-
a.context.attrs.multiple || (n =
|
|
66
|
+
a.context.attrs.multiple || (n = U(t.resource), a.context.node.input({ name: await n, resource: t.resource }));
|
|
55
67
|
}
|
|
56
68
|
if (t.length >= 1) {
|
|
57
69
|
let n = [];
|
|
58
70
|
for (let e = 0; e < t.length; e++)
|
|
59
|
-
t[e].name === t[e].resource && (n.push({ name: await
|
|
71
|
+
t[e].name === t[e].resource && (n.push({ name: await U(t[e].resource), resource: t[e].resource }), a.context.node.input(n));
|
|
60
72
|
}
|
|
61
73
|
});
|
|
62
|
-
function
|
|
74
|
+
function A(t) {
|
|
63
75
|
let n = { step: "", prop: a.context.node.name }, e = JSON.parse(localStorage.getItem("dpi_datasets"));
|
|
64
76
|
for (let o = 0; o < Object.keys(e).length; o++)
|
|
65
77
|
for (let c = 0; c < Object.keys(e)[o].length; c++) {
|
|
66
|
-
let
|
|
78
|
+
let l = Object.entries(e);
|
|
67
79
|
try {
|
|
68
|
-
Object.keys(
|
|
69
|
-
|
|
80
|
+
Object.keys(l[o][c]).filter((b) => {
|
|
81
|
+
b === a.context.node.name && (n.step = l[o][0], t === "erase" && (d = {}, e[n.step][n.prop] = d), e[n.step][n.prop] = d, localStorage.setItem("dpi_datasets", JSON.stringify(e)));
|
|
70
82
|
});
|
|
71
83
|
} catch {
|
|
72
84
|
}
|
|
73
85
|
}
|
|
74
|
-
window.removeEventListener("click",
|
|
86
|
+
window.removeEventListener("click", H);
|
|
75
87
|
}
|
|
76
|
-
|
|
77
|
-
let
|
|
88
|
+
H(M, (t) => f.value = !1);
|
|
89
|
+
let F = async (t, n) => {
|
|
78
90
|
let e = 10;
|
|
79
91
|
n != null && (e = e + 10);
|
|
80
|
-
let o =
|
|
92
|
+
let o = ce.stringify({
|
|
81
93
|
text: t,
|
|
82
94
|
limit: e
|
|
83
95
|
});
|
|
84
96
|
var c = {
|
|
85
97
|
method: "post",
|
|
86
|
-
url: _ == "eurovoc" ?
|
|
98
|
+
url: _ == "eurovoc" ? x.content.dataProviderInterface.annifLinkSubject : x.content.dataProviderInterface.annifLinkTheme,
|
|
87
99
|
headers: {
|
|
88
100
|
"Content-Type": "application/x-www-form-urlencoded",
|
|
89
101
|
Accept: "application/json"
|
|
90
102
|
},
|
|
91
103
|
data: o
|
|
92
104
|
};
|
|
93
|
-
|
|
94
|
-
for (let
|
|
95
|
-
C[
|
|
96
|
-
let
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
}),
|
|
100
|
-
}).catch(function(
|
|
101
|
-
console.log(
|
|
105
|
+
ue(c).then(async (l) => {
|
|
106
|
+
for (let g = 0; g < l.data.results.length; g++)
|
|
107
|
+
C[g] = { name: l.data.results[g].label, resource: l.data.results[g].uri, activeValue: !1 };
|
|
108
|
+
let b = [];
|
|
109
|
+
h.value.length > 0 && h.value.forEach((g) => {
|
|
110
|
+
b.push({ name: g.name, resource: g.resource, activeValue: !0 });
|
|
111
|
+
}), l.data.results.length > 9 && (C[C.length + 1] = { name: "...", resource: "invalid", activeValue: !1 }), T.value = Q(b, C);
|
|
112
|
+
}).catch(function(l) {
|
|
113
|
+
console.log(l);
|
|
102
114
|
});
|
|
103
115
|
};
|
|
104
|
-
async function
|
|
105
|
-
t.resource === "invalid" ? I(5) : (
|
|
116
|
+
async function K(t) {
|
|
117
|
+
t.resource === "invalid" ? I(5) : (P({ name: t.name, resource: t.resource }), I());
|
|
106
118
|
}
|
|
107
|
-
function
|
|
119
|
+
function Q(t, n) {
|
|
108
120
|
let e = t.concat(n), o = [], c = /* @__PURE__ */ new Set();
|
|
109
|
-
return e.forEach((
|
|
110
|
-
c.has(
|
|
121
|
+
return e.forEach((l) => {
|
|
122
|
+
c.has(l.resource) || (c.add(l.resource), l.activeValue || o.push(l));
|
|
111
123
|
}), o;
|
|
112
124
|
}
|
|
113
125
|
const I = async (t) => {
|
|
114
|
-
let n =
|
|
126
|
+
let n = re("Mandatory").value["dct:description"];
|
|
115
127
|
for (let e = 0; e < n.length; e++)
|
|
116
|
-
n[e]["@language"] === "en" && (t != null ? await
|
|
128
|
+
n[e]["@language"] === "en" && (t != null ? await F(n[e]["@value"], 5) : await F(n[e]["@value"]));
|
|
117
129
|
};
|
|
118
130
|
a.context.classes.outer += " autocompleteInput " + a.context.attrs.identifier;
|
|
119
|
-
const
|
|
131
|
+
const P = async (t) => {
|
|
120
132
|
if (Object.keys(t).length !== 1) {
|
|
121
|
-
if (
|
|
133
|
+
if (h.value.length > 0 && (v = h.value), a.context.attrs.multiple)
|
|
122
134
|
if (v.length != 0) {
|
|
123
135
|
let n = { name: t.name, resource: t.resource }, e = v.filter((o) => o.name != t.name);
|
|
124
|
-
e.push(n),
|
|
136
|
+
e.push(n), d = e, await a.context.node.input(d);
|
|
125
137
|
} else
|
|
126
|
-
v.push({ name: t.name, resource: t.resource }),
|
|
138
|
+
v.push({ name: t.name, resource: t.resource }), d = v, await a.context.node.input(d);
|
|
127
139
|
else {
|
|
128
140
|
if (t.resource === "invalid")
|
|
129
141
|
return;
|
|
130
|
-
t === "erase" ? (await a.context.node.input({}),
|
|
142
|
+
t === "erase" ? (await a.context.node.input({}), A(t)) : (d = { name: t.name, resource: t.resource }, await a.context.node.input(d));
|
|
131
143
|
}
|
|
132
|
-
|
|
144
|
+
A();
|
|
133
145
|
}
|
|
134
|
-
},
|
|
146
|
+
}, Y = async (t) => {
|
|
135
147
|
let n = t.target.value;
|
|
136
|
-
await
|
|
148
|
+
console.log(E), await R.dispatch("dpiStore/requestAutocompleteSuggestions", { voc: _, text: n, base: x.api.baseUrl }).then((e) => {
|
|
137
149
|
const o = e.data.result.results.map((c) => ({
|
|
138
|
-
name: O(c.pref_label,
|
|
150
|
+
name: O(c.pref_label, E.value, []) + " (" + c.id + ")",
|
|
139
151
|
resource: c.resource
|
|
140
152
|
}));
|
|
141
|
-
o.length === 0 ?
|
|
153
|
+
o.length === 0 ? w.value = { value: { name: G } } : w.value = o;
|
|
142
154
|
});
|
|
143
155
|
};
|
|
144
|
-
function
|
|
145
|
-
a.context.node.input({}),
|
|
156
|
+
function Z(t) {
|
|
157
|
+
a.context.node.input({}), P("erase");
|
|
146
158
|
}
|
|
147
|
-
function
|
|
148
|
-
|
|
159
|
+
function W(t) {
|
|
160
|
+
x.content.dataProviderInterface.annifIntegration && I(), h.value.length > 0 && (v = h.value), v.splice(v.findIndex((n) => n.name == t.name), 1), d = v, a.context.node.input(d), A();
|
|
149
161
|
}
|
|
150
|
-
return (t, n) => (r(), i("div",
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
162
|
+
return (t, n) => (r(), i("div", de, [
|
|
163
|
+
u(D) ? (r(), i("h4", fe, p(t.$t("message.dataupload.distributions." + a.context.attrs.identifier + ".label")), 1)) : $("", !0),
|
|
164
|
+
m(),
|
|
165
|
+
a.context.attrs.identifier != "licence" && !u(D) ? (r(), i("h4", pe, p(t.$t("message.dataupload.datasets." + a.context.attrs.identifier + ".label")), 1)) : $("", !0),
|
|
166
|
+
m(),
|
|
167
|
+
s("div", me, [
|
|
168
|
+
s("div", ve, [
|
|
169
|
+
!a.context.attrs.multiple && a.context.value.name ? (r(), i("div", he, [
|
|
170
|
+
s("a", ge, p(a.context.value.name), 1),
|
|
171
|
+
m(),
|
|
172
|
+
s("div", {
|
|
159
173
|
class: "removeX",
|
|
160
|
-
onClick:
|
|
174
|
+
onClick: Z
|
|
161
175
|
})
|
|
162
|
-
])) : (r(), i("div",
|
|
163
|
-
|
|
164
|
-
|
|
176
|
+
])) : (r(), i("div", ye, [
|
|
177
|
+
s("div", xe, [
|
|
178
|
+
X(s("input", {
|
|
165
179
|
class: "autocompleteInputfield",
|
|
166
180
|
placeholder: a.context.attrs.placeholder,
|
|
167
|
-
"onUpdate:modelValue": n[0] || (n[0] = (e) =>
|
|
181
|
+
"onUpdate:modelValue": n[0] || (n[0] = (e) => N(k) ? k.value = e : k = e),
|
|
168
182
|
type: "text",
|
|
169
|
-
onKeyup: n[1] || (n[1] = (e) =>
|
|
170
|
-
onClick: n[2] || (n[2] = (e) =>
|
|
171
|
-
}, null, 40,
|
|
172
|
-
[
|
|
183
|
+
onKeyup: n[1] || (n[1] = (e) => Y(e)),
|
|
184
|
+
onClick: n[2] || (n[2] = (e) => N(f) ? f.value = !u(f) : f = !u(f))
|
|
185
|
+
}, null, 40, _e), [
|
|
186
|
+
[ae, u(k)]
|
|
173
187
|
])
|
|
174
188
|
]),
|
|
175
|
-
|
|
176
|
-
|
|
189
|
+
m(),
|
|
190
|
+
X(s("ul", {
|
|
177
191
|
ref_key: "dropdownList",
|
|
178
|
-
ref:
|
|
192
|
+
ref: M,
|
|
179
193
|
class: "autocompleteResultList"
|
|
180
194
|
}, [
|
|
181
|
-
(r(!0), i(
|
|
195
|
+
(r(!0), i(L, null, V(u(w), (e) => (r(), i("li", {
|
|
182
196
|
key: e,
|
|
183
197
|
onClick: (o) => {
|
|
184
|
-
|
|
198
|
+
P(e), N(f) ? f.value = !u(f) : f = !u(f);
|
|
185
199
|
},
|
|
186
200
|
class: "p-2 border-b border-gray-200 data-[selected=true]:bg-blue-100 choosableItemsAC"
|
|
187
|
-
},
|
|
201
|
+
}, p(e.name), 9, ke))), 128))
|
|
188
202
|
], 512), [
|
|
189
|
-
[
|
|
203
|
+
[oe, u(f)]
|
|
190
204
|
]),
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
(r(!0), i(
|
|
194
|
-
|
|
195
|
-
|
|
205
|
+
m(),
|
|
206
|
+
u(x).content.dataProviderInterface.annifIntegration && a.context.attrs.annifTheme ? (r(), i("div", be, [
|
|
207
|
+
(r(!0), i(L, null, V(u(h), (e) => (r(), i("div", { key: e }, [
|
|
208
|
+
s("div", we, [
|
|
209
|
+
s("div", {
|
|
196
210
|
class: "d-flex",
|
|
197
211
|
onClick: (o) => {
|
|
198
212
|
e.activeValue = !e.activeValue;
|
|
199
213
|
}
|
|
200
214
|
}, [
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
215
|
+
s("span", null, p(e.name), 1),
|
|
216
|
+
m(),
|
|
217
|
+
s("div", {
|
|
204
218
|
class: "removeX",
|
|
205
|
-
onClick: (o) =>
|
|
206
|
-
}, null, 8,
|
|
207
|
-
], 8,
|
|
219
|
+
onClick: (o) => W(e)
|
|
220
|
+
}, null, 8, Ie)
|
|
221
|
+
], 8, Ce)
|
|
208
222
|
])
|
|
209
223
|
]))), 128)),
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
224
|
+
m(),
|
|
225
|
+
s("div", Se, [
|
|
226
|
+
s("div", Le, [
|
|
227
|
+
s("h3", null, p(a.context.label) + " - " + p(t.$t("message.dataupload.info.suggestions")), 1),
|
|
228
|
+
m(),
|
|
229
|
+
s("span", null, p(t.$t("message.dataupload.info.suggestionText")), 1),
|
|
230
|
+
m(),
|
|
231
|
+
s("button", {
|
|
218
232
|
class: "navlikeButton",
|
|
219
233
|
type: "button",
|
|
220
234
|
onClick: n[3] || (n[3] = (e) => {
|
|
221
|
-
I(),
|
|
235
|
+
I(), u(q).value = !0;
|
|
222
236
|
})
|
|
223
|
-
}, "
|
|
237
|
+
}, p(t.$t("message.dataupload.info.tryIt")), 1)
|
|
224
238
|
]),
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
(r(!0), i(
|
|
239
|
+
m(),
|
|
240
|
+
u(q).value ? (r(), i("div", Ve, [
|
|
241
|
+
(r(!0), i(L, null, V(u(T), (e) => (r(), i("div", {
|
|
228
242
|
key: e,
|
|
229
243
|
class: "d-flex"
|
|
230
244
|
}, [
|
|
231
|
-
|
|
232
|
-
class:
|
|
245
|
+
s("div", {
|
|
246
|
+
class: se(["activeResultsAutocompleteWrapper annifResults", { loadMore: e.resource === "invalid" }]),
|
|
233
247
|
onClick: (o) => {
|
|
234
|
-
e.activeValue = !e.activeValue,
|
|
248
|
+
e.activeValue = !e.activeValue, K(e);
|
|
235
249
|
}
|
|
236
250
|
}, [
|
|
237
|
-
|
|
238
|
-
|
|
251
|
+
s("div", Ae, [
|
|
252
|
+
s("span", null, p(e.name), 1)
|
|
239
253
|
])
|
|
240
|
-
], 10,
|
|
254
|
+
], 10, Te)
|
|
241
255
|
]))), 128))
|
|
242
|
-
])) :
|
|
256
|
+
])) : $("", !0)
|
|
243
257
|
])
|
|
244
|
-
])) : (r(), i("div",
|
|
245
|
-
(r(!0), i(
|
|
258
|
+
])) : (r(), i("div", Pe, [
|
|
259
|
+
(r(!0), i(L, null, V(a.context.value, (e) => (r(), i("div", {
|
|
246
260
|
class: "activeResultsAutocompleteWrapper",
|
|
247
261
|
key: e
|
|
248
262
|
}, [
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
263
|
+
s("span", null, p(e.name), 1),
|
|
264
|
+
m(),
|
|
265
|
+
s("div", {
|
|
252
266
|
class: "removeX",
|
|
253
|
-
onClick: (o) =>
|
|
254
|
-
}, null, 8,
|
|
267
|
+
onClick: (o) => W(e)
|
|
268
|
+
}, null, 8, $e)
|
|
255
269
|
]))), 128))
|
|
256
270
|
])),
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
271
|
+
m(),
|
|
272
|
+
s("div", Ne, [
|
|
273
|
+
s("div", Oe, p(a.context.help), 1)
|
|
260
274
|
])
|
|
261
275
|
]))
|
|
262
276
|
])
|
|
@@ -265,6 +279,6 @@ const le = { class: "formkitProperty" }, se = { key: 0 }, re = { class: "formkit
|
|
|
265
279
|
}
|
|
266
280
|
};
|
|
267
281
|
export {
|
|
268
|
-
|
|
282
|
+
We as default
|
|
269
283
|
};
|
|
270
284
|
//# sourceMappingURL=AutocompleteInput.vue.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AutocompleteInput.vue.mjs","sources":["../../../lib/data-provider-interface/components/AutocompleteInput.vue"],"sourcesContent":["<template>\n <div class=\"formkitProperty\">\n <!-- need to make a condition for the licence property of the distribution - otherwise the dropdown doesnt work-->\n\n <h4 v-if=\"props.context.attrs.identifier != 'licence'\">{{ props.context.label }}</h4>\n <div class=\"formkitCmpWrap\">\n <div class=\"formkit-outer\">\n <div class=\"d-flex formkit-inner\" v-if=\"!props.context.attrs.multiple && props.context.value.name\">\n\n <!-- <div class=\"infoI\">\n <div class=\"tooltipFormkit\">{{ props.context.attrs.info }}</div>\n </div> -->\n <a class=\"autocompleteInputSingleValue \">{{ props.context.value.name }}</a>\n <div class=\"removeX\" @click=\"removeProperty\"></div>\n </div>\n <div v-else>\n <div class=\"d-flex align-items-center justify-content-center formkit-inner mb-2\">\n <!-- <div class=\"infoI\">\n <div class=\"tooltipFormkit\">{{ props.context.attrs.info }}</div>\n </div> -->\n <input class=\"autocompleteInputfield\" :placeholder=\"props.context.attrs.placeholder\" v-model=\"inputText\"\n type=\"text\" v-on:keyup=\"getAutocompleteSuggestions($event)\" @click=\"activeList = !activeList\">\n </div>\n <ul ref=\"dropdownList\" v-show=\"activeList\" class=\"autocompleteResultList\">\n <li v-for=\"match in matches\" :key=\"match\" @click=\"setValue(match); activeList = !activeList\"\n class=\"p-2 border-b border-gray-200 data-[selected=true]:bg-blue-100 choosableItemsAC\">{{ match.name }}\n </li>\n </ul>\n <div v-if=\"instance.content.dataProviderInterface.annifIntegration && props.context.attrs.annifTheme\"\n class=\"d-flex flex-wrap\">\n <div v-for=\"item in listOfValues\" :key=\"item\">\n <div class=\"activeResultsAutocompleteWrapper\">\n <div class=\"d-flex\" @click=\"item.activeValue = !item.activeValue;\">\n <span>{{ item.name }}</span>\n <div class=\"removeX\" @click=\"removeMultipleProperty(item)\"></div>\n </div>\n </div>\n </div>\n <div class=\"w-100 mt-4\">\n <div class=\"d-flex justify-content-between align-items-center flex-wrap\">\n <h3>{{ props.context.label }} Suggestions</h3>\n <span>You can generate suggestions based on the description you provided</span>\n <button class=\"navlikeButton\" type=\"button\"\n @click=\"fillAnnifsuggestions(); annifTrigger.value = true\">Try it</button>\n </div>\n <div class=\"annifresultContainer\" v-if=\"annifTrigger.value\">\n <div v-for=\"item in annifSelectionList\" :key=\"item\" class=\"d-flex \">\n <div class=\"activeResultsAutocompleteWrapper annifResults\"\n :class=\"{ loadMore: item.resource === 'invalid' }\"\n @click=\"item.activeValue = !item.activeValue; updateAnnifselection(item)\">\n <div class=\"d-flex\">\n <span>{{ item.name }}</span>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n </div>\n <div v-else class=\"d-flex flex-wrap\">\n <div class=\"activeResultsAutocompleteWrapper\" v-for=\"item in props.context.value\" :key=\"item\">\n <span>{{ item.name }}</span>\n <div class=\"removeX\" @click=\"removeMultipleProperty(item)\"></div>\n </div>\n </div>\n <div class=\"formkit-wrapper\">\n <div class=\"formkit-help\">{{ props.context.help }}</div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</template>\n<script setup>\nimport { ref, reactive, watch, computed, onBeforeMount, onMounted, watchEffect } from 'vue';\nimport { useStore } from 'vuex';\nimport { getTranslationFor } from \"../../utils/helpers\";\nimport { getCurrentInstance } from \"vue\";\nimport { getNode } from '@formkit/core'\nimport { onClickOutside } from '@vueuse/core'\n\nimport qs from 'qs';\nimport axios from 'axios';\n\nlet instance = getCurrentInstance().appContext.app.config.globalProperties.$env\n\nconst props = defineProps({\n context: Object\n})\nconst store = useStore();\n\nlet listOfValues = computed(() => {\n return props.context.value;\n})\n\nlet selection;\nlet voc = props.context.attrs.voc;\nlet matches = ref({\n value: { name: '--- Type in anything for a live search of the vocabulary ---' }\n})\nlet activeList = ref()\nlet dropdownList = ref(null)\nlet inputText = ref({})\nlet cacheList = [];\nlet annifList = [];\nlet annifTrigger = ref({\n value: false\n});\nlet initialValues = ref();\nlet annifSelectionList = ref({})\n\nonMounted(async () => {\n inputText.value = \"\"\n});\n\nwatch(matches, async () => { })\nwatch(annifSelectionList, async () => { })\n\nconst requestURIname = async (res) => {\n\n if (res != undefined) {\n let vocMatch =\n voc === \"iana-media-types\" ||\n voc === \"spdx-checksum-algorithm\";\n\n let name;\n\n await store.dispatch('dpiStore/requestResourceName', { voc: voc, uri: res, envs: instance }).then(\n (response) => {\n if (props.context.attrs.property === 'dcatde:politicalGeocodingURI') {\n if (response != undefined) {\n let result = vocMatch\n ? response.data.result.results\n .filter((dataset) => dataset.resource === res)\n .map((dataset) => dataset.alt_label)[0].en\n : getTranslationFor(response.data.result.alt_label, 'en', []);\n name = result;\n }\n } else {\n\n if (response != undefined) {\n let result = vocMatch\n ? response.data.result.results\n .filter((dataset) => dataset.resource === res)\n .map((dataset) => dataset.pref_label)[0].en\n : getTranslationFor(response.data.result.pref_label, 'en', []);\n name = result;\n\n }\n }\n }\n );\n return name\n }\n\n}\n\nwatchEffect(async () => {\n const values = listOfValues.value;\n\n // single URI's\n if (values.hasOwnProperty('name')) {\n if (values.name === values.resource) {\n let uriName;\n if (!props.context.attrs.multiple) {\n uriName = requestURIname(values.resource)\n props.context.node.input({ name: await uriName, resource: values.resource })\n\n }\n }\n }\n // multiple URI's\n if (values.length >= 1) {\n let uriNameList = [];\n for (let index = 0; index < values.length; index++) {\n if (values[index].name === values[index].resource) {\n uriNameList.push({ name: await requestURIname(values[index].resource), resource: values[index].resource })\n props.context.node.input(uriNameList)\n }\n }\n }\n});\nfunction findPropertyToUpdate(trigger) {\n\n let finalPath = { step: '', prop: props.context.node.name }\n let pathToLocalStorage = JSON.parse(localStorage.getItem('dpi_datasets'));\n\n for (let index = 0; index < Object.keys(pathToLocalStorage).length; index++) {\n for (let innerIndex = 0; innerIndex < Object.keys(pathToLocalStorage)[index].length; innerIndex++) {\n let ntry = Object.entries((pathToLocalStorage))\n try {\n Object.keys(ntry[index][innerIndex]).filter(e => {\n if (e === props.context.node.name) {\n finalPath.step = ntry[index][0]\n\n if (trigger === 'erase') {\n\n selection = {}\n pathToLocalStorage[finalPath.step][finalPath.prop] = selection\n }\n if (typeof selection === 'object') {\n\n pathToLocalStorage[finalPath.step][finalPath.prop] = selection\n }\n else pathToLocalStorage[finalPath.step][finalPath.prop] = selection\n localStorage.setItem('dpi_datasets', JSON.stringify(pathToLocalStorage))\n }\n });\n } catch (error) {\n }\n }\n }\n\n window.removeEventListener(\"click\", onClickOutside);\n}\nonClickOutside(dropdownList, event => activeList.value = false)\nlet annifHandlerTheme = async (input, limit) => {\n\n let finalLimit = 10;\n if (limit != undefined) {\n finalLimit = finalLimit + 10\n }\n\n let query = qs.stringify({\n 'text': input,\n 'limit': finalLimit\n });\n\n\n var config = {\n method: 'post',\n url: voc == \"eurovoc\"\n ? instance.content.dataProviderInterface.annifLinkSubject\n : instance.content.dataProviderInterface.annifLinkTheme,\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n 'Accept': 'application/json'\n },\n data: query\n };\n\n let list = []\n\n axios(config)\n .then(async (response) => {\n for (let i = 0; i < response.data.results.length; i++) {\n annifList[i] = { \"name\": response.data.results[i].label, \"resource\": response.data.results[i].uri, \"activeValue\": false }\n }\n let annifCacheList = []\n if (listOfValues.value.length > 0) {\n listOfValues.value.forEach(element => {\n annifCacheList.push({ \"name\": element.name, \"resource\": element.resource, \"activeValue\": true })\n });\n }\n if (response.data.results.length > 9) {\n annifList[annifList.length + 1] = { \"name\": \"...\", \"resource\": \"invalid\", \"activeValue\": false }\n }\n\n annifSelectionList.value = eraseDuplicates(annifCacheList, annifList)\n\n })\n .catch(function (error) {\n console.log(error);\n });\n}\nasync function updateAnnifselection(item) {\n\n if (item.resource === 'invalid') {\n fillAnnifsuggestions(5);\n }\n else {\n setValue({ name: item.name, resource: item.resource })\n fillAnnifsuggestions()\n }\n\n\n}\nfunction eraseDuplicates(array1, array2) {\n\n let mergedArray = array1.concat(array2);\n let filteredArray = [];\n let resourceSet = new Set();\n\n mergedArray.forEach(obj => {\n if (!resourceSet.has(obj.resource)) {\n resourceSet.add(obj.resource);\n if (!obj.activeValue) {\n filteredArray.push(obj);\n }\n }\n });\n\n\n return filteredArray;\n}\nconst fillAnnifsuggestions = async (limitChange) => {\n\n let arr = getNode('Mandatory').value['dct:description']\n for (let i = 0; i < arr.length; i++) {\n if (arr[i]['@language'] === 'en') {\n if (limitChange != undefined) {\n await annifHandlerTheme(arr[i]['@value'], 5)\n }\n else await annifHandlerTheme(arr[i]['@value'])\n }\n }\n\n}\n\n// Need to append the classes to the formkit-outer element\nprops.context.classes.outer += ' autocompleteInput ' + props.context.attrs.identifier\n\nconst setValue = async (e) => {\n if (Object.keys(e).length === 1) {\n return\n }\n if (listOfValues.value.length > 0) {\n\n cacheList = listOfValues.value\n }\n\n // when its a multi input\n if (props.context.attrs.multiple) {\n // check for doubled values\n if (cacheList.length != 0) {\n let filteredProperty = { name: e.name, resource: e.resource };\n let filteredList = cacheList.filter((element) => element.name != e.name);\n filteredList.push(filteredProperty)\n selection = filteredList;\n await props.context.node.input(selection);\n\n }\n else {\n cacheList.push({ name: e.name, resource: e.resource })\n selection = cacheList\n await props.context.node.input(selection);\n }\n\n }\n else if (e.resource === \"invalid\") return\n else if (e === \"erase\") { await props.context.node.input({}); findPropertyToUpdate(e) }\n else {\n selection = { name: e.name, resource: e.resource };\n await props.context.node.input(selection);\n }\n findPropertyToUpdate();\n}\n\nconst getAutocompleteSuggestions = async (e) => {\n let innerText = e.target.value\n\n await store.dispatch('dpiStore/requestAutocompleteSuggestions', { voc: voc, text: innerText, base: instance.api.baseUrl }).then((response) => {\n const results = response.data.result.results.map((r) => ({\n name: getTranslationFor(r.pref_label, 'en', []) + \" (\" + r.id + \")\",\n resource: r.resource,\n }));\n if (results.length === 0) {\n matches.value = { value: { name: '--- No match found ---' } }\n }\n else matches.value = results;\n });\n}\n\nfunction removeProperty(e) {\n props.context.node.input({})\n setValue('erase');\n}\nfunction removeMultipleProperty(e) {\n\n if (instance.content.dataProviderInterface.annifIntegration) {\n fillAnnifsuggestions()\n }\n if (listOfValues.value.length > 0) {\n cacheList = listOfValues.value\n }\n // Get Index in the array where all values of the Span are stored and cut it out of the list of Values\n cacheList.splice(cacheList.findIndex((element) => element.name == e.name), 1)\n selection = cacheList;\n props.context.node.input(selection);\n findPropertyToUpdate();\n}\n</script>"],"names":["instance","getCurrentInstance","props","__props","store","useStore","listOfValues","computed","selection","voc","matches","ref","activeList","dropdownList","inputText","cacheList","annifList","annifTrigger","annifSelectionList","onMounted","watch","requestURIname","res","vocMatch","name","response","dataset","getTranslationFor","watchEffect","values","uriName","uriNameList","index","findPropertyToUpdate","trigger","finalPath","pathToLocalStorage","innerIndex","ntry","e","onClickOutside","event","annifHandlerTheme","input","limit","finalLimit","query","qs","config","axios","i","annifCacheList","element","eraseDuplicates","error","updateAnnifselection","item","fillAnnifsuggestions","setValue","array1","array2","mergedArray","filteredArray","resourceSet","obj","limitChange","arr","getNode","filteredProperty","filteredList","getAutocompleteSuggestions","innerText","results","r","removeProperty","removeMultipleProperty"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AutocompleteInput.vue.mjs","sources":["../../../lib/data-provider-interface/components/AutocompleteInput.vue"],"sourcesContent":["<template>\n <div class=\"formkitProperty\">\n\n <!-- need to make a condition for the licence property of the distribution - otherwise the dropdown doesnt work-->\n\n <h4 class=\"formkitHeader\" v-if=\"inDis\">\n {{ $t('message.dataupload.distributions.' + props.context.attrs.identifier + '.label') }}\n </h4>\n <h4 v-if=\"props.context.attrs.identifier != 'licence' && !inDis\">{{ $t('message.dataupload.datasets.' +\n props.context.attrs.identifier + '.label') }}</h4>\n\n <div class=\"formkitCmpWrap\">\n\n <div class=\"formkit-outer\">\n <div class=\"d-flex formkit-inner\" v-if=\"!props.context.attrs.multiple && props.context.value.name\">\n <!-- <div class=\"infoI\">\n <div class=\"tooltipFormkit\">{{ props.context.attrs.info }}</div>\n </div> -->\n <a class=\"autocompleteInputSingleValue \">{{ props.context.value.name }}</a>\n <div class=\"removeX\" @click=\"removeProperty\"></div>\n </div>\n <div v-else>\n <div class=\"d-flex align-items-center justify-content-center formkit-inner mb-2\">\n <!-- <div class=\"infoI\">\n <div class=\"tooltipFormkit\">{{ props.context.attrs.info }}</div>\n </div> -->\n <input class=\"autocompleteInputfield\" :placeholder=\"props.context.attrs.placeholder\" v-model=\"inputText\"\n type=\"text\" v-on:keyup=\"getAutocompleteSuggestions($event)\" @click=\"activeList = !activeList\">\n </div>\n <ul ref=\"dropdownList\" v-show=\"activeList\" class=\"autocompleteResultList\">\n <li v-for=\"match in matches\" :key=\"match\" @click=\"setValue(match); activeList = !activeList\"\n class=\"p-2 border-b border-gray-200 data-[selected=true]:bg-blue-100 choosableItemsAC\">{{ match.name }}\n </li>\n </ul>\n <div v-if=\"instance.content.dataProviderInterface.annifIntegration && props.context.attrs.annifTheme\"\n class=\"d-flex flex-wrap\">\n <div v-for=\"item in listOfValues\" :key=\"item\">\n <div class=\"activeResultsAutocompleteWrapper\">\n <div class=\"d-flex\" @click=\"item.activeValue = !item.activeValue;\">\n <span>{{ item.name }}</span>\n <div class=\"removeX\" @click=\"removeMultipleProperty(item)\"></div>\n </div>\n </div>\n </div>\n <div class=\"w-100 mt-4\">\n <div class=\"d-flex justify-content-between align-items-center flex-wrap\">\n <h3>{{ props.context.label }} - {{ $t('message.dataupload.info.suggestions') }}</h3>\n <span>{{ $t('message.dataupload.info.suggestionText') }}</span>\n <button class=\"navlikeButton\" type=\"button\"\n @click=\"fillAnnifsuggestions(); annifTrigger.value = true\">{{ $t('message.dataupload.info.tryIt')\n }}</button>\n </div>\n <div class=\"annifresultContainer\" v-if=\"annifTrigger.value\">\n <div v-for=\"item in annifSelectionList\" :key=\"item\" class=\"d-flex \">\n <div class=\"activeResultsAutocompleteWrapper annifResults\"\n :class=\"{ loadMore: item.resource === 'invalid' }\"\n @click=\"item.activeValue = !item.activeValue; updateAnnifselection(item)\">\n <div class=\"d-flex\">\n <span>{{ item.name }}</span>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n </div>\n <div v-else class=\"d-flex flex-wrap\">\n <div class=\"activeResultsAutocompleteWrapper\" v-for=\"item in props.context.value\" :key=\"item\">\n <span>{{ item.name }}</span>\n <div class=\"removeX\" @click=\"removeMultipleProperty(item)\"></div>\n </div>\n </div>\n <div class=\"formkit-wrapper\">\n <div class=\"formkit-help\">{{ props.context.help }}</div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</template>\n<script setup>\nimport { ref, watch, computed, onMounted, watchEffect } from 'vue';\nimport { useStore } from 'vuex';\nimport { getTranslationFor } from \"../../utils/helpers\";\nimport { getCurrentInstance } from \"vue\";\nimport { getNode } from '@formkit/core'\nimport { onClickOutside } from '@vueuse/core'\nimport { useI18n } from 'vue-i18n';\n\nimport qs from 'qs';\nimport axios from 'axios';\n\nlet instance = getCurrentInstance().appContext.app.config.globalProperties.$env\n\nconst props = defineProps({\n context: Object\n})\nconst store = useStore();\nconst { t,locale } = useI18n();\n\nlet listOfValues = computed(() => {\n return props.context.value;\n})\n\nlet selection;\nlet voc = props.context.attrs.voc;\n\nlet matchesSearchstring = computed(() => {\n return t('message.dataupload.info.searchVocabulary')\n})\nlet matchesNothingFound = computed(() => {\n return t('message.dataupload.info.matchesNothingFound')\n})\nlet matches = ref({\n value: { name: matchesSearchstring }\n})\nlet activeList = ref()\nlet dropdownList = ref(null)\nlet inputText = ref({})\nlet cacheList = [];\nlet annifList = [];\nlet annifTrigger = ref({\n value: false\n});\nlet initialValues = ref();\nlet annifSelectionList = ref({})\n\nonMounted(async () => {\n inputText.value = \"\"\n});\nlet inDis = computed(() => {\n try {\n if (props.context.attrs.class.includes(\"inDistribution\")) {\n return true\n }\n } catch (error) {\n\n }\n\n\n});\nwatch(matches, async () => { })\nwatch(annifSelectionList, async () => { })\n\nconst requestURIname = async (res) => {\n\n if (res != undefined) {\n let vocMatch =\n voc === \"iana-media-types\" ||\n voc === \"spdx-checksum-algorithm\";\n\n let name;\n\n await store.dispatch('dpiStore/requestResourceName', { voc: voc, uri: res, envs: instance }).then(\n (response) => {\n if (props.context.attrs.property === 'dcatde:politicalGeocodingURI') {\n if (response != undefined) {\n let result = vocMatch\n ? response.data.result.results\n .filter((dataset) => dataset.resource === res)\n .map((dataset) => dataset.alt_label)[0].en\n : getTranslationFor(response.data.result.alt_label, 'en', []);\n name = result;\n }\n } else {\n\n if (response != undefined) {\n let result = vocMatch\n ? response.data.result.results\n .filter((dataset) => dataset.resource === res)\n .map((dataset) => dataset.pref_label)[0].en\n : getTranslationFor(response.data.result.pref_label, 'en', []);\n name = result;\n\n }\n }\n }\n );\n return name\n }\n\n}\n\nwatchEffect(async () => {\n const values = listOfValues.value;\n\n // single URI's\n if (values.hasOwnProperty('name')) {\n if (values.name === values.resource) {\n let uriName;\n if (!props.context.attrs.multiple) {\n uriName = requestURIname(values.resource)\n props.context.node.input({ name: await uriName, resource: values.resource })\n\n }\n }\n }\n // multiple URI's\n if (values.length >= 1) {\n let uriNameList = [];\n for (let index = 0; index < values.length; index++) {\n if (values[index].name === values[index].resource) {\n uriNameList.push({ name: await requestURIname(values[index].resource), resource: values[index].resource })\n props.context.node.input(uriNameList)\n }\n }\n }\n});\nfunction findPropertyToUpdate(trigger) {\n\n let finalPath = { step: '', prop: props.context.node.name }\n let pathToLocalStorage = JSON.parse(localStorage.getItem('dpi_datasets'));\n\n for (let index = 0; index < Object.keys(pathToLocalStorage).length; index++) {\n for (let innerIndex = 0; innerIndex < Object.keys(pathToLocalStorage)[index].length; innerIndex++) {\n let ntry = Object.entries((pathToLocalStorage))\n try {\n Object.keys(ntry[index][innerIndex]).filter(e => {\n if (e === props.context.node.name) {\n finalPath.step = ntry[index][0]\n\n if (trigger === 'erase') {\n\n selection = {}\n pathToLocalStorage[finalPath.step][finalPath.prop] = selection\n }\n if (typeof selection === 'object') {\n\n pathToLocalStorage[finalPath.step][finalPath.prop] = selection\n }\n else pathToLocalStorage[finalPath.step][finalPath.prop] = selection\n localStorage.setItem('dpi_datasets', JSON.stringify(pathToLocalStorage))\n }\n });\n } catch (error) {\n }\n }\n }\n\n window.removeEventListener(\"click\", onClickOutside);\n}\nonClickOutside(dropdownList, event => activeList.value = false)\nlet annifHandlerTheme = async (input, limit) => {\n\n let finalLimit = 10;\n if (limit != undefined) {\n finalLimit = finalLimit + 10\n }\n\n let query = qs.stringify({\n 'text': input,\n 'limit': finalLimit\n });\n\n\n var config = {\n method: 'post',\n url: voc == \"eurovoc\"\n ? instance.content.dataProviderInterface.annifLinkSubject\n : instance.content.dataProviderInterface.annifLinkTheme,\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n 'Accept': 'application/json'\n },\n data: query\n };\n\n let list = []\n\n axios(config)\n .then(async (response) => {\n \n for (let i = 0; i < response.data.results.length; i++) {\n \n \n annifList[i] = { \"name\": response.data.results[i].label, \"resource\": response.data.results[i].uri, \"activeValue\": false }\n }\n let annifCacheList = []\n if (listOfValues.value.length > 0) {\n listOfValues.value.forEach(element => {\n annifCacheList.push({ \"name\": element.name, \"resource\": element.resource, \"activeValue\": true })\n });\n }\n if (response.data.results.length > 9) {\n annifList[annifList.length + 1] = { \"name\": \"...\", \"resource\": \"invalid\", \"activeValue\": false }\n }\n\n annifSelectionList.value = eraseDuplicates(annifCacheList, annifList)\n\n })\n .catch(function (error) {\n console.log(error);\n });\n}\nasync function updateAnnifselection(item) {\n\n if (item.resource === 'invalid') {\n fillAnnifsuggestions(5);\n }\n else {\n setValue({ name: item.name, resource: item.resource })\n fillAnnifsuggestions()\n }\n}\nfunction eraseDuplicates(array1, array2) {\n\n let mergedArray = array1.concat(array2);\n let filteredArray = [];\n let resourceSet = new Set();\n\n mergedArray.forEach(obj => {\n if (!resourceSet.has(obj.resource)) {\n resourceSet.add(obj.resource);\n if (!obj.activeValue) {\n filteredArray.push(obj);\n }\n }\n });\n\n\n return filteredArray;\n}\nconst fillAnnifsuggestions = async (limitChange) => {\n\n let arr = getNode('Mandatory').value['dct:description']\n for (let i = 0; i < arr.length; i++) {\n if (arr[i]['@language'] === 'en') {\n if (limitChange != undefined) {\n await annifHandlerTheme(arr[i]['@value'], 5)\n }\n else await annifHandlerTheme(arr[i]['@value'])\n }\n }\n\n}\n\n// Need to append the classes to the formkit-outer element\nprops.context.classes.outer += ' autocompleteInput ' + props.context.attrs.identifier\n\nconst setValue = async (e) => {\n if (Object.keys(e).length === 1) {\n return\n }\n if (listOfValues.value.length > 0) {\n\n cacheList = listOfValues.value\n }\n\n // when its a multi input\n if (props.context.attrs.multiple) {\n // check for doubled values\n if (cacheList.length != 0) {\n let filteredProperty = { name: e.name, resource: e.resource };\n let filteredList = cacheList.filter((element) => element.name != e.name);\n filteredList.push(filteredProperty)\n selection = filteredList;\n await props.context.node.input(selection);\n\n }\n else {\n cacheList.push({ name: e.name, resource: e.resource })\n selection = cacheList\n await props.context.node.input(selection);\n }\n\n }\n else if (e.resource === \"invalid\") return\n else if (e === \"erase\") { await props.context.node.input({}); findPropertyToUpdate(e) }\n else {\n selection = { name: e.name, resource: e.resource };\n await props.context.node.input(selection);\n }\n findPropertyToUpdate();\n}\n\nconst getAutocompleteSuggestions = async (e) => {\n let innerText = e.target.value\nconsole.log(locale);\n\n\n await store.dispatch('dpiStore/requestAutocompleteSuggestions', { voc: voc, text: innerText, base: instance.api.baseUrl }).then((response) => {\n const results = response.data.result.results.map((r) => ({\n name: getTranslationFor(r.pref_label, locale.value, []) + \" (\" + r.id + \")\",\n resource: r.resource,\n }));\n if (results.length === 0) {\n matches.value = { value: { name: matchesNothingFound } }\n }\n else matches.value = results;\n });\n}\n\nfunction removeProperty(e) {\n props.context.node.input({})\n setValue('erase');\n}\nfunction removeMultipleProperty(e) {\n\n if (instance.content.dataProviderInterface.annifIntegration) {\n fillAnnifsuggestions()\n }\n if (listOfValues.value.length > 0) {\n cacheList = listOfValues.value\n }\n // Get Index in the array where all values of the Span are stored and cut it out of the list of Values\n cacheList.splice(cacheList.findIndex((element) => element.name == e.name), 1)\n selection = cacheList;\n props.context.node.input(selection);\n findPropertyToUpdate();\n}\n</script>"],"names":["instance","getCurrentInstance","props","__props","store","useStore","t","locale","useI18n","listOfValues","computed","selection","voc","matchesSearchstring","matchesNothingFound","matches","ref","activeList","dropdownList","inputText","cacheList","annifList","annifTrigger","annifSelectionList","onMounted","inDis","watch","requestURIname","res","vocMatch","name","response","dataset","getTranslationFor","watchEffect","values","uriName","uriNameList","index","findPropertyToUpdate","trigger","finalPath","pathToLocalStorage","innerIndex","ntry","e","onClickOutside","event","annifHandlerTheme","input","limit","finalLimit","query","qs","config","axios","i","annifCacheList","element","eraseDuplicates","error","updateAnnifselection","item","fillAnnifsuggestions","setValue","array1","array2","mergedArray","filteredArray","resourceSet","obj","limitChange","arr","getNode","filteredProperty","filteredList","getAutocompleteSuggestions","innerText","results","r","removeProperty","removeMultipleProperty"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4FA,QAAIA,IAAWC,GAAkB,EAAG,WAAW,IAAI,OAAO,iBAAiB;AAE3E,UAAMC,IAAQC,GAGRC,IAAQC,GAAQ,GAChB,EAAE,GAAAC,GAAE,QAAAC,MAAWC;AAErB,QAAIC,IAAeC,EAAS,MACnBR,EAAM,QAAQ,KACtB,GAEGS,GACAC,IAAMV,EAAM,QAAQ,MAAM,KAE1BW,IAAsBH,EAAS,MAC1BJ,EAAE,0CAA0C,CACpD,GACGQ,IAAsBJ,EAAS,MAC1BJ,EAAE,6CAA6C,CACvD,GACGS,IAAUC,EAAI;AAAA,MAChB,OAAO,EAAE,MAAMH,EAAqB;AAAA,IACtC,CAAC,GACGI,IAAaD,EAAK,GAClBE,IAAeF,EAAI,IAAI,GACvBG,IAAYH,EAAI,EAAE,GAClBI,IAAY,CAAA,GACZC,IAAY,CAAA,GACZC,IAAeN,EAAI;AAAA,MACrB,OAAO;AAAA,IACT,CAAC;AACmB,IAAAA,EAAM;AAC1B,QAAIO,IAAqBP,EAAI,EAAE;AAE/B,IAAAQ,GAAU,YAAY;AACpB,MAAAL,EAAU,QAAQ;AAAA,IACpB,CAAC;AACD,QAAIM,IAAQf,EAAS,MAAM;AACzB,UAAI;AACF,YAAIR,EAAM,QAAQ,MAAM,MAAM,SAAS,gBAAgB;AACrD,iBAAO;AAAA,MAEV,QAAe;AAAA,MAEf;AAAA,IAGH,CAAC;AACD,IAAAwB,EAAMX,GAAS,YAAY;AAAA,KAAG,GAC9BW,EAAMH,GAAoB,YAAY;AAAA,KAAG;AAEzC,UAAMI,IAAiB,OAAOC,MAAQ;AAEpC,UAAIA,KAAO,MAAW;AACpB,YAAIC,IACFjB,MAAQ,sBACRA,MAAQ,2BAENkB;AAEJ,qBAAM1B,EAAM,SAAS,gCAAgC,EAAE,KAAKQ,GAAK,KAAKgB,GAAK,MAAM5B,EAAQ,CAAE,EAAE;AAAA,UAC3F,CAAC+B,MAAa;AACZ,YAAI7B,EAAM,QAAQ,MAAM,aAAa,iCAC/B6B,KAAY,SAMdD,IALaD,IACTE,EAAS,KAAK,OAAO,QACpB,OAAO,CAACC,MAAYA,EAAQ,aAAaJ,CAAG,EAC5C,IAAI,CAACI,MAAYA,EAAQ,SAAS,EAAE,CAAC,EAAE,KACxCC,EAAkBF,EAAS,KAAK,OAAO,WAAW,MAAM,CAAA,CAAE,KAK5DA,KAAY,SAMdD,IALaD,IACTE,EAAS,KAAK,OAAO,QACpB,OAAO,CAACC,MAAYA,EAAQ,aAAaJ,CAAG,EAC5C,IAAI,CAACI,MAAYA,EAAQ,UAAU,EAAE,CAAC,EAAE,KACzCC,EAAkBF,EAAS,KAAK,OAAO,YAAY,MAAM,CAAA,CAAE;AAAA,UAKpE;AAAA,QACP,GACWD;AAAA,MACR;AAAA,IAEH;AAEA,IAAAI,GAAY,YAAY;AACtB,YAAMC,IAAS1B,EAAa;AAG5B,UAAI0B,EAAO,eAAe,MAAM,KAC1BA,EAAO,SAASA,EAAO,UAAU;AACnC,YAAIC;AACJ,QAAKlC,EAAM,QAAQ,MAAM,aACvBkC,IAAUT,EAAeQ,EAAO,QAAQ,GACxCjC,EAAM,QAAQ,KAAK,MAAM,EAAE,MAAM,MAAMkC,GAAS,UAAUD,EAAO,UAAU;AAAA,MAG9E;AAGH,UAAIA,EAAO,UAAU,GAAG;AACtB,YAAIE,IAAc,CAAA;AAClB,iBAASC,IAAQ,GAAGA,IAAQH,EAAO,QAAQG;AACzC,UAAIH,EAAOG,CAAK,EAAE,SAASH,EAAOG,CAAK,EAAE,aACvCD,EAAY,KAAK,EAAE,MAAM,MAAMV,EAAeQ,EAAOG,CAAK,EAAE,QAAQ,GAAG,UAAUH,EAAOG,CAAK,EAAE,SAAQ,CAAE,GACzGpC,EAAM,QAAQ,KAAK,MAAMmC,CAAW;AAAA,MAGzC;AAAA,IACH,CAAC;AACD,aAASE,EAAqBC,GAAS;AAErC,UAAIC,IAAY,EAAE,MAAM,IAAI,MAAMvC,EAAM,QAAQ,KAAK,KAAM,GACvDwC,IAAqB,KAAK,MAAM,aAAa,QAAQ,cAAc,CAAC;AAExE,eAASJ,IAAQ,GAAGA,IAAQ,OAAO,KAAKI,CAAkB,EAAE,QAAQJ;AAClE,iBAASK,IAAa,GAAGA,IAAa,OAAO,KAAKD,CAAkB,EAAEJ,CAAK,EAAE,QAAQK,KAAc;AACjG,cAAIC,IAAO,OAAO,QAASF,CAAoB;AAC/C,cAAI;AACF,mBAAO,KAAKE,EAAKN,CAAK,EAAEK,CAAU,CAAC,EAAE,OAAO,CAAAE,MAAK;AAC/C,cAAIA,MAAM3C,EAAM,QAAQ,KAAK,SAC3BuC,EAAU,OAAOG,EAAKN,CAAK,EAAE,CAAC,GAE1BE,MAAY,YAEd7B,IAAY,CAAE,GACd+B,EAAmBD,EAAU,IAAI,EAAEA,EAAU,IAAI,IAAI9B,IAIrD+B,EAAmBD,EAAU,IAAI,EAAEA,EAAU,IAAI,IAAI9B,GAGvD,aAAa,QAAQ,gBAAgB,KAAK,UAAU+B,CAAkB,CAAC;AAAA,YAEnF,CAAS;AAAA,UACF,QAAe;AAAA,UACf;AAAA,QACF;AAGH,aAAO,oBAAoB,SAASI,CAAc;AAAA,IACpD;AACA,IAAAA,EAAe5B,GAAc,CAAA6B,MAAS9B,EAAW,QAAQ,EAAK;AAC9D,QAAI+B,IAAoB,OAAOC,GAAOC,MAAU;AAE9C,UAAIC,IAAa;AACjB,MAAID,KAAS,SACXC,IAAaA,IAAa;AAG5B,UAAIC,IAAQC,GAAG,UAAU;AAAA,QACvB,MAAQJ;AAAA,QACR,OAASE;AAAA,MACb,CAAG;AAGD,UAAIG,IAAS;AAAA,QACX,QAAQ;AAAA,QACR,KAAK1C,KAAO,YACRZ,EAAS,QAAQ,sBAAsB,mBACvCA,EAAS,QAAQ,sBAAsB;AAAA,QAC3C,SAAS;AAAA,UACP,gBAAgB;AAAA,UAChB,QAAU;AAAA,QACX;AAAA,QACD,MAAMoD;AAAA,MACV;AAIE,MAAAG,GAAMD,CAAM,EACT,KAAK,OAAOvB,MAAa;AAExB,iBAASyB,IAAI,GAAGA,IAAIzB,EAAS,KAAK,QAAQ,QAAQyB;AAGhD,UAAAnC,EAAUmC,CAAC,IAAI,EAAE,MAAQzB,EAAS,KAAK,QAAQyB,CAAC,EAAE,OAAO,UAAYzB,EAAS,KAAK,QAAQyB,CAAC,EAAE,KAAK,aAAe,GAAO;AAE3H,YAAIC,IAAiB,CAAE;AACvB,QAAIhD,EAAa,MAAM,SAAS,KAC9BA,EAAa,MAAM,QAAQ,CAAAiD,MAAW;AACpC,UAAAD,EAAe,KAAK,EAAE,MAAQC,EAAQ,MAAM,UAAYA,EAAQ,UAAU,aAAe,GAAI,CAAE;AAAA,QACzG,CAAS,GAEC3B,EAAS,KAAK,QAAQ,SAAS,MACjCV,EAAUA,EAAU,SAAS,CAAC,IAAI,EAAE,MAAQ,OAAO,UAAY,WAAW,aAAe,GAAO,IAGlGE,EAAmB,QAAQoC,EAAgBF,GAAgBpC,CAAS;AAAA,MAE1E,CAAK,EACA,MAAM,SAAUuC,GAAO;AACtB,gBAAQ,IAAIA,CAAK;AAAA,MACvB,CAAK;AAAA,IACL;AACA,mBAAeC,EAAqBC,GAAM;AAExC,MAAIA,EAAK,aAAa,YACpBC,EAAqB,CAAC,KAGtBC,EAAS,EAAE,MAAMF,EAAK,MAAM,UAAUA,EAAK,UAAU,GACrDC,EAAsB;AAAA,IAE1B;AACA,aAASJ,EAAgBM,GAAQC,GAAQ;AAEvC,UAAIC,IAAcF,EAAO,OAAOC,CAAM,GAClCE,IAAgB,CAAA,GAChBC,IAAc,oBAAI;AAEtB,aAAAF,EAAY,QAAQ,CAAAG,MAAO;AACzB,QAAKD,EAAY,IAAIC,EAAI,QAAQ,MAC/BD,EAAY,IAAIC,EAAI,QAAQ,GACvBA,EAAI,eACPF,EAAc,KAAKE,CAAG;AAAA,MAG9B,CAAG,GAGMF;AAAA,IACT;AACA,UAAML,IAAuB,OAAOQ,MAAgB;AAElD,UAAIC,IAAMC,GAAQ,WAAW,EAAE,MAAM,iBAAiB;AACtD,eAASjB,IAAI,GAAGA,IAAIgB,EAAI,QAAQhB;AAC9B,QAAIgB,EAAIhB,CAAC,EAAE,WAAW,MAAM,SACtBe,KAAe,OACjB,MAAMvB,EAAkBwB,EAAIhB,CAAC,EAAE,QAAQ,GAAG,CAAC,IAExC,MAAMR,EAAkBwB,EAAIhB,CAAC,EAAE,QAAQ,CAAC;AAAA,IAInD;AAGA,IAAAtD,EAAM,QAAQ,QAAQ,SAAS,wBAAwBA,EAAM,QAAQ,MAAM;AAE3E,UAAM8D,IAAW,OAAOnB,MAAM;AAC5B,UAAI,OAAO,KAAKA,CAAC,EAAE,WAAW,GAS9B;AAAA,YANIpC,EAAa,MAAM,SAAS,MAE9BW,IAAYX,EAAa,QAIvBP,EAAM,QAAQ,MAAM;AAEtB,cAAIkB,EAAU,UAAU,GAAG;AACzB,gBAAIsD,IAAmB,EAAE,MAAM7B,EAAE,MAAM,UAAUA,EAAE,YAC/C8B,IAAevD,EAAU,OAAO,CAACsC,MAAYA,EAAQ,QAAQb,EAAE,IAAI;AACvE,YAAA8B,EAAa,KAAKD,CAAgB,GAClC/D,IAAYgE,GACZ,MAAMzE,EAAM,QAAQ,KAAK,MAAMS,CAAS;AAAA,UAEzC;AAEC,YAAAS,EAAU,KAAK,EAAE,MAAMyB,EAAE,MAAM,UAAUA,EAAE,UAAU,GACrDlC,IAAYS,GACZ,MAAMlB,EAAM,QAAQ,KAAK,MAAMS,CAAS;AAAA,aAIvC;AAAA,cAAIkC,EAAE,aAAa;AAAW;AAC9B,UAAIA,MAAM,WAAW,MAAM3C,EAAM,QAAQ,KAAK,MAAM,CAAA,CAAE,GAAGqC,EAAqBM,CAAC,MAElFlC,IAAY,EAAE,MAAMkC,EAAE,MAAM,UAAUA,EAAE,YACxC,MAAM3C,EAAM,QAAQ,KAAK,MAAMS,CAAS;AAAA;AAE1C,QAAA4B;;IACF,GAEMqC,IAA6B,OAAO/B,MAAM;AAC9C,UAAIgC,IAAYhC,EAAE,OAAO;AAC3B,cAAQ,IAAItC,CAAM,GAGhB,MAAMH,EAAM,SAAS,2CAA2C,EAAE,KAAKQ,GAAK,MAAMiE,GAAW,MAAM7E,EAAS,IAAI,QAAS,CAAA,EAAE,KAAK,CAAC+B,MAAa;AAC5I,cAAM+C,IAAU/C,EAAS,KAAK,OAAO,QAAQ,IAAI,CAACgD,OAAO;AAAA,UACvD,MAAM9C,EAAkB8C,EAAE,YAAYxE,EAAO,OAAO,CAAA,CAAE,IAAI,OAAOwE,EAAE,KAAK;AAAA,UACxE,UAAUA,EAAE;AAAA,QACb,EAAC;AACF,QAAID,EAAQ,WAAW,IACrB/D,EAAQ,QAAQ,EAAE,OAAO,EAAE,MAAMD,EAAmB,EAAI,IAErDC,EAAQ,QAAQ+D;AAAA,MACzB,CAAG;AAAA,IACH;AAEA,aAASE,EAAenC,GAAG;AACzB,MAAA3C,EAAM,QAAQ,KAAK,MAAM,CAAA,CAAE,GAC3B8D,EAAS,OAAO;AAAA,IAClB;AACA,aAASiB,EAAuBpC,GAAG;AAEjC,MAAI7C,EAAS,QAAQ,sBAAsB,oBACzC+D,EAAsB,GAEpBtD,EAAa,MAAM,SAAS,MAC9BW,IAAYX,EAAa,QAG3BW,EAAU,OAAOA,EAAU,UAAU,CAACsC,MAAYA,EAAQ,QAAQb,EAAE,IAAI,GAAG,CAAC,GAC5ElC,IAAYS,GACZlB,EAAM,QAAQ,KAAK,MAAMS,CAAS,GAClC4B;IACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|