lkt-item-crud 1.0.9 → 1.0.10

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.
@@ -1,26 +1,32 @@
1
- import { defineComponent as Z, useSlots as ee, ref as d, computed as v, watch as R, resolveComponent as V, openBlock as i, createElementBlock as p, createElementVNode as I, toDisplayString as M, renderSlot as L, createCommentVNode as C, withDirectives as B, createBlock as _, withCtx as J, unref as E, vShow as q, createVNode as H } from "vue";
2
- import { httpCall as te } from "lkt-http-client";
3
- import { DataState as ae } from "lkt-data-state";
4
- import le from "lkt-button";
5
- import ue from "lkt-http-info";
6
- import re from "lkt-loader";
7
- const oe = { class: "lkt-item-crud" }, se = {
1
+ import { defineComponent as le, useSlots as ue, ref as i, computed as r, watch as B, resolveComponent as w, openBlock as d, createElementBlock as p, createElementVNode as H, toDisplayString as q, renderSlot as R, createCommentVNode as k, withDirectives as O, createBlock as V, withCtx as A, unref as F, vShow as I, createVNode as P } from "vue";
2
+ import { httpCall as oe } from "lkt-http-client";
3
+ import { DataState as re } from "lkt-data-state";
4
+ import de from "lkt-button";
5
+ import se from "lkt-http-info";
6
+ import ne from "lkt-loader";
7
+ const ie = { class: "lkt-item-crud" }, ce = {
8
8
  key: 0,
9
9
  class: "lkt-item-crud_header"
10
- }, de = { class: "lkt-item-crud_header-title" }, ie = { class: "lkt-item-crud_header-slot" }, ne = { class: "lkt-item-crud-buttons" }, ce = { key: 1 }, ve = { key: 1 }, fe = {
10
+ }, ve = { class: "lkt-item-crud_header-title" }, fe = { class: "lkt-item-crud_header-slot" }, pe = {
11
11
  key: 1,
12
+ class: "lkt-item-crud-buttons"
13
+ }, me = { key: 1 }, ke = { key: 1 }, he = {
14
+ key: 2,
12
15
  class: "lkt-item-crud_content"
13
- }, me = {
16
+ }, ye = {
14
17
  key: 0,
15
18
  class: "lkt-grid-1"
16
- }, pe = { name: "LktItemCrud", inheritAttrs: !1 }, ke = /* @__PURE__ */ Z({
17
- ...pe,
19
+ }, Se = { name: "LktItemCrud", inheritAttrs: !1 }, Ce = /* @__PURE__ */ le({
20
+ ...Se,
18
21
  props: {
19
22
  modelValue: { type: Object, required: !1, default: () => ({}) },
20
23
  title: { type: String, default: "" },
21
24
  editModeText: { type: String, default: "Edition Mode" },
22
25
  saveText: { type: String, default: "Save" },
23
26
  dropText: { type: String, default: "Delete" },
27
+ hiddenSave: { type: Boolean, default: !1 },
28
+ hiddenDrop: { type: Boolean, default: !1 },
29
+ hiddenButtons: { type: Boolean, default: !1 },
24
30
  readResource: { type: String, required: !1 },
25
31
  createResource: { type: String, required: !1 },
26
32
  updateResource: { type: String, required: !1 },
@@ -39,166 +45,166 @@ const oe = { class: "lkt-item-crud" }, se = {
39
45
  saveValidator: { type: Function, required: !1, default: () => !0 }
40
46
  },
41
47
  emits: ["update:modelValue", "read", "create", "update", "drop", "perms", "error", "modified-data"],
42
- setup(t, { expose: N, emit: A }) {
43
- const e = t, O = ee(), o = A;
44
- let F = [];
45
- const l = d(!0), r = d(e.modelValue), k = d(F), c = d(!1), n = d(!1), f = d(!1), s = d(200), S = d(null), h = d(null), y = d(new ae(r.value)), P = v(() => e.isCreate ? e.createConfirm : e.updateConfirm), T = v(() => e.isCreate ? e.createResource : e.updateResource), z = v(() => e.isCreate ? { ...e.createData, ...JSON.parse(JSON.stringify(r.value)) } : { ...e.updateData, ...JSON.parse(JSON.stringify(r.value)) }), G = v(() => e.isCreate ? e.createDisabled : e.updateDisabled), b = v(() => !e.isCreate && k.value.includes("update")), D = v(() => !e.isCreate && k.value.includes("drop")), w = async () => {
46
- l.value = !0, s.value = -1, f.value = !1;
48
+ setup(t, { expose: M, emit: z }) {
49
+ const e = t, _ = ue(), s = z;
50
+ let G = [];
51
+ const l = i(!0), o = i(e.modelValue), h = i(G), c = i(!1), v = i(!1), f = i(!1), n = i(200), S = i(null), C = i(null), y = i(new re(o.value)), K = r(() => e.isCreate ? e.createConfirm : e.updateConfirm), N = r(() => e.isCreate ? e.createResource : e.updateResource), Q = r(() => e.isCreate ? { ...e.createData, ...JSON.parse(JSON.stringify(o.value)) } : { ...e.updateData, ...JSON.parse(JSON.stringify(o.value)) }), W = r(() => e.isCreate ? e.createDisabled : e.updateDisabled), D = r(() => !e.isCreate && h.value.includes("update")), b = r(() => !e.isCreate && h.value.includes("drop")), L = async () => {
52
+ l.value = !0, n.value = -1, f.value = !1;
47
53
  try {
48
- const a = await te(e.readResource, e.readData);
49
- if (l.value = !1, s.value = a.httpStatus, !a.success) {
50
- n.value = !1, s.value = a.httpStatus, o("error", a.httpStatus);
54
+ const a = await oe(e.readResource, e.readData);
55
+ if (l.value = !1, n.value = a.httpStatus, !a.success) {
56
+ v.value = !1, n.value = a.httpStatus, s("error", a.httpStatus);
51
57
  return;
52
58
  }
53
- n.value = !0, r.value = a.data, k.value = a.perms, y.value.increment(r.value).turnStoredIntoOriginal(), o("read", a);
59
+ v.value = !0, o.value = a.data, h.value = a.perms, y.value.increment(o.value).turnStoredIntoOriginal(), s("read", a);
54
60
  } catch {
55
- l.value = !1, n.value = !1, s.value = 404, o("error", 404);
61
+ l.value = !1, v.value = !1, n.value = 404, s("error", 404);
56
62
  return;
57
63
  }
58
- }, K = v(() => l.value ? !1 : e.title || !!O["post-title"]);
59
- R(() => e.modelValue, (a) => {
60
- r.value = a, y.value.increment(a);
61
- }, { deep: !0 }), R(r, (a) => {
62
- o("update:modelValue", r.value), y.value.increment(a);
63
- }, { deep: !0 }), R(k, () => o("perms", k.value));
64
- const $ = v(() => G.value || !e.isCreate && !b.value || typeof e.saveValidator == "function" && !e.saveValidator(r.value) ? !1 : y.value.changed());
65
- R($, (a) => o("modified-data", a)), e.readResource && !e.isCreate ? w() : e.isCreate && (n.value = !0, c.value = !0, l.value = !1);
66
- const Q = (a, u) => {
67
- if (l.value = !1, s.value = u.httpStatus, !u.success) {
68
- f.value = !0, o("error", u.httpStatus);
64
+ }, X = r(() => l.value ? !1 : e.title || !!_["post-title"]);
65
+ B(() => e.modelValue, (a) => {
66
+ o.value = a, y.value.increment(a);
67
+ }, { deep: !0 }), B(o, (a) => {
68
+ s("update:modelValue", o.value), y.value.increment(a);
69
+ }, { deep: !0 }), B(h, () => s("perms", h.value));
70
+ const T = r(() => W.value || !e.isCreate && !D.value || typeof e.saveValidator == "function" && !e.saveValidator(o.value) ? !1 : y.value.changed());
71
+ B(T, (a) => s("modified-data", a)), e.readResource && !e.isCreate ? L() : e.isCreate && (v.value = !0, c.value = !0, l.value = !1);
72
+ const Y = (a, u) => {
73
+ if (l.value = !1, n.value = u.httpStatus, !u.success) {
74
+ f.value = !0, s("error", u.httpStatus);
69
75
  return;
70
76
  }
71
- f.value = !0, o("drop", u);
72
- }, W = (a, u) => {
73
- if (T.value) {
74
- if (l.value = !1, s.value = u.httpStatus, !u.success) {
75
- f.value = !0, o("error", u.httpStatus);
77
+ f.value = !0, s("drop", u);
78
+ }, Z = (a, u) => {
79
+ if (N.value) {
80
+ if (l.value = !1, n.value = u.httpStatus, !u.success) {
81
+ f.value = !0, s("error", u.httpStatus);
76
82
  return;
77
83
  }
78
84
  f.value = !0;
79
85
  }
80
86
  let g = e.isCreate ? "create" : "update";
81
- e.isCreate || y.value.turnStoredIntoOriginal(), u.autoReloadId && (e.readData.id = u.autoReloadId, w()), o(g, u);
87
+ e.isCreate || y.value.turnStoredIntoOriginal(), u.autoReloadId && (e.readData.id = u.autoReloadId, L()), s(g, u);
88
+ }, $ = () => {
89
+ l.value = !0, n.value = -1;
82
90
  }, x = () => {
83
- l.value = !0, s.value = -1;
84
- }, j = () => {
85
91
  l.value = !1;
86
92
  };
87
- return N({
93
+ M({
88
94
  doDrop: () => {
89
- h.value && typeof h.value.click == "function" && h.value.click();
95
+ C.value && typeof C.value.click == "function" && C.value.click();
90
96
  },
91
- doRefresh: w,
97
+ doRefresh: L,
92
98
  doSave: () => {
93
99
  S.value && typeof S.value.click == "function" && S.value.click();
94
100
  }
95
- }), (a, u) => {
96
- const g = V("lkt-button"), X = V("lkt-field-switch"), U = V("lkt-http-info"), Y = V("lkt-loader");
97
- return i(), p("article", oe, [
98
- K.value ? (i(), p("header", se, [
99
- I("h1", de, M(t.title), 1),
100
- I("div", ie, [
101
- L(a.$slots, "post-title", {
102
- item: r.value,
101
+ });
102
+ const j = r(() => !e.hiddenDrop && !l.value && c.value && v.value), U = r(() => !e.hiddenSave && !l.value && c.value && v.value), J = r(() => !l.value && !e.isCreate && v.value), ee = r(() => !e.hiddenButtons && (U.value || j.value || J.value));
103
+ return (a, u) => {
104
+ const g = w("lkt-button"), te = w("lkt-field-switch"), E = w("lkt-http-info"), ae = w("lkt-loader");
105
+ return d(), p("article", ie, [
106
+ X.value ? (d(), p("header", ce, [
107
+ H("h1", ve, q(t.title), 1),
108
+ H("div", fe, [
109
+ R(a.$slots, "post-title", {
110
+ item: o.value,
103
111
  loading: l.value
104
112
  })
105
113
  ])
106
- ])) : C("", !0),
107
- B(I("div", ne, [
108
- t.isCreate ? C("", !0) : B((i(), _(g, {
114
+ ])) : k("", !0),
115
+ ee.value ? (d(), p("div", pe, [
116
+ t.isCreate ? k("", !0) : O((d(), V(g, {
109
117
  key: 0,
110
- ref: (m) => h.value = m,
118
+ ref: (m) => C.value = m,
111
119
  palette: "danger",
112
- disabled: t.dropDisabled || !D.value,
120
+ disabled: t.dropDisabled || !b.value,
113
121
  "confirm-modal": t.dropConfirm,
114
122
  resource: t.dropResource,
115
123
  "resource-data": t.dropData,
116
- onLoading: x,
117
- onLoaded: j,
118
- onClick: Q
124
+ onLoading: $,
125
+ onLoaded: x,
126
+ onClick: Y
119
127
  }, {
120
- default: J(() => [
121
- E(O)["button-drop"] ? L(a.$slots, "button-drop", {
128
+ default: A(() => [
129
+ F(_)["button-drop"] ? R(a.$slots, "button-drop", {
122
130
  key: 0,
123
- item: r.value,
131
+ item: o.value,
124
132
  editMode: c.value,
125
133
  isCreate: t.isCreate,
126
- canUpdate: b.value,
127
- canDrop: D.value
128
- }) : (i(), p("span", ce, M(t.dropText), 1))
134
+ canUpdate: D.value,
135
+ canDrop: b.value
136
+ }) : (d(), p("span", me, q(t.dropText), 1))
129
137
  ]),
130
138
  _: 3
131
139
  }, 8, ["disabled", "confirm-modal", "resource", "resource-data"])), [
132
- [q, !l.value && c.value && n.value]
140
+ [I, j.value]
133
141
  ]),
134
- B(H(g, {
142
+ O(P(g, {
135
143
  ref: (m) => S.value = m,
136
144
  palette: "success",
137
- disabled: !$.value,
138
- "confirm-modal": P.value,
139
- resource: T.value,
140
- "resource-data": z.value,
141
- onLoading: x,
142
- onLoaded: j,
143
- onClick: W
145
+ disabled: !T.value,
146
+ "confirm-modal": K.value,
147
+ resource: N.value,
148
+ "resource-data": Q.value,
149
+ onLoading: $,
150
+ onLoaded: x,
151
+ onClick: Z
144
152
  }, {
145
- default: J(() => [
146
- E(O)["button-save"] ? L(a.$slots, "button-save", {
153
+ default: A(() => [
154
+ F(_)["button-save"] ? R(a.$slots, "button-save", {
147
155
  key: 0,
148
- item: r.value,
156
+ item: o.value,
149
157
  editMode: c.value,
150
158
  isCreate: t.isCreate,
151
- canUpdate: b.value,
152
- canDrop: D.value
153
- }) : (i(), p("span", ve, M(t.saveText), 1))
159
+ canUpdate: D.value,
160
+ canDrop: b.value
161
+ }) : (d(), p("span", ke, q(t.saveText), 1))
154
162
  ]),
155
163
  _: 3
156
164
  }, 8, ["disabled", "confirm-modal", "resource", "resource-data"]), [
157
- [q, !l.value && c.value && n.value]
165
+ [I, U.value]
158
166
  ]),
159
- B(H(X, {
167
+ O(P(te, {
160
168
  modelValue: c.value,
161
169
  "onUpdate:modelValue": u[0] || (u[0] = (m) => c.value = m),
162
170
  label: t.editModeText
163
171
  }, null, 8, ["modelValue", "label"]), [
164
- [q, !l.value && n.value && !t.isCreate]
172
+ [I, J.value]
165
173
  ])
166
- ], 512), [
167
- [q, n.value]
168
- ]),
169
- l.value ? C("", !0) : (i(), p("div", fe, [
170
- n.value ? (i(), p("div", me, [
171
- f.value ? (i(), _(U, {
174
+ ])) : k("", !0),
175
+ l.value ? k("", !0) : (d(), p("div", he, [
176
+ v.value ? (d(), p("div", ye, [
177
+ f.value ? (d(), V(E, {
172
178
  key: 0,
173
- code: s.value,
179
+ code: n.value,
174
180
  quick: "",
175
- palette: s.value === 200 ? "success" : "danger",
181
+ palette: n.value === 200 ? "success" : "danger",
176
182
  "can-close": "",
177
183
  onClose: u[1] || (u[1] = (m) => f.value = !1)
178
- }, null, 8, ["code", "palette"])) : C("", !0),
179
- L(a.$slots, "item", {
180
- item: r.value,
184
+ }, null, 8, ["code", "palette"])) : k("", !0),
185
+ R(a.$slots, "item", {
186
+ item: o.value,
181
187
  loading: l.value,
182
188
  editMode: c.value,
183
189
  isCreate: t.isCreate,
184
- canUpdate: b.value,
185
- canDrop: D.value
190
+ canUpdate: D.value,
191
+ canDrop: b.value
186
192
  })
187
- ])) : (i(), _(U, {
193
+ ])) : (d(), V(E, {
188
194
  key: 1,
189
- code: s.value
195
+ code: n.value
190
196
  }, null, 8, ["code"]))
191
197
  ])),
192
- l.value ? (i(), _(Y, { key: 2 })) : C("", !0)
198
+ l.value ? (d(), V(ae, { key: 3 })) : k("", !0)
193
199
  ]);
194
200
  };
195
201
  }
196
202
  });
197
- const Ve = {
198
- install: (t, N = {}) => {
199
- t.component("lkt-item-crud") === void 0 && t.component("lkt-item-crud", ke), t.component("lkt-button") === void 0 && t.use(le), t.component("lkt-http-info") === void 0 && t.use(ue), t.component("lkt-loader") === void 0 && t.use(re);
203
+ const Le = {
204
+ install: (t, M = {}) => {
205
+ t.component("lkt-item-crud") === void 0 && t.component("lkt-item-crud", Ce), t.component("lkt-button") === void 0 && t.use(de), t.component("lkt-http-info") === void 0 && t.use(se), t.component("lkt-loader") === void 0 && t.use(ne);
200
206
  }
201
207
  };
202
208
  export {
203
- Ve as default
209
+ Le as default
204
210
  };
@@ -1 +1 @@
1
- (function(e,p){typeof exports=="object"&&typeof module<"u"?module.exports=p(require("vue"),require("lkt-http-client"),require("lkt-data-state"),require("lkt-button"),require("lkt-http-info"),require("lkt-loader")):typeof define=="function"&&define.amd?define(["vue","lkt-http-client","lkt-data-state","lkt-button","lkt-http-info","lkt-loader"],p):(e=typeof globalThis<"u"?globalThis:e||self,e.LktItemCrud=p(e.Vue,e.LktHttpClient,e.LktDataState,e.LktButton,e.LktHttpInfo,e.LktLoader))})(this,function(e,p,N,R,I,O){"use strict";const D=t=>t&&typeof t=="object"&&"default"in t?t:{default:t},E=D(R),T=D(I),x=D(O),M={class:"lkt-item-crud"},j={key:0,class:"lkt-item-crud_header"},$={class:"lkt-item-crud_header-title"},U={class:"lkt-item-crud_header-slot"},H={class:"lkt-item-crud-buttons"},J={key:1},A={key:1},F={key:1,class:"lkt-item-crud_content"},P={key:0,class:"lkt-grid-1"},z={name:"LktItemCrud",inheritAttrs:!1},G=e.defineComponent({...z,props:{modelValue:{type:Object,required:!1,default:()=>({})},title:{type:String,default:""},editModeText:{type:String,default:"Edition Mode"},saveText:{type:String,default:"Save"},dropText:{type:String,default:"Delete"},readResource:{type:String,required:!1},createResource:{type:String,required:!1},updateResource:{type:String,required:!1},dropResource:{type:String,required:!1},readData:{type:Object,required:!1,default:()=>({})},createData:{type:Object,required:!1,default:()=>({})},updateData:{type:Object,required:!1,default:()=>({})},dropData:{type:Object,required:!1,default:()=>({})},isCreate:{type:Boolean,default:!1},createConfirm:{type:String,default:""},updateConfirm:{type:String,default:""},dropConfirm:{type:String,default:""},createDisabled:{type:Boolean,default:!1},updateDisabled:{type:Boolean,default:!1},dropDisabled:{type:Boolean,default:!1},saveValidator:{type:Function,required:!1,default:()=>!0}},emits:["update:modelValue","read","create","update","drop","perms","error","modified-data"],setup(t,{expose:g,emit:K}){const a=t,B=e.useSlots(),n=K;let Q=[];const o=e.ref(!0),d=e.ref(a.modelValue),m=e.ref(Q),u=e.ref(!1),i=e.ref(!1),c=e.ref(!1),s=e.ref(200),v=e.ref(null),h=e.ref(null),k=e.ref(new N.DataState(d.value)),W=e.computed(()=>a.isCreate?a.createConfirm:a.updateConfirm),L=e.computed(()=>a.isCreate?a.createResource:a.updateResource),X=e.computed(()=>a.isCreate?{...a.createData,...JSON.parse(JSON.stringify(d.value))}:{...a.updateData,...JSON.parse(JSON.stringify(d.value))}),Y=e.computed(()=>a.isCreate?a.createDisabled:a.updateDisabled),C=e.computed(()=>!a.isCreate&&m.value.includes("update")),y=e.computed(()=>!a.isCreate&&m.value.includes("drop")),b=async()=>{o.value=!0,s.value=-1,c.value=!1;try{const l=await p.httpCall(a.readResource,a.readData);if(o.value=!1,s.value=l.httpStatus,!l.success){i.value=!1,s.value=l.httpStatus,n("error",l.httpStatus);return}i.value=!0,d.value=l.data,m.value=l.perms,k.value.increment(d.value).turnStoredIntoOriginal(),n("read",l)}catch{o.value=!1,i.value=!1,s.value=404,n("error",404);return}},Z=e.computed(()=>o.value?!1:a.title||!!B["post-title"]);e.watch(()=>a.modelValue,l=>{d.value=l,k.value.increment(l)},{deep:!0}),e.watch(d,l=>{n("update:modelValue",d.value),k.value.increment(l)},{deep:!0}),e.watch(m,()=>n("perms",m.value));const V=e.computed(()=>Y.value||!a.isCreate&&!C.value||typeof a.saveValidator=="function"&&!a.saveValidator(d.value)?!1:k.value.changed());e.watch(V,l=>n("modified-data",l)),a.readResource&&!a.isCreate?b():a.isCreate&&(i.value=!0,u.value=!0,o.value=!1);const ee=(l,r)=>{if(o.value=!1,s.value=r.httpStatus,!r.success){c.value=!0,n("error",r.httpStatus);return}c.value=!0,n("drop",r)},te=(l,r)=>{if(L.value){if(o.value=!1,s.value=r.httpStatus,!r.success){c.value=!0,n("error",r.httpStatus);return}c.value=!0}let S=a.isCreate?"create":"update";a.isCreate||k.value.turnStoredIntoOriginal(),r.autoReloadId&&(a.readData.id=r.autoReloadId,b()),n(S,r)},w=()=>{o.value=!0,s.value=-1},_=()=>{o.value=!1};return g({doDrop:()=>{h.value&&typeof h.value.click=="function"&&h.value.click()},doRefresh:b,doSave:()=>{v.value&&typeof v.value.click=="function"&&v.value.click()}}),(l,r)=>{const S=e.resolveComponent("lkt-button"),ae=e.resolveComponent("lkt-field-switch"),q=e.resolveComponent("lkt-http-info"),le=e.resolveComponent("lkt-loader");return e.openBlock(),e.createElementBlock("article",M,[Z.value?(e.openBlock(),e.createElementBlock("header",j,[e.createElementVNode("h1",$,e.toDisplayString(t.title),1),e.createElementVNode("div",U,[e.renderSlot(l.$slots,"post-title",{item:d.value,loading:o.value})])])):e.createCommentVNode("",!0),e.withDirectives(e.createElementVNode("div",H,[t.isCreate?e.createCommentVNode("",!0):e.withDirectives((e.openBlock(),e.createBlock(S,{key:0,ref:f=>h.value=f,palette:"danger",disabled:t.dropDisabled||!y.value,"confirm-modal":t.dropConfirm,resource:t.dropResource,"resource-data":t.dropData,onLoading:w,onLoaded:_,onClick:ee},{default:e.withCtx(()=>[e.unref(B)["button-drop"]?e.renderSlot(l.$slots,"button-drop",{key:0,item:d.value,editMode:u.value,isCreate:t.isCreate,canUpdate:C.value,canDrop:y.value}):(e.openBlock(),e.createElementBlock("span",J,e.toDisplayString(t.dropText),1))]),_:3},8,["disabled","confirm-modal","resource","resource-data"])),[[e.vShow,!o.value&&u.value&&i.value]]),e.withDirectives(e.createVNode(S,{ref:f=>v.value=f,palette:"success",disabled:!V.value,"confirm-modal":W.value,resource:L.value,"resource-data":X.value,onLoading:w,onLoaded:_,onClick:te},{default:e.withCtx(()=>[e.unref(B)["button-save"]?e.renderSlot(l.$slots,"button-save",{key:0,item:d.value,editMode:u.value,isCreate:t.isCreate,canUpdate:C.value,canDrop:y.value}):(e.openBlock(),e.createElementBlock("span",A,e.toDisplayString(t.saveText),1))]),_:3},8,["disabled","confirm-modal","resource","resource-data"]),[[e.vShow,!o.value&&u.value&&i.value]]),e.withDirectives(e.createVNode(ae,{modelValue:u.value,"onUpdate:modelValue":r[0]||(r[0]=f=>u.value=f),label:t.editModeText},null,8,["modelValue","label"]),[[e.vShow,!o.value&&i.value&&!t.isCreate]])],512),[[e.vShow,i.value]]),o.value?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",F,[i.value?(e.openBlock(),e.createElementBlock("div",P,[c.value?(e.openBlock(),e.createBlock(q,{key:0,code:s.value,quick:"",palette:s.value===200?"success":"danger","can-close":"",onClose:r[1]||(r[1]=f=>c.value=!1)},null,8,["code","palette"])):e.createCommentVNode("",!0),e.renderSlot(l.$slots,"item",{item:d.value,loading:o.value,editMode:u.value,isCreate:t.isCreate,canUpdate:C.value,canDrop:y.value})])):(e.openBlock(),e.createBlock(q,{key:1,code:s.value},null,8,["code"]))])),o.value?(e.openBlock(),e.createBlock(le,{key:2})):e.createCommentVNode("",!0)])}}}),oe="";return{install:(t,g={})=>{t.component("lkt-item-crud")===void 0&&t.component("lkt-item-crud",G),t.component("lkt-button")===void 0&&t.use(E.default),t.component("lkt-http-info")===void 0&&t.use(T.default),t.component("lkt-loader")===void 0&&t.use(x.default)}}});
1
+ (function(e,p){typeof exports=="object"&&typeof module<"u"?module.exports=p(require("vue"),require("lkt-http-client"),require("lkt-data-state"),require("lkt-button"),require("lkt-http-info"),require("lkt-loader")):typeof define=="function"&&define.amd?define(["vue","lkt-http-client","lkt-data-state","lkt-button","lkt-http-info","lkt-loader"],p):(e=typeof globalThis<"u"?globalThis:e||self,e.LktItemCrud=p(e.Vue,e.LktHttpClient,e.LktDataState,e.LktButton,e.LktHttpInfo,e.LktLoader))})(this,function(e,p,O,E,T,x){"use strict";const B=a=>a&&typeof a=="object"&&"default"in a?a:{default:a},M=B(E),j=B(T),$=B(x),U={class:"lkt-item-crud"},H={key:0,class:"lkt-item-crud_header"},J={class:"lkt-item-crud_header-title"},A={class:"lkt-item-crud_header-slot"},F={key:1,class:"lkt-item-crud-buttons"},P={key:1},z={key:1},G={key:2,class:"lkt-item-crud_content"},K={key:0,class:"lkt-grid-1"},Q={name:"LktItemCrud",inheritAttrs:!1},W=e.defineComponent({...Q,props:{modelValue:{type:Object,required:!1,default:()=>({})},title:{type:String,default:""},editModeText:{type:String,default:"Edition Mode"},saveText:{type:String,default:"Save"},dropText:{type:String,default:"Delete"},hiddenSave:{type:Boolean,default:!1},hiddenDrop:{type:Boolean,default:!1},hiddenButtons:{type:Boolean,default:!1},readResource:{type:String,required:!1},createResource:{type:String,required:!1},updateResource:{type:String,required:!1},dropResource:{type:String,required:!1},readData:{type:Object,required:!1,default:()=>({})},createData:{type:Object,required:!1,default:()=>({})},updateData:{type:Object,required:!1,default:()=>({})},dropData:{type:Object,required:!1,default:()=>({})},isCreate:{type:Boolean,default:!1},createConfirm:{type:String,default:""},updateConfirm:{type:String,default:""},dropConfirm:{type:String,default:""},createDisabled:{type:Boolean,default:!1},updateDisabled:{type:Boolean,default:!1},dropDisabled:{type:Boolean,default:!1},saveValidator:{type:Function,required:!1,default:()=>!0}},emits:["update:modelValue","read","create","update","drop","perms","error","modified-data"],setup(a,{expose:g,emit:X}){const t=a,D=e.useSlots(),d=X;let Y=[];const o=e.ref(!0),n=e.ref(t.modelValue),m=e.ref(Y),u=e.ref(!1),i=e.ref(!1),c=e.ref(!1),s=e.ref(200),h=e.ref(null),v=e.ref(null),k=e.ref(new O.DataState(n.value)),Z=e.computed(()=>t.isCreate?t.createConfirm:t.updateConfirm),w=e.computed(()=>t.isCreate?t.createResource:t.updateResource),ee=e.computed(()=>t.isCreate?{...t.createData,...JSON.parse(JSON.stringify(n.value))}:{...t.updateData,...JSON.parse(JSON.stringify(n.value))}),te=e.computed(()=>t.isCreate?t.createDisabled:t.updateDisabled),y=e.computed(()=>!t.isCreate&&m.value.includes("update")),C=e.computed(()=>!t.isCreate&&m.value.includes("drop")),b=async()=>{o.value=!0,s.value=-1,c.value=!1;try{const l=await p.httpCall(t.readResource,t.readData);if(o.value=!1,s.value=l.httpStatus,!l.success){i.value=!1,s.value=l.httpStatus,d("error",l.httpStatus);return}i.value=!0,n.value=l.data,m.value=l.perms,k.value.increment(n.value).turnStoredIntoOriginal(),d("read",l)}catch{o.value=!1,i.value=!1,s.value=404,d("error",404);return}},ae=e.computed(()=>o.value?!1:t.title||!!D["post-title"]);e.watch(()=>t.modelValue,l=>{n.value=l,k.value.increment(l)},{deep:!0}),e.watch(n,l=>{d("update:modelValue",n.value),k.value.increment(l)},{deep:!0}),e.watch(m,()=>d("perms",m.value));const L=e.computed(()=>te.value||!t.isCreate&&!y.value||typeof t.saveValidator=="function"&&!t.saveValidator(n.value)?!1:k.value.changed());e.watch(L,l=>d("modified-data",l)),t.readResource&&!t.isCreate?b():t.isCreate&&(i.value=!0,u.value=!0,o.value=!1);const le=(l,r)=>{if(o.value=!1,s.value=r.httpStatus,!r.success){c.value=!0,d("error",r.httpStatus);return}c.value=!0,d("drop",r)},oe=(l,r)=>{if(w.value){if(o.value=!1,s.value=r.httpStatus,!r.success){c.value=!0,d("error",r.httpStatus);return}c.value=!0}let S=t.isCreate?"create":"update";t.isCreate||k.value.turnStoredIntoOriginal(),r.autoReloadId&&(t.readData.id=r.autoReloadId,b()),d(S,r)},V=()=>{o.value=!0,s.value=-1},_=()=>{o.value=!1};g({doDrop:()=>{v.value&&typeof v.value.click=="function"&&v.value.click()},doRefresh:b,doSave:()=>{h.value&&typeof h.value.click=="function"&&h.value.click()}});const q=e.computed(()=>!t.hiddenDrop&&!o.value&&u.value&&i.value),N=e.computed(()=>!t.hiddenSave&&!o.value&&u.value&&i.value),R=e.computed(()=>!o.value&&!t.isCreate&&i.value),re=e.computed(()=>!t.hiddenButtons&&(N.value||q.value||R.value));return(l,r)=>{const S=e.resolveComponent("lkt-button"),ne=e.resolveComponent("lkt-field-switch"),I=e.resolveComponent("lkt-http-info"),de=e.resolveComponent("lkt-loader");return e.openBlock(),e.createElementBlock("article",U,[ae.value?(e.openBlock(),e.createElementBlock("header",H,[e.createElementVNode("h1",J,e.toDisplayString(a.title),1),e.createElementVNode("div",A,[e.renderSlot(l.$slots,"post-title",{item:n.value,loading:o.value})])])):e.createCommentVNode("",!0),re.value?(e.openBlock(),e.createElementBlock("div",F,[a.isCreate?e.createCommentVNode("",!0):e.withDirectives((e.openBlock(),e.createBlock(S,{key:0,ref:f=>v.value=f,palette:"danger",disabled:a.dropDisabled||!C.value,"confirm-modal":a.dropConfirm,resource:a.dropResource,"resource-data":a.dropData,onLoading:V,onLoaded:_,onClick:le},{default:e.withCtx(()=>[e.unref(D)["button-drop"]?e.renderSlot(l.$slots,"button-drop",{key:0,item:n.value,editMode:u.value,isCreate:a.isCreate,canUpdate:y.value,canDrop:C.value}):(e.openBlock(),e.createElementBlock("span",P,e.toDisplayString(a.dropText),1))]),_:3},8,["disabled","confirm-modal","resource","resource-data"])),[[e.vShow,q.value]]),e.withDirectives(e.createVNode(S,{ref:f=>h.value=f,palette:"success",disabled:!L.value,"confirm-modal":Z.value,resource:w.value,"resource-data":ee.value,onLoading:V,onLoaded:_,onClick:oe},{default:e.withCtx(()=>[e.unref(D)["button-save"]?e.renderSlot(l.$slots,"button-save",{key:0,item:n.value,editMode:u.value,isCreate:a.isCreate,canUpdate:y.value,canDrop:C.value}):(e.openBlock(),e.createElementBlock("span",z,e.toDisplayString(a.saveText),1))]),_:3},8,["disabled","confirm-modal","resource","resource-data"]),[[e.vShow,N.value]]),e.withDirectives(e.createVNode(ne,{modelValue:u.value,"onUpdate:modelValue":r[0]||(r[0]=f=>u.value=f),label:a.editModeText},null,8,["modelValue","label"]),[[e.vShow,R.value]])])):e.createCommentVNode("",!0),o.value?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",G,[i.value?(e.openBlock(),e.createElementBlock("div",K,[c.value?(e.openBlock(),e.createBlock(I,{key:0,code:s.value,quick:"",palette:s.value===200?"success":"danger","can-close":"",onClose:r[1]||(r[1]=f=>c.value=!1)},null,8,["code","palette"])):e.createCommentVNode("",!0),e.renderSlot(l.$slots,"item",{item:n.value,loading:o.value,editMode:u.value,isCreate:a.isCreate,canUpdate:y.value,canDrop:C.value})])):(e.openBlock(),e.createBlock(I,{key:1,code:s.value},null,8,["code"]))])),o.value?(e.openBlock(),e.createBlock(de,{key:3})):e.createCommentVNode("",!0)])}}}),se="";return{install:(a,g={})=>{a.component("lkt-item-crud")===void 0&&a.component("lkt-item-crud",W),a.component("lkt-button")===void 0&&a.use(M.default),a.component("lkt-http-info")===void 0&&a.use(j.default),a.component("lkt-loader")===void 0&&a.use($.default)}}});
package/dist/style.css CHANGED
@@ -1 +1 @@
1
- .lkt-item-crud,.lkt-item-crud_content{display:flex;flex-direction:column;gap:15px}.lkt-item-crud-buttons{position:sticky;top:calc(-1 * var(--gap));display:flex;align-items:center;gap:var(--gap);transition:all linear .15s;background:#ffffff;z-index:2;padding:var(--gap) 0}.lkt-item-crud-buttons>:last-child{margin-left:auto}
1
+ .lkt-item-crud{display:flex;flex-direction:column;gap:var(--gap)}.lkt-item-crud_content{display:flex;flex-direction:column;gap:15px}.lkt-item-crud-buttons{position:sticky;top:calc(-1 * var(--gap));display:flex;align-items:center;gap:var(--gap);transition:all linear .15s;background:#ffffff;z-index:2}.lkt-item-crud-buttons>:last-child{margin-left:auto}
@@ -21,6 +21,18 @@ declare const _default: {
21
21
  type: StringConstructor;
22
22
  default: string;
23
23
  };
24
+ hiddenSave: {
25
+ type: BooleanConstructor;
26
+ default: boolean;
27
+ };
28
+ hiddenDrop: {
29
+ type: BooleanConstructor;
30
+ default: boolean;
31
+ };
32
+ hiddenButtons: {
33
+ type: BooleanConstructor;
34
+ default: boolean;
35
+ };
24
36
  readResource: {
25
37
  type: StringConstructor;
26
38
  required: false;
@@ -125,6 +137,18 @@ declare const _default: {
125
137
  type: StringConstructor;
126
138
  default: string;
127
139
  };
140
+ hiddenSave: {
141
+ type: BooleanConstructor;
142
+ default: boolean;
143
+ };
144
+ hiddenDrop: {
145
+ type: BooleanConstructor;
146
+ default: boolean;
147
+ };
148
+ hiddenButtons: {
149
+ type: BooleanConstructor;
150
+ default: boolean;
151
+ };
128
152
  readResource: {
129
153
  type: StringConstructor;
130
154
  required: false;
@@ -209,6 +233,9 @@ declare const _default: {
209
233
  editModeText: string;
210
234
  saveText: string;
211
235
  dropText: string;
236
+ hiddenSave: boolean;
237
+ hiddenDrop: boolean;
238
+ hiddenButtons: boolean;
212
239
  readData: Record<string, any>;
213
240
  createData: Record<string, any>;
214
241
  updateData: Record<string, any>;
@@ -250,6 +277,18 @@ declare const _default: {
250
277
  type: StringConstructor;
251
278
  default: string;
252
279
  };
280
+ hiddenSave: {
281
+ type: BooleanConstructor;
282
+ default: boolean;
283
+ };
284
+ hiddenDrop: {
285
+ type: BooleanConstructor;
286
+ default: boolean;
287
+ };
288
+ hiddenButtons: {
289
+ type: BooleanConstructor;
290
+ default: boolean;
291
+ };
253
292
  readResource: {
254
293
  type: StringConstructor;
255
294
  required: false;
@@ -338,6 +377,9 @@ declare const _default: {
338
377
  editModeText: string;
339
378
  saveText: string;
340
379
  dropText: string;
380
+ hiddenSave: boolean;
381
+ hiddenDrop: boolean;
382
+ hiddenButtons: boolean;
341
383
  readData: Record<string, any>;
342
384
  createData: Record<string, any>;
343
385
  updateData: Record<string, any>;
@@ -376,6 +418,18 @@ declare const _default: {
376
418
  type: StringConstructor;
377
419
  default: string;
378
420
  };
421
+ hiddenSave: {
422
+ type: BooleanConstructor;
423
+ default: boolean;
424
+ };
425
+ hiddenDrop: {
426
+ type: BooleanConstructor;
427
+ default: boolean;
428
+ };
429
+ hiddenButtons: {
430
+ type: BooleanConstructor;
431
+ default: boolean;
432
+ };
379
433
  readResource: {
380
434
  type: StringConstructor;
381
435
  required: false;
@@ -464,6 +518,9 @@ declare const _default: {
464
518
  editModeText: string;
465
519
  saveText: string;
466
520
  dropText: string;
521
+ hiddenSave: boolean;
522
+ hiddenDrop: boolean;
523
+ hiddenButtons: boolean;
467
524
  readData: Record<string, any>;
468
525
  createData: Record<string, any>;
469
526
  updateData: Record<string, any>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lkt-item-crud",
3
- "version": "1.0.9",
3
+ "version": "1.0.10",
4
4
  "description": "",
5
5
  "main": "src/index.ts",
6
6
  "module": "src/index.ts",
@@ -14,6 +14,9 @@ const props = defineProps({
14
14
  editModeText: {type: String, default: 'Edition Mode'},
15
15
  saveText: {type: String, default: 'Save'},
16
16
  dropText: {type: String, default: 'Delete'},
17
+ hiddenSave: {type: Boolean, default: false},
18
+ hiddenDrop: {type: Boolean, default: false},
19
+ hiddenButtons: {type: Boolean, default: false},
17
20
 
18
21
  readResource: {type: String, required: false},
19
22
  createResource: {type: String, required: false},
@@ -198,6 +201,27 @@ defineExpose({
198
201
  doRefresh: fetchItem,
199
202
  doSave
200
203
  });
204
+
205
+ const showDropButton = computed(() => {
206
+ return !props.hiddenDrop
207
+ && !isLoading.value
208
+ && editMode.value
209
+ && httpSuccessRead.value;
210
+ }),
211
+ showSaveButton = computed(() => {
212
+ return !props.hiddenSave
213
+ && !isLoading.value
214
+ && editMode.value
215
+ && httpSuccessRead.value;
216
+ }),
217
+ showSwitchButton = computed(() => {
218
+ return !isLoading.value
219
+ && !props.isCreate
220
+ && httpSuccessRead.value;
221
+ }),
222
+ showButtons = computed(() => {
223
+ return !props.hiddenButtons && (showSaveButton.value || showDropButton.value || showSwitchButton.value);
224
+ })
201
225
  </script>
202
226
 
203
227
  <template>
@@ -208,10 +232,10 @@ defineExpose({
208
232
  <slot name="post-title" v-bind:item="item" v-bind:loading="isLoading"></slot>
209
233
  </div>
210
234
  </header>
211
- <div class="lkt-item-crud-buttons" v-show="httpSuccessRead">
235
+ <div class="lkt-item-crud-buttons" v-if="showButtons">
212
236
  <lkt-button
213
237
  :ref="(el:any) => dropButton = el"
214
- v-show="!isLoading && editMode && httpSuccessRead"
238
+ v-show="showDropButton"
215
239
  v-if="!isCreate"
216
240
  palette="danger"
217
241
  v-bind:disabled="dropDisabled || !canDrop"
@@ -223,15 +247,15 @@ defineExpose({
223
247
  v-on:click="onDrop">
224
248
  <slot v-if="!!slots['button-drop']" name="button-drop" v-bind:item="item"
225
249
  v-bind:edit-mode="editMode"
226
- v-bind:is-create="isCreate"
227
- v-bind:can-update="canUpdate"
228
- v-bind:can-drop="canDrop"></slot>
250
+ v-bind:is-create="isCreate"
251
+ v-bind:can-update="canUpdate"
252
+ v-bind:can-drop="canDrop"></slot>
229
253
  <span v-else>{{ dropText }}</span>
230
254
  </lkt-button>
231
255
 
232
256
  <lkt-button
233
257
  :ref="(el:any) => saveButton = el"
234
- v-show="!isLoading && editMode && httpSuccessRead"
258
+ v-show="showSaveButton"
235
259
  palette="success"
236
260
  v-bind:disabled="!ableToSave"
237
261
  v-bind:confirm-modal="saveConfirm"
@@ -242,14 +266,14 @@ defineExpose({
242
266
  v-on:click="onSave">
243
267
  <slot v-if="!!slots['button-save']" name="button-save" v-bind:item="item"
244
268
  v-bind:edit-mode="editMode"
245
- v-bind:is-create="isCreate"
246
- v-bind:can-update="canUpdate"
247
- v-bind:can-drop="canDrop"></slot>
269
+ v-bind:is-create="isCreate"
270
+ v-bind:can-update="canUpdate"
271
+ v-bind:can-drop="canDrop"></slot>
248
272
  <span v-else>{{ saveText }}</span>
249
273
  </lkt-button>
250
274
 
251
275
  <lkt-field-switch
252
- v-show="!isLoading && httpSuccessRead && !isCreate" v-model="editMode"
276
+ v-show="showSwitchButton" v-model="editMode"
253
277
  :label="editModeText"></lkt-field-switch>
254
278
  </div>
255
279
  <div class="lkt-item-crud_content" v-if="!isLoading">
@@ -258,9 +282,9 @@ defineExpose({
258
282
  :palette="httpStatus === 200 ? 'success' : 'danger'" can-close
259
283
  v-on:close="showStoreMessage = false"></lkt-http-info>
260
284
  <slot name="item" v-bind:item="item" v-bind:loading="isLoading" v-bind:edit-mode="editMode"
261
- v-bind:is-create="isCreate"
262
- v-bind:can-update="canUpdate"
263
- v-bind:can-drop="canDrop"></slot>
285
+ v-bind:is-create="isCreate"
286
+ v-bind:can-update="canUpdate"
287
+ v-bind:can-drop="canDrop"></slot>
264
288
  </div>
265
289
  <lkt-http-info :code="httpStatus" v-else></lkt-http-info>
266
290
  </div>