feat : update module
Deskripsi: - update announcement and api - update position and api No Issue
This commit is contained in:
@@ -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 }
|
||||
9
src/module/announcement/lib/api_announcement.ts
Normal file
9
src/module/announcement/lib/api_announcement.ts
Normal 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);
|
||||
}
|
||||
24
src/module/announcement/lib/type_announcement.ts
Normal file
24
src/module/announcement/lib/type_announcement.ts
Normal 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
|
||||
}
|
||||
@@ -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}
|
||||
>
|
||||
@@ -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")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
@@ -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}>
|
||||
@@ -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 (
|
||||
@@ -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>
|
||||
)
|
||||
}
|
||||
@@ -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>
|
||||
)
|
||||
}
|
||||
@@ -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>
|
||||
)
|
||||
}
|
||||
Reference in New Issue
Block a user