diff --git a/comps/form/gen/gen-form.ts b/comps/form/gen/gen-form.ts index 7de8812..9130366 100755 --- a/comps/form/gen/gen-form.ts +++ b/comps/form/gen/gen-form.ts @@ -67,50 +67,59 @@ async ({ form, error, fm }: IForm) => { fm.status = "saving"; md.render(); } - - const data = { ...form }; // data form - const data_rel = ${JSON.stringify(rel_many)} // list relasi has many - const data_master = {} as Record | any; // variabel untuk data master - const data_array = [] as Array<{ + + const data = { ...form }; + const record = {} as Record; + + const relation_ref = ${JSON.stringify(rel_many)}; + const has_many = [] as Array<{ table: string; data: Array; fk: string; - }>; // variabel untuk data array atau has many + }>; - // proses untuk membagi antara data master dengan data array - // data array / has many dilihat dari value yang berupa array + // pisahkan antara has_many dengan field biasa for (const [k, v] of Object.entries(data) as any) { if (Array.isArray(v)) { - const rel = Array.isArray(data_rel) && data_rel.length ? data_rel.find((e) => e.table === k) : null + const rel = + Array.isArray(relation_ref) && relation_ref.length + ? relation_ref.find((e) => e.table === k) + : null; if (rel) { - data_array.push({ + has_many.push({ table: k, data: v, fk: rel.fk, }); } } else { - data_master[k] = v; + record[k] = v; } } - // hapus id dari data_master jika ada - try { - delete data_master.${pk}; - } catch (ex) {} + + // prisma create / update ga boleh ada record.${pk} + if (record) delete record.${pk}; + if (form.${pk}) { await db.${table}.update({ where: { ${pk}: form.${pk}, }, - data: data_master, + data: { + ...record, + }, }); } else { const res = await db.${table}.create({ - data: data_master, + //@ts-ignore + data: { + ...record, + }, }); - if (res) form.${pk} = res.${pk}; + if (res) form.id = res.id; } - if (data_array.length) { + + if (has_many.length) { const exec_query_bulk = async ( current: { table: string; data: Array; fk: string }, list: Array<{ table: string; data: Array; fk: string }>, @@ -120,7 +129,7 @@ async ({ form, error, fm }: IForm) => { const data = current.data.map((e) => { return { ...e, - ${table}: { + m_role: { connect: { ${pk}: form.${pk}, }, @@ -146,7 +155,7 @@ async ({ form, error, fm }: IForm) => { } } }; - await exec_query_bulk(data_array[0], data_array, 0); + await exec_query_bulk(has_many[0], has_many, 0); } result = true; } catch (e) { diff --git a/preset/login/Login.tsx b/preset/login/Login.tsx index 9ab92ee..4280ff7 100755 --- a/preset/login/Login.tsx +++ b/preset/login/Login.tsx @@ -16,17 +16,15 @@ export type LGProps = { export const Login: FC = (props) => { const local = useLocal({ loading: true }, () => { loadSession(); - setTimeout(() => { - if (w.user) { - const home = props.url_home[w.user.role]; - if (home) { - navigate(home); - return; - } + if (w.user) { + const home = props.url_home[w.user.role]; + if (home) { + navigate(home); + return; } - local.loading = false; - local.render(); - }, 500); + } + local.loading = false; + local.render(); }); if (local.loading) diff --git a/preset/login/utils/logout.ts b/preset/login/utils/logout.ts index 96c4085..46943fa 100755 --- a/preset/login/utils/logout.ts +++ b/preset/login/utils/logout.ts @@ -11,8 +11,14 @@ export const logout = (url_login?: string) => { if (typeof get(w, "user") === "object") { w.user = null; } - if (localStorage.getItem("user")) { - localStorage.removeItem("user"); + + let id_site = ""; + if (location.hostname === "prasi.avolut.com") { + const parts = location.pathname.split("/"); + id_site = parts[2]; + } + if (localStorage.getItem("user" + id_site)) { + localStorage.removeItem("user" + id_site); } if (url_login) navigate(url_login); }; diff --git a/preset/menu/Menu.tsx b/preset/menu/Menu.tsx index 4982c69..5569816 100755 --- a/preset/menu/Menu.tsx +++ b/preset/menu/Menu.tsx @@ -13,6 +13,7 @@ const local_default = { nav_timeout: null as any, pathname: "", loading: false, + init: false, }; type MLocal = typeof local_default & { render: () => void }; @@ -22,11 +23,15 @@ export const Menu: FC = (props) => { role = props.on_init(); let menu = get(imenu, role) || []; - const local = useLocal(local_default); + const local = useLocal({ ...local_default }); if (local.pathname !== getPathname()) { local.pathname = getPathname(); } + if (!local.init) { + local.active = ""; + local.init = true; + } useEffect(() => { local.mode = props.mode; @@ -142,7 +147,6 @@ export const SideBar: FC<{ local.loading = true; if (typeof menu.value === "string") { local.active = menu.hash; - clearTimeout(local.nav_timeout); local.nav_timeout = setTimeout(() => { if (