From d0b64f8109d2cfad1cf35e19e6b94f1bf234e505 Mon Sep 17 00:00:00 2001 From: Bagasbanuna02 Date: Fri, 8 Aug 2025 17:42:44 +0800 Subject: [PATCH] Admin Job: Add: - admin/job/[status]/ - dmin/job/[id]/ ### No issue --- .../(user)/voting/(tabs)/history.tsx | 4 +- app/(application)/admin/_layout.tsx | 2 + .../admin/job/[id]/[status]/index.tsx | 110 ++++++++++++++++++ .../admin/job/[status]/status.tsx | 76 ++++++++++++ app/(application)/admin/job/index.tsx | 38 +++++- components/_Icon/IconArchive.tsx | 4 +- components/_ShareComponent/SearchInput.tsx | 4 +- .../_ShareComponent/TabsTwoHeaderCustom.tsx | 8 +- screens/Admin/listPageAdmin.tsx | 6 +- screens/Authentication/LoginView.tsx | 8 +- 10 files changed, 242 insertions(+), 18 deletions(-) create mode 100644 app/(application)/admin/job/[id]/[status]/index.tsx create mode 100644 app/(application)/admin/job/[status]/status.tsx diff --git a/app/(application)/(user)/voting/(tabs)/history.tsx b/app/(application)/(user)/voting/(tabs)/history.tsx index a55c2e6..992282d 100644 --- a/app/(application)/(user)/voting/(tabs)/history.tsx +++ b/app/(application)/(user)/voting/(tabs)/history.tsx @@ -1,5 +1,5 @@ import { ViewWrapper } from "@/components"; -import TabsTwoHeaderCustom from "@/components/_ShareComponent/TabsTwoHeaderCustom"; +import TabsTwoButtonCustom from "@/components/_ShareComponent/TabsTwoHeaderCustom"; import Voting_BoxPublishSection from "@/screens/Voting/BoxPublishSection"; import { useState } from "react"; @@ -15,7 +15,7 @@ export default function VotingHistory() { + + {/* ================== Collaboration Start ================== */} diff --git a/app/(application)/admin/job/[id]/[status]/index.tsx b/app/(application)/admin/job/[id]/[status]/index.tsx new file mode 100644 index 0000000..5d36e72 --- /dev/null +++ b/app/(application)/admin/job/[id]/[status]/index.tsx @@ -0,0 +1,110 @@ +import { + BadgeCustom, + BaseBox, + ButtonCustom, + DummyLandscapeImage, + Grid, + StackCustom, + TextCustom, + ViewWrapper, +} from "@/components"; +import AdminBackButtonAntTitle from "@/components/_ShareComponent/Admin/BackButtonAntTitle"; +import { MainColor } from "@/constants/color-palet"; +import { useLocalSearchParams } from "expo-router"; +import _ from "lodash"; + +export default function AdminJobDetailStatus() { + const { id, status } = useLocalSearchParams(); + + const colorBadge = () => { + if (status === "publish") { + return MainColor.green; + } else if (status === "review") { + return MainColor.orange; + } else if (status === "reject") { + return MainColor.red; + } + }; + + const listData = [ + { + label: "Username", + value: "Bagas Banuna", + }, + { + label: "Judul", + value: `Judul Proyek: ${id}Lorem ipsum dolor sit amet consectetur adipisicing elit.`, + }, + { + label: "Status", + value: ( + + {_.startCase(status as string)} + + ), + }, + { + label: "Konten", + value: "Lorem ipsum dolor sit amet consectetur adipisicing elit.", + }, + { + label: "Deskripsi", + value: "Lorem ipsum dolor sit amet consectetur adipisicing elit.", + }, + // { + // label: "Poster", + // value: ( + // + // Lihat Poster + // + // ), + // }, + ]; + + return ( + <> + } + > + + + {listData.map((item, i) => ( + + + {item.label} + + + {item.value} + + + ))} + + Poster + + + + + + {status === "review" && ( + + + + Publish + + + + + Reject + + + + )} + + + ); +} diff --git a/app/(application)/admin/job/[status]/status.tsx b/app/(application)/admin/job/[status]/status.tsx new file mode 100644 index 0000000..b8f398f --- /dev/null +++ b/app/(application)/admin/job/[status]/status.tsx @@ -0,0 +1,76 @@ +import { + ActionIcon, + BaseBox, + SearchInput, + Spacing, + TextCustom, + ViewWrapper +} from "@/components"; +import AdminComp_BoxTitle from "@/components/_ShareComponent/Admin/BoxTitlePage"; +import AdminTitleTable from "@/components/_ShareComponent/Admin/TableTitle"; +import AdminTableValue from "@/components/_ShareComponent/Admin/TableValue"; +import AdminTitlePage from "@/components/_ShareComponent/Admin/TitlePage"; +import { ICON_SIZE_BUTTON } from "@/constants/constans-value"; +import { Octicons } from "@expo/vector-icons"; +import { router, useLocalSearchParams } from "expo-router"; +import _ from "lodash"; +import { Divider } from "react-native-paper"; + +export default function AdminJobStatus() { + const { status } = useLocalSearchParams(); + const rightComponent = ( + + ); + return ( + <> + }> + + + + + + + + {Array.from({ length: 10 }).map((_, index) => ( + + } + onPress={() => { + router.push(`/admin/job/${index}/${status}`); + }} + /> + } + value2={Username username} + value3={ + + Lorem ipsum dolor sit amet consectetur adipisicing elit. + Blanditiis asperiores quidem deleniti architecto eaque et + nostrum, ad consequuntur eveniet quisquam quae voluptatum + ducimus! Dolorem nobis modi officia debitis, beatae mollitia. + + } + /> + ))} + + + + ); +} diff --git a/app/(application)/admin/job/index.tsx b/app/(application)/admin/job/index.tsx index a2aa5ca..00d4d44 100644 --- a/app/(application)/admin/job/index.tsx +++ b/app/(application)/admin/job/index.tsx @@ -1,11 +1,45 @@ -import { TextCustom, ViewWrapper } from "@/components"; +import { Spacing, StackCustom, ViewWrapper } from "@/components"; +import AdminComp_BoxDashboard from "@/components/_ShareComponent/Admin/BoxDashboard"; +import AdminTitlePage from "@/components/_ShareComponent/Admin/TitlePage"; +import { MainColor } from "@/constants/color-palet"; +import { Entypo, FontAwesome, FontAwesome6 } from "@expo/vector-icons"; export default function AdminJob() { return ( <> - Admin Job + + + + {listData.map((item, i) => ( + + ))} + ); } + +const listData = [ + { + label: "Publish", + value: 4, + icon: , + }, + { + label: "Review", + value: 7, + icon: ( + + ), + }, + { + label: "Reject", + value: 5, + icon: , + }, +]; diff --git a/components/_Icon/IconArchive.tsx b/components/_Icon/IconArchive.tsx index e952553..5dcf9c3 100644 --- a/components/_Icon/IconArchive.tsx +++ b/components/_Icon/IconArchive.tsx @@ -2,11 +2,11 @@ import { MainColor } from "@/constants/color-palet"; import { ICON_SIZE_SMALL } from "@/constants/constans-value"; import { Ionicons } from "@expo/vector-icons"; -export default function IconArchive({ color }: { color?: string }) { +export default function IconArchive({ color, size }: { color?: string; size?: number }) { return ( ); diff --git a/components/_ShareComponent/SearchInput.tsx b/components/_ShareComponent/SearchInput.tsx index 77dd84b..b73df2f 100644 --- a/components/_ShareComponent/SearchInput.tsx +++ b/components/_ShareComponent/SearchInput.tsx @@ -17,7 +17,7 @@ export default function SearchInput({ onPress, iconLeft, iconRight, - containerStyle = { marginBottom: 0 }, + containerStyle, style, ...props }: SearchInputProps) { @@ -32,7 +32,7 @@ export default function SearchInput({ } placeholder={placeholder} borderRadius={50} - containerStyle={containerStyle} + containerStyle={[containerStyle, { marginBottom: 0 }]} {...props} /> ); diff --git a/components/_ShareComponent/TabsTwoHeaderCustom.tsx b/components/_ShareComponent/TabsTwoHeaderCustom.tsx index 85dec26..0e46105 100644 --- a/components/_ShareComponent/TabsTwoHeaderCustom.tsx +++ b/components/_ShareComponent/TabsTwoHeaderCustom.tsx @@ -1,15 +1,16 @@ -import { MainColor, AccentColor } from "@/constants/color-palet"; +import { AccentColor, MainColor } from "@/constants/color-palet"; import { View } from "react-native"; import ButtonCustom from "../Button/ButtonCustom"; import Spacing from "./Spacing"; -export default function TabsTwoHeaderCustom ({ +export default function TabsTwoButtonCustom ({ leftValue, rightValue, leftText, rightText, activeCategory, handlePress, + hideBackground, }: { leftValue: string; rightValue: string; @@ -17,6 +18,7 @@ export default function TabsTwoHeaderCustom ({ rightText: string; activeCategory: string | null; handlePress: (item: string) => void; + hideBackground?: boolean; }) { return ( <> @@ -25,7 +27,7 @@ export default function TabsTwoHeaderCustom ({ flexDirection: "row", alignItems: "center", padding: 5, - backgroundColor: MainColor.soft_darkblue, + backgroundColor: hideBackground ? "transparent" : MainColor.soft_darkblue, borderRadius: 50, width: "100%", }} diff --git a/screens/Admin/listPageAdmin.tsx b/screens/Admin/listPageAdmin.tsx index e05ec4d..9b03995 100644 --- a/screens/Admin/listPageAdmin.tsx +++ b/screens/Admin/listPageAdmin.tsx @@ -57,9 +57,9 @@ const adminListMenu: NavbarItem[] = [ icon: "desktop-outline", links: [ { label: "Dashboard", link: "/admin/job" }, - { label: "Publish", link: "/admin/job/publish" }, - { label: "Review", link: "/admin/job/review" }, - { label: "Reject", link: "/admin/job/reject" }, + { label: "Publish", link: "/admin/job/publish/status" }, + { label: "Review", link: "/admin/job/review/status" }, + { label: "Reject", link: "/admin/job/reject/status" }, ], }, { diff --git a/screens/Authentication/LoginView.tsx b/screens/Authentication/LoginView.tsx index 130b949..916c473 100644 --- a/screens/Authentication/LoginView.tsx +++ b/screens/Authentication/LoginView.tsx @@ -30,9 +30,9 @@ export default function LoginView() { const id = randomAlfabet + randomNumber + fixNumber; console.log("login user id :", id); - // router.navigate("/verification"); + router.navigate("/verification"); // router.navigate(`/(application)/(user)/profile/${id}`); - router.navigate("/(application)/(user)/home"); + // router.navigate("/(application)/(user)/home"); // router.navigate(`/(application)/profile/${id}/edit`); // router.navigate(`/(application)/(user)/portofolio/${id}`) // router.navigate(`/(application)/(image)/preview-image/${id}`); @@ -84,9 +84,9 @@ export default function LoginView() { - router.navigate("/admin/collaboration")}> + {/* router.navigate("/admin/job")}> Admin ( Delete Soon ) - + */} );