@wgalleti/primevue-components 0.9.6 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/WProgressFlow.vue_vue_type_script_setup_true_lang-C-167GXT.cjs +12 -0
- package/dist/WProgressFlow.vue_vue_type_script_setup_true_lang-C-167GXT.cjs.map +1 -0
- package/dist/WProgressFlow.vue_vue_type_script_setup_true_lang-D9HgZsV9.js +3886 -0
- package/dist/WProgressFlow.vue_vue_type_script_setup_true_lang-D9HgZsV9.js.map +1 -0
- package/dist/components/form/WTreeSelect.vue.d.ts +124 -0
- package/dist/components/index.d.ts +1 -0
- package/dist/components.cjs +1 -1
- package/dist/components.js +7 -6
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +53 -52
- package/dist/index.js.map +1 -1
- package/dist/primevue-components.css +1 -1
- package/dist/utils/treeSelect.d.ts +76 -0
- package/package.json +3 -1
- package/skill/references/components.md +7 -0
- package/dist/WProgressFlow.vue_vue_type_script_setup_true_lang-Cc0DJRIy.cjs +0 -12
- package/dist/WProgressFlow.vue_vue_type_script_setup_true_lang-Cc0DJRIy.cjs.map +0 -1
- package/dist/WProgressFlow.vue_vue_type_script_setup_true_lang-DVjJq8Bs.js +0 -3632
- package/dist/WProgressFlow.vue_vue_type_script_setup_true_lang-DVjJq8Bs.js.map +0 -1
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { TreeSelectId, TreeSelectNode, TreeSelectOption } from '../../utils/treeSelect';
|
|
2
|
+
/**
|
|
3
|
+
* Seleção múltipla em árvore com checkbox, alimentada por uma lista PLANA + um
|
|
4
|
+
* campo de agrupamento. O `v-model` é um array de ids de FOLHA — nunca o mapa de
|
|
5
|
+
* chaves do PrimeVue, e nunca com id de grupo dentro (grupo é só visual).
|
|
6
|
+
*
|
|
7
|
+
* ---------------------------------------------------------------------------
|
|
8
|
+
* POR QUE A SELEÇÃO É DERIVADA AQUI E NÃO DELEGADA AO `Tree` — NÃO "SIMPLIFIQUE"
|
|
9
|
+
* ---------------------------------------------------------------------------
|
|
10
|
+
* O `Tree` com `selectionMode="checkbox"` sabe manter sozinho o mapa
|
|
11
|
+
* `{ chave: { checked, partialChecked } }`, propagando para pais e filhos. Trocar
|
|
12
|
+
* o que está aqui por um `v-model:selectionKeys` parece uma simplificação óbvia.
|
|
13
|
+
* Não é: existe um bug ABERTO que quebra exatamente a combinação que usamos
|
|
14
|
+
* (checkbox + filtro).
|
|
15
|
+
*
|
|
16
|
+
* https://github.com/primefaces/primevue/issues/6928 (aberta, "Help Wanted")
|
|
17
|
+
*
|
|
18
|
+
* Com o filtro ativo, o `partialChecked` dos ancestrais passa a se referir à
|
|
19
|
+
* árvore FILTRADA em vez da árvore inteira. O mecanismo está no código do
|
|
20
|
+
* PrimeVue 4.5: `TreeNode.propagateUp()` conta `this.node.children`, e sob filtro
|
|
21
|
+
* `this.node` é uma CÓPIA que o `findFilteredNodes()` produziu contendo só os
|
|
22
|
+
* filhos que casaram com a busca. Um grupo com 12 telas, 3 marcadas e filtro
|
|
23
|
+
* mostrando só essas 3 aparece como totalmente marcado — e ao salvar o usuário
|
|
24
|
+
* marca o que não queria.
|
|
25
|
+
*
|
|
26
|
+
* O repositório do PrimeVue foi arquivado em junho/2026 e está read-only: não vai
|
|
27
|
+
* ser corrigido upstream.
|
|
28
|
+
*
|
|
29
|
+
* Por isso, aqui:
|
|
30
|
+
* 1. a fonte da verdade é o `modelValue` (ids de folha) — sem estado espelhado;
|
|
31
|
+
* 2. o `selectionKeys` é DERIVADO sobre a árvore INTEIRA (`fullTree`), nunca
|
|
32
|
+
* sobre a visão filtrada, então é correto por construção;
|
|
33
|
+
* 3. o `Tree` recebe `:selection-keys` como prop CONTROLADA (não `v-model:`) —
|
|
34
|
+
* o mapa que ele calcularia é simplesmente descartado.
|
|
35
|
+
*
|
|
36
|
+
* Escolha do evento: `node-select` / `node-unselect`, e não `update:selectionKeys`.
|
|
37
|
+
* Os dois saem do mesmo `onCheckboxChange` do `Tree`, mas carregam coisas
|
|
38
|
+
* diferentes: `update:selectionKeys` entrega o mapa JÁ PROPAGADO (o resultado do
|
|
39
|
+
* `propagateUp` bugado), enquanto `node-select`/`node-unselect` entregam só o nó
|
|
40
|
+
* clicado e a direção do clique — a intenção crua do usuário, que nenhuma conta
|
|
41
|
+
* do PrimeVue tocou. É o único ponto estável da API para este caso.
|
|
42
|
+
*
|
|
43
|
+
* Detalhe que fecha o cerco: sob filtro o nó do evento é uma cópia podada, então
|
|
44
|
+
* ler `event.node.children` alternaria só as folhas VISÍVEIS. Resolvemos o nó
|
|
45
|
+
* pela `key` dentro do índice da árvore inteira (`fullIndex`) e alternamos todas
|
|
46
|
+
* as folhas dele — o mesmo resultado com ou sem filtro na tela.
|
|
47
|
+
*/
|
|
48
|
+
type __VLS_Props = {
|
|
49
|
+
/** Ids das folhas selecionadas (`v-model`). Nunca contém id de grupo. */
|
|
50
|
+
modelValue?: TreeSelectId[];
|
|
51
|
+
/** Lista PLANA de registros. O agrupamento é feito aqui, por `groupBy`. */
|
|
52
|
+
options?: TreeSelectOption[];
|
|
53
|
+
/** Campo do id da folha (default: `id`). */
|
|
54
|
+
optionValue?: string;
|
|
55
|
+
/** Campo do rótulo visível (default: `nome`). */
|
|
56
|
+
optionLabel?: string;
|
|
57
|
+
/** Campo que agrupa os registros. Sem ele, a lista sai rasa. */
|
|
58
|
+
groupBy?: string;
|
|
59
|
+
/** Rótulo do nó-pai a partir do valor bruto do agrupamento. */
|
|
60
|
+
groupLabel?: (chave: string) => string;
|
|
61
|
+
/** Campo de busca interno. */
|
|
62
|
+
filter?: boolean;
|
|
63
|
+
filterPlaceholder?: string;
|
|
64
|
+
/** Campos extras do registro considerados na busca (além do rótulo). */
|
|
65
|
+
filterFields?: string[];
|
|
66
|
+
loading?: boolean;
|
|
67
|
+
disabled?: boolean;
|
|
68
|
+
/** Texto quando não há nenhuma opção. */
|
|
69
|
+
emptyMessage?: string;
|
|
70
|
+
/** Texto quando a busca não encontrou nada. */
|
|
71
|
+
filterEmptyMessage?: string;
|
|
72
|
+
/** Contador `N de M selecionados` acima da árvore. */
|
|
73
|
+
showCount?: boolean;
|
|
74
|
+
/** Atalhos "Marcar todos" / "Limpar". */
|
|
75
|
+
showToggleAll?: boolean;
|
|
76
|
+
/** Abre todos os grupos na montagem. */
|
|
77
|
+
defaultExpanded?: boolean;
|
|
78
|
+
ariaLabel?: string;
|
|
79
|
+
};
|
|
80
|
+
declare function __VLS_template(): {
|
|
81
|
+
attrs: Partial<{}>;
|
|
82
|
+
slots: {
|
|
83
|
+
header?(_: {
|
|
84
|
+
selectedCount: number;
|
|
85
|
+
total: number;
|
|
86
|
+
}): any;
|
|
87
|
+
node?(_: {
|
|
88
|
+
node: TreeSelectNode;
|
|
89
|
+
}): any;
|
|
90
|
+
empty?(_: {
|
|
91
|
+
filtering: boolean;
|
|
92
|
+
}): any;
|
|
93
|
+
};
|
|
94
|
+
refs: {};
|
|
95
|
+
rootEl: HTMLDivElement;
|
|
96
|
+
};
|
|
97
|
+
type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
|
|
98
|
+
declare const __VLS_component: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
|
|
99
|
+
"update:modelValue": (ids: TreeSelectId[]) => any;
|
|
100
|
+
}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
101
|
+
"onUpdate:modelValue"?: ((ids: TreeSelectId[]) => any) | undefined;
|
|
102
|
+
}>, {
|
|
103
|
+
filter: boolean;
|
|
104
|
+
modelValue: TreeSelectId[];
|
|
105
|
+
optionLabel: string;
|
|
106
|
+
optionValue: string;
|
|
107
|
+
disabled: boolean;
|
|
108
|
+
loading: boolean;
|
|
109
|
+
options: TreeSelectOption[];
|
|
110
|
+
filterPlaceholder: string;
|
|
111
|
+
filterFields: string[];
|
|
112
|
+
emptyMessage: string;
|
|
113
|
+
filterEmptyMessage: string;
|
|
114
|
+
showCount: boolean;
|
|
115
|
+
showToggleAll: boolean;
|
|
116
|
+
defaultExpanded: boolean;
|
|
117
|
+
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLDivElement>;
|
|
118
|
+
declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
|
|
119
|
+
export default _default;
|
|
120
|
+
type __VLS_WithTemplateSlots<T, S> = T & {
|
|
121
|
+
new (): {
|
|
122
|
+
$slots: S;
|
|
123
|
+
};
|
|
124
|
+
};
|
|
@@ -9,6 +9,7 @@ export { default as WDateRange } from './form/WDateRange.vue';
|
|
|
9
9
|
export { default as WFileUpload } from './form/WFileUpload.vue';
|
|
10
10
|
export { default as WMoneyInput } from './form/WMoneyInput.vue';
|
|
11
11
|
export { default as WTransferList } from './form/WTransferList.vue';
|
|
12
|
+
export { default as WTreeSelect } from './form/WTreeSelect.vue';
|
|
12
13
|
export { default as WStatusTag } from './ui/WStatusTag.vue';
|
|
13
14
|
export { default as WPageHeader } from './ui/WPageHeader.vue';
|
|
14
15
|
export { default as WEmptyState } from './ui/WEmptyState.vue';
|
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-C-167GXT.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.WTreeSelect=t._sfc_main$20;exports.WFileUpload=x;
|
|
2
2
|
//# sourceMappingURL=components.cjs.map
|
package/dist/components.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { _ as I, a as M, b as N, c as P, d as R, e as
|
|
2
|
-
import { defineComponent as k, ref as
|
|
1
|
+
import { _ as I, a as M, b as N, c as P, d as R, e as T, f as _, 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, t as ne } from "./WProgressFlow.vue_vue_type_script_setup_true_lang-D9HgZsV9.js";
|
|
2
|
+
import { defineComponent as k, ref as S, computed as F, 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 = {
|
|
5
5
|
class: "w-fileupload",
|
|
@@ -19,7 +19,7 @@ const V = {
|
|
|
19
19
|
},
|
|
20
20
|
emits: ["update:modelValue", "error"],
|
|
21
21
|
setup(a, { emit: g }) {
|
|
22
|
-
const n = a, s = g, c =
|
|
22
|
+
const n = a, s = g, c = S(null), r = F(() => {
|
|
23
23
|
const e = n.modelValue;
|
|
24
24
|
return e ? Array.isArray(e) ? e : [e] : [];
|
|
25
25
|
});
|
|
@@ -106,8 +106,8 @@ export {
|
|
|
106
106
|
N as WCrudColumnRenderer,
|
|
107
107
|
P as WCrudFormDialog,
|
|
108
108
|
R as WCrudView,
|
|
109
|
-
|
|
110
|
-
|
|
109
|
+
T as WDatePicker,
|
|
110
|
+
_ as WDateRange,
|
|
111
111
|
U as WDetailHeader,
|
|
112
112
|
j as WEmptyState,
|
|
113
113
|
q as WFileUpload,
|
|
@@ -122,6 +122,7 @@ export {
|
|
|
122
122
|
le as WProgressFlow,
|
|
123
123
|
te as WSectionHeader,
|
|
124
124
|
ae as WStatusTag,
|
|
125
|
-
ie as WTransferList
|
|
125
|
+
ie as WTransferList,
|
|
126
|
+
ne as WTreeSelect
|
|
126
127
|
};
|
|
127
128
|
//# sourceMappingURL=components.js.map
|
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-C-167GXT.cjs"),W=require("./useApi-237Q1Vdg.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 $(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??$(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),e.component("WTreeSelect",n._sfc_main$20))}};function v(e){return e.split("?")[0].replace(/^\/+|\/+$/g,"").replace(/^api\/v\d+\//,"")}function w(e){return typeof e=="string"?{table:e}:e}function D(e,a=400){return{response:{status:a,data:{detail:e}},message:e}}function y(e){if(e instanceof FormData)throw D("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 D(`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.WTreeSelect=n._sfc_main$20;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=$;exports.createSupabaseDataProvider=R;
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../src/data-providers/axiosDataProvider.ts","../src/plugin.ts","../src/data-providers/supabaseDataProvider.ts"],"sourcesContent":["import type { AxiosInstance } from 'axios'\nimport type {\n DataProvider,\n DataProviderListParams,\n DataProviderListResponse,\n DataProviderRequestConfig,\n DataProviderResponse,\n} from '@/types/dataProvider'\n\nfunction normalizeListResponse<T>(\n responseData: unknown,\n fallbackPage: number,\n fallbackPageSize: number,\n): DataProviderListResponse<T> {\n const data = responseData as Record<string, unknown>\n\n if (Array.isArray(data.results)) {\n return {\n data: data.results as T[],\n page: (data.page as number) ?? fallbackPage,\n page_size: (data.page_size as number) ?? fallbackPageSize,\n rows: (data.count as number) ?? 0,\n extras: (data.extras as Record<string, unknown>) ?? {},\n }\n }\n\n if (Array.isArray(data.data)) {\n return {\n data: data.data as T[],\n page: (data.page as number) ?? fallbackPage,\n page_size: (data.page_size as number) ?? fallbackPageSize,\n rows: (data.rows as number) ?? 0,\n extras: (data.extras as Record<string, unknown>) ?? {},\n }\n }\n\n return {\n data: Array.isArray(responseData) ? (responseData as T[]) : [],\n page: fallbackPage,\n page_size: fallbackPageSize,\n rows: Array.isArray(responseData) ? responseData.length : 0,\n extras: {},\n }\n}\n\nexport function createAxiosDataProvider(axios: AxiosInstance): DataProvider {\n return {\n async list<T = Record<string, unknown>>(\n endpoint: string,\n params: DataProviderListParams = {},\n ): Promise<DataProviderListResponse<T>> {\n const response = await axios.get(endpoint, { params })\n return normalizeListResponse<T>(\n response.data,\n Number(params.page ?? 1),\n Number(params.page_size ?? 20),\n )\n },\n\n async get<T = Record<string, unknown>>(\n endpoint: string,\n id: string | number,\n config?: DataProviderRequestConfig,\n ): Promise<DataProviderResponse<T>> {\n const response = await axios.get<T>(`${endpoint}${id}/`, config)\n return { data: response.data }\n },\n\n async create<T = Record<string, unknown>>(\n endpoint: string,\n payload: Record<string, unknown> | FormData,\n config?: DataProviderRequestConfig,\n ): Promise<DataProviderResponse<T>> {\n const response = await axios.post<T>(endpoint, payload, config)\n return { data: response.data }\n },\n\n async update<T = Record<string, unknown>>(\n endpoint: string,\n id: string | number,\n payload: Record<string, unknown> | FormData,\n config?: DataProviderRequestConfig,\n ): Promise<DataProviderResponse<T>> {\n const response = await axios.patch<T>(`${endpoint}${id}/`, payload, config)\n return { data: response.data }\n },\n\n async delete(endpoint: string, id: string | number): Promise<void> {\n await axios.delete(`${endpoint}${id}/`)\n },\n }\n}\n","import type { App, Plugin } from 'vue'\nimport type { WPluginOptions, WPluginConfig } from './types/plugin'\nimport { W_AXIOS_KEY, W_CONFIG_KEY, W_DATA_PROVIDER_KEY } from './types/plugin'\nimport {\n WCrudView,\n WCrudFormDialog,\n WCrudColumnRenderer,\n WAutoCompleteFK,\n WMoneyInput,\n WTransferList,\n} from './components'\nimport { createAxiosDataProvider } from './data-providers/axiosDataProvider'\n\nexport const WPrimeVuePlugin: Plugin = {\n install(app: App, options: WPluginOptions) {\n if (!options?.axios && !options?.dataProvider) {\n throw new Error(\n '[wPrimeVueComponents] Informe \"axios\" ou \"dataProvider\" ao registrar o WPrimeVuePlugin.',\n )\n }\n\n const dataProvider = options.dataProvider ?? createAxiosDataProvider(options.axios!)\n\n const config: WPluginConfig = {\n axios: options.axios,\n dataProvider,\n defaultPageSize: options.defaultPageSize ?? 20,\n dateFormat: options.dateFormat ?? 'DD/MM/YYYY',\n dateTimeFormat: options.dateTimeFormat ?? 'DD/MM/YYYY HH:mm',\n locale: options.locale ?? 'pt-BR',\n currency: options.currency ?? 'BRL',\n }\n\n if (options.axios) {\n app.provide(W_AXIOS_KEY, options.axios)\n }\n app.provide(W_DATA_PROVIDER_KEY, dataProvider)\n app.provide(W_CONFIG_KEY, config)\n\n if (options.registerComponents !== false) {\n app.component('WCrudView', WCrudView)\n app.component('WCrudFormDialog', WCrudFormDialog)\n app.component('WCrudColumnRenderer', WCrudColumnRenderer)\n app.component('WAutoCompleteFK', WAutoCompleteFK)\n app.component('WMoneyInput', WMoneyInput)\n app.component('WTransferList', WTransferList)\n }\n },\n}\n","import type {\n DataProvider,\n DataProviderListParams,\n DataProviderListResponse,\n DataProviderRequestConfig,\n DataProviderResponse,\n} from '@/types/dataProvider'\n\ntype SupabaseResult<T> = {\n data: T | null\n error: {\n message: string\n code?: string\n details?: string\n hint?: string\n } | null\n count?: number | null\n}\n\ntype SupabaseFilterBuilder<T> = PromiseLike<SupabaseResult<T>> & {\n select(\n columns?: string,\n options?: { count?: 'exact' | 'planned' | 'estimated' },\n ): SupabaseFilterBuilder<T>\n eq(column: string, value: unknown): SupabaseFilterBuilder<T>\n ilike(column: string, pattern: string): SupabaseFilterBuilder<T>\n or(filters: string): SupabaseFilterBuilder<T>\n order(column: string, options?: { ascending?: boolean }): SupabaseFilterBuilder<T>\n range(from: number, to: number): SupabaseFilterBuilder<T>\n single(): Promise<SupabaseResult<T>>\n}\n\ntype SupabaseTable = {\n select<T = unknown>(\n columns?: string,\n options?: { count?: 'exact' | 'planned' | 'estimated' },\n ): SupabaseFilterBuilder<T>\n insert<T = unknown>(payload: unknown): SupabaseFilterBuilder<T>\n update<T = unknown>(payload: unknown): SupabaseFilterBuilder<T>\n delete<T = unknown>(): SupabaseFilterBuilder<T>\n}\n\nexport interface SupabaseDataProviderClient {\n from(table: string): SupabaseTable\n}\n\nexport interface SupabaseResourceConfig {\n table: string\n pk?: string\n select?: string\n searchFields?: string[]\n defaultOrdering?: string\n defaultFilters?: Record<string, unknown>\n softDelete?: boolean | Record<string, unknown>\n mapListItem?: (item: Record<string, unknown>) => Record<string, unknown>\n mapPayload?: (\n payload: Record<string, unknown>,\n operation: 'create' | 'update',\n ) => Record<string, unknown>\n}\n\nexport interface CreateSupabaseDataProviderOptions {\n client: SupabaseDataProviderClient\n resources?: Record<string, SupabaseResourceConfig | string>\n defaultSelect?: string\n allowedTables?: string[]\n}\n\nfunction normalizeEndpoint(endpoint: string): string {\n return endpoint\n .split('?')[0]\n .replace(/^\\/+|\\/+$/g, '')\n .replace(/^api\\/v\\d+\\//, '')\n}\n\nfunction toResourceConfig(resource: SupabaseResourceConfig | string): SupabaseResourceConfig {\n return typeof resource === 'string' ? { table: resource } : resource\n}\n\nfunction createProviderError(message: string, status = 400) {\n return {\n response: {\n status,\n data: { detail: message },\n },\n message,\n }\n}\n\nfunction assertPlainPayload(payload: Record<string, unknown> | FormData): Record<string, unknown> {\n if (payload instanceof FormData) {\n throw createProviderError(\n 'SupabaseDataProvider nao envia FormData diretamente. Faça upload do arquivo no Storage e envie a URL/caminho no payload.',\n )\n }\n\n return payload\n}\n\nfunction normalizeSupabaseError(error: SupabaseResult<unknown>['error']): never {\n throw {\n response: {\n data: {\n detail: error?.message ?? 'Erro ao consultar Supabase',\n code: error?.code,\n details: error?.details,\n hint: error?.hint,\n },\n },\n message: error?.message ?? 'Erro ao consultar Supabase',\n }\n}\n\nfunction resolveResource(\n endpoint: string,\n options: CreateSupabaseDataProviderOptions,\n): SupabaseResourceConfig {\n const resourceName = normalizeEndpoint(endpoint)\n const configuredResource = options.resources?.[resourceName]\n\n if (configuredResource) {\n return toResourceConfig(configuredResource)\n }\n\n if (options.allowedTables?.includes(resourceName)) {\n return { table: resourceName }\n }\n\n throw createProviderError(`Recurso Supabase nao registrado para o endpoint \"${endpoint}\".`, 404)\n}\n\nfunction applyFilters<T>(\n query: SupabaseFilterBuilder<T>,\n params: DataProviderListParams,\n resource: SupabaseResourceConfig,\n): SupabaseFilterBuilder<T> {\n const reservedKeys = new Set(['page', 'page_size', 'search', 'ordering'])\n const filters = { ...resource.defaultFilters, ...params }\n\n for (const [key, value] of Object.entries(filters)) {\n if (reservedKeys.has(key) || value === null || value === undefined || value === '') {\n continue\n }\n query = query.eq(key, value)\n }\n\n return query\n}\n\nfunction applySearch<T>(\n query: SupabaseFilterBuilder<T>,\n search: unknown,\n searchFields?: string[],\n): SupabaseFilterBuilder<T> {\n if (typeof search !== 'string' || !search.trim() || !searchFields?.length) {\n return query\n }\n\n const escapedSearch = search.trim().replace(/,/g, '\\\\,')\n const expression = searchFields.map((field) => `${field}.ilike.%${escapedSearch}%`).join(',')\n\n return query.or(expression)\n}\n\nfunction parseOrdering(ordering: unknown, fallback?: string) {\n const value = typeof ordering === 'string' && ordering ? ordering : fallback\n if (!value) return null\n\n return {\n field: value.startsWith('-') ? value.slice(1) : value,\n ascending: !value.startsWith('-'),\n }\n}\n\nfunction mapList<T>(data: T[] | null, resource: SupabaseResourceConfig): T[] {\n if (!data) return []\n if (!resource.mapListItem) return data\n\n return data.map((item) => resource.mapListItem?.(item as Record<string, unknown>)) as T[]\n}\n\nexport function createSupabaseDataProvider(\n options: CreateSupabaseDataProviderOptions,\n): DataProvider {\n const defaultSelect = options.defaultSelect ?? '*'\n\n return {\n async list<T = Record<string, unknown>>(\n endpoint: string,\n params: DataProviderListParams = {},\n ): Promise<DataProviderListResponse<T>> {\n const resource = resolveResource(endpoint, options)\n const page = Math.max(Number(params.page ?? 1), 1)\n const pageSize = Math.max(Number(params.page_size ?? 20), 1)\n const from = (page - 1) * pageSize\n const to = from + pageSize - 1\n\n let query = options.client\n .from(resource.table)\n .select<T[]>(resource.select ?? defaultSelect, { count: 'exact' })\n\n query = applyFilters(query, params, resource)\n query = applySearch(query, params.search, resource.searchFields)\n\n const ordering = parseOrdering(params.ordering, resource.defaultOrdering)\n if (ordering) {\n query = query.order(ordering.field, { ascending: ordering.ascending })\n }\n\n const result = await query.range(from, to)\n if (result.error) normalizeSupabaseError(result.error)\n\n return {\n data: mapList(result.data, resource),\n page,\n page_size: pageSize,\n rows: result.count ?? result.data?.length ?? 0,\n extras: {},\n }\n },\n\n async get<T = Record<string, unknown>>(\n endpoint: string,\n id: string | number,\n _config?: DataProviderRequestConfig,\n ): Promise<DataProviderResponse<T>> {\n const resource = resolveResource(endpoint, options)\n const pk = resource.pk ?? 'id'\n const result = await options.client\n .from(resource.table)\n .select<T>(resource.select ?? defaultSelect)\n .eq(pk, id)\n .single()\n\n if (result.error) normalizeSupabaseError(result.error)\n return { data: result.data as T }\n },\n\n async create<T = Record<string, unknown>>(\n endpoint: string,\n payload: Record<string, unknown> | FormData,\n _config?: DataProviderRequestConfig,\n ): Promise<DataProviderResponse<T>> {\n const resource = resolveResource(endpoint, options)\n const plainPayload = assertPlainPayload(payload)\n const mappedPayload = resource.mapPayload\n ? resource.mapPayload(plainPayload, 'create')\n : plainPayload\n const result = await options.client\n .from(resource.table)\n .insert<T>(mappedPayload)\n .select(resource.select ?? defaultSelect)\n .single()\n\n if (result.error) normalizeSupabaseError(result.error)\n return { data: result.data as T }\n },\n\n async update<T = Record<string, unknown>>(\n endpoint: string,\n id: string | number,\n payload: Record<string, unknown> | FormData,\n _config?: DataProviderRequestConfig,\n ): Promise<DataProviderResponse<T>> {\n const resource = resolveResource(endpoint, options)\n const pk = resource.pk ?? 'id'\n const plainPayload = assertPlainPayload(payload)\n const mappedPayload = resource.mapPayload\n ? resource.mapPayload(plainPayload, 'update')\n : plainPayload\n const result = await options.client\n .from(resource.table)\n .update<T>(mappedPayload)\n .eq(pk, id)\n .select(resource.select ?? defaultSelect)\n .single()\n\n if (result.error) normalizeSupabaseError(result.error)\n return { data: result.data as T }\n },\n\n async delete(endpoint: string, id: string | number): Promise<void> {\n const resource = resolveResource(endpoint, options)\n const pk = resource.pk ?? 'id'\n const softDeletePayload =\n resource.softDelete === true\n ? { is_active: false }\n : typeof resource.softDelete === 'object'\n ? resource.softDelete\n : null\n\n const result = softDeletePayload\n ? await options.client.from(resource.table).update(softDeletePayload).eq(pk, id)\n : await options.client.from(resource.table).delete().eq(pk, id)\n\n if (result.error) normalizeSupabaseError(result.error)\n },\n }\n}\n"],"names":["normalizeListResponse","responseData","fallbackPage","fallbackPageSize","data","createAxiosDataProvider","axios","endpoint","params","response","id","config","payload","WPrimeVuePlugin","app","options","dataProvider","W_AXIOS_KEY","W_DATA_PROVIDER_KEY","W_CONFIG_KEY","WCrudView","WCrudFormDialog","WCrudColumnRenderer","WAutoCompleteFK","WMoneyInput","WTransferList","normalizeEndpoint","toResourceConfig","resource","createProviderError","message","status","assertPlainPayload","normalizeSupabaseError","error","resolveResource","resourceName","configuredResource","_a","_b","applyFilters","query","reservedKeys","filters","key","value","applySearch","search","searchFields","escapedSearch","expression","field","parseOrdering","ordering","fallback","mapList","item","createSupabaseDataProvider","defaultSelect","page","pageSize","from","to","result","_config","pk","plainPayload","mappedPayload","softDeletePayload"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../src/data-providers/axiosDataProvider.ts","../src/plugin.ts","../src/data-providers/supabaseDataProvider.ts"],"sourcesContent":["import type { AxiosInstance } from 'axios'\nimport type {\n DataProvider,\n DataProviderListParams,\n DataProviderListResponse,\n DataProviderRequestConfig,\n DataProviderResponse,\n} from '@/types/dataProvider'\n\nfunction normalizeListResponse<T>(\n responseData: unknown,\n fallbackPage: number,\n fallbackPageSize: number,\n): DataProviderListResponse<T> {\n const data = responseData as Record<string, unknown>\n\n if (Array.isArray(data.results)) {\n return {\n data: data.results as T[],\n page: (data.page as number) ?? fallbackPage,\n page_size: (data.page_size as number) ?? fallbackPageSize,\n rows: (data.count as number) ?? 0,\n extras: (data.extras as Record<string, unknown>) ?? {},\n }\n }\n\n if (Array.isArray(data.data)) {\n return {\n data: data.data as T[],\n page: (data.page as number) ?? fallbackPage,\n page_size: (data.page_size as number) ?? fallbackPageSize,\n rows: (data.rows as number) ?? 0,\n extras: (data.extras as Record<string, unknown>) ?? {},\n }\n }\n\n return {\n data: Array.isArray(responseData) ? (responseData as T[]) : [],\n page: fallbackPage,\n page_size: fallbackPageSize,\n rows: Array.isArray(responseData) ? responseData.length : 0,\n extras: {},\n }\n}\n\nexport function createAxiosDataProvider(axios: AxiosInstance): DataProvider {\n return {\n async list<T = Record<string, unknown>>(\n endpoint: string,\n params: DataProviderListParams = {},\n ): Promise<DataProviderListResponse<T>> {\n const response = await axios.get(endpoint, { params })\n return normalizeListResponse<T>(\n response.data,\n Number(params.page ?? 1),\n Number(params.page_size ?? 20),\n )\n },\n\n async get<T = Record<string, unknown>>(\n endpoint: string,\n id: string | number,\n config?: DataProviderRequestConfig,\n ): Promise<DataProviderResponse<T>> {\n const response = await axios.get<T>(`${endpoint}${id}/`, config)\n return { data: response.data }\n },\n\n async create<T = Record<string, unknown>>(\n endpoint: string,\n payload: Record<string, unknown> | FormData,\n config?: DataProviderRequestConfig,\n ): Promise<DataProviderResponse<T>> {\n const response = await axios.post<T>(endpoint, payload, config)\n return { data: response.data }\n },\n\n async update<T = Record<string, unknown>>(\n endpoint: string,\n id: string | number,\n payload: Record<string, unknown> | FormData,\n config?: DataProviderRequestConfig,\n ): Promise<DataProviderResponse<T>> {\n const response = await axios.patch<T>(`${endpoint}${id}/`, payload, config)\n return { data: response.data }\n },\n\n async delete(endpoint: string, id: string | number): Promise<void> {\n await axios.delete(`${endpoint}${id}/`)\n },\n }\n}\n","import type { App, Plugin } from 'vue'\nimport type { WPluginOptions, WPluginConfig } from './types/plugin'\nimport { W_AXIOS_KEY, W_CONFIG_KEY, W_DATA_PROVIDER_KEY } from './types/plugin'\nimport {\n WCrudView,\n WCrudFormDialog,\n WCrudColumnRenderer,\n WAutoCompleteFK,\n WMoneyInput,\n WTransferList,\n WTreeSelect,\n} from './components'\nimport { createAxiosDataProvider } from './data-providers/axiosDataProvider'\n\nexport const WPrimeVuePlugin: Plugin = {\n install(app: App, options: WPluginOptions) {\n if (!options?.axios && !options?.dataProvider) {\n throw new Error(\n '[wPrimeVueComponents] Informe \"axios\" ou \"dataProvider\" ao registrar o WPrimeVuePlugin.',\n )\n }\n\n const dataProvider = options.dataProvider ?? createAxiosDataProvider(options.axios!)\n\n const config: WPluginConfig = {\n axios: options.axios,\n dataProvider,\n defaultPageSize: options.defaultPageSize ?? 20,\n dateFormat: options.dateFormat ?? 'DD/MM/YYYY',\n dateTimeFormat: options.dateTimeFormat ?? 'DD/MM/YYYY HH:mm',\n locale: options.locale ?? 'pt-BR',\n currency: options.currency ?? 'BRL',\n }\n\n if (options.axios) {\n app.provide(W_AXIOS_KEY, options.axios)\n }\n app.provide(W_DATA_PROVIDER_KEY, dataProvider)\n app.provide(W_CONFIG_KEY, config)\n\n if (options.registerComponents !== false) {\n app.component('WCrudView', WCrudView)\n app.component('WCrudFormDialog', WCrudFormDialog)\n app.component('WCrudColumnRenderer', WCrudColumnRenderer)\n app.component('WAutoCompleteFK', WAutoCompleteFK)\n app.component('WMoneyInput', WMoneyInput)\n app.component('WTransferList', WTransferList)\n app.component('WTreeSelect', WTreeSelect)\n }\n },\n}\n","import type {\n DataProvider,\n DataProviderListParams,\n DataProviderListResponse,\n DataProviderRequestConfig,\n DataProviderResponse,\n} from '@/types/dataProvider'\n\ntype SupabaseResult<T> = {\n data: T | null\n error: {\n message: string\n code?: string\n details?: string\n hint?: string\n } | null\n count?: number | null\n}\n\ntype SupabaseFilterBuilder<T> = PromiseLike<SupabaseResult<T>> & {\n select(\n columns?: string,\n options?: { count?: 'exact' | 'planned' | 'estimated' },\n ): SupabaseFilterBuilder<T>\n eq(column: string, value: unknown): SupabaseFilterBuilder<T>\n ilike(column: string, pattern: string): SupabaseFilterBuilder<T>\n or(filters: string): SupabaseFilterBuilder<T>\n order(column: string, options?: { ascending?: boolean }): SupabaseFilterBuilder<T>\n range(from: number, to: number): SupabaseFilterBuilder<T>\n single(): Promise<SupabaseResult<T>>\n}\n\ntype SupabaseTable = {\n select<T = unknown>(\n columns?: string,\n options?: { count?: 'exact' | 'planned' | 'estimated' },\n ): SupabaseFilterBuilder<T>\n insert<T = unknown>(payload: unknown): SupabaseFilterBuilder<T>\n update<T = unknown>(payload: unknown): SupabaseFilterBuilder<T>\n delete<T = unknown>(): SupabaseFilterBuilder<T>\n}\n\nexport interface SupabaseDataProviderClient {\n from(table: string): SupabaseTable\n}\n\nexport interface SupabaseResourceConfig {\n table: string\n pk?: string\n select?: string\n searchFields?: string[]\n defaultOrdering?: string\n defaultFilters?: Record<string, unknown>\n softDelete?: boolean | Record<string, unknown>\n mapListItem?: (item: Record<string, unknown>) => Record<string, unknown>\n mapPayload?: (\n payload: Record<string, unknown>,\n operation: 'create' | 'update',\n ) => Record<string, unknown>\n}\n\nexport interface CreateSupabaseDataProviderOptions {\n client: SupabaseDataProviderClient\n resources?: Record<string, SupabaseResourceConfig | string>\n defaultSelect?: string\n allowedTables?: string[]\n}\n\nfunction normalizeEndpoint(endpoint: string): string {\n return endpoint\n .split('?')[0]\n .replace(/^\\/+|\\/+$/g, '')\n .replace(/^api\\/v\\d+\\//, '')\n}\n\nfunction toResourceConfig(resource: SupabaseResourceConfig | string): SupabaseResourceConfig {\n return typeof resource === 'string' ? { table: resource } : resource\n}\n\nfunction createProviderError(message: string, status = 400) {\n return {\n response: {\n status,\n data: { detail: message },\n },\n message,\n }\n}\n\nfunction assertPlainPayload(payload: Record<string, unknown> | FormData): Record<string, unknown> {\n if (payload instanceof FormData) {\n throw createProviderError(\n 'SupabaseDataProvider nao envia FormData diretamente. Faça upload do arquivo no Storage e envie a URL/caminho no payload.',\n )\n }\n\n return payload\n}\n\nfunction normalizeSupabaseError(error: SupabaseResult<unknown>['error']): never {\n throw {\n response: {\n data: {\n detail: error?.message ?? 'Erro ao consultar Supabase',\n code: error?.code,\n details: error?.details,\n hint: error?.hint,\n },\n },\n message: error?.message ?? 'Erro ao consultar Supabase',\n }\n}\n\nfunction resolveResource(\n endpoint: string,\n options: CreateSupabaseDataProviderOptions,\n): SupabaseResourceConfig {\n const resourceName = normalizeEndpoint(endpoint)\n const configuredResource = options.resources?.[resourceName]\n\n if (configuredResource) {\n return toResourceConfig(configuredResource)\n }\n\n if (options.allowedTables?.includes(resourceName)) {\n return { table: resourceName }\n }\n\n throw createProviderError(`Recurso Supabase nao registrado para o endpoint \"${endpoint}\".`, 404)\n}\n\nfunction applyFilters<T>(\n query: SupabaseFilterBuilder<T>,\n params: DataProviderListParams,\n resource: SupabaseResourceConfig,\n): SupabaseFilterBuilder<T> {\n const reservedKeys = new Set(['page', 'page_size', 'search', 'ordering'])\n const filters = { ...resource.defaultFilters, ...params }\n\n for (const [key, value] of Object.entries(filters)) {\n if (reservedKeys.has(key) || value === null || value === undefined || value === '') {\n continue\n }\n query = query.eq(key, value)\n }\n\n return query\n}\n\nfunction applySearch<T>(\n query: SupabaseFilterBuilder<T>,\n search: unknown,\n searchFields?: string[],\n): SupabaseFilterBuilder<T> {\n if (typeof search !== 'string' || !search.trim() || !searchFields?.length) {\n return query\n }\n\n const escapedSearch = search.trim().replace(/,/g, '\\\\,')\n const expression = searchFields.map((field) => `${field}.ilike.%${escapedSearch}%`).join(',')\n\n return query.or(expression)\n}\n\nfunction parseOrdering(ordering: unknown, fallback?: string) {\n const value = typeof ordering === 'string' && ordering ? ordering : fallback\n if (!value) return null\n\n return {\n field: value.startsWith('-') ? value.slice(1) : value,\n ascending: !value.startsWith('-'),\n }\n}\n\nfunction mapList<T>(data: T[] | null, resource: SupabaseResourceConfig): T[] {\n if (!data) return []\n if (!resource.mapListItem) return data\n\n return data.map((item) => resource.mapListItem?.(item as Record<string, unknown>)) as T[]\n}\n\nexport function createSupabaseDataProvider(\n options: CreateSupabaseDataProviderOptions,\n): DataProvider {\n const defaultSelect = options.defaultSelect ?? '*'\n\n return {\n async list<T = Record<string, unknown>>(\n endpoint: string,\n params: DataProviderListParams = {},\n ): Promise<DataProviderListResponse<T>> {\n const resource = resolveResource(endpoint, options)\n const page = Math.max(Number(params.page ?? 1), 1)\n const pageSize = Math.max(Number(params.page_size ?? 20), 1)\n const from = (page - 1) * pageSize\n const to = from + pageSize - 1\n\n let query = options.client\n .from(resource.table)\n .select<T[]>(resource.select ?? defaultSelect, { count: 'exact' })\n\n query = applyFilters(query, params, resource)\n query = applySearch(query, params.search, resource.searchFields)\n\n const ordering = parseOrdering(params.ordering, resource.defaultOrdering)\n if (ordering) {\n query = query.order(ordering.field, { ascending: ordering.ascending })\n }\n\n const result = await query.range(from, to)\n if (result.error) normalizeSupabaseError(result.error)\n\n return {\n data: mapList(result.data, resource),\n page,\n page_size: pageSize,\n rows: result.count ?? result.data?.length ?? 0,\n extras: {},\n }\n },\n\n async get<T = Record<string, unknown>>(\n endpoint: string,\n id: string | number,\n _config?: DataProviderRequestConfig,\n ): Promise<DataProviderResponse<T>> {\n const resource = resolveResource(endpoint, options)\n const pk = resource.pk ?? 'id'\n const result = await options.client\n .from(resource.table)\n .select<T>(resource.select ?? defaultSelect)\n .eq(pk, id)\n .single()\n\n if (result.error) normalizeSupabaseError(result.error)\n return { data: result.data as T }\n },\n\n async create<T = Record<string, unknown>>(\n endpoint: string,\n payload: Record<string, unknown> | FormData,\n _config?: DataProviderRequestConfig,\n ): Promise<DataProviderResponse<T>> {\n const resource = resolveResource(endpoint, options)\n const plainPayload = assertPlainPayload(payload)\n const mappedPayload = resource.mapPayload\n ? resource.mapPayload(plainPayload, 'create')\n : plainPayload\n const result = await options.client\n .from(resource.table)\n .insert<T>(mappedPayload)\n .select(resource.select ?? defaultSelect)\n .single()\n\n if (result.error) normalizeSupabaseError(result.error)\n return { data: result.data as T }\n },\n\n async update<T = Record<string, unknown>>(\n endpoint: string,\n id: string | number,\n payload: Record<string, unknown> | FormData,\n _config?: DataProviderRequestConfig,\n ): Promise<DataProviderResponse<T>> {\n const resource = resolveResource(endpoint, options)\n const pk = resource.pk ?? 'id'\n const plainPayload = assertPlainPayload(payload)\n const mappedPayload = resource.mapPayload\n ? resource.mapPayload(plainPayload, 'update')\n : plainPayload\n const result = await options.client\n .from(resource.table)\n .update<T>(mappedPayload)\n .eq(pk, id)\n .select(resource.select ?? defaultSelect)\n .single()\n\n if (result.error) normalizeSupabaseError(result.error)\n return { data: result.data as T }\n },\n\n async delete(endpoint: string, id: string | number): Promise<void> {\n const resource = resolveResource(endpoint, options)\n const pk = resource.pk ?? 'id'\n const softDeletePayload =\n resource.softDelete === true\n ? { is_active: false }\n : typeof resource.softDelete === 'object'\n ? resource.softDelete\n : null\n\n const result = softDeletePayload\n ? await options.client.from(resource.table).update(softDeletePayload).eq(pk, id)\n : await options.client.from(resource.table).delete().eq(pk, id)\n\n if (result.error) normalizeSupabaseError(result.error)\n },\n }\n}\n"],"names":["normalizeListResponse","responseData","fallbackPage","fallbackPageSize","data","createAxiosDataProvider","axios","endpoint","params","response","id","config","payload","WPrimeVuePlugin","app","options","dataProvider","W_AXIOS_KEY","W_DATA_PROVIDER_KEY","W_CONFIG_KEY","WCrudView","WCrudFormDialog","WCrudColumnRenderer","WAutoCompleteFK","WMoneyInput","WTransferList","WTreeSelect","normalizeEndpoint","toResourceConfig","resource","createProviderError","message","status","assertPlainPayload","normalizeSupabaseError","error","resolveResource","resourceName","configuredResource","_a","_b","applyFilters","query","reservedKeys","filters","key","value","applySearch","search","searchFields","escapedSearch","expression","field","parseOrdering","ordering","fallback","mapList","item","createSupabaseDataProvider","defaultSelect","page","pageSize","from","to","result","_config","pk","plainPayload","mappedPayload","softDeletePayload"],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { WPrimeVuePlugin } from './plugin';
|
|
2
|
-
export { WCrudView, WCrudFormDialog, WCrudColumnRenderer, WAutoCompleteFK, WFormRenderer, WDatePicker, WDateRange, WMoneyInput, WTransferList, WStatusTag, WPageHeader, WDetailHeader, WEmptyState, WInfoCard, WKpiCard, WKpiGrid, WSectionHeader, WFormSection, WActionBar, WProgressFlow, } from './components';
|
|
2
|
+
export { WCrudView, WCrudFormDialog, WCrudColumnRenderer, WAutoCompleteFK, WFormRenderer, WDatePicker, WDateRange, WMoneyInput, WTransferList, WTreeSelect, WStatusTag, WPageHeader, WDetailHeader, WEmptyState, WInfoCard, WKpiCard, WKpiGrid, WSectionHeader, WFormSection, WActionBar, WProgressFlow, } from './components';
|
|
3
3
|
export { useCrudManager, useApi, useAppToast, useAppConfirm, useApiError, extractApiError, useFormatters, useDateInput, } from './composables';
|
|
4
4
|
export type { DateValueFormat } from './composables';
|
|
5
5
|
export { createAxiosDataProvider, createSupabaseDataProvider } from './data-providers';
|
|
@@ -12,3 +12,4 @@ export type { ApiFieldMeta } from './utils/fieldMapper';
|
|
|
12
12
|
export { mapApiFieldToFieldDef, mapApiFieldsToFieldDefs, mapApiFieldToColumnDef, mapApiFieldsToColumnDefs, } from './utils/fieldMapper';
|
|
13
13
|
export type { ToCsvOptions } from './utils/csv';
|
|
14
14
|
export { toCsv, downloadCsv } from './utils/csv';
|
|
15
|
+
export type { TreeSelectId, TreeSelectOption, TreeSelectNode, TreeSelectionKeys, TreeSelectionState, } from './utils/treeSelect';
|
package/dist/index.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
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
|
|
4
|
-
import { u as
|
|
5
|
-
import { e as
|
|
6
|
-
import { DEFAULT_CRUD_LABELS as
|
|
7
|
-
function
|
|
2
|
+
import { d as A, c as P, b as v, a as C, n as D, s as x, t as F } from "./WProgressFlow.vue_vue_type_script_setup_true_lang-D9HgZsV9.js";
|
|
3
|
+
import { _ as N, e as O, f as V, g as q, h as H, i as j, j as B, k as U, l as G, m as X, o as J, p as Q, q as Z, r as ee, u as ae, v as te, w as re, x as se, y as ne, z as oe } from "./WProgressFlow.vue_vue_type_script_setup_true_lang-D9HgZsV9.js";
|
|
4
|
+
import { u as ce, a as le } from "./useApi-BsrLTNwE.js";
|
|
5
|
+
import { e as de, u as fe, a as me, b as pe, c as ge, f as ye } from "./useFormKeyboardNav-D4Irq5RE.js";
|
|
6
|
+
import { DEFAULT_CRUD_LABELS as We } from "./types.js";
|
|
7
|
+
function S(e, a, t) {
|
|
8
8
|
const r = e;
|
|
9
9
|
return Array.isArray(r.results) ? {
|
|
10
10
|
data: r.results,
|
|
@@ -30,7 +30,7 @@ function b(e) {
|
|
|
30
30
|
return {
|
|
31
31
|
async list(a, t = {}) {
|
|
32
32
|
const r = await e.get(a, { params: t });
|
|
33
|
-
return
|
|
33
|
+
return S(
|
|
34
34
|
r.data,
|
|
35
35
|
Number(t.page ?? 1),
|
|
36
36
|
Number(t.page_size ?? 20)
|
|
@@ -50,7 +50,7 @@ function b(e) {
|
|
|
50
50
|
}
|
|
51
51
|
};
|
|
52
52
|
}
|
|
53
|
-
const
|
|
53
|
+
const I = {
|
|
54
54
|
install(e, a) {
|
|
55
55
|
if (!(a != null && a.axios) && !(a != null && a.dataProvider))
|
|
56
56
|
throw new Error(
|
|
@@ -65,10 +65,10 @@ const Y = {
|
|
|
65
65
|
locale: a.locale ?? "pt-BR",
|
|
66
66
|
currency: a.currency ?? "BRL"
|
|
67
67
|
};
|
|
68
|
-
a.axios && e.provide(_, a.axios), e.provide(W, t), e.provide(w, r), a.registerComponents !== !1 && (e.component("WCrudView", A), e.component("WCrudFormDialog", P), e.component("WCrudColumnRenderer", v), e.component("WAutoCompleteFK", C), e.component("WMoneyInput", D), e.component("WTransferList", x));
|
|
68
|
+
a.axios && e.provide(_, a.axios), e.provide(W, t), e.provide(w, r), a.registerComponents !== !1 && (e.component("WCrudView", A), e.component("WCrudFormDialog", P), e.component("WCrudColumnRenderer", v), e.component("WAutoCompleteFK", C), e.component("WMoneyInput", D), e.component("WTransferList", x), e.component("WTreeSelect", F));
|
|
69
69
|
}
|
|
70
70
|
};
|
|
71
|
-
function
|
|
71
|
+
function $(e) {
|
|
72
72
|
return e.split("?")[0].replace(/^\/+|\/+$/g, "").replace(/^api\/v\d+\//, "");
|
|
73
73
|
}
|
|
74
74
|
function h(e) {
|
|
@@ -105,7 +105,7 @@ function f(e) {
|
|
|
105
105
|
}
|
|
106
106
|
function m(e, a) {
|
|
107
107
|
var s, n;
|
|
108
|
-
const t =
|
|
108
|
+
const t = $(e), r = (s = a.resources) == null ? void 0 : s[t];
|
|
109
109
|
if (r)
|
|
110
110
|
return h(r);
|
|
111
111
|
if ((n = a.allowedTables) != null && n.includes(t))
|
|
@@ -124,7 +124,7 @@ function R(e, a, t) {
|
|
|
124
124
|
const r = a.trim().replace(/,/g, "\\,"), s = t.map((n) => `${n}.ilike.%${r}%`).join(",");
|
|
125
125
|
return e.or(s);
|
|
126
126
|
}
|
|
127
|
-
function
|
|
127
|
+
function T(e, a) {
|
|
128
128
|
const t = typeof e == "string" && e ? e : a;
|
|
129
129
|
return t ? {
|
|
130
130
|
field: t.startsWith("-") ? t.slice(1) : t,
|
|
@@ -137,17 +137,17 @@ function z(e, a) {
|
|
|
137
137
|
return (r = a.mapListItem) == null ? void 0 : r.call(a, t);
|
|
138
138
|
}) : e : [];
|
|
139
139
|
}
|
|
140
|
-
function
|
|
140
|
+
function M(e) {
|
|
141
141
|
const a = e.defaultSelect ?? "*";
|
|
142
142
|
return {
|
|
143
143
|
async list(t, r = {}) {
|
|
144
144
|
var p;
|
|
145
|
-
const s = m(t, e), n = Math.max(Number(r.page ?? 1), 1), o = Math.max(Number(r.page_size ?? 20), 1), i = (n - 1) * o,
|
|
145
|
+
const s = m(t, e), n = Math.max(Number(r.page ?? 1), 1), o = Math.max(Number(r.page_size ?? 20), 1), i = (n - 1) * o, l = i + o - 1;
|
|
146
146
|
let c = e.client.from(s.table).select(s.select ?? a, { count: "exact" });
|
|
147
147
|
c = E(c, r, s), c = R(c, r.search, s.searchFields);
|
|
148
|
-
const
|
|
149
|
-
|
|
150
|
-
const d = await c.range(i,
|
|
148
|
+
const u = T(r.ordering, s.defaultOrdering);
|
|
149
|
+
u && (c = c.order(u.field, { ascending: u.ascending }));
|
|
150
|
+
const d = await c.range(i, l);
|
|
151
151
|
return d.error && f(d.error), {
|
|
152
152
|
data: z(d.data, s),
|
|
153
153
|
page: n,
|
|
@@ -161,12 +161,12 @@ function I(e) {
|
|
|
161
161
|
return i.error && f(i.error), { data: i.data };
|
|
162
162
|
},
|
|
163
163
|
async create(t, r, s) {
|
|
164
|
-
const n = m(t, e), o = g(r), i = n.mapPayload ? n.mapPayload(o, "create") : o,
|
|
165
|
-
return
|
|
164
|
+
const n = m(t, e), o = g(r), i = n.mapPayload ? n.mapPayload(o, "create") : o, l = await e.client.from(n.table).insert(i).select(n.select ?? a).single();
|
|
165
|
+
return l.error && f(l.error), { data: l.data };
|
|
166
166
|
},
|
|
167
167
|
async update(t, r, s, n) {
|
|
168
|
-
const o = m(t, e), i = o.pk ?? "id",
|
|
169
|
-
return
|
|
168
|
+
const o = m(t, e), i = o.pk ?? "id", l = g(s), c = o.mapPayload ? o.mapPayload(l, "update") : l, u = await e.client.from(o.table).update(c).eq(i, r).select(o.select ?? a).single();
|
|
169
|
+
return u.error && f(u.error), { data: u.data };
|
|
170
170
|
},
|
|
171
171
|
async delete(t, r) {
|
|
172
172
|
const s = m(t, e), n = s.pk ?? "id", o = s.softDelete === !0 ? { is_active: !1 } : typeof s.softDelete == "object" ? s.softDelete : null, i = o ? await e.client.from(s.table).update(o).eq(n, r) : await e.client.from(s.table).delete().eq(n, r);
|
|
@@ -175,46 +175,47 @@ function I(e) {
|
|
|
175
175
|
};
|
|
176
176
|
}
|
|
177
177
|
export {
|
|
178
|
-
|
|
179
|
-
|
|
178
|
+
We as DEFAULT_CRUD_LABELS,
|
|
179
|
+
N as WActionBar,
|
|
180
180
|
C as WAutoCompleteFK,
|
|
181
181
|
v as WCrudColumnRenderer,
|
|
182
182
|
P as WCrudFormDialog,
|
|
183
183
|
A as WCrudView,
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
184
|
+
O as WDatePicker,
|
|
185
|
+
V as WDateRange,
|
|
186
|
+
q as WDetailHeader,
|
|
187
|
+
H as WEmptyState,
|
|
188
|
+
j as WFormRenderer,
|
|
189
|
+
B as WFormSection,
|
|
190
|
+
U as WInfoCard,
|
|
191
|
+
G as WKpiCard,
|
|
192
|
+
X as WKpiGrid,
|
|
193
193
|
D as WMoneyInput,
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
194
|
+
J as WPageHeader,
|
|
195
|
+
I as WPrimeVuePlugin,
|
|
196
|
+
Q as WProgressFlow,
|
|
197
|
+
Z as WSectionHeader,
|
|
198
|
+
ee as WStatusTag,
|
|
199
199
|
x as WTransferList,
|
|
200
|
+
F as WTreeSelect,
|
|
200
201
|
_ as W_AXIOS_KEY,
|
|
201
202
|
w as W_CONFIG_KEY,
|
|
202
203
|
W as W_DATA_PROVIDER_KEY,
|
|
203
204
|
b as createAxiosDataProvider,
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
205
|
+
M as createSupabaseDataProvider,
|
|
206
|
+
ae as downloadCsv,
|
|
207
|
+
de as extractApiError,
|
|
208
|
+
te as mapApiFieldToColumnDef,
|
|
209
|
+
re as mapApiFieldToFieldDef,
|
|
210
|
+
se as mapApiFieldsToColumnDefs,
|
|
211
|
+
ne as mapApiFieldsToFieldDefs,
|
|
212
|
+
oe as toCsv,
|
|
213
|
+
ce as useApi,
|
|
214
|
+
fe as useApiError,
|
|
215
|
+
me as useAppConfirm,
|
|
216
|
+
pe as useAppToast,
|
|
217
|
+
le as useCrudManager,
|
|
218
|
+
ge as useDateInput,
|
|
219
|
+
ye as useFormatters
|
|
219
220
|
};
|
|
220
221
|
//# sourceMappingURL=index.js.map
|