searchable user
This commit is contained in:
@@ -1,6 +1,5 @@
|
|||||||
import { useEffect, useRef, useState, type FC } from "react";
|
import { useEffect, useRef, useState, type FC } from "react";
|
||||||
import Button from "@/components/Button";
|
import Button from "@/components/Button";
|
||||||
import Select from "@/components/Select";
|
|
||||||
import { Add, TickSquare } from "iconsax-react";
|
import { Add, TickSquare } from "iconsax-react";
|
||||||
import { toast } from "@/shared/toast";
|
import { toast } from "@/shared/toast";
|
||||||
import { useNavigate, useSearchParams } from "react-router-dom";
|
import { useNavigate, useSearchParams } from "react-router-dom";
|
||||||
@@ -8,7 +7,6 @@ import { Paths } from "@/config/Paths";
|
|||||||
import { extractErrorMessage } from "@/config/func";
|
import { extractErrorMessage } from "@/config/func";
|
||||||
import { useFormik } from "formik";
|
import { useFormik } from "formik";
|
||||||
import * as Yup from "yup";
|
import * as Yup from "yup";
|
||||||
import { useGetUsers } from "@/pages/user/hooks/useUserData";
|
|
||||||
import type { CreatePreInvoiceType, CreatePreInvoiceItemType } from "./types/Types";
|
import type { CreatePreInvoiceType, CreatePreInvoiceItemType } from "./types/Types";
|
||||||
import InvoiceItemRow from "./components/InvoiceItemRow";
|
import InvoiceItemRow from "./components/InvoiceItemRow";
|
||||||
import { Checkbox } from "@/components/ui/checkbox";
|
import { Checkbox } from "@/components/ui/checkbox";
|
||||||
@@ -20,6 +18,7 @@ import { useGetRequestDetail } from "@/pages/requests/hooks/useRequestData";
|
|||||||
import { useMultiUpload } from "../uploader/hooks/useUploader";
|
import { useMultiUpload } from "../uploader/hooks/useUploader";
|
||||||
import moment from "moment-jalaali";
|
import moment from "moment-jalaali";
|
||||||
import { getItemLineTotal } from "./utils/invoiceItem";
|
import { getItemLineTotal } from "./utils/invoiceItem";
|
||||||
|
import UserSearch from "../user/UserSearch";
|
||||||
|
|
||||||
const createEmptyItem = (): CreatePreInvoiceItemType => ({
|
const createEmptyItem = (): CreatePreInvoiceItemType => ({
|
||||||
productId: "",
|
productId: "",
|
||||||
@@ -37,7 +36,6 @@ const CreateInvoice: FC = () => {
|
|||||||
const requestId = searchParams.get("requestId") ?? undefined;
|
const requestId = searchParams.get("requestId") ?? undefined;
|
||||||
|
|
||||||
const { mutate: submitInvoice, isPending } = useCreateInvoice();
|
const { mutate: submitInvoice, isPending } = useCreateInvoice();
|
||||||
const { data: usersData } = useGetUsers();
|
|
||||||
const { data: requestData, isLoading: isLoadingRequest } = useGetRequestDetail(requestId ?? "");
|
const { data: requestData, isLoading: isLoadingRequest } = useGetRequestDetail(requestId ?? "");
|
||||||
const hydratedRequestId = useRef<string | null>(null);
|
const hydratedRequestId = useRef<string | null>(null);
|
||||||
const multiUpload = useMultiUpload()
|
const multiUpload = useMultiUpload()
|
||||||
@@ -164,8 +162,6 @@ const CreateInvoice: FC = () => {
|
|||||||
|
|
||||||
const totalAmount = items.reduce((sum, i) => sum + getItemLineTotal(i), 0);
|
const totalAmount = items.reduce((sum, i) => sum + getItemLineTotal(i), 0);
|
||||||
|
|
||||||
const users = usersData?.data ?? [];
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="mt-5">
|
<div className="mt-5">
|
||||||
<div className="justify-between items-center flex">
|
<div className="justify-between items-center flex">
|
||||||
@@ -187,20 +183,22 @@ const CreateInvoice: FC = () => {
|
|||||||
|
|
||||||
{!requestId && (
|
{!requestId && (
|
||||||
<div className="rowTwoInput mt-6">
|
<div className="rowTwoInput mt-6">
|
||||||
<Select
|
<div className="w-full">
|
||||||
items={users.map((u) => ({
|
<UserSearch
|
||||||
label: u.firstName && u.lastName ? `${u.firstName} ${u.lastName}` : u.phone,
|
|
||||||
value: String(u.id),
|
|
||||||
}))}
|
|
||||||
label="مشتری"
|
label="مشتری"
|
||||||
placeholder="انتخاب"
|
placeholder="جستجوی مشتری (نام، موبایل، ...)"
|
||||||
value={formik.values.userId}
|
value={formik.values.userId}
|
||||||
onChange={(e) => formik.setFieldValue("userId", e.target.value)}
|
onChange={(id) => {
|
||||||
onBlur={formik.handleBlur}
|
formik.setFieldValue("userId", id);
|
||||||
error_text={
|
formik.setFieldTouched("userId", true);
|
||||||
formik.errors.userId && formik.touched.userId ? formik.errors.userId : ""
|
}}
|
||||||
}
|
|
||||||
/>
|
/>
|
||||||
|
{formik.errors.userId && formik.touched.userId ? (
|
||||||
|
<div className="text-xs text-right text-red-600 mt-2 mr-2 font-medium">
|
||||||
|
{formik.errors.userId}
|
||||||
|
</div>
|
||||||
|
) : null}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user