admins-components 9.0.20 → 9.0.22

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.
@@ -28,34 +28,34 @@ import { getDefaultPaginator as V } from "./admins-components69.js";
28
28
  import H from "./admins-components71.js";
29
29
  import U from "./admins-components75.js";
30
30
  import { debounce as W } from "./admins-components76.js";
31
- import { getFilterParams as G } from "./admins-components77.js";
32
- import K from "./admins-components80.js";
33
- import q from "./admins-components83.js";
34
- import { dataListDefaults as J } from "./admins-components87.js";
35
- import Y from "./admins-components89.js";
36
- import { isIpInUrl as X } from "./admins-components90.js";
37
- import { getUrlParam as Z, joinUrl as Q, removeUrlParam as $, setUrlParam as ee } from "./admins-components91.js";
38
- import { getCurrentSite as te } from "./admins-components92.js";
39
- import { vTooltip as ne } from "./admins-components93.js";
40
- import { createNativeFetch as re } from "./admins-components94.js";
41
- import { FetchDetails as ie, FetchError as ae, Methods as oe, initRequest as se } from "./admins-components95.js";
42
- import { useArticleEditorService as ce } from "./admins-components96.js";
43
- import { useCurrentUser as le } from "./admins-components97.js";
44
- import { BackendService as ue, useBackendService as de } from "./admins-components98.js";
45
- import { aoeConfig as fe, configureArticleOfferElement as pe } from "./admins-components151.js";
46
- import me from "./admins-components153.js";
47
- import { apeConfig as he, configureArticlePickerElement as ge } from "./admins-components154.js";
48
- import { configureImagePickerElement as _e, ipeConfig as ve } from "./admins-components155.js";
49
- import ye from "./admins-components157.js";
50
- import be from "./admins-components158.js";
51
- import { configureExternalArticleOfferElement as xe, eaoeConfig as Se } from "./admins-components159.js";
52
- import Ce from "./admins-components160.js";
53
- import { configureGalleryImageSelectorElement as we, gisConfig as Te } from "./admins-components161.js";
54
- import Ee from "./admins-components162.js";
55
- import De from "./admins-components163.js";
56
- import Oe from "./admins-components164.js";
57
- import { configureInternalArticleOfferElement as ke, iaoeConfig as Ae } from "./admins-components165.js";
58
- import je from "./admins-components166.js";
59
- import { configurePartnerPickerElement as Me, ppeconfig as Ne } from "./admins-components167.js";
60
- import Pe from "./admins-components169.js";
61
- export { me as ArticleOfferElement, ye as ArticlePickerElement, ue as BackendService, n as Button, o as Calendar, c as Checkbox, h as ConfirmModal, g as CopyToClipboard, R as DataCards, K as DataFilters, Y as DataList, B as DataListOptions, H as DataPaginator, L as DataTable, s as DatePicker, l as DateRangePicker, be as DateTimePickerElement, d as DropdownMenu, u as DropdownSelect, v as ExternalArticleOffer, Ce as ExternalArticleOfferElement, ie as FetchDetails, ae as FetchError, q as FilterTags, U as FiltersHistory, Ee as GalleryImageSelectorElement, p as HeaderComponent, _ as ImagePicker, Oe as ImagePickerDetailsElement, De as ImagePickerElement, y as InternalArticleOffer, je as InternalArticleOfferElement, b as Loader, oe as Methods, m as Modal, Pe as PartnerPickerElement, f as Sidebar, S as ToastNotification, fe as aoeConfig, he as apeConfig, E as booleanToString, r as calendarConfigDefaults, pe as configureArticleOfferElement, ge as configureArticlePickerElement, xe as configureExternalArticleOfferElement, we as configureGalleryImageSelectorElement, _e as configureImagePickerElement, ke as configureInternalArticleOfferElement, Me as configurePartnerPickerElement, re as createNativeFetch, C as dataCardsSettingsDefaults, D as dataListConverters, J as dataListDefaults, w as dataListSettingsDefaults, T as dataTableSettingsDefaults, i as datePickerConfigDefaults, a as dateRangePickerConfigDefaults, W as debounce, z as deepMerge, Se as eaoeConfig, O as enumMap, k as formatCurrency, e as formatDate, A as formatNumber, te as getCurrentSite, V as getDefaultPaginator, G as getFilterParams, Z as getUrlParam, Te as gisConfig, Ae as iaoeConfig, j as identity, se as initRequest, ve as ipeConfig, X as isIpInUrl, Q as joinUrl, M as listToString, N as localToLocalString, t as parseDate, Ne as ppeconfig, $ as removeUrlParam, ee as setUrlParam, P as shortUuid, F as textEllipse, x as toast, ce as useArticleEditorService, de as useBackendService, le as useCurrentUser, I as utcToLocalString, ne as vTooltip };
31
+ import { filterEmptyValues as G, getDefaultFilters as K, getFilterParams as q, writeFilterParams as J } from "./admins-components77.js";
32
+ import Y from "./admins-components80.js";
33
+ import X from "./admins-components83.js";
34
+ import { dataListDefaults as Z } from "./admins-components87.js";
35
+ import Q from "./admins-components89.js";
36
+ import { isIpInUrl as $ } from "./admins-components90.js";
37
+ import { getUrlParam as ee, joinUrl as te, removeUrlParam as ne, setUrlParam as re } from "./admins-components91.js";
38
+ import { getCurrentSite as ie } from "./admins-components92.js";
39
+ import { vTooltip as ae } from "./admins-components93.js";
40
+ import { createNativeFetch as oe } from "./admins-components94.js";
41
+ import { FetchDetails as se, FetchError as ce, Methods as le, initRequest as ue } from "./admins-components95.js";
42
+ import { useArticleEditorService as de } from "./admins-components96.js";
43
+ import { useCurrentUser as fe } from "./admins-components97.js";
44
+ import { BackendService as pe, useBackendService as me } from "./admins-components98.js";
45
+ import { aoeConfig as he, configureArticleOfferElement as ge } from "./admins-components151.js";
46
+ import _e from "./admins-components153.js";
47
+ import { apeConfig as ve, configureArticlePickerElement as ye } from "./admins-components154.js";
48
+ import { configureImagePickerElement as be, ipeConfig as xe } from "./admins-components155.js";
49
+ import Se from "./admins-components157.js";
50
+ import Ce from "./admins-components158.js";
51
+ import { configureExternalArticleOfferElement as we, eaoeConfig as Te } from "./admins-components159.js";
52
+ import Ee from "./admins-components160.js";
53
+ import { configureGalleryImageSelectorElement as De, gisConfig as Oe } from "./admins-components161.js";
54
+ import ke from "./admins-components162.js";
55
+ import Ae from "./admins-components163.js";
56
+ import je from "./admins-components164.js";
57
+ import { configureInternalArticleOfferElement as Me, iaoeConfig as Ne } from "./admins-components165.js";
58
+ import Pe from "./admins-components166.js";
59
+ import { configurePartnerPickerElement as Fe, ppeconfig as Ie } from "./admins-components167.js";
60
+ import Le from "./admins-components169.js";
61
+ export { _e as ArticleOfferElement, Se as ArticlePickerElement, pe as BackendService, n as Button, o as Calendar, c as Checkbox, h as ConfirmModal, g as CopyToClipboard, R as DataCards, Y as DataFilters, Q as DataList, B as DataListOptions, H as DataPaginator, L as DataTable, s as DatePicker, l as DateRangePicker, Ce as DateTimePickerElement, d as DropdownMenu, u as DropdownSelect, v as ExternalArticleOffer, Ee as ExternalArticleOfferElement, se as FetchDetails, ce as FetchError, X as FilterTags, U as FiltersHistory, ke as GalleryImageSelectorElement, p as HeaderComponent, _ as ImagePicker, je as ImagePickerDetailsElement, Ae as ImagePickerElement, y as InternalArticleOffer, Pe as InternalArticleOfferElement, b as Loader, le as Methods, m as Modal, Le as PartnerPickerElement, f as Sidebar, S as ToastNotification, he as aoeConfig, ve as apeConfig, E as booleanToString, r as calendarConfigDefaults, ge as configureArticleOfferElement, ye as configureArticlePickerElement, we as configureExternalArticleOfferElement, De as configureGalleryImageSelectorElement, be as configureImagePickerElement, Me as configureInternalArticleOfferElement, Fe as configurePartnerPickerElement, oe as createNativeFetch, C as dataCardsSettingsDefaults, D as dataListConverters, Z as dataListDefaults, w as dataListSettingsDefaults, T as dataTableSettingsDefaults, i as datePickerConfigDefaults, a as dateRangePickerConfigDefaults, W as debounce, z as deepMerge, Te as eaoeConfig, O as enumMap, G as filterEmptyValues, k as formatCurrency, e as formatDate, A as formatNumber, ie as getCurrentSite, K as getDefaultFilters, V as getDefaultPaginator, q as getFilterParams, ee as getUrlParam, Oe as gisConfig, Ne as iaoeConfig, j as identity, ue as initRequest, xe as ipeConfig, $ as isIpInUrl, te as joinUrl, M as listToString, N as localToLocalString, t as parseDate, Ie as ppeconfig, ne as removeUrlParam, re as setUrlParam, P as shortUuid, F as textEllipse, x as toast, de as useArticleEditorService, me as useBackendService, fe as useCurrentUser, I as utcToLocalString, ae as vTooltip, J as writeFilterParams };
@@ -1,22 +1,37 @@
1
1
  import { parseDropdownValue as e } from "./admins-components72.js";
2
- //#region src/utils/filterUrlSync.ts
2
+ //#region src/utils/dataFilters.ts
3
3
  function t(e) {
4
- let t = new URLSearchParams(window.location.search), r = {};
5
- for (let i of e) {
6
- if (i.type === "separator") continue;
7
- let e = window.location.search ? t.get(i.key) : null;
8
- r[i.key] = e === null ? i.value ?? null : n(i.type, e, i.value);
4
+ let t = new URLSearchParams(window.location.search), n = {};
5
+ for (let r of e) {
6
+ if (r.type === "separator") continue;
7
+ let e = window.location.search ? t.get(r.key) : null;
8
+ n[r.key] = e === null ? r.value ?? null : i(r.type, e, r.value);
9
9
  }
10
- return r;
10
+ return n;
11
+ }
12
+ function n(e) {
13
+ let n = t(e) ?? {}, i = {};
14
+ for (let t of e) {
15
+ if (t.type === "separator") continue;
16
+ let e = n[t.key];
17
+ if (t.transformer) {
18
+ let n = t.transformer(e);
19
+ n && Object.assign(i, n);
20
+ } else i[t.key] = e;
21
+ }
22
+ return r(i);
23
+ }
24
+ function r(e) {
25
+ return Object.fromEntries(Object.entries(e).filter(([e, t]) => t !== null && t !== "" && t !== void 0));
11
26
  }
12
- function n(t, n, i) {
27
+ function i(t, n, r) {
13
28
  if (t === "number") {
14
29
  let e = Number(n);
15
- return isNaN(e) ? i ?? null : e;
30
+ return isNaN(e) ? r ?? null : e;
16
31
  }
17
- return t === "date" || t === "datetime" ? { utc: n } : t === "daterange" || t === "datetimerange" ? r(n, i) : t === "dropdown" ? e(n) : t === "checkbox" ? n === "true" : n;
32
+ return t === "date" || t === "datetime" ? { utc: n } : t === "daterange" || t === "datetimerange" ? a(n, r) : t === "dropdown" ? e(n) : t === "checkbox" ? n === "true" : n;
18
33
  }
19
- function r(e, t) {
34
+ function a(e, t) {
20
35
  try {
21
36
  let t = JSON.parse(e);
22
37
  return t && typeof t == "object" && "local" in t && t.local && (t.local = new Date(t.local)), t;
@@ -24,16 +39,7 @@ function r(e, t) {
24
39
  return t ?? null;
25
40
  }
26
41
  }
27
- function i(e) {
28
- let t = new URLSearchParams(window.location.search), r = {};
29
- for (let i of e) {
30
- if (i.type === "separator") continue;
31
- let e = t.get(i.key);
32
- e !== null && (r[i.key] = n(i.type, e, i.value));
33
- }
34
- return r;
35
- }
36
- function a(e, t) {
42
+ function o(e, t) {
37
43
  let n = new URLSearchParams(window.location.search);
38
44
  for (let r of e) {
39
45
  if (r.type === "separator") continue;
@@ -44,4 +50,4 @@ function a(e, t) {
44
50
  window.history.replaceState(null, "", i);
45
51
  }
46
52
  //#endregion
47
- export { t as getFilterParams, i as readUrlFilterParams, a as writeFilterParams };
53
+ export { r as filterEmptyValues, n as getDefaultFilters, t as getFilterParams, o as writeFilterParams };
@@ -1 +1 @@
1
- {"version":3,"file":"admins-components77.js","names":[],"sources":["../src/utils/filterUrlSync.ts"],"sourcesContent":["import type { FilterItem } from '@/components/data-table/DataFilters.vue'\nimport { parseDropdownValue } from '@/utils/filterDisplay'\n\nexport function getFilterParams(items: FilterItem[]): Record<string, unknown> | null {\n const params = new URLSearchParams(window.location.search)\n const result: Record<string, unknown> = {}\n\n for (const item of items) {\n if (item.type === 'separator') continue\n\n const raw = window.location.search ? params.get(item.key) : null\n result[item.key] =\n raw === null ? (item.value ?? null) : parseFilterValue(item.type, raw, item.value)\n }\n return result\n}\n\nfunction parseFilterValue(type: FilterItem['type'], raw: string, fallback: unknown): unknown {\n if (type === 'number') {\n const n = Number(raw)\n return isNaN(n) ? (fallback ?? null) : n\n }\n if (type === 'date' || type === 'datetime') {\n return { utc: raw }\n }\n if (type === 'daterange' || type === 'datetimerange') {\n return parseRangeValue(raw, fallback)\n }\n if (type === 'dropdown') {\n return parseDropdownValue(raw)\n }\n if (type === 'checkbox') {\n return raw === 'true'\n }\n\n return raw\n}\n\nfunction parseRangeValue(raw: string, fallback: unknown): unknown {\n try {\n const parsed = JSON.parse(raw)\n if (parsed && typeof parsed === 'object' && 'local' in parsed && parsed.local) {\n parsed.local = new Date(parsed.local)\n }\n return parsed\n } catch {\n return fallback ?? null\n }\n}\n\nexport function readUrlFilterParams(items: FilterItem[]): Record<string, unknown> {\n const params = new URLSearchParams(window.location.search)\n const result: Record<string, unknown> = {}\n for (const item of items) {\n if (item.type === 'separator') continue\n const raw = params.get(item.key)\n if (raw === null) continue\n result[item.key] = parseFilterValue(item.type, raw, item.value)\n }\n return result\n}\n\nexport function writeFilterParams(items: FilterItem[], vals: Record<string, unknown>) {\n const params = new URLSearchParams(window.location.search)\n for (const item of items) {\n if (item.type === 'separator') continue\n const v = vals[item.key]\n if (v === null || v === undefined || v === '') {\n params.delete(item.key)\n } else if (item.type === 'date' || item.type === 'datetime') {\n params.set(item.key, (v as { utc: string }).utc)\n } else if (typeof v === 'object') {\n params.set(item.key, JSON.stringify(v))\n } else {\n params.set(item.key, String(v))\n }\n }\n const qs = params.toString()\n const url = window.location.pathname + (qs ? `?${qs}` : '')\n window.history.replaceState(null, '', url)\n}\n"],"mappings":";;AAGA,SAAgB,EAAgB,GAAqD;CACnF,IAAM,IAAS,IAAI,gBAAgB,OAAO,SAAS,MAAM,GACnD,IAAkC,CAAC;CAEzC,KAAK,IAAM,KAAQ,GAAO;EACxB,IAAI,EAAK,SAAS,aAAa;EAE/B,IAAM,IAAM,OAAO,SAAS,SAAS,EAAO,IAAI,EAAK,GAAG,IAAI;EAC5D,EAAO,EAAK,OACV,MAAQ,OAAQ,EAAK,SAAS,OAAQ,EAAiB,EAAK,MAAM,GAAK,EAAK,KAAK;CACrF;CACA,OAAO;AACT;AAEA,SAAS,EAAiB,GAA0B,GAAa,GAA4B;CAC3F,IAAI,MAAS,UAAU;EACrB,IAAM,IAAI,OAAO,CAAG;EACpB,OAAO,MAAM,CAAC,IAAK,KAAY,OAAQ;CACzC;CAcA,OAbI,MAAS,UAAU,MAAS,aACvB,EAAE,KAAK,EAAI,IAEhB,MAAS,eAAe,MAAS,kBAC5B,EAAgB,GAAK,CAAQ,IAElC,MAAS,aACJ,EAAmB,CAAG,IAE3B,MAAS,aACJ,MAAQ,SAGV;AACT;AAEA,SAAS,EAAgB,GAAa,GAA4B;CAChE,IAAI;EACF,IAAM,IAAS,KAAK,MAAM,CAAG;EAI7B,OAHI,KAAU,OAAO,KAAW,YAAY,WAAW,KAAU,EAAO,UACtE,EAAO,QAAQ,IAAI,KAAK,EAAO,KAAK,IAE/B;CACT,QAAQ;EACN,OAAO,KAAY;CACrB;AACF;AAEA,SAAgB,EAAoB,GAA8C;CAChF,IAAM,IAAS,IAAI,gBAAgB,OAAO,SAAS,MAAM,GACnD,IAAkC,CAAC;CACzC,KAAK,IAAM,KAAQ,GAAO;EACxB,IAAI,EAAK,SAAS,aAAa;EAC/B,IAAM,IAAM,EAAO,IAAI,EAAK,GAAG;EAC3B,MAAQ,SACZ,EAAO,EAAK,OAAO,EAAiB,EAAK,MAAM,GAAK,EAAK,KAAK;CAChE;CACA,OAAO;AACT;AAEA,SAAgB,EAAkB,GAAqB,GAA+B;CACpF,IAAM,IAAS,IAAI,gBAAgB,OAAO,SAAS,MAAM;CACzD,KAAK,IAAM,KAAQ,GAAO;EACxB,IAAI,EAAK,SAAS,aAAa;EAC/B,IAAM,IAAI,EAAK,EAAK;EACpB,AAAI,KAAM,QAA2B,MAAM,KACzC,EAAO,OAAO,EAAK,GAAG,IACb,EAAK,SAAS,UAAU,EAAK,SAAS,aAC/C,EAAO,IAAI,EAAK,KAAM,EAAsB,GAAG,IACtC,OAAO,KAAM,WACtB,EAAO,IAAI,EAAK,KAAK,KAAK,UAAU,CAAC,CAAC,IAEtC,EAAO,IAAI,EAAK,KAAK,OAAO,CAAC,CAAC;CAElC;CACA,IAAM,IAAK,EAAO,SAAS,GACrB,IAAM,OAAO,SAAS,YAAY,IAAK,IAAI,MAAO;CACxD,OAAO,QAAQ,aAAa,MAAM,IAAI,CAAG;AAC3C"}
1
+ {"version":3,"file":"admins-components77.js","names":[],"sources":["../src/utils/dataFilters.ts"],"sourcesContent":["import type { FilterItem } from '@/components/data-table/DataFilters.vue'\nimport { parseDropdownValue } from '@/utils/filterDisplay'\n\nexport function getFilterParams(items: FilterItem[]): Record<string, unknown> | null {\n const params = new URLSearchParams(window.location.search)\n const result: Record<string, unknown> = {}\n\n for (const item of items) {\n if (item.type === 'separator') continue\n\n const raw = window.location.search ? params.get(item.key) : null\n result[item.key] =\n raw === null ? (item.value ?? null) : parseFilterValue(item.type, raw, item.value)\n }\n return result\n}\n\nexport function getDefaultFilters(items: FilterItem[]): Record<string, unknown> {\n const raw = getFilterParams(items) ?? {}\n const result: Record<string, unknown> = {}\n\n for (const item of items) {\n if (item.type === 'separator') continue\n const val = raw[item.key]\n\n if (item.transformer) {\n const t = item.transformer(val)\n if (t) Object.assign(result, t)\n } else {\n result[item.key] = val\n }\n }\n\n return filterEmptyValues(result)\n}\n\nexport function filterEmptyValues(filters: Record<string, any>): Record<string, any> {\n return Object.fromEntries(\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Object.entries(filters).filter(([_, val]) => val !== null && val !== '' && val !== undefined),\n )\n}\n\n\nfunction parseFilterValue(type: FilterItem['type'], raw: string, fallback: unknown): unknown {\n if (type === 'number') {\n const n = Number(raw)\n return isNaN(n) ? (fallback ?? null) : n\n }\n if (type === 'date' || type === 'datetime') {\n return { utc: raw }\n }\n if (type === 'daterange' || type === 'datetimerange') {\n return parseRangeValue(raw, fallback)\n }\n if (type === 'dropdown') {\n return parseDropdownValue(raw)\n }\n if (type === 'checkbox') {\n return raw === 'true'\n }\n\n return raw\n}\n\nfunction parseRangeValue(raw: string, fallback: unknown): unknown {\n try {\n const parsed = JSON.parse(raw)\n if (parsed && typeof parsed === 'object' && 'local' in parsed && parsed.local) {\n parsed.local = new Date(parsed.local)\n }\n return parsed\n } catch {\n return fallback ?? null\n }\n}\n\nexport function writeFilterParams(items: FilterItem[], vals: Record<string, unknown>) {\n const params = new URLSearchParams(window.location.search)\n for (const item of items) {\n if (item.type === 'separator') continue\n const v = vals[item.key]\n if (v === null || v === undefined || v === '') {\n params.delete(item.key)\n } else if (item.type === 'date' || item.type === 'datetime') {\n params.set(item.key, (v as { utc: string }).utc)\n } else if (typeof v === 'object') {\n params.set(item.key, JSON.stringify(v))\n } else {\n params.set(item.key, String(v))\n }\n }\n const qs = params.toString()\n const url = window.location.pathname + (qs ? `?${qs}` : '')\n window.history.replaceState(null, '', url)\n}\n"],"mappings":";;AAGA,SAAgB,EAAgB,GAAqD;CACnF,IAAM,IAAS,IAAI,gBAAgB,OAAO,SAAS,MAAM,GACnD,IAAkC,CAAC;CAEzC,KAAK,IAAM,KAAQ,GAAO;EACxB,IAAI,EAAK,SAAS,aAAa;EAE/B,IAAM,IAAM,OAAO,SAAS,SAAS,EAAO,IAAI,EAAK,GAAG,IAAI;EAC5D,EAAO,EAAK,OACV,MAAQ,OAAQ,EAAK,SAAS,OAAQ,EAAiB,EAAK,MAAM,GAAK,EAAK,KAAK;CACrF;CACA,OAAO;AACT;AAEA,SAAgB,EAAkB,GAA8C;CAC9E,IAAM,IAAM,EAAgB,CAAK,KAAK,CAAC,GACjC,IAAkC,CAAC;CAEzC,KAAK,IAAM,KAAQ,GAAO;EACxB,IAAI,EAAK,SAAS,aAAa;EAC/B,IAAM,IAAM,EAAI,EAAK;EAErB,IAAI,EAAK,aAAa;GACpB,IAAM,IAAI,EAAK,YAAY,CAAG;GAC9B,AAAI,KAAG,OAAO,OAAO,GAAQ,CAAC;EAChC,OACE,EAAO,EAAK,OAAO;CAEvB;CAEA,OAAO,EAAkB,CAAM;AACjC;AAEA,SAAgB,EAAkB,GAAmD;CACnF,OAAO,OAAO,YAEZ,OAAO,QAAQ,CAAO,EAAE,QAAQ,CAAC,GAAG,OAAS,MAAQ,QAAQ,MAAQ,MAAM,MAAQ,KAAA,CAAS,CAC9F;AACF;AAGA,SAAS,EAAiB,GAA0B,GAAa,GAA4B;CAC3F,IAAI,MAAS,UAAU;EACrB,IAAM,IAAI,OAAO,CAAG;EACpB,OAAO,MAAM,CAAC,IAAK,KAAY,OAAQ;CACzC;CAcA,OAbI,MAAS,UAAU,MAAS,aACvB,EAAE,KAAK,EAAI,IAEhB,MAAS,eAAe,MAAS,kBAC5B,EAAgB,GAAK,CAAQ,IAElC,MAAS,aACJ,EAAmB,CAAG,IAE3B,MAAS,aACJ,MAAQ,SAGV;AACT;AAEA,SAAS,EAAgB,GAAa,GAA4B;CAChE,IAAI;EACF,IAAM,IAAS,KAAK,MAAM,CAAG;EAI7B,OAHI,KAAU,OAAO,KAAW,YAAY,WAAW,KAAU,EAAO,UACtE,EAAO,QAAQ,IAAI,KAAK,EAAO,KAAK,IAE/B;CACT,QAAQ;EACN,OAAO,KAAY;CACrB;AACF;AAEA,SAAgB,EAAkB,GAAqB,GAA+B;CACpF,IAAM,IAAS,IAAI,gBAAgB,OAAO,SAAS,MAAM;CACzD,KAAK,IAAM,KAAQ,GAAO;EACxB,IAAI,EAAK,SAAS,aAAa;EAC/B,IAAM,IAAI,EAAK,EAAK;EACpB,AAAI,KAAM,QAA2B,MAAM,KACzC,EAAO,OAAO,EAAK,GAAG,IACb,EAAK,SAAS,UAAU,EAAK,SAAS,aAC/C,EAAO,IAAI,EAAK,KAAM,EAAsB,GAAG,IACtC,OAAO,KAAM,WACtB,EAAO,IAAI,EAAK,KAAK,KAAK,UAAU,CAAC,CAAC,IAEtC,EAAO,IAAI,EAAK,KAAK,OAAO,CAAC,CAAC;CAElC;CACA,IAAM,IAAK,EAAO,SAAS,GACrB,IAAM,OAAO,SAAS,YAAY,IAAK,IAAI,MAAO;CACxD,OAAO,QAAQ,aAAa,MAAM,IAAI,CAAG;AAC3C"}
@@ -6,31 +6,31 @@ import i from "./admins-components22.js";
6
6
  import a from "./admins-components27.js";
7
7
  import o from "./admins-components75.js";
8
8
  import { debounce as s } from "./admins-components76.js";
9
- import { readUrlFilterParams as c, writeFilterParams as l } from "./admins-components77.js";
10
- import { Fragment as u, createBlock as d, createCommentVNode as f, createElementBlock as p, createElementVNode as m, createVNode as h, defineComponent as g, mergeProps as _, normalizeClass as v, onMounted as y, openBlock as b, ref as x, renderList as S, toDisplayString as C, unref as w, watch as T, withCtx as E } from "vue";
9
+ import { filterEmptyValues as c, getFilterParams as l, writeFilterParams as u } from "./admins-components77.js";
10
+ import { Fragment as d, createBlock as f, createCommentVNode as p, createElementBlock as m, createElementVNode as h, createVNode as g, defineComponent as _, mergeProps as v, normalizeClass as y, onMounted as b, openBlock as x, ref as S, renderList as C, toDisplayString as w, unref as T, watch as E, withCtx as D } from "vue";
11
11
  //#region src/components/data-table/DataFilters.vue?vue&type=script&setup=true&lang.ts
12
- var D = { class: "data-filters" }, O = {
12
+ var O = { class: "data-filters" }, k = {
13
13
  key: 0,
14
14
  class: "data-filters__separator"
15
- }, k = ["for"], A = [
15
+ }, A = ["for"], j = [
16
16
  "placeholder",
17
17
  "value",
18
18
  "id",
19
19
  "onInput"
20
- ], j = [
20
+ ], M = [
21
21
  "placeholder",
22
22
  "value",
23
23
  "id",
24
24
  "onInput"
25
- ], M = [
25
+ ], N = [
26
26
  "placeholder",
27
27
  "value",
28
28
  "id",
29
29
  "onInput"
30
- ], N = { class: "data-filters__footer" }, P = {
30
+ ], P = { class: "data-filters__footer" }, F = {
31
31
  key: 0,
32
32
  class: "separator my-3"
33
- }, F = /* @__PURE__ */ g({
33
+ }, I = /* @__PURE__ */ _({
34
34
  __name: "DataFilters",
35
35
  props: {
36
36
  open: {
@@ -54,71 +54,79 @@ var D = { class: "data-filters" }, O = {
54
54
  storageKey: {}
55
55
  },
56
56
  emits: ["close", "change"],
57
- setup(g, { expose: F, emit: I }) {
58
- let L = g, R = I, z = x(W()), B = x({});
59
- function V(e, t) {
60
- t ? B.value[e] = t : delete B.value[e];
57
+ setup(_, { expose: I, emit: L }) {
58
+ let R = _, z = L, B = S(l(R.items) ?? {}), V = S({});
59
+ function H(e, t) {
60
+ t ? V.value[e] = t : delete V.value[e];
61
61
  }
62
- function H(e) {
62
+ function U(e) {
63
63
  return {
64
64
  ...e.config ?? {},
65
65
  showTime: e.type === "datetime",
66
66
  placeholder: e.placeholder ?? (e.type === "datetime" ? "Időpont" : "Dátum")
67
67
  };
68
68
  }
69
- function U(e) {
69
+ function W(e) {
70
70
  return {
71
71
  ...e.config ?? {},
72
72
  ...e.fullWidth ? {} : { compact: !0 },
73
73
  showTime: e.type === "datetimerange"
74
74
  };
75
75
  }
76
- function W(e = null) {
77
- let t = {};
78
- for (let n of L.items) n.type !== "separator" && (t[n.key] = n.value ?? e);
79
- return t;
80
- }
81
- y(() => {
82
- if (!L.handleUrl) return;
83
- let e = c(L.items);
84
- Object.keys(e).length > 0 && (z.value = {
85
- ...z.value,
76
+ b(() => {
77
+ if (!R.handleUrl) return;
78
+ let e = l(R.items);
79
+ e && Object.keys(e).length > 0 && (B.value = {
80
+ ...B.value,
86
81
  ...e
87
82
  });
88
83
  });
89
- function G(e) {
90
- return Object.fromEntries(Object.entries(e).filter(([e, t]) => t !== null && t !== "" && t !== void 0));
91
- }
92
- function K(e, t) {
93
- z.value = {
94
- ...z.value,
84
+ function G(e, t) {
85
+ B.value = {
86
+ ...B.value,
95
87
  [e]: t
96
- }, L.lazy || (L.handleUrl && l(L.items, z.value), R("change", G(z.value)));
88
+ }, R.lazy || (R.handleUrl && u(R.items, B.value), z("change", K()));
89
+ }
90
+ function K() {
91
+ let e = R.items.reduce((e, t) => {
92
+ let n = B.value[t.key];
93
+ return t.transformer ? {
94
+ ...e,
95
+ ...t.transformer(n) ?? {}
96
+ } : {
97
+ ...e,
98
+ [t.key]: n
99
+ };
100
+ }, {});
101
+ return {
102
+ values: c(B.value),
103
+ transformed: c(e)
104
+ };
97
105
  }
98
106
  let q = s((e, t) => {
99
- K(e, t);
107
+ G(e, t);
100
108
  });
101
109
  function J() {
102
- L.handleUrl && l(L.items, z.value), R("change", G(z.value)), R("close");
110
+ R.handleUrl && u(R.items, B.value), z("change", K()), z("close");
103
111
  }
104
112
  function Y() {
105
- z.value = {}, L.handleUrl && l(L.items, z.value), R("change", G(z.value));
113
+ B.value = {}, R.handleUrl && u(R.items, B.value), z("change", K());
106
114
  }
107
- let X = x(!1);
108
- T(z, (e) => {
115
+ let X = S(!1);
116
+ E(B, (e) => {
109
117
  X.value = Object.values(e).some((e) => e !== null && e !== "" && e !== void 0);
110
118
  }, {
111
119
  deep: !0,
112
120
  immediate: !0
113
121
  });
114
122
  function Z(e) {
115
- z.value = {
116
- ...z.value,
123
+ B.value = {
124
+ ...B.value,
117
125
  [e]: null
118
- }, L.handleUrl && l(L.items, z.value), R("change", G(z.value));
126
+ }, R.handleUrl && u(R.items, B.value), z("change", K());
119
127
  }
120
128
  function Q(e) {
121
- let t = B.value[e];
129
+ let t = V.value[e];
122
130
  if (t) {
123
131
  if (typeof t.focusAndOpen == "function") {
124
132
  t.focusAndOpen();
@@ -128,93 +136,93 @@ var D = { class: "data-filters" }, O = {
128
136
  }
129
137
  }
130
138
  function $(e) {
131
- let t = { ...z.value };
132
- for (let n of L.items) n.type !== "separator" && n.key in e && (t[n.key] = e[n.key] ?? null);
133
- z.value = t, L.handleUrl && l(L.items, z.value), R("change", G(z.value));
139
+ let t = { ...B.value };
140
+ for (let n of R.items) n.type !== "separator" && n.key in e && (t[n.key] = e[n.key] ?? null);
141
+ B.value = t, R.handleUrl && u(R.items, B.value), z("change", K());
134
142
  }
135
- return F({
143
+ return I({
136
144
  clearFilter: Z,
137
145
  focusFilter: Q
138
- }), (s, c) => (b(), d(a, {
139
- open: g.open,
146
+ }), (s, c) => (x(), f(a, {
147
+ open: _.open,
140
148
  title: "Szűrők",
141
- position: g.position,
142
- onClose: c[0] ||= (e) => R("close")
149
+ position: _.position,
150
+ onClose: c[0] ||= (e) => z("close")
143
151
  }, {
144
- default: E(() => [
145
- m("div", D, [(b(!0), p(u, null, S(g.items, (e) => (b(), p("div", {
152
+ default: D(() => [
153
+ h("div", O, [(x(!0), m(d, null, C(_.items, (e) => (x(), m("div", {
146
154
  key: e.key,
147
- class: v(["data-filters__field", { "data-filters__field--full": e.fullWidth || e.type === "separator" }])
148
- }, [e.type === "separator" ? (b(), p("hr", O)) : e.type === "checkbox" ? (b(), d(n, _({
155
+ class: y(["data-filters__field", { "data-filters__field--full": e.fullWidth || e.type === "separator" }])
156
+ }, [e.type === "separator" ? (x(), m("hr", k)) : e.type === "checkbox" ? (x(), f(n, v({
149
157
  key: 1,
150
158
  ref_for: !0,
151
- ref: (t) => V(e.key, t),
152
- "model-value": z.value[e.key] ?? !1,
159
+ ref: (t) => H(e.key, t),
160
+ "model-value": B.value[e.key] ?? !1,
153
161
  label: e.label ?? e.key,
154
- "onUpdate:modelValue": (t) => K(e.key, t)
162
+ "onUpdate:modelValue": (t) => G(e.key, t)
155
163
  }, { ref_for: !0 }, e.config), null, 16, [
156
164
  "model-value",
157
165
  "label",
158
166
  "onUpdate:modelValue"
159
- ])) : (b(), p(u, { key: 2 }, [m("label", {
167
+ ])) : (x(), m(d, { key: 2 }, [h("label", {
160
168
  class: "c-label",
161
169
  for: `df-${e.key}`
162
- }, C(e.label ?? e.key), 9, k), e.type === "text" ? (b(), p("input", _({
170
+ }, w(e.label ?? e.key), 9, A), e.type === "text" ? (x(), m("input", v({
163
171
  key: 0,
164
172
  type: "text",
165
173
  class: "c-input-row",
166
174
  placeholder: e.placeholder,
167
- value: z.value[e.key] ?? "",
175
+ value: B.value[e.key] ?? "",
168
176
  ref_for: !0,
169
- ref: (t) => V(e.key, t),
177
+ ref: (t) => H(e.key, t),
170
178
  id: `df-${e.key}`,
171
- onInput: (t) => w(q)(e.key, t.target.value || null)
172
- }, { ref_for: !0 }, e.config), null, 16, A)) : e.type === "textarea" ? (b(), p("textarea", _({
179
+ onInput: (t) => T(q)(e.key, t.target.value || null)
180
+ }, { ref_for: !0 }, e.config), null, 16, j)) : e.type === "textarea" ? (x(), m("textarea", v({
173
181
  key: 1,
174
182
  class: "c-input-row data-filters__textarea",
175
183
  placeholder: e.placeholder,
176
- value: z.value[e.key] ?? "",
184
+ value: B.value[e.key] ?? "",
177
185
  ref_for: !0,
178
- ref: (t) => V(e.key, t),
186
+ ref: (t) => H(e.key, t),
179
187
  id: `df-${e.key}`
180
- }, { ref_for: !0 }, e.config, { onInput: (t) => w(q)(e.key, t.target.value || null) }), null, 16, j)) : e.type === "number" ? (b(), p("input", _({
188
+ }, { ref_for: !0 }, e.config, { onInput: (t) => T(q)(e.key, t.target.value || null) }), null, 16, M)) : e.type === "number" ? (x(), m("input", v({
181
189
  key: 2,
182
190
  type: "number",
183
191
  class: "c-input-row",
184
192
  placeholder: e.placeholder,
185
- value: z.value[e.key] ?? "",
193
+ value: B.value[e.key] ?? "",
186
194
  ref_for: !0,
187
- ref: (t) => V(e.key, t),
195
+ ref: (t) => H(e.key, t),
188
196
  id: `df-${e.key}`
189
- }, { ref_for: !0 }, e.config, { onInput: (t) => w(q)(e.key, t.target.value ? Number(t.target.value) : null) }), null, 16, M)) : e.type === "date" || e.type === "datetime" ? (b(), d(t, {
197
+ }, { ref_for: !0 }, e.config, { onInput: (t) => T(q)(e.key, t.target.value ? Number(t.target.value) : null) }), null, 16, N)) : e.type === "date" || e.type === "datetime" ? (x(), f(t, {
190
198
  key: 3,
191
199
  ref_for: !0,
192
- ref: (t) => V(e.key, t),
200
+ ref: (t) => H(e.key, t),
193
201
  id: `df-${e.key}`,
194
- "model-value": z.value[e.key] ?? null,
195
- config: H(e),
196
- "onUpdate:modelValue": (t) => K(e.key, t)
202
+ "model-value": B.value[e.key] ?? null,
203
+ config: U(e),
204
+ "onUpdate:modelValue": (t) => G(e.key, t)
197
205
  }, null, 8, [
198
206
  "id",
199
207
  "model-value",
200
208
  "config",
201
209
  "onUpdate:modelValue"
202
- ])) : e.type === "daterange" || e.type === "datetimerange" ? (b(), d(r, {
210
+ ])) : e.type === "daterange" || e.type === "datetimerange" ? (x(), f(r, {
203
211
  key: 4,
204
212
  ref_for: !0,
205
- ref: (t) => V(e.key, t),
206
- "model-value": z.value[e.key] ?? null,
207
- config: U(e),
208
- "onUpdate:modelValue": (t) => K(e.key, t)
213
+ ref: (t) => H(e.key, t),
214
+ "model-value": B.value[e.key] ?? null,
215
+ config: W(e),
216
+ "onUpdate:modelValue": (t) => G(e.key, t)
209
217
  }, null, 8, [
210
218
  "model-value",
211
219
  "config",
212
220
  "onUpdate:modelValue"
213
- ])) : e.type === "dropdown" ? (b(), d(i, {
221
+ ])) : e.type === "dropdown" ? (x(), f(i, {
214
222
  key: 5,
215
223
  ref_for: !0,
216
- ref: (t) => V(e.key, t),
217
- "model-value": z.value[e.key] ?? null,
224
+ ref: (t) => H(e.key, t),
225
+ "model-value": B.value[e.key] ?? null,
218
226
  options: e.options ?? [],
219
227
  config: {
220
228
  ...e.config ?? {},
@@ -222,43 +230,43 @@ var D = { class: "data-filters" }, O = {
222
230
  clearable: !0,
223
231
  filterable: !0
224
232
  },
225
- "onUpdate:modelValue": (t) => K(e.key, t)
233
+ "onUpdate:modelValue": (t) => G(e.key, t)
226
234
  }, null, 8, [
227
235
  "model-value",
228
236
  "options",
229
237
  "config",
230
238
  "onUpdate:modelValue"
231
- ])) : f("", !0)], 64))], 2))), 128))]),
232
- m("div", N, [h(e, {
239
+ ])) : p("", !0)], 64))], 2))), 128))]),
240
+ h("div", P, [g(e, {
233
241
  icon: "fa-solid fa-trash-can",
234
242
  disabled: !X.value,
235
243
  label: "Szűrők törlése",
236
244
  "aria-label": "Szűrők törlése",
237
245
  size: "small",
238
246
  onClick: Y
239
- }, null, 8, ["disabled"]), h(e, {
247
+ }, null, 8, ["disabled"]), g(e, {
240
248
  label: "Szűrés",
241
249
  "aria-label": "Szűrés",
242
250
  type: "success",
243
251
  onClick: J
244
252
  })]),
245
- g.historyEnabled ? (b(), p("hr", P)) : f("", !0),
246
- g.historyEnabled ? (b(), d(o, {
253
+ _.historyEnabled ? (x(), m("hr", F)) : p("", !0),
254
+ _.historyEnabled ? (x(), f(o, {
247
255
  key: 1,
248
- items: g.items,
249
- values: z.value,
250
- "storage-key": g.storageKey,
256
+ items: _.items,
257
+ values: B.value,
258
+ "storage-key": _.storageKey,
251
259
  onLoad: $,
252
260
  onChange: $
253
261
  }, null, 8, [
254
262
  "items",
255
263
  "values",
256
264
  "storage-key"
257
- ])) : f("", !0)
265
+ ])) : p("", !0)
258
266
  ]),
259
267
  _: 1
260
268
  }, 8, ["open", "position"]));
261
269
  }
262
270
  });
263
271
  //#endregion
264
- export { F as default };
272
+ export { I as default };
@@ -1 +1 @@
1
- {"version":3,"file":"admins-components78.js","names":[],"sources":["../src/components/data-table/DataFilters.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { DropdownOption } from '@/components/DropdownSelect.vue'\nimport { getFilterParams } from '@/utils/filterUrlSync'\n\nexport { getFilterParams }\n\nexport interface FilterItem {\n type: FilterItemType\n key: string\n label?: string\n placeholder?: string\n value?: any\n options?: DropdownOption[]\n fullWidth?: boolean\n config?: Record<string, any>\n displayClass?: string\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { ref, watch, onMounted } from 'vue'\nimport Sidebar, { type SidebarPosition } from '@/components/Sidebar.vue'\nimport DatePicker from '@/components/DatePicker.vue'\nimport DateRangePicker from '@/components/DateRangePicker.vue'\nimport DropdownSelect from '@/components/DropdownSelect.vue'\nimport Button from '@/components/Button.vue'\nimport Checkbox from '@/components/Checkbox.vue'\nimport FiltersHistory from '@/components/data-table/FiltersHistory.vue'\nimport { debounce } from '@/utils/debounce'\nimport { readUrlFilterParams, writeFilterParams } from '@/utils/filterUrlSync'\nimport type { DatePickerConfig, DateRangePickerConfig } from '@/types/datepickers'\nimport type { FilterItemType, PickedDate, PickedUtcRange } from '@/types/types'\n\nconst props = withDefaults(\n defineProps<{\n open?: boolean\n items: FilterItem[]\n position?: SidebarPosition\n lazy?: boolean\n handleUrl?: boolean\n historyEnabled?: boolean\n storageKey?: string\n }>(),\n {\n open: false,\n position: 'left',\n lazy: true,\n handleUrl: false,\n historyEnabled: true,\n },\n)\n\nconst emit = defineEmits<{\n close: []\n change: [filters: Record<string, any>]\n}>()\n\nconst values = ref<Record<string, any>>(getDefaults())\nconst filterRefs = ref<Record<string, any>>({})\n\nfunction setFilterRef(key: string, el: any) {\n if (el) {\n filterRefs.value[key] = el\n } else {\n delete filterRefs.value[key]\n }\n}\n\nfunction buildDatePickerConfig(item: FilterItem): DatePickerConfig {\n return {\n ...(item.config ?? {}),\n showTime: item.type === 'datetime',\n placeholder: item.placeholder ?? (item.type === 'datetime' ? 'Időpont' : 'Dátum'),\n }\n}\n\nfunction buildDateRangePickerConfig(item: FilterItem): DateRangePickerConfig {\n return {\n ...(item.config ?? {}),\n ...(!item.fullWidth ? { compact: true } : {}),\n showTime: item.type === 'datetimerange',\n }\n}\n\nfunction getDefaults(value: any = null): Record<string, any> {\n const defaults: Record<string, any> = {}\n for (const item of props.items) {\n if (item.type === 'separator') continue\n defaults[item.key] = item.value ?? value\n }\n return defaults\n}\n\nonMounted(() => {\n if (!props.handleUrl) return\n const fromUrl = readUrlFilterParams(props.items)\n if (Object.keys(fromUrl).length > 0) {\n values.value = { ...values.value, ...fromUrl }\n }\n})\nfunction filterEmptyValues(filters: Record<string, any>): Record<string, any> {\n return Object.fromEntries(\n Object.entries(filters).filter(([_, val]) => val !== null && val !== '' && val !== undefined),\n )\n}\n\nfunction update(key: string, value: any) {\n values.value = { ...values.value, [key]: value }\n\n if (!props.lazy) {\n if (props.handleUrl) writeFilterParams(props.items, values.value)\n emit('change', filterEmptyValues(values.value))\n }\n}\n\nconst debouncedUpdate = debounce((key: string, value: any) => {\n update(key, value)\n})\n\nfunction confirm() {\n if (props.handleUrl) writeFilterParams(props.items, values.value)\n emit('change', filterEmptyValues(values.value))\n emit('close')\n}\n\n/* function reset() {\n values.value = getDefaults()\n if (props.handleUrl) writeFilterParams(props.items, values.value)\n emit('change', filterEmptyValues(values.value))\n} */\n\nfunction clearAll() {\n values.value = {}\n if (props.handleUrl) writeFilterParams(props.items, values.value)\n\n emit('change', filterEmptyValues(values.value))\n}\n\nconst hasActiveFilters = ref(false)\nwatch(\n values,\n (v) => {\n hasActiveFilters.value = Object.values(v).some(\n (val) => val !== null && val !== '' && val !== undefined,\n )\n },\n { deep: true, immediate: true },\n)\n\nfunction clearFilter(key: string) {\n values.value = { ...values.value, [key]: null }\n if (props.handleUrl) writeFilterParams(props.items, values.value)\n emit('change', filterEmptyValues(values.value))\n}\n\nfunction focusFilter(key: string) {\n const ref = (filterRefs.value as Record<string, any>)[key]\n if (!ref) return\n\n if (typeof ref.focusAndOpen === 'function') {\n ref.focusAndOpen()\n return\n }\n if (typeof ref.focus === 'function') {\n ref.focus()\n }\n}\n\nfunction onHistoryLoad(loaded: Record<string, any>) {\n const next: Record<string, any> = { ...values.value }\n for (const item of props.items) {\n if (item.type === 'separator') continue\n if (item.key in loaded) {\n next[item.key] = loaded[item.key] ?? null\n }\n }\n values.value = next\n if (props.handleUrl) writeFilterParams(props.items, values.value)\n emit('change', filterEmptyValues(values.value))\n}\n\ndefineExpose({ clearFilter, focusFilter })\n</script>\n\n<template>\n <Sidebar :open=\"open\" title=\"Szűrők\" :position=\"position\" @close=\"emit('close')\">\n <div class=\"data-filters\">\n <div\n v-for=\"item in items\"\n :key=\"item.key\"\n class=\"data-filters__field\"\n :class=\"{ 'data-filters__field--full': item.fullWidth || item.type === 'separator' }\"\n >\n <hr v-if=\"item.type === 'separator'\" class=\"data-filters__separator\" />\n <template v-else-if=\"item.type === 'checkbox'\">\n <Checkbox\n :ref=\"(el: any) => setFilterRef(item.key, el)\"\n :model-value=\"(values[item.key] as boolean) ?? false\"\n :label=\"item.label ?? item.key\"\n @update:model-value=\"(val) => update(item.key, val)\"\n v-bind=\"item.config\"\n />\n </template>\n <template v-else>\n <label class=\"c-label\" :for=\"`df-${item.key}`\">{{ item.label ?? item.key }}</label>\n\n <input\n v-if=\"item.type === 'text'\"\n type=\"text\"\n class=\"c-input-row\"\n :placeholder=\"item.placeholder\"\n :value=\"values[item.key] ?? ''\"\n :ref=\"(el: any) => setFilterRef(item.key, el)\"\n :id=\"`df-${item.key}`\"\n @input=\"debouncedUpdate(item.key, ($event.target as HTMLInputElement).value || null)\"\n v-bind=\"item.config\"\n />\n\n <textarea\n v-else-if=\"item.type === 'textarea'\"\n class=\"c-input-row data-filters__textarea\"\n :placeholder=\"item.placeholder\"\n :value=\"values[item.key] ?? ''\"\n :ref=\"(el: any) => setFilterRef(item.key, el)\"\n :id=\"`df-${item.key}`\"\n v-bind=\"item.config\"\n @input=\"debouncedUpdate(item.key, ($event.target as HTMLTextAreaElement).value || null)\"\n />\n\n <input\n v-else-if=\"item.type === 'number'\"\n type=\"number\"\n class=\"c-input-row\"\n :placeholder=\"item.placeholder\"\n :value=\"values[item.key] ?? ''\"\n :ref=\"(el: any) => setFilterRef(item.key, el)\"\n :id=\"`df-${item.key}`\"\n v-bind=\"item.config\"\n @input=\"\n debouncedUpdate(\n item.key,\n ($event.target as HTMLInputElement).value\n ? Number(($event.target as HTMLInputElement).value)\n : null,\n )\n \"\n />\n\n <DatePicker\n v-else-if=\"item.type === 'date' || item.type === 'datetime'\"\n :ref=\"(el: any) => setFilterRef(item.key, el)\"\n :id=\"`df-${item.key}`\"\n :model-value=\"(values[item.key] as PickedDate) ?? null\"\n :config=\"buildDatePickerConfig(item)\"\n @update:model-value=\"update(item.key, $event)\"\n />\n\n <DateRangePicker\n v-else-if=\"item.type === 'daterange' || item.type === 'datetimerange'\"\n :ref=\"(el: any) => setFilterRef(item.key, el)\"\n :model-value=\"(values[item.key] as PickedUtcRange) ?? null\"\n :config=\"buildDateRangePickerConfig(item)\"\n @update:model-value=\"update(item.key, $event)\"\n />\n\n <DropdownSelect\n v-else-if=\"item.type === 'dropdown'\"\n :ref=\"(el: any) => setFilterRef(item.key, el)\"\n :model-value=\"(values[item.key] as string) ?? null\"\n :options=\"item.options ?? []\"\n :config=\"{\n ...(item.config ?? {}),\n placeholder: item.placeholder ?? 'Válassz...',\n clearable: true,\n filterable: true,\n }\"\n @update:model-value=\"update(item.key, $event)\"\n />\n </template>\n </div>\n </div>\n <div class=\"data-filters__footer\">\n <!-- <Button\n icon=\"fa-solid fa-trash-can\"\n :disabled=\"!hasActiveFilters\"\n label=\"Alaphelyzet visszaállítása\"\n size=\"small\"\n @click=\"reset\"\n /> -->\n <Button\n icon=\"fa-solid fa-trash-can\"\n :disabled=\"!hasActiveFilters\"\n label=\"Szűrők törlése\"\n aria-label=\"Szűrők törlése\"\n size=\"small\"\n @click=\"clearAll\"\n />\n <Button label=\"Szűrés\" aria-label=\"Szűrés\" type=\"success\" @click=\"confirm\" />\n </div>\n <hr v-if=\"historyEnabled\" class=\"separator my-3\" />\n <FiltersHistory\n v-if=\"historyEnabled\"\n :items=\"items\"\n :values=\"values\"\n :storage-key=\"storageKey\"\n @load=\"onHistoryLoad\"\n @change=\"onHistoryLoad\"\n />\n </Sidebar>\n</template>\n\n<style lang=\"scss\" src=\"@/styles/components/data-table/data-filters.scss\"></style>\n"],"mappings":"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"}
1
+ {"version":3,"file":"admins-components78.js","names":[],"sources":["../src/components/data-table/DataFilters.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { DropdownOption } from '@/components/DropdownSelect.vue'\n\nexport interface FilterItem {\n type: FilterItemType\n key: string\n label?: string\n placeholder?: string\n value?: any\n options?: DropdownOption[]\n fullWidth?: boolean\n config?: Record<string, any>\n displayClass?: string\n transformer?: (value: any) => Record<string, any> | null | undefined\n}\n\nexport interface FilterResponse {\n values: Record<string, any>\n transformed: Record<string, any>\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { ref, watch, onMounted } from 'vue'\nimport Sidebar, { type SidebarPosition } from '@/components/Sidebar.vue'\nimport DatePicker from '@/components/DatePicker.vue'\nimport DateRangePicker from '@/components/DateRangePicker.vue'\nimport DropdownSelect from '@/components/DropdownSelect.vue'\nimport Button from '@/components/Button.vue'\nimport Checkbox from '@/components/Checkbox.vue'\nimport FiltersHistory from '@/components/data-table/FiltersHistory.vue'\nimport { debounce } from '@/utils/debounce'\nimport type { DatePickerConfig, DateRangePickerConfig } from '@/types/datepickers'\nimport type { FilterItemType, PickedDate, PickedUtcRange } from '@/types/types'\nimport { filterEmptyValues, getFilterParams, writeFilterParams } from '@/utils/dataFilters'\n\n\nconst props = withDefaults(\n defineProps<{\n open?: boolean\n items: FilterItem[]\n position?: SidebarPosition\n lazy?: boolean\n handleUrl?: boolean\n historyEnabled?: boolean\n storageKey?: string\n }>(),\n {\n open: false,\n position: 'left',\n lazy: true,\n handleUrl: false,\n historyEnabled: true,\n },\n)\n\nconst emit = defineEmits<{\n close: []\n change: [response: FilterResponse]\n}>()\n\nconst values = ref<Record<string, any>>(getFilterParams(props.items) ?? {})\nconst filterRefs = ref<Record<string, any>>({})\n\nfunction setFilterRef(key: string, el: any) {\n if (el) {\n filterRefs.value[key] = el\n } else {\n delete filterRefs.value[key]\n }\n}\n\nfunction buildDatePickerConfig(item: FilterItem): DatePickerConfig {\n return {\n ...(item.config ?? {}),\n showTime: item.type === 'datetime',\n placeholder: item.placeholder ?? (item.type === 'datetime' ? 'Időpont' : 'Dátum'),\n }\n}\n\nfunction buildDateRangePickerConfig(item: FilterItem): DateRangePickerConfig {\n return {\n ...(item.config ?? {}),\n ...(!item.fullWidth ? { compact: true } : {}),\n showTime: item.type === 'datetimerange',\n }\n}\n\nonMounted(() => {\n if (!props.handleUrl) return\n const fromUrl = getFilterParams(props.items)\n if (fromUrl && Object.keys(fromUrl).length > 0) {\n values.value = { ...values.value, ...fromUrl }\n }\n})\n\nfunction update(key: string, value: any) {\n values.value = { ...values.value, [key]: value }\n\n if (!props.lazy) {\n if (props.handleUrl) writeFilterParams(props.items, values.value)\n emit('change', buildResponseEmit())\n }\n}\n\nfunction buildResponseEmit() {\n const transformedValues = props.items.reduce((acc, item) => {\n const val = values.value[item.key]\n if (item.transformer) {\n return { ...acc, ...(item.transformer(val) ?? {}) }\n }\n return { ...acc, [item.key]: val }\n }, {})\n return {\n values: filterEmptyValues(values.value),\n transformed: filterEmptyValues(transformedValues),\n }\n}\n\nconst debouncedUpdate = debounce((key: string, value: any) => {\n update(key, value)\n})\n\nfunction confirm() {\n if (props.handleUrl) writeFilterParams(props.items, values.value)\n\n emit('change', buildResponseEmit())\n emit('close')\n}\n\n/* function reset() {\n values.value = getDefaults()\n if (props.handleUrl) writeFilterParams(props.items, values.value)\n emit('change', filterEmptyValues(values.value))\n} */\n\nfunction clearAll() {\n values.value = {}\n if (props.handleUrl) writeFilterParams(props.items, values.value)\n\n emit('change', buildResponseEmit())\n}\n\nconst hasActiveFilters = ref(false)\nwatch(\n values,\n (v) => {\n hasActiveFilters.value = Object.values(v).some(\n (val) => val !== null && val !== '' && val !== undefined,\n )\n },\n { deep: true, immediate: true },\n)\n\nfunction clearFilter(key: string) {\n values.value = { ...values.value, [key]: null }\n if (props.handleUrl) writeFilterParams(props.items, values.value)\n emit('change', buildResponseEmit())\n}\n\nfunction focusFilter(key: string) {\n const ref = (filterRefs.value as Record<string, any>)[key]\n if (!ref) return\n\n if (typeof ref.focusAndOpen === 'function') {\n ref.focusAndOpen()\n return\n }\n if (typeof ref.focus === 'function') {\n ref.focus()\n }\n}\n\nfunction onHistoryLoad(loaded: Record<string, any>) {\n const next: Record<string, any> = { ...values.value }\n for (const item of props.items) {\n if (item.type === 'separator') continue\n if (item.key in loaded) {\n next[item.key] = loaded[item.key] ?? null\n }\n }\n values.value = next\n if (props.handleUrl) writeFilterParams(props.items, values.value)\n emit('change', buildResponseEmit())\n}\n\ndefineExpose({ clearFilter, focusFilter })\n</script>\n\n<template>\n <Sidebar :open=\"open\" title=\"Szűrők\" :position=\"position\" @close=\"emit('close')\">\n <div class=\"data-filters\">\n <div\n v-for=\"item in items\"\n :key=\"item.key\"\n class=\"data-filters__field\"\n :class=\"{ 'data-filters__field--full': item.fullWidth || item.type === 'separator' }\"\n >\n <hr v-if=\"item.type === 'separator'\" class=\"data-filters__separator\" />\n <template v-else-if=\"item.type === 'checkbox'\">\n <Checkbox\n :ref=\"(el: any) => setFilterRef(item.key, el)\"\n :model-value=\"(values[item.key] as boolean) ?? false\"\n :label=\"item.label ?? item.key\"\n @update:model-value=\"(val) => update(item.key, val)\"\n v-bind=\"item.config\"\n />\n </template>\n <template v-else>\n <label class=\"c-label\" :for=\"`df-${item.key}`\">{{ item.label ?? item.key }}</label>\n\n <input\n v-if=\"item.type === 'text'\"\n type=\"text\"\n class=\"c-input-row\"\n :placeholder=\"item.placeholder\"\n :value=\"values[item.key] ?? ''\"\n :ref=\"(el: any) => setFilterRef(item.key, el)\"\n :id=\"`df-${item.key}`\"\n @input=\"debouncedUpdate(item.key, ($event.target as HTMLInputElement).value || null)\"\n v-bind=\"item.config\"\n />\n\n <textarea\n v-else-if=\"item.type === 'textarea'\"\n class=\"c-input-row data-filters__textarea\"\n :placeholder=\"item.placeholder\"\n :value=\"values[item.key] ?? ''\"\n :ref=\"(el: any) => setFilterRef(item.key, el)\"\n :id=\"`df-${item.key}`\"\n v-bind=\"item.config\"\n @input=\"debouncedUpdate(item.key, ($event.target as HTMLTextAreaElement).value || null)\"\n />\n\n <input\n v-else-if=\"item.type === 'number'\"\n type=\"number\"\n class=\"c-input-row\"\n :placeholder=\"item.placeholder\"\n :value=\"values[item.key] ?? ''\"\n :ref=\"(el: any) => setFilterRef(item.key, el)\"\n :id=\"`df-${item.key}`\"\n v-bind=\"item.config\"\n @input=\"\n debouncedUpdate(\n item.key,\n ($event.target as HTMLInputElement).value\n ? Number(($event.target as HTMLInputElement).value)\n : null,\n )\n \"\n />\n\n <DatePicker\n v-else-if=\"item.type === 'date' || item.type === 'datetime'\"\n :ref=\"(el: any) => setFilterRef(item.key, el)\"\n :id=\"`df-${item.key}`\"\n :model-value=\"(values[item.key] as PickedDate) ?? null\"\n :config=\"buildDatePickerConfig(item)\"\n @update:model-value=\"update(item.key, $event)\"\n />\n\n <DateRangePicker\n v-else-if=\"item.type === 'daterange' || item.type === 'datetimerange'\"\n :ref=\"(el: any) => setFilterRef(item.key, el)\"\n :model-value=\"(values[item.key] as PickedUtcRange) ?? null\"\n :config=\"buildDateRangePickerConfig(item)\"\n @update:model-value=\"update(item.key, $event)\"\n />\n\n <DropdownSelect\n v-else-if=\"item.type === 'dropdown'\"\n :ref=\"(el: any) => setFilterRef(item.key, el)\"\n :model-value=\"(values[item.key] as string) ?? null\"\n :options=\"item.options ?? []\"\n :config=\"{\n ...(item.config ?? {}),\n placeholder: item.placeholder ?? 'Válassz...',\n clearable: true,\n filterable: true,\n }\"\n @update:model-value=\"update(item.key, $event)\"\n />\n </template>\n </div>\n </div>\n <div class=\"data-filters__footer\">\n <!-- <Button\n icon=\"fa-solid fa-trash-can\"\n :disabled=\"!hasActiveFilters\"\n label=\"Alaphelyzet visszaállítása\"\n size=\"small\"\n @click=\"reset\"\n /> -->\n <Button\n icon=\"fa-solid fa-trash-can\"\n :disabled=\"!hasActiveFilters\"\n label=\"Szűrők törlése\"\n aria-label=\"Szűrők törlése\"\n size=\"small\"\n @click=\"clearAll\"\n />\n <Button label=\"Szűrés\" aria-label=\"Szűrés\" type=\"success\" @click=\"confirm\" />\n </div>\n <hr v-if=\"historyEnabled\" class=\"separator my-3\" />\n <FiltersHistory\n v-if=\"historyEnabled\"\n :items=\"items\"\n :values=\"values\"\n :storage-key=\"storageKey\"\n @load=\"onHistoryLoad\"\n @change=\"onHistoryLoad\"\n />\n </Sidebar>\n</template>\n\n<style lang=\"scss\" src=\"@/styles/components/data-table/data-filters.scss\"></style>\n"],"mappings":"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"}
@@ -1,5 +1,4 @@
1
1
  import './src/styles/components/data-table/data-filters.scss_vue_type_style_index_0_src_true_lang.css';
2
- import "./admins-components77.js";
3
2
  import e from "./admins-components78.js";
4
3
  /* empty css */
5
4
  //#region src/components/data-table/DataFilters.vue
@@ -1 +1 @@
1
- {"version":3,"file":"admins-components80.js","names":[],"sources":["../src/components/data-table/DataFilters.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { DropdownOption } from '@/components/DropdownSelect.vue'\nimport { getFilterParams } from '@/utils/filterUrlSync'\n\nexport { getFilterParams }\n\nexport interface FilterItem {\n type: FilterItemType\n key: string\n label?: string\n placeholder?: string\n value?: any\n options?: DropdownOption[]\n fullWidth?: boolean\n config?: Record<string, any>\n displayClass?: string\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { ref, watch, onMounted } from 'vue'\nimport Sidebar, { type SidebarPosition } from '@/components/Sidebar.vue'\nimport DatePicker from '@/components/DatePicker.vue'\nimport DateRangePicker from '@/components/DateRangePicker.vue'\nimport DropdownSelect from '@/components/DropdownSelect.vue'\nimport Button from '@/components/Button.vue'\nimport Checkbox from '@/components/Checkbox.vue'\nimport FiltersHistory from '@/components/data-table/FiltersHistory.vue'\nimport { debounce } from '@/utils/debounce'\nimport { readUrlFilterParams, writeFilterParams } from '@/utils/filterUrlSync'\nimport type { DatePickerConfig, DateRangePickerConfig } from '@/types/datepickers'\nimport type { FilterItemType, PickedDate, PickedUtcRange } from '@/types/types'\n\nconst props = withDefaults(\n defineProps<{\n open?: boolean\n items: FilterItem[]\n position?: SidebarPosition\n lazy?: boolean\n handleUrl?: boolean\n historyEnabled?: boolean\n storageKey?: string\n }>(),\n {\n open: false,\n position: 'left',\n lazy: true,\n handleUrl: false,\n historyEnabled: true,\n },\n)\n\nconst emit = defineEmits<{\n close: []\n change: [filters: Record<string, any>]\n}>()\n\nconst values = ref<Record<string, any>>(getDefaults())\nconst filterRefs = ref<Record<string, any>>({})\n\nfunction setFilterRef(key: string, el: any) {\n if (el) {\n filterRefs.value[key] = el\n } else {\n delete filterRefs.value[key]\n }\n}\n\nfunction buildDatePickerConfig(item: FilterItem): DatePickerConfig {\n return {\n ...(item.config ?? {}),\n showTime: item.type === 'datetime',\n placeholder: item.placeholder ?? (item.type === 'datetime' ? 'Időpont' : 'Dátum'),\n }\n}\n\nfunction buildDateRangePickerConfig(item: FilterItem): DateRangePickerConfig {\n return {\n ...(item.config ?? {}),\n ...(!item.fullWidth ? { compact: true } : {}),\n showTime: item.type === 'datetimerange',\n }\n}\n\nfunction getDefaults(value: any = null): Record<string, any> {\n const defaults: Record<string, any> = {}\n for (const item of props.items) {\n if (item.type === 'separator') continue\n defaults[item.key] = item.value ?? value\n }\n return defaults\n}\n\nonMounted(() => {\n if (!props.handleUrl) return\n const fromUrl = readUrlFilterParams(props.items)\n if (Object.keys(fromUrl).length > 0) {\n values.value = { ...values.value, ...fromUrl }\n }\n})\nfunction filterEmptyValues(filters: Record<string, any>): Record<string, any> {\n return Object.fromEntries(\n Object.entries(filters).filter(([_, val]) => val !== null && val !== '' && val !== undefined),\n )\n}\n\nfunction update(key: string, value: any) {\n values.value = { ...values.value, [key]: value }\n\n if (!props.lazy) {\n if (props.handleUrl) writeFilterParams(props.items, values.value)\n emit('change', filterEmptyValues(values.value))\n }\n}\n\nconst debouncedUpdate = debounce((key: string, value: any) => {\n update(key, value)\n})\n\nfunction confirm() {\n if (props.handleUrl) writeFilterParams(props.items, values.value)\n emit('change', filterEmptyValues(values.value))\n emit('close')\n}\n\n/* function reset() {\n values.value = getDefaults()\n if (props.handleUrl) writeFilterParams(props.items, values.value)\n emit('change', filterEmptyValues(values.value))\n} */\n\nfunction clearAll() {\n values.value = {}\n if (props.handleUrl) writeFilterParams(props.items, values.value)\n\n emit('change', filterEmptyValues(values.value))\n}\n\nconst hasActiveFilters = ref(false)\nwatch(\n values,\n (v) => {\n hasActiveFilters.value = Object.values(v).some(\n (val) => val !== null && val !== '' && val !== undefined,\n )\n },\n { deep: true, immediate: true },\n)\n\nfunction clearFilter(key: string) {\n values.value = { ...values.value, [key]: null }\n if (props.handleUrl) writeFilterParams(props.items, values.value)\n emit('change', filterEmptyValues(values.value))\n}\n\nfunction focusFilter(key: string) {\n const ref = (filterRefs.value as Record<string, any>)[key]\n if (!ref) return\n\n if (typeof ref.focusAndOpen === 'function') {\n ref.focusAndOpen()\n return\n }\n if (typeof ref.focus === 'function') {\n ref.focus()\n }\n}\n\nfunction onHistoryLoad(loaded: Record<string, any>) {\n const next: Record<string, any> = { ...values.value }\n for (const item of props.items) {\n if (item.type === 'separator') continue\n if (item.key in loaded) {\n next[item.key] = loaded[item.key] ?? null\n }\n }\n values.value = next\n if (props.handleUrl) writeFilterParams(props.items, values.value)\n emit('change', filterEmptyValues(values.value))\n}\n\ndefineExpose({ clearFilter, focusFilter })\n</script>\n\n<template>\n <Sidebar :open=\"open\" title=\"Szűrők\" :position=\"position\" @close=\"emit('close')\">\n <div class=\"data-filters\">\n <div\n v-for=\"item in items\"\n :key=\"item.key\"\n class=\"data-filters__field\"\n :class=\"{ 'data-filters__field--full': item.fullWidth || item.type === 'separator' }\"\n >\n <hr v-if=\"item.type === 'separator'\" class=\"data-filters__separator\" />\n <template v-else-if=\"item.type === 'checkbox'\">\n <Checkbox\n :ref=\"(el: any) => setFilterRef(item.key, el)\"\n :model-value=\"(values[item.key] as boolean) ?? false\"\n :label=\"item.label ?? item.key\"\n @update:model-value=\"(val) => update(item.key, val)\"\n v-bind=\"item.config\"\n />\n </template>\n <template v-else>\n <label class=\"c-label\" :for=\"`df-${item.key}`\">{{ item.label ?? item.key }}</label>\n\n <input\n v-if=\"item.type === 'text'\"\n type=\"text\"\n class=\"c-input-row\"\n :placeholder=\"item.placeholder\"\n :value=\"values[item.key] ?? ''\"\n :ref=\"(el: any) => setFilterRef(item.key, el)\"\n :id=\"`df-${item.key}`\"\n @input=\"debouncedUpdate(item.key, ($event.target as HTMLInputElement).value || null)\"\n v-bind=\"item.config\"\n />\n\n <textarea\n v-else-if=\"item.type === 'textarea'\"\n class=\"c-input-row data-filters__textarea\"\n :placeholder=\"item.placeholder\"\n :value=\"values[item.key] ?? ''\"\n :ref=\"(el: any) => setFilterRef(item.key, el)\"\n :id=\"`df-${item.key}`\"\n v-bind=\"item.config\"\n @input=\"debouncedUpdate(item.key, ($event.target as HTMLTextAreaElement).value || null)\"\n />\n\n <input\n v-else-if=\"item.type === 'number'\"\n type=\"number\"\n class=\"c-input-row\"\n :placeholder=\"item.placeholder\"\n :value=\"values[item.key] ?? ''\"\n :ref=\"(el: any) => setFilterRef(item.key, el)\"\n :id=\"`df-${item.key}`\"\n v-bind=\"item.config\"\n @input=\"\n debouncedUpdate(\n item.key,\n ($event.target as HTMLInputElement).value\n ? Number(($event.target as HTMLInputElement).value)\n : null,\n )\n \"\n />\n\n <DatePicker\n v-else-if=\"item.type === 'date' || item.type === 'datetime'\"\n :ref=\"(el: any) => setFilterRef(item.key, el)\"\n :id=\"`df-${item.key}`\"\n :model-value=\"(values[item.key] as PickedDate) ?? null\"\n :config=\"buildDatePickerConfig(item)\"\n @update:model-value=\"update(item.key, $event)\"\n />\n\n <DateRangePicker\n v-else-if=\"item.type === 'daterange' || item.type === 'datetimerange'\"\n :ref=\"(el: any) => setFilterRef(item.key, el)\"\n :model-value=\"(values[item.key] as PickedUtcRange) ?? null\"\n :config=\"buildDateRangePickerConfig(item)\"\n @update:model-value=\"update(item.key, $event)\"\n />\n\n <DropdownSelect\n v-else-if=\"item.type === 'dropdown'\"\n :ref=\"(el: any) => setFilterRef(item.key, el)\"\n :model-value=\"(values[item.key] as string) ?? null\"\n :options=\"item.options ?? []\"\n :config=\"{\n ...(item.config ?? {}),\n placeholder: item.placeholder ?? 'Válassz...',\n clearable: true,\n filterable: true,\n }\"\n @update:model-value=\"update(item.key, $event)\"\n />\n </template>\n </div>\n </div>\n <div class=\"data-filters__footer\">\n <!-- <Button\n icon=\"fa-solid fa-trash-can\"\n :disabled=\"!hasActiveFilters\"\n label=\"Alaphelyzet visszaállítása\"\n size=\"small\"\n @click=\"reset\"\n /> -->\n <Button\n icon=\"fa-solid fa-trash-can\"\n :disabled=\"!hasActiveFilters\"\n label=\"Szűrők törlése\"\n aria-label=\"Szűrők törlése\"\n size=\"small\"\n @click=\"clearAll\"\n />\n <Button label=\"Szűrés\" aria-label=\"Szűrés\" type=\"success\" @click=\"confirm\" />\n </div>\n <hr v-if=\"historyEnabled\" class=\"separator my-3\" />\n <FiltersHistory\n v-if=\"historyEnabled\"\n :items=\"items\"\n :values=\"values\"\n :storage-key=\"storageKey\"\n @load=\"onHistoryLoad\"\n @change=\"onHistoryLoad\"\n />\n </Sidebar>\n</template>\n\n<style lang=\"scss\" src=\"@/styles/components/data-table/data-filters.scss\"></style>\n"],"mappings":""}
1
+ {"version":3,"file":"admins-components80.js","names":[],"sources":["../src/components/data-table/DataFilters.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { DropdownOption } from '@/components/DropdownSelect.vue'\n\nexport interface FilterItem {\n type: FilterItemType\n key: string\n label?: string\n placeholder?: string\n value?: any\n options?: DropdownOption[]\n fullWidth?: boolean\n config?: Record<string, any>\n displayClass?: string\n transformer?: (value: any) => Record<string, any> | null | undefined\n}\n\nexport interface FilterResponse {\n values: Record<string, any>\n transformed: Record<string, any>\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { ref, watch, onMounted } from 'vue'\nimport Sidebar, { type SidebarPosition } from '@/components/Sidebar.vue'\nimport DatePicker from '@/components/DatePicker.vue'\nimport DateRangePicker from '@/components/DateRangePicker.vue'\nimport DropdownSelect from '@/components/DropdownSelect.vue'\nimport Button from '@/components/Button.vue'\nimport Checkbox from '@/components/Checkbox.vue'\nimport FiltersHistory from '@/components/data-table/FiltersHistory.vue'\nimport { debounce } from '@/utils/debounce'\nimport type { DatePickerConfig, DateRangePickerConfig } from '@/types/datepickers'\nimport type { FilterItemType, PickedDate, PickedUtcRange } from '@/types/types'\nimport { filterEmptyValues, getFilterParams, writeFilterParams } from '@/utils/dataFilters'\n\n\nconst props = withDefaults(\n defineProps<{\n open?: boolean\n items: FilterItem[]\n position?: SidebarPosition\n lazy?: boolean\n handleUrl?: boolean\n historyEnabled?: boolean\n storageKey?: string\n }>(),\n {\n open: false,\n position: 'left',\n lazy: true,\n handleUrl: false,\n historyEnabled: true,\n },\n)\n\nconst emit = defineEmits<{\n close: []\n change: [response: FilterResponse]\n}>()\n\nconst values = ref<Record<string, any>>(getFilterParams(props.items) ?? {})\nconst filterRefs = ref<Record<string, any>>({})\n\nfunction setFilterRef(key: string, el: any) {\n if (el) {\n filterRefs.value[key] = el\n } else {\n delete filterRefs.value[key]\n }\n}\n\nfunction buildDatePickerConfig(item: FilterItem): DatePickerConfig {\n return {\n ...(item.config ?? {}),\n showTime: item.type === 'datetime',\n placeholder: item.placeholder ?? (item.type === 'datetime' ? 'Időpont' : 'Dátum'),\n }\n}\n\nfunction buildDateRangePickerConfig(item: FilterItem): DateRangePickerConfig {\n return {\n ...(item.config ?? {}),\n ...(!item.fullWidth ? { compact: true } : {}),\n showTime: item.type === 'datetimerange',\n }\n}\n\nonMounted(() => {\n if (!props.handleUrl) return\n const fromUrl = getFilterParams(props.items)\n if (fromUrl && Object.keys(fromUrl).length > 0) {\n values.value = { ...values.value, ...fromUrl }\n }\n})\n\nfunction update(key: string, value: any) {\n values.value = { ...values.value, [key]: value }\n\n if (!props.lazy) {\n if (props.handleUrl) writeFilterParams(props.items, values.value)\n emit('change', buildResponseEmit())\n }\n}\n\nfunction buildResponseEmit() {\n const transformedValues = props.items.reduce((acc, item) => {\n const val = values.value[item.key]\n if (item.transformer) {\n return { ...acc, ...(item.transformer(val) ?? {}) }\n }\n return { ...acc, [item.key]: val }\n }, {})\n return {\n values: filterEmptyValues(values.value),\n transformed: filterEmptyValues(transformedValues),\n }\n}\n\nconst debouncedUpdate = debounce((key: string, value: any) => {\n update(key, value)\n})\n\nfunction confirm() {\n if (props.handleUrl) writeFilterParams(props.items, values.value)\n\n emit('change', buildResponseEmit())\n emit('close')\n}\n\n/* function reset() {\n values.value = getDefaults()\n if (props.handleUrl) writeFilterParams(props.items, values.value)\n emit('change', filterEmptyValues(values.value))\n} */\n\nfunction clearAll() {\n values.value = {}\n if (props.handleUrl) writeFilterParams(props.items, values.value)\n\n emit('change', buildResponseEmit())\n}\n\nconst hasActiveFilters = ref(false)\nwatch(\n values,\n (v) => {\n hasActiveFilters.value = Object.values(v).some(\n (val) => val !== null && val !== '' && val !== undefined,\n )\n },\n { deep: true, immediate: true },\n)\n\nfunction clearFilter(key: string) {\n values.value = { ...values.value, [key]: null }\n if (props.handleUrl) writeFilterParams(props.items, values.value)\n emit('change', buildResponseEmit())\n}\n\nfunction focusFilter(key: string) {\n const ref = (filterRefs.value as Record<string, any>)[key]\n if (!ref) return\n\n if (typeof ref.focusAndOpen === 'function') {\n ref.focusAndOpen()\n return\n }\n if (typeof ref.focus === 'function') {\n ref.focus()\n }\n}\n\nfunction onHistoryLoad(loaded: Record<string, any>) {\n const next: Record<string, any> = { ...values.value }\n for (const item of props.items) {\n if (item.type === 'separator') continue\n if (item.key in loaded) {\n next[item.key] = loaded[item.key] ?? null\n }\n }\n values.value = next\n if (props.handleUrl) writeFilterParams(props.items, values.value)\n emit('change', buildResponseEmit())\n}\n\ndefineExpose({ clearFilter, focusFilter })\n</script>\n\n<template>\n <Sidebar :open=\"open\" title=\"Szűrők\" :position=\"position\" @close=\"emit('close')\">\n <div class=\"data-filters\">\n <div\n v-for=\"item in items\"\n :key=\"item.key\"\n class=\"data-filters__field\"\n :class=\"{ 'data-filters__field--full': item.fullWidth || item.type === 'separator' }\"\n >\n <hr v-if=\"item.type === 'separator'\" class=\"data-filters__separator\" />\n <template v-else-if=\"item.type === 'checkbox'\">\n <Checkbox\n :ref=\"(el: any) => setFilterRef(item.key, el)\"\n :model-value=\"(values[item.key] as boolean) ?? false\"\n :label=\"item.label ?? item.key\"\n @update:model-value=\"(val) => update(item.key, val)\"\n v-bind=\"item.config\"\n />\n </template>\n <template v-else>\n <label class=\"c-label\" :for=\"`df-${item.key}`\">{{ item.label ?? item.key }}</label>\n\n <input\n v-if=\"item.type === 'text'\"\n type=\"text\"\n class=\"c-input-row\"\n :placeholder=\"item.placeholder\"\n :value=\"values[item.key] ?? ''\"\n :ref=\"(el: any) => setFilterRef(item.key, el)\"\n :id=\"`df-${item.key}`\"\n @input=\"debouncedUpdate(item.key, ($event.target as HTMLInputElement).value || null)\"\n v-bind=\"item.config\"\n />\n\n <textarea\n v-else-if=\"item.type === 'textarea'\"\n class=\"c-input-row data-filters__textarea\"\n :placeholder=\"item.placeholder\"\n :value=\"values[item.key] ?? ''\"\n :ref=\"(el: any) => setFilterRef(item.key, el)\"\n :id=\"`df-${item.key}`\"\n v-bind=\"item.config\"\n @input=\"debouncedUpdate(item.key, ($event.target as HTMLTextAreaElement).value || null)\"\n />\n\n <input\n v-else-if=\"item.type === 'number'\"\n type=\"number\"\n class=\"c-input-row\"\n :placeholder=\"item.placeholder\"\n :value=\"values[item.key] ?? ''\"\n :ref=\"(el: any) => setFilterRef(item.key, el)\"\n :id=\"`df-${item.key}`\"\n v-bind=\"item.config\"\n @input=\"\n debouncedUpdate(\n item.key,\n ($event.target as HTMLInputElement).value\n ? Number(($event.target as HTMLInputElement).value)\n : null,\n )\n \"\n />\n\n <DatePicker\n v-else-if=\"item.type === 'date' || item.type === 'datetime'\"\n :ref=\"(el: any) => setFilterRef(item.key, el)\"\n :id=\"`df-${item.key}`\"\n :model-value=\"(values[item.key] as PickedDate) ?? null\"\n :config=\"buildDatePickerConfig(item)\"\n @update:model-value=\"update(item.key, $event)\"\n />\n\n <DateRangePicker\n v-else-if=\"item.type === 'daterange' || item.type === 'datetimerange'\"\n :ref=\"(el: any) => setFilterRef(item.key, el)\"\n :model-value=\"(values[item.key] as PickedUtcRange) ?? null\"\n :config=\"buildDateRangePickerConfig(item)\"\n @update:model-value=\"update(item.key, $event)\"\n />\n\n <DropdownSelect\n v-else-if=\"item.type === 'dropdown'\"\n :ref=\"(el: any) => setFilterRef(item.key, el)\"\n :model-value=\"(values[item.key] as string) ?? null\"\n :options=\"item.options ?? []\"\n :config=\"{\n ...(item.config ?? {}),\n placeholder: item.placeholder ?? 'Válassz...',\n clearable: true,\n filterable: true,\n }\"\n @update:model-value=\"update(item.key, $event)\"\n />\n </template>\n </div>\n </div>\n <div class=\"data-filters__footer\">\n <!-- <Button\n icon=\"fa-solid fa-trash-can\"\n :disabled=\"!hasActiveFilters\"\n label=\"Alaphelyzet visszaállítása\"\n size=\"small\"\n @click=\"reset\"\n /> -->\n <Button\n icon=\"fa-solid fa-trash-can\"\n :disabled=\"!hasActiveFilters\"\n label=\"Szűrők törlése\"\n aria-label=\"Szűrők törlése\"\n size=\"small\"\n @click=\"clearAll\"\n />\n <Button label=\"Szűrés\" aria-label=\"Szűrés\" type=\"success\" @click=\"confirm\" />\n </div>\n <hr v-if=\"historyEnabled\" class=\"separator my-3\" />\n <FiltersHistory\n v-if=\"historyEnabled\"\n :items=\"items\"\n :values=\"values\"\n :storage-key=\"storageKey\"\n @load=\"onHistoryLoad\"\n @change=\"onHistoryLoad\"\n />\n </Sidebar>\n</template>\n\n<style lang=\"scss\" src=\"@/styles/components/data-table/data-filters.scss\"></style>\n"],"mappings":""}
@@ -2,7 +2,6 @@ import e from "./admins-components6.js";
2
2
  import t from "./admins-components61.js";
3
3
  import n from "./admins-components64.js";
4
4
  import r from "./admins-components68.js";
5
- import "./admins-components69.js";
6
5
  import i from "./admins-components71.js";
7
6
  import { getFilterParams as a } from "./admins-components77.js";
8
7
  import o from "./admins-components80.js";
@@ -88,7 +87,7 @@ var S = { class: "ac-component" }, C = { class: "flex-center gap-2 mb-3 wrap-on-
88
87
  }, 300);
89
88
  }
90
89
  function K(e) {
91
- B.value = e, k("filter-change", e);
90
+ B.value = e.values, k("filter-change", e.transformed);
92
91
  }
93
92
  let q = u(() => Object.values(B.value).filter((e) => e != null && e !== "").length), J = u(() => !!O.pagination && (O.items.length > 0 || !O.loading));
94
93
  return (a, u) => (b(), p("div", S, [m("div", {
@@ -1 +1 @@
1
- {"version":3,"file":"admins-components87.js","names":[],"sources":["../src/components/data-table/DataList.vue"],"sourcesContent":["<script lang=\"ts\">\nexport { getDefaultPaginator } from '@/components/data-table/DataPaginator.vue'\nexport type { PaginatorSettings } from '@/types/data-list'\n\nexport interface DataListProps {\n config: DataListConfig\n items: Record<string, unknown>[]\n settings?: Partial<DataListSettings>\n id: string\n layoutBreakpoint?: number\n orderable?: boolean\n pagination?: PaginatorSettings\n filters?: FilterItem[]\n historyEnabled?: boolean\n loading?: boolean\n handleUrl?: boolean\n}\n\nexport const dataListDefaults = {\n layoutBreakpoint: 768,\n orderable: true,\n historyEnabled: true,\n loading: false,\n handleUrl: false,\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { ref, computed, onMounted, onBeforeUnmount } from 'vue'\nimport DataTable from '@/components/data-table/DataTable.vue'\nimport DataCards from '@/components/data-table/DataCards.vue'\nimport DataListOptions from '@/components/data-table/DataListOptions.vue'\nimport DataPaginator from '@/components/data-table/DataPaginator.vue'\nimport Button from '@/components/Button.vue'\nimport type {\n DataListConfig,\n DataListSettings,\n PageSettings,\n PaginatorSettings,\n} from '@/types/data-list'\nimport type { FilterValue } from '@/types/data-list'\nimport DataFilters, {\n getFilterParams,\n type FilterItem,\n} from '@/components/data-table/DataFilters.vue'\nimport FilterTags from '@/components/data-table/FilterTags.vue'\nimport DataListGuide from '@/components/data-table/DataListGuide.vue'\n\nconst dataFiltersRef = ref<InstanceType<typeof DataFilters> | null>(null)\n\nconst props = withDefaults(defineProps<DataListProps>(), {\n ...dataListDefaults,\n})\n\nconst emit = defineEmits<{\n 'filter-change': [filters: Record<string, FilterValue>]\n 'selection-change': [selected: unknown[]]\n 'settings-change': [settings: DataListSettings]\n 'pagination-change': [pagination: PageSettings]\n 'sort-change': [sort: { key: string; direction: 'asc' | 'desc' }]\n}>()\n\nconst showOptions = ref(false)\nconst showGuide = ref(false)\nconst resolvedSettings = ref<DataListSettings | null>(null)\nconst isMobile = ref(false)\nconst root = ref<HTMLElement | null>(null)\nconst showFilters = ref(false)\n\nconst hasTextFilter = computed(() =>\n props.filters?.some((item) => item.type === 'text' || item.type === 'textarea'),\n)\n\nconst exactMatchFilterItem: FilterItem = {\n type: 'checkbox',\n key: 'exactMatch',\n label: 'Pontos egyezés',\n fullWidth: true,\n config: {\n labelAlignmentFix: true,\n },\n displayClass: 'highlight-chip',\n}\n\nfunction ensureExactMatchItem(items: FilterItem[]): FilterItem[] {\n if (!hasTextFilter.value) return items\n if (items.some((i) => i.key === 'exactMatch')) return items\n\n return [exactMatchFilterItem, ...items]\n}\n\nconst resolvedFilters = computed<FilterItem[]>(() => ensureExactMatchItem(props.filters ?? []))\n\nconst activeFilters = ref<Record<string, any>>(\n props.filters ? (getFilterParams(resolvedFilters.value) ?? {}) : {},\n)\n\nlet resizeObserver: ResizeObserver | null = null\n\nonMounted(() => {\n resizeObserver = new ResizeObserver((entries) => {\n isMobile.value = (entries[0]?.contentRect.width ?? 0) < props.layoutBreakpoint\n })\n if (root.value) resizeObserver.observe(root.value)\n})\n\nonBeforeUnmount(() => resizeObserver?.disconnect())\n\nconst effectiveLayout = computed<'table' | 'cards'>(() => {\n const layout = resolvedSettings.value?.layout\n if (layout === 'table' || layout === 'cards') return layout\n return isMobile.value ? 'cards' : 'table'\n})\n\nconst internalConfig = computed<DataListConfig>(() => {\n if (!resolvedSettings.value) return props.config\n const order = resolvedSettings.value.columnOrder\n const mapped = props.config.columns.map((c) => ({\n ...c,\n visible: resolvedSettings.value!.columns[c.property] ?? c.visible !== false,\n }))\n if (order?.length) {\n mapped.sort((a, b) => {\n const ai = order.indexOf(a.property)\n const bi = order.indexOf(b.property)\n return (ai === -1 ? 999 : ai) - (bi === -1 ? 999 : bi)\n })\n }\n return { ...props.config, columns: mapped }\n})\n\nfunction onSettingsChange(s: DataListSettings) {\n resolvedSettings.value = s\n emit('settings-change', s)\n}\n\ndefineExpose({\n openOptions: () => (showOptions.value = true),\n closeOptions: () => (showOptions.value = false),\n openFilters: () => (showFilters.value = true),\n closeFilters: () => (showFilters.value = false),\n})\n\nasync function openFilter(key: string) {\n showFilters.value = true\n setTimeout(() => {\n dataFiltersRef.value?.focusFilter(key)\n }, 300)\n}\n\nfunction onFilterChange(values: Record<string, any>) {\n activeFilters.value = values\n emit('filter-change', values)\n}\n\nconst activeFiltersCount = computed(\n () => Object.values(activeFilters.value).filter((v) => v != null && v !== '').length,\n)\n\nconst showPaginator = computed(\n () => !!props.pagination && (props.items.length > 0 || !props.loading),\n)\n</script>\n\n<template>\n <div class=\"ac-component\">\n <div ref=\"root\" class=\"c-data-list\">\n <template v-if=\"resolvedFilters && resolvedFilters.length > 0\">\n <div class=\"flex-center gap-2 mb-3 wrap-on-small\">\n <Button\n label=\"Szűrők megnyitása\"\n icon=\"fa-solid fa-filter\"\n @click=\"showFilters = true\"\n style=\"flex-shrink: 0\"\n :type=\"activeFiltersCount > 0 ? 'info' : 'normal'\"\n :indicator=\"activeFiltersCount > 0 ? activeFiltersCount : undefined\"\n />\n <div class=\"flex-center gap-1\">\n <FilterTags\n :filters=\"activeFilters\"\n :items=\"resolvedFilters\"\n @remove=\"(key: string) => dataFiltersRef?.clearFilter(key)\"\n @openFilter=\"openFilter\"\n />\n </div>\n </div>\n <DataFilters\n ref=\"dataFiltersRef\"\n :open=\"showFilters\"\n :items=\"resolvedFilters\"\n lazy\n :handle-url=\"handleUrl\"\n :storage-key=\"id\"\n @close=\"showFilters = false\"\n @change=\"onFilterChange\"\n />\n </template>\n\n <div class=\"c-data-list__toolbar\">\n <Button\n label=\"Beállítások\"\n icon=\"fa-solid fa-gear\"\n class=\"c-data-list__toolbar__item\"\n size=\"small\"\n @click=\"showOptions = true\"\n />\n <Button\n label=\"Súgó\"\n icon=\"fa-solid fa-question\"\n icon-position=\"right\"\n class=\"c-data-list__toolbar__item ml-auto\"\n label-alignment-fix\n size=\"small\"\n @click=\"showGuide = true\"\n />\n </div>\n <DataListGuide :open=\"showGuide\" @close=\"showGuide = false\" />\n <DataTable\n v-if=\"effectiveLayout === 'table'\"\n :config=\"internalConfig\"\n :loading=\"loading\"\n :items=\"items\"\n :settings=\"resolvedSettings ?? undefined\"\n @filter-change=\"emit('filter-change', $event)\"\n @selection-change=\"emit('selection-change', $event)\"\n @sort-change=\"emit('sort-change', $event)\"\n />\n\n <DataCards\n v-else\n :config=\"internalConfig\"\n :loading=\"loading\"\n :items=\"items\"\n :settings=\"resolvedSettings ?? undefined\"\n @selection-change=\"emit('selection-change', $event)\"\n />\n\n <DataPaginator\n v-if=\"pagination && showPaginator\"\n :settings=\"pagination\"\n :storage-key=\"id\"\n @update:pagination=\"emit('pagination-change', $event)\"\n />\n\n <DataListOptions\n :open=\"showOptions\"\n :columns=\"config.columns\"\n :settings=\"settings ?? {}\"\n :storage-key=\"id\"\n :orderable=\"orderable\"\n @close=\"showOptions = false\"\n @change=\"onSettingsChange\"\n />\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" src=\"@/styles/components/data-table/data-list.scss\"></style>\n"],"mappings":"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"}
1
+ {"version":3,"file":"admins-components87.js","names":[],"sources":["../src/components/data-table/DataList.vue"],"sourcesContent":["<script lang=\"ts\">\nexport type { PaginatorSettings } from '@/types/data-list'\n\nexport interface DataListProps {\n config: DataListConfig\n items: Record<string, unknown>[]\n settings?: Partial<DataListSettings>\n id: string\n layoutBreakpoint?: number\n orderable?: boolean\n pagination?: PaginatorSettings\n filters?: FilterItem[]\n historyEnabled?: boolean\n loading?: boolean\n handleUrl?: boolean\n}\n\nexport const dataListDefaults = {\n layoutBreakpoint: 768,\n orderable: true,\n historyEnabled: true,\n loading: false,\n handleUrl: false,\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { ref, computed, onMounted, onBeforeUnmount } from 'vue'\nimport DataTable from '@/components/data-table/DataTable.vue'\nimport DataCards from '@/components/data-table/DataCards.vue'\nimport DataListOptions from '@/components/data-table/DataListOptions.vue'\nimport DataPaginator from '@/components/data-table/DataPaginator.vue'\nimport Button from '@/components/Button.vue'\nimport type {\n DataListConfig,\n DataListSettings,\n PageSettings,\n PaginatorSettings,\n} from '@/types/data-list'\nimport type { FilterValue } from '@/types/data-list'\nimport DataFilters, {\n type FilterItem,\n type FilterResponse,\n} from '@/components/data-table/DataFilters.vue'\nimport FilterTags from '@/components/data-table/FilterTags.vue'\nimport DataListGuide from '@/components/data-table/DataListGuide.vue'\nimport { getFilterParams } from '@/utils/dataFilters'\n\nconst dataFiltersRef = ref<InstanceType<typeof DataFilters> | null>(null)\n\nconst props = withDefaults(defineProps<DataListProps>(), {\n ...dataListDefaults,\n})\n\nconst emit = defineEmits<{\n 'filter-change': [filters: Record<string, FilterValue>]\n 'selection-change': [selected: unknown[]]\n 'settings-change': [settings: DataListSettings]\n 'pagination-change': [pagination: PageSettings]\n 'sort-change': [sort: { key: string; direction: 'asc' | 'desc' }]\n}>()\n\nconst showOptions = ref(false)\nconst showGuide = ref(false)\nconst resolvedSettings = ref<DataListSettings | null>(null)\nconst isMobile = ref(false)\nconst root = ref<HTMLElement | null>(null)\nconst showFilters = ref(false)\n\nconst hasTextFilter = computed(() =>\n props.filters?.some((item) => item.type === 'text' || item.type === 'textarea'),\n)\n\nconst exactMatchFilterItem: FilterItem = {\n type: 'checkbox',\n key: 'exactMatch',\n label: 'Pontos egyezés',\n fullWidth: true,\n config: {\n labelAlignmentFix: true,\n },\n displayClass: 'highlight-chip',\n}\n\nfunction ensureExactMatchItem(items: FilterItem[]): FilterItem[] {\n if (!hasTextFilter.value) return items\n if (items.some((i) => i.key === 'exactMatch')) return items\n\n return [exactMatchFilterItem, ...items]\n}\n\nconst resolvedFilters = computed<FilterItem[]>(() => ensureExactMatchItem(props.filters ?? []))\n\nconst activeFilters = ref<Record<string, any>>(\n props.filters ? (getFilterParams(resolvedFilters.value) ?? {}) : {},\n)\n\nlet resizeObserver: ResizeObserver | null = null\n\nonMounted(() => {\n resizeObserver = new ResizeObserver((entries) => {\n isMobile.value = (entries[0]?.contentRect.width ?? 0) < props.layoutBreakpoint\n })\n if (root.value) resizeObserver.observe(root.value)\n})\n\nonBeforeUnmount(() => resizeObserver?.disconnect())\n\nconst effectiveLayout = computed<'table' | 'cards'>(() => {\n const layout = resolvedSettings.value?.layout\n if (layout === 'table' || layout === 'cards') return layout\n return isMobile.value ? 'cards' : 'table'\n})\n\nconst internalConfig = computed<DataListConfig>(() => {\n if (!resolvedSettings.value) return props.config\n const order = resolvedSettings.value.columnOrder\n const mapped = props.config.columns.map((c) => ({\n ...c,\n visible: resolvedSettings.value!.columns[c.property] ?? c.visible !== false,\n }))\n if (order?.length) {\n mapped.sort((a, b) => {\n const ai = order.indexOf(a.property)\n const bi = order.indexOf(b.property)\n return (ai === -1 ? 999 : ai) - (bi === -1 ? 999 : bi)\n })\n }\n return { ...props.config, columns: mapped }\n})\n\nfunction onSettingsChange(s: DataListSettings) {\n resolvedSettings.value = s\n emit('settings-change', s)\n}\n\ndefineExpose({\n openOptions: () => (showOptions.value = true),\n closeOptions: () => (showOptions.value = false),\n openFilters: () => (showFilters.value = true),\n closeFilters: () => (showFilters.value = false),\n})\n\nasync function openFilter(key: string) {\n showFilters.value = true\n setTimeout(() => {\n dataFiltersRef.value?.focusFilter(key)\n }, 300)\n}\n\nfunction onFilterChange(response: FilterResponse) {\n activeFilters.value = response.values\n emit('filter-change', response.transformed)\n}\n\nconst activeFiltersCount = computed(\n () => Object.values(activeFilters.value).filter((v) => v != null && v !== '').length,\n)\n\nconst showPaginator = computed(\n () => !!props.pagination && (props.items.length > 0 || !props.loading),\n)\n</script>\n\n<template>\n <div class=\"ac-component\">\n <div ref=\"root\" class=\"c-data-list\">\n <template v-if=\"resolvedFilters && resolvedFilters.length > 0\">\n <div class=\"flex-center gap-2 mb-3 wrap-on-small\">\n <Button\n label=\"Szűrők megnyitása\"\n icon=\"fa-solid fa-filter\"\n @click=\"showFilters = true\"\n style=\"flex-shrink: 0\"\n :type=\"activeFiltersCount > 0 ? 'info' : 'normal'\"\n :indicator=\"activeFiltersCount > 0 ? activeFiltersCount : undefined\"\n />\n <div class=\"flex-center gap-1\">\n <FilterTags\n :filters=\"activeFilters\"\n :items=\"resolvedFilters\"\n @remove=\"(key: string) => dataFiltersRef?.clearFilter(key)\"\n @openFilter=\"openFilter\"\n />\n </div>\n </div>\n <DataFilters\n ref=\"dataFiltersRef\"\n :open=\"showFilters\"\n :items=\"resolvedFilters\"\n lazy\n :handle-url=\"handleUrl\"\n :storage-key=\"id\"\n @close=\"showFilters = false\"\n @change=\"onFilterChange\"\n />\n </template>\n\n <div class=\"c-data-list__toolbar\">\n <Button\n label=\"Beállítások\"\n icon=\"fa-solid fa-gear\"\n class=\"c-data-list__toolbar__item\"\n size=\"small\"\n @click=\"showOptions = true\"\n />\n <Button\n label=\"Súgó\"\n icon=\"fa-solid fa-question\"\n icon-position=\"right\"\n class=\"c-data-list__toolbar__item ml-auto\"\n label-alignment-fix\n size=\"small\"\n @click=\"showGuide = true\"\n />\n </div>\n <DataListGuide :open=\"showGuide\" @close=\"showGuide = false\" />\n <DataTable\n v-if=\"effectiveLayout === 'table'\"\n :config=\"internalConfig\"\n :loading=\"loading\"\n :items=\"items\"\n :settings=\"resolvedSettings ?? undefined\"\n @filter-change=\"emit('filter-change', $event)\"\n @selection-change=\"emit('selection-change', $event)\"\n @sort-change=\"emit('sort-change', $event)\"\n />\n\n <DataCards\n v-else\n :config=\"internalConfig\"\n :loading=\"loading\"\n :items=\"items\"\n :settings=\"resolvedSettings ?? undefined\"\n @selection-change=\"emit('selection-change', $event)\"\n />\n\n <DataPaginator\n v-if=\"pagination && showPaginator\"\n :settings=\"pagination\"\n :storage-key=\"id\"\n @update:pagination=\"emit('pagination-change', $event)\"\n />\n\n <DataListOptions\n :open=\"showOptions\"\n :columns=\"config.columns\"\n :settings=\"settings ?? {}\"\n :storage-key=\"id\"\n :orderable=\"orderable\"\n @close=\"showOptions = false\"\n @change=\"onSettingsChange\"\n />\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" src=\"@/styles/components/data-table/data-list.scss\"></style>\n"],"mappings":"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"}
@@ -1,5 +1,4 @@
1
1
  import './src/styles/components/data-table/data-list.scss_vue_type_style_index_0_src_true_lang.css';
2
- import "./admins-components69.js";
3
2
  import e from "./admins-components87.js";
4
3
  /* empty css */
5
4
  //#region src/components/data-table/DataList.vue
@@ -1 +1 @@
1
- {"version":3,"file":"admins-components89.js","names":[],"sources":["../src/components/data-table/DataList.vue"],"sourcesContent":["<script lang=\"ts\">\nexport { getDefaultPaginator } from '@/components/data-table/DataPaginator.vue'\nexport type { PaginatorSettings } from '@/types/data-list'\n\nexport interface DataListProps {\n config: DataListConfig\n items: Record<string, unknown>[]\n settings?: Partial<DataListSettings>\n id: string\n layoutBreakpoint?: number\n orderable?: boolean\n pagination?: PaginatorSettings\n filters?: FilterItem[]\n historyEnabled?: boolean\n loading?: boolean\n handleUrl?: boolean\n}\n\nexport const dataListDefaults = {\n layoutBreakpoint: 768,\n orderable: true,\n historyEnabled: true,\n loading: false,\n handleUrl: false,\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { ref, computed, onMounted, onBeforeUnmount } from 'vue'\nimport DataTable from '@/components/data-table/DataTable.vue'\nimport DataCards from '@/components/data-table/DataCards.vue'\nimport DataListOptions from '@/components/data-table/DataListOptions.vue'\nimport DataPaginator from '@/components/data-table/DataPaginator.vue'\nimport Button from '@/components/Button.vue'\nimport type {\n DataListConfig,\n DataListSettings,\n PageSettings,\n PaginatorSettings,\n} from '@/types/data-list'\nimport type { FilterValue } from '@/types/data-list'\nimport DataFilters, {\n getFilterParams,\n type FilterItem,\n} from '@/components/data-table/DataFilters.vue'\nimport FilterTags from '@/components/data-table/FilterTags.vue'\nimport DataListGuide from '@/components/data-table/DataListGuide.vue'\n\nconst dataFiltersRef = ref<InstanceType<typeof DataFilters> | null>(null)\n\nconst props = withDefaults(defineProps<DataListProps>(), {\n ...dataListDefaults,\n})\n\nconst emit = defineEmits<{\n 'filter-change': [filters: Record<string, FilterValue>]\n 'selection-change': [selected: unknown[]]\n 'settings-change': [settings: DataListSettings]\n 'pagination-change': [pagination: PageSettings]\n 'sort-change': [sort: { key: string; direction: 'asc' | 'desc' }]\n}>()\n\nconst showOptions = ref(false)\nconst showGuide = ref(false)\nconst resolvedSettings = ref<DataListSettings | null>(null)\nconst isMobile = ref(false)\nconst root = ref<HTMLElement | null>(null)\nconst showFilters = ref(false)\n\nconst hasTextFilter = computed(() =>\n props.filters?.some((item) => item.type === 'text' || item.type === 'textarea'),\n)\n\nconst exactMatchFilterItem: FilterItem = {\n type: 'checkbox',\n key: 'exactMatch',\n label: 'Pontos egyezés',\n fullWidth: true,\n config: {\n labelAlignmentFix: true,\n },\n displayClass: 'highlight-chip',\n}\n\nfunction ensureExactMatchItem(items: FilterItem[]): FilterItem[] {\n if (!hasTextFilter.value) return items\n if (items.some((i) => i.key === 'exactMatch')) return items\n\n return [exactMatchFilterItem, ...items]\n}\n\nconst resolvedFilters = computed<FilterItem[]>(() => ensureExactMatchItem(props.filters ?? []))\n\nconst activeFilters = ref<Record<string, any>>(\n props.filters ? (getFilterParams(resolvedFilters.value) ?? {}) : {},\n)\n\nlet resizeObserver: ResizeObserver | null = null\n\nonMounted(() => {\n resizeObserver = new ResizeObserver((entries) => {\n isMobile.value = (entries[0]?.contentRect.width ?? 0) < props.layoutBreakpoint\n })\n if (root.value) resizeObserver.observe(root.value)\n})\n\nonBeforeUnmount(() => resizeObserver?.disconnect())\n\nconst effectiveLayout = computed<'table' | 'cards'>(() => {\n const layout = resolvedSettings.value?.layout\n if (layout === 'table' || layout === 'cards') return layout\n return isMobile.value ? 'cards' : 'table'\n})\n\nconst internalConfig = computed<DataListConfig>(() => {\n if (!resolvedSettings.value) return props.config\n const order = resolvedSettings.value.columnOrder\n const mapped = props.config.columns.map((c) => ({\n ...c,\n visible: resolvedSettings.value!.columns[c.property] ?? c.visible !== false,\n }))\n if (order?.length) {\n mapped.sort((a, b) => {\n const ai = order.indexOf(a.property)\n const bi = order.indexOf(b.property)\n return (ai === -1 ? 999 : ai) - (bi === -1 ? 999 : bi)\n })\n }\n return { ...props.config, columns: mapped }\n})\n\nfunction onSettingsChange(s: DataListSettings) {\n resolvedSettings.value = s\n emit('settings-change', s)\n}\n\ndefineExpose({\n openOptions: () => (showOptions.value = true),\n closeOptions: () => (showOptions.value = false),\n openFilters: () => (showFilters.value = true),\n closeFilters: () => (showFilters.value = false),\n})\n\nasync function openFilter(key: string) {\n showFilters.value = true\n setTimeout(() => {\n dataFiltersRef.value?.focusFilter(key)\n }, 300)\n}\n\nfunction onFilterChange(values: Record<string, any>) {\n activeFilters.value = values\n emit('filter-change', values)\n}\n\nconst activeFiltersCount = computed(\n () => Object.values(activeFilters.value).filter((v) => v != null && v !== '').length,\n)\n\nconst showPaginator = computed(\n () => !!props.pagination && (props.items.length > 0 || !props.loading),\n)\n</script>\n\n<template>\n <div class=\"ac-component\">\n <div ref=\"root\" class=\"c-data-list\">\n <template v-if=\"resolvedFilters && resolvedFilters.length > 0\">\n <div class=\"flex-center gap-2 mb-3 wrap-on-small\">\n <Button\n label=\"Szűrők megnyitása\"\n icon=\"fa-solid fa-filter\"\n @click=\"showFilters = true\"\n style=\"flex-shrink: 0\"\n :type=\"activeFiltersCount > 0 ? 'info' : 'normal'\"\n :indicator=\"activeFiltersCount > 0 ? activeFiltersCount : undefined\"\n />\n <div class=\"flex-center gap-1\">\n <FilterTags\n :filters=\"activeFilters\"\n :items=\"resolvedFilters\"\n @remove=\"(key: string) => dataFiltersRef?.clearFilter(key)\"\n @openFilter=\"openFilter\"\n />\n </div>\n </div>\n <DataFilters\n ref=\"dataFiltersRef\"\n :open=\"showFilters\"\n :items=\"resolvedFilters\"\n lazy\n :handle-url=\"handleUrl\"\n :storage-key=\"id\"\n @close=\"showFilters = false\"\n @change=\"onFilterChange\"\n />\n </template>\n\n <div class=\"c-data-list__toolbar\">\n <Button\n label=\"Beállítások\"\n icon=\"fa-solid fa-gear\"\n class=\"c-data-list__toolbar__item\"\n size=\"small\"\n @click=\"showOptions = true\"\n />\n <Button\n label=\"Súgó\"\n icon=\"fa-solid fa-question\"\n icon-position=\"right\"\n class=\"c-data-list__toolbar__item ml-auto\"\n label-alignment-fix\n size=\"small\"\n @click=\"showGuide = true\"\n />\n </div>\n <DataListGuide :open=\"showGuide\" @close=\"showGuide = false\" />\n <DataTable\n v-if=\"effectiveLayout === 'table'\"\n :config=\"internalConfig\"\n :loading=\"loading\"\n :items=\"items\"\n :settings=\"resolvedSettings ?? undefined\"\n @filter-change=\"emit('filter-change', $event)\"\n @selection-change=\"emit('selection-change', $event)\"\n @sort-change=\"emit('sort-change', $event)\"\n />\n\n <DataCards\n v-else\n :config=\"internalConfig\"\n :loading=\"loading\"\n :items=\"items\"\n :settings=\"resolvedSettings ?? undefined\"\n @selection-change=\"emit('selection-change', $event)\"\n />\n\n <DataPaginator\n v-if=\"pagination && showPaginator\"\n :settings=\"pagination\"\n :storage-key=\"id\"\n @update:pagination=\"emit('pagination-change', $event)\"\n />\n\n <DataListOptions\n :open=\"showOptions\"\n :columns=\"config.columns\"\n :settings=\"settings ?? {}\"\n :storage-key=\"id\"\n :orderable=\"orderable\"\n @close=\"showOptions = false\"\n @change=\"onSettingsChange\"\n />\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" src=\"@/styles/components/data-table/data-list.scss\"></style>\n"],"mappings":""}
1
+ {"version":3,"file":"admins-components89.js","names":[],"sources":["../src/components/data-table/DataList.vue"],"sourcesContent":["<script lang=\"ts\">\nexport type { PaginatorSettings } from '@/types/data-list'\n\nexport interface DataListProps {\n config: DataListConfig\n items: Record<string, unknown>[]\n settings?: Partial<DataListSettings>\n id: string\n layoutBreakpoint?: number\n orderable?: boolean\n pagination?: PaginatorSettings\n filters?: FilterItem[]\n historyEnabled?: boolean\n loading?: boolean\n handleUrl?: boolean\n}\n\nexport const dataListDefaults = {\n layoutBreakpoint: 768,\n orderable: true,\n historyEnabled: true,\n loading: false,\n handleUrl: false,\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { ref, computed, onMounted, onBeforeUnmount } from 'vue'\nimport DataTable from '@/components/data-table/DataTable.vue'\nimport DataCards from '@/components/data-table/DataCards.vue'\nimport DataListOptions from '@/components/data-table/DataListOptions.vue'\nimport DataPaginator from '@/components/data-table/DataPaginator.vue'\nimport Button from '@/components/Button.vue'\nimport type {\n DataListConfig,\n DataListSettings,\n PageSettings,\n PaginatorSettings,\n} from '@/types/data-list'\nimport type { FilterValue } from '@/types/data-list'\nimport DataFilters, {\n type FilterItem,\n type FilterResponse,\n} from '@/components/data-table/DataFilters.vue'\nimport FilterTags from '@/components/data-table/FilterTags.vue'\nimport DataListGuide from '@/components/data-table/DataListGuide.vue'\nimport { getFilterParams } from '@/utils/dataFilters'\n\nconst dataFiltersRef = ref<InstanceType<typeof DataFilters> | null>(null)\n\nconst props = withDefaults(defineProps<DataListProps>(), {\n ...dataListDefaults,\n})\n\nconst emit = defineEmits<{\n 'filter-change': [filters: Record<string, FilterValue>]\n 'selection-change': [selected: unknown[]]\n 'settings-change': [settings: DataListSettings]\n 'pagination-change': [pagination: PageSettings]\n 'sort-change': [sort: { key: string; direction: 'asc' | 'desc' }]\n}>()\n\nconst showOptions = ref(false)\nconst showGuide = ref(false)\nconst resolvedSettings = ref<DataListSettings | null>(null)\nconst isMobile = ref(false)\nconst root = ref<HTMLElement | null>(null)\nconst showFilters = ref(false)\n\nconst hasTextFilter = computed(() =>\n props.filters?.some((item) => item.type === 'text' || item.type === 'textarea'),\n)\n\nconst exactMatchFilterItem: FilterItem = {\n type: 'checkbox',\n key: 'exactMatch',\n label: 'Pontos egyezés',\n fullWidth: true,\n config: {\n labelAlignmentFix: true,\n },\n displayClass: 'highlight-chip',\n}\n\nfunction ensureExactMatchItem(items: FilterItem[]): FilterItem[] {\n if (!hasTextFilter.value) return items\n if (items.some((i) => i.key === 'exactMatch')) return items\n\n return [exactMatchFilterItem, ...items]\n}\n\nconst resolvedFilters = computed<FilterItem[]>(() => ensureExactMatchItem(props.filters ?? []))\n\nconst activeFilters = ref<Record<string, any>>(\n props.filters ? (getFilterParams(resolvedFilters.value) ?? {}) : {},\n)\n\nlet resizeObserver: ResizeObserver | null = null\n\nonMounted(() => {\n resizeObserver = new ResizeObserver((entries) => {\n isMobile.value = (entries[0]?.contentRect.width ?? 0) < props.layoutBreakpoint\n })\n if (root.value) resizeObserver.observe(root.value)\n})\n\nonBeforeUnmount(() => resizeObserver?.disconnect())\n\nconst effectiveLayout = computed<'table' | 'cards'>(() => {\n const layout = resolvedSettings.value?.layout\n if (layout === 'table' || layout === 'cards') return layout\n return isMobile.value ? 'cards' : 'table'\n})\n\nconst internalConfig = computed<DataListConfig>(() => {\n if (!resolvedSettings.value) return props.config\n const order = resolvedSettings.value.columnOrder\n const mapped = props.config.columns.map((c) => ({\n ...c,\n visible: resolvedSettings.value!.columns[c.property] ?? c.visible !== false,\n }))\n if (order?.length) {\n mapped.sort((a, b) => {\n const ai = order.indexOf(a.property)\n const bi = order.indexOf(b.property)\n return (ai === -1 ? 999 : ai) - (bi === -1 ? 999 : bi)\n })\n }\n return { ...props.config, columns: mapped }\n})\n\nfunction onSettingsChange(s: DataListSettings) {\n resolvedSettings.value = s\n emit('settings-change', s)\n}\n\ndefineExpose({\n openOptions: () => (showOptions.value = true),\n closeOptions: () => (showOptions.value = false),\n openFilters: () => (showFilters.value = true),\n closeFilters: () => (showFilters.value = false),\n})\n\nasync function openFilter(key: string) {\n showFilters.value = true\n setTimeout(() => {\n dataFiltersRef.value?.focusFilter(key)\n }, 300)\n}\n\nfunction onFilterChange(response: FilterResponse) {\n activeFilters.value = response.values\n emit('filter-change', response.transformed)\n}\n\nconst activeFiltersCount = computed(\n () => Object.values(activeFilters.value).filter((v) => v != null && v !== '').length,\n)\n\nconst showPaginator = computed(\n () => !!props.pagination && (props.items.length > 0 || !props.loading),\n)\n</script>\n\n<template>\n <div class=\"ac-component\">\n <div ref=\"root\" class=\"c-data-list\">\n <template v-if=\"resolvedFilters && resolvedFilters.length > 0\">\n <div class=\"flex-center gap-2 mb-3 wrap-on-small\">\n <Button\n label=\"Szűrők megnyitása\"\n icon=\"fa-solid fa-filter\"\n @click=\"showFilters = true\"\n style=\"flex-shrink: 0\"\n :type=\"activeFiltersCount > 0 ? 'info' : 'normal'\"\n :indicator=\"activeFiltersCount > 0 ? activeFiltersCount : undefined\"\n />\n <div class=\"flex-center gap-1\">\n <FilterTags\n :filters=\"activeFilters\"\n :items=\"resolvedFilters\"\n @remove=\"(key: string) => dataFiltersRef?.clearFilter(key)\"\n @openFilter=\"openFilter\"\n />\n </div>\n </div>\n <DataFilters\n ref=\"dataFiltersRef\"\n :open=\"showFilters\"\n :items=\"resolvedFilters\"\n lazy\n :handle-url=\"handleUrl\"\n :storage-key=\"id\"\n @close=\"showFilters = false\"\n @change=\"onFilterChange\"\n />\n </template>\n\n <div class=\"c-data-list__toolbar\">\n <Button\n label=\"Beállítások\"\n icon=\"fa-solid fa-gear\"\n class=\"c-data-list__toolbar__item\"\n size=\"small\"\n @click=\"showOptions = true\"\n />\n <Button\n label=\"Súgó\"\n icon=\"fa-solid fa-question\"\n icon-position=\"right\"\n class=\"c-data-list__toolbar__item ml-auto\"\n label-alignment-fix\n size=\"small\"\n @click=\"showGuide = true\"\n />\n </div>\n <DataListGuide :open=\"showGuide\" @close=\"showGuide = false\" />\n <DataTable\n v-if=\"effectiveLayout === 'table'\"\n :config=\"internalConfig\"\n :loading=\"loading\"\n :items=\"items\"\n :settings=\"resolvedSettings ?? undefined\"\n @filter-change=\"emit('filter-change', $event)\"\n @selection-change=\"emit('selection-change', $event)\"\n @sort-change=\"emit('sort-change', $event)\"\n />\n\n <DataCards\n v-else\n :config=\"internalConfig\"\n :loading=\"loading\"\n :items=\"items\"\n :settings=\"resolvedSettings ?? undefined\"\n @selection-change=\"emit('selection-change', $event)\"\n />\n\n <DataPaginator\n v-if=\"pagination && showPaginator\"\n :settings=\"pagination\"\n :storage-key=\"id\"\n @update:pagination=\"emit('pagination-change', $event)\"\n />\n\n <DataListOptions\n :open=\"showOptions\"\n :columns=\"config.columns\"\n :settings=\"settings ?? {}\"\n :storage-key=\"id\"\n :orderable=\"orderable\"\n @close=\"showOptions = false\"\n @change=\"onSettingsChange\"\n />\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" src=\"@/styles/components/data-table/data-list.scss\"></style>\n"],"mappings":""}
@@ -1,8 +1,6 @@
1
1
  import { SidebarPosition } from '../Sidebar.vue';
2
2
  import { FilterItemType } from '../../types/types';
3
3
  import { DropdownOption } from '../DropdownSelect.vue';
4
- import { getFilterParams } from '../../utils/filterUrlSync';
5
- export { getFilterParams };
6
4
  export interface FilterItem {
7
5
  type: FilterItemType;
8
6
  key: string;
@@ -13,6 +11,11 @@ export interface FilterItem {
13
11
  fullWidth?: boolean;
14
12
  config?: Record<string, any>;
15
13
  displayClass?: string;
14
+ transformer?: (value: any) => Record<string, any> | null | undefined;
15
+ }
16
+ export interface FilterResponse {
17
+ values: Record<string, any>;
18
+ transformed: Record<string, any>;
16
19
  }
17
20
  declare const _default: typeof __VLS_export;
18
21
  export default _default;
@@ -28,7 +31,7 @@ declare const __VLS_export: import('vue').DefineComponent<{
28
31
  clearFilter: (key: string) => void;
29
32
  focusFilter: (key: string) => void;
30
33
  }, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
31
- change: (filters: Record<string, any>) => any;
34
+ change: (response: FilterResponse) => any;
32
35
  close: () => any;
33
36
  }, string, import('vue').PublicProps, Readonly<{
34
37
  open?: boolean;
@@ -39,7 +42,7 @@ declare const __VLS_export: import('vue').DefineComponent<{
39
42
  historyEnabled?: boolean;
40
43
  storageKey?: string;
41
44
  }> & Readonly<{
42
- onChange?: ((filters: Record<string, any>) => any) | undefined;
45
+ onChange?: ((response: FilterResponse) => any) | undefined;
43
46
  onClose?: (() => any) | undefined;
44
47
  }>, {
45
48
  lazy: boolean;
@@ -1,6 +1,5 @@
1
1
  import { DataListConfig, DataListSettings, PageSettings, PaginatorSettings, FilterValue } from '../../types/data-list';
2
2
  import { FilterItem } from './DataFilters.vue';
3
- export { getDefaultPaginator } from './DataPaginator.vue';
4
3
  export type { PaginatorSettings } from '../../types/data-list';
5
4
  export interface DataListProps {
6
5
  config: DataListConfig;
@@ -15,8 +15,9 @@ export { default as ImagePicker } from './components/custom/ImagePicker.vue';
15
15
  export { default as InternalArticleOffer } from './components/custom/InternalArticleOffer.vue';
16
16
  export { default as Loader } from './components/Loader.vue';
17
17
  export { default as ToastNotification } from './components/ToastNotification.vue';
18
- export { default as DataList, dataListDefaults, getDefaultPaginator, } from './components/data-table/DataList.vue';
19
- export { getFilterParams } from './components/data-table/DataFilters.vue';
18
+ export { default as DataList, dataListDefaults } from './components/data-table/DataList.vue';
19
+ export { getDefaultPaginator } from './components/data-table/DataPaginator.vue';
20
+ export { getFilterParams, getDefaultFilters, filterEmptyValues, writeFilterParams, } from './utils/dataFilters';
20
21
  export { default as DataTable } from './components/data-table/DataTable.vue';
21
22
  export { default as DataCards } from './components/data-table/DataCards.vue';
22
23
  export { default as DataFilters } from './components/data-table/DataFilters.vue';
@@ -0,0 +1 @@
1
+ export declare const getCurrentSite: () => string | undefined;
@@ -0,0 +1,5 @@
1
+ import { FilterItem } from '../components/data-table/DataFilters.vue';
2
+ export declare function getFilterParams(items: FilterItem[]): Record<string, unknown> | null;
3
+ export declare function getDefaultFilters(items: FilterItem[]): Record<string, unknown>;
4
+ export declare function filterEmptyValues(filters: Record<string, any>): Record<string, any>;
5
+ export declare function writeFilterParams(items: FilterItem[], vals: Record<string, unknown>): void;
@@ -0,0 +1,6 @@
1
+ import { Column, Action, ActionGroup } from '../types/data-list';
2
+ import { DropdownMenuItem } from '../components/DropdownMenu.vue';
3
+ export declare function getColumnValue(item: Record<string, unknown>, col: Column | undefined): any;
4
+ export declare function isUuid(str: string): boolean;
5
+ export declare function isActionGroup(entry: Action | ActionGroup): entry is ActionGroup;
6
+ export declare function buildActionGroupMenuItems(group: ActionGroup, item: Record<string, unknown>): DropdownMenuItem[];
@@ -0,0 +1,24 @@
1
+ type Converter = (value: unknown, item?: unknown) => unknown;
2
+ export declare function utcToLocalString(time?: boolean, format?: string): Converter;
3
+ export declare function shortUuid(length?: number): Converter;
4
+ export declare function localToLocalString(format?: string): Converter;
5
+ export declare function textEllipse(max?: number, suffix?: string): Converter;
6
+ export declare function booleanToString(trueLabel?: string, falseLabel?: string, fallback?: string): Converter;
7
+ export declare function enumMap<T = unknown>(map: Record<string, T>, fallback?: T): Converter;
8
+ export declare function formatNumber(decimals?: number, locale?: string): Converter;
9
+ export declare function formatCurrency(currencyCode?: string, locale?: string, decimals?: number): Converter;
10
+ export declare function listToString(separator?: string): Converter;
11
+ export declare const identity: Converter;
12
+ export declare const dataListConverters: {
13
+ readonly utcToLocalString: typeof utcToLocalString;
14
+ readonly localToLocalString: typeof localToLocalString;
15
+ readonly shortUuid: typeof shortUuid;
16
+ readonly textEllipse: typeof textEllipse;
17
+ readonly booleanToString: typeof booleanToString;
18
+ readonly enumMap: typeof enumMap;
19
+ readonly formatNumber: typeof formatNumber;
20
+ readonly formatCurrency: typeof formatCurrency;
21
+ readonly listToString: typeof listToString;
22
+ readonly identity: Converter;
23
+ };
24
+ export {};
@@ -0,0 +1,10 @@
1
+ export declare function formatDate(date: Date, format: string): string;
2
+ export declare function parseDate(value: string, format: string): Date | null;
3
+ export declare function localToUTCString(date: Date, includeTime?: boolean): string;
4
+ export declare function castToDate(v: any): Date | null;
5
+ export declare function startOfDay(date: Date): Date;
6
+ export declare function endOfDay(date: Date): Date;
7
+ export declare function startOfWeek(date: Date): Date;
8
+ export declare function isSameCalendarDay(a: Date, b: Date): boolean;
9
+ export declare function laterOf(a: Date | null | undefined, b: Date | null | undefined): Date | null;
10
+ export declare function earlierOf(a: Date | null | undefined, b: Date | null | undefined): Date | null;
@@ -0,0 +1 @@
1
+ export declare function debounce<T extends (...args: any[]) => any>(fn: T, delay?: number): (...args: Parameters<T>) => void;
@@ -0,0 +1,3 @@
1
+ import { ControlSize } from '../types/types';
2
+ export declare function sizeToClass(size: ControlSize | undefined, prefix?: string): string;
3
+ export declare function typeToClass(type: string | undefined, prefix?: string): string;
@@ -0,0 +1,10 @@
1
+ import { FilterItem } from '../components/data-table/DataFilters.vue';
2
+ export declare function displayFilterValue(items: FilterItem[], key: string, value: any): string;
3
+ export declare function parseDropdownValue(value: any): unknown;
4
+ export interface FilterDisplayPart {
5
+ key: string;
6
+ text: string;
7
+ displayClass?: string;
8
+ }
9
+ export declare function buildFilterDisplay(items: FilterItem[], values: Record<string, any>): FilterDisplayPart[];
10
+ export declare function buildFilterValues(items: FilterItem[], values: Record<string, any>): string[];
@@ -0,0 +1 @@
1
+ export declare const isIpInUrl: (url: string) => boolean;
@@ -0,0 +1,3 @@
1
+ export declare function deepMerge(target: Record<string, any>, source: Record<string, any>): {
2
+ [x: string]: any;
3
+ };
@@ -0,0 +1,33 @@
1
+ import { PickedDate } from '../types/types';
2
+ export type PredefinedRangeKey = 'lastDay' | 'thisDay' | 'lastWeek' | 'thisWeek' | 'lastMonth' | 'thisMonth';
3
+ export interface PredefinedRange {
4
+ key: PredefinedRangeKey;
5
+ label: string;
6
+ }
7
+ export declare const predefinedRanges: PredefinedRange[];
8
+ export declare function computePredefinedRange(key: PredefinedRangeKey, now?: Date): {
9
+ from: Date;
10
+ to: Date;
11
+ };
12
+ export declare function applyPredefinedRange(key: PredefinedRangeKey, options: {
13
+ showTime: boolean;
14
+ now?: Date;
15
+ }): {
16
+ from: PickedDate;
17
+ to: PickedDate;
18
+ };
19
+ export declare function matchPredefinedRange(fromLocal: Date, toLocal: Date, options: {
20
+ showTime: boolean;
21
+ now?: Date;
22
+ }): PredefinedRangeKey | null;
23
+ export declare function isPredefinedRangeInBounds(key: PredefinedRangeKey, bounds: {
24
+ minDate?: Date | null;
25
+ maxDate?: Date | null;
26
+ showTime: boolean;
27
+ now?: Date;
28
+ }): boolean;
29
+ export declare function canStepInBounds(from: Date, to: Date, delta: number, bounds: {
30
+ minDate?: Date | null;
31
+ maxDate?: Date | null;
32
+ showTime: boolean;
33
+ }): boolean;
@@ -0,0 +1,4 @@
1
+ export declare function getUrlParam(key: string): string | null;
2
+ export declare function setUrlParam(key: string, value: string | number): void;
3
+ export declare function removeUrlParam(key?: string): void;
4
+ export declare function joinUrl(...parts: string[]): string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "admins-components",
3
- "version": "9.0.20",
3
+ "version": "9.0.22",
4
4
  "type": "module",
5
5
  "module": "./dist/admins-components.js",
6
6
  "types": "./dist/index.d.ts",