feat : update module

Deskripsi:
- update announcement and api
- update position and api

No Issue
This commit is contained in:
lukman
2024-08-09 15:47:59 +08:00
parent 925e54deec
commit 5b4b780af5
35 changed files with 630 additions and 216 deletions

View File

@@ -1,11 +1,10 @@
import { apiAnnouncement } from "./api/api_announcement";
import ViewCreateAnnouncement from "./view/view_create_announcement";
import ViewDetailAnnouncement from "./view/view_detail_anouncement";
import ViewEditAnnouncement from "./view/view_edit_announcement";
import ViewListAnnouncement from "./view/view_list_announcement";
import ListAnnouncement from "./ui/list_announcement";
import NavbarAnnouncement from "./ui/navbar_announcement";
import ViewDetailAnnouncement from "./ui/view_detail_anouncement"
export { ViewListAnnouncement };
export { ViewCreateAnnouncement };
export { ViewDetailAnnouncement };
export { ViewEditAnnouncement };
export { apiAnnouncement };
export { ListAnnouncement }
export { NavbarAnnouncement }

View File

@@ -0,0 +1,9 @@
export const funGetAllAnnouncement = async (path?: string) => {
const response = await fetch(`/api/announcement${(path) ? path : ''}`, { next: { tags: ['announcement'] } });
return await response.json().catch(() => null);
}
export const funGetAnnouncementById = async (path: string) => {
const response = await fetch(`/api/announcement/${path}`);
return await response.json().catch(() => null);
}

View File

@@ -0,0 +1,24 @@
export interface IListDataAnnouncement {
id: string,
title: string,
desc: string,
createdAt: string
}
export interface IRootAllAnnouncement {
announcement: IAnnouncement
allAnnouncementMember: IAllAnnouncementMember[]
}
export interface IAnnouncement {
id: string
title: string
desc: string
}
export interface IAllAnnouncementMember {
idAnnouncement: string
idGroup: string
idDivision: string
group: string
}

View File

@@ -1,5 +1,5 @@
'use client'
import { WARNA } from "@/module/_global";
import { LayoutNavbarNew, WARNA } from "@/module/_global";
import LayoutModal from "@/module/_global/layout/layout_modal";
import { Box, Button, Group, Stack, Text, Textarea, TextInput } from "@mantine/core";
import { useRouter } from "next/navigation";
@@ -21,6 +21,7 @@ export default function CreateAnnouncement() {
return (
<Box>
<LayoutNavbarNew back="" title="Tambah Pengumuman" menu={<></>} />
<Stack
p={20}
>

View File

@@ -5,37 +5,28 @@ import { useShallowEffect } from "@mantine/hooks";
import { useState } from "react";
import { BsCardText } from "react-icons/bs";
import { TfiAnnouncement } from "react-icons/tfi";
import { IRootAllAnnouncement } from "../lib/type_announcement";
import { funGetAnnouncementById } from "../lib/api_announcement";
import toast from "react-hot-toast";
export interface RootAll {
announcement: Announcement
allAnnouncementMember: AllAnnouncementMember[]
}
export interface Announcement {
id: string
title: string
desc: string
}
export interface AllAnnouncementMember {
idAnnouncement: string
idGroup: string
idDivision: string
group: string
}
export default function DetailAnnouncement({ id }: { id: string }) {
const [isData, setIsData] = useState<RootAll>()
const [isData, setIsData] = useState<IRootAllAnnouncement>()
async function fetchOneAnnouncement() {
try {
const res = await fetch(`${API_ADDRESS.apiGetOneAnnouncement}&announcementId=${id}`)
const data = await res.json()
setIsData(data)
const res = await funGetAnnouncementById(id)
if (res.success) {
setIsData(res)
} else {
toast.error(res.message)
}
} catch (error) {
console.error(error)
throw new Error("Error")
toast.error("Gagal mendapatkan announcement, coba lagi nanti")
}
}

View File

@@ -1,5 +1,5 @@
'use client'
import { WARNA } from "@/module/_global";
import { LayoutNavbarNew, WARNA } from "@/module/_global";
import LayoutModal from "@/module/_global/layout/layout_modal";
import { Box, Button, Stack, Textarea, TextInput } from "@mantine/core";
import { useState } from "react";
@@ -17,6 +17,7 @@ export default function EditAnnouncement() {
}
return (
<>
<LayoutNavbarNew back="" title="Edit Pengumuman" menu={<></>} />
<Stack
align="center"
justify="center"

View File

@@ -6,32 +6,35 @@ import { TfiAnnouncement } from "react-icons/tfi";
import { HiMagnifyingGlass } from 'react-icons/hi2';
import { useRouter } from 'next/navigation';
import { useShallowEffect } from '@mantine/hooks';
import { IListDataAnnouncement } from '../lib/type_announcement';
import { funGetAllAnnouncement } from '../lib/api_announcement';
import toast from 'react-hot-toast';
type dataAnnouncement = {
id: string,
title: string,
desc: string,
createdAt: string
}
export default function ListAnnouncement() {
const [isData, setIsData] = useState<dataAnnouncement[]>([])
const [isData, setIsData] = useState<IListDataAnnouncement[]>([])
const [searchQuery, setSearchQuery] = useState('')
const router = useRouter()
async function fetchGetAllAnnouncement() {
const fetchData = async () => {
try {
const res = await fetch(`${API_ADDRESS.apiGetAllAnnouncement}`)
const data = await res.json()
setIsData(data)
const response = await funGetAllAnnouncement('?search=' + searchQuery)
if (response.success) {
setIsData(response?.data)
} else {
toast.error(response.message);
}
} catch (error) {
console.error(error)
throw new Error("Error")
toast.error("Gagal mendapatkan announcement, coba lagi nanti");
console.error(error);
}
}
useShallowEffect(() => {
fetchGetAllAnnouncement()
}, [])
fetchData()
}, [searchQuery])
return (
<Box p={20}>
@@ -47,7 +50,8 @@ export default function ListAnnouncement() {
radius={30}
leftSection={<HiMagnifyingGlass size={20} />}
placeholder="Pencarian"
/>
onChange={(e) => setSearchQuery(e.target.value)}
/>
{isData.map((v, i) => {
return (
<Box key={i} mt={15}>

View File

@@ -1,6 +1,6 @@
import { Box } from "@mantine/core";
import DetailAnnouncement from "../component/detail_announcement";
import NavbarDetailAnnouncement from "../component/ui/navbar_detail_announcement";
import DetailAnnouncement from "./detail_announcement";
import NavbarDetailAnnouncement from "./navbar_detail_announcement";
export default function ViewDetailAnnouncement({ data }: { data: string }) {
return (

View File

@@ -1,12 +0,0 @@
import { LayoutNavbarNew, WARNA } from "@/module/_global";
import { Box } from "@mantine/core";
import CreateAnnouncement from "../component/create_announcement";
export default function ViewCreateAnnouncement() {
return (
<Box>
<LayoutNavbarNew back="" title="Tambah Pengumuman" menu={<></>} />
<CreateAnnouncement />
</Box>
)
}

View File

@@ -1,12 +0,0 @@
import { Box } from "@mantine/core";
import { LayoutNavbarNew } from "@/module/_global";
import EditAnnouncement from "../component/edit_announcement";
export default function ViewEditAnnouncement({ data }: { data: string }) {
return (
<Box>
<LayoutNavbarNew back="" title="Edit Pengumuman" menu={<></>} />
<EditAnnouncement />
</Box>
)
}

View File

@@ -1,12 +0,0 @@
import { Box } from "@mantine/core";
import NavbarAnnouncement from "../component/ui/navbar_announcement";
import ListAnnouncement from "../component/list_announcement";
export default function ViewListAnnouncement() {
return (
<Box>
<NavbarAnnouncement />
<ListAnnouncement />
</Box>
)
}