unipo-ui 1.1.0 → 1.2.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/registry.json +30 -2
- package/dist/siakad.cjs +128 -0
- package/dist/siakad.cjs.map +1 -1
- package/dist/siakad.d.cts +74 -1
- package/dist/siakad.d.ts +74 -1
- package/dist/siakad.js +125 -2
- package/dist/siakad.js.map +1 -1
- package/package.json +2 -2
- package/src/siakad/berkas.tsx +203 -0
- package/src/siakad/index.ts +1 -0
package/dist/registry.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "1.
|
|
2
|
+
"version": "1.2.0",
|
|
3
3
|
"versions": {
|
|
4
4
|
"sass": "1.108.2",
|
|
5
5
|
"tsup": "8.5.1",
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
"@base-ui/react": "1.9.0",
|
|
15
15
|
"lucide-react": "1.73.0",
|
|
16
16
|
"country-flag-icons": "1.6.20",
|
|
17
|
-
"unipo-ui-tokens": "1.
|
|
17
|
+
"unipo-ui-tokens": "1.2.0"
|
|
18
18
|
},
|
|
19
19
|
"files": {
|
|
20
20
|
"components/actions.tsx": {
|
|
@@ -666,6 +666,26 @@
|
|
|
666
666
|
"unipo-siakad-sdk"
|
|
667
667
|
]
|
|
668
668
|
},
|
|
669
|
+
"siakad/berkas.tsx": {
|
|
670
|
+
"exports": [
|
|
671
|
+
"BerkasTerunggah",
|
|
672
|
+
"InfoBerkas",
|
|
673
|
+
"OpsiUnggahBerkas",
|
|
674
|
+
"useInfoBerkas",
|
|
675
|
+
"useUnggahBerkas",
|
|
676
|
+
"useUrlBerkas",
|
|
677
|
+
"UnggahBerkasProps",
|
|
678
|
+
"UnggahBerkas"
|
|
679
|
+
],
|
|
680
|
+
"local": [
|
|
681
|
+
"components/calendar.tsx",
|
|
682
|
+
"siakad/provider.tsx"
|
|
683
|
+
],
|
|
684
|
+
"npm": [
|
|
685
|
+
"react",
|
|
686
|
+
"unipo-siakad-sdk"
|
|
687
|
+
]
|
|
688
|
+
},
|
|
669
689
|
"siakad/cari.tsx": {
|
|
670
690
|
"exports": [
|
|
671
691
|
"CariProps",
|
|
@@ -1628,6 +1648,14 @@
|
|
|
1628
1648
|
"FormAplikasiProps": "siakad/aplikasi.tsx",
|
|
1629
1649
|
"FormAplikasi": "siakad/aplikasi.tsx",
|
|
1630
1650
|
"SheetUbahAplikasi": "siakad/aplikasi.tsx",
|
|
1651
|
+
"BerkasTerunggah": "siakad/berkas.tsx",
|
|
1652
|
+
"InfoBerkas": "siakad/berkas.tsx",
|
|
1653
|
+
"OpsiUnggahBerkas": "siakad/berkas.tsx",
|
|
1654
|
+
"useInfoBerkas": "siakad/berkas.tsx",
|
|
1655
|
+
"useUnggahBerkas": "siakad/berkas.tsx",
|
|
1656
|
+
"useUrlBerkas": "siakad/berkas.tsx",
|
|
1657
|
+
"UnggahBerkasProps": "siakad/berkas.tsx",
|
|
1658
|
+
"UnggahBerkas": "siakad/berkas.tsx",
|
|
1631
1659
|
"CariProps": "siakad/cari.tsx",
|
|
1632
1660
|
"MahasiswaOption": "siakad/cari.tsx",
|
|
1633
1661
|
"CariMahasiswaProps": "siakad/cari.tsx",
|
package/dist/siakad.cjs
CHANGED
|
@@ -7502,6 +7502,129 @@ function PilihEntitas({ jenis, value, defaultValue, onValueChange, query, load,
|
|
|
7502
7502
|
}
|
|
7503
7503
|
);
|
|
7504
7504
|
}
|
|
7505
|
+
var tunggu = (ms) => new Promise((r) => setTimeout(r, ms));
|
|
7506
|
+
async function unggahKeBerkas(siakad, info, file, opsi2 = {}, onProgress, signal) {
|
|
7507
|
+
const { paralel = 3, ...atribut } = opsi2;
|
|
7508
|
+
const attr = Object.fromEntries(Object.entries(atribut).filter(([, v]) => v !== void 0));
|
|
7509
|
+
if (file.size <= info.batas_sekali_unggah_byte) {
|
|
7510
|
+
onProgress?.(0);
|
|
7511
|
+
const r = await siakad.request({ method: "POST", path: "/v1/berkas", body: { berkas: file, ...attr }, multipart: true }, { signal, timeout: 3e5 });
|
|
7512
|
+
onProgress?.(100);
|
|
7513
|
+
return r.data;
|
|
7514
|
+
}
|
|
7515
|
+
const sesi = (await siakad.request({ method: "POST", path: "/v1/berkas/bertahap", body: { nama: file.name, ukuran: file.size, ...attr } }, { signal })).data;
|
|
7516
|
+
const { ukuran_potongan: ukuran, jumlah_potongan: jumlah } = sesi.sesi;
|
|
7517
|
+
const antre = Array.from({ length: jumlah }, (_, i) => i);
|
|
7518
|
+
let terkirim = 0;
|
|
7519
|
+
const kirim = async (ke) => {
|
|
7520
|
+
const bagian = file.slice(ke * ukuran, Math.min(file.size, (ke + 1) * ukuran));
|
|
7521
|
+
for (let coba = 0; ; coba++) {
|
|
7522
|
+
try {
|
|
7523
|
+
await siakad.request({ method: "POST", path: `/v1/berkas/${sesi.id}/potongan/${ke}`, body: { potongan: { data: bagian, filename: `${ke}.part` } }, multipart: true }, { signal, timeout: 3e5 });
|
|
7524
|
+
terkirim += bagian.size;
|
|
7525
|
+
onProgress?.(Math.min(99, Math.round(terkirim / file.size * 100)));
|
|
7526
|
+
return;
|
|
7527
|
+
} catch (e) {
|
|
7528
|
+
if (coba >= 3 || signal?.aborted) throw e;
|
|
7529
|
+
await tunggu(500 * 2 ** coba);
|
|
7530
|
+
}
|
|
7531
|
+
}
|
|
7532
|
+
};
|
|
7533
|
+
await Promise.all(
|
|
7534
|
+
Array.from({ length: Math.max(1, Math.min(paralel, jumlah)) }, async () => {
|
|
7535
|
+
for (let ke = antre.shift(); ke !== void 0; ke = antre.shift()) await kirim(ke);
|
|
7536
|
+
})
|
|
7537
|
+
);
|
|
7538
|
+
const hasil = (await siakad.request({ method: "POST", path: `/v1/berkas/${sesi.id}/selesai` }, { signal, timeout: 3e5 })).data;
|
|
7539
|
+
onProgress?.(100);
|
|
7540
|
+
return hasil;
|
|
7541
|
+
}
|
|
7542
|
+
function useInfoBerkas() {
|
|
7543
|
+
return useSiakadQuery(["berkas-info"], (s, signal) => s.request({ method: "GET", path: "/v1/berkas/info" }, { signal }), { staleTime: 6e5 });
|
|
7544
|
+
}
|
|
7545
|
+
function useUnggahBerkas(opsi2 = {}) {
|
|
7546
|
+
const siakad = useSiakad();
|
|
7547
|
+
const { data: info } = useInfoBerkas();
|
|
7548
|
+
const ref = React17__namespace.useRef(opsi2);
|
|
7549
|
+
ref.current = opsi2;
|
|
7550
|
+
return React17__namespace.useCallback(
|
|
7551
|
+
async (file, onProgress, signal) => {
|
|
7552
|
+
const i = info ?? (await siakad.request({ method: "GET", path: "/v1/berkas/info" })).data;
|
|
7553
|
+
return unggahKeBerkas(siakad, i, file, ref.current, onProgress, signal);
|
|
7554
|
+
},
|
|
7555
|
+
[siakad, info]
|
|
7556
|
+
);
|
|
7557
|
+
}
|
|
7558
|
+
function useUrlBerkas(id, ttl = 900) {
|
|
7559
|
+
return useSiakadQuery(
|
|
7560
|
+
["berkas-url", id ?? "", ttl],
|
|
7561
|
+
(s, signal) => s.request({ method: "GET", path: `/v1/berkas/${encodeURIComponent(id ?? "")}/url`, query: { ttl } }, { signal }),
|
|
7562
|
+
{ enabled: Boolean(id), staleTime: Math.max(30, ttl - 60) * 1e3 }
|
|
7563
|
+
);
|
|
7564
|
+
}
|
|
7565
|
+
function UnggahBerkas({
|
|
7566
|
+
onSelesai,
|
|
7567
|
+
onGalat,
|
|
7568
|
+
accept,
|
|
7569
|
+
multiple,
|
|
7570
|
+
maxSize,
|
|
7571
|
+
disabled,
|
|
7572
|
+
title,
|
|
7573
|
+
hint,
|
|
7574
|
+
sembunyikanSelesai,
|
|
7575
|
+
className,
|
|
7576
|
+
...opsi2
|
|
7577
|
+
}) {
|
|
7578
|
+
const unggah = useUnggahBerkas(opsi2);
|
|
7579
|
+
const { data: info } = useInfoBerkas();
|
|
7580
|
+
const [daftar2, setDaftar] = React17__namespace.useState([]);
|
|
7581
|
+
const batal = React17__namespace.useRef(/* @__PURE__ */ new Map());
|
|
7582
|
+
React17__namespace.useEffect(() => () => batal.current.forEach((c) => c.abort()), []);
|
|
7583
|
+
const ubah2 = (id, p) => setDaftar((d) => d.map((f) => f.id === id ? { ...f, ...p } : f));
|
|
7584
|
+
const mulai = (files) => {
|
|
7585
|
+
for (const file of files) {
|
|
7586
|
+
const id = `${Date.now()}-${Math.random().toString(36).slice(2)}`;
|
|
7587
|
+
const ctl = new AbortController();
|
|
7588
|
+
batal.current.set(id, ctl);
|
|
7589
|
+
setDaftar((d) => [...multiple ? d : d.filter((f) => f.progress != null), { id, name: file.name, size: file.size, progress: 0 }]);
|
|
7590
|
+
unggah(file, (persen) => ubah2(id, { progress: persen }), ctl.signal).then((b) => {
|
|
7591
|
+
ubah2(id, { progress: void 0, url: b.url ?? void 0 });
|
|
7592
|
+
if (sembunyikanSelesai) setDaftar((d) => d.filter((f) => f.id !== id));
|
|
7593
|
+
onSelesai?.(b);
|
|
7594
|
+
}).catch((e) => {
|
|
7595
|
+
if (ctl.signal.aborted) return;
|
|
7596
|
+
const pesan = pesanGalat(e);
|
|
7597
|
+
ubah2(id, { progress: void 0, error: pesan });
|
|
7598
|
+
onGalat?.(pesan, file);
|
|
7599
|
+
}).finally(() => batal.current.delete(id));
|
|
7600
|
+
}
|
|
7601
|
+
};
|
|
7602
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className, style: { display: "grid", gap: "var(--u-space-3, 12px)" }, children: [
|
|
7603
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
7604
|
+
chunkDEF5CA7C_cjs.Dropzone,
|
|
7605
|
+
{
|
|
7606
|
+
onFiles: mulai,
|
|
7607
|
+
accept,
|
|
7608
|
+
multiple,
|
|
7609
|
+
maxSize: maxSize ?? info?.maks_byte,
|
|
7610
|
+
disabled,
|
|
7611
|
+
title,
|
|
7612
|
+
hint,
|
|
7613
|
+
onReject: (m) => onGalat?.(m, new File([], ""))
|
|
7614
|
+
}
|
|
7615
|
+
),
|
|
7616
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
7617
|
+
chunkDEF5CA7C_cjs.FileList,
|
|
7618
|
+
{
|
|
7619
|
+
files: daftar2,
|
|
7620
|
+
onRemove: (id) => {
|
|
7621
|
+
batal.current.get(id)?.abort();
|
|
7622
|
+
setDaftar((d) => d.filter((f) => f.id !== id));
|
|
7623
|
+
}
|
|
7624
|
+
}
|
|
7625
|
+
)
|
|
7626
|
+
] });
|
|
7627
|
+
}
|
|
7505
7628
|
|
|
7506
7629
|
exports.AKSES_ARSIP = AKSES_ARSIP;
|
|
7507
7630
|
exports.AgendaLms = AgendaLms;
|
|
@@ -7698,6 +7821,7 @@ exports.TindakanArsip = TindakanArsip;
|
|
|
7698
7821
|
exports.TindakanSpmi = TindakanSpmi;
|
|
7699
7822
|
exports.TranskripMahasiswa = TranskripMahasiswa;
|
|
7700
7823
|
exports.TugasMendatang = TugasMendatang;
|
|
7824
|
+
exports.UnggahBerkas = UnggahBerkas;
|
|
7701
7825
|
exports.UnipoProvider = UnipoProvider;
|
|
7702
7826
|
exports.UsiaPegawai = UsiaPegawai;
|
|
7703
7827
|
exports.ValidasiKurikulum = ValidasiKurikulum;
|
|
@@ -7728,6 +7852,7 @@ exports.pesanGalat = pesanGalat;
|
|
|
7728
7852
|
exports.sisaTenggat = sisaTenggat;
|
|
7729
7853
|
exports.teksEnv = teksEnv;
|
|
7730
7854
|
exports.terjawab = terjawab;
|
|
7855
|
+
exports.unggahKeBerkas = unggahKeBerkas;
|
|
7731
7856
|
exports.useAnggotaKelas = useAnggotaKelas;
|
|
7732
7857
|
exports.useAplikasiRbac = useAplikasiRbac;
|
|
7733
7858
|
exports.useAplikasiTerpadu = useAplikasiTerpadu;
|
|
@@ -7741,6 +7866,7 @@ exports.useDasborSpmi = useDasborSpmi;
|
|
|
7741
7866
|
exports.useDosen = useDosen;
|
|
7742
7867
|
exports.useEkuivalensi = useEkuivalensi;
|
|
7743
7868
|
exports.useFilterFields = useFilterFields;
|
|
7869
|
+
exports.useInfoBerkas = useInfoBerkas;
|
|
7744
7870
|
exports.useJadwalDosen = useJadwalDosen;
|
|
7745
7871
|
exports.useKalenderLms = useKalenderLms;
|
|
7746
7872
|
exports.useKatalogScope = useKatalogScope;
|
|
@@ -7785,6 +7911,8 @@ exports.useTahunOptions = useTahunOptions;
|
|
|
7785
7911
|
exports.useTranskrip = useTranskrip;
|
|
7786
7912
|
exports.useTrenAkademik = useTrenAkademik;
|
|
7787
7913
|
exports.useUjianSaya = useUjianSaya;
|
|
7914
|
+
exports.useUnggahBerkas = useUnggahBerkas;
|
|
7915
|
+
exports.useUrlBerkas = useUrlBerkas;
|
|
7788
7916
|
exports.useValidasiKurikulum = useValidasiKurikulum;
|
|
7789
7917
|
//# sourceMappingURL=siakad.cjs.map
|
|
7790
7918
|
//# sourceMappingURL=siakad.cjs.map
|