diff --git a/src/components/Documents/DocumentSchema.js b/src/components/Documents/DocumentSchema.js index adb82152..5dc0117d 100644 --- a/src/components/Documents/DocumentSchema.js +++ b/src/components/Documents/DocumentSchema.js @@ -34,13 +34,13 @@ export const TagSchema = z.object({ isActive: z.boolean().default(true), }); - export const DocumentPayloadSchema = (docConfig = {}) => { const { isMandatory, regexExpression, allowedContentType, maxSizeAllowedInMB, + isUpdateForm, } = docConfig; let documentIdSchema = z.string(); @@ -58,20 +58,31 @@ export const DocumentPayloadSchema = (docConfig = {}) => { ); } + // Base attachment schema + let attachmentSchema = AttachmentSchema( + allowedContentType, + maxSizeAllowedInMB + ).nullable(); + + // If not update form, require attachment + if (!isUpdateForm) { + attachmentSchema = attachmentSchema.refine((val) => val !== null, { + message: "Attachment is required", + }); + } + return z.object({ name: z.string().min(1, "Name is required"), documentId: documentIdSchema, description: z.string().min(1, { message: "Description is required" }), - // entityId: z.string().min(1, { message: "Please Select Document Entity" }), - documentTypeId: z.string().min(1, { message: "Please Select Document Type" }), + documentTypeId: z + .string() + .min(1, { message: "Please Select Document Type" }), documentCategoryId: z .string() .min(1, { message: "Please Select Document Category" }), - attachment: AttachmentSchema(allowedContentType, maxSizeAllowedInMB).nullable().refine( - (val) => val !== null, - { message: "Attachment is required" } -), - tags: z.array(TagSchema).optional().default([]), + attachment: attachmentSchema, + tags: z.array(TagSchema).optional().default([]), }); }; @@ -83,14 +94,15 @@ export const defaultDocumentValues = { // entityId: "", documentTypeId: "", documentCategoryId: "", - attachment: { - fileName: "", - base64Data: "", - contentType: "", - fileSize: 0, - description: "", - isActive: true, - }, + // attachment: { + // fileName: "", + // base64Data: "", + // contentType: "", + // fileSize: 0, + // description: "", + // isActive: true, + // }, + attachment:null, tags: [], }; diff --git a/src/components/Documents/Documents.jsx b/src/components/Documents/Documents.jsx index 5099cc1d..bd74ca16 100644 --- a/src/components/Documents/Documents.jsx +++ b/src/components/Documents/Documents.jsx @@ -1,4 +1,4 @@ -import React, { useEffect, useState } from "react"; +import React, { createContext, useContext, useEffect, useState } from "react"; import GlobalModel from "../common/GlobalModel"; import NewDocument from "./ManageDocument"; import { DOCUMENTS_ENTITIES } from "../../utils/constants"; @@ -14,13 +14,28 @@ import { import { zodResolver } from "@hookform/resolvers/zod"; import ManageDocument from "./ManageDocument"; +// Context +export const DocumentContext = createContext(); +export const useDocumentContext = () => { + const context = useContext(DocumentContext); + if (!context) { + throw new Error("useExpenseContext must be used within an ExpenseProvider"); + } + return context; +}; + const Documents = ({ Document_Entity, Entity }) => { const [searchText, setSearchText] = useState(""); const [filters, setFilter] = useState(); const [isRefetching, setIsRefetching] = useState(false); const [refetchFn, setRefetchFn] = useState(null); const { employeeId } = useParams(); - const [isUpload, setUpload] = useState(false); + const [ManageDoc, setManageDoc] = useState({ + document: null, + isOpen: false, + }); + + const { setOffcanvasContent, setShowTrigger } = useFab(); const methods = useForm({ @@ -47,9 +62,16 @@ const Documents = ({ Document_Entity, Entity }) => { setOffcanvasContent("", null); }; }, []); - + + const contextValues = { + ManageDoc, + setManageDoc, + } + return ( -
Upload New Document