Deksripsi:
- Progress investasi
- Tampilan voting
## No issue
This commit is contained in:
2024-09-10 12:12:31 +08:00
parent 84b7b381f6
commit 3b7e9977f6
163 changed files with 1556 additions and 428 deletions

View File

@@ -19,10 +19,8 @@ import ComponentVote_DetailDataSetelahPublish from "../../component/detail/detai
export default function Vote_DetailKontribusi({
dataVote,
listKontributor,
}: {
dataVote: MODEL_VOTING;
listKontributor: any
}) {
return (
<>
@@ -32,12 +30,7 @@ export default function Vote_DetailKontribusi({
authorName={true}
/>
<ComponentVote_HasilVoting data={dataVote.Voting_DaftarNamaVote} />
<ComponentVote_DaftarKontributorVoter
listKontributor={listKontributor}
/>
</Stack>
</>
);
}

View File

@@ -1,21 +1,28 @@
"use client";
import { AppShell } from "@mantine/core";
import React from "react";
import ComponentVote_HeaderTamplate from "../../component/header_tamplate";
import AppComponentGlobal_LayoutTamplate from "@/app_modules/_global/component_layout_tamplate";
import UIGlobal_LayoutTamplate from "@/app_modules/_global/ui/ui_layout_tamplate";
import UIGlobal_LayoutHeaderTamplate from "@/app_modules/_global/ui/ui_header_tamplate";
import React from "react";
import { Voting_ComponentLayoutHeaderDetailPublish } from "../../component";
export default function LayoutVote_DetailKontribusi({
children,
votingId,
userLoginId,
}: {
children: React.ReactNode;
votingId: string;
userLoginId: string;
}) {
return (
<>
<UIGlobal_LayoutTamplate
header={<UIGlobal_LayoutHeaderTamplate title="Detail Kontribusi" />}
header={
<Voting_ComponentLayoutHeaderDetailPublish
title="Detail Kontribusi"
userLoginId={userLoginId}
votingId={votingId}
/>
}
>
{children}
</UIGlobal_LayoutTamplate>

View File

@@ -25,9 +25,11 @@ import { useState } from "react";
import ComponentVote_DaftarKontributorVoter from "../../component/detail/detail_daftar_kontributor";
import ComponentVote_HasilVoting from "../../component/detail/detail_hasil_voting";
import { Vote_funCreateHasil } from "../../fun/create/create_hasil";
import { Vote_getOnebyId } from "../../fun/get/get_one_by_id";
import { voting_funGetOneVotingbyId } from "../../fun/get/fun_get_one_by_id";
import { MODEL_VOTING } from "../../model/interface";
import mqtt_client from "@/util/mqtt_client";
import moment from "moment";
import ComponentGlobal_BoxInformation from "@/app_modules/_global/component/box_information";
export default function Vote_MainDetail({
dataVote,
@@ -45,9 +47,16 @@ export default function Vote_MainDetail({
userLoginId: string;
}) {
const [data, setData] = useState(dataVote);
const today = new Date();
return (
<>
<Stack py={"md"}>
{moment(dataVote?.awalVote).diff(today, "hours") < 0 ? (
""
) : (
<ComponentGlobal_BoxInformation informasi="Untuk sementara voting ini belum di buka. Voting akan dimulai sesuai dengan tanggal awal pemilihan, dan akan ditutup sesuai dengan tanggal akhir pemilihan." />
)}
<TampilanDataVoting
dataVote={data}
setData={setData}
@@ -56,9 +65,6 @@ export default function Vote_MainDetail({
userLoginId={userLoginId}
/>
<ComponentVote_HasilVoting data={data.Voting_DaftarNamaVote} />
<ComponentVote_DaftarKontributorVoter
listKontributor={listKontributor}
/>
</Stack>
</>
);
@@ -78,6 +84,8 @@ function TampilanDataVoting({
userLoginId: string;
}) {
const [votingNameId, setVotingNameId] = useState("");
const today = new Date();
return (
<>
<Card
@@ -184,6 +192,11 @@ function TampilanDataVoting({
{dataVote?.Voting_DaftarNamaVote.map((v) => (
<Box key={v.id}>
<Radio
disabled={
moment(dataVote?.awalVote).diff(today, "hours") < 0
? false
: true
}
color="yellow"
styles={{ label: { color: "white" } }}
label={v.value}
@@ -233,11 +246,11 @@ async function onVote(
) {
const res = await Vote_funCreateHasil(pilihanVotingId, voteId);
if (res.status === 201) {
await Vote_getOnebyId(voteId).then((val) => {
await voting_funGetOneVotingbyId(voteId).then((val) => {
setData(val);
ComponentGlobal_NotifikasiBerhasil(res.message);
});
if (userLoginId !== res?.data?.Voting?.authorId) {
const dataNotif = {
appId: res?.data?.Voting?.id,
@@ -262,8 +275,6 @@ async function onVote(
);
}
}
} else {
ComponentGlobal_NotifikasiPeringatan(res.message);
}

View File

@@ -1,21 +1,28 @@
"use client";
import { AppShell } from "@mantine/core";
import React from "react";
import ComponentVote_HeaderTamplate from "../../component/header_tamplate";
import AppComponentGlobal_LayoutTamplate from "@/app_modules/_global/component_layout_tamplate";
import UIGlobal_LayoutTamplate from "@/app_modules/_global/ui/ui_layout_tamplate";
import UIGlobal_LayoutHeaderTamplate from "@/app_modules/_global/ui/ui_header_tamplate";
import React from "react";
import { Voting_ComponentLayoutHeaderDetailPublish } from "../../component";
export default function LayoutVote_MainDetail({
children,
votingId,
userLoginId,
}: {
children: React.ReactNode;
votingId: string;
userLoginId: string;
}) {
return (
<>
<UIGlobal_LayoutTamplate
header={<UIGlobal_LayoutHeaderTamplate title="Detail Voting" />}
header={
<Voting_ComponentLayoutHeaderDetailPublish
title="Detail Voting"
votingId={votingId}
userLoginId={userLoginId}
/>
}
>
{children}
</UIGlobal_LayoutTamplate>

View File

@@ -1,81 +1,27 @@
"use client";
import {
Badge,
Card,
Center,
Grid,
Group,
Radio,
Stack,
Text,
Title,
} from "@mantine/core";
import ComponentVote_DetailDataSebelumPublish from "../../component/detail/detail_data_sebelum_publish";
import { Badge, Center, Stack } from "@mantine/core";
import ComponentVote_DaftarKontributorVoter from "../../component/detail/detail_daftar_kontributor";
import ComponentVote_HasilVoting from "../../component/detail/detail_hasil_voting";
import moment from "moment";
import { MODEL_VOTE_KONTRIBUTOR, MODEL_VOTING } from "../../model/interface";
import ComponentVote_DetailDataSetelahPublish from "../../component/detail/detail_data_setelah_publish";
import ComponentVote_HasilVoting from "../../component/detail/detail_hasil_voting";
import { MODEL_VOTE_KONTRIBUTOR, MODEL_VOTING } from "../../model/interface";
export default function Vote_DetailPublish({
dataVote,
listKontributor,
}: {
dataVote: MODEL_VOTING;
listKontributor: MODEL_VOTE_KONTRIBUTOR;
}) {
return (
<>
<Stack py={"md"}>
{/* <ComponentVote_DetailStatus /> */}
<Center >
<Badge color={dataVote?.isArsip ? "gray" : "green"}>
{dataVote?.isArsip ? "Arsip" : "Publish"}
</Badge>
</Center>
<ComponentVote_DetailDataSetelahPublish data={dataVote} />
<ComponentVote_HasilVoting data={dataVote.Voting_DaftarNamaVote} />
<ComponentVote_DaftarKontributorVoter
listKontributor={listKontributor as any}
/>
</Stack>
</>
);
}
function TampilanDataVoting({ data }: { data: MODEL_VOTING }) {
return (
<>
<Card shadow="lg" withBorder p={30}>
<Card.Section px={"xs"}>
<Stack spacing={"lg"}>
<Center>
<Title order={5}>{data.title}</Title>
</Center>
<Text>{data.deskripsi}</Text>
</Stack>
</Card.Section>
<Card.Section py={"lg"}>
<Stack spacing={0}>
<Center>
<Text fz={10} fw={"bold"}>
Batas Voting
</Text>
</Center>
<Badge>
<Group>
<Text>
{data.awalVote.toLocaleDateString(["id-ID"], {
dateStyle: "long",
})}
</Text>
<Text>-</Text>
<Text>
{data.akhirVote.toLocaleDateString(["id-ID"], {
dateStyle: "long",
})}
</Text>
</Group>
</Badge>
</Stack>
</Card.Section>
</Card>
</>
);
}

View File

@@ -1,21 +1,29 @@
"use client";
import { AppShell } from "@mantine/core";
import React from "react";
import ComponentVote_HeaderTamplate from "../../component/header_tamplate";
import AppComponentGlobal_LayoutTamplate from "@/app_modules/_global/component_layout_tamplate";
import UIGlobal_LayoutTamplate from "@/app_modules/_global/ui/ui_layout_tamplate";
import UIGlobal_LayoutHeaderTamplate from "@/app_modules/_global/ui/ui_header_tamplate";
import UIGlobal_LayoutTamplate from "@/app_modules/_global/ui/ui_layout_tamplate";
import React from "react";
import { Voting_ComponentLayoutHeaderDetailPublish } from "../../component";
export default function LayoutVote_DetailPublish({
children,
votingId,
userLoginId,
}: {
children: React.ReactNode;
votingId: string;
userLoginId: string;
}) {
return (
<>
<UIGlobal_LayoutTamplate
header={<UIGlobal_LayoutHeaderTamplate title="Detail Publish" />}
header={
<Voting_ComponentLayoutHeaderDetailPublish
title="Detail Publish"
votingId={votingId}
userLoginId={userLoginId}
/>
}
>
{children}
</UIGlobal_LayoutTamplate>

View File

@@ -6,8 +6,12 @@ import React from "react";
export default function LayoutVote_DetailSemuaRiwayat({
children,
votingId,
userLoginId,
}: {
children: React.ReactNode;
votingId: string;
userLoginId: string;
}) {
return (
<>