diff --git a/public/assets/img/banner/Banner-1.png b/public/assets/img/banner/Banner-1.png new file mode 100644 index 0000000..4b1a4ec Binary files /dev/null and b/public/assets/img/banner/Banner-1.png differ diff --git a/src/app/(application)/banner/create/page.tsx b/src/app/(application)/banner/create/page.tsx index 78a7dff..6855875 100644 --- a/src/app/(application)/banner/create/page.tsx +++ b/src/app/(application)/banner/create/page.tsx @@ -1,3 +1,7 @@ +import { CreateBanner } from "@/module/banner"; + export default function Page() { - return
Tambah Banner
; + return ( + + ); } \ No newline at end of file diff --git a/src/app/(application)/banner/page.tsx b/src/app/(application)/banner/page.tsx index 057359c..cf5edef 100644 --- a/src/app/(application)/banner/page.tsx +++ b/src/app/(application)/banner/page.tsx @@ -1,3 +1,13 @@ + +import { ListBanner, NavbarBanner } from "@/module/banner"; +import { Box } from "@mantine/core"; + export default function Page() { - return
List Banner
; + return ( + + + + + + ); } \ No newline at end of file diff --git a/src/module/banner/index.ts b/src/module/banner/index.ts index 0a07d17..9b3343f 100644 --- a/src/module/banner/index.ts +++ b/src/module/banner/index.ts @@ -1 +1,4 @@ -//cobaa \ No newline at end of file +import NavbarBanner from "./ui/navbar_banner"; +import ListBanner from "./ui/list_banner"; +import CreateBanner from "./ui/create_banner"; +export {NavbarBanner, ListBanner, CreateBanner} \ No newline at end of file diff --git a/src/module/banner/ui/create_banner.tsx b/src/module/banner/ui/create_banner.tsx new file mode 100644 index 0000000..954cf34 --- /dev/null +++ b/src/module/banner/ui/create_banner.tsx @@ -0,0 +1,73 @@ +'use client' +import { LayoutNavbarNew, WARNA } from '@/module/_global'; +import { Box, Button, FileInput, Group, Paper, rem, Text, TextInput } from '@mantine/core'; +import { IconUpload, IconPhoto, IconX } from '@tabler/icons-react'; +import { Dropzone, DropzoneProps, IMAGE_MIME_TYPE } from '@mantine/dropzone'; +import React from 'react'; + +function CreateBanner(props: Partial) { + return ( + + } /> + + + + console.log('accepted files', files)} + onReject={(files) => console.log('rejected files', files)} + maxSize={5 * 1024 ** 2} + accept={IMAGE_MIME_TYPE} + {...props} + > + + + + + + + + + + + + + + Upload File + + + File Tidak Boleh Melebihi 500mb + + + + + + + Judul Banner} + placeholder='Judul Banner' + styles={{ + input: { + border: `1px solid ${"#D6D8F6"}`, + borderRadius: 10, + }, + }} + /> + + + + + + ); +} + +export default CreateBanner; diff --git a/src/module/banner/ui/drawer_banner.tsx b/src/module/banner/ui/drawer_banner.tsx new file mode 100644 index 0000000..1ceffba --- /dev/null +++ b/src/module/banner/ui/drawer_banner.tsx @@ -0,0 +1,35 @@ +import { TEMA } from '@/module/_global'; +import { useHookstate } from '@hookstate/core'; +import { Anchor, Box, Flex, SimpleGrid, Stack, Text } from '@mantine/core'; +import { useRouter } from 'next/navigation'; +import { useState } from 'react'; +import { IoAddCircle } from 'react-icons/io5'; + +function DrawerBanner({ onSuccess, }: { onSuccess: (val: boolean) => void; }) { + const [openDrawerBanner, setOpenDrawerBanner] = useState(false); + const tema = useHookstate(TEMA) + const router = useRouter(); + return ( + + + setOpenDrawerBanner(true)} + > + router.push("/banner/create")}> + + + + + + Tambah Banner + + + + + + + ); +} + +export default DrawerBanner; diff --git a/src/module/banner/ui/list_banner.tsx b/src/module/banner/ui/list_banner.tsx new file mode 100644 index 0000000..3283170 --- /dev/null +++ b/src/module/banner/ui/list_banner.tsx @@ -0,0 +1,77 @@ +'use client' +import { LayoutDrawer, SkeletonSingle, TEMA, WARNA } from '@/module/_global'; +import { useHookstate } from '@hookstate/core'; +import { Anchor, Box, Flex, Group, Image, SimpleGrid, Stack, Text, TextInput } from '@mantine/core'; +import _ from 'lodash'; +import { useRouter } from 'next/navigation'; +import React, { useState } from 'react'; +import { FaFile, FaPencil, FaTrash } from 'react-icons/fa6'; +import { HiMagnifyingGlass } from 'react-icons/hi2'; +import { IoAddCircle } from 'react-icons/io5'; + +function ListBanner() { + const tema = useHookstate(TEMA) + const [searchQuery, setSearchQuery] = useState('') + const [loading, setLoading] = useState(true); + const [isData, setData] = useState([]); + const [valChoose, setValChoose] = useState(""); + const router = useRouter(); + + + const [openDrawer, setOpenDrawer] = useState(false); + + return ( + + + + + {[...Array(5)].map((_, index) => ( +
{ setOpenDrawer(true) }}> + Banner {index + 1} + +
+ ))} + +
+
+
+ + setOpenDrawer(false)} + title={{"Menu"}} + > + + + + + + Edit + + + + + + + + View File + + + + + + + + Hapus + + + + + +
+ ); +} + +export default ListBanner; diff --git a/src/module/banner/ui/navbar_banner.tsx b/src/module/banner/ui/navbar_banner.tsx new file mode 100644 index 0000000..28efcb7 --- /dev/null +++ b/src/module/banner/ui/navbar_banner.tsx @@ -0,0 +1,28 @@ +'use client' +import { LayoutDrawer, LayoutNavbarNew, TEMA } from '@/module/_global'; +import { useHookstate } from '@hookstate/core'; +import { ActionIcon, rem } from '@mantine/core'; +import React, { useState } from 'react'; +import { HiMenu } from 'react-icons/hi'; +import DrawerBanner from './drawer_banner'; + +function NavbarBanner() { + const [isOpen, setOpen] = useState(false) + const tema = useHookstate(TEMA) + return ( + <> + setOpen(true)} variant="light" bg={tema.get().bgIcon} size="lg" radius="lg" aria-label="Settings"> + + + } + /> + setOpen(false)}> + { setOpen(false) }} /> + + + ); +} + +export default NavbarBanner; diff --git a/src/module/home/ui/features.tsx b/src/module/home/ui/features.tsx index b0503bf..086e87d 100644 --- a/src/module/home/ui/features.tsx +++ b/src/module/home/ui/features.tsx @@ -7,6 +7,7 @@ import { useRouter } from 'next/navigation'; import React from 'react'; import { HiMiniUserGroup, HiMiniPresentationChartBar, HiMegaphone, HiSquares2X2 } from "react-icons/hi2"; + export default function Features() { const router = useRouter() const isMobile = useMediaQuery('(max-width: 369px)'); diff --git a/src/module/home/ui/view_detail_feature.tsx b/src/module/home/ui/view_detail_feature.tsx index 49ad609..97b0654 100644 --- a/src/module/home/ui/view_detail_feature.tsx +++ b/src/module/home/ui/view_detail_feature.tsx @@ -9,6 +9,7 @@ import { FaUserTag, FaUserTie } from 'react-icons/fa6'; import { useHookstate } from '@hookstate/core'; import { useMediaQuery } from '@mantine/hooks'; import { IoColorPalette, IoColorPaletteOutline } from 'react-icons/io5'; +import { RiLayoutTop2Fill } from "react-icons/ri"; export default function ViewDetailFeature() { const router = useRouter() @@ -138,6 +139,22 @@ export default function ViewDetailFeature() { Tema + router.push('/banner')}> +
+ + + +
+
+ Banner +
+
}