diff --git a/src/app/(main)/scheduling/detail/page.tsx b/src/app/(main)/scheduling/detail/page.tsx
new file mode 100644
index 0000000..d6eced6
--- /dev/null
+++ b/src/app/(main)/scheduling/detail/page.tsx
@@ -0,0 +1,48 @@
+import { TypeEnum } from "@/app/utils/typeEnum";
+import ItemsSearch from "@/components/ItemsSearch";
+import { getServerI18n } from "@/i18n";
+import Add from "@mui/icons-material/Add";
+import Button from "@mui/material/Button";
+import Stack from "@mui/material/Stack";
+import Typography from "@mui/material/Typography";
+import { Metadata } from "next";
+import Link from "next/link";
+import { Suspense } from "react";
+
+export const metadata: Metadata = {
+ title: "Detail Scheduling",
+};
+
+const detailScheduling: React.FC = async () => {
+ const project = TypeEnum.PRODUCT
+ const { t } = await getServerI18n(project);
+ // preloadClaims();
+
+ return (
+ <>
+
+
+ {t("Detail Scheduling")}
+
+ {/* }
+ LinkComponent={Link}
+ href="product/create"
+ >
+ {t("Create product")}
+ */}
+
+ }>
+
+
+ >
+ );
+};
+
+export default detailScheduling;
diff --git a/src/app/(main)/scheduling/page.tsx b/src/app/(main)/scheduling/page.tsx
new file mode 100644
index 0000000..a819690
--- /dev/null
+++ b/src/app/(main)/scheduling/page.tsx
@@ -0,0 +1,11 @@
+import { Metadata } from "next";
+
+export const metadata: Metadata = {
+ title: "Scheduling",
+};
+
+const Scheduling: React.FC = async () => {
+ return null;
+};
+
+export default Scheduling;
diff --git a/src/app/(main)/scheduling/rough/page.tsx b/src/app/(main)/scheduling/rough/page.tsx
new file mode 100644
index 0000000..a6237e4
--- /dev/null
+++ b/src/app/(main)/scheduling/rough/page.tsx
@@ -0,0 +1,48 @@
+import { TypeEnum } from "@/app/utils/typeEnum";
+import RoughSchedule from "@/components/RoughSchedule";
+import { getServerI18n } from "@/i18n";
+import Add from "@mui/icons-material/Add";
+import Button from "@mui/material/Button";
+import Stack from "@mui/material/Stack";
+import Typography from "@mui/material/Typography";
+import { Metadata } from "next";
+import Link from "next/link";
+import { Suspense } from "react";
+
+export const metadata: Metadata = {
+ title: "Rough Scheduling",
+};
+
+const roughScheduling: React.FC = async () => {
+ const project = TypeEnum.PRODUCT
+ const { t } = await getServerI18n(project);
+ // preloadClaims();
+
+ return (
+ <>
+
+
+ {t("Rough Scheduling")}
+
+ {/* }
+ LinkComponent={Link}
+ href="product/create"
+ >
+ {t("Create product")}
+ */}
+
+ }>
+
+
+ >
+ );
+};
+
+export default roughScheduling;
diff --git a/src/components/Breadcrumb/Breadcrumb.tsx b/src/components/Breadcrumb/Breadcrumb.tsx
index 1c8bf07..02859fe 100644
--- a/src/components/Breadcrumb/Breadcrumb.tsx
+++ b/src/components/Breadcrumb/Breadcrumb.tsx
@@ -14,6 +14,8 @@ const pathToLabelMap: { [path: string]: string } = {
"/tasks/create": "Create Task Template",
"/settings/qcItem": "Qc Item",
"/settings/rss": "Rough Schedule Setting",
+ "/scheduling/rough": "Rough Scheduling",
+ "/scheduling/detail": "Detail Scheduling",
};
const Breadcrumb = () => {
diff --git a/src/components/NavigationContent/NavigationContent.tsx b/src/components/NavigationContent/NavigationContent.tsx
index 4b80162..ad9be3c 100644
--- a/src/components/NavigationContent/NavigationContent.tsx
+++ b/src/components/NavigationContent/NavigationContent.tsx
@@ -166,6 +166,23 @@ const NavigationContent: React.FC = () => {
},
],
},
+ {
+ icon: ,
+ label: "Scheduling",
+ path: "",
+ children: [
+ {
+ icon: ,
+ label: "Rough Scheduling",
+ path: "/scheduling/rough",
+ },
+ {
+ icon: ,
+ label: "Detail Scheduling",
+ path: "/scheduling/detail",
+ },
+ ],
+ },
{
icon: ,
label: "Settings",
diff --git a/src/components/RoughSchedule/RoughSchedileSearchView.tsx b/src/components/RoughSchedule/RoughSchedileSearchView.tsx
new file mode 100644
index 0000000..5cf3d7d
--- /dev/null
+++ b/src/components/RoughSchedule/RoughSchedileSearchView.tsx
@@ -0,0 +1,194 @@
+"use client";
+
+import React, {useCallback, useEffect, useMemo, useState} from "react";
+import SearchBox, { Criterion } from "../SearchBox";
+import { ItemsResult} from "@/app/api/settings/item";
+import SearchResults, { Column } from "../SearchResults";
+import { EditNote } from "@mui/icons-material";
+import { useRouter, useSearchParams } from "next/navigation";
+import { GridDeleteIcon } from "@mui/x-data-grid";
+import { TypeEnum } from "@/app/utils/typeEnum";
+import axios from "axios";
+import {BASE_API_URL, NEXT_PUBLIC_API_URL} from "@/config/api";
+import { useTranslation } from "react-i18next";
+import axiosInstance from "@/app/(main)/axios/axiosInstance";
+import Qs from 'qs';
+import EditableSearchResults from "@/components/SearchResults/EditableSearchResults"; // Make sure to import Qs
+
+type RecordStructure ={
+ id: number,
+ schedulePeriod: string,
+ scheduleAt: string
+};
+
+type Props = {
+ records: RecordStructure[];
+};
+
+type SearchQuery = Partial>;
+type SearchParamNames = keyof SearchQuery;
+
+const RSOverview: React.FC = ({ records }) => {
+ const [filteredItems, setFilteredItems] = useState