From 7b5ede438a00afd1063e4979386498ac0c6fc70b Mon Sep 17 00:00:00 2001 From: louai98 Date: Mon, 20 Nov 2023 15:21:28 +0100 Subject: [PATCH] Upload Project --- package-lock.json | 264 ++++++++++++++++++ package.json | 3 + src/App.js | 47 +++- .../Layout/AppliedFilters/AppliedFilters.js | 3 + .../FeaturedQuestions/FeaturedQuestions.js | 1 - src/Components/Layout/Filter/Filter copy.js | 2 +- src/Components/Layout/Filter/Filter.js | 15 +- src/Components/Layout/Logos/Logos.js | 34 +++ src/Components/Layout/Logos/Logos.module.css | 11 + src/Components/Layout/Results/Results.js | 50 ++-- .../Layout/WordCloud_/WordCloud_ copy.js | 2 - .../Layout/WordCloud_/WordCloud_.js | 8 +- src/Components/UI/Dropdown/Dropdown_.js | 2 +- src/Components/UI/ResultModal/ResultModal.js | 28 +- .../UI/ResultsPagination/ResultsPagination.js | 5 +- src/Imgs/BICC.png | Bin 0 -> 7279 bytes src/Imgs/Fenix.png | Bin 0 -> 4004 bytes src/{Static => }/Imgs/IDDRS.png | Bin 18 files changed, 418 insertions(+), 57 deletions(-) create mode 100644 src/Components/Layout/Logos/Logos.js create mode 100644 src/Components/Layout/Logos/Logos.module.css create mode 100644 src/Imgs/BICC.png create mode 100644 src/Imgs/Fenix.png rename src/{Static => }/Imgs/IDDRS.png (100%) diff --git a/package-lock.json b/package-lock.json index 0206641..b31bc2b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -22,6 +22,8 @@ "d3": "^7.8.4", "d3-cloud": "^1.2.5", "file-saver": "^2.0.5", + "html-react-parser": "^4.2.2", + "interweave": "^13.1.0", "js-file-download": "^0.4.12", "react": "^18.2.0", "react-bootstrap": "^2.7.4", @@ -30,6 +32,7 @@ "react-pdf": "^6.2.2", "react-scripts": "^5.0.1", "react-spinners": "^0.13.8", + "sbd": "^1.0.19", "web-vitals": "^2.1.4", "worker-loader": "^3.0.8" } @@ -10136,6 +10139,84 @@ "resolved": "https://registry.npmjs.org/hsl-to-rgb-for-reals/-/hsl-to-rgb-for-reals-1.1.1.tgz", "integrity": "sha512-LgOWAkrN0rFaQpfdWBQlv/VhkOxb5AsBjk6NQVx4yEzWS923T07X0M1Y0VNko2H52HeSpZrZNNMJ0aFqsdVzQg==" }, + "node_modules/html-dom-parser": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/html-dom-parser/-/html-dom-parser-4.0.0.tgz", + "integrity": "sha512-TUa3wIwi80f5NF8CVWzkopBVqVAtlawUzJoLwVLHns0XSJGynss4jiY0mTWpiDOsuyw+afP+ujjMgRh9CoZcXw==", + "dependencies": { + "domhandler": "5.0.3", + "htmlparser2": "9.0.0" + } + }, + "node_modules/html-dom-parser/node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/html-dom-parser/node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/html-dom-parser/node_modules/domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/html-dom-parser/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/html-dom-parser/node_modules/htmlparser2": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-9.0.0.tgz", + "integrity": "sha512-uxbSI98wmFT/G4P2zXx4OVx04qWUmyFPrD2/CNepa2Zo3GPNaCaaxElDgwUrwYWkK1nr9fft0Ya8dws8coDLLQ==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.1.0", + "entities": "^4.5.0" + } + }, "node_modules/html-encoding-sniffer": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", @@ -10177,6 +10258,34 @@ "node": ">=12" } }, + "node_modules/html-react-parser": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/html-react-parser/-/html-react-parser-4.2.2.tgz", + "integrity": "sha512-lh0wEGISnFZEAmvQqK4xc0duFMUh/m9YYyAhFursWxdtNv+hCZge0kj1y4wep6qPB5Zm33L+2/P6TcGWAJJbjA==", + "dependencies": { + "domhandler": "5.0.3", + "html-dom-parser": "4.0.0", + "react-property": "2.0.0", + "style-to-js": "1.1.4" + }, + "peerDependencies": { + "react": "0.14 || 15 || 16 || 17 || 18" + } + }, + "node_modules/html-react-parser/node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, "node_modules/html-webpack-plugin": { "version": "5.5.1", "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.1.tgz", @@ -10447,6 +10556,11 @@ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, + "node_modules/inline-style-parser": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", + "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==" + }, "node_modules/internal-slot": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", @@ -10468,6 +10582,21 @@ "node": ">=12" } }, + "node_modules/interweave": { + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/interweave/-/interweave-13.1.0.tgz", + "integrity": "sha512-JIDq0+2NYg0cgL7AB26fBcV0yZdiJvPDBp+aF6k8gq6Cr1kH5Gd2/Xqn7j8z+TGb8jCWZn739jzalCz+nPYwcA==", + "dependencies": { + "escape-html": "^1.0.3" + }, + "funding": { + "type": "ko-fi", + "url": "https://ko-fi.com/milesjohnson" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, "node_modules/invariant": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", @@ -10712,6 +10841,14 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-potential-custom-element-name": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", @@ -14020,6 +14157,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/parse-srcset": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/parse-srcset/-/parse-srcset-1.0.2.tgz", + "integrity": "sha512-/2qh0lav6CmI15FzA3i/2Bzk2zCgQhGMkvhOhKNcBVQ1ldgpbfiNTVslmooUmWJcADi1f1kIeynbDRVzNlfR6Q==" + }, "node_modules/parse-svg-path": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/parse-svg-path/-/parse-svg-path-0.1.2.tgz", @@ -16048,6 +16190,11 @@ } } }, + "node_modules/react-property": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/react-property/-/react-property-2.0.0.tgz", + "integrity": "sha512-kzmNjIgU32mO4mmH5+iUyrqlpFQhF8K2k7eZ4fdLSOPFrD1XgEuSBv9LDEgxRXTMBqMd8ppT0x6TIzqE5pdGdw==" + }, "node_modules/react-refresh": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.11.0.tgz", @@ -16653,6 +16800,99 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, + "node_modules/sanitize-html": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/sanitize-html/-/sanitize-html-2.11.0.tgz", + "integrity": "sha512-BG68EDHRaGKqlsNjJ2xUB7gpInPA8gVx/mvjO743hZaeMCZ2DwzW7xvsqZ+KNU4QKwj86HJ3uu2liISf2qBBUA==", + "dependencies": { + "deepmerge": "^4.2.2", + "escape-string-regexp": "^4.0.0", + "htmlparser2": "^8.0.0", + "is-plain-object": "^5.0.0", + "parse-srcset": "^1.0.2", + "postcss": "^8.3.11" + } + }, + "node_modules/sanitize-html/node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/sanitize-html/node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/sanitize-html/node_modules/domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/sanitize-html/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/sanitize-html/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/sanitize-html/node_modules/htmlparser2": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "entities": "^4.4.0" + } + }, "node_modules/sanitize.css": { "version": "13.0.0", "resolved": "https://registry.npmjs.org/sanitize.css/-/sanitize.css-13.0.0.tgz", @@ -16711,6 +16951,14 @@ "node": ">=10" } }, + "node_modules/sbd": { + "version": "1.0.19", + "resolved": "https://registry.npmjs.org/sbd/-/sbd-1.0.19.tgz", + "integrity": "sha512-b5RyZMGSrFuIB4AHdbv12uYHS8YGEJ36gtuvG3RflbJGY+T0dXmAL0E4vZjQqT2RsX0v+ZwVqhV2zsGr5aFK9w==", + "dependencies": { + "sanitize-html": "^2.3.2" + } + }, "node_modules/scheduler": { "version": "0.23.0", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", @@ -17318,6 +17566,22 @@ "webpack": "^5.0.0" } }, + "node_modules/style-to-js": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/style-to-js/-/style-to-js-1.1.4.tgz", + "integrity": "sha512-zEeU3vy9xL/hdLBFmzqjhm+2vJ1Y35V0ctDeB2sddsvN1856OdMZUCOOfKUn3nOjjEKr6uLhOnY4CrX6gLDRrA==", + "dependencies": { + "style-to-object": "0.4.2" + } + }, + "node_modules/style-to-object": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.4.2.tgz", + "integrity": "sha512-1JGpfPB3lo42ZX8cuPrheZbfQ6kqPPnPHlKMyeRYtfKD+0jG+QsXgXN57O/dvJlzlB2elI6dGmrPnl5VPQFPaA==", + "dependencies": { + "inline-style-parser": "0.1.1" + } + }, "node_modules/stylehacks": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", diff --git a/package.json b/package.json index e4586b2..8df22ca 100644 --- a/package.json +++ b/package.json @@ -17,6 +17,8 @@ "d3": "^7.8.4", "d3-cloud": "^1.2.5", "file-saver": "^2.0.5", + "html-react-parser": "^4.2.2", + "interweave": "^13.1.0", "js-file-download": "^0.4.12", "react": "^18.2.0", "react-bootstrap": "^2.7.4", @@ -25,6 +27,7 @@ "react-pdf": "^6.2.2", "react-scripts": "^5.0.1", "react-spinners": "^0.13.8", + "sbd": "^1.0.19", "web-vitals": "^2.1.4", "worker-loader": "^3.0.8" }, diff --git a/src/App.js b/src/App.js index 66a176f..898e3b8 100644 --- a/src/App.js +++ b/src/App.js @@ -6,9 +6,9 @@ import Filter from "./Components/Layout/Filter/Filter"; import ComplainceFilter from "./Components/Layout/Filter/ComplainceFilter"; import Results from "./Components/Layout/Results/Results"; import AppliedFilters from "./Components/Layout/AppliedFilters/AppliedFilters"; -import IddrsImg from "./Static/Imgs/IDDRS.png"; +import Logos from "./Components/Layout/Logos/Logos"; +import IddrsImg from "./Imgs/IDDRS.png"; import axios from "axios"; -import FeaturedQuestions from "./Components/Layout/FeaturedQuestions/FeaturedQuestions"; import WordCloud_ from "./Components/Layout/WordCloud_/WordCloud_"; import Stack from "react-bootstrap/esm/Stack"; import Container from "react-bootstrap/esm/Container"; @@ -27,6 +27,11 @@ function App() { const [filtersComplaince, setFiltersComplaince] = useState([]); const [filtersStandards, setFiltersStandards] = useState([]); const [loading, setLoading] = useState(false); + const [currentPage, setCurrentPage] = useState(1); + const [standardsFilter, setStandardsFilter] = useState([]); + const [score, setScore] = useState(8); + + // the useEffect hook is used to apply filters whenever the results, // filtersStandards, or filtersComplaince values change @@ -40,14 +45,19 @@ function App() { const handleSubmit = (event) => { event.preventDefault(); setLoading(true); + setFiltersStandards([]); + setFiltersComplaince([]); + setCurrentPage(1) //test + // Send the input value to Django axios .post("http://localhost:8000/client_api/get_input/", { data }) .then((response) => { setPhrase(data["phrase"]); - setResults(response.data.results); + setResults(response.data.results[0]); // The recived data from this api is a tuple of (results, min_score), thats why we used [0] setShowResults(true); - setFilteredResults(response.data.results); + setFilteredResults(response.data.results[0]);// The recived data from this api is a tuple of (results, min_score), thats why we used [0] + setScore(response.data.results[1]) // The recived data from this api is a tuple of (results, min_score), thats why we used [1] setLoading(false); }) .catch((error) => { @@ -58,6 +68,7 @@ function App() { const handleSubmit_ = (value) => { setLoading(true); + setCurrentPage(1) //test // Send the input value to Django axios .post("http://localhost:8000/client_api/get_input/", { @@ -66,8 +77,9 @@ function App() { .then((response) => { setPhrase(value); setShowResults(true); - setResults(response.data.results); - setFilteredResults(response.data.results); + setResults(response.data.results[0]);// The recived data from this api is a tuple of (results, min_score), thats why we used [0] + setFilteredResults(response.data.results[0]);// The recived data from this api is a tuple of (results, min_score), thats why we used [0] + setScore(response.data.results[1])// The recived data from this api is a tuple of (results, min_score), thats why we used [1] setLoading(false); }) .catch((error) => { @@ -85,7 +97,7 @@ function App() { // Apply the Standards filter if it is provided, Array#some method checks if at least one // element in filter1 matches the result.Title value. if (filter1.length > 0) { - console.log("filter1"); + filteredResults__ = filteredResults__.filter((result) => { return filter1.some((filter) => filter == result.Title); }); @@ -93,7 +105,7 @@ function App() { // Apply the second filter if it is provided if (filter2.length > 0) { - console.log("filter2"); + filteredResults__ = filteredResults__.filter((result) => { return filter2.every((filter) => result[filter]); }); @@ -113,6 +125,7 @@ function App() { // apply the standards filter on the results and then send the new results to the // results component function handleStandardsFilterChange(StandardsFilterValue) { + setCurrentPage(1) //test setFiltersStandards(StandardsFilterValue); } //################################################################################ @@ -148,18 +161,24 @@ function App() { } }; + //########################################################################################### + const handleClearFilter = () =>{ + setFiltersStandards([]); + setStandardsFilter([]); + } + return (
IDDRS - {showResults && } + {showResults && } {showResults && ( )} {filtersStandards.length > 0 && ( - + )} {showResults && ( @@ -169,12 +188,16 @@ function App() { results={filteredResults} complainceFilter={filtersComplaince} searchedPhrase={phrase} + currentPage = {currentPage} //test + setCurrentPage = {setCurrentPage} //test + score = {score} /> )} - - + + {/* */} + {loading && ( diff --git a/src/Components/Layout/AppliedFilters/AppliedFilters.js b/src/Components/Layout/AppliedFilters/AppliedFilters.js index a216e98..bbce564 100644 --- a/src/Components/Layout/AppliedFilters/AppliedFilters.js +++ b/src/Components/Layout/AppliedFilters/AppliedFilters.js @@ -2,6 +2,7 @@ import React from "react"; import Stack from "react-bootstrap/esm/Stack"; import Accordion from "react-bootstrap/Accordion"; const AppliedFilters = (props) => { + return (
@@ -14,7 +15,9 @@ const AppliedFilters = (props) => { {standard} ))} +
Clear filter
+
diff --git a/src/Components/Layout/FeaturedQuestions/FeaturedQuestions.js b/src/Components/Layout/FeaturedQuestions/FeaturedQuestions.js index dca0126..3371d4a 100644 --- a/src/Components/Layout/FeaturedQuestions/FeaturedQuestions.js +++ b/src/Components/Layout/FeaturedQuestions/FeaturedQuestions.js @@ -5,7 +5,6 @@ import classes from "./FeaturedQuestions.module.css" const FeaturedQuestions = ({ handleButtonClick }) => { const handleClick = (value) => { - //console.log(event.target.value) handleButtonClick(value); }; diff --git a/src/Components/Layout/Filter/Filter copy.js b/src/Components/Layout/Filter/Filter copy.js index 68bcd81..8fcca16 100644 --- a/src/Components/Layout/Filter/Filter copy.js +++ b/src/Components/Layout/Filter/Filter copy.js @@ -13,7 +13,7 @@ const Filter = ({ onFilterChange }) => { function handelOnFilterChange(newFilters){ setStandardsFilter(newFilters) onFilterChange(newFilters) - //console.log(newFilters) + } useEffect(() => { diff --git a/src/Components/Layout/Filter/Filter.js b/src/Components/Layout/Filter/Filter.js index eff5553..218b742 100644 --- a/src/Components/Layout/Filter/Filter.js +++ b/src/Components/Layout/Filter/Filter.js @@ -7,16 +7,19 @@ import filterClasses from "./Filter.module.css"; import axios from "axios"; -const Filter = ({ onFilterChange }) => { +const Filter = (props) => { const [levels, setLevels] = useState([]); const [standards, setStandards] = useState([]); - const [standardsFilter, setStandardsFilter] = useState([]); + + // Function to clear selected standards + const clearSelectedStandards = () => { + props.setStandardsFilter([]); // Set standardsFilter to an empty array + }; // get the filters values to this component const handelOnFilterChange = (val) => { - // console.log(val); - setStandardsFilter(val); - onFilterChange(val); + props.setStandardsFilter(val); + props.onFilterChange(val); }; useEffect(() => { @@ -50,7 +53,7 @@ const Filter = ({ onFilterChange }) => { { + return ( +
+ +
+ Developed for the UN by{" "} + + BICC + {" "} + in colaboration with{" "} + + Fenix Insight + + . +
+ + Bonn International Centre for Conflict Studies + Fenix Insight + +
+
+ ); +}; + +export default Logos; diff --git a/src/Components/Layout/Logos/Logos.module.css b/src/Components/Layout/Logos/Logos.module.css new file mode 100644 index 0000000..c41ada4 --- /dev/null +++ b/src/Components/Layout/Logos/Logos.module.css @@ -0,0 +1,11 @@ +@media screen and (max-width: 320px) { + #image-section { + width: 100%; + height: auto; + } + + .imgBox { + max-width: 400px; + min-width: 200px; + } +} diff --git a/src/Components/Layout/Results/Results.js b/src/Components/Layout/Results/Results.js index 458ff9f..b885e06 100644 --- a/src/Components/Layout/Results/Results.js +++ b/src/Components/Layout/Results/Results.js @@ -4,19 +4,20 @@ import Stack from "react-bootstrap/Stack"; import ResultsItem from "./ResultsItem"; import ResultModal from "../../UI/ResultModal/ResultModal"; import ResultsPagination from "../../UI/ResultsPagination/ResultsPagination"; -import PDFGenerator from "../../PDFGenerator/PDFGenerator"; +import OverlayTrigger from "react-bootstrap/OverlayTrigger"; +import Tooltip from "react-bootstrap/Tooltip"; const Results = (props) => { const [showModal, setShowModal] = useState(false); const [selectedResult, setSelectedResult] = useState(null); - const [currentPage, setCurrentPage] = useState(1); // eslint-disable-next-line const [postsPerPage, setPostsPerPage] = useState(10); - const lastPostIndex = currentPage * postsPerPage; + const lastPostIndex = props.currentPage * postsPerPage; const firstPostIndex = lastPostIndex - postsPerPage; const currentPost = props.results.slice(firstPostIndex, lastPostIndex); + const resultsLength = props.results.length; const handleShowModal = (result) => { setSelectedResult(result); @@ -28,13 +29,33 @@ const Results = (props) => { setSelectedResult(null); }; + const Link = ({ id, children, title }) => ( + {title}}> + {children} + + ); + return (
- {/* */} -

{props.searchedPhrase}

+
+

+ Search Results: {resultsLength} Results Found at + Score {props.score}{" "} + + ( ? ) + +

+ +
+ {currentPost.map((result) => ( { title={result.Title} heading1={result.Heading1} paragraph={result.Paragraph} - complainceFilter = {props.complainceFilter} - pageNumber = {result.PageNum} + complainceFilter={props.complainceFilter} + pageNumber={result.PageNum} > ))} + totalPosts={props.results.length} + postsPerPage={postsPerPage} + setCurrentPage={props.setCurrentPage} + currentPage={props.currentPage} + >
- - { pageNumber={selectedResult ? selectedResult.PageNum : ""} paragraph={selectedResult ? selectedResult.Paragraph : ""} sentence={selectedResult ? selectedResult.Sentence : ""} + highlight={selectedResult ? selectedResult.Highlight : ""} > - -
); }; diff --git a/src/Components/Layout/WordCloud_/WordCloud_ copy.js b/src/Components/Layout/WordCloud_/WordCloud_ copy.js index 07974a8..b187886 100644 --- a/src/Components/Layout/WordCloud_/WordCloud_ copy.js +++ b/src/Components/Layout/WordCloud_/WordCloud_ copy.js @@ -89,7 +89,6 @@ const data = [ const WordCloud_ = ({handleButtonClick}) => { const handleClick = (value) => { - //console.log(event.target.value) handleButtonClick(value); }; @@ -112,7 +111,6 @@ const WordCloud_ = ({handleButtonClick}) => { padding={2} onWordMouseOver = {classes.pointer} onWordClick={(event, d) => { - console.log(`onWordClick: ${d.text}`); handleClick(d.text) }} /> diff --git a/src/Components/Layout/WordCloud_/WordCloud_.js b/src/Components/Layout/WordCloud_/WordCloud_.js index ae28f78..e18e628 100644 --- a/src/Components/Layout/WordCloud_/WordCloud_.js +++ b/src/Components/Layout/WordCloud_/WordCloud_.js @@ -3,7 +3,6 @@ import WordCloud from "react-d3-cloud"; import Card from "react-bootstrap/Card"; import classes from "./WordCloud_.module.css"; const data = [ - { text: "Disarmament", value: 1000 }, { text: "Disarmament", value: 68.0, @@ -88,18 +87,17 @@ const data = [ const WordCloud_ = ({ handleButtonClick }) => { const handleClick = (value) => { - //console.log(event.target.value) handleButtonClick(value); }; return (

- Most Frequent Key-Phrases + Optional Search Terms

{ fill="gray" padding={2} onWordClick={(event, d) => { - console.log(`onWordClick: ${d.text}`); + handleClick(d.text); }} /> diff --git a/src/Components/UI/Dropdown/Dropdown_.js b/src/Components/UI/Dropdown/Dropdown_.js index bcc8625..01705f6 100644 --- a/src/Components/UI/Dropdown/Dropdown_.js +++ b/src/Components/UI/Dropdown/Dropdown_.js @@ -17,7 +17,7 @@ const Dropdown_ = (props) => { })); props.onFilterChange(filterValues) - //console.log(filterValues); + }; return ( diff --git a/src/Components/UI/ResultModal/ResultModal.js b/src/Components/UI/ResultModal/ResultModal.js index 1ed65b1..f125053 100644 --- a/src/Components/UI/ResultModal/ResultModal.js +++ b/src/Components/UI/ResultModal/ResultModal.js @@ -2,29 +2,33 @@ import React, { useState } from "react"; import Modal from "react-bootstrap/Modal"; import Button from "react-bootstrap/esm/Button"; import classes from "../../../Static/styles.module.css"; +import sbd from 'sbd'; +import { Interweave } from 'interweave'; +import parse from 'html-react-parser'; const ResultModal = (props) => { + const test_text = "This is a test text" + const HighlightSubstring = ({ text, substring }) => { const highlightStyle = { backgroundColor: "yellow", fontWeight: "bold", }; - // Split the text into parts based on the substring - const parts = text.split(new RegExp(`(${substring})`, "gi")); - console.log(parts) - - // Wrap the matching parts with a span and apply the highlight style - const highlightedText = parts.map((part, index) => { - if (part == substring) { + // Split the text into sentences based on the substring + const sentences = sbd.sentences(text); + + // Wrap the matching sentences with a span and apply the highlight style + const highlightedText = sentences.map((sentence, index) => { + if (sentence == substring) { return ( - {part} + {sentence} ); } - return part; + return sentence; }); return highlightedText; }; @@ -50,9 +54,11 @@ const ResultModal = (props) => { -

+ + +
-

Page: {props.pageNumber}

+

Page: {props.pageNumber}

diff --git a/src/Components/UI/ResultsPagination/ResultsPagination.js b/src/Components/UI/ResultsPagination/ResultsPagination.js index d9aec0e..1506063 100644 --- a/src/Components/UI/ResultsPagination/ResultsPagination.js +++ b/src/Components/UI/ResultsPagination/ResultsPagination.js @@ -8,10 +8,11 @@ const ResultsPagination = ({ setCurrentPage, currentPage, }) => { + + const [pageNumberLimit, setpageNumberLimit] = useState(5); const [maxPageNumberLimit, setmaxPageNumberLimit] = useState(5); const [minPageNumberLimit, setminPageNumberLimit] = useState(0); - //console.log(maxPageNumberLimit, minPageNumberLimit); let pages = []; for (let i = 1; i <= Math.ceil(totalPosts / postsPerPage); i++) { pages.push(i); @@ -39,13 +40,13 @@ const ResultsPagination = ({ setCurrentPage(1); setmaxPageNumberLimit(5); setminPageNumberLimit(0); + }; const handleLastbtn = () => { setCurrentPage(pages.slice(-1)); setmaxPageNumberLimit(Math.floor(pages.slice(-1) / 5) * 5); setminPageNumberLimit(Math.floor(pages.slice(-1) / 5) * 5 - 5); - console.log(currentPage) }; let pageIncrementBtn = null; diff --git a/src/Imgs/BICC.png b/src/Imgs/BICC.png new file mode 100644 index 0000000000000000000000000000000000000000..a36245e205bc6d7f8c530ecd1da4a64c6380e013 GIT binary patch literal 7279 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 literal 0 HcmV?d00001 diff --git a/src/Imgs/Fenix.png b/src/Imgs/Fenix.png new file mode 100644 index 0000000000000000000000000000000000000000..81852a3b531189552329571dc90a51d62e0591d0 GIT binary patch literal 4004 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