diff --git a/src/app/(companies)/companies/feedback/[id]/page.tsx b/src/app/(companies)/companies/feedback/[id]/page.tsx new file mode 100644 index 0000000..4fd39de --- /dev/null +++ b/src/app/(companies)/companies/feedback/[id]/page.tsx @@ -0,0 +1,29 @@ +"use client"; +import Breadcrumb from "@/components/Breadcrumbs/Breadcrumb"; +import FeedbackTable from "@/components/Tables/feedback-table"; + +import { BreadcrumbItem } from "@/types/shared"; +import { use } from "react"; +interface IProps { + params: Promise<{ + id: string; + }>; +} + +const TenderFeedbackPage = ({ params }: IProps) => { + const { id } = use(params); + + const breadcrumbItems: BreadcrumbItem[] = [ + { href: "/", name: "Dashboard" }, + { href: "/companies", name: "Companies" }, + { href: `/companies/feedback/${id}`, name: "Companies feedback" }, + ]; + return ( + <> + + + + ); +}; + +export default TenderFeedbackPage; diff --git a/src/app/customers/feedback/[id]/page.tsx b/src/app/customers/feedback/[id]/page.tsx new file mode 100644 index 0000000..287e86b --- /dev/null +++ b/src/app/customers/feedback/[id]/page.tsx @@ -0,0 +1,29 @@ +"use client"; +import Breadcrumb from "@/components/Breadcrumbs/Breadcrumb"; +import FeedbackTable from "@/components/Tables/feedback-table"; + +import { BreadcrumbItem } from "@/types/shared"; +import { use } from "react"; +interface IProps { + params: Promise<{ + id: string; + }>; +} + +const TenderFeedbackPage = ({ params }: IProps) => { + const { id } = use(params); + + const breadcrumbItems: BreadcrumbItem[] = [ + { href: "/", name: "Dashboard" }, + { href: "/customers", name: "Customers" }, + { href: `/customers/feedback/${id}`, name: "Customers feedback" }, + ]; + return ( + <> + + + + ); +}; + +export default TenderFeedbackPage; diff --git a/src/app/tenders/feedback/[id]/page.tsx b/src/app/tenders/feedback/[id]/page.tsx index 60c1f9a..9b0f4c5 100644 --- a/src/app/tenders/feedback/[id]/page.tsx +++ b/src/app/tenders/feedback/[id]/page.tsx @@ -1,6 +1,7 @@ "use client"; import Breadcrumb from "@/components/Breadcrumbs/Breadcrumb"; -import TenderFeedbackTable from "@/components/Tables/tenders/feedback"; +import FeedbackTable from "@/components/Tables/feedback-table"; + import { BreadcrumbItem } from "@/types/shared"; import { use } from "react"; interface IProps { @@ -20,7 +21,7 @@ const TenderFeedbackPage = ({ params }: IProps) => { return ( <> - + ); }; diff --git a/src/components/Tables/companies/index.tsx b/src/components/Tables/companies/index.tsx index ebea5d1..8fc3357 100644 --- a/src/components/Tables/companies/index.tsx +++ b/src/components/Tables/companies/index.tsx @@ -1,5 +1,5 @@ "use client"; -import { PencilSquareIcon, TrashIcon } from "@/assets/icons"; +import { FeedbackIcon, PencilSquareIcon, TrashIcon } from "@/assets/icons"; import ConfirmationModal from "@/components/ui/ConfirmationModal"; import { Table, @@ -112,6 +112,13 @@ const CompaniesTable = ({}: IProps) => { Edit Company + diff --git a/src/components/Tables/customers/index.tsx b/src/components/Tables/customers/index.tsx index 79c303f..fa72860 100644 --- a/src/components/Tables/customers/index.tsx +++ b/src/components/Tables/customers/index.tsx @@ -1,5 +1,5 @@ "use client"; -import { PencilSquareIcon, TrashIcon } from "@/assets/icons"; +import { FeedbackIcon, PencilSquareIcon, TrashIcon } from "@/assets/icons"; import ConfirmationModal from "@/components/ui/ConfirmationModal"; import { Table, @@ -117,6 +117,13 @@ const CustomersTable = () => { Assign To Company + diff --git a/src/components/Tables/tenders/feedback/index.tsx b/src/components/Tables/feedback-table/index.tsx similarity index 69% rename from src/components/Tables/tenders/feedback/index.tsx rename to src/components/Tables/feedback-table/index.tsx index 509b496..3dbd299 100644 --- a/src/components/Tables/tenders/feedback/index.tsx +++ b/src/components/Tables/feedback-table/index.tsx @@ -1,31 +1,39 @@ -"use client"; - import { ExclamationIcon } from "@/assets/icons"; -import { ShowcaseSection } from "@/components/Layouts/showcase-section"; import { Table, TableBody, TableCell, TableHead, TableHeader, + TableRow, } from "@/components/ui/table"; import TableSkeleton from "@/components/ui/TableSkeleton"; import { cn } from "@/lib/utils"; -import { unixToDate } from "@/utils/shared"; -import { TableRow } from "../../../ui/table"; -import useTenderFeedbackPresenter from "./useTenderFeedbackPresenter"; +import { capitalize, unixToDate } from "@/utils/shared"; +import { ShowcaseSection } from "@/components/Layouts/showcase-section"; +import useFeedbackTablePresenter from "./useFeedbackTablePresenter"; interface IProps { id: string; + paramKey: "tender_id" | "company_id" | "customer_id"; } +const FeedbackTable = ({ id, paramKey }: IProps) => { + const { + columns, + feedback, + isLoading, + pathName, + router, + getShowcaseSectionTitle, + } = useFeedbackTablePresenter({ id, paramKey }); -const TenderFeedbackTable = ({ id }: IProps) => { - const { feedback, isLoading, columns, pathName, router } = - useTenderFeedbackPresenter({ id }); return ( @@ -38,11 +46,16 @@ const TenderFeedbackTable = ({ id }: IProps) => { {isLoading && } + - {feedback?.map((item, index) => - !item ? ( -
No feedback is submitted for this tender
- ) : ( + {!feedback?.length ? ( + + +

No feedback

+
+
+ ) : ( + feedback?.map((item, index) => ( { - ), + )) )}
@@ -82,4 +95,4 @@ const TenderFeedbackTable = ({ id }: IProps) => { ); }; -export default TenderFeedbackTable; +export default FeedbackTable; diff --git a/src/components/Tables/feedback-table/useFeedbackTablePresenter.ts b/src/components/Tables/feedback-table/useFeedbackTablePresenter.ts new file mode 100644 index 0000000..4db3a17 --- /dev/null +++ b/src/components/Tables/feedback-table/useFeedbackTablePresenter.ts @@ -0,0 +1,36 @@ +import { useGetFeedback } from "@/hooks/queries"; +import { usePathname, useRouter } from "next/navigation"; + +interface IProps { + id: string; + paramKey: "tender_id" | "company_id" | "customer_id"; +} +const useFeedbackTablePresenter = ({ id, paramKey }: IProps) => { + const { data, isLoading } = useGetFeedback({ [paramKey]: id }); + const router = useRouter(); + const pathName = usePathname(); + const columns = [ + "row", + "feedback type", + "updated at", + "created at", + "actions", + ]; + const getShowcaseSectionTitle = () => { + if (paramKey === "tender_id") { + return `: ${data?.data?.[0]?.tender?.title}`; + } else { + return ""; + } + }; + return { + isLoading, + feedback: data?.data, + columns, + pathName, + router, + getShowcaseSectionTitle, + }; +}; + +export default useFeedbackTablePresenter; diff --git a/src/components/Tables/tenders/feedback/useTenderFeedbackPresenter.ts b/src/components/Tables/tenders/feedback/useTenderFeedbackPresenter.ts deleted file mode 100644 index 2f10c74..0000000 --- a/src/components/Tables/tenders/feedback/useTenderFeedbackPresenter.ts +++ /dev/null @@ -1,20 +0,0 @@ -"use client"; -import { useGetFeedback } from "@/hooks/queries"; -import { usePathname, useRouter } from "next/navigation"; - -const useTenderFeedbackPresenter = ({ id }: { id: string }) => { - const { data, isLoading } = useGetFeedback({ tender_id: id }); - const router = useRouter(); - const pathName = usePathname(); - const columns = [ - "row", - "feedback type", - "updated at", - - "created at", - "actions", - ]; - return { feedback: data?.data, isLoading, columns, pathName, router }; -}; - -export default useTenderFeedbackPresenter;