@wgalleti/primevue-components 0.9.0 → 0.9.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{WProgressFlow.vue_vue_type_script_setup_true_lang-Cxudafdt.js → WProgressFlow.vue_vue_type_script_setup_true_lang-BZxi1797.js} +864 -819
- package/dist/WProgressFlow.vue_vue_type_script_setup_true_lang-BZxi1797.js.map +1 -0
- package/dist/WProgressFlow.vue_vue_type_script_setup_true_lang-CRx96kle.cjs +12 -0
- package/dist/WProgressFlow.vue_vue_type_script_setup_true_lang-CRx96kle.cjs.map +1 -0
- package/dist/components/crud/WCrudView.vue.d.ts +3 -0
- package/dist/components.cjs +1 -1
- package/dist/components.js +1 -1
- package/dist/composables.cjs +1 -1
- package/dist/composables.js +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +3 -3
- package/dist/types/manager.d.ts +3 -0
- package/dist/{useApi-CzOJADZw.js → useApi-D8-gfJR-.js} +97 -95
- package/dist/useApi-D8-gfJR-.js.map +1 -0
- package/dist/useApi-Dms28942.cjs +2 -0
- package/dist/useApi-Dms28942.cjs.map +1 -0
- package/package.json +1 -1
- package/dist/WProgressFlow.vue_vue_type_script_setup_true_lang-Cxudafdt.js.map +0 -1
- package/dist/WProgressFlow.vue_vue_type_script_setup_true_lang-DobZvbe0.cjs +0 -12
- package/dist/WProgressFlow.vue_vue_type_script_setup_true_lang-DobZvbe0.cjs.map +0 -1
- package/dist/useApi-BDjRqSFt.cjs +0 -2
- package/dist/useApi-BDjRqSFt.cjs.map +0 -1
- package/dist/useApi-CzOJADZw.js.map +0 -1
package/dist/components.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("./WProgressFlow.vue_vue_type_script_setup_true_lang-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("./WProgressFlow.vue_vue_type_script_setup_true_lang-CRx96kle.cjs"),e=require("vue"),m=require("primevue/button"),g={class:"w-fileupload",style:{display:"flex","flex-direction":"column",gap:"0.5rem"}},W=["accept","multiple"],v={key:0,style:{"list-style":"none",margin:"0",padding:"0",display:"flex","flex-direction":"column",gap:"0.35rem"}},k={style:{flex:"1",overflow:"hidden","text-overflow":"ellipsis","white-space":"nowrap"}},B={style:{opacity:"0.6"}},x=e.defineComponent({__name:"WFileUpload",props:{modelValue:{default:null},multiple:{type:Boolean,default:!1},accept:{default:void 0},maxSize:{default:10485760},disabled:{type:Boolean,default:!1},chooseLabel:{default:"Selecionar arquivo"}},emits:["update:modelValue","error"],setup(a,{emit:p}){const o=a,s=p,d=e.ref(null),c=e.computed(()=>{const l=o.modelValue;return l?Array.isArray(l)?l:[l]:[]});function f(){var l;(l=d.value)==null||l.click()}function _(l){const n=l.target,r=Array.from(n.files||[]);n.value="";const i=[];for(const u of r){if(u.size>o.maxSize){s("error",`"${u.name}" acima do limite de ${(o.maxSize/1048576).toFixed(1)}MB.`);continue}i.push(u)}i.length&&s("update:modelValue",o.multiple?[...c.value,...i]:i[0])}function y(l){if(!o.multiple){s("update:modelValue",null);return}const n=c.value.slice();n.splice(l,1),s("update:modelValue",n.length?n:null)}function $(l){return l<1024?`${l} B`:l<1048576?`${(l/1024).toFixed(0)} KB`:`${(l/1048576).toFixed(1)} MB`}return(l,n)=>(e.openBlock(),e.createElementBlock("div",g,[e.createElementVNode("div",null,[e.createVNode(e.unref(m),{type:"button",label:a.chooseLabel,icon:"pi pi-upload",outlined:"",size:"small",disabled:a.disabled,onClick:f},null,8,["label","disabled"])]),e.createElementVNode("input",{ref_key:"input",ref:d,type:"file",accept:a.accept,multiple:a.multiple,style:{display:"none"},onChange:_},null,40,W),c.value.length?(e.openBlock(),e.createElementBlock("ul",v,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value,(r,i)=>(e.openBlock(),e.createElementBlock("li",{key:`${r.name}-${i}`,style:{display:"flex","align-items":"center",gap:"0.5rem","font-size":"0.85rem"}},[n[0]||(n[0]=e.createElementVNode("i",{class:"pi pi-file",style:{opacity:"0.6"}},null,-1)),e.createElementVNode("span",k,e.toDisplayString(r.name),1),e.createElementVNode("span",B,e.toDisplayString($(r.size)),1),e.createVNode(e.unref(m),{type:"button",icon:"pi pi-times",text:"",rounded:"",size:"small",severity:"danger",disabled:a.disabled,onClick:u=>y(i)},null,8,["disabled","onClick"])]))),128))])):e.renderSlot(l.$slots,"empty",{},()=>[n[1]||(n[1]=e.createElementVNode("span",{style:{"font-size":"0.8rem",opacity:"0.6"}},"Nenhum arquivo selecionado",-1))],void 0,1)]))}});exports.WActionBar=t._sfc_main;exports.WAutoCompleteFK=t._sfc_main$1;exports.WCrudColumnRenderer=t._sfc_main$2;exports.WCrudFormDialog=t._sfc_main$3;exports.WCrudView=t._sfc_main$4;exports.WDatePicker=t._sfc_main$5;exports.WDateRange=t._sfc_main$6;exports.WDetailHeader=t._sfc_main$7;exports.WEmptyState=t._sfc_main$8;exports.WFormRenderer=t._sfc_main$9;exports.WFormSection=t._sfc_main$10;exports.WImageCropper=t.WImageCropper;exports.WInfoCard=t._sfc_main$11;exports.WKpiCard=t._sfc_main$12;exports.WKpiGrid=t._sfc_main$13;exports.WMoneyInput=t._sfc_main$14;exports.WPageHeader=t._sfc_main$15;exports.WProgressFlow=t._sfc_main$16;exports.WSectionHeader=t._sfc_main$17;exports.WStatusTag=t._sfc_main$18;exports.WTransferList=t._sfc_main$19;exports.WFileUpload=x;
|
|
2
2
|
//# sourceMappingURL=components.cjs.map
|
package/dist/components.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { _ as I, a as M, b as N, c as P, d as R, e as _, f as T, g as U, h as j, i as G, j as J, W as O, k as Q, l as X, m as Y, n as Z, o as ee, p as le, q as te, r as ae, s as ie } from "./WProgressFlow.vue_vue_type_script_setup_true_lang-
|
|
1
|
+
import { _ as I, a as M, b as N, c as P, d as R, e as _, f as T, g as U, h as j, i as G, j as J, W as O, k as Q, l as X, m as Y, n as Z, o as ee, p as le, q as te, r as ae, s as ie } from "./WProgressFlow.vue_vue_type_script_setup_true_lang-BZxi1797.js";
|
|
2
2
|
import { defineComponent as k, ref as F, computed as S, openBlock as u, createElementBlock as p, createElementVNode as i, createVNode as m, unref as f, Fragment as b, renderList as z, toDisplayString as y, renderSlot as B } from "vue";
|
|
3
3
|
import W from "primevue/button";
|
|
4
4
|
const V = {
|
package/dist/composables.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("./useApi-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("./useApi-Dms28942.cjs"),e=require("./useFormKeyboardNav-D4Ow3k4Y.cjs");function s(u){return u}exports.useApi=r.useApi;exports.useCrudManager=r.useCrudManager;exports.extractApiError=e.extractApiError;exports.useApiError=e.useApiError;exports.useAppConfirm=e.useAppConfirm;exports.useAppToast=e.useAppToast;exports.useDateInput=e.useDateInput;exports.useFormKeyboardNav=e.useFormKeyboardNav;exports.useFormatters=e.useFormatters;exports.defineCrudConfig=s;
|
|
2
2
|
//# sourceMappingURL=composables.cjs.map
|
package/dist/composables.js
CHANGED
package/dist/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const m=require("./plugin-D1YvyKXX.cjs"),n=require("./WProgressFlow.vue_vue_type_script_setup_true_lang-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const m=require("./plugin-D1YvyKXX.cjs"),n=require("./WProgressFlow.vue_vue_type_script_setup_true_lang-CRx96kle.cjs"),W=require("./useApi-Dms28942.cjs"),f=require("./useFormKeyboardNav-D4Ow3k4Y.cjs"),P=require("./types.cjs");function F(e,a,t){const r=e;return Array.isArray(r.results)?{data:r.results,page:r.page??a,page_size:r.page_size??t,rows:r.count??0,extras:r.extras??{}}:Array.isArray(r.data)?{data:r.data,page:r.page??a,page_size:r.page_size??t,rows:r.rows??0,extras:r.extras??{}}:{data:Array.isArray(e)?e:[],page:a,page_size:t,rows:Array.isArray(e)?e.length:0,extras:{}}}function D(e){return{async list(a,t={}){const r=await e.get(a,{params:t});return F(r.data,Number(t.page??1),Number(t.page_size??20))},async get(a,t,r){return{data:(await e.get(`${a}${t}/`,r)).data}},async create(a,t,r){return{data:(await e.post(a,t,r)).data}},async update(a,t,r,s){return{data:(await e.patch(`${a}${t}/`,r,s)).data}},async delete(a,t){await e.delete(`${a}${t}/`)}}}const C={install(e,a){if(!(a!=null&&a.axios)&&!(a!=null&&a.dataProvider))throw new Error('[wPrimeVueComponents] Informe "axios" ou "dataProvider" ao registrar o WPrimeVuePlugin.');const t=a.dataProvider??D(a.axios),r={axios:a.axios,dataProvider:t,defaultPageSize:a.defaultPageSize??20,dateFormat:a.dateFormat??"DD/MM/YYYY",dateTimeFormat:a.dateTimeFormat??"DD/MM/YYYY HH:mm",locale:a.locale??"pt-BR",currency:a.currency??"BRL"};a.axios&&e.provide(m.W_AXIOS_KEY,a.axios),e.provide(m.W_DATA_PROVIDER_KEY,t),e.provide(m.W_CONFIG_KEY,r),a.registerComponents!==!1&&(e.component("WCrudView",n._sfc_main$4),e.component("WCrudFormDialog",n._sfc_main$3),e.component("WCrudColumnRenderer",n._sfc_main$2),e.component("WAutoCompleteFK",n._sfc_main$1),e.component("WMoneyInput",n._sfc_main$14),e.component("WTransferList",n._sfc_main$19))}};function v(e){return e.split("?")[0].replace(/^\/+|\/+$/g,"").replace(/^api\/v\d+\//,"")}function w(e){return typeof e=="string"?{table:e}:e}function $(e,a=400){return{response:{status:a,data:{detail:e}},message:e}}function y(e){if(e instanceof FormData)throw $("SupabaseDataProvider nao envia FormData diretamente. Faça upload do arquivo no Storage e envie a URL/caminho no payload.");return e}function p(e){throw{response:{data:{detail:(e==null?void 0:e.message)??"Erro ao consultar Supabase",code:e==null?void 0:e.code,details:e==null?void 0:e.details,hint:e==null?void 0:e.hint}},message:(e==null?void 0:e.message)??"Erro ao consultar Supabase"}}function g(e,a){var s,i;const t=v(e),r=(s=a.resources)==null?void 0:s[t];if(r)return w(r);if((i=a.allowedTables)!=null&&i.includes(t))return{table:t};throw $(`Recurso Supabase nao registrado para o endpoint "${e}".`,404)}function E(e,a,t){const r=new Set(["page","page_size","search","ordering"]),s={...t.defaultFilters,...a};for(const[i,o]of Object.entries(s))r.has(i)||o===null||o===void 0||o===""||(e=e.eq(i,o));return e}function S(e,a,t){if(typeof a!="string"||!a.trim()||!(t!=null&&t.length))return e;const r=a.trim().replace(/,/g,"\\,"),s=t.map(i=>`${i}.ilike.%${r}%`).join(",");return e.or(s)}function T(e,a){const t=typeof e=="string"&&e?e:a;return t?{field:t.startsWith("-")?t.slice(1):t,ascending:!t.startsWith("-")}:null}function b(e,a){return e?a.mapListItem?e.map(t=>{var r;return(r=a.mapListItem)==null?void 0:r.call(a,t)}):e:[]}function R(e){const a=e.defaultSelect??"*";return{async list(t,r={}){var A;const s=g(t,e),i=Math.max(Number(r.page??1),1),o=Math.max(Number(r.page_size??20),1),c=(i-1)*o,l=c+o-1;let u=e.client.from(s.table).select(s.select??a,{count:"exact"});u=E(u,r,s),u=S(u,r.search,s.searchFields);const d=T(r.ordering,s.defaultOrdering);d&&(u=u.order(d.field,{ascending:d.ascending}));const _=await u.range(c,l);return _.error&&p(_.error),{data:b(_.data,s),page:i,page_size:o,rows:_.count??((A=_.data)==null?void 0:A.length)??0,extras:{}}},async get(t,r,s){const i=g(t,e),o=i.pk??"id",c=await e.client.from(i.table).select(i.select??a).eq(o,r).single();return c.error&&p(c.error),{data:c.data}},async create(t,r,s){const i=g(t,e),o=y(r),c=i.mapPayload?i.mapPayload(o,"create"):o,l=await e.client.from(i.table).insert(c).select(i.select??a).single();return l.error&&p(l.error),{data:l.data}},async update(t,r,s,i){const o=g(t,e),c=o.pk??"id",l=y(s),u=o.mapPayload?o.mapPayload(l,"update"):l,d=await e.client.from(o.table).update(u).eq(c,r).select(o.select??a).single();return d.error&&p(d.error),{data:d.data}},async delete(t,r){const s=g(t,e),i=s.pk??"id",o=s.softDelete===!0?{is_active:!1}:typeof s.softDelete=="object"?s.softDelete:null,c=o?await e.client.from(s.table).update(o).eq(i,r):await e.client.from(s.table).delete().eq(i,r);c.error&&p(c.error)}}}exports.W_AXIOS_KEY=m.W_AXIOS_KEY;exports.W_CONFIG_KEY=m.W_CONFIG_KEY;exports.W_DATA_PROVIDER_KEY=m.W_DATA_PROVIDER_KEY;exports.WActionBar=n._sfc_main;exports.WAutoCompleteFK=n._sfc_main$1;exports.WCrudColumnRenderer=n._sfc_main$2;exports.WCrudFormDialog=n._sfc_main$3;exports.WCrudView=n._sfc_main$4;exports.WDatePicker=n._sfc_main$5;exports.WDateRange=n._sfc_main$6;exports.WDetailHeader=n._sfc_main$7;exports.WEmptyState=n._sfc_main$8;exports.WFormRenderer=n._sfc_main$9;exports.WFormSection=n._sfc_main$10;exports.WInfoCard=n._sfc_main$11;exports.WKpiCard=n._sfc_main$12;exports.WKpiGrid=n._sfc_main$13;exports.WMoneyInput=n._sfc_main$14;exports.WPageHeader=n._sfc_main$15;exports.WProgressFlow=n._sfc_main$16;exports.WSectionHeader=n._sfc_main$17;exports.WStatusTag=n._sfc_main$18;exports.WTransferList=n._sfc_main$19;exports.downloadCsv=n.downloadCsv;exports.mapApiFieldToColumnDef=n.mapApiFieldToColumnDef;exports.mapApiFieldToFieldDef=n.mapApiFieldToFieldDef;exports.mapApiFieldsToColumnDefs=n.mapApiFieldsToColumnDefs;exports.mapApiFieldsToFieldDefs=n.mapApiFieldsToFieldDefs;exports.toCsv=n.toCsv;exports.useApi=W.useApi;exports.useCrudManager=W.useCrudManager;exports.extractApiError=f.extractApiError;exports.useApiError=f.useApiError;exports.useAppConfirm=f.useAppConfirm;exports.useAppToast=f.useAppToast;exports.useDateInput=f.useDateInput;exports.useFormatters=f.useFormatters;exports.DEFAULT_CRUD_LABELS=P.DEFAULT_CRUD_LABELS;exports.WPrimeVuePlugin=C;exports.createAxiosDataProvider=D;exports.createSupabaseDataProvider=R;
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { b as _, W, a as w } from "./plugin-BKa0eSEM.js";
|
|
2
|
-
import { d as A, c as P, b as v, a as C, n as D, s as x } from "./WProgressFlow.vue_vue_type_script_setup_true_lang-
|
|
3
|
-
import { _ as k, e as N, f as O, g as V, h as q, i as H, j, k as B, l as U, m as G, o as X, p as J, q as Q, r as Z, t as ee, u as ae, v as te, w as re, x as se, y as ne } from "./WProgressFlow.vue_vue_type_script_setup_true_lang-
|
|
4
|
-
import { u as ie, a as ce } from "./useApi-
|
|
2
|
+
import { d as A, c as P, b as v, a as C, n as D, s as x } from "./WProgressFlow.vue_vue_type_script_setup_true_lang-BZxi1797.js";
|
|
3
|
+
import { _ as k, e as N, f as O, g as V, h as q, i as H, j, k as B, l as U, m as G, o as X, p as J, q as Q, r as Z, t as ee, u as ae, v as te, w as re, x as se, y as ne } from "./WProgressFlow.vue_vue_type_script_setup_true_lang-BZxi1797.js";
|
|
4
|
+
import { u as ie, a as ce } from "./useApi-D8-gfJR-.js";
|
|
5
5
|
import { e as le, u as de, a as fe, b as me, c as pe, f as ge } from "./useFormKeyboardNav-D4Irq5RE.js";
|
|
6
6
|
import { DEFAULT_CRUD_LABELS as _e } from "./types.js";
|
|
7
7
|
function F(e, a, t) {
|
package/dist/types/manager.d.ts
CHANGED
|
@@ -86,6 +86,9 @@ export interface CrudManagerReturn<T> {
|
|
|
86
86
|
/** Salva um único campo de um item (edição inline por célula) via PATCH. */
|
|
87
87
|
updateField(item: T, field: string, value: unknown): Promise<void>;
|
|
88
88
|
confirmDelete(item: T): void;
|
|
89
|
+
/** Exclui o item sem o confirm de serviço — para quem controla a própria
|
|
90
|
+
* confirmação (ex.: WCrudView com o slot `delete-message`). */
|
|
91
|
+
performDelete(item: T): Promise<void>;
|
|
89
92
|
setFormField(field: string, value: unknown): void;
|
|
90
93
|
resetForm(): void;
|
|
91
94
|
goToPage(page: number): void;
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import { inject as K, ref as
|
|
2
|
-
import { W as
|
|
3
|
-
import { DEFAULT_CRUD_LABELS as
|
|
4
|
-
import { b as
|
|
5
|
-
function
|
|
1
|
+
import { inject as K, ref as y, reactive as I, computed as $ } from "vue";
|
|
2
|
+
import { W as re, a as fe } from "./plugin-BKa0eSEM.js";
|
|
3
|
+
import { DEFAULT_CRUD_LABELS as Ce } from "./types.js";
|
|
4
|
+
import { b as Ee, a as Ae, e as X, t as ne, g as se, p as le, s as Ie } from "./useFormKeyboardNav-D4Irq5RE.js";
|
|
5
|
+
function Re(F, w) {
|
|
6
6
|
const g = {};
|
|
7
7
|
for (const p of Object.keys(w))
|
|
8
8
|
JSON.stringify(F[p]) !== JSON.stringify(w[p]) && (g[p] = w[p]);
|
|
9
9
|
return g;
|
|
10
10
|
}
|
|
11
|
-
function
|
|
11
|
+
function Le(F) {
|
|
12
12
|
const {
|
|
13
13
|
endpoint: w,
|
|
14
14
|
form: g,
|
|
@@ -21,19 +21,19 @@ function qe(F) {
|
|
|
21
21
|
transformPayload: T = void 0,
|
|
22
22
|
onAfterSave: _ = void 0,
|
|
23
23
|
onAfterDelete: M = void 0
|
|
24
|
-
} = F, V = K(
|
|
24
|
+
} = F, V = K(re);
|
|
25
25
|
if (!V)
|
|
26
26
|
throw new Error(
|
|
27
27
|
"[wPrimeVueComponents] dataProvider não encontrado. Registre o WPrimeVuePlugin antes de usar useCrudManager."
|
|
28
28
|
);
|
|
29
|
-
const i = V, P = K(
|
|
29
|
+
const i = V, P = K(fe), U = F.pageSize ?? (P == null ? void 0 : P.defaultPageSize) ?? 20, f = { ...Ce, ...F.labels }, b = Ee(), { confirmDelete: B } = Ae(), h = y([]), W = y([]), J = y({}), q = y(!1), c = y(!1), v = y(""), d = y(!1), z = y(!1), u = y(null), D = I({});
|
|
30
30
|
let C = null;
|
|
31
31
|
const n = I({
|
|
32
32
|
page: 1,
|
|
33
33
|
pageSize: U,
|
|
34
34
|
rows: 0,
|
|
35
35
|
totalPages: 0
|
|
36
|
-
}),
|
|
36
|
+
}), m = I({
|
|
37
37
|
field: null,
|
|
38
38
|
order: 0
|
|
39
39
|
}), E = I({});
|
|
@@ -45,10 +45,10 @@ function qe(F) {
|
|
|
45
45
|
}
|
|
46
46
|
const ee = Z();
|
|
47
47
|
for (const e of Object.keys(ee))
|
|
48
|
-
|
|
49
|
-
const A = $(() => u.value !== null && !z.value),
|
|
48
|
+
D[e] = ee[e];
|
|
49
|
+
const A = $(() => u.value !== null && !z.value), ce = $(() => z.value), ue = $(
|
|
50
50
|
() => z.value ? f.viewTitle ?? "Visualizar Registro" : A.value ? f.editTitle : f.createTitle
|
|
51
|
-
),
|
|
51
|
+
), de = $(() => n.page <= 1), pe = $(() => n.page >= n.totalPages);
|
|
52
52
|
let G = null;
|
|
53
53
|
async function O(e = {}) {
|
|
54
54
|
q.value = !0;
|
|
@@ -58,7 +58,7 @@ function qe(F) {
|
|
|
58
58
|
page_size: n.pageSize,
|
|
59
59
|
...e
|
|
60
60
|
};
|
|
61
|
-
v.value && (t.search = v.value),
|
|
61
|
+
v.value && (t.search = v.value), m.field && m.order !== 0 && (t.ordering = m.order === -1 ? `-${m.field}` : m.field), R && Object.assign(t, R());
|
|
62
62
|
for (const [o, r] of Object.entries(E))
|
|
63
63
|
r != null && r !== "" && (t[o] = r);
|
|
64
64
|
const a = await i.list(w, t);
|
|
@@ -67,15 +67,15 @@ function qe(F) {
|
|
|
67
67
|
q.value = !1;
|
|
68
68
|
}
|
|
69
69
|
}
|
|
70
|
-
async function
|
|
70
|
+
async function ge() {
|
|
71
71
|
await O();
|
|
72
72
|
}
|
|
73
|
-
async function
|
|
73
|
+
async function ve() {
|
|
74
74
|
await O();
|
|
75
75
|
}
|
|
76
|
-
async function
|
|
76
|
+
async function me(e = 200) {
|
|
77
77
|
const t = {};
|
|
78
|
-
v.value && (t.search = v.value),
|
|
78
|
+
v.value && (t.search = v.value), m.field && m.order !== 0 && (t.ordering = m.order === -1 ? `-${m.field}` : m.field), R && Object.assign(t, R());
|
|
79
79
|
for (const [l, s] of Object.entries(E))
|
|
80
80
|
s != null && s !== "" && (t[l] = s);
|
|
81
81
|
const a = [];
|
|
@@ -106,31 +106,31 @@ function qe(F) {
|
|
|
106
106
|
function H(e) {
|
|
107
107
|
n.page = e, O();
|
|
108
108
|
}
|
|
109
|
-
function
|
|
109
|
+
function we() {
|
|
110
110
|
H(1);
|
|
111
111
|
}
|
|
112
|
-
function
|
|
112
|
+
function Pe() {
|
|
113
113
|
H(n.totalPages);
|
|
114
114
|
}
|
|
115
|
-
function
|
|
115
|
+
function he(e) {
|
|
116
116
|
n.page = e.page + 1, n.pageSize = e.rows, O();
|
|
117
117
|
}
|
|
118
|
-
function
|
|
119
|
-
|
|
118
|
+
function De(e) {
|
|
119
|
+
m.field = e.sortField ?? null, m.order = e.sortOrder ?? 0, n.page = 1, O();
|
|
120
120
|
}
|
|
121
121
|
function Q() {
|
|
122
122
|
const e = Z();
|
|
123
123
|
for (const t of Object.keys(e))
|
|
124
|
-
|
|
124
|
+
D[t] = e[t];
|
|
125
125
|
}
|
|
126
126
|
function Se(e, t) {
|
|
127
|
-
|
|
127
|
+
D[e] = t;
|
|
128
128
|
}
|
|
129
|
-
function
|
|
129
|
+
function be() {
|
|
130
130
|
if (z.value = !1, u.value = null, C = null, Q(), j) {
|
|
131
131
|
const e = j();
|
|
132
132
|
for (const [t, a] of Object.entries(e))
|
|
133
|
-
|
|
133
|
+
D[t] = a;
|
|
134
134
|
}
|
|
135
135
|
d.value = !0;
|
|
136
136
|
}
|
|
@@ -138,27 +138,27 @@ function qe(F) {
|
|
|
138
138
|
const t = {};
|
|
139
139
|
for (const a of g) {
|
|
140
140
|
let o = e[a.field] !== void 0 ? e[a.field] : null;
|
|
141
|
-
o && (a.type === "date" || a.type === "datetime") && typeof o == "string" && (o =
|
|
141
|
+
o && (a.type === "date" || a.type === "datetime") && typeof o == "string" && (o = le(o)), D[a.field] = o, t[a.field] = o;
|
|
142
142
|
}
|
|
143
143
|
C = t;
|
|
144
144
|
}
|
|
145
|
-
function
|
|
145
|
+
function ke(e) {
|
|
146
146
|
z.value = !1, u.value = e, ae(e), d.value = !0;
|
|
147
147
|
}
|
|
148
|
-
function
|
|
148
|
+
function ze(e) {
|
|
149
149
|
z.value = !0, u.value = e, ae(e), d.value = !0;
|
|
150
150
|
}
|
|
151
|
-
function
|
|
151
|
+
function Oe(e) {
|
|
152
152
|
z.value = !1, u.value = null, C = null, Q();
|
|
153
153
|
for (const t of g) {
|
|
154
154
|
if (t.field === p) continue;
|
|
155
|
-
let a = e[t.field] !== void 0 ? e[t.field] :
|
|
156
|
-
a && (t.type === "date" || t.type === "datetime") && typeof a == "string" && (a =
|
|
155
|
+
let a = e[t.field] !== void 0 ? e[t.field] : D[t.field];
|
|
156
|
+
a && (t.type === "date" || t.type === "datetime") && typeof a == "string" && (a = le(a)), D[t.field] = a;
|
|
157
157
|
}
|
|
158
158
|
if (j) {
|
|
159
159
|
const t = j();
|
|
160
160
|
for (const [a, o] of Object.entries(t))
|
|
161
|
-
|
|
161
|
+
D[a] = o;
|
|
162
162
|
}
|
|
163
163
|
d.value = !0;
|
|
164
164
|
}
|
|
@@ -166,36 +166,36 @@ function qe(F) {
|
|
|
166
166
|
const t = { ...e };
|
|
167
167
|
for (const a of g) {
|
|
168
168
|
const o = t[a.field];
|
|
169
|
-
if (a.type === "date" && o instanceof Date ? t[a.field] =
|
|
169
|
+
if (a.type === "date" && o instanceof Date ? t[a.field] = ne(o) : a.type === "datetime" && o instanceof Date && (t[a.field] = se(o)), a.type === "fk" && o !== null && typeof o == "object") {
|
|
170
170
|
const r = a.optionValue || "id";
|
|
171
171
|
t[a.field] = o[r] ?? o;
|
|
172
172
|
}
|
|
173
|
-
(a.type === "mask" || a.type === "cpf_cnpj") && typeof o == "string" && (t[a.field] =
|
|
173
|
+
(a.type === "mask" || a.type === "cpf_cnpj") && typeof o == "string" && (t[a.field] = Ie(o));
|
|
174
174
|
}
|
|
175
175
|
return t;
|
|
176
176
|
}
|
|
177
|
-
async function
|
|
177
|
+
async function Fe() {
|
|
178
178
|
for (const e of g) {
|
|
179
179
|
if (e.validate) {
|
|
180
|
-
const t = e.validate(
|
|
180
|
+
const t = e.validate(D[e.field]);
|
|
181
181
|
if (t)
|
|
182
182
|
return b.error(t), null;
|
|
183
183
|
}
|
|
184
184
|
if (e.required) {
|
|
185
|
-
const t =
|
|
185
|
+
const t = D[e.field];
|
|
186
186
|
if (t == null || t === "")
|
|
187
187
|
return b.error(`${e.label} é obrigatório`), null;
|
|
188
188
|
}
|
|
189
189
|
}
|
|
190
190
|
c.value = !0;
|
|
191
191
|
try {
|
|
192
|
-
let e = oe(
|
|
192
|
+
let e = oe(D);
|
|
193
193
|
if (!A.value && j && Object.assign(e, j()), A.value && Y && C) {
|
|
194
194
|
const s = oe(C);
|
|
195
|
-
if (e =
|
|
195
|
+
if (e = Re(s, e), Object.keys(e).length === 0 && !T) {
|
|
196
196
|
d.value = !1;
|
|
197
|
-
const
|
|
198
|
-
return u.value = null, C = null,
|
|
197
|
+
const S = u.value;
|
|
198
|
+
return u.value = null, C = null, S;
|
|
199
199
|
}
|
|
200
200
|
}
|
|
201
201
|
T && (e = T(e, A.value));
|
|
@@ -204,17 +204,17 @@ function qe(F) {
|
|
|
204
204
|
if (t) {
|
|
205
205
|
const s = new Set(
|
|
206
206
|
g.filter((k) => k.type === "image").map((k) => k.field)
|
|
207
|
-
),
|
|
207
|
+
), S = new FormData();
|
|
208
208
|
for (const [k, L] of Object.entries(e))
|
|
209
209
|
if (L != null)
|
|
210
210
|
if (L instanceof File)
|
|
211
|
-
|
|
211
|
+
S.append(k, L);
|
|
212
212
|
else {
|
|
213
213
|
if (s.has(k))
|
|
214
214
|
continue;
|
|
215
|
-
|
|
215
|
+
S.append(k, String(L));
|
|
216
216
|
}
|
|
217
|
-
a =
|
|
217
|
+
a = S, o = { "Content-Type": "multipart/form-data" };
|
|
218
218
|
}
|
|
219
219
|
const r = o ? { headers: o } : void 0;
|
|
220
220
|
let l;
|
|
@@ -226,8 +226,8 @@ function qe(F) {
|
|
|
226
226
|
a,
|
|
227
227
|
r
|
|
228
228
|
), !x) {
|
|
229
|
-
const
|
|
230
|
-
|
|
229
|
+
const S = h.value.findIndex((k) => k[p] === s);
|
|
230
|
+
S !== -1 && (h.value[S] = l.data);
|
|
231
231
|
}
|
|
232
232
|
b.success(f.successUpdate);
|
|
233
233
|
} else
|
|
@@ -239,36 +239,37 @@ function qe(F) {
|
|
|
239
239
|
c.value = !1;
|
|
240
240
|
}
|
|
241
241
|
}
|
|
242
|
-
async function
|
|
242
|
+
async function je(e, t, a) {
|
|
243
243
|
const o = e[p], r = g.find((s) => s.field === t);
|
|
244
244
|
let l = a;
|
|
245
|
-
(r == null ? void 0 : r.type) === "date" && l instanceof Date ? l =
|
|
245
|
+
(r == null ? void 0 : r.type) === "date" && l instanceof Date ? l = ne(l) : (r == null ? void 0 : r.type) === "datetime" && l instanceof Date && (l = se(l));
|
|
246
246
|
try {
|
|
247
|
-
const s = await i.update(w, o, { [t]: l }),
|
|
248
|
-
|
|
247
|
+
const s = await i.update(w, o, { [t]: l }), S = h.value.findIndex((k) => k[p] === o);
|
|
248
|
+
S !== -1 && (h.value[S] = { ...h.value[S], ...s.data }), b.success(f.successUpdate);
|
|
249
249
|
} catch (s) {
|
|
250
250
|
b.error(X(s, "Erro ao salvar o campo"));
|
|
251
251
|
}
|
|
252
252
|
}
|
|
253
|
-
function
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
}
|
|
263
|
-
}, f.deleteConfirmMessage);
|
|
253
|
+
async function ie(e) {
|
|
254
|
+
try {
|
|
255
|
+
const t = e[p];
|
|
256
|
+
await i.delete(w, t);
|
|
257
|
+
const a = h.value.findIndex((o) => o[p] === t);
|
|
258
|
+
a !== -1 && (h.value.splice(a, 1), n.rows--), b.success(f.successDelete), M && M(e);
|
|
259
|
+
} catch (t) {
|
|
260
|
+
b.error(X(t, "Erro ao excluir registro"));
|
|
261
|
+
}
|
|
264
262
|
}
|
|
265
|
-
function xe() {
|
|
263
|
+
function xe(e) {
|
|
264
|
+
B(() => ie(e), f.deleteConfirmMessage);
|
|
265
|
+
}
|
|
266
|
+
function Te() {
|
|
266
267
|
W.value = [];
|
|
267
268
|
}
|
|
268
|
-
function
|
|
269
|
+
function _e(e, t) {
|
|
269
270
|
t == null || t === "" ? delete E[e] : E[e] = t, n.page = 1, O();
|
|
270
271
|
}
|
|
271
|
-
function
|
|
272
|
+
function Ve() {
|
|
272
273
|
for (const e of Object.keys(E)) delete E[e];
|
|
273
274
|
n.page = 1, O();
|
|
274
275
|
}
|
|
@@ -282,48 +283,49 @@ function qe(F) {
|
|
|
282
283
|
search: v,
|
|
283
284
|
dialogVisible: d,
|
|
284
285
|
editingItem: u,
|
|
285
|
-
formData:
|
|
286
|
+
formData: D,
|
|
286
287
|
pagination: n,
|
|
287
|
-
sort:
|
|
288
|
+
sort: m,
|
|
288
289
|
isEditing: A,
|
|
289
|
-
isViewing:
|
|
290
|
+
isViewing: ce,
|
|
290
291
|
viewMode: z,
|
|
291
|
-
dialogTitle:
|
|
292
|
-
isFirstPage:
|
|
293
|
-
isLastPage:
|
|
294
|
-
init:
|
|
292
|
+
dialogTitle: ue,
|
|
293
|
+
isFirstPage: de,
|
|
294
|
+
isLastPage: pe,
|
|
295
|
+
init: ge,
|
|
295
296
|
fetchItems: O,
|
|
296
|
-
fetchAll:
|
|
297
|
-
refresh:
|
|
297
|
+
fetchAll: me,
|
|
298
|
+
refresh: ve,
|
|
298
299
|
setSearch: te,
|
|
299
300
|
onSearch: ye,
|
|
300
|
-
onPage:
|
|
301
|
-
onSort:
|
|
302
|
-
openCreateDialog:
|
|
303
|
-
openEditDialog:
|
|
304
|
-
openViewDialog:
|
|
305
|
-
openDuplicateDialog:
|
|
306
|
-
save:
|
|
307
|
-
updateField:
|
|
308
|
-
confirmDelete:
|
|
301
|
+
onPage: he,
|
|
302
|
+
onSort: De,
|
|
303
|
+
openCreateDialog: be,
|
|
304
|
+
openEditDialog: ke,
|
|
305
|
+
openViewDialog: ze,
|
|
306
|
+
openDuplicateDialog: Oe,
|
|
307
|
+
save: Fe,
|
|
308
|
+
updateField: je,
|
|
309
|
+
confirmDelete: xe,
|
|
310
|
+
performDelete: ie,
|
|
309
311
|
setFormField: Se,
|
|
310
312
|
resetForm: Q,
|
|
311
313
|
goToPage: H,
|
|
312
|
-
firstPage:
|
|
313
|
-
lastPage:
|
|
314
|
-
clearSelection:
|
|
315
|
-
setColumnFilter:
|
|
316
|
-
clearColumnFilters:
|
|
314
|
+
firstPage: we,
|
|
315
|
+
lastPage: Pe,
|
|
316
|
+
clearSelection: Te,
|
|
317
|
+
setColumnFilter: _e,
|
|
318
|
+
clearColumnFilters: Ve,
|
|
317
319
|
config: F
|
|
318
320
|
};
|
|
319
321
|
}
|
|
320
|
-
function
|
|
321
|
-
const { endpoint: w, searchDebounce: g = 300, immediate: p = !1 } = F, N = K(
|
|
322
|
+
function $e(F) {
|
|
323
|
+
const { endpoint: w, searchDebounce: g = 300, immediate: p = !1 } = F, N = K(re);
|
|
322
324
|
if (!N)
|
|
323
325
|
throw new Error(
|
|
324
326
|
"[wPrimeVueComponents] dataProvider não encontrado. Registre o WPrimeVuePlugin antes de usar useApi."
|
|
325
327
|
);
|
|
326
|
-
const Y = N, x = K(
|
|
328
|
+
const Y = N, x = K(fe), R = F.pageSize ?? (x == null ? void 0 : x.defaultPageSize) ?? 20, j = y([]), T = y(!1), _ = y(""), M = y({}), V = I({}), i = I({
|
|
327
329
|
page: 1,
|
|
328
330
|
pageSize: R,
|
|
329
331
|
rows: 0,
|
|
@@ -389,7 +391,7 @@ function Le(F) {
|
|
|
389
391
|
};
|
|
390
392
|
}
|
|
391
393
|
export {
|
|
392
|
-
|
|
393
|
-
|
|
394
|
+
Le as a,
|
|
395
|
+
$e as u
|
|
394
396
|
};
|
|
395
|
-
//# sourceMappingURL=useApi-
|
|
397
|
+
//# sourceMappingURL=useApi-D8-gfJR-.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useApi-D8-gfJR-.js","sources":["../src/composables/useCrudManager.ts","../src/composables/useApi.ts"],"sourcesContent":["import { ref, reactive, computed, inject } from 'vue'\nimport { W_CONFIG_KEY, W_DATA_PROVIDER_KEY } from '@/types/plugin'\nimport type { WPluginConfig } from '@/types/plugin'\nimport type { DataProvider } from '@/types/dataProvider'\nimport type { PaginationState, SortState } from '@/types/api'\nimport type { CrudManagerConfig, CrudManagerReturn } from '@/types/manager'\nimport type { CrudLabels } from '@/types/labels'\nimport { DEFAULT_CRUD_LABELS } from '@/types/labels'\nimport { useAppToast } from './useAppToast'\nimport { useAppConfirm } from './useAppConfirm'\nimport { extractApiError } from './useApiError'\nimport { parseDate, toDateString, toDateTimeString } from '@/utils/dates'\nimport { stripMask } from '@/utils/masks'\n\n/** Shallow diff: returns only the keys whose value changed between two records. */\nfunction diffRecord(\n original: Record<string, unknown>,\n current: Record<string, unknown>,\n): Record<string, unknown> {\n const out: Record<string, unknown> = {}\n for (const key of Object.keys(current)) {\n if (JSON.stringify(original[key]) !== JSON.stringify(current[key])) {\n out[key] = current[key]\n }\n }\n return out\n}\n\nexport function useCrudManager<T extends Record<string, unknown> = Record<string, unknown>>(\n config: CrudManagerConfig<T>,\n): CrudManagerReturn<T> {\n const {\n endpoint,\n form: formFields,\n pk = 'id',\n searchDebounce = 300,\n partialUpdate = true,\n refetchOnSave = true,\n filterParams = undefined,\n createDefaults = undefined,\n transformPayload = undefined,\n onAfterSave = undefined,\n onAfterDelete = undefined,\n } = config\n\n const dataProvider = inject<DataProvider>(W_DATA_PROVIDER_KEY)\n if (!dataProvider) {\n throw new Error(\n '[wPrimeVueComponents] dataProvider não encontrado. Registre o WPrimeVuePlugin antes de usar useCrudManager.',\n )\n }\n const provider = dataProvider\n\n const pluginConfig = inject<WPluginConfig>(W_CONFIG_KEY)\n const defaultPageSize = config.pageSize ?? pluginConfig?.defaultPageSize ?? 20\n\n const labels: CrudLabels = { ...DEFAULT_CRUD_LABELS, ...config.labels }\n const toast = useAppToast()\n const { confirmDelete: confirmDeleteDialog } = useAppConfirm()\n\n // ---------------------------------------------------------------------------\n // State\n // ---------------------------------------------------------------------------\n\n const items = ref<T[]>([]) as import('vue').Ref<T[]>\n const selectedItems = ref<T[]>([]) as import('vue').Ref<T[]>\n const extras = ref<Record<string, unknown>>({})\n const loading = ref(false)\n const saving = ref(false)\n const search = ref('')\n const dialogVisible = ref(false)\n const viewMode = ref(false)\n const editingItem = ref<T | null>(null) as import('vue').Ref<T | null>\n const formData = reactive<Record<string, unknown>>({})\n // Snapshot of the form values when an edit dialog opens — used for diff-based PATCH.\n let editingOriginal: Record<string, unknown> | null = null\n\n const pagination: PaginationState = reactive({\n page: 1,\n pageSize: defaultPageSize,\n rows: 0,\n totalPages: 0,\n })\n\n const sort: SortState = reactive({\n field: null,\n order: 0,\n })\n\n // Filtros de coluna ativos (param → valor). Persistem entre páginas/ordenação.\n const columnFilters = reactive<Record<string, unknown>>({})\n\n // ---------------------------------------------------------------------------\n // Defaults\n // ---------------------------------------------------------------------------\n\n function getDefaults(): Record<string, unknown> {\n const defaults: Record<string, unknown> = {}\n for (const f of formFields) {\n defaults[f.field] =\n f.defaultValue !== undefined\n ? typeof f.defaultValue === 'function'\n ? (f.defaultValue as () => unknown)()\n : f.defaultValue\n : null\n }\n return defaults\n }\n\n // Initialize\n const defaults = getDefaults()\n for (const key of Object.keys(defaults)) {\n formData[key] = defaults[key]\n }\n\n // ---------------------------------------------------------------------------\n // Computed\n // ---------------------------------------------------------------------------\n\n const isEditing = computed(() => editingItem.value !== null && !viewMode.value)\n const isViewing = computed(() => viewMode.value)\n const dialogTitle = computed(() =>\n viewMode.value\n ? (labels.viewTitle ?? 'Visualizar Registro')\n : isEditing.value\n ? labels.editTitle\n : labels.createTitle,\n )\n const isFirstPage = computed(() => pagination.page <= 1)\n const isLastPage = computed(() => pagination.page >= pagination.totalPages)\n\n // ---------------------------------------------------------------------------\n // Fetch\n // ---------------------------------------------------------------------------\n\n let searchTimeout: ReturnType<typeof setTimeout> | null = null\n\n async function fetchItems(params: Record<string, unknown> = {}): Promise<void> {\n loading.value = true\n try {\n const queryParams: Record<string, unknown> = {\n page: pagination.page,\n page_size: pagination.pageSize,\n ...params,\n }\n\n if (search.value) {\n queryParams.search = search.value\n }\n\n if (sort.field && sort.order !== 0) {\n queryParams.ordering = sort.order === -1 ? `-${sort.field}` : sort.field\n }\n\n if (filterParams) {\n Object.assign(queryParams, filterParams())\n }\n\n // Filtros de coluna ativos (ignora vazios).\n for (const [key, val] of Object.entries(columnFilters)) {\n if (val !== null && val !== undefined && val !== '') queryParams[key] = val\n }\n\n const responseData = await provider.list<T>(endpoint, queryParams)\n items.value = responseData.data\n selectedItems.value = [] // seleção anterior fica obsoleta ao recarregar\n pagination.rows = responseData.rows\n extras.value = responseData.extras ?? {}\n if (responseData.page) pagination.page = responseData.page\n if (responseData.page_size) pagination.pageSize = responseData.page_size\n pagination.totalPages = Math.ceil(pagination.rows / pagination.pageSize) || 0\n } finally {\n loading.value = false\n }\n }\n\n async function init(): Promise<void> {\n await fetchItems()\n }\n\n async function refresh(): Promise<void> {\n await fetchItems()\n }\n\n /**\n * Fetch every record across all pages (respeitando search, sort e\n * filterParams atuais) sem alterar o estado da lista. Útil para exportações.\n */\n async function fetchAll(pageSize = 200): Promise<T[]> {\n const base: Record<string, unknown> = {}\n if (search.value) base.search = search.value\n if (sort.field && sort.order !== 0) {\n base.ordering = sort.order === -1 ? `-${sort.field}` : sort.field\n }\n if (filterParams) Object.assign(base, filterParams())\n for (const [key, val] of Object.entries(columnFilters)) {\n if (val !== null && val !== undefined && val !== '') base[key] = val\n }\n\n const all: T[] = []\n let page = 1\n // Hard cap para evitar loop infinito caso o backend não pagine corretamente.\n const maxPages = 10000\n while (page <= maxPages) {\n const res = await provider.list<T>(endpoint, {\n ...base,\n page,\n page_size: pageSize,\n })\n all.push(...res.data)\n const total = res.rows ?? all.length\n if (res.data.length === 0 || all.length >= total) break\n page++\n }\n return all\n }\n\n // ---------------------------------------------------------------------------\n // Search\n // ---------------------------------------------------------------------------\n\n function setSearch(value: string): void {\n search.value = value\n if (searchTimeout) clearTimeout(searchTimeout)\n searchTimeout = setTimeout(() => {\n pagination.page = 1\n fetchItems()\n }, searchDebounce)\n }\n\n function onSearch(event: Event): void {\n const target = event.target as HTMLInputElement\n setSearch(target.value)\n }\n\n // ---------------------------------------------------------------------------\n // Pagination\n // ---------------------------------------------------------------------------\n\n function goToPage(page: number): void {\n pagination.page = page\n fetchItems()\n }\n\n function firstPage(): void {\n goToPage(1)\n }\n\n function lastPage(): void {\n goToPage(pagination.totalPages)\n }\n\n function onPage(event: { page: number; rows: number }): void {\n pagination.page = event.page + 1\n pagination.pageSize = event.rows\n fetchItems()\n }\n\n function onSort(event: { sortField?: string | null; sortOrder?: 1 | -1 | 0 | null }): void {\n sort.field = event.sortField ?? null\n sort.order = event.sortOrder ?? 0\n pagination.page = 1\n fetchItems()\n }\n\n // ---------------------------------------------------------------------------\n // Form\n // ---------------------------------------------------------------------------\n\n function resetForm(): void {\n const defs = getDefaults()\n for (const key of Object.keys(defs)) {\n formData[key] = defs[key]\n }\n }\n\n function setFormField(field: string, value: unknown): void {\n formData[field] = value\n }\n\n function openCreateDialog(): void {\n viewMode.value = false\n editingItem.value = null\n editingOriginal = null\n resetForm()\n // Apply createDefaults (e.g. parent FK) on top of field defaults\n if (createDefaults) {\n const extra = createDefaults()\n for (const [key, val] of Object.entries(extra)) {\n formData[key] = val\n }\n }\n dialogVisible.value = true\n }\n\n function loadItemIntoForm(item: T): void {\n const snapshot: Record<string, unknown> = {}\n for (const f of formFields) {\n let value = item[f.field] !== undefined ? item[f.field] : null\n if (value && (f.type === 'date' || f.type === 'datetime') && typeof value === 'string') {\n value = parseDate(value)\n }\n formData[f.field] = value\n snapshot[f.field] = value\n }\n editingOriginal = snapshot\n }\n\n function openEditDialog(item: T): void {\n viewMode.value = false\n editingItem.value = item\n loadItemIntoForm(item)\n dialogVisible.value = true\n }\n\n function openViewDialog(item: T): void {\n viewMode.value = true\n editingItem.value = item\n loadItemIntoForm(item)\n dialogVisible.value = true\n }\n\n function openDuplicateDialog(item: T): void {\n // Abre o diálogo em modo criação, pré-preenchido com os dados do registro\n // (exceto a chave primária).\n viewMode.value = false\n editingItem.value = null\n editingOriginal = null\n resetForm()\n for (const f of formFields) {\n if (f.field === pk) continue\n let value = item[f.field] !== undefined ? item[f.field] : formData[f.field]\n if (value && (f.type === 'date' || f.type === 'datetime') && typeof value === 'string') {\n value = parseDate(value)\n }\n formData[f.field] = value\n }\n // createDefaults (ex: FK do pai) sobrepõe os valores duplicados.\n if (createDefaults) {\n const extra = createDefaults()\n for (const [key, val] of Object.entries(extra)) {\n formData[key] = val\n }\n }\n dialogVisible.value = true\n }\n\n // ---------------------------------------------------------------------------\n // Save\n // ---------------------------------------------------------------------------\n\n // Apply automatic conversions (dates, FK objects, masks) to a record,\n // returning a fresh plain object suitable for the API payload.\n function convertRecord(record: Record<string, unknown>): Record<string, unknown> {\n const out: Record<string, unknown> = { ...record }\n for (const f of formFields) {\n const val = out[f.field]\n\n // Datas\n if (f.type === 'date' && val instanceof Date) {\n out[f.field] = toDateString(val)\n } else if (f.type === 'datetime' && val instanceof Date) {\n out[f.field] = toDateTimeString(val)\n }\n\n // FK — extrair o ID do objeto selecionado\n if (f.type === 'fk' && val !== null && typeof val === 'object') {\n const key = f.optionValue || 'id'\n out[f.field] = (val as Record<string, unknown>)[key] ?? val\n }\n\n // Máscaras — strip para enviar só dígitos\n if ((f.type === 'mask' || f.type === 'cpf_cnpj') && typeof val === 'string') {\n out[f.field] = stripMask(val)\n }\n }\n return out\n }\n\n async function save(): Promise<T | null> {\n // Validação\n for (const f of formFields) {\n if (f.validate) {\n const result = f.validate(formData[f.field])\n if (result) {\n toast.error(result)\n return null\n }\n }\n if (f.required) {\n const val = formData[f.field]\n if (val === null || val === undefined || val === '') {\n toast.error(`${f.label} é obrigatório`)\n return null\n }\n }\n }\n\n saving.value = true\n try {\n let payload: Record<string, unknown> = convertRecord(formData)\n\n // Merge createDefaults into payload for new records (hidden parent FKs, etc.)\n if (!isEditing.value && createDefaults) {\n Object.assign(payload, createDefaults())\n }\n\n // Edição: enviar apenas os campos alterados (diff) quando partialUpdate.\n if (isEditing.value && partialUpdate && editingOriginal) {\n const originalPayload = convertRecord(editingOriginal)\n payload = diffRecord(originalPayload, payload)\n\n // Nada mudou — fecha sem chamar a API.\n if (Object.keys(payload).length === 0 && !transformPayload) {\n dialogVisible.value = false\n const current = editingItem.value\n editingItem.value = null\n editingOriginal = null\n return current\n }\n }\n\n if (transformPayload) {\n payload = transformPayload(payload, isEditing.value)\n }\n\n // Detecta se tem arquivo (image) → FormData\n const hasFile = formFields.some((f) => f.type === 'image' && payload[f.field] instanceof File)\n\n let body: Record<string, unknown> | FormData = payload\n let headers: Record<string, string> | undefined\n\n if (hasFile) {\n const imageFields = new Set(\n formFields.filter((f) => f.type === 'image').map((f) => f.field),\n )\n const fd = new FormData()\n for (const [key, val] of Object.entries(payload)) {\n if (val === null || val === undefined) continue\n if (val instanceof File) {\n fd.append(key, val)\n } else if (imageFields.has(key)) {\n // URL string de imagem inalterada — pula\n continue\n } else {\n fd.append(key, String(val))\n }\n }\n body = fd\n headers = { 'Content-Type': 'multipart/form-data' }\n }\n\n const requestConfig = headers ? { headers } : undefined\n let response\n\n if (isEditing.value && editingItem.value) {\n const itemPk = editingItem.value[pk as keyof T]\n response = await provider.update<T>(\n endpoint,\n itemPk as string | number,\n body,\n requestConfig,\n )\n if (!refetchOnSave) {\n const index = items.value.findIndex((i) => i[pk as keyof T] === itemPk)\n if (index !== -1) {\n items.value[index] = response.data\n }\n }\n toast.success(labels.successUpdate)\n } else {\n response = await provider.create<T>(endpoint, body, requestConfig)\n if (!refetchOnSave) {\n items.value.unshift(response.data)\n pagination.rows++\n }\n toast.success(labels.successCreate)\n }\n\n dialogVisible.value = false\n editingItem.value = null\n editingOriginal = null\n\n // Re-busca a página atual para refletir o estado real do backend\n // (campos derivados, ordenação, etc.) sem perder a posição da paginação,\n // busca ou filtros — todos preservados em `pagination`/`search`/`sort`.\n if (refetchOnSave) {\n await fetchItems()\n }\n\n if (onAfterSave) onAfterSave(response.data, isEditing.value)\n return response.data\n } catch (err) {\n toast.error(extractApiError(err, 'Erro ao salvar registro'))\n return null\n } finally {\n saving.value = false\n }\n }\n\n // ---------------------------------------------------------------------------\n // Inline (cell) edit\n // ---------------------------------------------------------------------------\n\n async function updateField(item: T, field: string, value: unknown): Promise<void> {\n const itemPk = item[pk as keyof T]\n const fdef = formFields.find((f) => f.field === field)\n let v = value\n if (fdef?.type === 'date' && v instanceof Date) v = toDateString(v)\n else if (fdef?.type === 'datetime' && v instanceof Date) v = toDateTimeString(v)\n try {\n const response = await provider.update<T>(endpoint, itemPk as string | number, { [field]: v })\n const index = items.value.findIndex((i) => i[pk as keyof T] === itemPk)\n if (index !== -1) items.value[index] = { ...items.value[index], ...response.data }\n toast.success(labels.successUpdate)\n } catch (err) {\n toast.error(extractApiError(err, 'Erro ao salvar o campo'))\n }\n }\n\n // ---------------------------------------------------------------------------\n // Delete\n // ---------------------------------------------------------------------------\n\n // Exclusão crua (sem o confirm de serviço) — para quem controla a própria\n // confirmação, ex.: WCrudView com diálogo de exclusão próprio (slot de mensagem).\n async function performDelete(item: T): Promise<void> {\n try {\n const itemPk = item[pk as keyof T]\n await provider.delete(endpoint, itemPk as string | number)\n const index = items.value.findIndex((i) => i[pk as keyof T] === itemPk)\n if (index !== -1) {\n items.value.splice(index, 1)\n pagination.rows--\n }\n toast.success(labels.successDelete)\n if (onAfterDelete) onAfterDelete(item)\n } catch (err) {\n toast.error(extractApiError(err, 'Erro ao excluir registro'))\n }\n }\n\n function confirmDelete(item: T): void {\n confirmDeleteDialog(() => performDelete(item), labels.deleteConfirmMessage)\n }\n\n function clearSelection(): void {\n selectedItems.value = []\n }\n\n function setColumnFilter(param: string, value: unknown): void {\n if (value === null || value === undefined || value === '') {\n delete columnFilters[param]\n } else {\n columnFilters[param] = value\n }\n pagination.page = 1\n fetchItems()\n }\n\n function clearColumnFilters(): void {\n for (const key of Object.keys(columnFilters)) delete columnFilters[key]\n pagination.page = 1\n fetchItems()\n }\n\n // ---------------------------------------------------------------------------\n // Return\n // ---------------------------------------------------------------------------\n\n return {\n items,\n selectedItems,\n columnFilters,\n extras,\n loading,\n saving,\n search,\n dialogVisible,\n editingItem,\n formData,\n pagination,\n sort,\n isEditing,\n isViewing,\n viewMode,\n dialogTitle,\n isFirstPage,\n isLastPage,\n init,\n fetchItems,\n fetchAll,\n refresh,\n setSearch,\n onSearch,\n onPage,\n onSort,\n openCreateDialog,\n openEditDialog,\n openViewDialog,\n openDuplicateDialog,\n save,\n updateField,\n confirmDelete,\n performDelete,\n setFormField,\n resetForm,\n goToPage,\n firstPage,\n lastPage,\n clearSelection,\n setColumnFilter,\n clearColumnFilters,\n config,\n }\n}\n","import { ref, reactive, inject } from 'vue'\nimport type { PaginationState, SortState, UseApiOptions, UseApiReturn } from '@/types/api'\nimport { W_CONFIG_KEY, W_DATA_PROVIDER_KEY } from '@/types/plugin'\nimport type { WPluginConfig } from '@/types/plugin'\nimport type { DataProvider } from '@/types/dataProvider'\n\nexport function useApi<T = Record<string, unknown>>(options: UseApiOptions): UseApiReturn<T> {\n const { endpoint, searchDebounce = 300, immediate = false } = options\n\n const dataProvider = inject<DataProvider>(W_DATA_PROVIDER_KEY)\n if (!dataProvider) {\n throw new Error(\n '[wPrimeVueComponents] dataProvider não encontrado. Registre o WPrimeVuePlugin antes de usar useApi.',\n )\n }\n const provider = dataProvider\n\n const config = inject<WPluginConfig>(W_CONFIG_KEY)\n const defaultPageSize = options.pageSize ?? config?.defaultPageSize ?? 20\n\n // State\n const items = ref<T[]>([]) as import('vue').Ref<T[]>\n const loading = ref(false)\n const search = ref('')\n const extras = ref<Record<string, unknown>>({})\n const filters = reactive<Record<string, unknown>>({})\n\n const pagination: PaginationState = reactive({\n page: 1,\n pageSize: defaultPageSize,\n rows: 0,\n totalPages: 0,\n })\n\n const sort: SortState = reactive({\n field: null,\n order: 0,\n })\n\n // Debounce\n let searchTimeout: ReturnType<typeof setTimeout> | null = null\n\n async function fetchItems(params: Record<string, unknown> = {}): Promise<void> {\n loading.value = true\n try {\n const queryParams: Record<string, unknown> = {\n page: pagination.page,\n page_size: pagination.pageSize,\n ...params,\n }\n\n if (search.value) {\n queryParams.search = search.value\n }\n\n if (sort.field && sort.order !== 0) {\n queryParams.ordering = sort.order === -1 ? `-${sort.field}` : sort.field\n }\n\n for (const [key, value] of Object.entries(filters)) {\n if (value !== null && value !== undefined && value !== '') {\n queryParams[key] = value\n }\n }\n\n const responseData = await provider.list<T>(endpoint, queryParams)\n\n items.value = responseData.data\n pagination.rows = responseData.rows\n if (responseData.page) pagination.page = responseData.page\n if (responseData.page_size) pagination.pageSize = responseData.page_size\n pagination.totalPages = Math.ceil(pagination.rows / pagination.pageSize) || 0\n extras.value = responseData.extras ?? {}\n } finally {\n loading.value = false\n }\n }\n\n async function refresh(): Promise<void> {\n await fetchItems()\n }\n\n function setSearch(value: string): void {\n search.value = value\n if (searchTimeout) clearTimeout(searchTimeout)\n searchTimeout = setTimeout(() => {\n pagination.page = 1\n fetchItems()\n }, searchDebounce)\n }\n\n function setFilter(key: string, value: unknown): void {\n filters[key] = value\n pagination.page = 1\n fetchItems()\n }\n\n function clearFilters(): void {\n for (const key of Object.keys(filters)) {\n delete filters[key]\n }\n pagination.page = 1\n fetchItems()\n }\n\n function onPage(event: { page: number; rows: number }): void {\n pagination.page = event.page + 1\n pagination.pageSize = event.rows\n fetchItems()\n }\n\n function onSort(event: { sortField: string; sortOrder: 1 | -1 | 0 }): void {\n sort.field = event.sortField ?? null\n sort.order = event.sortOrder ?? 0\n pagination.page = 1\n fetchItems()\n }\n\n if (immediate) {\n fetchItems()\n }\n\n return {\n items,\n loading,\n search,\n pagination,\n sort,\n extras,\n fetchItems,\n refresh,\n setSearch,\n setFilter,\n clearFilters,\n onPage,\n onSort,\n }\n}\n"],"names":["diffRecord","original","current","out","key","useCrudManager","config","endpoint","formFields","pk","searchDebounce","partialUpdate","refetchOnSave","filterParams","createDefaults","transformPayload","onAfterSave","onAfterDelete","dataProvider","inject","W_DATA_PROVIDER_KEY","provider","pluginConfig","W_CONFIG_KEY","defaultPageSize","labels","DEFAULT_CRUD_LABELS","toast","useAppToast","confirmDeleteDialog","useAppConfirm","items","ref","selectedItems","extras","loading","saving","search","dialogVisible","viewMode","editingItem","formData","reactive","editingOriginal","pagination","sort","columnFilters","getDefaults","defaults","f","isEditing","computed","isViewing","dialogTitle","isFirstPage","isLastPage","searchTimeout","fetchItems","params","queryParams","val","responseData","init","refresh","fetchAll","pageSize","base","all","page","maxPages","res","total","setSearch","value","onSearch","event","target","goToPage","firstPage","lastPage","onPage","onSort","resetForm","defs","setFormField","field","openCreateDialog","extra","loadItemIntoForm","item","snapshot","parseDate","openEditDialog","openViewDialog","openDuplicateDialog","convertRecord","record","toDateString","toDateTimeString","stripMask","save","result","payload","originalPayload","hasFile","body","headers","imageFields","fd","requestConfig","response","itemPk","index","i","err","extractApiError","updateField","fdef","v","performDelete","confirmDelete","clearSelection","setColumnFilter","param","clearColumnFilters","useApi","options","immediate","filters","setFilter","clearFilters"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";const o=require("vue"),Y=require("./plugin-D1YvyKXX.cjs"),ze=require("./types.cjs"),b=require("./useFormKeyboardNav-D4Ow3k4Y.cjs");function Fe(j,P){const v={};for(const g of Object.keys(P))JSON.stringify(j[g])!==JSON.stringify(P[g])&&(v[g]=P[g]);return v}function je(j){const{endpoint:P,form:v,pk:g="id",searchDebounce:U=300,partialUpdate:$=!0,refetchOnSave:E=!0,filterParams:R=void 0,createDefaults:_=void 0,transformPayload:T=void 0,onAfterSave:x=void 0,onAfterDelete:q=void 0}=j,A=o.inject(Y.W_DATA_PROVIDER_KEY);if(!A)throw new Error("[wPrimeVueComponents] dataProvider não encontrado. Registre o WPrimeVuePlugin antes de usar useCrudManager.");const n=A,w=o.inject(Y.W_CONFIG_KEY),M=j.pageSize??(w==null?void 0:w.defaultPageSize)??20,f={...ze.DEFAULT_CRUD_LABELS,...j.labels},k=b.useAppToast(),{confirmDelete:G}=b.useAppConfirm(),h=o.ref([]),W=o.ref([]),L=o.ref({}),K=o.ref(!1),u=o.ref(!1),y=o.ref(""),p=o.ref(!1),z=o.ref(!1),d=o.ref(null),D=o.reactive({});let C=null;const r=o.reactive({page:1,pageSize:M,rows:0,totalPages:0}),m=o.reactive({field:null,order:0}),V=o.reactive({});function Q(){const e={};for(const t of v)e[t.field]=t.defaultValue!==void 0?typeof t.defaultValue=="function"?t.defaultValue():t.defaultValue:null;return e}const X=Q();for(const e of Object.keys(X))D[e]=X[e];const I=o.computed(()=>d.value!==null&&!z.value),ie=o.computed(()=>z.value),oe=o.computed(()=>z.value?f.viewTitle??"Visualizar Registro":I.value?f.editTitle:f.createTitle),ne=o.computed(()=>r.page<=1),re=o.computed(()=>r.page>=r.totalPages);let J=null;async function F(e={}){K.value=!0;try{const t={page:r.page,page_size:r.pageSize,...e};y.value&&(t.search=y.value),m.field&&m.order!==0&&(t.ordering=m.order===-1?`-${m.field}`:m.field),R&&Object.assign(t,R());for(const[i,c]of Object.entries(V))c!=null&&c!==""&&(t[i]=c);const a=await n.list(P,t);h.value=a.data,W.value=[],r.rows=a.rows,L.value=a.extras??{},a.page&&(r.page=a.page),a.page_size&&(r.pageSize=a.page_size),r.totalPages=Math.ceil(r.rows/r.pageSize)||0}finally{K.value=!1}}async function se(){await F()}async function le(){await F()}async function ce(e=200){const t={};y.value&&(t.search=y.value),m.field&&m.order!==0&&(t.ordering=m.order===-1?`-${m.field}`:m.field),R&&Object.assign(t,R());for(const[l,s]of Object.entries(V))s!=null&&s!==""&&(t[l]=s);const a=[];let i=1;const c=1e4;for(;i<=c;){const l=await n.list(P,{...t,page:i,page_size:e});a.push(...l.data);const s=l.rows??a.length;if(l.data.length===0||a.length>=s)break;i++}return a}function Z(e){y.value=e,J&&clearTimeout(J),J=setTimeout(()=>{r.page=1,F()},U)}function fe(e){const t=e.target;Z(t.value)}function B(e){r.page=e,F()}function ue(){B(1)}function de(){B(r.totalPages)}function pe(e){r.page=e.page+1,r.pageSize=e.rows,F()}function ge(e){m.field=e.sortField??null,m.order=e.sortOrder??0,r.page=1,F()}function H(){const e=Q();for(const t of Object.keys(e))D[t]=e[t]}function ve(e,t){D[e]=t}function ye(){if(z.value=!1,d.value=null,C=null,H(),_){const e=_();for(const[t,a]of Object.entries(e))D[t]=a}p.value=!0}function ee(e){const t={};for(const a of v){let i=e[a.field]!==void 0?e[a.field]:null;i&&(a.type==="date"||a.type==="datetime")&&typeof i=="string"&&(i=b.parseDate(i)),D[a.field]=i,t[a.field]=i}C=t}function me(e){z.value=!1,d.value=e,ee(e),p.value=!0}function Pe(e){z.value=!0,d.value=e,ee(e),p.value=!0}function we(e){z.value=!1,d.value=null,C=null,H();for(const t of v){if(t.field===g)continue;let a=e[t.field]!==void 0?e[t.field]:D[t.field];a&&(t.type==="date"||t.type==="datetime")&&typeof a=="string"&&(a=b.parseDate(a)),D[t.field]=a}if(_){const t=_();for(const[a,i]of Object.entries(t))D[a]=i}p.value=!0}function te(e){const t={...e};for(const a of v){const i=t[a.field];if(a.type==="date"&&i instanceof Date?t[a.field]=b.toDateString(i):a.type==="datetime"&&i instanceof Date&&(t[a.field]=b.toDateTimeString(i)),a.type==="fk"&&i!==null&&typeof i=="object"){const c=a.optionValue||"id";t[a.field]=i[c]??i}(a.type==="mask"||a.type==="cpf_cnpj")&&typeof i=="string"&&(t[a.field]=b.stripMask(i))}return t}async function he(){for(const e of v){if(e.validate){const t=e.validate(D[e.field]);if(t)return k.error(t),null}if(e.required){const t=D[e.field];if(t==null||t==="")return k.error(`${e.label} é obrigatório`),null}}u.value=!0;try{let e=te(D);if(!I.value&&_&&Object.assign(e,_()),I.value&&$&&C){const s=te(C);if(e=Fe(s,e),Object.keys(e).length===0&&!T){p.value=!1;const S=d.value;return d.value=null,C=null,S}}T&&(e=T(e,I.value));const t=v.some(s=>s.type==="image"&&e[s.field]instanceof File);let a=e,i;if(t){const s=new Set(v.filter(O=>O.type==="image").map(O=>O.field)),S=new FormData;for(const[O,N]of Object.entries(e))if(N!=null)if(N instanceof File)S.append(O,N);else{if(s.has(O))continue;S.append(O,String(N))}a=S,i={"Content-Type":"multipart/form-data"}}const c=i?{headers:i}:void 0;let l;if(I.value&&d.value){const s=d.value[g];if(l=await n.update(P,s,a,c),!E){const S=h.value.findIndex(O=>O[g]===s);S!==-1&&(h.value[S]=l.data)}k.success(f.successUpdate)}else l=await n.create(P,a,c),E||(h.value.unshift(l.data),r.rows++),k.success(f.successCreate);return p.value=!1,d.value=null,C=null,E&&await F(),x&&x(l.data,I.value),l.data}catch(e){return k.error(b.extractApiError(e,"Erro ao salvar registro")),null}finally{u.value=!1}}async function De(e,t,a){const i=e[g],c=v.find(s=>s.field===t);let l=a;(c==null?void 0:c.type)==="date"&&l instanceof Date?l=b.toDateString(l):(c==null?void 0:c.type)==="datetime"&&l instanceof Date&&(l=b.toDateTimeString(l));try{const s=await n.update(P,i,{[t]:l}),S=h.value.findIndex(O=>O[g]===i);S!==-1&&(h.value[S]={...h.value[S],...s.data}),k.success(f.successUpdate)}catch(s){k.error(b.extractApiError(s,"Erro ao salvar o campo"))}}async function ae(e){try{const t=e[g];await n.delete(P,t);const a=h.value.findIndex(i=>i[g]===t);a!==-1&&(h.value.splice(a,1),r.rows--),k.success(f.successDelete),q&&q(e)}catch(t){k.error(b.extractApiError(t,"Erro ao excluir registro"))}}function Se(e){G(()=>ae(e),f.deleteConfirmMessage)}function be(){W.value=[]}function ke(e,t){t==null||t===""?delete V[e]:V[e]=t,r.page=1,F()}function Oe(){for(const e of Object.keys(V))delete V[e];r.page=1,F()}return{items:h,selectedItems:W,columnFilters:V,extras:L,loading:K,saving:u,search:y,dialogVisible:p,editingItem:d,formData:D,pagination:r,sort:m,isEditing:I,isViewing:ie,viewMode:z,dialogTitle:oe,isFirstPage:ne,isLastPage:re,init:se,fetchItems:F,fetchAll:ce,refresh:le,setSearch:Z,onSearch:fe,onPage:pe,onSort:ge,openCreateDialog:ye,openEditDialog:me,openViewDialog:Pe,openDuplicateDialog:we,save:he,updateField:De,confirmDelete:Se,performDelete:ae,setFormField:ve,resetForm:H,goToPage:B,firstPage:ue,lastPage:de,clearSelection:be,setColumnFilter:ke,clearColumnFilters:Oe,config:j}}function _e(j){const{endpoint:P,searchDebounce:v=300,immediate:g=!1}=j,U=o.inject(Y.W_DATA_PROVIDER_KEY);if(!U)throw new Error("[wPrimeVueComponents] dataProvider não encontrado. Registre o WPrimeVuePlugin antes de usar useApi.");const $=U,E=o.inject(Y.W_CONFIG_KEY),R=j.pageSize??(E==null?void 0:E.defaultPageSize)??20,_=o.ref([]),T=o.ref(!1),x=o.ref(""),q=o.ref({}),A=o.reactive({}),n=o.reactive({page:1,pageSize:R,rows:0,totalPages:0}),w=o.reactive({field:null,order:0});let M=null;async function f(u={}){T.value=!0;try{const y={page:n.page,page_size:n.pageSize,...u};x.value&&(y.search=x.value),w.field&&w.order!==0&&(y.ordering=w.order===-1?`-${w.field}`:w.field);for(const[z,d]of Object.entries(A))d!=null&&d!==""&&(y[z]=d);const p=await $.list(P,y);_.value=p.data,n.rows=p.rows,p.page&&(n.page=p.page),p.page_size&&(n.pageSize=p.page_size),n.totalPages=Math.ceil(n.rows/n.pageSize)||0,q.value=p.extras??{}}finally{T.value=!1}}async function k(){await f()}function G(u){x.value=u,M&&clearTimeout(M),M=setTimeout(()=>{n.page=1,f()},v)}function h(u,y){A[u]=y,n.page=1,f()}function W(){for(const u of Object.keys(A))delete A[u];n.page=1,f()}function L(u){n.page=u.page+1,n.pageSize=u.rows,f()}function K(u){w.field=u.sortField??null,w.order=u.sortOrder??0,n.page=1,f()}return g&&f(),{items:_,loading:T,search:x,pagination:n,sort:w,extras:q,fetchItems:f,refresh:k,setSearch:G,setFilter:h,clearFilters:W,onPage:L,onSort:K}}exports.useApi=_e;exports.useCrudManager=je;
|
|
2
|
+
//# sourceMappingURL=useApi-Dms28942.cjs.map
|