#Job Vacancy

## feat
- Tampilan user
### No Issuue
This commit is contained in:
2024-02-21 15:17:34 +08:00
parent 44f585a599
commit 7f3196afef
65 changed files with 2216 additions and 448 deletions

View File

@@ -0,0 +1,17 @@
"use client";
import ComponentGlobal_AuthorNameOnHeader from "@/app_modules/component_global/author_name_on_header";
import { Stack, Card, Grid, Image, Text } from "@mantine/core";
import ComponentJob_CardViewStatus from "../component/card_view_status";
import { RouterJob } from "@/app/lib/router_hipmi/router_job";
export default function Job_Arsip() {
return (
<>
<ComponentJob_CardViewStatus
listData={[{ id: 1 }, { id: 2 }]}
path={RouterJob.detail_arsip}
/>
</>
);
}

View File

@@ -0,0 +1,73 @@
"use client";
import { RouterJob } from "@/app/lib/router_hipmi/router_job";
import { RouterVote } from "@/app/lib/router_hipmi/router_vote";
import ComponentGlobal_AuthorNameOnHeader from "@/app_modules/component_global/author_name_on_header";
import ComponentGlobal_HeaderTamplate from "@/app_modules/component_global/header_tamplate";
import {
ActionIcon,
Affix,
Card,
Grid,
Image,
Stack,
Text,
Title,
rem,
} from "@mantine/core";
import { IconCirclePlus } from "@tabler/icons-react";
import { useRouter } from "next/navigation";
export default function Job_Beranda() {
const router = useRouter();
return (
<>
<Affix position={{ bottom: rem(100), right: rem(30) }}>
<ActionIcon
size={"xl"}
radius={"xl"}
variant="transparent"
bg={"blue"}
onClick={() => {
router.push(RouterJob.create);
}}
>
<IconCirclePlus color="white" size={40} />
</ActionIcon>
</Affix>
<Stack>
{Array(5)
.fill(0)
.map((e, i) => (
<Card key={i} shadow="lg" withBorder p={30} radius={"md"}>
<Card.Section>
<ComponentGlobal_AuthorNameOnHeader />
</Card.Section>
<Card.Section onClick={() => router.push(RouterJob.main_detail)}>
<Grid>
<Grid.Col span={6}>
<Image alt="foto" src={"/aset/no-file.png"} />
</Grid.Col>
<Grid.Col span={6}>
<Stack justify="center" h={"100%"}>
<Text fw={"bold"} fz={20} truncate>
Judul Lowongan Kerja
</Text>
<Text lineClamp={3}>
Lorem ipsum dolor sit amet consectetur, adipisicing
elit. Laboriosam est id neque iste voluptatem
consequuntur veritatis dolorem illo et, repellat
praesentium maiores amet omnis voluptas aliquid tenetur
nam sint obcaecati.
</Text>
</Stack>
</Grid.Col>
</Grid>
</Card.Section>
</Card>
))}
</Stack>
</>
);
}

View File

@@ -0,0 +1,91 @@
"use client";
import {
ActionIcon,
AppShell,
Center,
Footer,
Grid,
Stack,
Text,
} from "@mantine/core";
import React, { useState } from "react";
import ComponentJob_HeaderTamplate from "../component/header_tamplate";
import { IconHistory, IconHome, IconReservedLine } from "@tabler/icons-react";
import { useRouter } from "next/navigation";
import { RouterJob } from "@/app/lib/router_hipmi/router_job";
import { useAtom } from "jotai";
import { gs_job_hot_menu } from "../global_state";
export default function LayoutJob_Main({
children,
}: {
children: React.ReactNode;
}) {
const router = useRouter();
const [hotMenu, setHotMenu] = useAtom(gs_job_hot_menu);
const listFooter = [
{
id: 1,
name: "Beranda",
path: RouterJob.beranda,
icon: <IconHome />,
},
{
id: 2,
name: "Status",
path: RouterJob.status,
icon: <IconReservedLine />,
},
{
id: 3,
name: "Arsip",
path: RouterJob.arsip,
icon: <IconHistory />,
},
];
return (
<>
<AppShell
header={<ComponentJob_HeaderTamplate title="Job Vacancy" />}
footer={
<Footer height={70} bg={"dark"}>
<Grid>
{listFooter.map((e) => (
<Grid.Col
key={e.id}
span={"auto"}
pt={"md"}
onClick={() => {
router.replace(e.path);
setHotMenu(e.id);
}}
>
<Center>
<Stack align="center" spacing={0}>
<ActionIcon
variant="transparent"
c={hotMenu === e.id ? "blue" : "white"}
>
{e.icon}
</ActionIcon>
<Text fz={10} c={hotMenu === e.id ? "blue" : "white"}>
{e.name}
</Text>
</Stack>
</Center>
</Grid.Col>
))}
</Grid>
</Footer>
}
>
{children}
</AppShell>
</>
);
}

View File

@@ -0,0 +1,16 @@
"use client";
import { Stack, Card, Grid, Image, Text } from "@mantine/core";
import ComponentJob_CardViewStatus from "../../component/card_view_status";
import { RouterJob } from "@/app/lib/router_hipmi/router_job";
export default function Job_Draft() {
return (
<>
<ComponentJob_CardViewStatus
listData={[{ id: 1 }, { id: 2 }]}
path={RouterJob.detail_draft}
/>
</>
);
}

View File

@@ -0,0 +1,46 @@
"use client";
import ComponentGlobal_AuthorNameOnHeader from "@/app_modules/component_global/author_name_on_header";
import { Stack, Card, Grid, Image, Text } from "@mantine/core";
import ComponentJob_CardViewStatus from "../../component/card_view_status";
import { RouterJob } from "@/app/lib/router_hipmi/router_job";
export default function Job_Publish() {
return (
<>
<ComponentJob_CardViewStatus
listData={[{ id: 1 }, { id: 2 }]}
path={RouterJob.detail_publish}
/>
{/* <Stack>
{Array(2)
.fill(0)
.map((e, i) => (
<Card key={i} shadow="lg" withBorder radius={"md"}>
<Card.Section>
<Grid>
<Grid.Col span={6}>
<Image alt="foto" src={"/aset/no-file.png"} />
</Grid.Col>
<Grid.Col span={6}>
<Stack justify="center" h={"100%"}>
<Text fw={"bold"} fz={20} truncate>
Judul Lowongan Kerja
</Text>
<Text lineClamp={3}>
Lorem ipsum dolor sit amet consectetur, adipisicing
elit. Laboriosam est id neque iste voluptatem
consequuntur veritatis dolorem illo et, repellat
praesentium maiores amet omnis voluptas aliquid tenetur
nam sint obcaecati.
</Text>
</Stack>
</Grid.Col>
</Grid>
</Card.Section>
</Card>
))}
</Stack> */}
</>
);
}

View File

@@ -0,0 +1,16 @@
"use client";
import { Stack, Card, Grid, Image, Text } from "@mantine/core";
import ComponentJob_CardViewStatus from "../../component/card_view_status";
import { RouterJob } from "@/app/lib/router_hipmi/router_job";
export default function Job_Reject() {
return (
<>
<ComponentJob_CardViewStatus
listData={[{ id: 1 }, { id: 2 }]}
path={RouterJob.detail_reject}
/>
</>
);
}

View File

@@ -0,0 +1,16 @@
"use client";
import { Stack, Card, Grid, Image, Text } from "@mantine/core";
import ComponentJob_CardViewStatus from "../../component/card_view_status";
import { RouterJob } from "@/app/lib/router_hipmi/router_job";
export default function Job_Review() {
return (
<>
<ComponentJob_CardViewStatus
listData={[{ id: 1 }, { id: 2 }]}
path={RouterJob.detail_review}
/>
</>
);
}

View File

@@ -0,0 +1,80 @@
"use client";
import { Stack, Tabs } from "@mantine/core";
import { useRouter } from "next/navigation";
import { useState } from "react";
import Job_Publish from "./publish";
import Job_Review from "./review";
import Job_Draft from "./draft";
import Job_Reject from "./reject";
import { useAtom } from "jotai";
import { gs_job_status } from "../../global_state";
export default function Job_Status({
listPublish,
listReview,
listDraft,
listReject,
}: {
listPublish: any[];
listReview: any[];
listDraft: any[];
listReject: any[];
}) {
const router = useRouter();
const [tabsStatus, setTabsStatus] = useAtom(gs_job_status);
const listTabs = [
{
id: 1,
path: <Job_Publish />,
value: "Publish",
},
{
id: 2,
path: <Job_Review />,
value: "Review",
},
{
id: 3,
path: <Job_Draft />,
value: "Draft",
},
{
id: 4,
path: <Job_Reject />,
value: "Reject",
},
];
return (
<>
<Tabs
color="blue"
variant="pills"
radius={"xl"}
defaultValue={"Publish"}
value={tabsStatus}
onTabChange={setTabsStatus}
>
<Stack>
<Tabs.List grow>
{listTabs.map((e) => (
<Tabs.Tab
key={e.id}
value={e.value}
bg={tabsStatus === e.value ? "blue" : "gray.1"}
fw={tabsStatus === e.value ? "bold" : "normal"}
>
{e.value}
</Tabs.Tab>
))}
</Tabs.List>
{listTabs.map((e) => (
<Tabs.Panel key={e.id} value={e.value}>
{e.path}
</Tabs.Panel>
))}
</Stack>
</Tabs>
</>
);
}