From 09bfe7218c1aa7d0d0fb2777e6bdc56a7247c861 Mon Sep 17 00:00:00 2001 From: Rahul Pamnani Date: Mon, 2 Dec 2024 15:53:31 +0530 Subject: [PATCH] Add SearchIndexManagement component in the Admin page --- frontend/src/components/admin/Admin.js | 8 ++ .../SearchIndexManagement.js | 96 +++++++++++++++++++ frontend/src/languages/en.json | 7 +- .../MassIndexerRestController.java | 7 +- 4 files changed, 113 insertions(+), 5 deletions(-) create mode 100644 frontend/src/components/admin/searchIndexManagement/SearchIndexManagement.js diff --git a/frontend/src/components/admin/Admin.js b/frontend/src/components/admin/Admin.js index 4738e7abcc..a9fabca2e2 100644 --- a/frontend/src/components/admin/Admin.js +++ b/frontend/src/components/admin/Admin.js @@ -30,6 +30,7 @@ import { User, BatchJob, Popup, + Search, } from "@carbon/icons-react"; import PathRoute from "../utils/PathRoute"; import CalculatedValue from "./calculatedValue/CalculatedValueForm"; @@ -57,6 +58,7 @@ import ManageMethod from "./testManagement/ManageMethod.js"; import BatchTestReassignmentAndCancelation from "./BatchTestReassignmentAndCancellation/BatchTestReassignmentAndCancelation.js"; import TestNotificationConfigMenu from "./testNotificationConfigMenu/TestNotificationConfigMenu.js"; import TestNotificationConfigEdit from "./testNotificationConfigMenu/TestNotificationConfigEdit.js"; +import SearchIndexManagement from "./searchIndexManagement/SearchIndexManagement"; function Admin() { const intl = useIntl(); @@ -200,6 +202,9 @@ function Admin() { + + + + + + ); } diff --git a/frontend/src/components/admin/searchIndexManagement/SearchIndexManagement.js b/frontend/src/components/admin/searchIndexManagement/SearchIndexManagement.js new file mode 100644 index 0000000000..26e5fc00ee --- /dev/null +++ b/frontend/src/components/admin/searchIndexManagement/SearchIndexManagement.js @@ -0,0 +1,96 @@ +import React, { useState, useContext } from "react"; +import { Button, Loading, Grid, Column, Section, Heading } from "@carbon/react"; +import { FormattedMessage, useIntl, injectIntl } from "react-intl"; +import { getFromOpenElisServer } from "../../utils/Utils"; +import PageBreadCrumb from "../../common/PageBreadCrumb"; +import { NotificationContext } from "../../layout/Layout"; +import { + AlertDialog, + NotificationKinds, +} from "../../common/CustomNotification"; + +function SearchIndexManagement() { + const [loading, setLoading] = useState(false); + const { notificationVisible, setNotificationVisible, addNotification } = + useContext(NotificationContext); + const intl = useIntl(); + const rebuildIndex = async (res) => { + setNotificationVisible(true); + if (res) { + addNotification({ + kind: NotificationKinds.success, + title: intl.formatMessage({ id: "notification.title" }), + message: intl.formatMessage({ + id: "searchindexmanagement.reindex.success", + }), + }); + } else { + addNotification({ + kind: NotificationKinds.error, + title: intl.formatMessage({ id: "notification.title" }), + message: intl.formatMessage({ + id: "searchindexmanagement.reindex.error", + }), + }); + } + setLoading(false); + }; + const handleReindexClick = async () => { + setLoading(true); + getFromOpenElisServer("/rest/reindex", rebuildIndex); + }; + + const breadcrumbs = [ + { label: "home.label", link: "/" }, + { + label: "breadcrums.admin.managment", + link: "/MasterListsPage", + }, + { + label: "searchindexmanagement.label", + link: "/MasterListsPage#SearchIndexManagement", + }, + ]; + + return ( + <> + {notificationVisible === true ? : ""} + {loading && } +
+ + + +
+ + + +
+
+
+
+ + +
+
+ + + +
+
+
+
+ +
+
+ +
+
+
+
+ + ); +} + +export default injectIntl(SearchIndexManagement); diff --git a/frontend/src/languages/en.json b/frontend/src/languages/en.json index 369294aefe..ef5cef801b 100644 --- a/frontend/src/languages/en.json +++ b/frontend/src/languages/en.json @@ -1271,5 +1271,10 @@ "testnotification.testdefault.template": "Default Message for Test", "testnotification.testdefault.editIcon": "Edit Test Notification", "testnotification.bcc": "BCC", - "column.name.testId": "Test Id" + "column.name.testId": "Test Id", + "searchindexmanagement.label": "Search Index Management", + "searchindexmanagement.reindex.success": "Reindexing completed successfully", + "searchindexmanagement.reindex.error": "Reindexing failed", + "searchindexmanagement.description": "The search index updates automatically when data is added or modified. If you need to manually update the search index, click the Start Reindexing button. This may take some time.", + "searchindexmanagement.reindex": "Start Reindexing" } diff --git a/src/main/java/org/openelisglobal/hibernate/search/massindexer/MassIndexerRestController.java b/src/main/java/org/openelisglobal/hibernate/search/massindexer/MassIndexerRestController.java index 34f4757c05..fa64549085 100644 --- a/src/main/java/org/openelisglobal/hibernate/search/massindexer/MassIndexerRestController.java +++ b/src/main/java/org/openelisglobal/hibernate/search/massindexer/MassIndexerRestController.java @@ -15,13 +15,12 @@ public class MassIndexerRestController { MassIndexerService massIndexerService; @GetMapping("/reindex") - public ResponseEntity reindex() { + public ResponseEntity reindex() { try { massIndexerService.reindex(); - return ResponseEntity.ok("Reindexing completed successfully."); + return ResponseEntity.ok(true); } catch (Exception e) { - return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) - .body("Error occurred during reindexing: " + e.getMessage()); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(false); } } }