From ed77b569a6f2bcc3fd8979b4ef8c1c90868f800f Mon Sep 17 00:00:00 2001 From: Bagasbanuna02 Date: Fri, 5 Apr 2024 15:31:35 +0800 Subject: [PATCH 1/3] Project Collaboration ## feat - Buat proyek baru - Tampilan list data pada beranda - Partisipasi user lain ### No issuee --- prisma/schema.prisma | 2 +- .../colab/detail/main_detail/[id]/page.tsx | 18 ++- src/app/dev/colab/main/beranda/page.tsx | 11 +- .../component/card_view/card_section_data.tsx | 20 ++- .../card_section_header_author_name.tsx | 16 ++- .../card_section_jumlah_partisipan.tsx | 34 +++++ .../component/card_view/jumlah_partisipan.tsx | 28 ---- .../colab/component/detail/detail_data.tsx | 35 ++--- .../detail/list_partisipasi_user.tsx | 128 +++++++++++++++--- src/app_modules/colab/create/index.tsx | 21 ++- .../colab/detail/main_detail/index.tsx | 33 ++++- .../fun_create_partisipan_by_user_id.ts | 21 +++ .../colab/fun/create/fun_create_proyek.ts | 8 +- .../fun/get/cek_partisipasi_by_user_id.ts | 22 +++ .../colab/fun/get/get_list_all_proyek.ts | 37 ++++- .../colab/fun/get/get_list_by_status_id.ts | 5 + .../fun/get/get_list_partisipan_by_id.ts | 22 +++ .../colab/fun/get/get_one_by_id.ts | 33 +++++ src/app_modules/colab/main/beranda.tsx | 38 ++++-- .../colab/main/proyek/partisipasi.tsx | 2 +- src/app_modules/colab/main/proyek/saya.tsx | 2 +- src/app_modules/colab/main/status/publish.tsx | 2 +- src/app_modules/colab/model/interface.ts | 19 ++- 23 files changed, 435 insertions(+), 122 deletions(-) create mode 100644 src/app_modules/colab/component/card_view/card_section_jumlah_partisipan.tsx delete mode 100644 src/app_modules/colab/component/card_view/jumlah_partisipan.tsx create mode 100644 src/app_modules/colab/fun/create/fun_create_partisipan_by_user_id.ts create mode 100644 src/app_modules/colab/fun/get/cek_partisipasi_by_user_id.ts create mode 100644 src/app_modules/colab/fun/get/get_list_by_status_id.ts create mode 100644 src/app_modules/colab/fun/get/get_list_partisipan_by_id.ts create mode 100644 src/app_modules/colab/fun/get/get_one_by_id.ts diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 1ab4504c..c7da429b 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -734,7 +734,7 @@ model ProjectCollaboration { title String lokasi String purpose String @db.Text - benefit String @db.Text + benefit String? @db.Text ProjectCollaborationMaster_Industri ProjectCollaborationMaster_Industri? @relation(fields: [projectCollaborationMaster_IndustriId], references: [id]) projectCollaborationMaster_IndustriId Int? diff --git a/src/app/dev/colab/detail/main_detail/[id]/page.tsx b/src/app/dev/colab/detail/main_detail/[id]/page.tsx index 88b5c9b4..1ceafec1 100644 --- a/src/app/dev/colab/detail/main_detail/[id]/page.tsx +++ b/src/app/dev/colab/detail/main_detail/[id]/page.tsx @@ -1,13 +1,25 @@ import { Colab_MainDetail } from "@/app_modules/colab"; +import colab_funCekPartisipasiById from "@/app_modules/colab/fun/get/cek_partisipasi_by_user_id"; +import colab_getListPartisipanById from "@/app_modules/colab/fun/get/get_list_partisipan_by_id"; +import colab_getOneCollaborationById from "@/app_modules/colab/fun/get/get_one_by_id"; import { User_getUserId } from "@/app_modules/fun_global/get_user_token"; export default async function Page({ params }: { params: { id: string } }) { - let colabId = params.id - const userLoginId = await User_getUserId() + let colabId = params.id; + const userLoginId = await User_getUserId(); + const dataColab = await colab_getOneCollaborationById(colabId); + const listPartisipan = await colab_getListPartisipanById(colabId) + const cekPartisipan = await colab_funCekPartisipasiById(colabId) + return ( <> - + ); } diff --git a/src/app/dev/colab/main/beranda/page.tsx b/src/app/dev/colab/main/beranda/page.tsx index 62cde404..bb0c963c 100644 --- a/src/app/dev/colab/main/beranda/page.tsx +++ b/src/app/dev/colab/main/beranda/page.tsx @@ -1,7 +1,12 @@ import { Colab_Beranda } from "@/app_modules/colab"; +import colab_getListAllProyek from "@/app_modules/colab/fun/get/get_list_all_proyek"; export default async function Page() { - return<> - - + const listData = await colab_getListAllProyek() + + return ( + <> + + + ); } \ No newline at end of file diff --git a/src/app_modules/colab/component/card_view/card_section_data.tsx b/src/app_modules/colab/component/card_view/card_section_data.tsx index 911d5ecc..dfe205bd 100644 --- a/src/app_modules/colab/component/card_view/card_section_data.tsx +++ b/src/app_modules/colab/component/card_view/card_section_data.tsx @@ -6,13 +6,16 @@ import { ComponentGlobal_NotifikasiPeringatan } from "@/app_modules/component_gl import { Card, Center, Title, Stack, Grid, Text } from "@mantine/core"; import { useRouter } from "next/navigation"; import { useState } from "react"; +import { MODEL_COLLABORATION } from "../../model/interface"; export default function ComponentColab_CardSectionData({ colabId, path, + data, }: { colabId?: any; path?: any; + data?: MODEL_COLLABORATION; }) { const router = useRouter(); @@ -30,7 +33,7 @@ export default function ComponentColab_CardSectionData({ >
- Judul Proyek{" "} + {data?.title ? data.title : "Judul Proyek"}
@@ -44,7 +47,11 @@ export default function ComponentColab_CardSectionData({ : - Industri + + {data?.ProjectCollaborationMaster_Industri.name + ? data?.ProjectCollaborationMaster_Industri?.name + : "Industri"} + @@ -59,7 +66,7 @@ export default function ComponentColab_CardSectionData({ - Lokasi dari proyek{" "} + {data?.lokasi ? data?.lokasi : "Lokasi dari proyek"} @@ -69,10 +76,9 @@ export default function ComponentColab_CardSectionData({ Tujuan proyek - Lorem ipsum dolor sit amet consectetur adipisicing elit. Nam - repudiandae nostrum temporibus velit possimus, voluptate inventore - recusandae hic ipsa praesentium deserunt, fuga asperiores - doloremque amet incidunt explicabo ea eius earum. + {data?.purpose + ? data?.purpose + : "Lorem ipsum dolor sit amet, consectetur adipisicing elit. Maiores odio nihil in animi expedita, suscipit excepturi pariatur totam esse officiis enim cumque. Quidem, facere aliquam. Sunt laboriosam incidunt iste amet"} diff --git a/src/app_modules/colab/component/card_view/card_section_header_author_name.tsx b/src/app_modules/colab/component/card_view/card_section_header_author_name.tsx index 7e7b1e58..ddb728fc 100644 --- a/src/app_modules/colab/component/card_view/card_section_header_author_name.tsx +++ b/src/app_modules/colab/component/card_view/card_section_header_author_name.tsx @@ -20,13 +20,13 @@ export default function ComponentColab_CardSectionHeaderAuthorName({ authorName?: string; tglPublish?: Date; isPembatas?: boolean; - jumlah_partisipan?: number; + jumlah_partisipan?: any[] }) { const router = useRouter(); return ( <> - + - - {jumlah_partisipan - ? jumlah_partisipan + " " + "partisipan" - : 0 + " " + "partisipan"} - + {tglPublish ? ( + + {new Intl.DateTimeFormat("id-ID").format(tglPublish)} + + ) : ( + "" + )} diff --git a/src/app_modules/colab/component/card_view/card_section_jumlah_partisipan.tsx b/src/app_modules/colab/component/card_view/card_section_jumlah_partisipan.tsx new file mode 100644 index 00000000..af073874 --- /dev/null +++ b/src/app_modules/colab/component/card_view/card_section_jumlah_partisipan.tsx @@ -0,0 +1,34 @@ +"use client"; + +import { Stack, Divider, Center, Text, Grid, Card } from "@mantine/core"; +import { IconUsersGroup } from "@tabler/icons-react"; + +export default function ComponentColab_JumlahPartisipan({ + jumlah, +}: { + jumlah?: any[]; +}) { + return ( + <> + + + +
+ + + + {jumlah?.length ? jumlah?.length : 0} + + + + + Partisipan + + + +
+
+
+ + ); +} diff --git a/src/app_modules/colab/component/card_view/jumlah_partisipan.tsx b/src/app_modules/colab/component/card_view/jumlah_partisipan.tsx deleted file mode 100644 index aea8f9a9..00000000 --- a/src/app_modules/colab/component/card_view/jumlah_partisipan.tsx +++ /dev/null @@ -1,28 +0,0 @@ -"use client"; - -import { Stack, Divider, Center, Text, Grid } from "@mantine/core"; -import { IconUsersGroup } from "@tabler/icons-react"; - -export default function ComponentColab_JumlahPartisipan() { - return ( - <> - - -
- - - - 12 - - - - - Partisipan - - - -
-
- - ); -} diff --git a/src/app_modules/colab/component/detail/detail_data.tsx b/src/app_modules/colab/component/detail/detail_data.tsx index d99f556e..ce8d7dab 100644 --- a/src/app_modules/colab/component/detail/detail_data.tsx +++ b/src/app_modules/colab/component/detail/detail_data.tsx @@ -1,15 +1,20 @@ -"use client" +"use client"; import { Stack, Box, Center, Title, Grid, Text } from "@mantine/core"; import ComponentColab_AuthorNameOnHeader from "../header_author_name"; +import { MODEL_COLLABORATION } from "../../model/interface"; -export default function ComponentColab_DetailData() { +export default function ComponentColab_DetailData({ + data, +}: { + data?: MODEL_COLLABORATION; +}) { return ( <> -
- Judul Proyek +
+ {data?.title ? data.title : "Judul Proyek"}
@@ -22,7 +27,11 @@ export default function ComponentColab_DetailData() { : - Industri + + {data?.ProjectCollaborationMaster_Industri.name + ? data.ProjectCollaborationMaster_Industri.name + : "Industri"} + @@ -37,7 +46,7 @@ export default function ComponentColab_DetailData() { - Lokasi dari proyek{" "} + {data?.lokasi ? data.lokasi : " Lokasi dari proyek"} @@ -46,22 +55,14 @@ export default function ComponentColab_DetailData() { Tujuan proyek - - Lorem ipsum dolor sit amet consectetur adipisicing elit. Nam - repudiandae nostrum temporibus velit possimus, voluptate - inventore recusandae hic ipsa praesentium deserunt, fuga - asperiores doloremque amet incidunt explicabo ea eius earum. - + {data?.purpose ? data?.purpose : "-"} Keutungan - Lorem ipsum dolor sit amet consectetur adipisicing elit. Nam - repudiandae nostrum temporibus velit possimus, voluptate - inventore recusandae hic ipsa praesentium deserunt, fuga - asperiores doloremque amet incidunt explicabo ea eius earum. + {data?.benefit ? data?.benefit : "-"} @@ -69,4 +70,4 @@ export default function ComponentColab_DetailData() { ); -} \ No newline at end of file +} diff --git a/src/app_modules/colab/component/detail/list_partisipasi_user.tsx b/src/app_modules/colab/component/detail/list_partisipasi_user.tsx index 490df2ef..cab13f20 100644 --- a/src/app_modules/colab/component/detail/list_partisipasi_user.tsx +++ b/src/app_modules/colab/component/detail/list_partisipasi_user.tsx @@ -1,29 +1,113 @@ -"use client" +"use client"; -import { Paper, Center, Title, ScrollArea, Box, Stack } from "@mantine/core"; +import { + Paper, + Center, + Title, + ScrollArea, + Box, + Stack, + Text, + Divider, + Button, +} from "@mantine/core"; import ComponentColab_AuthorNameOnHeader from "../header_author_name"; +import { + MODEL_COLLABORATION_MASTER, + MODEL_COLLABORATION_PARTISIPASI, +} from "../../model/interface"; +import _ from "lodash"; +import { useState } from "react"; +import colab_funCreatePartisipan from "../../fun/create/fun_create_partisipan_by_user_id"; +import colab_getListPartisipanById from "../../fun/get/get_list_partisipan_by_id"; +import { ComponentGlobal_NotifikasiBerhasil } from "@/app_modules/component_global/notif_global/notifikasi_berhasil"; +import { ComponentGlobal_NotifikasiGagal } from "@/app_modules/component_global/notif_global/notifikasi_gagal"; + +export default function ComponentColab_DetailListPartisipasiUser({ + listPartisipan, + userLoginId, + authorId, + colabId, + cekPartisipan, +}: { + listPartisipan?: MODEL_COLLABORATION_PARTISIPASI[]; + userLoginId?: string; + authorId?: string; + colabId?: string; + cekPartisipan?: boolean; +}) { + const [apply, setApply] = useState(false); + const [data, setData] = useState(listPartisipan); + + async function onJoin() { + await colab_funCreatePartisipan(colabId as any, userLoginId as any).then( + async (res) => { + if (res.status === 201) { + await colab_getListPartisipanById(colabId as any).then((val) => { + setApply(true); + setData(val as any); + ComponentGlobal_NotifikasiBerhasil(res.message); + }); + } else { + ComponentGlobal_NotifikasiGagal(res.message); + } + } + ); + } -export default function ComponentColab_DetailListPartisipasiUser() { return ( <> - -
- Partispasi User (12) -
{" "} - - - - {Array(10) - .fill(0) - .map((e, i) => ( - - - - ))} - - - -
+ {/*
{JSON.stringify(data, null, 2)}
*/} + + {userLoginId !== authorId ? ( +
+ +
+ ) : ( + "" + )} + + + +
+ Partispasi User ({data?.length}) +
{" "} + + + + {data?.length === 0 ? ( +
+ + Tidak ada partisipan + +
+ ) : ( + data?.map((e, i) => ( + + + + )) + )} +
+
+
+
+
+
); -} \ No newline at end of file +} diff --git a/src/app_modules/colab/create/index.tsx b/src/app_modules/colab/create/index.tsx index 57589bb3..150396fb 100644 --- a/src/app_modules/colab/create/index.tsx +++ b/src/app_modules/colab/create/index.tsx @@ -4,10 +4,15 @@ import { RouterColab } from "@/app/lib/router_hipmi/router_colab"; import { Button, Select, Stack, TextInput, Textarea } from "@mantine/core"; import { useRouter } from "next/navigation"; import { useState } from "react"; -import { MODEL_COLLABORATION_MASTER } from "../model/interface"; +import { + MODEL_COLLABORATION, + MODEL_COLLABORATION_MASTER, +} from "../model/interface"; import colab_funCreateProyek from "../fun/create/fun_create_proyek"; import { ComponentGlobal_NotifikasiBerhasil } from "@/app_modules/component_global/notif_global/notifikasi_berhasil"; import { ComponentGlobal_NotifikasiGagal } from "@/app_modules/component_global/notif_global/notifikasi_gagal"; +import _ from "lodash"; +import { ComponentGlobal_NotifikasiPeringatan } from "@/app_modules/component_global/notif_global/notifikasi_peringatan"; export default function Colab_Create({ listIndustri, @@ -80,7 +85,6 @@ export default function Colab_Create({