@@ -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;
diff --git a/src/components/Tables/tenders/index.tsx b/src/components/Tables/tenders/index.tsx
index 3518cba..547219a 100644
--- a/src/components/Tables/tenders/index.tsx
+++ b/src/components/Tables/tenders/index.tsx
@@ -11,7 +11,7 @@ import {
} from "@/components/ui/table";
import useTenderListPresenter from "./useTenderListPresenter";
-import { ExclamationIcon, FeedbackIcon } from "@/assets/icons";
+import { ExclamationIcon, EyeIcon } from "@/assets/icons";
import Pagination from "@/components/ui/pagination";
import TableSkeleton from "@/components/ui/TableSkeleton";
import { cn } from "@/lib/utils";
@@ -70,19 +70,19 @@ const TendersTable = () => {
colSpan={100}
>
diff --git a/src/components/forms/companies/CreateCompany.tsx b/src/components/forms/companies/CreateCompany.tsx
index 51c8992..87e9572 100644
--- a/src/components/forms/companies/CreateCompany.tsx
+++ b/src/components/forms/companies/CreateCompany.tsx
@@ -497,6 +497,7 @@ const CreateCompany = ({ defaultValues, editMode, id }: IProps) => {
{...register("tags.cpv_codes")}
label="CPV codes"
name="tags.cpv_codes"
+ shouldAddWithSpace
watch={watch}
setValue={setValue}
placeholder="Enter Tag CPV codes"
diff --git a/src/components/forms/customers/CreateCustomer.tsx b/src/components/forms/customers/CreateCustomer.tsx
index f7ccbce..3371748 100644
--- a/src/components/forms/customers/CreateCustomer.tsx
+++ b/src/components/forms/customers/CreateCustomer.tsx
@@ -6,6 +6,7 @@ import MultiSelect from "@/components/FormElements/MultiSelect";
import { Select } from "@/components/FormElements/select";
import { ShowcaseSection } from "@/components/Layouts/showcase-section";
import FormFooter from "@/components/ui/FormFooter";
+import { USERNAME_REGEX } from "@/constants/regex";
import { FormErrorMessages } from "@/constants/Texts";
import { CreateCustomerCredentials } from "@/lib/api";
import useCreateCustomerPresenter from "./useCreateCustomerPresenter";
@@ -17,7 +18,7 @@ interface IProps {
}
const CreateCustomer = ({ defaultValues, editMode, id }: IProps) => {
- const { errors, handleSubmit, register, onSubmit, companies, router } =
+ const { errors, handleSubmit, register, watch, onSubmit, companies, router } =
useCreateCustomerPresenter({ defaultValues, editMode, id });
return (
@@ -36,7 +37,7 @@ const CreateCustomer = ({ defaultValues, editMode, id }: IProps) => {
message: FormErrorMessages.maxLength(30),
},
pattern: {
- value: /^[a-zA-Z0-9](?:[a-zA-Z0-9._]*[a-zA-Z0-9])?$/,
+ value: USERNAME_REGEX,
message: FormErrorMessages.invalidPattern,
},
})}
@@ -54,6 +55,7 @@ const CreateCustomer = ({ defaultValues, editMode, id }: IProps) => {
({
diff --git a/src/components/forms/customers/useCreateCustomerPresenter.ts b/src/components/forms/customers/useCreateCustomerPresenter.ts
index 8e475ca..5060f28 100644
--- a/src/components/forms/customers/useCreateCustomerPresenter.ts
+++ b/src/components/forms/customers/useCreateCustomerPresenter.ts
@@ -7,6 +7,7 @@ import {
} from "@/hooks/queries";
import { CreateCustomerCredentials } from "@/lib/api";
import { useRouter } from "next/navigation";
+import { useEffect } from "react";
import { SubmitHandler, useForm } from "react-hook-form";
interface IProps {
@@ -24,6 +25,8 @@ const useCreateCustomerPresenter = ({
register,
handleSubmit,
formState: { errors },
+ setValue,
+ watch,
} = useForm({
mode: "onChange",
defaultValues,
@@ -34,6 +37,14 @@ const useCreateCustomerPresenter = ({
id as string,
);
const { data: companies } = useCompanyFullList();
+ useEffect(() => {
+ if (defaultValues) {
+ const companies = defaultValues?.companies?.map(
+ (company: any) => company.id,
+ );
+ setValue("companies", companies);
+ }
+ }, [defaultValues]);
const onSubmit: SubmitHandler = (data) => {
if (editMode) {
updateCustomer({
@@ -41,7 +52,6 @@ const useCreateCustomerPresenter = ({
credentials: data,
});
} else {
-
createCustomer({
...data,
employee_count: data.employee_count ? +data.employee_count : undefined,
@@ -52,6 +62,7 @@ const useCreateCustomerPresenter = ({
};
return {
handleSubmit,
+ watch,
register,
errors,
onSubmit,
diff --git a/src/constants/regex.ts b/src/constants/regex.ts
index 72881aa..90e6dcb 100644
--- a/src/constants/regex.ts
+++ b/src/constants/regex.ts
@@ -1 +1,2 @@
export const PHONE_REGEX = /^[+\d]+$/;
+export const USERNAME_REGEX = /^[a-zA-Z0-9](?:[a-zA-Z0-9._]*[a-zA-Z0-9])?$/;
diff --git a/src/hooks/queries/useUsersQueries.ts b/src/hooks/queries/useUsersQueries.ts
index f8ac8c1..602098f 100644
--- a/src/hooks/queries/useUsersQueries.ts
+++ b/src/hooks/queries/useUsersQueries.ts
@@ -10,7 +10,7 @@ import { useRouter } from "next/navigation";
import { useMemo } from "react";
import { toast } from "react-toastify";
-export const useLoginQuery = () => {
+export const useLoginQuery = (callback?: () => void) => {
const mutationKey = useMemo(() => [API_ENDPOINTS.USER.LOGIN], []);
const { setAuthState } = useUser();
const router = useRouter();
@@ -18,9 +18,10 @@ export const useLoginQuery = () => {
mutationKey,
mutationFn: userService.login,
onSuccess: (response) => {
- if (response.success) {
- setAuthState(response.data);
- router.replace("/charts");
+ setAuthState(response.data);
+ router.replace("/charts");
+ if (callback) {
+ callback();
}
},
});