fix: Admin

Deskripsi:
- Penambahan field nama rekening di db bank
- Optimalisasi event
## No Issue
This commit is contained in:
2024-09-03 10:10:31 +08:00
parent 8a018462c7
commit 74108c3096
117 changed files with 2976 additions and 1144 deletions

View File

@@ -0,0 +1,3 @@
import { AdminAppInformation_ComponentTitlePageBank } from "./info_bank/comp_title_page";
export { AdminAppInformation_ComponentTitlePageBank };

View File

@@ -0,0 +1,32 @@
import { ComponentAdminGlobal_TitlePage } from "@/app_modules/admin/_admin_global";
import { Button } from "@mantine/core";
import { IconCirclePlus } from "@tabler/icons-react";
export function AdminAppInformation_ComponentTitlePageBank({
onEventListener,
}: {
onEventListener: (val: any) => void;
}) {
return (
<>
<ComponentAdminGlobal_TitlePage
name="Informasi Bank"
component={
<Button
w={120}
leftIcon={<IconCirclePlus />}
radius={"xl"}
onClick={() => {
onEventListener({
isCreate: true,
isUpdate: false,
});
}}
>
Tambah
</Button>
}
/>
</>
);
}

View File

@@ -1,11 +1,12 @@
"use server";
import prisma from "@/app/lib/prisma";
import { MODEL_MASTER_BANK } from "@/app_modules/investasi/_lib/interface";
export default async function adminAppInformation_createBank({
data,
}: {
data: any;
data: MODEL_MASTER_BANK;
}) {
const count = await prisma.masterBank.count({});
const idBank = count + 1;
@@ -13,8 +14,8 @@ export default async function adminAppInformation_createBank({
const create = await prisma.masterBank.create({
data: {
id: idBank.toString(),
namaBank: data.name,
namaAkun: data.akun,
namaBank: data.namaBank,
namaAkun: data.namaAkun,
norek: data.norek,
},
});

View File

@@ -17,6 +17,8 @@ export default async function adminAppInformation_updateStatusBankById({
},
});
if (!updt) return { status: 400, message: "Gagal update" };
return { status: 200, message: "Berhasil update" };
}

View File

@@ -14,6 +14,7 @@ export default async function adminAppInformation_updateDataBankById({
},
data: {
namaBank: data.namaBank,
namaAkun: data.namaAkun,
norek: data.norek,
},
});

View File

@@ -1,2 +0,0 @@
import AdminAppInformation_MainView from "./main";
export { AdminAppInformation_MainView };

View File

@@ -0,0 +1,3 @@
import AdminAppInformation_UiMain from "./ui_main";
export { AdminAppInformation_UiMain };

View File

@@ -1,14 +1,13 @@
"use client";
import {
Space,
Stack
} from "@mantine/core";
import { Space, Stack } from "@mantine/core";
import ComponentAdminGlobal_HeaderTamplate from "../../_admin_global/header_tamplate";
import InformasiBank from "./info_bank";
import InformasiWhatApps from "./info_whatsapp";
import {
AdminAppInformation_ViewInfoBank,
AdminAppInformation_ViewInformasiWhatApps,
} from "../view";
export default function AdminAppInformation_MainView({
export default function AdminAppInformation_UiMain({
nomorAdmin,
listBank,
}: {
@@ -19,9 +18,9 @@ export default function AdminAppInformation_MainView({
<>
<Stack h={"100%"}>
<ComponentAdminGlobal_HeaderTamplate name="App Information" />
<InformasiWhatApps nomorAdmin={nomorAdmin} />
<AdminAppInformation_ViewInformasiWhatApps nomorAdmin={nomorAdmin} />
<Space h={50} />
<InformasiBank listBank={listBank} />
<AdminAppInformation_ViewInfoBank listBank={listBank} />
</Stack>
</>
);

View File

@@ -0,0 +1,5 @@
import AdminAppInformation_ViewInfoBank from "./view_info_bank";
import AdminAppInformation_ViewInformasiWhatApps from "./view_info_whatsapp";
export { AdminAppInformation_ViewInformasiWhatApps };
export { AdminAppInformation_ViewInfoBank };

View File

@@ -16,12 +16,9 @@ import {
Text,
TextInput,
Title,
Tooltip
Tooltip,
} from "@mantine/core";
import {
IconCirclePlus,
IconEdit
} from "@tabler/icons-react";
import { IconCirclePlus, IconEdit } from "@tabler/icons-react";
import _ from "lodash";
import { useState } from "react";
import { ComponentAdminGlobal_NotifikasiBerhasil } from "../../_admin_global/admin_notifikasi/notifikasi_berhasil";
@@ -30,23 +27,29 @@ import adminAppInformation_createBank from "../fun/create/fun_create_new_bank";
import adminAppInformation_getMasterBank from "../fun/master/get_list_bank";
import adminAppInformation_updateStatusBankById from "../fun/update/fun_udpate_status_bank";
import adminAppInformation_updateDataBankById from "../fun/update/fun_update_data_bank";
import { ComponentAdminGlobal_TitlePage } from "../../_admin_global";
import { AdminAppInformation_ComponentTitlePageBank } from "../component";
export default function InformasiBank({
export default function AdminAppInformation_ViewInfoBank({
listBank,
}: {
listBank: MODEL_MASTER_BANK[];
}) {
const [data, setData] = useState(listBank);
const [isCreate, setIsCreate] = useState(false);
const [newData, setNewData] = useState({
name: "",
const [isLoadingCreate, setLoadingCreate] = useState(false);
const [newData, setNewData] = useState<any>({
namaBank: "",
namaAkun: "",
norek: "",
});
const [isUpdate, setIsUpdate] = useState(false);
const [updateData, setUpdateData] = useState({
id: "",
name: "",
namaBank: "",
namaAkun: "",
norek: "",
});
@@ -56,14 +59,18 @@ export default function InformasiBank({
active: "",
});
const [checked, setChecked] = useState(false);
async function onCreate() {
const create = await adminAppInformation_createBank({ data: newData });
if (create.status === 200) {
const loadData = await adminAppInformation_getMasterBank();
setData(loadData);
ComponentAdminGlobal_NotifikasiBerhasil(create.message);
try {
const loadData = await adminAppInformation_getMasterBank();
setData(loadData);
} catch (error) {
console.log(error);
} finally {
setLoadingCreate(true);
ComponentAdminGlobal_NotifikasiBerhasil(create.message);
}
} else {
ComponentAdminGlobal_NotifikasiGagal(create.message);
}
@@ -93,11 +100,13 @@ export default function InformasiBank({
}) {
const data = {
id: id,
active: value,
isActive: value,
};
const updt = await adminAppInformation_updateStatusBankById({
data: data as any,
});
if (updt.status === 200) {
const loadData = await adminAppInformation_getMasterBank();
setData(loadData);
@@ -118,15 +127,10 @@ export default function InformasiBank({
data.map((e, i) => (
<tr key={i}>
<td>
<Center>
<Center w={150}>
<Text>{e?.namaBank}</Text>
</Center>
</td>
<td>
<Center>
<Text>{e?.norek}</Text>
</Center>
</td>
<td>
<Center>
<Switch
@@ -144,6 +148,17 @@ export default function InformasiBank({
/>
</Center>
</td>
<td>
<Center>
<Text>{e?.namaAkun}</Text>
</Center>
</td>
<td>
<Center>
<Text>{e?.norek}</Text>
</Center>
</td>
<td>
<Stack align="center" justify="center">
<ActionIcon
@@ -154,7 +169,8 @@ export default function InformasiBank({
setIsCreate(false);
setUpdateData({
id: e?.id,
name: e?.namaBank,
namaBank: e?.namaBank,
namaAkun: e?.namaAkun,
norek: e?.norek,
});
}}
@@ -172,50 +188,56 @@ export default function InformasiBank({
return (
<>
<Stack spacing={"xs"}>
<Group
position="apart"
bg={"gray.4"}
p={"xs"}
style={{ borderRadius: "6px" }}
>
<Title order={4}>Informasi Bank</Title>
<Button
w={120}
leftIcon={<IconCirclePlus />}
radius={"xl"}
onClick={() => {
setIsCreate(true);
setIsUpdate(false);
}}
>
Tambah
</Button>
</Group>
<AdminAppInformation_ComponentTitlePageBank
onEventListener={(val: { isCreate: any; isUpdate: any }) => {
setIsCreate(val.isCreate);
setIsUpdate(val.isUpdate);
}}
/>
{/* <ComponentAdminGlobal_TitlePage
name="Informasi Bank"
component={
<Button
w={120}
leftIcon={<IconCirclePlus />}
radius={"xl"}
onClick={() => {
setIsCreate(true);
setIsUpdate(false);
}}
>
Tambah
</Button>
}
/> */}
</Stack>
<Grid>
<Grid.Col span={"auto"}>
<Grid.Col span={9}>
<Paper p={"md"} withBorder shadow="lg" h={"50vh"}>
<ScrollArea w={"100%"} h={"90%"} offsetScrollbars>
<Table
verticalSpacing={"xs"}
horizontalSpacing={"md"}
p={"md"}
w={"100%"}
w={1000}
striped
highlightOnHover
>
<thead>
<tr>
<th>
<Center>Nama Bank</Center>
</th>
<th>
<Center>Nomor Rekening</Center>
<Center w={150}>Bank</Center>
</th>
<th>
<Center>Status</Center>
</th>
<th>
<Center>Nama Rekening</Center>
</th>
<th>
<Center>Nomor Rekening</Center>
</th>
<th>
<Center>Aksi</Center>
</th>
@@ -224,36 +246,39 @@ export default function InformasiBank({
<tbody>{rowTable}</tbody>
</Table>
</ScrollArea>
{/* <Center mt={"xl"}>
<Pagination
total={10}
// value={isActivePage}
// total={isNPage}
// onChange={(val) => {
// onPageClick(val);
// }}
/>
</Center> */}
</Paper>
</Grid.Col>
<Grid.Col span={4}>
<Grid.Col span={3}>
{isCreate ? (
<Paper p={"md"} withBorder shadow="lg">
<Stack>
<Center>
<Title order={5}>Tambah Daftar Bank</Title>
</Center>
<TextInput
label={"Nama Bank"}
placeholder="Masukan nama bank"
onChange={(val) => {
setNewData({
...newData,
name: val.currentTarget.value,
namaBank: val.currentTarget.value,
});
}}
/>
<TextInput
label={"Nama Rekening"}
placeholder="Masukan nama rekening"
onChange={(val) => {
setNewData({
...newData,
namaAkun: val.currentTarget.value,
});
}}
/>
<TextInput
label={"Nomor Rekening Bank"}
placeholder=" Masukan nomor rekening bank"
@@ -275,6 +300,8 @@ export default function InformasiBank({
Batal
</Button>
<Button
loading={isLoadingCreate}
loaderPosition="center"
style={{ transition: "0.5s" }}
disabled={_.values(newData).includes("") ? true : false}
radius={"xl"}
@@ -291,6 +318,7 @@ export default function InformasiBank({
) : (
""
)}
{isUpdate ? (
<Paper p={"md"} withBorder shadow="lg">
<Stack>
@@ -300,12 +328,23 @@ export default function InformasiBank({
<TextInput
label={"Nama Bank"}
placeholder="Masukan nama bank"
value={updateData.name}
value={updateData.namaBank}
onChange={(val) => {
const value = val.currentTarget.value;
setUpdateData({ ...updateData, name: value });
setUpdateData({ ...updateData, namaBank: value });
}}
/>
<TextInput
label={"Nama Rekening"}
placeholder="Masukan nama rekening"
value={updateData.namaAkun}
onChange={(val) => {
const value = val.currentTarget.value;
setUpdateData({ ...updateData, namaAkun: value });
}}
/>
<TextInput
label={"Nomor Rekening Bank"}
placeholder=" Masukan nomor rekening bank"
@@ -328,7 +367,9 @@ export default function InformasiBank({
<Button
style={{ transition: "0.5s" }}
disabled={
updateData?.name === "" || updateData?.norek === ""
updateData?.namaBank === "" ||
updateData?.namaAkun === "" ||
updateData?.norek === ""
? true
: false
}
@@ -338,7 +379,7 @@ export default function InformasiBank({
onUpdate();
}}
>
Simpan
Update
</Button>
</Group>
</Stack>

View File

@@ -3,12 +3,13 @@
import {
ActionIcon,
Button,
Collapse,
Group,
Paper,
Stack,
TextInput,
Title,
Tooltip
Tooltip,
} from "@mantine/core";
import { IconEdit, IconPhone } from "@tabler/icons-react";
import { useState } from "react";
@@ -16,11 +17,17 @@ import { ComponentAdminGlobal_NotifikasiBerhasil } from "../../_admin_global/adm
import { ComponentAdminGlobal_NotifikasiGagal } from "../../_admin_global/admin_notifikasi/notifikasi_gagal";
import adminAppInformation_getNomorAdmin from "../fun/master/get_nomor_admin";
import adminAppInformation_funUpdateNomorAdmin from "../fun/update/fun_update_nomor";
import { useDisclosure } from "@mantine/hooks";
import { MainColor } from "@/app_modules/_global/color/color_pallet";
export default function InformasiWhatApps({ nomorAdmin }: { nomorAdmin: any }) {
const [disabled, setDisable] = useState(true);
export default function AdminAppInformation_ViewInformasiWhatApps({
nomorAdmin,
}: {
nomorAdmin: any;
}) {
const [dataNomor, setDataNomor] = useState(nomorAdmin);
const [updateNomor, setUpdateNomor] = useState("");
const [opened, { toggle }] = useDisclosure(false);
async function onUpdate() {
const newNumber = (dataNomor.nomor = updateNomor);
@@ -33,14 +40,10 @@ export default function InformasiWhatApps({ nomorAdmin }: { nomorAdmin: any }) {
data: dataNomor,
});
if (updt.status === 200) {
setDisable(true);
setUpdateNomor("");
const loadDdata = await adminAppInformation_getNomorAdmin();
setDataNomor(loadDdata);
if (loadDdata) {
ComponentAdminGlobal_NotifikasiBerhasil(updt.message);
return;
}
toggle();
ComponentAdminGlobal_NotifikasiBerhasil(updt.message);
} else {
ComponentAdminGlobal_NotifikasiGagal(updt.message);
}
@@ -68,29 +71,31 @@ export default function InformasiWhatApps({ nomorAdmin }: { nomorAdmin: any }) {
<Tooltip label={"Edit"}>
<ActionIcon
style={{ transition: "0.2s" }}
variant="subtle"
disabled={disabled ? false : true}
variant="transparent"
radius={"xl"}
onClick={() => {
setDisable(false);
toggle();
setUpdateNomor(dataNomor.nomor);
}}
>
<IconEdit
style={{ transition: "0.2s" }}
color={disabled ? "green" : "gray"}
style={{
transition: "0.2s",
}}
color={MainColor.darkblue}
/>
</ActionIcon>
</Tooltip>
</Group>
</Paper>
{disabled ? (
""
) : (
<Collapse
in={opened}
transitionDuration={300}
transitionTimingFunction="linear"
>
<Stack>
<TextInput
disabled={disabled ? true : false}
type="number"
placeholder="Update nomor admin"
icon={<IconPhone />}
@@ -103,18 +108,16 @@ export default function InformasiWhatApps({ nomorAdmin }: { nomorAdmin: any }) {
<Group position="right">
<Button
style={{ transition: "0.2s" }}
disabled={disabled ? true : false}
radius={"xl"}
onClick={() => {
setDisable(true);
setUpdateNomor("");
toggle();
}}
>
Batal
</Button>
<Button
style={{ transition: "0.2s" }}
disabled={disabled || updateNomor === "" ? true : false}
disabled={updateNomor === "" ? true : false}
color="green"
radius={"xl"}
onClick={() => {
@@ -125,7 +128,7 @@ export default function InformasiWhatApps({ nomorAdmin }: { nomorAdmin: any }) {
</Button>
</Group>
</Stack>
)}
</Collapse>
</Stack>
</Paper>
</Stack>