@isi-ui7/bos7-shared 0.3.2 → 0.3.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/form-types.d.ts +43 -0
- package/dist/{index-1k-PSj-b.js → index-DV8lJjii.js} +71 -71
- package/dist/{index.es-zuTIhIvp.js → index.es-DqL2wDqB.js} +2 -2
- package/dist/index.js +1 -1
- package/dist/{jspdf.es.min-CnDMxfNp.js → jspdf.es.min-iZWDIC-k.js} +2 -2
- package/dist/{jspdf.plugin.autotable-DcntYaes.js → jspdf.plugin.autotable-DFaknRns.js} +19 -22
- package/dist/purify.es-Cm3utOpm.js +560 -0
- package/package.json +2 -1
- package/src/form-renderer.tsx +9 -0
- package/src/form-section-render.test.tsx +96 -0
- package/src/form-types.ts +45 -1
- package/src/wizard-step-gate.test.ts +65 -0
- package/src/workflow/use-crud-form-gate.test.tsx +138 -0
- package/src/workflow/use-crud-form.ts +13 -0
- package/dist/purify.es-CiEWEeUM.js +0 -605
package/dist/form-types.d.ts
CHANGED
|
@@ -145,6 +145,26 @@ export type FormSection<TData extends Record<string, unknown>> = {
|
|
|
145
145
|
/** Number of equal columns in the section grid. Default 1. */
|
|
146
146
|
columns?: 1 | 2 | 3;
|
|
147
147
|
fields: FormField<TData>[];
|
|
148
|
+
/**
|
|
149
|
+
* Jalan keluar: render konten sendiri MENGGANTIKAN grid `fields`.
|
|
150
|
+
*
|
|
151
|
+
* Ada untuk panel yang harus MEMBACA dan MENULIS state form sekaligus, yang
|
|
152
|
+
* tidak bisa dinyatakan sebagai field — mis. panel "Cek Identitas" pada
|
|
153
|
+
* registrasi nasabah, yang memanggil backend lalu menyetel penanda hasilnya
|
|
154
|
+
* agar gerbang `canLeavePage` bisa membacanya.
|
|
155
|
+
*
|
|
156
|
+
* `description` sudah ReactNode, tapi ia tidak punya akses ke `value` maupun
|
|
157
|
+
* cara menulis balik — jadi tidak cukup untuk keperluan ini.
|
|
158
|
+
*
|
|
159
|
+
* Opsional: section tanpa `render` dirender persis seperti sebelumnya.
|
|
160
|
+
* `fields` tetap wajib (pakai `[]`) supaya tipe section tidak bercabang dua.
|
|
161
|
+
*/
|
|
162
|
+
render?: (ctx: {
|
|
163
|
+
value: TData;
|
|
164
|
+
setValue: (patch: Partial<TData>) => void;
|
|
165
|
+
mode: FormMode;
|
|
166
|
+
disabled: boolean;
|
|
167
|
+
}) => ReactNode;
|
|
148
168
|
};
|
|
149
169
|
export type FormPageDef<TData extends Record<string, unknown>> = {
|
|
150
170
|
label: string;
|
|
@@ -162,6 +182,29 @@ export type FormLayout<TData extends Record<string, unknown>> = {
|
|
|
162
182
|
type: "wizard";
|
|
163
183
|
pages: FormPageDef<TData>[];
|
|
164
184
|
validateOnNext?: boolean;
|
|
185
|
+
/**
|
|
186
|
+
* Gerbang antar-langkah. Dipanggil SEBELUM pindah dari `fromPage`;
|
|
187
|
+
* mengembalikan `{ ok: false, message }` membatalkan navigasi dan
|
|
188
|
+
* menampilkan pesannya.
|
|
189
|
+
*
|
|
190
|
+
* Ada karena sebagian wizard punya langkah yang berfungsi sebagai
|
|
191
|
+
* GERBANG, bukan sekadar formulir — mis. registrasi nasabah: verifikasi
|
|
192
|
+
* identitas di Langkah 1 harus berhasil sebelum data lengkap boleh
|
|
193
|
+
* diisi, supaya dua CIF untuk satu orang tidak pernah terbentuk.
|
|
194
|
+
*
|
|
195
|
+
* Tanpa ini, satu-satunya cara menegakkannya adalah membangun wizard
|
|
196
|
+
* bespoke per layar — dan ada EMPAT layar registrasi (perorangan,
|
|
197
|
+
* badan usaha, WIC perorangan, WIC badan usaha) yang butuh gerbang yang
|
|
198
|
+
* sama persis.
|
|
199
|
+
*
|
|
200
|
+
* ⚠️ Ini penjaga NAVIGASI, bukan penjaga keamanan. Ia mencegah operator
|
|
201
|
+
* melangkah lebih jauh; ia TIDAK mencegah payload dikirim langsung ke
|
|
202
|
+
* backend. Aturan yang sama WAJIB ditegakkan lagi di server.
|
|
203
|
+
*/
|
|
204
|
+
canLeavePage?: (fromPage: number, data: TData) => {
|
|
205
|
+
ok: boolean;
|
|
206
|
+
message?: string;
|
|
207
|
+
};
|
|
165
208
|
};
|
|
166
209
|
export type CrudForm<TData extends Record<string, unknown>> = {
|
|
167
210
|
title: {
|
|
@@ -27391,7 +27391,7 @@ function ba(M, L) {
|
|
|
27391
27391
|
return String(pr(M, L));
|
|
27392
27392
|
}
|
|
27393
27393
|
async function Io(M, L, r) {
|
|
27394
|
-
const { default: x } = await import("./jspdf.es.min-
|
|
27394
|
+
const { default: x } = await import("./jspdf.es.min-iZWDIC-k.js").then((o) => o.j), { default: w } = await import("./jspdf.plugin.autotable-DFaknRns.js"), c = new x({ orientation: "landscape" });
|
|
27395
27395
|
c.setFontSize(14), c.text(r, 14, 15), c.setFontSize(10), w(c, {
|
|
27396
27396
|
head: [L.map((o) => o.title)],
|
|
27397
27397
|
body: M.map((o) => L.map((a) => ba(o[a.field], a.displayFormat))),
|
|
@@ -28689,77 +28689,77 @@ async function rl(M, L) {
|
|
|
28689
28689
|
return o.columnTypes = { ...a, ...L.extraColumnTypes }, Dt.NextResponse.json(o, { status: c.status });
|
|
28690
28690
|
}
|
|
28691
28691
|
export {
|
|
28692
|
-
|
|
28693
|
-
|
|
28694
|
-
|
|
28695
|
-
|
|
28696
|
-
|
|
28697
|
-
|
|
28698
|
-
|
|
28699
|
-
|
|
28700
|
-
|
|
28701
|
-
|
|
28702
|
-
|
|
28703
|
-
|
|
28704
|
-
|
|
28705
|
-
|
|
28706
|
-
|
|
28692
|
+
Wi as $,
|
|
28693
|
+
vo as A,
|
|
28694
|
+
Lo as B,
|
|
28695
|
+
Vo as C,
|
|
28696
|
+
wi as D,
|
|
28697
|
+
io as E,
|
|
28698
|
+
Jr as F,
|
|
28699
|
+
Oo as G,
|
|
28700
|
+
Io as H,
|
|
28701
|
+
jo as I,
|
|
28702
|
+
Bo as J,
|
|
28703
|
+
uo as K,
|
|
28704
|
+
ho as L,
|
|
28705
|
+
dr as M,
|
|
28706
|
+
ga as N,
|
|
28707
28707
|
go as O,
|
|
28708
|
-
|
|
28709
|
-
|
|
28710
|
-
|
|
28711
|
-
|
|
28712
|
-
|
|
28713
|
-
|
|
28714
|
-
|
|
28715
|
-
|
|
28716
|
-
|
|
28717
|
-
|
|
28718
|
-
|
|
28719
|
-
|
|
28720
|
-
|
|
28721
|
-
|
|
28722
|
-
|
|
28723
|
-
|
|
28724
|
-
|
|
28725
|
-
|
|
28726
|
-
|
|
28727
|
-
|
|
28728
|
-
|
|
28729
|
-
|
|
28730
|
-
|
|
28731
|
-
|
|
28732
|
-
|
|
28733
|
-
|
|
28734
|
-
|
|
28735
|
-
|
|
28736
|
-
|
|
28737
|
-
|
|
28738
|
-
|
|
28739
|
-
|
|
28740
|
-
|
|
28708
|
+
ko as P,
|
|
28709
|
+
qo as Q,
|
|
28710
|
+
xa as R,
|
|
28711
|
+
Sa as S,
|
|
28712
|
+
ao as T,
|
|
28713
|
+
Wo as U,
|
|
28714
|
+
Ko as V,
|
|
28715
|
+
Go as W,
|
|
28716
|
+
Yo as X,
|
|
28717
|
+
Zo as Y,
|
|
28718
|
+
xo as Z,
|
|
28719
|
+
Do as _,
|
|
28720
|
+
Xo as a,
|
|
28721
|
+
_a as a0,
|
|
28722
|
+
Uo as a1,
|
|
28723
|
+
wa as a2,
|
|
28724
|
+
Qa as a3,
|
|
28725
|
+
rl as a4,
|
|
28726
|
+
Po as a5,
|
|
28727
|
+
$i as a6,
|
|
28728
|
+
_o as a7,
|
|
28729
|
+
Ho as a8,
|
|
28730
|
+
so as a9,
|
|
28731
|
+
Jo as aa,
|
|
28732
|
+
wo as ab,
|
|
28733
|
+
lo as ac,
|
|
28734
|
+
qi as ad,
|
|
28735
|
+
Fi as ae,
|
|
28736
|
+
En as af,
|
|
28737
|
+
tl as ag,
|
|
28738
|
+
Fo as ah,
|
|
28739
|
+
fo as ai,
|
|
28740
|
+
Bi as b,
|
|
28741
28741
|
Ze as c,
|
|
28742
|
-
|
|
28743
|
-
|
|
28744
|
-
|
|
28742
|
+
yo as d,
|
|
28743
|
+
To as e,
|
|
28744
|
+
Eo as f,
|
|
28745
28745
|
Qi as g,
|
|
28746
|
-
|
|
28747
|
-
|
|
28748
|
-
|
|
28749
|
-
|
|
28750
|
-
|
|
28751
|
-
|
|
28752
|
-
|
|
28753
|
-
|
|
28754
|
-
|
|
28755
|
-
|
|
28756
|
-
|
|
28757
|
-
|
|
28758
|
-
|
|
28759
|
-
|
|
28760
|
-
|
|
28761
|
-
|
|
28762
|
-
|
|
28763
|
-
|
|
28764
|
-
|
|
28746
|
+
So as h,
|
|
28747
|
+
Bt as i,
|
|
28748
|
+
$o as j,
|
|
28749
|
+
zo as k,
|
|
28750
|
+
Qo as l,
|
|
28751
|
+
Mo as m,
|
|
28752
|
+
Ao as n,
|
|
28753
|
+
Co as o,
|
|
28754
|
+
Ro as p,
|
|
28755
|
+
no as q,
|
|
28756
|
+
el as r,
|
|
28757
|
+
Za as s,
|
|
28758
|
+
No as t,
|
|
28759
|
+
mo as u,
|
|
28760
|
+
co as v,
|
|
28761
|
+
po as w,
|
|
28762
|
+
oo as x,
|
|
28763
|
+
ya as y,
|
|
28764
|
+
bo as z
|
|
28765
28765
|
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { c as Ke, g as Do } from "./index-
|
|
2
|
-
import { _ as Xa } from "./jspdf.es.min-
|
|
1
|
+
import { c as Ke, g as Do } from "./index-DV8lJjii.js";
|
|
2
|
+
import { _ as Xa } from "./jspdf.es.min-iZWDIC-k.js";
|
|
3
3
|
var vt = function(a) {
|
|
4
4
|
return a && a.Math === Math && a;
|
|
5
5
|
}, _ = (
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { A as s, a as o, b as t, D as r, N as i, O as n, d as l, P as c, e as d, f as u, h as S, U as h, i as A, j as T, k, l as C, m as _, n as O, o as U, p as g, q as N, r as P, s as m, t as E, u as F, v as p, w as f, x as I, y as R, z as x, B as v, C as y, E as L, F as b, G as B, H as D, I as M, J as H, K as V, L as W, M as q, Q as K, R as w, S as z, T as G, V as Q, W as X, X as Y, Y as j, Z as J, _ as Z, $, a0 as aa, a1 as ea, a2 as sa, a3 as oa, a4 as ta, a5 as ra, a6 as ia, a7 as na, a8 as la, a9 as ca, aa as da, ab as ua, ac as Sa, ad as ha, ae as Aa, af as Ta, ag as ka, ah as Ca, ai as _a } from "./index-DV8lJjii.js";
|
|
2
2
|
export {
|
|
3
3
|
s as AUTH7_SCOPES,
|
|
4
4
|
o as AppShellLayout,
|
|
@@ -8506,7 +8506,7 @@ function(n) {
|
|
|
8506
8506
|
});
|
|
8507
8507
|
}
|
|
8508
8508
|
function t() {
|
|
8509
|
-
return (Kt.DOMPurify ? Promise.resolve(Kt.DOMPurify) : import("./purify.es-
|
|
8509
|
+
return (Kt.DOMPurify ? Promise.resolve(Kt.DOMPurify) : import("./purify.es-Cm3utOpm.js")).catch(function(l) {
|
|
8510
8510
|
return Promise.reject(new Error("Could not load dompurify: " + l));
|
|
8511
8511
|
}).then(function(l) {
|
|
8512
8512
|
return l.default ? l.default : l;
|
|
@@ -9216,7 +9216,7 @@ function(n) {
|
|
|
9216
9216
|
var d = h.getContext("2d");
|
|
9217
9217
|
d.fillStyle = "#fff", d.fillRect(0, 0, h.width, h.height);
|
|
9218
9218
|
var m = { ignoreMouse: !0, ignoreAnimation: !0, ignoreDimensions: !0 }, _ = this;
|
|
9219
|
-
return (Kt.canvg ? Promise.resolve(Kt.canvg) : import("./index.es-
|
|
9219
|
+
return (Kt.canvg ? Promise.resolve(Kt.canvg) : import("./index.es-DqL2wDqB.js")).catch(function(k) {
|
|
9220
9220
|
return Promise.reject(new Error("Could not load canvg: " + k));
|
|
9221
9221
|
}).then(function(k) {
|
|
9222
9222
|
return k.default ? k.default : k;
|
|
@@ -256,8 +256,8 @@ function ot(e, t, r, i, n) {
|
|
|
256
256
|
isNaN(p) || (a.fontSize = p / s);
|
|
257
257
|
var y = st(i);
|
|
258
258
|
y && (a.fontStyle = y);
|
|
259
|
-
var
|
|
260
|
-
return e.indexOf(
|
|
259
|
+
var x = (i.fontFamily || "").toLowerCase();
|
|
260
|
+
return e.indexOf(x) !== -1 && (a.font = x), a;
|
|
261
261
|
}
|
|
262
262
|
function st(e) {
|
|
263
263
|
var t = "";
|
|
@@ -398,10 +398,10 @@ function dt(e, t) {
|
|
|
398
398
|
t.showFoot === !0 ? p = "everyPage" : t.showFoot === !1 ? p = "never" : p = (i = t.showFoot) !== null && i !== void 0 ? i : "everyPage";
|
|
399
399
|
var y;
|
|
400
400
|
t.showHead === !0 ? y = "everyPage" : t.showHead === !1 ? y = "never" : y = (n = t.showHead) !== null && n !== void 0 ? n : "everyPage";
|
|
401
|
-
var
|
|
401
|
+
var x = (a = t.useCss) !== null && a !== void 0 ? a : !1, c = t.theme || (x ? "plain" : "striped"), C = !!t.horizontalPageBreak, rt = (s = t.horizontalPageBreakRepeat) !== null && s !== void 0 ? s : null;
|
|
402
402
|
return {
|
|
403
403
|
includeHiddenHtml: (h = t.includeHiddenHtml) !== null && h !== void 0 ? h : !1,
|
|
404
|
-
useCss:
|
|
404
|
+
useCss: x,
|
|
405
405
|
theme: c,
|
|
406
406
|
startY: m,
|
|
407
407
|
margin: d,
|
|
@@ -412,7 +412,7 @@ function dt(e, t) {
|
|
|
412
412
|
showFoot: p,
|
|
413
413
|
tableLineWidth: (g = t.tableLineWidth) !== null && g !== void 0 ? g : 0,
|
|
414
414
|
tableLineColor: (u = t.tableLineColor) !== null && u !== void 0 ? u : 200,
|
|
415
|
-
horizontalPageBreak:
|
|
415
|
+
horizontalPageBreak: C,
|
|
416
416
|
horizontalPageBreakRepeat: rt,
|
|
417
417
|
horizontalPageBreakBehaviour: (v = t.horizontalPageBreakBehaviour) !== null && v !== void 0 ? v : "afterAllRows"
|
|
418
418
|
};
|
|
@@ -604,8 +604,8 @@ var A = (
|
|
|
604
604
|
}, e;
|
|
605
605
|
}()
|
|
606
606
|
);
|
|
607
|
-
function
|
|
608
|
-
|
|
607
|
+
function xt(e, t) {
|
|
608
|
+
Ct(e, t);
|
|
609
609
|
var r = [], i = 0;
|
|
610
610
|
t.columns.forEach(function(a) {
|
|
611
611
|
var s = a.getMaxCustomCellWidth(t);
|
|
@@ -618,7 +618,7 @@ function Ct(e, t) {
|
|
|
618
618
|
return a.minWidth;
|
|
619
619
|
})), n = Math.abs(n), !t.settings.horizontalPageBreak && n > 0.1 / e.scaleFactor() && (n = n < 1 ? n : Math.round(n), console.log("Of the table content, ".concat(n, " units width could not fit page"))), Ht(t), Dt(t, e), Pt(t);
|
|
620
620
|
}
|
|
621
|
-
function
|
|
621
|
+
function Ct(e, t) {
|
|
622
622
|
var r = e.scaleFactor(), i = t.settings.horizontalPageBreak, n = U(e, t);
|
|
623
623
|
t.allRows().forEach(function(a) {
|
|
624
624
|
for (var s = 0, h = t.columns; s < h.length; s++) {
|
|
@@ -747,7 +747,7 @@ function Wt(e, t, r, i, n) {
|
|
|
747
747
|
}
|
|
748
748
|
function V(e, t) {
|
|
749
749
|
var r = new P(e), i = Ft(t, r.scaleFactor()), n = new wt(t, i);
|
|
750
|
-
return
|
|
750
|
+
return xt(r, n), r.applyStyles(r.userStyles), n;
|
|
751
751
|
}
|
|
752
752
|
function Ft(e, t) {
|
|
753
753
|
var r = e.content, i = kt(r.columns);
|
|
@@ -775,11 +775,11 @@ function k(e, t, r, i, n, a) {
|
|
|
775
775
|
if (v === 0) {
|
|
776
776
|
var y = void 0;
|
|
777
777
|
Array.isArray(f) ? y = f[p.index - u - l] : y = f[p.dataKey];
|
|
778
|
-
var
|
|
779
|
-
typeof y == "object" && !Array.isArray(y) && (
|
|
780
|
-
var c = Rt(e, p, o, n, i, a,
|
|
781
|
-
g[p.dataKey] =
|
|
782
|
-
left:
|
|
778
|
+
var x = {};
|
|
779
|
+
typeof y == "object" && !Array.isArray(y) && (x = (y == null ? void 0 : y.styles) || {});
|
|
780
|
+
var c = Rt(e, p, o, n, i, a, x), C = new Z(y, c, e);
|
|
781
|
+
g[p.dataKey] = C, g[p.index] = C, v = C.colSpan - 1, s[p.index] = {
|
|
782
|
+
left: C.rowSpan - 1,
|
|
783
783
|
times: v
|
|
784
784
|
};
|
|
785
785
|
} else
|
|
@@ -908,14 +908,11 @@ function jt(e, t, r, i, n) {
|
|
|
908
908
|
}
|
|
909
909
|
function N(e, t, r, i, n, a) {
|
|
910
910
|
e.applyStyles(e.userStyles), a = a ?? t.body.length;
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
break;
|
|
917
|
-
}
|
|
918
|
-
return h;
|
|
911
|
+
var s = Math.min(r + a, t.body.length), h = -1;
|
|
912
|
+
return t.body.slice(r, s).forEach(function(f, o) {
|
|
913
|
+
var l = r + o === t.body.length - 1, g = et(e, t, l, i);
|
|
914
|
+
f.canEntireRowFit(g, n) && (S(e, t, f, i, n), h = r + o);
|
|
915
|
+
}), h;
|
|
919
916
|
}
|
|
920
917
|
function R(e, t, r, i) {
|
|
921
918
|
var n = t.settings;
|