import { useJsonForms } from "@jsonforms/react"; import React from "react"; import { useState } from "react"; import { useNavigate, useParams, useSearchParams, useLocation } from "react-router-dom"; //@ts-ignore import { ImpaktAppsJsonFormsStore } from "./impaktappsJsonformsStore"; import { ValidationMode } from "@jsonforms/core"; import { ErrorObject } from "ajv"; export const useImpaktAppsJsonFormsStore = ( ServiceHolder: any, validation: ValidationMode | undefined, pageName: string, theme: any, loading: boolean, setLoading: React.Dispatch>, permissions?: any, navigationHolder?: any, serverDateTimeFormat?: string, dateFormat?: string, dateTimeFormat?: string, locale?: string, timeZone?: string, additionalIcons?: Record | {}, notificationAutoHideDuration?: number ) => { const [openNotify, setNotify] = React.useState({ Fail: false, FailMessage: "Error", Success: false, SuccessMessage: "Success", Info: false, InfoMessage: "", }); const { id } = pageName !== "RouterUnavailable" ? useParams() : navigationHolder.useParams(); const [formData, setFormdata] = useState({}); const [uiSchema, setUiSchema] = useState(""); const [additionalErrors, setAdditionalErrors] = useState([]); const [schema, setSchema] = useState({}); const [validationMode, setValidation] = useState( validation || "ValidateAndHide" ); const [searchParams, setSearchParams] = pageName !== "RouterUnavailable" ? useSearchParams() : navigationHolder.useSearchParams(); const navigate = pageName !== "RouterUnavailable" ? useNavigate() : navigationHolder.useNavigate(); const [dialog, setDialog] = useState({}); const [arrayExpendState, setArrayExepandState] = useState({}); const [targetElementMap, setTargetElementMap] = useState>({}); const ctx = useJsonForms(); const location = pageName !== "RouterUnavailable" ? useLocation() : navigationHolder.location; const updateDialog = (path: string, targetElement?: any) => { setDialog((prevDialog: Record | {}) => { if (prevDialog[path] === undefined) { return { ...prevDialog, [path]: true } } else { return { ...prevDialog, [path]: !prevDialog[path] } } }); if (targetElement !== undefined) { setTargetElementMap((prev) => ({ ...prev, [path]: targetElement })); } }; const handleToggleArray = (path: string, value?: boolean) => { setArrayExepandState((prevDialog: Record | {}) => { if (prevDialog[path] === undefined) { return { ...prevDialog, [path]: value === undefined ? true : false } } else { return { ...prevDialog, [path]: value === undefined ? !prevDialog[path] : value } } }) }; const impaktappsJsonformsStoreInstance = new ImpaktAppsJsonFormsStore( setFormdata, setUiSchema, setSchema, setValidation, setLoading, setNotify, setSearchParams, navigate, formData, uiSchema, schema, validationMode, openNotify, loading, theme, permissions, ServiceHolder, id ? id : pageName, searchParams, setAdditionalErrors, additionalErrors, serverDateTimeFormat, dateFormat, dateTimeFormat, locale, timeZone, dialog, updateDialog, arrayExpendState, handleToggleArray, targetElementMap, additionalIcons, ctx, location, notificationAutoHideDuration ); return impaktappsJsonformsStoreInstance; }; export default useImpaktAppsJsonFormsStore;