@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.
@@ -72,6 +72,9 @@ declare function __VLS_template(): {
72
72
  crud: CrudManagerReturn<any>;
73
73
  dialogWidth: string;
74
74
  }): any;
75
+ 'delete-message'?(_: {
76
+ item: Record<string, unknown> | null;
77
+ }): any;
75
78
  };
76
79
  refs: {
77
80
  chooser: ({
@@ -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-DobZvbe0.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;
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
@@ -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-Cxudafdt.js";
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 = {
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("./useApi-BDjRqSFt.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;
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
@@ -1,4 +1,4 @@
1
- import { u, a as o } from "./useApi-CzOJADZw.js";
1
+ import { u, a as o } from "./useApi-D8-gfJR-.js";
2
2
  import { e as p, u as n, a as f, b as i, c as d, d as m, f as A } from "./useFormKeyboardNav-D4Irq5RE.js";
3
3
  function e(r) {
4
4
  return r;
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-DobZvbe0.cjs"),W=require("./useApi-BDjRqSFt.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;
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-Cxudafdt.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-Cxudafdt.js";
4
- import { u as ie, a as ce } from "./useApi-CzOJADZw.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-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) {
@@ -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 m, reactive as I, computed as $ } from "vue";
2
- import { W as le, a as re } from "./plugin-BKa0eSEM.js";
3
- import { DEFAULT_CRUD_LABELS as Ve } from "./types.js";
4
- import { b as Ce, a as Ee, e as X, t as ie, g as ne, p as se, s as Ae } from "./useFormKeyboardNav-D4Irq5RE.js";
5
- function Ie(F, w) {
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 qe(F) {
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(le);
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(re), U = F.pageSize ?? (P == null ? void 0 : P.defaultPageSize) ?? 20, f = { ...Ve, ...F.labels }, b = Ce(), { confirmDelete: B } = Ee(), h = m([]), W = m([]), J = m({}), q = m(!1), c = m(!1), v = m(""), d = m(!1), z = m(!1), u = m(null), S = I({});
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
- }), y = I({
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
- S[e] = ee[e];
49
- const A = $(() => u.value !== null && !z.value), fe = $(() => z.value), ce = $(
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
- ), ue = $(() => n.page <= 1), de = $(() => n.page >= n.totalPages);
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), y.field && y.order !== 0 && (t.ordering = y.order === -1 ? `-${y.field}` : y.field), R && Object.assign(t, R());
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 pe() {
70
+ async function ge() {
71
71
  await O();
72
72
  }
73
- async function ge() {
73
+ async function ve() {
74
74
  await O();
75
75
  }
76
- async function ve(e = 200) {
76
+ async function me(e = 200) {
77
77
  const t = {};
78
- v.value && (t.search = v.value), y.field && y.order !== 0 && (t.ordering = y.order === -1 ? `-${y.field}` : y.field), R && Object.assign(t, R());
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 me() {
109
+ function we() {
110
110
  H(1);
111
111
  }
112
- function we() {
112
+ function Pe() {
113
113
  H(n.totalPages);
114
114
  }
115
- function Pe(e) {
115
+ function he(e) {
116
116
  n.page = e.page + 1, n.pageSize = e.rows, O();
117
117
  }
118
- function he(e) {
119
- y.field = e.sortField ?? null, y.order = e.sortOrder ?? 0, n.page = 1, O();
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
- S[t] = e[t];
124
+ D[t] = e[t];
125
125
  }
126
126
  function Se(e, t) {
127
- S[e] = t;
127
+ D[e] = t;
128
128
  }
129
- function De() {
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
- S[t] = a;
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 = se(o)), S[a.field] = o, t[a.field] = 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 be(e) {
145
+ function ke(e) {
146
146
  z.value = !1, u.value = e, ae(e), d.value = !0;
147
147
  }
148
- function ke(e) {
148
+ function ze(e) {
149
149
  z.value = !0, u.value = e, ae(e), d.value = !0;
150
150
  }
151
- function ze(e) {
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] : S[t.field];
156
- a && (t.type === "date" || t.type === "datetime") && typeof a == "string" && (a = se(a)), S[t.field] = 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
- S[a] = o;
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] = ie(o) : a.type === "datetime" && o instanceof Date && (t[a.field] = ne(o)), a.type === "fk" && o !== null && typeof o == "object") {
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] = Ae(o));
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 Oe() {
177
+ async function Fe() {
178
178
  for (const e of g) {
179
179
  if (e.validate) {
180
- const t = e.validate(S[e.field]);
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 = S[e.field];
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(S);
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 = Ie(s, e), Object.keys(e).length === 0 && !T) {
195
+ if (e = Re(s, e), Object.keys(e).length === 0 && !T) {
196
196
  d.value = !1;
197
- const D = u.value;
198
- return u.value = null, C = null, D;
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
- ), D = new FormData();
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
- D.append(k, L);
211
+ S.append(k, L);
212
212
  else {
213
213
  if (s.has(k))
214
214
  continue;
215
- D.append(k, String(L));
215
+ S.append(k, String(L));
216
216
  }
217
- a = D, o = { "Content-Type": "multipart/form-data" };
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 D = h.value.findIndex((k) => k[p] === s);
230
- D !== -1 && (h.value[D] = l.data);
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 Fe(e, t, a) {
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 = ie(l) : (r == null ? void 0 : r.type) === "datetime" && l instanceof Date && (l = ne(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 }), D = h.value.findIndex((k) => k[p] === o);
248
- D !== -1 && (h.value[D] = { ...h.value[D], ...s.data }), b.success(f.successUpdate);
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 je(e) {
254
- B(async () => {
255
- try {
256
- const t = e[p];
257
- await i.delete(w, t);
258
- const a = h.value.findIndex((o) => o[p] === t);
259
- a !== -1 && (h.value.splice(a, 1), n.rows--), b.success(f.successDelete), M && M(e);
260
- } catch (t) {
261
- b.error(X(t, "Erro ao excluir registro"));
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 Te(e, t) {
269
+ function _e(e, t) {
269
270
  t == null || t === "" ? delete E[e] : E[e] = t, n.page = 1, O();
270
271
  }
271
- function _e() {
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: S,
286
+ formData: D,
286
287
  pagination: n,
287
- sort: y,
288
+ sort: m,
288
289
  isEditing: A,
289
- isViewing: fe,
290
+ isViewing: ce,
290
291
  viewMode: z,
291
- dialogTitle: ce,
292
- isFirstPage: ue,
293
- isLastPage: de,
294
- init: pe,
292
+ dialogTitle: ue,
293
+ isFirstPage: de,
294
+ isLastPage: pe,
295
+ init: ge,
295
296
  fetchItems: O,
296
- fetchAll: ve,
297
- refresh: ge,
297
+ fetchAll: me,
298
+ refresh: ve,
298
299
  setSearch: te,
299
300
  onSearch: ye,
300
- onPage: Pe,
301
- onSort: he,
302
- openCreateDialog: De,
303
- openEditDialog: be,
304
- openViewDialog: ke,
305
- openDuplicateDialog: ze,
306
- save: Oe,
307
- updateField: Fe,
308
- confirmDelete: je,
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: me,
313
- lastPage: we,
314
- clearSelection: xe,
315
- setColumnFilter: Te,
316
- clearColumnFilters: _e,
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 Le(F) {
321
- const { endpoint: w, searchDebounce: g = 300, immediate: p = !1 } = F, N = K(le);
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(re), R = F.pageSize ?? (x == null ? void 0 : x.defaultPageSize) ?? 20, j = m([]), T = m(!1), _ = m(""), M = m({}), V = I({}), i = I({
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
- qe as a,
393
- Le as u
394
+ Le as a,
395
+ $e as u
394
396
  };
395
- //# sourceMappingURL=useApi-CzOJADZw.js.map
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