@solidxai/core-ui 0.1.5-beta.6 → 0.1.5-beta.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/auth/SolidOTPVerify.d.ts +3 -0
- package/dist/components/auth/SolidOTPVerify.d.ts.map +1 -0
- package/dist/components/auth/SolidOTPVerify.js +67 -0
- package/dist/components/auth/SolidOTPVerify.js.map +1 -0
- package/dist/components/auth/SolidOTPVerify.tsx +133 -0
- package/dist/components/common/AuthBanner.js.map +1 -1
- package/dist/components/core/chatter/SolidChatterDateDivider.js +1 -1
- package/dist/components/core/chatter/SolidChatterDateDivider.js.map +1 -1
- package/dist/components/core/chatter/SolidChatterDateDivider.tsx +1 -1
- package/dist/components/core/common/LoadDynamicJsxComponent.d.ts +2 -0
- package/dist/components/core/common/LoadDynamicJsxComponent.d.ts.map +1 -0
- package/dist/components/core/common/LoadDynamicJsxComponent.js +50 -0
- package/dist/components/core/common/LoadDynamicJsxComponent.js.map +1 -0
- package/dist/components/core/common/LoadDynamicJsxComponent.tsx +70 -0
- package/dist/components/core/dashboard/DashboardFilter.js +1 -1
- package/dist/components/core/dashboard/DashboardFilter.js.map +1 -1
- package/dist/components/core/dashboard/DashboardFilter.tsx +5 -5
- package/dist/components/core/dashboard/PrimeDataTableWrapper.d.ts +3 -0
- package/dist/components/core/dashboard/PrimeDataTableWrapper.d.ts.map +1 -0
- package/dist/components/core/dashboard/PrimeDataTableWrapper.js +21 -0
- package/dist/components/core/dashboard/PrimeDataTableWrapper.js.map +1 -0
- package/dist/components/core/dashboard/PrimeDataTableWrapper.tsx +40 -0
- package/dist/components/core/dashboard/SolidDashboard.d.ts +0 -1
- package/dist/components/core/dashboard/SolidDashboard.d.ts.map +1 -1
- package/dist/components/core/dashboard/SolidDashboard.js +50 -26
- package/dist/components/core/dashboard/SolidDashboard.js.map +1 -1
- package/dist/components/core/dashboard/SolidDashboard.module.css +6 -2
- package/dist/components/core/dashboard/SolidDashboard.tsx +112 -65
- package/dist/components/core/dashboard/SolidDashboardBody.d.ts +13 -1
- package/dist/components/core/dashboard/SolidDashboardBody.d.ts.map +1 -1
- package/dist/components/core/dashboard/SolidDashboardBody.js +134 -48
- package/dist/components/core/dashboard/SolidDashboardBody.js.map +1 -1
- package/dist/components/core/dashboard/SolidDashboardBody.tsx +143 -91
- package/dist/components/core/dashboard/SolidQuestionRenderer.d.ts.map +1 -1
- package/dist/components/core/dashboard/SolidQuestionRenderer.js +1 -1
- package/dist/components/core/dashboard/SolidQuestionRenderer.js.map +1 -1
- package/dist/components/core/dashboard/SolidQuestionRenderer.tsx +12 -10
- package/dist/components/core/dashboard/chart-renderers/ChartJsRenderer.d.ts.map +1 -1
- package/dist/components/core/dashboard/chart-renderers/ChartJsRenderer.js +29 -2
- package/dist/components/core/dashboard/chart-renderers/ChartJsRenderer.js.map +1 -1
- package/dist/components/core/dashboard/chart-renderers/ChartJsRenderer.tsx +33 -3
- package/dist/components/core/extension/solid-core/dashboard/dashboardFormViewChangeHandler.d.ts +10 -0
- package/dist/components/core/extension/solid-core/dashboard/dashboardFormViewChangeHandler.d.ts.map +1 -0
- package/dist/components/core/extension/solid-core/dashboard/dashboardFormViewChangeHandler.js +16 -0
- package/dist/components/core/extension/solid-core/dashboard/dashboardFormViewChangeHandler.js.map +1 -0
- package/dist/components/core/extension/solid-core/dashboard/dashboardFormViewChangeHandler.ts +19 -0
- package/dist/components/core/extension/solid-core/dashboard/dashboardQuestionFieldChangeHandler.d.ts +8 -0
- package/dist/components/core/extension/solid-core/dashboard/dashboardQuestionFieldChangeHandler.d.ts.map +1 -0
- package/dist/components/core/extension/solid-core/dashboard/dashboardQuestionFieldChangeHandler.js +64 -0
- package/dist/components/core/extension/solid-core/dashboard/dashboardQuestionFieldChangeHandler.js.map +1 -0
- package/dist/components/core/extension/solid-core/dashboard/dashboardQuestionFieldChangeHandler.ts +30 -0
- package/dist/components/core/extension/solid-core/dashboard/dashboardQuestionOnFormLoadHandler.d.ts +8 -0
- package/dist/components/core/extension/solid-core/dashboard/dashboardQuestionOnFormLoadHandler.d.ts.map +1 -0
- package/dist/components/core/extension/solid-core/dashboard/dashboardQuestionOnFormLoadHandler.js +62 -0
- package/dist/components/core/extension/solid-core/dashboard/dashboardQuestionOnFormLoadHandler.js.map +1 -0
- package/dist/components/core/extension/solid-core/dashboard/dashboardQuestionOnFormLoadHandler.ts +29 -0
- package/dist/components/core/extension/solid-core/modelMetadata/list/DeleteModelRowAction.js +2 -2
- package/dist/components/core/extension/solid-core/modelMetadata/list/DeleteModelRowAction.js.map +1 -1
- package/dist/components/core/extension/solid-core/modelMetadata/list/DeleteModelRowAction.tsx +2 -2
- package/dist/constants/error-messages.d.ts +3 -0
- package/dist/constants/error-messages.d.ts.map +1 -1
- package/dist/constants/error-messages.js +3 -0
- package/dist/constants/error-messages.js.map +1 -1
- package/dist/constants/error-messages.ts +24 -20
- package/dist/helpers/registry.d.ts.map +1 -1
- package/dist/helpers/registry.js +7 -0
- package/dist/helpers/registry.js.map +1 -1
- package/dist/helpers/registry.ts +8 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/index.ts +8 -0
- package/dist/nextAuth/authProviders.d.ts +4 -0
- package/dist/nextAuth/authProviders.d.ts.map +1 -0
- package/dist/nextAuth/authProviders.js +198 -0
- package/dist/nextAuth/authProviders.js.map +1 -0
- package/dist/nextAuth/authProviders.tsx +232 -0
- package/dist/nextAuth/handleLogout.d.ts +2 -0
- package/dist/nextAuth/handleLogout.d.ts.map +1 -0
- package/dist/nextAuth/handleLogout.js +36 -0
- package/dist/nextAuth/handleLogout.js.map +1 -0
- package/dist/nextAuth/handleLogout.tsx +39 -0
- package/dist/nextAuth/refreshAccessToken.d.ts +2 -0
- package/dist/nextAuth/refreshAccessToken.d.ts.map +1 -0
- package/dist/nextAuth/refreshAccessToken.js +24 -0
- package/dist/nextAuth/refreshAccessToken.js.map +1 -0
- package/dist/nextAuth/refreshAccessToken.tsx +28 -0
- package/dist/redux/api/dashboardLayoutApi.d.ts +24 -0
- package/dist/redux/api/dashboardLayoutApi.d.ts.map +1 -0
- package/dist/redux/api/dashboardLayoutApi.js +34 -0
- package/dist/redux/api/dashboardLayoutApi.js.map +1 -0
- package/dist/redux/api/dashboardLayoutApi.ts +55 -0
- package/dist/redux/features/settingsSlice.d.ts +20 -0
- package/dist/redux/features/settingsSlice.d.ts.map +1 -0
- package/dist/redux/features/settingsSlice.js +39 -0
- package/dist/redux/features/settingsSlice.js.map +1 -0
- package/dist/redux/features/settingsSlice.ts +60 -0
- package/dist/redux/store/defaultStoreConfig.d.ts +4 -0
- package/dist/redux/store/defaultStoreConfig.d.ts.map +1 -1
- package/dist/redux/store/defaultStoreConfig.js +3 -2
- package/dist/redux/store/defaultStoreConfig.js.map +1 -1
- package/dist/redux/store/defaultStoreConfig.ts +4 -2
- package/dist/routes/pages/admin/core/DashboardPage.d.ts.map +1 -1
- package/dist/routes/pages/admin/core/DashboardPage.js +3 -7
- package/dist/routes/pages/admin/core/DashboardPage.js.map +1 -1
- package/dist/routes/pages/admin/core/DashboardPage.tsx +2 -5
- package/dist/routes/solidRoutes.js +1 -1
- package/dist/routes/solidRoutes.js.map +1 -1
- package/dist/routes/solidRoutes.tsx +1 -1
- package/package.json +13 -11
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SolidOTPVerify.d.ts","sourceRoot":"./","sources":["components/auth/SolidOTPVerify.tsx"],"names":[],"mappings":"AAiBA,QAAA,MAAM,cAAc,+CAmHnB,CAAC;AAEF,eAAe,cAAc,CAAC"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
import { Form, Formik } from "formik";
|
|
4
|
+
import { signIn } from "next-auth/react";
|
|
5
|
+
import Link from "next/link";
|
|
6
|
+
import { useRouter } from "next/navigation";
|
|
7
|
+
import { Button } from "primereact/button";
|
|
8
|
+
import { InputOtp } from "primereact/inputotp";
|
|
9
|
+
import { Message } from "primereact/message";
|
|
10
|
+
import { Toast } from "primereact/toast";
|
|
11
|
+
import { useRef, useState } from "react";
|
|
12
|
+
import * as Yup from "yup";
|
|
13
|
+
import { useSelector } from "react-redux";
|
|
14
|
+
import Image from "next/image";
|
|
15
|
+
import SolidLogo from '../../resources/images/SolidXLogo.svg';
|
|
16
|
+
import { ERROR_MESSAGES } from "../../constants/error-messages";
|
|
17
|
+
const SolidOTPVerify = () => {
|
|
18
|
+
// const [trigger, { data: solidSettingsData }] = useLazyGetAuthSettingsQuery();
|
|
19
|
+
// useEffect(() => {
|
|
20
|
+
// trigger("") // Fetch settings on mount
|
|
21
|
+
// }, [trigger])
|
|
22
|
+
const solidSettingsData = useSelector((state) => state.settingsState?.solidSettings);
|
|
23
|
+
const [otp, setOTP] = useState();
|
|
24
|
+
const toast = useRef(null);
|
|
25
|
+
const router = useRouter();
|
|
26
|
+
const [password, setPassword] = useState('');
|
|
27
|
+
const [checked, setChecked] = useState(false);
|
|
28
|
+
const validationSchema = Yup.object({
|
|
29
|
+
email: Yup.string()
|
|
30
|
+
.email(ERROR_MESSAGES.FIELD_INVALID(' email address'))
|
|
31
|
+
.required(ERROR_MESSAGES.FIELD_REUQIRED('Email')),
|
|
32
|
+
});
|
|
33
|
+
const showToast = (severity, summary, detail) => {
|
|
34
|
+
toast.current?.show({
|
|
35
|
+
severity,
|
|
36
|
+
summary,
|
|
37
|
+
detail,
|
|
38
|
+
...(severity === "error"
|
|
39
|
+
? { sticky: true } // stays until user closes
|
|
40
|
+
: { life: 3000 }),
|
|
41
|
+
});
|
|
42
|
+
};
|
|
43
|
+
const isFormFieldValid = (formik, fieldName) => formik.touched[fieldName] && formik.errors[fieldName];
|
|
44
|
+
return (_jsxs(_Fragment, { children: [_jsx(Toast, { ref: toast }), _jsxs("div", { className: `auth-container ${solidSettingsData?.authPagesLayout === 'center' ? 'center' : 'side'}`, style: { minWidth: 480 }, children: [solidSettingsData?.authPagesLayout === 'center' &&
|
|
45
|
+
_jsx("div", { className: "flex justify-content-center", children: _jsx("div", { className: `solid-logo flex align-items-center ${solidSettingsData?.appLogoPosition}`, children: _jsx(Image, { alt: "solid logo", src: solidSettingsData?.appLogo || SolidLogo, className: "relative", fill: true }) }) }), _jsx("h2", { className: `solid-auth-title ${solidSettingsData?.authPagesLayout === 'center' ? 'text-center' : 'text-left'}`, children: "OTP Verification" }), _jsx("p", { className: "solid-auth-subtitle text-sm", children: "Please enter the OTP sent to your email to complete verification" }), _jsx(_Fragment, { children: _jsx(Formik, { initialValues: {
|
|
46
|
+
email: "",
|
|
47
|
+
password: "",
|
|
48
|
+
}, validationSchema: validationSchema, onSubmit: async (values) => {
|
|
49
|
+
// Handle form submission
|
|
50
|
+
const email = values.email;
|
|
51
|
+
const password = values.password;
|
|
52
|
+
const response = await signIn("credentials", {
|
|
53
|
+
redirect: false,
|
|
54
|
+
email,
|
|
55
|
+
password,
|
|
56
|
+
});
|
|
57
|
+
if (response?.error) {
|
|
58
|
+
showToast("error", ERROR_MESSAGES.LOGIN_ERROR, response.error);
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
showToast("success", ERROR_MESSAGES.LOGIN_SUCCESS, ERROR_MESSAGES.DASHBOARD_REDIRECTING);
|
|
62
|
+
router.push(`${process.env.NEXT_PUBLIC_LOGIN_REDIRECT_URL}`);
|
|
63
|
+
}
|
|
64
|
+
}, children: (formik) => (_jsxs(Form, { children: [_jsxs("div", { className: "flex flex-column gap-2 px-3", children: [_jsx("label", { htmlFor: "email", className: "solid-auth-input-label", children: "Enter OTP" }), _jsx(InputOtp, { value: otp, onChange: (e) => setOTP(e.value), length: 6, style: { width: '100%' } }), isFormFieldValid(formik, "email") && _jsx(Message, { className: "text-red-500 text-sm", severity: "error", text: formik?.errors?.email?.toString() }), _jsxs("div", { className: "flex align-items-center justify-content-between", children: [_jsx(Button, { type: "button", icon: 'pi pi-refresh', iconPos: "left", link: true, label: "Resend Code", className: "px-0 text-sm font-normal" }), _jsx("p", { className: "m-0 text-sm text-color", children: "Time left: 00:28" })] })] }), _jsx("div", { className: "mt-4", children: _jsx(Button, { type: "submit", className: "w-full font-light auth-submit-button", label: "Verify", disabled: formik.isSubmitting, loading: formik.isSubmitting }) })] })) }) })] }), _jsx("div", { className: "text-center mt-5", children: _jsxs("div", { className: "text-sm text-400 secondary-dark-color", children: ['<', " Back to ", _jsx(Link, { className: "font-bold", href: "/auth/login", children: "Sign In" })] }) })] }));
|
|
65
|
+
};
|
|
66
|
+
export default SolidOTPVerify;
|
|
67
|
+
//# sourceMappingURL=SolidOTPVerify.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SolidOTPVerify.js","sourceRoot":"./","sources":["components/auth/SolidOTPVerify.tsx"],"names":[],"mappings":"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","sourcesContent":["\"use client\";\n\nimport { Form, Formik } from \"formik\";\nimport { signIn } from \"next-auth/react\";\nimport Link from \"next/link\";\nimport { useRouter } from \"next/navigation\";\nimport { Button } from \"primereact/button\";\nimport { InputOtp } from \"primereact/inputotp\";\nimport { Message } from \"primereact/message\";\nimport { Toast } from \"primereact/toast\";\nimport { useRef, useState } from \"react\";\nimport * as Yup from \"yup\";\nimport { useSelector } from \"react-redux\";\nimport Image from \"next/image\";\nimport SolidLogo from '../../resources/images/SolidXLogo.svg'\nimport { ERROR_MESSAGES } from \"../../constants/error-messages\";\n\nconst SolidOTPVerify = () => {\n\n // const [trigger, { data: solidSettingsData }] = useLazyGetAuthSettingsQuery();\n // useEffect(() => {\n // trigger(\"\") // Fetch settings on mount\n // }, [trigger])\n\n const solidSettingsData = useSelector((state: any) => state.settingsState?.solidSettings);\n\n const [otp, setOTP] = useState<number | any>();\n\n const toast = useRef<Toast>(null);\n const router = useRouter();\n\n const [password, setPassword] = useState('');\n const [checked, setChecked] = useState<boolean>(false);\n\n const validationSchema = Yup.object({\n email: Yup.string()\n .email(ERROR_MESSAGES.FIELD_INVALID(' email address'))\n .required(ERROR_MESSAGES.FIELD_REUQIRED('Email')),\n });\n\n const showToast = (severity: \"success\" | \"error\", summary: string, detail: string) => {\n toast.current?.show({\n severity,\n summary,\n detail,\n ...(severity === \"error\"\n ? { sticky: true } // stays until user closes\n : { life: 3000 }),\n });\n };\n\n const isFormFieldValid = (formik: any, fieldName: string) =>\n formik.touched[fieldName] && formik.errors[fieldName];\n\n return (\n <>\n <Toast ref={toast} />\n <div className={`auth-container ${solidSettingsData?.authPagesLayout === 'center' ? 'center' : 'side'}`} style={{ minWidth: 480 }}>\n {solidSettingsData?.authPagesLayout === 'center' &&\n <div className=\"flex justify-content-center\">\n <div className={`solid-logo flex align-items-center ${solidSettingsData?.appLogoPosition}`}>\n <Image\n alt=\"solid logo\"\n src={solidSettingsData?.appLogo || SolidLogo}\n className=\"relative\"\n fill\n />\n </div>\n </div>\n }\n <h2 className={`solid-auth-title ${solidSettingsData?.authPagesLayout === 'center' ? 'text-center' : 'text-left'}`}>OTP Verification</h2>\n <p className=\"solid-auth-subtitle text-sm\">\n Please enter the OTP sent to your email to complete verification\n </p>\n <>\n <Formik\n initialValues={{\n email: \"\",\n password: \"\",\n }}\n validationSchema={validationSchema}\n onSubmit={async (values) => {\n // Handle form submission\n const email = values.email;\n const password = values.password;\n\n const response = await signIn(\"credentials\", {\n redirect: false,\n email,\n password,\n });\n if (response?.error) {\n showToast(\"error\", ERROR_MESSAGES.LOGIN_ERROR, response.error);\n } else {\n showToast(\"success\", ERROR_MESSAGES.LOGIN_SUCCESS, ERROR_MESSAGES.DASHBOARD_REDIRECTING);\n router.push(`${process.env.NEXT_PUBLIC_LOGIN_REDIRECT_URL}`);\n }\n\n }}\n >\n {(formik) => (\n <Form>\n <div className=\"flex flex-column gap-2 px-3\">\n <label htmlFor=\"email\" className=\"solid-auth-input-label\">Enter OTP</label>\n <InputOtp value={otp} onChange={(e) => setOTP(e.value)} length={6} style={{ width: '100%' }} />\n {isFormFieldValid(formik, \"email\") && <Message\n className=\"text-red-500 text-sm\"\n severity=\"error\"\n text={formik?.errors?.email?.toString()}\n />}\n <div className=\"flex align-items-center justify-content-between\">\n <Button type=\"button\" icon='pi pi-refresh' iconPos=\"left\" link label=\"Resend Code\" className=\"px-0 text-sm font-normal\" />\n <p className=\"m-0 text-sm text-color\">\n Time left: 00:28\n </p>\n </div>\n </div>\n <div className=\"mt-4\">\n <Button type=\"submit\" className=\"w-full font-light auth-submit-button\" label=\"Verify\" disabled={formik.isSubmitting} loading={formik.isSubmitting} />\n </div>\n </Form>\n )}\n </Formik>\n </>\n </div>\n <div className=\"text-center mt-5\">\n <div className=\"text-sm text-400 secondary-dark-color\">\n {'<'} Back to <Link className=\"font-bold\" href=\"/auth/login\">Sign In</Link>\n </div>\n </div>\n </>\n );\n};\n\nexport default SolidOTPVerify;"]}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { Form, Formik } from "formik";
|
|
4
|
+
import { signIn } from "next-auth/react";
|
|
5
|
+
import Link from "next/link";
|
|
6
|
+
import { useRouter } from "next/navigation";
|
|
7
|
+
import { Button } from "primereact/button";
|
|
8
|
+
import { InputOtp } from "primereact/inputotp";
|
|
9
|
+
import { Message } from "primereact/message";
|
|
10
|
+
import { Toast } from "primereact/toast";
|
|
11
|
+
import { useEffect, useRef, useState } from "react";
|
|
12
|
+
import * as Yup from "yup";
|
|
13
|
+
import Image from "next/image";
|
|
14
|
+
import SolidLogo from '../../resources/images/SolidXLogo.svg'
|
|
15
|
+
import { ERROR_MESSAGES } from "../../constants/error-messages";
|
|
16
|
+
import { useLazyGetAuthSettingsQuery } from "../../redux/api/solidSettingsApi";
|
|
17
|
+
|
|
18
|
+
const SolidOTPVerify = () => {
|
|
19
|
+
|
|
20
|
+
const [trigger, { data: solidSettingsData }] = useLazyGetAuthSettingsQuery();
|
|
21
|
+
useEffect(() => {
|
|
22
|
+
trigger("") // Fetch settings on mount
|
|
23
|
+
}, [trigger])
|
|
24
|
+
|
|
25
|
+
const [otp, setOTP] = useState<number | any>();
|
|
26
|
+
|
|
27
|
+
const toast = useRef<Toast>(null);
|
|
28
|
+
const router = useRouter();
|
|
29
|
+
|
|
30
|
+
const [password, setPassword] = useState('');
|
|
31
|
+
const [checked, setChecked] = useState<boolean>(false);
|
|
32
|
+
|
|
33
|
+
const validationSchema = Yup.object({
|
|
34
|
+
email: Yup.string()
|
|
35
|
+
.email(ERROR_MESSAGES.FIELD_INVALID(' email address'))
|
|
36
|
+
.required(ERROR_MESSAGES.FIELD_REUQIRED('Email')),
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
const showToast = (severity: "success" | "error", summary: string, detail: string) => {
|
|
40
|
+
toast.current?.show({
|
|
41
|
+
severity,
|
|
42
|
+
summary,
|
|
43
|
+
detail,
|
|
44
|
+
...(severity === "error"
|
|
45
|
+
? { sticky: true } // stays until user closes
|
|
46
|
+
: { life: 3000 }),
|
|
47
|
+
});
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
const isFormFieldValid = (formik: any, fieldName: string) =>
|
|
51
|
+
formik.touched[fieldName] && formik.errors[fieldName];
|
|
52
|
+
|
|
53
|
+
return (
|
|
54
|
+
<>
|
|
55
|
+
<Toast ref={toast} />
|
|
56
|
+
<div className={`auth-container ${solidSettingsData?.data?.authPagesLayout === 'center' ? 'center' : 'side'}`} style={{ minWidth: 480 }}>
|
|
57
|
+
{solidSettingsData?.data?.authPagesLayout === 'center' &&
|
|
58
|
+
<div className="flex justify-content-center">
|
|
59
|
+
<div className={`solid-logo flex align-items-center ${solidSettingsData?.data?.appLogoPosition}`}>
|
|
60
|
+
<Image
|
|
61
|
+
alt="solid logo"
|
|
62
|
+
src={solidSettingsData?.data?.appLogo || SolidLogo}
|
|
63
|
+
className="relative"
|
|
64
|
+
fill
|
|
65
|
+
/>
|
|
66
|
+
</div>
|
|
67
|
+
</div>
|
|
68
|
+
}
|
|
69
|
+
<h2 className={`solid-auth-title ${solidSettingsData?.data?.authPagesLayout === 'center' ? 'text-center' : 'text-left'}`}>OTP Verification</h2>
|
|
70
|
+
<p className="solid-auth-subtitle text-sm">
|
|
71
|
+
Please enter the OTP sent to your email to complete verification
|
|
72
|
+
</p>
|
|
73
|
+
<>
|
|
74
|
+
<Formik
|
|
75
|
+
initialValues={{
|
|
76
|
+
email: "",
|
|
77
|
+
password: "",
|
|
78
|
+
}}
|
|
79
|
+
validationSchema={validationSchema}
|
|
80
|
+
onSubmit={async (values) => {
|
|
81
|
+
// Handle form submission
|
|
82
|
+
const email = values.email;
|
|
83
|
+
const password = values.password;
|
|
84
|
+
|
|
85
|
+
const response = await signIn("credentials", {
|
|
86
|
+
redirect: false,
|
|
87
|
+
email,
|
|
88
|
+
password,
|
|
89
|
+
});
|
|
90
|
+
if (response?.error) {
|
|
91
|
+
showToast("error", ERROR_MESSAGES.LOGIN_ERROR, response.error);
|
|
92
|
+
} else {
|
|
93
|
+
showToast("success", ERROR_MESSAGES.LOGIN_SUCCESS, ERROR_MESSAGES.DASHBOARD_REDIRECTING);
|
|
94
|
+
router.push(`${process.env.NEXT_PUBLIC_LOGIN_REDIRECT_URL}`);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
}}
|
|
98
|
+
>
|
|
99
|
+
{(formik) => (
|
|
100
|
+
<Form>
|
|
101
|
+
<div className="flex flex-column gap-2 px-3">
|
|
102
|
+
<label htmlFor="email" className="solid-auth-input-label">Enter OTP</label>
|
|
103
|
+
<InputOtp value={otp} onChange={(e) => setOTP(e.value)} length={6} style={{ width: '100%' }} />
|
|
104
|
+
{isFormFieldValid(formik, "email") && <Message
|
|
105
|
+
className="text-red-500 text-sm"
|
|
106
|
+
severity="error"
|
|
107
|
+
text={formik?.errors?.email?.toString()}
|
|
108
|
+
/>}
|
|
109
|
+
<div className="flex align-items-center justify-content-between">
|
|
110
|
+
<Button type="button" icon='pi pi-refresh' iconPos="left" link label="Resend Code" className="px-0 text-sm font-normal" />
|
|
111
|
+
<p className="m-0 text-sm text-color">
|
|
112
|
+
Time left: 00:28
|
|
113
|
+
</p>
|
|
114
|
+
</div>
|
|
115
|
+
</div>
|
|
116
|
+
<div className="mt-4">
|
|
117
|
+
<Button type="submit" className="w-full font-light auth-submit-button" label="Verify" disabled={formik.isSubmitting} loading={formik.isSubmitting} />
|
|
118
|
+
</div>
|
|
119
|
+
</Form>
|
|
120
|
+
)}
|
|
121
|
+
</Formik>
|
|
122
|
+
</>
|
|
123
|
+
</div>
|
|
124
|
+
<div className="text-center mt-5">
|
|
125
|
+
<div className="text-sm text-400 secondary-dark-color">
|
|
126
|
+
{'<'} Back to <Link className="font-bold" href="/auth/login">Sign In</Link>
|
|
127
|
+
</div>
|
|
128
|
+
</div>
|
|
129
|
+
</>
|
|
130
|
+
);
|
|
131
|
+
};
|
|
132
|
+
|
|
133
|
+
export default SolidOTPVerify;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AuthBanner.js","sourceRoot":"","sources":["../../../src/components/common/AuthBanner.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAEzC,IAAM,UAAU,GAAG;IACjB,OAAO,CACL,cACE,KAAK,EAAE;YACL,QAAQ,EAAE,UAAU;YACpB,KAAK,EAAE,MAAM;YACb,MAAM,EAAE,aAAa;YACrB,UAAU,EAAE,4BAA4B;YACxC,8CAA8C;YAC9C,cAAc,EAAE,OAAO;YACvB,SAAS,EAAE,GAAG,CAAC,6BAA6B,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;SAClE,EACD,SAAS,EAAC,yBAAyB,YAEnC,cAAK,SAAS,EAAC,UAAU,YACvB,eAAK,SAAS,EAAC,eAAe,aAC5B,cAAK,SAAS,EAAC,iDAAiD,YAC7D,GAAG,CAAC,iBAAiB,CAAC,GACnB,EACN,cAAK,SAAS,EAAC,kCAAkC,YAC9C,GAAG,CAAC,mCAAmC,CAAC,GACrC,EACN,cAAK,SAAS,EAAC,MAAM,GASf,IACF,GACF,GACF,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,UAAU,CAAC"
|
|
1
|
+
{"version":3,"file":"AuthBanner.js","sourceRoot":"","sources":["../../../src/components/common/AuthBanner.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAEzC,IAAM,UAAU,GAAG;IACjB,OAAO,CACL,cACE,KAAK,EAAE;YACL,QAAQ,EAAE,UAAU;YACpB,KAAK,EAAE,MAAM;YACb,MAAM,EAAE,aAAa;YACrB,UAAU,EAAE,4BAA4B;YACxC,8CAA8C;YAC9C,cAAc,EAAE,OAAO;YACvB,SAAS,EAAE,GAAG,CAAC,6BAA6B,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;SAClE,EACD,SAAS,EAAC,yBAAyB,YAEnC,cAAK,SAAS,EAAC,UAAU,YACvB,eAAK,SAAS,EAAC,eAAe,aAC5B,cAAK,SAAS,EAAC,iDAAiD,YAC7D,GAAG,CAAC,iBAAiB,CAAC,GACnB,EACN,cAAK,SAAS,EAAC,kCAAkC,YAC9C,GAAG,CAAC,mCAAmC,CAAC,GACrC,EACN,cAAK,SAAS,EAAC,MAAM,GASf,IACF,GACF,GACF,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,UAAU,CAAC"}
|
|
@@ -2,6 +2,6 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
2
2
|
import styles from './chatter.module.css';
|
|
3
3
|
export var SolidChatterDateDivider = function (_a) {
|
|
4
4
|
var date = _a.date;
|
|
5
|
-
return (_jsx("div", { className: styles.chatterDatetimeDivider, children: _jsx("div", { className: "".concat(styles.chatterDividerContent, " absolute"), children: date }) }));
|
|
5
|
+
return (_jsx("div", { className: styles.chatterDatetimeDivider, children: _jsx("div", { className: "".concat(styles.chatterDividerContent, " absolute"), children: new Date(date).toLocaleDateString(undefined, { year: 'numeric', month: 'long', day: 'numeric' }) }) }));
|
|
6
6
|
};
|
|
7
7
|
//# sourceMappingURL=SolidChatterDateDivider.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SolidChatterDateDivider.js","sourceRoot":"","sources":["../../../../src/components/core/chatter/SolidChatterDateDivider.tsx"],"names":[],"mappings":";AACA,OAAO,MAAM,MAAM,sBAAsB,CAAC;AAM1C,MAAM,CAAC,IAAM,uBAAuB,GAAG,UAAC,EAAe;QAAb,IAAI,UAAA;IAC1C,OAAO,CACH,cAAK,SAAS,EAAE,MAAM,CAAC,sBAAsB,YACzC,cAAK,SAAS,EAAE,UAAG,MAAM,CAAC,qBAAqB,cAAW,YACrD,IAAI,
|
|
1
|
+
{"version":3,"file":"SolidChatterDateDivider.js","sourceRoot":"","sources":["../../../../src/components/core/chatter/SolidChatterDateDivider.tsx"],"names":[],"mappings":";AACA,OAAO,MAAM,MAAM,sBAAsB,CAAC;AAM1C,MAAM,CAAC,IAAM,uBAAuB,GAAG,UAAC,EAAe;QAAb,IAAI,UAAA;IAC1C,OAAO,CACH,cAAK,SAAS,EAAE,MAAM,CAAC,sBAAsB,YACzC,cAAK,SAAS,EAAE,UAAG,MAAM,CAAC,qBAAqB,cAAW,YACrD,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,kBAAkB,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,GAC/F,GACJ,CACT,CAAA;AACL,CAAC,CAAA","sourcesContent":["\nimport styles from './chatter.module.css';\n\ninterface Props {\n date: string;\n}\n\nexport const SolidChatterDateDivider = ({ date }: Props) => {\n return (\n <div className={styles.chatterDatetimeDivider}>\n <div className={`${styles.chatterDividerContent} absolute`}>\n {new Date(date).toLocaleDateString(undefined, { year: 'numeric', month: 'long', day: 'numeric' })}\n </div>\n </div>\n )\n}"]}
|
|
@@ -9,7 +9,7 @@ export const SolidChatterDateDivider = ({ date }: Props) => {
|
|
|
9
9
|
return (
|
|
10
10
|
<div className={styles.chatterDatetimeDivider}>
|
|
11
11
|
<div className={`${styles.chatterDividerContent} absolute`}>
|
|
12
|
-
{date}
|
|
12
|
+
{new Date(date).toLocaleDateString(undefined, { year: 'numeric', month: 'long', day: 'numeric' })}
|
|
13
13
|
</div>
|
|
14
14
|
</div>
|
|
15
15
|
)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LoadDynamicJsxComponent.d.ts","sourceRoot":"./","sources":["components/core/common/LoadDynamicJsxComponent.tsx"],"names":[],"mappings":"AAeA,eAAO,MAAM,uBAAuB,gBAAiB,GAAG,4CAoDvD,CAAA"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { ERROR_MESSAGES } from "../../../constants/error-messages";
|
|
4
|
+
import dynamic from "next/dynamic";
|
|
5
|
+
import { useState, useEffect } from "react";
|
|
6
|
+
// Fallback component for missing components
|
|
7
|
+
const FallbackComponent = ({ componentName }) => (_jsxs("div", { style: { color: "red" }, children: ["Could not load ", _jsx("strong", { children: componentName })] }));
|
|
8
|
+
export const LoadDynamicJsxComponent = ({ context }) => {
|
|
9
|
+
// const Component = dynamic<Props>(
|
|
10
|
+
// async () => {
|
|
11
|
+
// try {
|
|
12
|
+
// const componentName = context?.rowAction?.action?.customComponent.split('/').pop();
|
|
13
|
+
// const mod = await import();
|
|
14
|
+
// // Return the default export or a named export matching the componentName
|
|
15
|
+
// return mod.default || mod[componentName];
|
|
16
|
+
// } catch (error) {
|
|
17
|
+
// console.error(`Failed to load component "${context?.rowAction?.action?.customComponent}":`, error);
|
|
18
|
+
// // Return a fallback component if the import fails
|
|
19
|
+
// return () => <GenerateModelCodeRowAction context={context} />;
|
|
20
|
+
// }
|
|
21
|
+
// },
|
|
22
|
+
// { ssr: false } // Disable server-side rendering
|
|
23
|
+
// );
|
|
24
|
+
const [Component, setComponent] = useState(null);
|
|
25
|
+
const componentPath = context?.rowAction?.action?.customComponent;
|
|
26
|
+
const componentKey = componentPath?.split("/")?.pop();
|
|
27
|
+
const componentMap = {
|
|
28
|
+
"GenerateModelCodeRowAction": dynamic(() => import("../extension/solid-core/modelMetadata/list/GenerateModelCodeRowAction"), { ssr: false }),
|
|
29
|
+
"GenerateModuleCodeRowAction": dynamic(() => import("../extension/solid-core/moduleMetadata/list/GenerateModuleCodeRowAction"), { ssr: false }),
|
|
30
|
+
};
|
|
31
|
+
useEffect(() => {
|
|
32
|
+
if (!componentKey)
|
|
33
|
+
return;
|
|
34
|
+
if (componentMap[componentKey]) {
|
|
35
|
+
setComponent(() => () => setComponent(() => componentMap[componentKey]));
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
import(componentPath)
|
|
39
|
+
.then((mod) => setComponent(() => mod.default || mod))
|
|
40
|
+
.catch((err) => {
|
|
41
|
+
console.error(` ${ERROR_MESSAGES.LOADING_COMPONENT} ${componentPath}:`, err);
|
|
42
|
+
setComponent(() => () => _jsx(FallbackComponent, { componentName: componentKey }));
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
}, [componentKey]);
|
|
46
|
+
if (!Component)
|
|
47
|
+
return _jsx("p", { children: "Loading..." });
|
|
48
|
+
return _jsx(Component, { context: context });
|
|
49
|
+
};
|
|
50
|
+
//# sourceMappingURL=LoadDynamicJsxComponent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LoadDynamicJsxComponent.js","sourceRoot":"./","sources":["components/core/common/LoadDynamicJsxComponent.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AACb,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACnE,OAAO,OAAO,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAC5C,4CAA4C;AAC5C,MAAM,iBAAiB,GAAG,CAAC,EAAE,aAAa,EAAO,EAAE,EAAE,CAAC,CAClD,eAAK,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,gCACT,2BAAS,aAAa,GAAU,IAC7C,CACT,CAAC;AAMF,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,EAAE,OAAO,EAAO,EAAE,EAAE;IAGxD,oCAAoC;IACpC,oBAAoB;IACpB,gBAAgB;IAEhB,kGAAkG;IAClG,0CAA0C;IAC1C,wFAAwF;IACxF,wDAAwD;IACxD,4BAA4B;IAC5B,kHAAkH;IAClH,iEAAiE;IACjE,6EAA6E;IAC7E,YAAY;IACZ,SAAS;IACT,sDAAsD;IACtD,KAAK;IACL,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAM,IAAI,CAAC,CAAC;IACtD,MAAM,aAAa,GAAG,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,eAAe,CAAC;IAClE,MAAM,YAAY,GAAG,aAAa,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC;IAEtD,MAAM,YAAY,GAAwB;QACtC,4BAA4B,EAAE,OAAO,CACnC,GAAG,EAAE,CAAC,MAAM,CAAC,uEAAuE,CAAC,EACrF,EAAE,GAAG,EAAE,KAAK,EAAE,CACf;QACD,6BAA6B,EAAE,OAAO,CAClC,GAAG,EAAE,CAAC,MAAM,CAAC,yEAAyE,CAAC,EACvF,EAAE,GAAG,EAAE,KAAK,EAAE,CACjB;KACJ,CAAC;IAEF,SAAS,CAAC,GAAG,EAAE;QACX,IAAI,CAAC,YAAY;YAAE,OAAO;QAE1B,IAAI,YAAY,CAAC,YAAY,CAAC,EAAE;YAC5B,YAAY,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;SAC5E;aAAM;YACP,MAAM,CAAC,aAAa,CAAC;iBAChB,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,CAAC;iBACrD,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;gBACf,OAAO,CAAC,KAAK,CAAC,IAAI,cAAc,CAAC,iBAAiB,IAAI,aAAa,GAAG,EAAE,GAAG,CAAC,CAAC;gBAC7E,YAAY,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,KAAC,iBAAiB,IAAC,aAAa,EAAE,YAAY,GAAI,CAAC,CAAC;YAC7E,CAAC,CAAC,CAAC;SACN;IACL,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;IAEnB,IAAI,CAAC,SAAS;QAAE,OAAO,qCAAiB,CAAC;IAEzC,OAAO,KAAC,SAAS,IAAC,OAAO,EAAE,OAAO,GAAI,CAAC;AAC3C,CAAC,CAAA","sourcesContent":["'use client';\nimport { ERROR_MESSAGES } from \"../../../constants/error-messages\";\nimport dynamic from \"next/dynamic\";\nimport { useState, useEffect } from \"react\";\n// Fallback component for missing components\nconst FallbackComponent = ({ componentName }: any) => (\n <div style={{ color: \"red\" }}>\n Could not load <strong>{componentName}</strong>\n </div>\n);\n\ntype Props = {\n context: any;\n};\n\nexport const LoadDynamicJsxComponent = ({ context }: any) => {\n\n \n // const Component = dynamic<Props>(\n // async () => {\n // try {\n \n // const componentName = context?.rowAction?.action?.customComponent.split('/').pop();\n // const mod = await import();\n // // Return the default export or a named export matching the componentName\n // return mod.default || mod[componentName];\n // } catch (error) {\n // console.error(`Failed to load component \"${context?.rowAction?.action?.customComponent}\":`, error);\n // // Return a fallback component if the import fails\n // return () => <GenerateModelCodeRowAction context={context} />;\n // }\n // },\n // { ssr: false } // Disable server-side rendering\n // );\n const [Component, setComponent] = useState<any>(null);\n const componentPath = context?.rowAction?.action?.customComponent;\n const componentKey = componentPath?.split(\"/\")?.pop();\n\n const componentMap: Record<string, any> = {\n \"GenerateModelCodeRowAction\": dynamic(\n () => import(\"../extension/solid-core/modelMetadata/list/GenerateModelCodeRowAction\"),\n { ssr: false }\n ),\n \"GenerateModuleCodeRowAction\": dynamic(\n () => import(\"../extension/solid-core/moduleMetadata/list/GenerateModuleCodeRowAction\"),\n { ssr: false }\n ),\n };\n\n useEffect(() => {\n if (!componentKey) return;\n\n if (componentMap[componentKey]) {\n setComponent(() => () => setComponent(() => componentMap[componentKey]));\n } else {\n import(componentPath)\n .then((mod) => setComponent(() => mod.default || mod))\n .catch((err) => {\n console.error(` ${ERROR_MESSAGES.LOADING_COMPONENT} ${componentPath}:`, err);\n setComponent(() => () => <FallbackComponent componentName={componentKey} />);\n });\n }\n }, [componentKey]);\n\n if (!Component) return <p>Loading...</p>;\n\n return <Component context={context} />;\n}\n\n\n"]}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { ERROR_MESSAGES } from "../../../constants/error-messages";
|
|
3
|
+
import dynamic from "next/dynamic";
|
|
4
|
+
import { useState, useEffect } from "react";
|
|
5
|
+
// Fallback component for missing components
|
|
6
|
+
const FallbackComponent = ({ componentName }: any) => (
|
|
7
|
+
<div style={{ color: "red" }}>
|
|
8
|
+
Could not load <strong>{componentName}</strong>
|
|
9
|
+
</div>
|
|
10
|
+
);
|
|
11
|
+
|
|
12
|
+
type Props = {
|
|
13
|
+
context: any;
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
export const LoadDynamicJsxComponent = ({ context }: any) => {
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
// const Component = dynamic<Props>(
|
|
20
|
+
// async () => {
|
|
21
|
+
// try {
|
|
22
|
+
|
|
23
|
+
// const componentName = context?.rowAction?.action?.customComponent.split('/').pop();
|
|
24
|
+
// const mod = await import();
|
|
25
|
+
// // Return the default export or a named export matching the componentName
|
|
26
|
+
// return mod.default || mod[componentName];
|
|
27
|
+
// } catch (error) {
|
|
28
|
+
// console.error(`Failed to load component "${context?.rowAction?.action?.customComponent}":`, error);
|
|
29
|
+
// // Return a fallback component if the import fails
|
|
30
|
+
// return () => <GenerateModelCodeRowAction context={context} />;
|
|
31
|
+
// }
|
|
32
|
+
// },
|
|
33
|
+
// { ssr: false } // Disable server-side rendering
|
|
34
|
+
// );
|
|
35
|
+
const [Component, setComponent] = useState<any>(null);
|
|
36
|
+
const componentPath = context?.rowAction?.action?.customComponent;
|
|
37
|
+
const componentKey = componentPath?.split("/")?.pop();
|
|
38
|
+
|
|
39
|
+
const componentMap: Record<string, any> = {
|
|
40
|
+
"GenerateModelCodeRowAction": dynamic(
|
|
41
|
+
() => import("../extension/solid-core/modelMetadata/list/GenerateModelCodeRowAction"),
|
|
42
|
+
{ ssr: false }
|
|
43
|
+
),
|
|
44
|
+
"GenerateModuleCodeRowAction": dynamic(
|
|
45
|
+
() => import("../extension/solid-core/moduleMetadata/list/GenerateModuleCodeRowAction"),
|
|
46
|
+
{ ssr: false }
|
|
47
|
+
),
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
useEffect(() => {
|
|
51
|
+
if (!componentKey) return;
|
|
52
|
+
|
|
53
|
+
if (componentMap[componentKey]) {
|
|
54
|
+
setComponent(() => () => setComponent(() => componentMap[componentKey]));
|
|
55
|
+
} else {
|
|
56
|
+
import(componentPath)
|
|
57
|
+
.then((mod) => setComponent(() => mod.default || mod))
|
|
58
|
+
.catch((err) => {
|
|
59
|
+
console.error(` ${ERROR_MESSAGES.LOADING_COMPONENT} ${componentPath}:`, err);
|
|
60
|
+
setComponent(() => () => <FallbackComponent componentName={componentKey} />);
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
}, [componentKey]);
|
|
64
|
+
|
|
65
|
+
if (!Component) return <p>Loading...</p>;
|
|
66
|
+
|
|
67
|
+
return <Component context={context} />;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
|
|
@@ -300,6 +300,6 @@ export var DashboardFilter = function (_a) {
|
|
|
300
300
|
onApply([]);
|
|
301
301
|
onHide();
|
|
302
302
|
};
|
|
303
|
-
return (_jsxs(Dialog, { header: false, className: "solid-global-search-filter", showHeader: false, visible: visible, style: { width: '50vw' }, breakpoints: { '1024px': '75vw', '991px': '90vw', '767px': '94w', '250px': '96vw' }, onHide: onHide, children: [_jsxs("div", { className: "flex align-items-center justify-content-between px-3", children: [_jsx("h5", { className: "solid-custom-title m-0", children: "Add
|
|
303
|
+
return (_jsxs(Dialog, { header: false, className: "solid-global-search-filter", showHeader: false, visible: visible, style: { width: '50vw' }, breakpoints: { '1024px': '75vw', '991px': '90vw', '767px': '94w', '250px': '96vw' }, onHide: onHide, children: [_jsxs("div", { className: "flex align-items-center justify-content-between px-3", children: [_jsx("h5", { className: "solid-custom-title m-0", children: "Add Dashboard Filter" }), _jsx(Button, { icon: "pi pi-times", rounded: true, text: true, "aria-label": "Cancel", type: "reset", size: "small", onClick: onHide })] }), _jsx(Divider, { className: "m-0" }), _jsxs("div", { className: "p-2 lg:p-2", children: [_jsx(Fieldset, { className: 'primary-filter-fieldset', children: _jsxs("div", { className: "flex flex-column gap-3 py-3", children: [rules.map(function (rule) { return (_jsxs("div", { className: "grid grid-nogutter align-items-start", children: [_jsx("div", { className: "col-12 md:col-4 pr-2", children: _jsx("div", { className: "p-inputtext p-disabled w-full flex align-items-center mb-2 md:mb-0", style: { minHeight: '38px' }, children: rule.fieldName }) }), _jsx("div", { className: "col-12 md:col-4 pr-2", children: _jsx(Dropdown, { value: rule.matchMode, onChange: function (e) { return handleChange(rule.id, 'matchMode', e.value); }, options: rule.variable.variableType === 'date' ? dateFilterMatchModeOptions : selectionFilterMatchModeOptions, optionLabel: 'label', optionValue: 'value', placeholder: "Select Operator", className: "p-inputtext-sm w-full" }) }), _jsx("div", { className: "col-12 md:col-4", children: _jsx(FilterValueInput, { rule: rule, onChange: handleChange }) })] }, rule.id)); }), rules.length === 0 && (_jsx("div", { className: "text-color-secondary italic", children: "No variables available for this dashboard." }))] }) }), _jsxs("div", { className: 'flex gap-3 mt-3', children: [_jsx(Button, { label: "Apply", size: "small", onClick: handleApply, autoFocus: true }), _jsx(Button, { type: 'button', label: 'Cancel', outlined: true, size: 'small', onClick: onHide })] })] })] }));
|
|
304
304
|
};
|
|
305
305
|
//# sourceMappingURL=DashboardFilter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DashboardFilter.js","sourceRoot":"","sources":["../../../../src/components/core/dashboard/DashboardFilter.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { useState, useEffect } from \"react\";\nimport { Button } from \"primereact/button\";\nimport { Dialog } from \"primereact/dialog\";\nimport { Dropdown } from \"primereact/dropdown\";\nimport { Calendar } from \"primereact/calendar\";\nimport { AutoComplete, AutoCompleteCompleteEvent } from \"primereact/autocomplete\";\nimport { SqlExpression } from \"../../../types/solid-core\";\nimport { DashboardVariableRecord } from \"./SolidDashboard\";\nimport { useLazyGetDashboardVariableSelectionDynamicValuesQuery } from \"../../../redux/api/dashboardApi\";\nimport { Divider } from \"primereact/divider\";\nimport { Fieldset } from \"primereact/fieldset\";\n\ninterface DashboardFilterProps {\n dashboardVariables: DashboardVariableRecord[];\n initialFilters: SqlExpression[];\n onApply: (filters: SqlExpression[]) => void;\n visible: boolean;\n onHide: () => void;\n}\n\nconst getNumberOfInputs = (matchMode: any): number | null => {\n switch (matchMode) {\n case '$between': return 2;\n case '$in': case '$notIn': return null;\n case '$startsWith': case '$contains': case '$notContains': case '$endsWith': case '$equals': case '$notEquals': case '$lt': case '$lte': case '$gt': case '$gte': return 1;\n case '$null': case '$notNull': return 0;\n default: return 1;\n }\n}\n\nconst dateFilterMatchModeOptions = [\n { label: 'Equals', value: \"$eq\" },\n { label: 'Not Equals', value: \"$nei\" },\n { label: 'Less Than', value: \"$lt\" },\n { label: 'Less Than Or Equal', value: \"$lte\" },\n { label: 'Greater Than', value: \"$gt\" },\n { label: 'Greater Than Or Equal', value: \"$gte\" },\n { label: 'In', value: \"$in\" },\n { label: 'Not In', value: \"$notIn\" },\n { label: 'Between', value: \"$between\" }\n];\n\nconst selectionFilterMatchModeOptions = [\n { label: 'In', value: \"$in\" },\n { label: 'Not In', value: \"$notIn\" }\n];\n\nconst FilterValueInput = ({ rule, onChange }: any) => {\n const numberOfInputs = getNumberOfInputs(rule.matchMode);\n\n // Ensure values is an array properly sized immediately on render\n let values = Array.isArray(rule.value) ? [...rule.value] : (rule.value ? [rule.value] : []);\n\n if (numberOfInputs !== null && numberOfInputs > 0 && values.length !== numberOfInputs) {\n if (values.length < numberOfInputs) {\n values = [...values, ...Array(numberOfInputs - values.length).fill('')];\n } else {\n values = values.slice(0, numberOfInputs);\n }\n }\n if (values.length === 0 && (numberOfInputs === null || numberOfInputs > 0)) {\n values = [''];\n }\n\n const updateValue = (index: number, val: any) => {\n const newValues = [...values];\n newValues[index] = val;\n onChange(rule.id, 'value', numberOfInputs === 1 ? newValues[0] : newValues);\n };\n\n const addInput = () => {\n const newValues = [...values, ''];\n onChange(rule.id, 'value', newValues);\n };\n\n const deleteInput = (index: number) => {\n if (values.length > 1) {\n const newValues = values.filter((_: any, i: number) => i !== index);\n onChange(rule.id, 'value', newValues);\n }\n };\n\n // Components for actual rendering\n const renderDate = (val: any, index: number) => {\n let dateVal = val ? new Date(val) : null;\n if (isNaN(dateVal?.getTime() || 0)) dateVal = null;\n return (\n <Calendar\n value={dateVal}\n onChange={(e) => {\n const dateStr = e.value ? (e.value as Date).toISOString().split('T')[0] : '';\n updateValue(index, dateStr);\n }}\n dateFormat=\"mm/dd/yy\"\n placeholder=\"mm/dd/yyyy\"\n mask=\"99/99/9999\"\n className=\"w-full\"\n inputClassName=\"w-full p-inputtext-sm\"\n />\n );\n };\n\n const SelectionStaticInput = ({ val, index, updateValue, dv }: any) => {\n const [filteredItems, setFilteredItems] = useState<{ label: string, value: string }[]>([]);\n const staticValues = JSON.parse(dv.selectionStaticValues || '[]') || [];\n const staticValueItems = staticValues.map((v: any) => ({ value: v.split(':')[0], label: v.split(':')[1] }));\n\n const search = (event: AutoCompleteCompleteEvent) => {\n const query = event.query.toLowerCase();\n const filtered = staticValueItems.filter((item: any) =>\n item.label.toLowerCase().includes(query)\n );\n setFilteredItems(filtered);\n };\n\n return (\n <AutoComplete\n value={val}\n suggestions={filteredItems}\n completeMethod={search}\n onChange={(e) => updateValue(index, e.value)}\n field=\"label\"\n dropdown\n className=\"w-full\"\n inputClassName=\"w-full p-inputtext-sm\"\n />\n );\n };\n\n const SelectionDynamicInput = ({ val, index, updateValue, dv }: any) => {\n const [filteredItems, setFilteredItems] = useState<{ label: string, value: string }[]>([]);\n const [trigger] = useLazyGetDashboardVariableSelectionDynamicValuesQuery();\n\n const search = async (event: AutoCompleteCompleteEvent) => {\n const queryString = `variableId=${dv.id}&q=${event.query}`;\n try {\n const res = await trigger(queryString).unwrap();\n const filtered = res.filter((item: any) =>\n item.label.toLowerCase().includes(event.query.toLowerCase())\n );\n setFilteredItems(filtered);\n } catch (error) {\n console.error(error);\n }\n };\n\n return (\n <AutoComplete\n value={val}\n suggestions={filteredItems}\n completeMethod={search}\n onChange={(e) => updateValue(index, e.value)}\n field=\"label\"\n dropdown\n className=\"w-full\"\n inputClassName=\"w-full p-inputtext-sm\"\n />\n );\n };\n\n if (numberOfInputs === 0) return <></>;\n\n return (\n <div className=\"flex flex-column gap-2\">\n {values.map((val: any, index: number) => (\n <div key={index} className=\"flex gap-2\">\n <div className=\"flex-grow-1\">\n {rule.variable.variableType === 'date' && renderDate(val, index)}\n {rule.variable.variableType === 'selectionStatic' && <SelectionStaticInput val={val} index={index} updateValue={updateValue} dv={rule.variable} />}\n {rule.variable.variableType === 'selectionDynamic' && <SelectionDynamicInput val={val} index={index} updateValue={updateValue} dv={rule.variable} />}\n </div>\n {numberOfInputs === null && (\n <div className=\"flex align-items-center\">\n <Button type=\"button\" text severity='secondary' icon=\"pi pi-plus\" size='small' onClick={addInput} className='p-0 mr-2 target-btn' style={{ width: 30, minWidth: 30 }} />\n <Button type=\"button\" text severity='secondary' icon=\"pi pi-trash\" size='small' onClick={() => deleteInput(index)} className='p-0 target-btn' style={{ width: 30, minWidth: 30 }} disabled={values.length <= 1} />\n </div>\n )}\n </div>\n ))}\n </div>\n );\n};\n\nexport const DashboardFilter: React.FC<DashboardFilterProps> = ({\n dashboardVariables,\n initialFilters,\n onApply,\n visible,\n onHide,\n}) => {\n const [rules, setRules] = useState<any[]>([]);\n\n useEffect(() => {\n if (visible) {\n // Initialize rules based on dashboardVariables\n const newRules = dashboardVariables.map((dv, index) => {\n const existingFilter = initialFilters.find((f: any) => f.variableName === dv.variableName);\n\n const defaultOperator = dv.defaultOperator || (dv.variableType === 'date' ? '$between' : '$in');\n\n let defaultValue = null;\n if (existingFilter && existingFilter.value !== undefined) {\n defaultValue = existingFilter.value;\n } else if (dv.defaultValue) {\n try {\n defaultValue = JSON.parse(dv.defaultValue || '[]');\n } catch (e) {\n defaultValue = null;\n }\n }\n\n return {\n id: index + 1,\n fieldName: dv.variableName,\n matchMode: existingFilter ? existingFilter.operator : defaultOperator,\n value: defaultValue,\n variable: dv\n };\n });\n setRules(newRules);\n }\n }, [visible, dashboardVariables, initialFilters]);\n\n const handleChange = (id: number, key: string, value: any) => {\n setRules((prev) =>\n prev.map((rule) => {\n if (rule.id === id) {\n let newVal = rule.value;\n // Immediate sync of values count when operator matches\n if (key === 'matchMode') {\n const newNum = getNumberOfInputs(value);\n let currentValues = Array.isArray(rule.value) ? [...rule.value] : (rule.value ? [rule.value] : []);\n if (newNum !== null && newNum > 0) {\n if (currentValues.length < newNum) {\n currentValues = [...currentValues, ...Array(newNum - currentValues.length).fill('')];\n } else if (currentValues.length > newNum) {\n currentValues = currentValues.slice(0, newNum);\n }\n } else if (newNum === null && currentValues.length === 0) {\n currentValues = [''];\n }\n newVal = newNum === 1 && currentValues.length === 1 ? currentValues[0] : currentValues;\n return { ...rule, [key]: value, value: newVal };\n }\n return { ...rule, [key]: value };\n }\n return rule;\n })\n );\n };\n\n const handleApply = () => {\n const newFilters: SqlExpression[] = rules\n .filter((rule) => {\n if (['$null', '$notNull'].includes(rule.matchMode)) return true;\n\n if (rule.value === null || rule.value === undefined) return false;\n if (Array.isArray(rule.value)) {\n const hasValidValue = rule.value.some((v: any) => v !== '' && v !== null);\n if (!hasValidValue) return false;\n } else {\n if (rule.value === '') return false;\n }\n return true;\n })\n .map((rule) => {\n let finalValue = rule.value;\n const numberOfInputs = getNumberOfInputs(rule.matchMode);\n // Clean array values or extract single values\n if (Array.isArray(finalValue)) {\n finalValue = finalValue.filter(v => v !== null && v !== '');\n if (numberOfInputs === 1 && finalValue.length > 0) {\n finalValue = finalValue[0];\n }\n }\n\n // For selection static/dynamic, we might have selected an object {label, value} or string\n // We need to extract the 'value' if it's an object from AutoComplete selection\n if (Array.isArray(finalValue)) {\n finalValue = finalValue.map(v => typeof v === 'object' && v !== null && 'value' in v ? v.value : v);\n } else if (typeof finalValue === 'object' && finalValue !== null && 'value' in finalValue) {\n finalValue = finalValue.value;\n }\n\n return {\n variableName: rule.fieldName,\n operator: rule.matchMode,\n value: finalValue,\n }\n });\n\n onApply(newFilters);\n onHide();\n };\n\n const handleClear = () => {\n onApply([]);\n onHide();\n };\n\n return (\n\n\n <Dialog header={false} className=\"solid-global-search-filter\" showHeader={false} visible={visible} style={{ width: '50vw' }} breakpoints={{ '1024px': '75vw', '991px': '90vw', '767px': '94w', '250px': '96vw' }} onHide={onHide}>\n <div className=\"flex align-items-center justify-content-between px-3\">\n <h5 className=\"solid-custom-title m-0\">Add Custom Filter</h5>\n <Button icon=\"pi pi-times\" rounded text aria-label=\"Cancel\" type=\"reset\" size=\"small\" onClick={onHide} />\n </div>\n <Divider className=\"m-0\" />\n <div className=\"p-2 lg:p-2\">\n <Fieldset className='primary-filter-fieldset'>\n <div className=\"flex flex-column gap-3 py-3\">\n\n {rules.map((rule) => (\n <div key={rule.id} className=\"grid grid-nogutter align-items-start\">\n <div className=\"col-12 md:col-3 pr-2\">\n <div className=\"p-inputtext p-disabled w-full flex align-items-center mb-2 md:mb-0\" style={{ minHeight: '38px' }}>\n {rule.fieldName}\n </div>\n </div>\n <div className=\"col-12 md:col-3 pr-2\">\n <Dropdown\n value={rule.matchMode}\n onChange={(e: any) => handleChange(rule.id, 'matchMode', e.value)}\n options={rule.variable.variableType === 'date' ? dateFilterMatchModeOptions : selectionFilterMatchModeOptions}\n optionLabel='label'\n optionValue='value'\n placeholder=\"Select Operator\"\n className=\"p-inputtext-sm w-full\"\n />\n </div>\n <div className=\"col-12 md:col-6\">\n <FilterValueInput rule={rule} onChange={handleChange} />\n </div>\n </div>\n ))}\n {rules.length === 0 && (\n <div className=\"text-color-secondary italic\">No variables available for this dashboard.</div>\n )}\n </div>\n </Fieldset>\n {/* <div className=\"flex justify-content-between align-items-center mt-4\">\n <Button label=\"Clear Filters\" icon=\"pi pi-filter-slash\" severity=\"danger\" text onClick={handleClear} />\n <div className=\"flex gap-2\">\n </div>\n </div> */}\n <div className='flex gap-3 mt-3'>\n <Button label=\"Apply\" icon=\"pi pi-check\" onClick={handleApply} autoFocus />\n <Button type='button' label='Cancel' outlined size='small' onClick={onHide} />\n </div>\n\n </div>\n </Dialog>\n\n );\n};\n"]}
|
|
1
|
+
{"version":3,"file":"DashboardFilter.js","sourceRoot":"","sources":["../../../../src/components/core/dashboard/DashboardFilter.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { useState, useEffect } from \"react\";\nimport { Button } from \"primereact/button\";\nimport { Dialog } from \"primereact/dialog\";\nimport { Dropdown } from \"primereact/dropdown\";\nimport { Calendar } from \"primereact/calendar\";\nimport { AutoComplete, AutoCompleteCompleteEvent } from \"primereact/autocomplete\";\nimport { SqlExpression } from \"../../../types/solid-core\";\nimport { DashboardVariableRecord } from \"./SolidDashboard\";\nimport { useLazyGetDashboardVariableSelectionDynamicValuesQuery } from \"../../../redux/api/dashboardApi\";\nimport { Divider } from \"primereact/divider\";\nimport { Fieldset } from \"primereact/fieldset\";\n\ninterface DashboardFilterProps {\n dashboardVariables: DashboardVariableRecord[];\n initialFilters: SqlExpression[];\n onApply: (filters: SqlExpression[]) => void;\n visible: boolean;\n onHide: () => void;\n}\n\nconst getNumberOfInputs = (matchMode: any): number | null => {\n switch (matchMode) {\n case '$between': return 2;\n case '$in': case '$notIn': return null;\n case '$startsWith': case '$contains': case '$notContains': case '$endsWith': case '$equals': case '$notEquals': case '$lt': case '$lte': case '$gt': case '$gte': return 1;\n case '$null': case '$notNull': return 0;\n default: return 1;\n }\n}\n\nconst dateFilterMatchModeOptions = [\n { label: 'Equals', value: \"$eq\" },\n { label: 'Not Equals', value: \"$nei\" },\n { label: 'Less Than', value: \"$lt\" },\n { label: 'Less Than Or Equal', value: \"$lte\" },\n { label: 'Greater Than', value: \"$gt\" },\n { label: 'Greater Than Or Equal', value: \"$gte\" },\n { label: 'In', value: \"$in\" },\n { label: 'Not In', value: \"$notIn\" },\n { label: 'Between', value: \"$between\" }\n];\n\nconst selectionFilterMatchModeOptions = [\n { label: 'In', value: \"$in\" },\n { label: 'Not In', value: \"$notIn\" }\n];\n\nconst FilterValueInput = ({ rule, onChange }: any) => {\n const numberOfInputs = getNumberOfInputs(rule.matchMode);\n\n // Ensure values is an array properly sized immediately on render\n let values = Array.isArray(rule.value) ? [...rule.value] : (rule.value ? [rule.value] : []);\n\n if (numberOfInputs !== null && numberOfInputs > 0 && values.length !== numberOfInputs) {\n if (values.length < numberOfInputs) {\n values = [...values, ...Array(numberOfInputs - values.length).fill('')];\n } else {\n values = values.slice(0, numberOfInputs);\n }\n }\n if (values.length === 0 && (numberOfInputs === null || numberOfInputs > 0)) {\n values = [''];\n }\n\n const updateValue = (index: number, val: any) => {\n const newValues = [...values];\n newValues[index] = val;\n onChange(rule.id, 'value', numberOfInputs === 1 ? newValues[0] : newValues);\n };\n\n const addInput = () => {\n const newValues = [...values, ''];\n onChange(rule.id, 'value', newValues);\n };\n\n const deleteInput = (index: number) => {\n if (values.length > 1) {\n const newValues = values.filter((_: any, i: number) => i !== index);\n onChange(rule.id, 'value', newValues);\n }\n };\n\n // Components for actual rendering\n const renderDate = (val: any, index: number) => {\n let dateVal = val ? new Date(val) : null;\n if (isNaN(dateVal?.getTime() || 0)) dateVal = null;\n return (\n <Calendar\n value={dateVal}\n onChange={(e) => {\n const dateStr = e.value ? (e.value as Date).toISOString().split('T')[0] : '';\n updateValue(index, dateStr);\n }}\n dateFormat=\"mm/dd/yy\"\n placeholder=\"mm/dd/yyyy\"\n mask=\"99/99/9999\"\n className=\"w-full\"\n inputClassName=\"w-full p-inputtext-sm\"\n />\n );\n };\n\n const SelectionStaticInput = ({ val, index, updateValue, dv }: any) => {\n const [filteredItems, setFilteredItems] = useState<{ label: string, value: string }[]>([]);\n const staticValues = JSON.parse(dv.selectionStaticValues || '[]') || [];\n const staticValueItems = staticValues.map((v: any) => ({ value: v.split(':')[0], label: v.split(':')[1] }));\n\n const search = (event: AutoCompleteCompleteEvent) => {\n const query = event.query.toLowerCase();\n const filtered = staticValueItems.filter((item: any) =>\n item.label.toLowerCase().includes(query)\n );\n setFilteredItems(filtered);\n };\n\n return (\n <AutoComplete\n value={val}\n suggestions={filteredItems}\n completeMethod={search}\n onChange={(e) => updateValue(index, e.value)}\n field=\"label\"\n dropdown\n className=\"w-full\"\n inputClassName=\"w-full p-inputtext-sm\"\n />\n );\n };\n\n const SelectionDynamicInput = ({ val, index, updateValue, dv }: any) => {\n const [filteredItems, setFilteredItems] = useState<{ label: string, value: string }[]>([]);\n const [trigger] = useLazyGetDashboardVariableSelectionDynamicValuesQuery();\n\n const search = async (event: AutoCompleteCompleteEvent) => {\n const queryString = `variableId=${dv.id}&q=${event.query}`;\n try {\n const res = await trigger(queryString).unwrap();\n const filtered = res.filter((item: any) =>\n item.label.toLowerCase().includes(event.query.toLowerCase())\n );\n setFilteredItems(filtered);\n } catch (error) {\n console.error(error);\n }\n };\n\n return (\n <AutoComplete\n value={val}\n suggestions={filteredItems}\n completeMethod={search}\n onChange={(e) => updateValue(index, e.value)}\n field=\"label\"\n dropdown\n className=\"w-full\"\n inputClassName=\"w-full p-inputtext-sm\"\n />\n );\n };\n\n if (numberOfInputs === 0) return <></>;\n\n return (\n <div className=\"flex flex-column gap-2\">\n {values.map((val: any, index: number) => (\n <div key={index} className=\"flex gap-2\">\n <div className=\"flex-grow-1\">\n {rule.variable.variableType === 'date' && renderDate(val, index)}\n {rule.variable.variableType === 'selectionStatic' && <SelectionStaticInput val={val} index={index} updateValue={updateValue} dv={rule.variable} />}\n {rule.variable.variableType === 'selectionDynamic' && <SelectionDynamicInput val={val} index={index} updateValue={updateValue} dv={rule.variable} />}\n </div>\n {numberOfInputs === null && (\n <div className=\"flex align-items-center\">\n <Button type=\"button\" text severity='secondary' icon=\"pi pi-plus\" size='small' onClick={addInput} className='p-0 mr-2 target-btn' style={{ width: 30, minWidth: 30 }} />\n <Button type=\"button\" text severity='secondary' icon=\"pi pi-trash\" size='small' onClick={() => deleteInput(index)} className='p-0 target-btn' style={{ width: 30, minWidth: 30 }} disabled={values.length <= 1} />\n </div>\n )}\n </div>\n ))}\n </div>\n );\n};\n\nexport const DashboardFilter: React.FC<DashboardFilterProps> = ({\n dashboardVariables,\n initialFilters,\n onApply,\n visible,\n onHide,\n}) => {\n const [rules, setRules] = useState<any[]>([]);\n\n useEffect(() => {\n if (visible) {\n // Initialize rules based on dashboardVariables\n const newRules = dashboardVariables.map((dv, index) => {\n const existingFilter = initialFilters.find((f: any) => f.variableName === dv.variableName);\n\n const defaultOperator = dv.defaultOperator || (dv.variableType === 'date' ? '$between' : '$in');\n\n let defaultValue = null;\n if (existingFilter && existingFilter.value !== undefined) {\n defaultValue = existingFilter.value;\n } else if (dv.defaultValue) {\n try {\n defaultValue = JSON.parse(dv.defaultValue || '[]');\n } catch (e) {\n defaultValue = null;\n }\n }\n\n return {\n id: index + 1,\n fieldName: dv.variableName,\n matchMode: existingFilter ? existingFilter.operator : defaultOperator,\n value: defaultValue,\n variable: dv\n };\n });\n setRules(newRules);\n }\n }, [visible, dashboardVariables, initialFilters]);\n\n const handleChange = (id: number, key: string, value: any) => {\n setRules((prev) =>\n prev.map((rule) => {\n if (rule.id === id) {\n let newVal = rule.value;\n // Immediate sync of values count when operator matches\n if (key === 'matchMode') {\n const newNum = getNumberOfInputs(value);\n let currentValues = Array.isArray(rule.value) ? [...rule.value] : (rule.value ? [rule.value] : []);\n if (newNum !== null && newNum > 0) {\n if (currentValues.length < newNum) {\n currentValues = [...currentValues, ...Array(newNum - currentValues.length).fill('')];\n } else if (currentValues.length > newNum) {\n currentValues = currentValues.slice(0, newNum);\n }\n } else if (newNum === null && currentValues.length === 0) {\n currentValues = [''];\n }\n newVal = newNum === 1 && currentValues.length === 1 ? currentValues[0] : currentValues;\n return { ...rule, [key]: value, value: newVal };\n }\n return { ...rule, [key]: value };\n }\n return rule;\n })\n );\n };\n\n const handleApply = () => {\n const newFilters: SqlExpression[] = rules\n .filter((rule) => {\n if (['$null', '$notNull'].includes(rule.matchMode)) return true;\n\n if (rule.value === null || rule.value === undefined) return false;\n if (Array.isArray(rule.value)) {\n const hasValidValue = rule.value.some((v: any) => v !== '' && v !== null);\n if (!hasValidValue) return false;\n } else {\n if (rule.value === '') return false;\n }\n return true;\n })\n .map((rule) => {\n let finalValue = rule.value;\n const numberOfInputs = getNumberOfInputs(rule.matchMode);\n // Clean array values or extract single values\n if (Array.isArray(finalValue)) {\n finalValue = finalValue.filter(v => v !== null && v !== '');\n if (numberOfInputs === 1 && finalValue.length > 0) {\n finalValue = finalValue[0];\n }\n }\n\n // For selection static/dynamic, we might have selected an object {label, value} or string\n // We need to extract the 'value' if it's an object from AutoComplete selection\n if (Array.isArray(finalValue)) {\n finalValue = finalValue.map(v => typeof v === 'object' && v !== null && 'value' in v ? v.value : v);\n } else if (typeof finalValue === 'object' && finalValue !== null && 'value' in finalValue) {\n finalValue = finalValue.value;\n }\n\n return {\n variableName: rule.fieldName,\n operator: rule.matchMode,\n value: finalValue,\n }\n });\n\n onApply(newFilters);\n onHide();\n };\n\n const handleClear = () => {\n onApply([]);\n onHide();\n };\n\n return (\n\n\n <Dialog header={false} className=\"solid-global-search-filter\" showHeader={false} visible={visible} style={{ width: '50vw' }} breakpoints={{ '1024px': '75vw', '991px': '90vw', '767px': '94w', '250px': '96vw' }} onHide={onHide}>\n <div className=\"flex align-items-center justify-content-between px-3\">\n <h5 className=\"solid-custom-title m-0\">Add Dashboard Filter</h5>\n <Button icon=\"pi pi-times\" rounded text aria-label=\"Cancel\" type=\"reset\" size=\"small\" onClick={onHide} />\n </div>\n <Divider className=\"m-0\" />\n <div className=\"p-2 lg:p-2\">\n <Fieldset className='primary-filter-fieldset'>\n <div className=\"flex flex-column gap-3 py-3\">\n\n {rules.map((rule) => (\n <div key={rule.id} className=\"grid grid-nogutter align-items-start\">\n <div className=\"col-12 md:col-4 pr-2\">\n <div className=\"p-inputtext p-disabled w-full flex align-items-center mb-2 md:mb-0\" style={{ minHeight: '38px' }}>\n {rule.fieldName}\n </div>\n </div>\n <div className=\"col-12 md:col-4 pr-2\">\n <Dropdown\n value={rule.matchMode}\n onChange={(e: any) => handleChange(rule.id, 'matchMode', e.value)}\n options={rule.variable.variableType === 'date' ? dateFilterMatchModeOptions : selectionFilterMatchModeOptions}\n optionLabel='label'\n optionValue='value'\n placeholder=\"Select Operator\"\n className=\"p-inputtext-sm w-full\"\n />\n </div>\n <div className=\"col-12 md:col-4\">\n <FilterValueInput rule={rule} onChange={handleChange} />\n </div>\n </div>\n ))}\n {rules.length === 0 && (\n <div className=\"text-color-secondary italic\">No variables available for this dashboard.</div>\n )}\n </div>\n </Fieldset>\n {/* <div className=\"flex justify-content-between align-items-center mt-4\">\n <Button label=\"Clear Filters\" icon=\"pi pi-filter-slash\" severity=\"danger\" text onClick={handleClear} />\n <div className=\"flex gap-2\">\n </div>\n </div> */}\n <div className='flex gap-3 mt-3'>\n <Button label=\"Apply\" size=\"small\" onClick={handleApply} autoFocus />\n <Button type='button' label='Cancel' outlined size='small' onClick={onHide} />\n </div>\n\n </div>\n </Dialog>\n\n );\n};\n"]}
|