From cb948a160bb03baa45586009d2bca83cc442ba18 Mon Sep 17 00:00:00 2001 From: rdbsolutions Date: Tue, 23 Sep 2025 12:44:21 +0100 Subject: [PATCH] updated admin tabs and filtering --- actions/index.js | 21 +- components/admin/tabs/accounts.js | 2 + components/admin/tabs/documents.js | 265 ++++++++++++++++++---- pages/admin/index.js | 71 +++--- pages/api/admin/getlatestdocuments_api.js | 26 ++- 5 files changed, 299 insertions(+), 86 deletions(-) diff --git a/actions/index.js b/actions/index.js index e995a893..fd04e4a8 100644 --- a/actions/index.js +++ b/actions/index.js @@ -2144,8 +2144,25 @@ export const getNewDocumentsPaged = async ( fieldSort, showNumberOfRecords, documentType, + documentOrigin, selectedWeeks ) => { + console.log( + "/api/admin/getlatestdocuments_api?pageNumber=" + + pageNumber + + "&orderby=" + + orderBy + + "&fieldSort=" + + fieldSort + + "&showNumberOfRecords=" + + showNumberOfRecords + + "&documentType=" + + documentType + + "&numberWeeks=" + + selectedWeeks + + "&documentOrigin=" + + documentOrigin + ); return axios .get( "/api/admin/getlatestdocuments_api?pageNumber=" + @@ -2159,7 +2176,9 @@ export const getNewDocumentsPaged = async ( "&documentType=" + documentType + "&numberWeeks=" + - selectedWeeks + selectedWeeks + + "&documentOrigin=" + + documentOrigin ) .then((res) => { return res.data; diff --git a/components/admin/tabs/accounts.js b/components/admin/tabs/accounts.js index 97498248..8d802860 100644 --- a/components/admin/tabs/accounts.js +++ b/components/admin/tabs/accounts.js @@ -26,6 +26,8 @@ export default function AccountsTab({ userData }) { > {user.email} +
+ {user.id}
Last accessed: {user.created} diff --git a/components/admin/tabs/documents.js b/components/admin/tabs/documents.js index 23818da2..94bc359a 100644 --- a/components/admin/tabs/documents.js +++ b/components/admin/tabs/documents.js @@ -7,6 +7,9 @@ import { connect } from "react-redux"; import transLookup from "../../../data/lookuptranslations.json"; import { formatDates } from "../../utils"; import PaginationControl from "../../../components/case/pagination"; +import DocumentLink from "../../utils/downloads"; +import { useDownloadQueue } from "../../utils/downloadmanager"; + import { sendGAEvent } from "@next/third-parties/google"; import { @@ -170,6 +173,21 @@ const getDocumentTypes = [ }, ]; +const getOrigin = [ + { + "Value": 846040000, + "Label": "MDU", + }, + { + "Value": 846040001, + "Label": "Portal", + }, + { + "Value": 846040002, + "Label": "Manual", + }, +]; + const DocumentsTab = (props) => { let { t, lang } = useTranslation(); const firstRender = useRef(false); @@ -189,12 +207,15 @@ const DocumentsTab = (props) => { const { locale } = router; var documentDetailsArr = documentDetailsObj || []; - + const { startDownload, getStatus } = useDownloadQueue(3); const [selectedOption, setSelectedOption] = useState(10); const [selectedWeeks, setSelectedWeeks] = useState(1); const [documentTypes, setDocumentTypes] = useState(getDocumentTypes); + const [documentOrigin, setDocumentOrigin] = useState(getOrigin); const [selectedDocumentType, setSelectedDocumentType] = useState("all"); + const [selectedDocumentOrigin, setSelectedDocumentOrigin] = useState("all"); const [selectAll, setSelectAll] = useState(false); + const [selectOriginAll, setSelectOriginAll] = useState(false); const [checkedItems, setCheckedItems] = useState( documentTypes.reduce((acc, item) => { @@ -203,6 +224,13 @@ const DocumentsTab = (props) => { }, {}) ); + const [checkedOriginItems, setCheckedOriginItems] = useState( + documentOrigin.reduce((acc, item) => { + acc[item.pinswg_origin] = false; + return acc; + }, {}) + ); + const handleCheckboxChange = (e) => { const { name, checked } = e.target; @@ -213,6 +241,16 @@ const DocumentsTab = (props) => { setSelectAll(false); }; + const handleCheckboxOriginChange = (e) => { + const { name, checked } = e.target; + + setCheckedOriginItems((prev) => ({ + ...prev, + [name]: checked, + })); + setSelectOriginAll(false); + }; + const handleSelectAllChange = (e) => { const { checked } = e.target; setSelectAll(checked); // Set the 'Select All' state @@ -230,16 +268,42 @@ const DocumentsTab = (props) => { } }; + const handleSelectOriginAllChange = (e) => { + const { checked } = e.target; + setSelectOriginAll(checked); // Set the 'Select All' state + if (checked) { + // If 'Select All' is checked, check all the other checkboxes + + setCheckedOriginItems( + documentOrigin.reduce((acc, item) => { + acc[item.pinswg_origin] = true; + return acc; + }, {}) + ); + } else { + clearCheckboxes(); + } + }; + const clearCheckboxes = () => { setSelectAll(false); + setSelectOriginAll(false); setCheckedItems( documentTypes.reduce((acc, item) => { acc[item.pinswg_isharedocumentlocations] = false; return acc; }, {}), + setSelectedDocumentType("all"), setCurrentPage(1) ); + setCheckedOriginItems( + documentOrigin.reduce((acc, item) => { + acc["origin_" + item.pinswg_origin] = false; + return acc; + }, {}), + setSelectedDocumentOrigin("all") + ); }; let ShowDocLinks = false; let checkShowDocLinks = docsOffline != false ? true : false; @@ -314,6 +378,9 @@ const DocumentsTab = (props) => { {t("search:clear-filter-button-label")} +

+ Document Type +

{" "} <> @@ -335,17 +402,6 @@ const DocumentsTab = (props) => { {router.locale == "cy" ? "Pawb" : "All"}{" "} - - ( - {documentTypes.reduce( - (accumulator, currentItem) => { - return ( - accumulator + - currentItem.count - ); - }, - 0 - )} - )
@@ -389,17 +445,105 @@ const DocumentsTab = (props) => { ); })} {" "} +

+ Document Origin +

+
+ {" "} + <> +
+ + +
+ + {documentOrigin.map((item, key) => { + return ( +
+ + +
+ ); + })} +
{" "}
diff --git a/pages/api/admin/getlatestdocuments_api.js b/pages/api/admin/getlatestdocuments_api.js index c5742dab..36b7117c 100644 --- a/pages/api/admin/getlatestdocuments_api.js +++ b/pages/api/admin/getlatestdocuments_api.js @@ -64,9 +64,11 @@ export default async function ApiProxy(req, res) { var fieldSort = req.query.fieldSort || "desc"; var showNumberOfRecords = req.query.showNumberOfRecords || 10; var documentType = req.query.documentType || "all"; + var documentOrigin = req.query.documentOrigin || "all"; var numberOfWeeks = req.query.numberWeeks || 1; var docTypeQueryString = ""; + var docOriginQueryString = ""; if (documentType != "all") { if (documentType.indexOf(",") >= 0) { @@ -91,6 +93,27 @@ export default async function ApiProxy(req, res) { } } + if (documentOrigin != "all") { + if (documentOrigin.indexOf(",") >= 0) { + const documentOriginArr = documentOrigin.split(","); + + docOriginQueryString = " and ("; + documentOriginArr.forEach(function (item, index) { + console.log(item, index); + + if (item != "all") { + docOriginQueryString += " pinswg_origin eq " + item; + + docOriginQueryString += + index < documentOriginArr.length - 1 ? " or " : ""; + } + }); + docOriginQueryString += " )"; + } else { + docOriginQueryString += " and pinswg_origin eq " + documentOrigin; + } + } + function daysAgoISO(days) { const today = new Date(); const resultDate = new Date(today); @@ -103,6 +126,7 @@ export default async function ApiProxy(req, res) { "pinswg_documents?$select=pinswg_name,createdon,pinswg_publishtoweb,_pinswg_documentids_value,pinswg_isharedocumentlocations,pinswg_isharedocumentreference,pinswg_uploadurl,pinswg_uploadstatus,pinswg_origin&$filter=createdon ge " + daysAgoISO(numberOfWeeks) + docTypeQueryString + + docOriginQueryString + "&$orderby=" + orderby + " " + @@ -115,7 +139,7 @@ export default async function ApiProxy(req, res) { console.log( "\n==========================================\n", - "\nnew docs search ", + "\nnew docs search---- ", "\n\nQuery url: " + queryUrl, "\n\nRelay link: " + WEBAPI_URL + queryUrl + hashAPIPath(queryUrl), "\n==========================================\n"