Files
hipmi/src/app_modules/vote/component/card_view_publish.tsx
Bagasbanuna02 3b7e9977f6 fix:
Deksripsi:
- Progress investasi
- Tampilan voting
## No issue
2024-09-10 12:12:31 +08:00

185 lines
5.2 KiB
TypeScript

"use client";
import { RouterVote } from "@/app/lib/router_hipmi/router_vote";
import ComponentGlobal_AuthorNameOnHeader from "@/app_modules/_global/author_name_on_header";
import {
Card,
Stack,
Grid,
Avatar,
Divider,
Badge,
Group,
Text,
Title,
Box,
Center,
Progress,
} from "@mantine/core";
import moment from "moment";
import { useRouter } from "next/navigation";
import { MODEL_VOTING } from "../model/interface";
import { ComponentGlobal_NotifikasiPeringatan } from "@/app_modules/_global/notif_global/notifikasi_peringatan";
import { AccentColor } from "@/app_modules/_global/color/color_pallet";
import { toNumber } from "lodash";
import { useState } from "react";
import { ComponentGlobal_CardLoadingOverlay } from "@/app_modules/_global/component";
export default function ComponentVote_CardViewPublish({
data,
path,
pilihanSaya,
authorName,
namaPilihan,
statusArsip,
}: {
data?: MODEL_VOTING;
path: string;
pilihanSaya?: boolean;
authorName?: boolean;
namaPilihan?: string;
statusArsip?: boolean;
}) {
const router = useRouter();
const [visible, setVisible] = useState(false);
return (
<>
<Card
radius={"md"}
px={30}
pt={authorName ? 30 : 10}
pb={30}
mb={"lg"}
style={{
backgroundColor: AccentColor.darkblue,
borderRadius: "10px",
border: `2px solid ${AccentColor.blue}`,
color: "white",
}}
>
{/* Header name */}
{authorName ? (
<Card.Section>
<ComponentGlobal_AuthorNameOnHeader
authorName={data?.Author ? data?.Author.Profile.name : ""}
imagesId={data?.Author ? data?.Author.Profile.imagesId : ""}
profileId={data?.Author ? data?.Author.Profile.id : ""}
/>
</Card.Section>
) : (
""
)}
{/* Isi deskripsi */}
<Card.Section
py={authorName ? "sm" : 0}
onClick={() => {
if (data?.id === undefined) {
ComponentGlobal_NotifikasiPeringatan("Halaman tidak ditemukan");
} else {
setVisible(true);
router.push(path + data?.id);
}
}}
>
<Stack spacing={"xl"}>
<Stack align="center">
<Text align="center" fw={"bold"}>
{data ? data.title : "Judul Voting"}
</Text>
<Badge
styles={{
root: {
backgroundColor: AccentColor.blue,
border: `1px solid ${AccentColor.skyblue}`,
color: "white",
width: "80%",
},
}}
>
<Group>
<Text>
{data
? data?.awalVote.toLocaleDateString(["id-ID"], {
dateStyle: "medium",
})
: "tgl awal voting"}
</Text>
<Text>-</Text>
<Text>
{data
? data?.akhirVote.toLocaleDateString(["id-ID"], {
dateStyle: "medium",
})
: "tgl akhir voting"}
</Text>
</Group>
</Badge>
</Stack>
{data ? (
<Stack>
<Center>
<Title order={5}>Hasil Voting</Title>
</Center>
<Grid justify="center">
{data?.Voting_DaftarNamaVote.map((e) => (
<Grid.Col
key={e.id}
span={data?.Voting_DaftarNamaVote?.length >= 4 ? 6 : 4}
>
<Stack align="center">
<Avatar
radius={100}
size={70}
variant="outline"
color="yellow"
>
<Text>{e.jumlah}</Text>
</Avatar>
<Text fz={"xs"} align="center">
{e.value}
</Text>
</Stack>
</Grid.Col>
))}
</Grid>
</Stack>
) : (
""
)}
</Stack>
{pilihanSaya ? (
<Stack align="center" spacing={0} mt="md">
<Text mb={"xs"} fw={"bold"} fz={"xs"}>
Pilihan anda:
</Text>
<Badge size="lg">
<Text truncate fz={"xs"}>
{namaPilihan}
</Text>
</Badge>
</Stack>
) : (
""
)}
{statusArsip ? (
<Center mt="md">
<Badge color={data?.isArsip ? "gray" : "green"}>
{data?.isArsip ? "Arsip" : "Publish"}
</Badge>
</Center>
) : (
""
)}
{visible && <ComponentGlobal_CardLoadingOverlay />}
</Card.Section>
</Card>
</>
);
}