From 9719818bfdf293b291caff3fb44138002bbfb314 Mon Sep 17 00:00:00 2001
From: Tahier Hussain <89440263+tahierhussain@users.noreply.github.com>
Date: Tue, 28 Jan 2025 16:37:16 +0530
Subject: [PATCH 1/2] FIX: Improvements in the Unstract Subscription Plugins
Integration (#1098)
* Fixed related to unstract subscription plugins
* Restrict routing from top navbar if case if subscription expired
* Modified the to keep the time as optional in the response
* Fixed the bugs in disabling the navigation menu items
* Fixed sonar cloud issues
* Reverted back the approach to call the global store conditionally, as it is intentional
* Fix sonar cloud issues
* Minor fix
* Removed useEffect
* Minor fix
---
.../navigations/side-nav-bar/SideNavBar.jsx | 136 +++++++++++-------
.../navigations/top-nav-bar/TopNavBar.jsx | 38 +++++
frontend/src/helpers/GetStaticData.js | 25 ++--
frontend/src/routes/useMainAppRoutes.js | 5 +-
4 files changed, 145 insertions(+), 59 deletions(-)
diff --git a/frontend/src/components/navigations/side-nav-bar/SideNavBar.jsx b/frontend/src/components/navigations/side-nav-bar/SideNavBar.jsx
index 2d58d5cd8..57d0820bd 100644
--- a/frontend/src/components/navigations/side-nav-bar/SideNavBar.jsx
+++ b/frontend/src/components/navigations/side-nav-bar/SideNavBar.jsx
@@ -16,6 +16,7 @@ import task from "../../../assets/task.svg";
import VectorDbIcon from "../../../assets/vector-db.svg";
import TextExtractorIcon from "../../../assets/text-extractor.svg";
import { useSessionStore } from "../../../store/session-store";
+import { useMemo } from "react";
let getMenuItem;
try {
@@ -31,10 +32,16 @@ try {
// Plugin unavailable.
}
+let unstractSubscriptionPlan;
+let unstractSubscriptionPlanStore;
let dashboardSideMenuItem;
+let UNSTRACT_SUBSCRIPTION_PLANS;
try {
- dashboardSideMenuItem =
- require("../../../plugins/unstract-subscription/helper/constants").dashboardSideMenuItem;
+ unstractSubscriptionPlanStore = require("../../../plugins/store/unstract-subscription-plan-store");
+ const unstractSubscriptionConstants = require("../../../plugins/unstract-subscription/helper/constants");
+ dashboardSideMenuItem = unstractSubscriptionConstants?.dashboardSideMenuItem;
+ UNSTRACT_SUBSCRIPTION_PLANS =
+ unstractSubscriptionConstants?.UNSTRACT_SUBSCRIPTION_PLANS;
} catch (err) {
// Plugin unavailable.
}
@@ -43,6 +50,18 @@ const SideNavBar = ({ collapsed }) => {
const navigate = useNavigate();
const { sessionDetails } = useSessionStore();
const { orgName, flags } = sessionDetails;
+
+ try {
+ if (unstractSubscriptionPlanStore?.useUnstractSubscriptionPlanStore) {
+ unstractSubscriptionPlan =
+ unstractSubscriptionPlanStore?.useUnstractSubscriptionPlanStore(
+ (state) => state?.unstractSubscriptionPlan
+ );
+ }
+ } catch (error) {
+ // Do nothing
+ }
+
let menu;
if (sideMenu) {
menu = sideMenu.useSideMenu();
@@ -170,7 +189,26 @@ const SideNavBar = ({ collapsed }) => {
const data = menu || unstractMenuItems;
if (getMenuItem && flags?.app_deployment) {
- data[0]?.subMenu?.splice(1, 0, getMenuItem?.default(orgName));
+ data[0]?.subMenu?.splice(1, 0, getMenuItem.default(orgName));
+ }
+
+ const shouldDisableAll = useMemo(() => {
+ if (!unstractSubscriptionPlan || !UNSTRACT_SUBSCRIPTION_PLANS) {
+ return false;
+ }
+
+ return (
+ !unstractSubscriptionPlan?.subscriptionId &&
+ unstractSubscriptionPlan?.planType !== UNSTRACT_SUBSCRIPTION_PLANS?.TRIAL
+ );
+ }, [unstractSubscriptionPlan]);
+
+ if (shouldDisableAll) {
+ data.forEach((mainMenuItem) => {
+ mainMenuItem.subMenu.forEach((subMenuItem) => {
+ subMenuItem.disable = true;
+ });
+ });
}
return (
@@ -184,53 +222,51 @@ const SideNavBar = ({ collapsed }) => {
>
- {data?.map((item, index) => {
- return (
-
- {!collapsed && (
-
- {item.mainTitle}
-
- )}
-
- {item.subMenu.map((el) => {
- return (
-
- {
- !el.disable && navigate(el.path);
- }}
- >
-
- {!collapsed && (
-
-
- {el.title}
-
-
- {el.description}
-
-
- )}
-
-
- );
- })}
-
- {index < data.length - 1 && (
-
- )}
-
- );
- })}
+ {data?.map((item, index) => (
+
+ {!collapsed && (
+
+ {item.mainTitle}
+
+ )}
+
+ {item.subMenu.map((el) => (
+
+ {
+ if (!el.disable) {
+ navigate(el.path);
+ }
+ }}
+ >
+
+ {!collapsed && (
+
+
+ {el.title}
+
+
+ {el.description}
+
+
+ )}
+
+
+ ))}
+
+ {index < data.length - 1 && (
+
+ )}
+
+ ))}
diff --git a/frontend/src/components/navigations/top-nav-bar/TopNavBar.jsx b/frontend/src/components/navigations/top-nav-bar/TopNavBar.jsx
index 2dd2d23ed..7cf512ad4 100644
--- a/frontend/src/components/navigations/top-nav-bar/TopNavBar.jsx
+++ b/frontend/src/components/navigations/top-nav-bar/TopNavBar.jsx
@@ -68,6 +68,17 @@ try {
// Ignore if hook not available
}
+let unstractSubscriptionPlan;
+let unstractSubscriptionPlanStore;
+let UNSTRACT_SUBSCRIPTION_PLANS;
+try {
+ unstractSubscriptionPlanStore = require("../../../plugins/store/unstract-subscription-plan-store");
+ UNSTRACT_SUBSCRIPTION_PLANS =
+ require("../../../plugins/unstract-subscription/helper/constants").UNSTRACT_SUBSCRIPTION_PLANS;
+} catch (err) {
+ // Plugin unavailable.
+}
+
function TopNavBar({ isSimpleLayout, topNavBarOptions }) {
const navigate = useNavigate();
const { sessionDetails } = useSessionStore();
@@ -89,6 +100,28 @@ function TopNavBar({ isSimpleLayout, topNavBarOptions }) {
);
}
+ try {
+ if (unstractSubscriptionPlanStore?.useUnstractSubscriptionPlanStore) {
+ unstractSubscriptionPlan =
+ unstractSubscriptionPlanStore?.useUnstractSubscriptionPlanStore(
+ (state) => state?.unstractSubscriptionPlan
+ );
+ }
+ } catch (error) {
+ // Do nothing
+ }
+
+ const shouldDisableRouting = useMemo(() => {
+ if (!unstractSubscriptionPlan || !UNSTRACT_SUBSCRIPTION_PLANS) {
+ return false;
+ }
+
+ return (
+ !unstractSubscriptionPlan?.subscriptionId &&
+ unstractSubscriptionPlan?.planType !== UNSTRACT_SUBSCRIPTION_PLANS?.TRIAL
+ );
+ }, [unstractSubscriptionPlan]);
+
const isUnstract = !(selectedProduct && selectedProduct !== "unstract");
// Check user role and whether the onboarding is incomplete
@@ -185,6 +218,7 @@ function TopNavBar({ isSimpleLayout, topNavBarOptions }) {
@@ -223,6 +257,7 @@ function TopNavBar({ isSimpleLayout, topNavBarOptions }) {
@@ -238,6 +273,7 @@ function TopNavBar({ isSimpleLayout, topNavBarOptions }) {
@@ -250,6 +286,7 @@ function TopNavBar({ isSimpleLayout, topNavBarOptions }) {
@@ -277,6 +314,7 @@ function TopNavBar({ isSimpleLayout, topNavBarOptions }) {
cascadeOptions,
orgName,
orgId,
+ shouldDisableRouting,
]);
// Function to get the initials from the user name
diff --git a/frontend/src/helpers/GetStaticData.js b/frontend/src/helpers/GetStaticData.js
index e75e1e560..fc597d652 100644
--- a/frontend/src/helpers/GetStaticData.js
+++ b/frontend/src/helpers/GetStaticData.js
@@ -170,21 +170,30 @@ const listOfAppDeployments = [
},
];
-const getReadableDateAndTime = (timestamp) => {
+const getReadableDateAndTime = (timestamp, includeTime = true) => {
const currentDate = new Date(timestamp);
- // Options for formatting the date and time
- const options = {
- year: "numeric",
- month: "long",
- day: "numeric",
+ if (isNaN(currentDate)) {
+ return "Invalid date";
+ }
+
+ // Options for formatting the date
+ const dateOptions = { year: "numeric", month: "long", day: "numeric" };
+ const formattedDate = currentDate.toLocaleDateString("en-US", dateOptions);
+
+ if (!includeTime) {
+ return formattedDate;
+ }
+
+ // Options for formatting the time
+ const timeOptions = {
hour: "2-digit",
minute: "2-digit",
second: "2-digit",
timeZoneName: "short",
};
- const formattedDate = currentDate.toLocaleDateString("en-US", options);
- const formattedTime = currentDate.toLocaleTimeString("en-US", options);
+ const formattedTime = currentDate.toLocaleTimeString("en-US", timeOptions);
+
return formattedDate + ", " + formattedTime;
};
diff --git a/frontend/src/routes/useMainAppRoutes.js b/frontend/src/routes/useMainAppRoutes.js
index f77e96ad5..7309a63b7 100644
--- a/frontend/src/routes/useMainAppRoutes.js
+++ b/frontend/src/routes/useMainAppRoutes.js
@@ -109,7 +109,10 @@ function useMainAppRoutes() {
} />
)}
{UnstractSubscriptionPage && (
- } />
+ }
+ />
)}
} />
Date: Tue, 28 Jan 2025 18:56:34 +0530
Subject: [PATCH 2/2] added supported plugin and constants for db rules
functionality (#1092)
* added supported plugin and constants for db rules functionality
* [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
---------
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
---
.../workflow_manager/workflow_v2/constants.py | 1 +
frontend/package-lock.json | 397 +++++++++++++++++-
frontend/package.json | 1 +
3 files changed, 381 insertions(+), 18 deletions(-)
diff --git a/backend/workflow_manager/workflow_v2/constants.py b/backend/workflow_manager/workflow_v2/constants.py
index c36a435da..29d400ffe 100644
--- a/backend/workflow_manager/workflow_v2/constants.py
+++ b/backend/workflow_manager/workflow_v2/constants.py
@@ -63,3 +63,4 @@ class WorkflowMessages:
class ResultKeys:
METADATA = "metadata"
CONFIDENCE_DATA = "confidence_data"
+ OUTPUT = "output"
diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index 97e09de0d..b566f0ef2 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -9,6 +9,7 @@
"version": "0.1.0",
"dependencies": {
"@ant-design/icons": "^5.1.4",
+ "@react-awesome-query-builder/antd": "^6.6.10",
"@react-pdf-viewer/core": "^3.12.0",
"@react-pdf-viewer/default-layout": "^3.12.0",
"@react-pdf-viewer/highlight": "^3.12.0",
@@ -2135,9 +2136,10 @@
"integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA=="
},
"node_modules/@babel/runtime": {
- "version": "7.23.8",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.8.tgz",
- "integrity": "sha512-Y7KbAP984rn1VGMbGqKmBLio9V7y5Je9GvU4rQPCPinCyNfUcToxIXl06d59URp/F3LwinvODxab5N/G6qggkw==",
+ "version": "7.26.0",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.0.tgz",
+ "integrity": "sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==",
+ "license": "MIT",
"dependencies": {
"regenerator-runtime": "^0.14.0"
},
@@ -3716,6 +3718,119 @@
"react-dom": ">=16.9.0"
}
},
+ "node_modules/@react-awesome-query-builder/antd": {
+ "version": "6.6.10",
+ "resolved": "https://registry.npmjs.org/@react-awesome-query-builder/antd/-/antd-6.6.10.tgz",
+ "integrity": "sha512-PSIaEk+jVN/x6gK/kOKiK8yjZhazui91sjmKojIQNT9OT1I0GOEmusZVvhHNGKQuUl5sJcn0CdYqsBVL4ECv5A==",
+ "license": "MIT",
+ "dependencies": {
+ "@react-awesome-query-builder/ui": "^6.6.10",
+ "lodash": "^4.17.21",
+ "prop-types": "^15.8.1",
+ "rc-picker": "^4.5.0"
+ },
+ "peerDependencies": {
+ "@ant-design/icons": "^4.0.0 || ^5.0.0",
+ "antd": "^4.17.0 || ^5.0.0",
+ "react": "^16.8.4 || ^17.0.1 || ^18.0.0",
+ "react-dom": "^16.8.4 || ^17.0.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-awesome-query-builder/antd/node_modules/@rc-component/trigger": {
+ "version": "2.2.6",
+ "resolved": "https://registry.npmjs.org/@rc-component/trigger/-/trigger-2.2.6.tgz",
+ "integrity": "sha512-/9zuTnWwhQ3S3WT1T8BubuFTT46kvnXgaERR9f4BTKyn61/wpf/BvbImzYBubzJibU707FxwbKszLlHjcLiv1Q==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.23.2",
+ "@rc-component/portal": "^1.1.0",
+ "classnames": "^2.3.2",
+ "rc-motion": "^2.0.0",
+ "rc-resize-observer": "^1.3.1",
+ "rc-util": "^5.44.0"
+ },
+ "engines": {
+ "node": ">=8.x"
+ },
+ "peerDependencies": {
+ "react": ">=16.9.0",
+ "react-dom": ">=16.9.0"
+ }
+ },
+ "node_modules/@react-awesome-query-builder/antd/node_modules/rc-picker": {
+ "version": "4.9.2",
+ "resolved": "https://registry.npmjs.org/rc-picker/-/rc-picker-4.9.2.tgz",
+ "integrity": "sha512-SLW4PRudODOomipKI0dvykxW4P8LOqtMr17MOaLU6NQJhkh9SZeh44a/8BMxwv5T6e3kiIeYc9k5jFg2Mv35Pg==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.24.7",
+ "@rc-component/trigger": "^2.0.0",
+ "classnames": "^2.2.1",
+ "rc-overflow": "^1.3.2",
+ "rc-resize-observer": "^1.4.0",
+ "rc-util": "^5.43.0"
+ },
+ "engines": {
+ "node": ">=8.x"
+ },
+ "peerDependencies": {
+ "date-fns": ">= 2.x",
+ "dayjs": ">= 1.x",
+ "luxon": ">= 3.x",
+ "moment": ">= 2.x",
+ "react": ">=16.9.0",
+ "react-dom": ">=16.9.0"
+ },
+ "peerDependenciesMeta": {
+ "date-fns": {
+ "optional": true
+ },
+ "dayjs": {
+ "optional": true
+ },
+ "luxon": {
+ "optional": true
+ },
+ "moment": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@react-awesome-query-builder/core": {
+ "version": "6.6.10",
+ "resolved": "https://registry.npmjs.org/@react-awesome-query-builder/core/-/core-6.6.10.tgz",
+ "integrity": "sha512-6CaQS12LTnYQUfH/Y8jDaiJUcdowKaI9i5Azz8oNvPtZI3hO940fJSdX5brUPD29/H4u888JEh3PQ9u/ANNtbg==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.24.5",
+ "clone": "^2.1.2",
+ "i18next": "^23.11.5",
+ "immutable": "^4.3.6",
+ "json-logic-js": "^2.0.2",
+ "lodash": "^4.17.21",
+ "moment": "^2.30.1",
+ "spel2js": "^0.2.8",
+ "sqlstring": "^2.3.3"
+ }
+ },
+ "node_modules/@react-awesome-query-builder/ui": {
+ "version": "6.6.10",
+ "resolved": "https://registry.npmjs.org/@react-awesome-query-builder/ui/-/ui-6.6.10.tgz",
+ "integrity": "sha512-k52hXSWC7emcBfubOyoGSzhxSBSQyLuhCq+3Abnn+zeA70W6kHyy31DjjFryERCg73WJDNESmYjSlu7S3C6n5Q==",
+ "license": "MIT",
+ "dependencies": {
+ "@react-awesome-query-builder/core": "^6.6.10",
+ "classnames": "^2.5.1",
+ "lodash": "^4.17.21",
+ "prop-types": "^15.8.1",
+ "react-redux": "^8.1.3",
+ "redux": "^4.2.1"
+ },
+ "peerDependencies": {
+ "react": "^16.8.4 || ^17.0.1 || ^18.0.0",
+ "react-dom": "^16.8.4 || ^17.0.1 || ^18.0.0"
+ }
+ },
"node_modules/@react-dnd/asap": {
"version": "5.0.2",
"resolved": "https://registry.npmjs.org/@react-dnd/asap/-/asap-5.0.2.tgz",
@@ -4659,6 +4774,16 @@
"@types/node": "*"
}
},
+ "node_modules/@types/hoist-non-react-statics": {
+ "version": "3.3.6",
+ "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.6.tgz",
+ "integrity": "sha512-lPByRJUer/iN/xa4qpyL0qmL11DqNW81iU/IG1S3uvRUq4oKagz8VCxZjiWkumgt66YT3vOdDgZ0o32sGKtCEw==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/react": "*",
+ "hoist-non-react-statics": "^3.3.0"
+ }
+ },
"node_modules/@types/html-minifier-terser": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz",
@@ -4887,6 +5012,12 @@
"resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.7.tgz",
"integrity": "sha512-cputDpIbFgLUaGQn6Vqg3/YsJwxUwHLO13v3i5ouxT4lat0khip9AEWxtERujXV9wxIB1EyF97BSJFt6vpdI8g=="
},
+ "node_modules/@types/use-sync-external-store": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz",
+ "integrity": "sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA==",
+ "license": "MIT"
+ },
"node_modules/@types/ws": {
"version": "8.5.5",
"resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.5.tgz",
@@ -6682,6 +6813,15 @@
"wrap-ansi": "^7.0.0"
}
},
+ "node_modules/clone": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
+ "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
"node_modules/co": {
"version": "4.6.0",
"resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
@@ -10198,6 +10338,29 @@
"node": ">=10.17.0"
}
},
+ "node_modules/i18next": {
+ "version": "23.16.8",
+ "resolved": "https://registry.npmjs.org/i18next/-/i18next-23.16.8.tgz",
+ "integrity": "sha512-06r/TitrM88Mg5FdUXAKL96dJMzgqLE5dv3ryBAra4KCwD9mJ4ndOTS95ZuymIGoE+2hzfdaMak2X11/es7ZWg==",
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://locize.com"
+ },
+ {
+ "type": "individual",
+ "url": "https://locize.com/i18next.html"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.i18next.com/how-to/faq#i18next-is-awesome.-how-can-i-support-the-project"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.23.2"
+ }
+ },
"node_modules/iconv-lite": {
"version": "0.6.3",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
@@ -10253,6 +10416,12 @@
"url": "https://opencollective.com/immer"
}
},
+ "node_modules/immutable": {
+ "version": "4.3.7",
+ "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz",
+ "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==",
+ "license": "MIT"
+ },
"node_modules/import-fresh": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
@@ -12834,6 +13003,12 @@
"node": ">= 16"
}
},
+ "node_modules/json-logic-js": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/json-logic-js/-/json-logic-js-2.0.5.tgz",
+ "integrity": "sha512-rTT2+lqcuUmj4DgWfmzupZqQDA64AdmYqizzMPWj3DxGdfFNsxPpcNVSaTj4l8W2tG/+hg7/mQhxjU3aPacO6g==",
+ "license": "MIT"
+ },
"node_modules/json-parse-even-better-errors": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
@@ -14116,9 +14291,10 @@
}
},
"node_modules/moment": {
- "version": "2.29.4",
- "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz",
- "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==",
+ "version": "2.30.1",
+ "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz",
+ "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==",
+ "license": "MIT",
"engines": {
"node": "*"
}
@@ -17011,9 +17187,10 @@
}
},
"node_modules/rc-util": {
- "version": "5.38.1",
- "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.38.1.tgz",
- "integrity": "sha512-e4ZMs7q9XqwTuhIK7zBIVFltUtMSjphuPPQXHoHlzRzNdOwUxDejo0Zls5HYaJfRKNURcsS/ceKVULlhjBrxng==",
+ "version": "5.44.3",
+ "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.44.3.tgz",
+ "integrity": "sha512-q6KCcOFk3rv/zD3MckhJteZxb0VjAIFuf622B7ElK4vfrZdAzs16XR5p3VTdy3+U5jfJU5ACz4QnhLSuAGe5dA==",
+ "license": "MIT",
"dependencies": {
"@babel/runtime": "^7.18.3",
"react-is": "^18.2.0"
@@ -17237,6 +17414,45 @@
"react": ">= 17.0.0"
}
},
+ "node_modules/react-redux": {
+ "version": "8.1.3",
+ "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-8.1.3.tgz",
+ "integrity": "sha512-n0ZrutD7DaX/j9VscF+uTALI3oUPa/pO4Z3soOBIjuRn/FzVu6aehhysxZCLi6y7duMf52WNZGMl7CtuK5EnRw==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.12.1",
+ "@types/hoist-non-react-statics": "^3.3.1",
+ "@types/use-sync-external-store": "^0.0.3",
+ "hoist-non-react-statics": "^3.3.2",
+ "react-is": "^18.0.0",
+ "use-sync-external-store": "^1.0.0"
+ },
+ "peerDependencies": {
+ "@types/react": "^16.8 || ^17.0 || ^18.0",
+ "@types/react-dom": "^16.8 || ^17.0 || ^18.0",
+ "react": "^16.8 || ^17.0 || ^18.0",
+ "react-dom": "^16.8 || ^17.0 || ^18.0",
+ "react-native": ">=0.59",
+ "redux": "^4 || ^5.0.0-beta.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ },
+ "react-dom": {
+ "optional": true
+ },
+ "react-native": {
+ "optional": true
+ },
+ "redux": {
+ "optional": true
+ }
+ }
+ },
"node_modules/react-refresh": {
"version": "0.11.0",
"resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.11.0.tgz",
@@ -18425,11 +18641,28 @@
"wbuf": "^1.7.3"
}
},
+ "node_modules/spel2js": {
+ "version": "0.2.8",
+ "resolved": "https://registry.npmjs.org/spel2js/-/spel2js-0.2.8.tgz",
+ "integrity": "sha512-dzYq+v4YV7SPIdNrmvFAUjc0HcgI7b0yoMw7kzOBmlj/GjdOb/+8dVn1I7nLuOS5X2SW+LK3tf2SVkXRjCkWBA==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/sprintf-js": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
"integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g=="
},
+ "node_modules/sqlstring": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.3.tgz",
+ "integrity": "sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
"node_modules/stable": {
"version": "0.1.8",
"resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz",
@@ -22066,9 +22299,9 @@
"integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA=="
},
"@babel/runtime": {
- "version": "7.23.8",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.8.tgz",
- "integrity": "sha512-Y7KbAP984rn1VGMbGqKmBLio9V7y5Je9GvU4rQPCPinCyNfUcToxIXl06d59URp/F3LwinvODxab5N/G6qggkw==",
+ "version": "7.26.0",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.0.tgz",
+ "integrity": "sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==",
"requires": {
"regenerator-runtime": "^0.14.0"
},
@@ -23217,6 +23450,74 @@
"rc-util": "^5.38.0"
}
},
+ "@react-awesome-query-builder/antd": {
+ "version": "6.6.10",
+ "resolved": "https://registry.npmjs.org/@react-awesome-query-builder/antd/-/antd-6.6.10.tgz",
+ "integrity": "sha512-PSIaEk+jVN/x6gK/kOKiK8yjZhazui91sjmKojIQNT9OT1I0GOEmusZVvhHNGKQuUl5sJcn0CdYqsBVL4ECv5A==",
+ "requires": {
+ "@react-awesome-query-builder/ui": "^6.6.10",
+ "lodash": "^4.17.21",
+ "prop-types": "^15.8.1",
+ "rc-picker": "^4.5.0"
+ },
+ "dependencies": {
+ "@rc-component/trigger": {
+ "version": "2.2.6",
+ "resolved": "https://registry.npmjs.org/@rc-component/trigger/-/trigger-2.2.6.tgz",
+ "integrity": "sha512-/9zuTnWwhQ3S3WT1T8BubuFTT46kvnXgaERR9f4BTKyn61/wpf/BvbImzYBubzJibU707FxwbKszLlHjcLiv1Q==",
+ "requires": {
+ "@babel/runtime": "^7.23.2",
+ "@rc-component/portal": "^1.1.0",
+ "classnames": "^2.3.2",
+ "rc-motion": "^2.0.0",
+ "rc-resize-observer": "^1.3.1",
+ "rc-util": "^5.44.0"
+ }
+ },
+ "rc-picker": {
+ "version": "4.9.2",
+ "resolved": "https://registry.npmjs.org/rc-picker/-/rc-picker-4.9.2.tgz",
+ "integrity": "sha512-SLW4PRudODOomipKI0dvykxW4P8LOqtMr17MOaLU6NQJhkh9SZeh44a/8BMxwv5T6e3kiIeYc9k5jFg2Mv35Pg==",
+ "requires": {
+ "@babel/runtime": "^7.24.7",
+ "@rc-component/trigger": "^2.0.0",
+ "classnames": "^2.2.1",
+ "rc-overflow": "^1.3.2",
+ "rc-resize-observer": "^1.4.0",
+ "rc-util": "^5.43.0"
+ }
+ }
+ }
+ },
+ "@react-awesome-query-builder/core": {
+ "version": "6.6.10",
+ "resolved": "https://registry.npmjs.org/@react-awesome-query-builder/core/-/core-6.6.10.tgz",
+ "integrity": "sha512-6CaQS12LTnYQUfH/Y8jDaiJUcdowKaI9i5Azz8oNvPtZI3hO940fJSdX5brUPD29/H4u888JEh3PQ9u/ANNtbg==",
+ "requires": {
+ "@babel/runtime": "^7.24.5",
+ "clone": "^2.1.2",
+ "i18next": "^23.11.5",
+ "immutable": "^4.3.6",
+ "json-logic-js": "^2.0.2",
+ "lodash": "^4.17.21",
+ "moment": "^2.30.1",
+ "spel2js": "^0.2.8",
+ "sqlstring": "^2.3.3"
+ }
+ },
+ "@react-awesome-query-builder/ui": {
+ "version": "6.6.10",
+ "resolved": "https://registry.npmjs.org/@react-awesome-query-builder/ui/-/ui-6.6.10.tgz",
+ "integrity": "sha512-k52hXSWC7emcBfubOyoGSzhxSBSQyLuhCq+3Abnn+zeA70W6kHyy31DjjFryERCg73WJDNESmYjSlu7S3C6n5Q==",
+ "requires": {
+ "@react-awesome-query-builder/core": "^6.6.10",
+ "classnames": "^2.5.1",
+ "lodash": "^4.17.21",
+ "prop-types": "^15.8.1",
+ "react-redux": "^8.1.3",
+ "redux": "^4.2.1"
+ }
+ },
"@react-dnd/asap": {
"version": "5.0.2",
"resolved": "https://registry.npmjs.org/@react-dnd/asap/-/asap-5.0.2.tgz",
@@ -23890,6 +24191,15 @@
"@types/node": "*"
}
},
+ "@types/hoist-non-react-statics": {
+ "version": "3.3.6",
+ "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.6.tgz",
+ "integrity": "sha512-lPByRJUer/iN/xa4qpyL0qmL11DqNW81iU/IG1S3uvRUq4oKagz8VCxZjiWkumgt66YT3vOdDgZ0o32sGKtCEw==",
+ "requires": {
+ "@types/react": "*",
+ "hoist-non-react-statics": "^3.3.0"
+ }
+ },
"@types/html-minifier-terser": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz",
@@ -24111,6 +24421,11 @@
"resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.7.tgz",
"integrity": "sha512-cputDpIbFgLUaGQn6Vqg3/YsJwxUwHLO13v3i5ouxT4lat0khip9AEWxtERujXV9wxIB1EyF97BSJFt6vpdI8g=="
},
+ "@types/use-sync-external-store": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz",
+ "integrity": "sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA=="
+ },
"@types/ws": {
"version": "8.5.5",
"resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.5.tgz",
@@ -25417,6 +25732,11 @@
"wrap-ansi": "^7.0.0"
}
},
+ "clone": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
+ "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w=="
+ },
"co": {
"version": "4.6.0",
"resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
@@ -27990,6 +28310,14 @@
"resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
"integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw=="
},
+ "i18next": {
+ "version": "23.16.8",
+ "resolved": "https://registry.npmjs.org/i18next/-/i18next-23.16.8.tgz",
+ "integrity": "sha512-06r/TitrM88Mg5FdUXAKL96dJMzgqLE5dv3ryBAra4KCwD9mJ4ndOTS95ZuymIGoE+2hzfdaMak2X11/es7ZWg==",
+ "requires": {
+ "@babel/runtime": "^7.23.2"
+ }
+ },
"iconv-lite": {
"version": "0.6.3",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
@@ -28027,6 +28355,11 @@
"resolved": "https://registry.npmjs.org/immer/-/immer-9.0.21.tgz",
"integrity": "sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA=="
},
+ "immutable": {
+ "version": "4.3.7",
+ "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz",
+ "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw=="
+ },
"import-fresh": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
@@ -30007,6 +30340,11 @@
"doc-path": "4.1.1"
}
},
+ "json-logic-js": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/json-logic-js/-/json-logic-js-2.0.5.tgz",
+ "integrity": "sha512-rTT2+lqcuUmj4DgWfmzupZqQDA64AdmYqizzMPWj3DxGdfFNsxPpcNVSaTj4l8W2tG/+hg7/mQhxjU3aPacO6g=="
+ },
"json-parse-even-better-errors": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
@@ -30861,9 +31199,9 @@
}
},
"moment": {
- "version": "2.29.4",
- "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz",
- "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w=="
+ "version": "2.30.1",
+ "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz",
+ "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how=="
},
"moment-timezone": {
"version": "0.5.45",
@@ -32753,9 +33091,9 @@
}
},
"rc-util": {
- "version": "5.38.1",
- "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.38.1.tgz",
- "integrity": "sha512-e4ZMs7q9XqwTuhIK7zBIVFltUtMSjphuPPQXHoHlzRzNdOwUxDejo0Zls5HYaJfRKNURcsS/ceKVULlhjBrxng==",
+ "version": "5.44.3",
+ "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.44.3.tgz",
+ "integrity": "sha512-q6KCcOFk3rv/zD3MckhJteZxb0VjAIFuf622B7ElK4vfrZdAzs16XR5p3VTdy3+U5jfJU5ACz4QnhLSuAGe5dA==",
"requires": {
"@babel/runtime": "^7.18.3",
"react-is": "^18.2.0"
@@ -32922,6 +33260,19 @@
"product-fruits": "^1.0.25"
}
},
+ "react-redux": {
+ "version": "8.1.3",
+ "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-8.1.3.tgz",
+ "integrity": "sha512-n0ZrutD7DaX/j9VscF+uTALI3oUPa/pO4Z3soOBIjuRn/FzVu6aehhysxZCLi6y7duMf52WNZGMl7CtuK5EnRw==",
+ "requires": {
+ "@babel/runtime": "^7.12.1",
+ "@types/hoist-non-react-statics": "^3.3.1",
+ "@types/use-sync-external-store": "^0.0.3",
+ "hoist-non-react-statics": "^3.3.2",
+ "react-is": "^18.0.0",
+ "use-sync-external-store": "^1.0.0"
+ }
+ },
"react-refresh": {
"version": "0.11.0",
"resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.11.0.tgz",
@@ -33797,11 +34148,21 @@
"wbuf": "^1.7.3"
}
},
+ "spel2js": {
+ "version": "0.2.8",
+ "resolved": "https://registry.npmjs.org/spel2js/-/spel2js-0.2.8.tgz",
+ "integrity": "sha512-dzYq+v4YV7SPIdNrmvFAUjc0HcgI7b0yoMw7kzOBmlj/GjdOb/+8dVn1I7nLuOS5X2SW+LK3tf2SVkXRjCkWBA=="
+ },
"sprintf-js": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
"integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g=="
},
+ "sqlstring": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.3.tgz",
+ "integrity": "sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg=="
+ },
"stable": {
"version": "0.1.8",
"resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz",
diff --git a/frontend/package.json b/frontend/package.json
index f0d9aea24..101b61d62 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -4,6 +4,7 @@
"private": true,
"dependencies": {
"@ant-design/icons": "^5.1.4",
+ "@react-awesome-query-builder/antd": "^6.6.10",
"@react-pdf-viewer/core": "^3.12.0",
"@react-pdf-viewer/default-layout": "^3.12.0",
"@react-pdf-viewer/highlight": "^3.12.0",