feat: phone number validation

This commit is contained in:
2025-03-19 16:09:19 +03:00
parent 3bbdacdd68
commit d828e0c999

View File

@@ -1,4 +1,4 @@
import { Button, Fieldset, Group, rem, Stack, Textarea, TextInput } from "@mantine/core"; import { Button, Fieldset, Group, Input, rem, Stack, Textarea, TextInput } from "@mantine/core";
import { useCardPageContext } from "../../../../pages/CardsPage/contexts/CardPageContext.tsx"; import { useCardPageContext } from "../../../../pages/CardsPage/contexts/CardPageContext.tsx";
import { useForm } from "@mantine/form"; import { useForm } from "@mantine/form";
import { CardService, ClientSchema, ClientService } from "../../../../client"; import { CardService, ClientSchema, ClientService } from "../../../../client";
@@ -7,6 +7,8 @@ import ClientSelect from "../../../../components/Selects/ClientSelect/ClientSele
import { useEffect, useState } from "react"; import { useEffect, useState } from "react";
import InlineButton from "../../../../components/InlineButton/InlineButton.tsx"; import InlineButton from "../../../../components/InlineButton/InlineButton.tsx";
import { isEqual } from "lodash"; import { isEqual } from "lodash";
import { IMaskInput } from "react-imask";
import phone from "phone";
const ClientTab = () => { const ClientTab = () => {
const { selectedCard: card, refetchCard } = useCardPageContext(); const { selectedCard: card, refetchCard } = useCardPageContext();
@@ -17,6 +19,16 @@ const ClientTab = () => {
const form = useForm<Partial<ClientSchema>>( const form = useForm<Partial<ClientSchema>>(
{ {
initialValues, initialValues,
validate: {
details: {
phoneNumber: value =>
!phone(value || "", {
country: "",
strictDetection: false,
validateMobilePrefix: false,
}).isValid && "Неверно указан номер телефона",
},
},
}, },
); );
@@ -76,12 +88,16 @@ const ClientTab = () => {
label={"Название"} label={"Название"}
value={card?.client?.name} value={card?.client?.name}
/> />
<TextInput <Input.Wrapper
disabled={isEditorDisabled()} label={"Номер телефона"}
placeholder={"Введите телефон"} error={form.getInputProps("details.phoneNumber").error}>
label={"Телефон клиента"} <Input
{...form.getInputProps("details.phoneNumber")} component={IMaskInput}
/> mask="+7 000 000-00-00"
placeholder={"Введите номер телефона"}
{...form.getInputProps("details.phoneNumber")}
/>
</Input.Wrapper>
<TextInput <TextInput
disabled={isEditorDisabled()} disabled={isEditorDisabled()}
placeholder={"Введите email"} placeholder={"Введите email"}