searchable user

This commit is contained in:
2026-07-08 20:35:02 +03:30
parent f30b584435
commit f723392edf
+14 -16
View File
@@ -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>
)} )}