diff --git a/index.html b/index.html index 95db7228..d4749c08 100644 --- a/index.html +++ b/index.html @@ -46,6 +46,8 @@ + + diff --git a/public/assets/vendor/libs/tagify/tagify.css b/public/assets/vendor/libs/tagify/tagify.css index e69154de..9c861220 100644 --- a/public/assets/vendor/libs/tagify/tagify.css +++ b/public/assets/vendor/libs/tagify/tagify.css @@ -725,7 +725,8 @@ transition: none; display: flex; align-items: flex-end; - padding: calc(2px - var(--bs-border-width)) 0.4375rem 0.4231rem !important; + /* padding: calc(2px - var(--bs-border-width)) 0.4375rem 0.4231rem !important; */ + padding: calc(2px - var(--bs-border-width)) 0.4375rem 0.2rem !important; } .fv-plugins-bootstrap5-row-invalid .tagify.form-control { padding: 0 calc(0.4375rem - var(--bs-border-width)) calc(0.4375rem - 2px) !important; diff --git a/src/components/RecurringExpense/ManageRecurringExpense.jsx b/src/components/RecurringExpense/ManageRecurringExpense.jsx index e52e3a50..1a9065bd 100644 --- a/src/components/RecurringExpense/ManageRecurringExpense.jsx +++ b/src/components/RecurringExpense/ManageRecurringExpense.jsx @@ -1,179 +1,232 @@ -import React, { useEffect, useState } from 'react' -import Label from '../common/Label'; -import { Controller, useForm } from 'react-hook-form'; -import { useExpenseCategory, useRecurringStatus } from '../../hooks/masterHook/useMaster'; -import DatePicker from '../common/DatePicker'; -import { zodResolver } from '@hookform/resolvers/zod'; -import { defaultRecurringExpense, PaymentRecurringExpense } from './RecurringExpenseSchema'; -import { FREQUENCY_FOR_RECURRING, INR_CURRENCY_CODE } from '../../utils/constants'; -import { useCurrencies, useProjectName } from '../../hooks/useProjects'; -import { useCreateRecurringExpense, usePayee, useRecurringExpenseDetail, useUpdateRecurringExpense } from '../../hooks/useExpense'; -import InputSuggestions from '../common/InputSuggestion'; -import MultiEmployeeSearchInput from '../common/MultiEmployeeSearchInput'; +import React, { useEffect, useState } from "react"; +import Label from "../common/Label"; +import { Controller, useForm } from "react-hook-form"; +import { + useExpenseCategory, + useRecurringStatus, +} from "../../hooks/masterHook/useMaster"; +import DatePicker from "../common/DatePicker"; +import { zodResolver } from "@hookform/resolvers/zod"; +import { + defaultRecurringExpense, + PaymentRecurringExpense, +} from "./RecurringExpenseSchema"; +import { + FREQUENCY_FOR_RECURRING, + INR_CURRENCY_CODE, +} from "../../utils/constants"; +import { useCurrencies, useProjectName } from "../../hooks/useProjects"; +import { + useCreateRecurringExpense, + usePayee, + useRecurringExpenseDetail, + useUpdateRecurringExpense, +} from "../../hooks/useExpense"; +import InputSuggestions from "../common/InputSuggestion"; +import MultiEmployeeSearchInput from "../common/MultiEmployeeSearchInput"; +import UsersTagInput from "../common/usesInput"; +import { useEmployeesName } from "../../hooks/useEmployees"; function ManageRecurringExpense({ closeModal, requestToEdit = null }) { - const { + const { data, isLoading, isError, error: requestError, } = useRecurringExpenseDetail(requestToEdit); - //APIs - const { projectNames, loading: projectLoading, error, isError: isProjectError, } = useProjectName(); - const { data: currencyData, isLoading: currencyLoading, isError: currencyError } = useCurrencies(); - const { data: statusData, isLoading: statusLoading, isError: statusError } = useRecurringStatus(); - const { data: Payees, isLoading: isPayeeLoaing, isError: isPayeeError, error: payeeError } = usePayee() - const { ExpenseCategories, loading: ExpenseLoading, error: ExpenseError } = useExpenseCategory(); + const { data: employees } = useEmployeesName() + //APIs + const { + projectNames, + loading: projectLoading, + error, + isError: isProjectError, + } = useProjectName(); + const { + data: currencyData, + isLoading: currencyLoading, + isError: currencyError, + } = useCurrencies(); + const { + data: statusData, + isLoading: statusLoading, + isError: statusError, + } = useRecurringStatus(); + const { + data: Payees, + isLoading: isPayeeLoaing, + isError: isPayeeError, + error: payeeError, + } = usePayee(); + const { + ExpenseCategories, + loading: ExpenseLoading, + error: ExpenseError, + } = useExpenseCategory(); - const schema = PaymentRecurringExpense(); - const { register, control, watch, handleSubmit, setValue, reset, formState: { errors }, } = useForm({ - resolver: zodResolver(schema), - defaultValues: defaultRecurringExpense, + const schema = PaymentRecurringExpense(); + const { + register, + control, + watch, + handleSubmit, + setValue, + reset, + formState: { errors }, + } = useForm({ + resolver: zodResolver(schema), + defaultValues: defaultRecurringExpense, + }); + const handleClose = () => { + reset(); + closeModal(); + }; + + const { mutate: CreateRecurringExpense, isPending: createPending } = + useCreateRecurringExpense(() => { + handleClose(); }); - const handleClose = () => { - reset(); - closeModal(); + const { mutate: RecurringExpenseUpdate, isPending } = + useUpdateRecurringExpense(() => handleClose()); +const handleEmailGetting = (userArray = []) => { + if (!Array.isArray(userArray) || userArray.length === 0) return []; + + return userArray + .map((empId) => { + const foundUser = employees?.data?.find((user) => user.id === empId); + return foundUser?.email || null; + }) + .filter(Boolean).join(",") +}; + useEffect(() => { + if (requestToEdit && data) { + reset({ + title: data.title || "", + description: data.description || "", + payee: data.payee || "", + notifyTo: data.notifyTo ? data.notifyTo.map((usr)=>usr.id) : [], + currencyId: data.currency.id || "", + amount: data.amount || "", + strikeDate: data.strikeDate?.slice(0, 10) || "", + projectId: data.project.id || "", + paymentBufferDays: data.paymentBufferDays || "", + numberOfIteration: data.numberOfIteration || "", + expenseCategoryId: data.expenseCategory.id || "", + statusId: data.status.id || "", + frequency: data.frequency || "", + isVariable: data.isVariable || false, + }); + } + }, [data, reset]); + + useEffect(() => { + if (!requestToEdit && currencyData && currencyData.length > 0) { + const inrCurrency = currencyData.find((c) => c.id === INR_CURRENCY_CODE); + if (inrCurrency) { + setValue("currencyId", INR_CURRENCY_CODE, { shouldValidate: true }); + } + } + }, [currencyData, requestToEdit, setValue]); + + const onSubmit = (fromdata) => { + let payload = { + ...fromdata, + strikeDate: fromdata.strikeDate + ? new Date(fromdata.strikeDate).toISOString() + : null, + notifyTo:handleEmailGetting(fromdata.notifyTo) }; + if (requestToEdit) { + const editPayload = { ...payload, id: data.id }; + RecurringExpenseUpdate({ id: data.id, payload: editPayload }); + } else { + CreateRecurringExpense(payload); + } + }; - const { mutate: CreateRecurringExpense, isPending: createPending } = useCreateRecurringExpense( - () => { - handleClose(); - } - ); - const { mutate: RecurringExpenseUpdate, isPending } = useUpdateRecurringExpense(() => - handleClose() - ); + return ( +