@wgalleti/primevue-components 0.9.2 → 0.9.4
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-CghB36QK.cjs +12 -0
- package/dist/WProgressFlow.vue_vue_type_script_setup_true_lang-CghB36QK.cjs.map +1 -0
- package/dist/{WProgressFlow.vue_vue_type_script_setup_true_lang-BZxi1797.js → WProgressFlow.vue_vue_type_script_setup_true_lang-KqwCnEHm.js} +415 -409
- package/dist/WProgressFlow.vue_vue_type_script_setup_true_lang-KqwCnEHm.js.map +1 -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/useApi-6xjrf0BB.cjs +2 -0
- package/dist/useApi-6xjrf0BB.cjs.map +1 -0
- package/dist/useApi-CywGloqb.js +404 -0
- package/dist/useApi-CywGloqb.js.map +1 -0
- package/package.json +1 -1
- package/dist/WProgressFlow.vue_vue_type_script_setup_true_lang-BZxi1797.js.map +0 -1
- package/dist/WProgressFlow.vue_vue_type_script_setup_true_lang-CRx96kle.cjs +0 -12
- package/dist/WProgressFlow.vue_vue_type_script_setup_true_lang-CRx96kle.cjs.map +0 -1
- package/dist/useApi-D8-gfJR-.js +0 -397
- package/dist/useApi-D8-gfJR-.js.map +0 -1
- package/dist/useApi-Dms28942.cjs +0 -2
- package/dist/useApi-Dms28942.cjs.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-CghB36QK.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-KqwCnEHm.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-6xjrf0BB.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-CghB36QK.cjs"),W=require("./useApi-6xjrf0BB.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-KqwCnEHm.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-KqwCnEHm.js";
|
|
4
|
+
import { u as ie, a as ce } from "./useApi-CywGloqb.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) {
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";const i=require("vue"),Y=require("./plugin-D1YvyKXX.cjs"),ze=require("./types.cjs"),k=require("./useFormKeyboardNav-D4Ow3k4Y.cjs");function Fe(j,h){const y={};for(const v of Object.keys(h))JSON.stringify(j[v])!==JSON.stringify(h[v])&&(y[v]=h[v]);return y}function je(j){const{endpoint:h,form:y,pk:v="id",searchDebounce:U=300,partialUpdate:$=!0,refetchOnSave:E=!0,filterParams:q=void 0,createDefaults:_=void 0,transformPayload:T=void 0,onAfterSave:A=void 0,onAfterDelete:M=void 0}=j,C=i.inject(Y.W_DATA_PROVIDER_KEY);if(!C)throw new Error("[wPrimeVueComponents] dataProvider não encontrado. Registre o WPrimeVuePlugin antes de usar useCrudManager.");const r=C,D=i.inject(Y.W_CONFIG_KEY),W=j.pageSize??(D==null?void 0:D.defaultPageSize)??20,f={...ze.DEFAULT_CRUD_LABELS,...j.labels},O=k.useAppToast(),{confirmDelete:G}=k.useAppConfirm(),S=i.ref([]),K=i.ref([]),L=i.ref({}),N=i.ref(!1),u=i.ref(!1),m=i.ref(""),p=i.ref(!1),z=i.ref(!1),d=i.ref(null),b=i.reactive({});let V=null;const s=i.reactive({page:1,pageSize:W,rows:0,totalPages:0}),P=i.reactive({field:null,order:0}),I=i.reactive({});function Q(){const e={};for(const t of y)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))b[e]=X[e];const R=i.computed(()=>d.value!==null&&!z.value),oe=i.computed(()=>z.value),ie=i.computed(()=>z.value?f.viewTitle??"Visualizar Registro":R.value?f.editTitle:f.createTitle),ne=i.computed(()=>s.page<=1),re=i.computed(()=>s.page>=s.totalPages);let J=null;async function F(e={}){N.value=!0;try{const t={page:s.page,page_size:s.pageSize,...e};m.value&&(t.search=m.value),P.field&&P.order!==0&&(t.ordering=P.order===-1?`-${P.field}`:P.field),q&&Object.assign(t,q());for(const[o,c]of Object.entries(I))c!=null&&c!==""&&(t[o]=c);const a=await r.list(h,t);S.value=a.data,K.value=[],s.rows=a.rows,L.value=a.extras??{},a.page&&(s.page=a.page),a.page_size&&(s.pageSize=a.page_size),s.totalPages=Math.ceil(s.rows/s.pageSize)||0}finally{N.value=!1}}async function se(){await F()}async function le(){await F()}async function ce(e=200){const t={};m.value&&(t.search=m.value),P.field&&P.order!==0&&(t.ordering=P.order===-1?`-${P.field}`:P.field),q&&Object.assign(t,q());for(const[l,n]of Object.entries(I))n!=null&&n!==""&&(t[l]=n);const a=[];let o=1;const c=1e4;for(;o<=c;){const l=await r.list(h,{...t,page:o,page_size:e});a.push(...l.data);const n=l.rows??a.length;if(l.data.length===0||a.length>=n)break;o++}return a}function Z(e){m.value=e,J&&clearTimeout(J),J=setTimeout(()=>{s.page=1,F()},U)}function fe(e){const t=e.target;Z(t.value)}function B(e){s.page=e,F()}function ue(){B(1)}function de(){B(s.totalPages)}function pe(e){s.page=e.page+1,s.pageSize=e.rows,F()}function ge(e){P.field=e.sortField??null,P.order=e.sortOrder??0,s.page=1,F()}function H(){const e=Q();for(const t of Object.keys(e))b[t]=e[t]}function ve(e,t){b[e]=t}function ye(){if(z.value=!1,d.value=null,V=null,H(),_){const e=_();for(const[t,a]of Object.entries(e))b[t]=a}p.value=!0}function ee(e){const t={};for(const a of y){let o=e[a.field]!==void 0?e[a.field]:null;o&&(a.type==="date"||a.type==="datetime")&&typeof o=="string"&&(o=k.parseDate(o)),b[a.field]=o,t[a.field]=o}V=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,V=null,H();for(const t of y){if(t.field===v)continue;let a=e[t.field]!==void 0?e[t.field]:b[t.field];a&&(t.type==="date"||t.type==="datetime")&&typeof a=="string"&&(a=k.parseDate(a)),b[t.field]=a}if(_){const t=_();for(const[a,o]of Object.entries(t))b[a]=o}p.value=!0}function te(e){const t={...e};for(const a of y){const o=t[a.field];if(a.type==="date"&&o instanceof Date?t[a.field]=k.toDateString(o):a.type==="datetime"&&o instanceof Date&&(t[a.field]=k.toDateTimeString(o)),a.type==="fk"&&o!==null&&typeof o=="object"){const c=a.optionValue||"id";t[a.field]=o[c]??o}(a.type==="mask"||a.type==="cpf_cnpj")&&typeof o=="string"&&(t[a.field]=k.stripMask(o))}return t}async function he(){for(const e of y){if(e.validate){const t=e.validate(b[e.field]);if(t)return O.error(t),null}if(e.required){const t=b[e.field];if(t==null||t==="")return O.error(`${e.label} é obrigatório`),null}}u.value=!0;try{let e=te(b);if(!R.value&&_){const n=_();for(const[g,w]of Object.entries(n)){const x=e[g];(x==null||x==="")&&(e[g]=w)}}if(R.value&&$&&V){const n=te(V);if(e=Fe(n,e),Object.keys(e).length===0&&!T){p.value=!1;const g=d.value;return d.value=null,V=null,g}}T&&(e=T(e,R.value));const t=y.some(n=>n.type==="image"&&e[n.field]instanceof File);let a=e,o;if(t){const n=new Set(y.filter(w=>w.type==="image").map(w=>w.field)),g=new FormData;for(const[w,x]of Object.entries(e))if(x!=null)if(x instanceof File)g.append(w,x);else{if(n.has(w))continue;g.append(w,String(x))}a=g,o={"Content-Type":"multipart/form-data"}}const c=o?{headers:o}:void 0;let l;if(R.value&&d.value){const n=d.value[v];if(l=await r.update(h,n,a,c),!E){const g=S.value.findIndex(w=>w[v]===n);g!==-1&&(S.value[g]=l.data)}O.success(f.successUpdate)}else l=await r.create(h,a,c),E||(S.value.unshift(l.data),s.rows++),O.success(f.successCreate);return p.value=!1,d.value=null,V=null,E&&await F(),A&&A(l.data,R.value),l.data}catch(e){return O.error(k.extractApiError(e,"Erro ao salvar registro")),null}finally{u.value=!1}}async function De(e,t,a){const o=e[v],c=y.find(n=>n.field===t);let l=a;(c==null?void 0:c.type)==="date"&&l instanceof Date?l=k.toDateString(l):(c==null?void 0:c.type)==="datetime"&&l instanceof Date&&(l=k.toDateTimeString(l));try{const n=await r.update(h,o,{[t]:l}),g=S.value.findIndex(w=>w[v]===o);g!==-1&&(S.value[g]={...S.value[g],...n.data}),O.success(f.successUpdate)}catch(n){O.error(k.extractApiError(n,"Erro ao salvar o campo"))}}async function ae(e){try{const t=e[v];await r.delete(h,t);const a=S.value.findIndex(o=>o[v]===t);a!==-1&&(S.value.splice(a,1),s.rows--),O.success(f.successDelete),M&&M(e)}catch(t){O.error(k.extractApiError(t,"Erro ao excluir registro"))}}function Se(e){G(()=>ae(e),f.deleteConfirmMessage)}function be(){K.value=[]}function ke(e,t){t==null||t===""?delete I[e]:I[e]=t,s.page=1,F()}function Oe(){for(const e of Object.keys(I))delete I[e];s.page=1,F()}return{items:S,selectedItems:K,columnFilters:I,extras:L,loading:N,saving:u,search:m,dialogVisible:p,editingItem:d,formData:b,pagination:s,sort:P,isEditing:R,isViewing:oe,viewMode:z,dialogTitle:ie,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:h,searchDebounce:y=300,immediate:v=!1}=j,U=i.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=i.inject(Y.W_CONFIG_KEY),q=j.pageSize??(E==null?void 0:E.defaultPageSize)??20,_=i.ref([]),T=i.ref(!1),A=i.ref(""),M=i.ref({}),C=i.reactive({}),r=i.reactive({page:1,pageSize:q,rows:0,totalPages:0}),D=i.reactive({field:null,order:0});let W=null;async function f(u={}){T.value=!0;try{const m={page:r.page,page_size:r.pageSize,...u};A.value&&(m.search=A.value),D.field&&D.order!==0&&(m.ordering=D.order===-1?`-${D.field}`:D.field);for(const[z,d]of Object.entries(C))d!=null&&d!==""&&(m[z]=d);const p=await $.list(h,m);_.value=p.data,r.rows=p.rows,p.page&&(r.page=p.page),p.page_size&&(r.pageSize=p.page_size),r.totalPages=Math.ceil(r.rows/r.pageSize)||0,M.value=p.extras??{}}finally{T.value=!1}}async function O(){await f()}function G(u){A.value=u,W&&clearTimeout(W),W=setTimeout(()=>{r.page=1,f()},y)}function S(u,m){C[u]=m,r.page=1,f()}function K(){for(const u of Object.keys(C))delete C[u];r.page=1,f()}function L(u){r.page=u.page+1,r.pageSize=u.rows,f()}function N(u){D.field=u.sortField??null,D.order=u.sortOrder??0,r.page=1,f()}return v&&f(),{items:_,loading:T,search:A,pagination:r,sort:D,extras:M,fetchItems:f,refresh:O,setSearch:G,setFilter:S,clearFilters:K,onPage:L,onSort:N}}exports.useApi=_e;exports.useCrudManager=je;
|
|
2
|
+
//# sourceMappingURL=useApi-6xjrf0BB.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useApi-6xjrf0BB.cjs","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 // createDefaults é PREFILL (já aplicado ao abrir o diálogo), não um override\n // no submit: só completa chaves ausentes/nulas do payload, sem SOBRESCREVER o\n // que o usuário definiu no form. Senão um campo editável pré-preenchido (ex.:\n // a unidade da baliza) voltaria ao default mesmo depois de o usuário trocar o\n // valor. Continua cobrindo FK-pai oculta de master-detail (chave ausente).\n if (!isEditing.value && createDefaults) {\n const extra = createDefaults()\n for (const [key, value] of Object.entries(extra)) {\n const current = payload[key]\n if (current === undefined || current === null || current === '') {\n payload[key] = value\n }\n }\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,404 @@
|
|
|
1
|
+
import { inject as K, ref as P, reactive as R, 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, h) {
|
|
6
|
+
const v = {};
|
|
7
|
+
for (const g of Object.keys(h))
|
|
8
|
+
JSON.stringify(F[g]) !== JSON.stringify(h[g]) && (v[g] = h[g]);
|
|
9
|
+
return v;
|
|
10
|
+
}
|
|
11
|
+
function Le(F) {
|
|
12
|
+
const {
|
|
13
|
+
endpoint: h,
|
|
14
|
+
form: v,
|
|
15
|
+
pk: g = "id",
|
|
16
|
+
searchDebounce: N = 300,
|
|
17
|
+
partialUpdate: Y = !0,
|
|
18
|
+
refetchOnSave: T = !0,
|
|
19
|
+
filterParams: M = void 0,
|
|
20
|
+
createDefaults: j = void 0,
|
|
21
|
+
transformPayload: _ = void 0,
|
|
22
|
+
onAfterSave: V = void 0,
|
|
23
|
+
onAfterDelete: U = void 0
|
|
24
|
+
} = F, C = K(re);
|
|
25
|
+
if (!C)
|
|
26
|
+
throw new Error(
|
|
27
|
+
"[wPrimeVueComponents] dataProvider não encontrado. Registre o WPrimeVuePlugin antes de usar useCrudManager."
|
|
28
|
+
);
|
|
29
|
+
const n = C, D = K(fe), W = F.pageSize ?? (D == null ? void 0 : D.defaultPageSize) ?? 20, f = { ...Ce, ...F.labels }, k = Ee(), { confirmDelete: B } = Ae(), S = P([]), q = P([]), J = P({}), L = P(!1), c = P(!1), y = P(""), d = P(!1), z = P(!1), u = P(null), b = R({});
|
|
30
|
+
let E = null;
|
|
31
|
+
const s = R({
|
|
32
|
+
page: 1,
|
|
33
|
+
pageSize: W,
|
|
34
|
+
rows: 0,
|
|
35
|
+
totalPages: 0
|
|
36
|
+
}), m = R({
|
|
37
|
+
field: null,
|
|
38
|
+
order: 0
|
|
39
|
+
}), A = R({});
|
|
40
|
+
function Z() {
|
|
41
|
+
const e = {};
|
|
42
|
+
for (const t of v)
|
|
43
|
+
e[t.field] = t.defaultValue !== void 0 ? typeof t.defaultValue == "function" ? t.defaultValue() : t.defaultValue : null;
|
|
44
|
+
return e;
|
|
45
|
+
}
|
|
46
|
+
const ee = Z();
|
|
47
|
+
for (const e of Object.keys(ee))
|
|
48
|
+
b[e] = ee[e];
|
|
49
|
+
const I = $(() => u.value !== null && !z.value), ce = $(() => z.value), ue = $(
|
|
50
|
+
() => z.value ? f.viewTitle ?? "Visualizar Registro" : I.value ? f.editTitle : f.createTitle
|
|
51
|
+
), de = $(() => s.page <= 1), pe = $(() => s.page >= s.totalPages);
|
|
52
|
+
let G = null;
|
|
53
|
+
async function O(e = {}) {
|
|
54
|
+
L.value = !0;
|
|
55
|
+
try {
|
|
56
|
+
const t = {
|
|
57
|
+
page: s.page,
|
|
58
|
+
page_size: s.pageSize,
|
|
59
|
+
...e
|
|
60
|
+
};
|
|
61
|
+
y.value && (t.search = y.value), m.field && m.order !== 0 && (t.ordering = m.order === -1 ? `-${m.field}` : m.field), M && Object.assign(t, M());
|
|
62
|
+
for (const [o, r] of Object.entries(A))
|
|
63
|
+
r != null && r !== "" && (t[o] = r);
|
|
64
|
+
const a = await n.list(h, t);
|
|
65
|
+
S.value = a.data, q.value = [], s.rows = a.rows, J.value = a.extras ?? {}, a.page && (s.page = a.page), a.page_size && (s.pageSize = a.page_size), s.totalPages = Math.ceil(s.rows / s.pageSize) || 0;
|
|
66
|
+
} finally {
|
|
67
|
+
L.value = !1;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
async function ge() {
|
|
71
|
+
await O();
|
|
72
|
+
}
|
|
73
|
+
async function ve() {
|
|
74
|
+
await O();
|
|
75
|
+
}
|
|
76
|
+
async function ye(e = 200) {
|
|
77
|
+
const t = {};
|
|
78
|
+
y.value && (t.search = y.value), m.field && m.order !== 0 && (t.ordering = m.order === -1 ? `-${m.field}` : m.field), M && Object.assign(t, M());
|
|
79
|
+
for (const [l, i] of Object.entries(A))
|
|
80
|
+
i != null && i !== "" && (t[l] = i);
|
|
81
|
+
const a = [];
|
|
82
|
+
let o = 1;
|
|
83
|
+
const r = 1e4;
|
|
84
|
+
for (; o <= r; ) {
|
|
85
|
+
const l = await n.list(h, {
|
|
86
|
+
...t,
|
|
87
|
+
page: o,
|
|
88
|
+
page_size: e
|
|
89
|
+
});
|
|
90
|
+
a.push(...l.data);
|
|
91
|
+
const i = l.rows ?? a.length;
|
|
92
|
+
if (l.data.length === 0 || a.length >= i) break;
|
|
93
|
+
o++;
|
|
94
|
+
}
|
|
95
|
+
return a;
|
|
96
|
+
}
|
|
97
|
+
function te(e) {
|
|
98
|
+
y.value = e, G && clearTimeout(G), G = setTimeout(() => {
|
|
99
|
+
s.page = 1, O();
|
|
100
|
+
}, N);
|
|
101
|
+
}
|
|
102
|
+
function me(e) {
|
|
103
|
+
const t = e.target;
|
|
104
|
+
te(t.value);
|
|
105
|
+
}
|
|
106
|
+
function H(e) {
|
|
107
|
+
s.page = e, O();
|
|
108
|
+
}
|
|
109
|
+
function we() {
|
|
110
|
+
H(1);
|
|
111
|
+
}
|
|
112
|
+
function Pe() {
|
|
113
|
+
H(s.totalPages);
|
|
114
|
+
}
|
|
115
|
+
function he(e) {
|
|
116
|
+
s.page = e.page + 1, s.pageSize = e.rows, O();
|
|
117
|
+
}
|
|
118
|
+
function De(e) {
|
|
119
|
+
m.field = e.sortField ?? null, m.order = e.sortOrder ?? 0, s.page = 1, O();
|
|
120
|
+
}
|
|
121
|
+
function Q() {
|
|
122
|
+
const e = Z();
|
|
123
|
+
for (const t of Object.keys(e))
|
|
124
|
+
b[t] = e[t];
|
|
125
|
+
}
|
|
126
|
+
function Se(e, t) {
|
|
127
|
+
b[e] = t;
|
|
128
|
+
}
|
|
129
|
+
function be() {
|
|
130
|
+
if (z.value = !1, u.value = null, E = null, Q(), j) {
|
|
131
|
+
const e = j();
|
|
132
|
+
for (const [t, a] of Object.entries(e))
|
|
133
|
+
b[t] = a;
|
|
134
|
+
}
|
|
135
|
+
d.value = !0;
|
|
136
|
+
}
|
|
137
|
+
function ae(e) {
|
|
138
|
+
const t = {};
|
|
139
|
+
for (const a of v) {
|
|
140
|
+
let o = e[a.field] !== void 0 ? e[a.field] : null;
|
|
141
|
+
o && (a.type === "date" || a.type === "datetime") && typeof o == "string" && (o = le(o)), b[a.field] = o, t[a.field] = o;
|
|
142
|
+
}
|
|
143
|
+
E = t;
|
|
144
|
+
}
|
|
145
|
+
function ke(e) {
|
|
146
|
+
z.value = !1, u.value = e, ae(e), d.value = !0;
|
|
147
|
+
}
|
|
148
|
+
function ze(e) {
|
|
149
|
+
z.value = !0, u.value = e, ae(e), d.value = !0;
|
|
150
|
+
}
|
|
151
|
+
function Oe(e) {
|
|
152
|
+
z.value = !1, u.value = null, E = null, Q();
|
|
153
|
+
for (const t of v) {
|
|
154
|
+
if (t.field === g) continue;
|
|
155
|
+
let a = e[t.field] !== void 0 ? e[t.field] : b[t.field];
|
|
156
|
+
a && (t.type === "date" || t.type === "datetime") && typeof a == "string" && (a = le(a)), b[t.field] = a;
|
|
157
|
+
}
|
|
158
|
+
if (j) {
|
|
159
|
+
const t = j();
|
|
160
|
+
for (const [a, o] of Object.entries(t))
|
|
161
|
+
b[a] = o;
|
|
162
|
+
}
|
|
163
|
+
d.value = !0;
|
|
164
|
+
}
|
|
165
|
+
function oe(e) {
|
|
166
|
+
const t = { ...e };
|
|
167
|
+
for (const a of v) {
|
|
168
|
+
const o = 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
|
+
const r = a.optionValue || "id";
|
|
171
|
+
t[a.field] = o[r] ?? o;
|
|
172
|
+
}
|
|
173
|
+
(a.type === "mask" || a.type === "cpf_cnpj") && typeof o == "string" && (t[a.field] = Ie(o));
|
|
174
|
+
}
|
|
175
|
+
return t;
|
|
176
|
+
}
|
|
177
|
+
async function Fe() {
|
|
178
|
+
for (const e of v) {
|
|
179
|
+
if (e.validate) {
|
|
180
|
+
const t = e.validate(b[e.field]);
|
|
181
|
+
if (t)
|
|
182
|
+
return k.error(t), null;
|
|
183
|
+
}
|
|
184
|
+
if (e.required) {
|
|
185
|
+
const t = b[e.field];
|
|
186
|
+
if (t == null || t === "")
|
|
187
|
+
return k.error(`${e.label} é obrigatório`), null;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
c.value = !0;
|
|
191
|
+
try {
|
|
192
|
+
let e = oe(b);
|
|
193
|
+
if (!I.value && j) {
|
|
194
|
+
const i = j();
|
|
195
|
+
for (const [p, w] of Object.entries(i)) {
|
|
196
|
+
const x = e[p];
|
|
197
|
+
(x == null || x === "") && (e[p] = w);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
if (I.value && Y && E) {
|
|
201
|
+
const i = oe(E);
|
|
202
|
+
if (e = Re(i, e), Object.keys(e).length === 0 && !_) {
|
|
203
|
+
d.value = !1;
|
|
204
|
+
const p = u.value;
|
|
205
|
+
return u.value = null, E = null, p;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
_ && (e = _(e, I.value));
|
|
209
|
+
const t = v.some((i) => i.type === "image" && e[i.field] instanceof File);
|
|
210
|
+
let a = e, o;
|
|
211
|
+
if (t) {
|
|
212
|
+
const i = new Set(
|
|
213
|
+
v.filter((w) => w.type === "image").map((w) => w.field)
|
|
214
|
+
), p = new FormData();
|
|
215
|
+
for (const [w, x] of Object.entries(e))
|
|
216
|
+
if (x != null)
|
|
217
|
+
if (x instanceof File)
|
|
218
|
+
p.append(w, x);
|
|
219
|
+
else {
|
|
220
|
+
if (i.has(w))
|
|
221
|
+
continue;
|
|
222
|
+
p.append(w, String(x));
|
|
223
|
+
}
|
|
224
|
+
a = p, o = { "Content-Type": "multipart/form-data" };
|
|
225
|
+
}
|
|
226
|
+
const r = o ? { headers: o } : void 0;
|
|
227
|
+
let l;
|
|
228
|
+
if (I.value && u.value) {
|
|
229
|
+
const i = u.value[g];
|
|
230
|
+
if (l = await n.update(
|
|
231
|
+
h,
|
|
232
|
+
i,
|
|
233
|
+
a,
|
|
234
|
+
r
|
|
235
|
+
), !T) {
|
|
236
|
+
const p = S.value.findIndex((w) => w[g] === i);
|
|
237
|
+
p !== -1 && (S.value[p] = l.data);
|
|
238
|
+
}
|
|
239
|
+
k.success(f.successUpdate);
|
|
240
|
+
} else
|
|
241
|
+
l = await n.create(h, a, r), T || (S.value.unshift(l.data), s.rows++), k.success(f.successCreate);
|
|
242
|
+
return d.value = !1, u.value = null, E = null, T && await O(), V && V(l.data, I.value), l.data;
|
|
243
|
+
} catch (e) {
|
|
244
|
+
return k.error(X(e, "Erro ao salvar registro")), null;
|
|
245
|
+
} finally {
|
|
246
|
+
c.value = !1;
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
async function je(e, t, a) {
|
|
250
|
+
const o = e[g], r = v.find((i) => i.field === t);
|
|
251
|
+
let l = a;
|
|
252
|
+
(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));
|
|
253
|
+
try {
|
|
254
|
+
const i = await n.update(h, o, { [t]: l }), p = S.value.findIndex((w) => w[g] === o);
|
|
255
|
+
p !== -1 && (S.value[p] = { ...S.value[p], ...i.data }), k.success(f.successUpdate);
|
|
256
|
+
} catch (i) {
|
|
257
|
+
k.error(X(i, "Erro ao salvar o campo"));
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
async function ie(e) {
|
|
261
|
+
try {
|
|
262
|
+
const t = e[g];
|
|
263
|
+
await n.delete(h, t);
|
|
264
|
+
const a = S.value.findIndex((o) => o[g] === t);
|
|
265
|
+
a !== -1 && (S.value.splice(a, 1), s.rows--), k.success(f.successDelete), U && U(e);
|
|
266
|
+
} catch (t) {
|
|
267
|
+
k.error(X(t, "Erro ao excluir registro"));
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
function xe(e) {
|
|
271
|
+
B(() => ie(e), f.deleteConfirmMessage);
|
|
272
|
+
}
|
|
273
|
+
function Te() {
|
|
274
|
+
q.value = [];
|
|
275
|
+
}
|
|
276
|
+
function _e(e, t) {
|
|
277
|
+
t == null || t === "" ? delete A[e] : A[e] = t, s.page = 1, O();
|
|
278
|
+
}
|
|
279
|
+
function Ve() {
|
|
280
|
+
for (const e of Object.keys(A)) delete A[e];
|
|
281
|
+
s.page = 1, O();
|
|
282
|
+
}
|
|
283
|
+
return {
|
|
284
|
+
items: S,
|
|
285
|
+
selectedItems: q,
|
|
286
|
+
columnFilters: A,
|
|
287
|
+
extras: J,
|
|
288
|
+
loading: L,
|
|
289
|
+
saving: c,
|
|
290
|
+
search: y,
|
|
291
|
+
dialogVisible: d,
|
|
292
|
+
editingItem: u,
|
|
293
|
+
formData: b,
|
|
294
|
+
pagination: s,
|
|
295
|
+
sort: m,
|
|
296
|
+
isEditing: I,
|
|
297
|
+
isViewing: ce,
|
|
298
|
+
viewMode: z,
|
|
299
|
+
dialogTitle: ue,
|
|
300
|
+
isFirstPage: de,
|
|
301
|
+
isLastPage: pe,
|
|
302
|
+
init: ge,
|
|
303
|
+
fetchItems: O,
|
|
304
|
+
fetchAll: ye,
|
|
305
|
+
refresh: ve,
|
|
306
|
+
setSearch: te,
|
|
307
|
+
onSearch: me,
|
|
308
|
+
onPage: he,
|
|
309
|
+
onSort: De,
|
|
310
|
+
openCreateDialog: be,
|
|
311
|
+
openEditDialog: ke,
|
|
312
|
+
openViewDialog: ze,
|
|
313
|
+
openDuplicateDialog: Oe,
|
|
314
|
+
save: Fe,
|
|
315
|
+
updateField: je,
|
|
316
|
+
confirmDelete: xe,
|
|
317
|
+
performDelete: ie,
|
|
318
|
+
setFormField: Se,
|
|
319
|
+
resetForm: Q,
|
|
320
|
+
goToPage: H,
|
|
321
|
+
firstPage: we,
|
|
322
|
+
lastPage: Pe,
|
|
323
|
+
clearSelection: Te,
|
|
324
|
+
setColumnFilter: _e,
|
|
325
|
+
clearColumnFilters: Ve,
|
|
326
|
+
config: F
|
|
327
|
+
};
|
|
328
|
+
}
|
|
329
|
+
function $e(F) {
|
|
330
|
+
const { endpoint: h, searchDebounce: v = 300, immediate: g = !1 } = F, N = K(re);
|
|
331
|
+
if (!N)
|
|
332
|
+
throw new Error(
|
|
333
|
+
"[wPrimeVueComponents] dataProvider não encontrado. Registre o WPrimeVuePlugin antes de usar useApi."
|
|
334
|
+
);
|
|
335
|
+
const Y = N, T = K(fe), M = F.pageSize ?? (T == null ? void 0 : T.defaultPageSize) ?? 20, j = P([]), _ = P(!1), V = P(""), U = P({}), C = R({}), n = R({
|
|
336
|
+
page: 1,
|
|
337
|
+
pageSize: M,
|
|
338
|
+
rows: 0,
|
|
339
|
+
totalPages: 0
|
|
340
|
+
}), D = R({
|
|
341
|
+
field: null,
|
|
342
|
+
order: 0
|
|
343
|
+
});
|
|
344
|
+
let W = null;
|
|
345
|
+
async function f(c = {}) {
|
|
346
|
+
_.value = !0;
|
|
347
|
+
try {
|
|
348
|
+
const y = {
|
|
349
|
+
page: n.page,
|
|
350
|
+
page_size: n.pageSize,
|
|
351
|
+
...c
|
|
352
|
+
};
|
|
353
|
+
V.value && (y.search = V.value), D.field && D.order !== 0 && (y.ordering = D.order === -1 ? `-${D.field}` : D.field);
|
|
354
|
+
for (const [z, u] of Object.entries(C))
|
|
355
|
+
u != null && u !== "" && (y[z] = u);
|
|
356
|
+
const d = await Y.list(h, y);
|
|
357
|
+
j.value = d.data, n.rows = d.rows, d.page && (n.page = d.page), d.page_size && (n.pageSize = d.page_size), n.totalPages = Math.ceil(n.rows / n.pageSize) || 0, U.value = d.extras ?? {};
|
|
358
|
+
} finally {
|
|
359
|
+
_.value = !1;
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
async function k() {
|
|
363
|
+
await f();
|
|
364
|
+
}
|
|
365
|
+
function B(c) {
|
|
366
|
+
V.value = c, W && clearTimeout(W), W = setTimeout(() => {
|
|
367
|
+
n.page = 1, f();
|
|
368
|
+
}, v);
|
|
369
|
+
}
|
|
370
|
+
function S(c, y) {
|
|
371
|
+
C[c] = y, n.page = 1, f();
|
|
372
|
+
}
|
|
373
|
+
function q() {
|
|
374
|
+
for (const c of Object.keys(C))
|
|
375
|
+
delete C[c];
|
|
376
|
+
n.page = 1, f();
|
|
377
|
+
}
|
|
378
|
+
function J(c) {
|
|
379
|
+
n.page = c.page + 1, n.pageSize = c.rows, f();
|
|
380
|
+
}
|
|
381
|
+
function L(c) {
|
|
382
|
+
D.field = c.sortField ?? null, D.order = c.sortOrder ?? 0, n.page = 1, f();
|
|
383
|
+
}
|
|
384
|
+
return g && f(), {
|
|
385
|
+
items: j,
|
|
386
|
+
loading: _,
|
|
387
|
+
search: V,
|
|
388
|
+
pagination: n,
|
|
389
|
+
sort: D,
|
|
390
|
+
extras: U,
|
|
391
|
+
fetchItems: f,
|
|
392
|
+
refresh: k,
|
|
393
|
+
setSearch: B,
|
|
394
|
+
setFilter: S,
|
|
395
|
+
clearFilters: q,
|
|
396
|
+
onPage: J,
|
|
397
|
+
onSort: L
|
|
398
|
+
};
|
|
399
|
+
}
|
|
400
|
+
export {
|
|
401
|
+
Le as a,
|
|
402
|
+
$e as u
|
|
403
|
+
};
|
|
404
|
+
//# sourceMappingURL=useApi-CywGloqb.js.map
|