From 2cbd045baeebbc5a9b30c4ea1179dd76dfea3f6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C4=9Bj=20Z=C3=A1bojn=C3=ADk?= Date: Tue, 7 Nov 2023 22:51:33 +0100 Subject: [PATCH] fix: Searching by bib citation fixed. Model repository updated. ModelsPage refactoring. --- backend/package.json | 2 +- .../migration.sql | 0 backend/src/tmpReadModels.ts | 23 +- frontend/package-lock.json | 72 +++++ frontend/package.json | 3 + frontend/src/components/FilterBar.tsx | 200 ++++++++++++ frontend/src/components/ModelViewer.tsx | 2 +- frontend/src/hooks/useFilteredModels.ts | 95 ++++++ frontend/src/index.css | 9 +- frontend/src/pages/ModelsDetailPage.tsx | 10 +- frontend/src/pages/ModelsPage.tsx | 286 +++--------------- frontend/src/services/modelsApi.ts | 1 - frontend/src/state/filtersSelector.ts | 10 - frontend/src/types/data.ts | 38 +++ models/.DS_Store | Bin 45060 -> 0 bytes .../README.md | 8 +- .../metadata.json | 2 +- .../README.md | 12 +- .../metadata.json | 2 +- .../README.md | 12 +- .../metadata.json | 2 +- .../README.md | 12 +- .../metadata.json | 2 +- .../README.md | 18 +- .../metadata.json | 2 +- .../README.md | 10 +- .../metadata.json | 2 +- .../README.md | 9 +- .../metadata.json | 2 +- .../README.md | 2 +- .../metadata.json | 2 +- 31 files changed, 540 insertions(+), 310 deletions(-) rename backend/prisma/migrations/{20231017092407_init => 20231107091831_init}/migration.sql (100%) create mode 100644 frontend/src/components/FilterBar.tsx create mode 100644 frontend/src/hooks/useFilteredModels.ts delete mode 100644 frontend/src/state/filtersSelector.ts delete mode 100644 models/.DS_Store diff --git a/backend/package.json b/backend/package.json index a2ab1e7..b6b0e8b 100644 --- a/backend/package.json +++ b/backend/package.json @@ -5,7 +5,7 @@ "main": "index.js", "scripts": { "start": "ts-node src/index.ts", - "read": "ts-node src/tmpReadModels.ts" + "seed": "ts-node src/tmpReadModels.ts" }, "keywords": [], "author": "", diff --git a/backend/prisma/migrations/20231017092407_init/migration.sql b/backend/prisma/migrations/20231107091831_init/migration.sql similarity index 100% rename from backend/prisma/migrations/20231017092407_init/migration.sql rename to backend/prisma/migrations/20231107091831_init/migration.sql diff --git a/backend/src/tmpReadModels.ts b/backend/src/tmpReadModels.ts index c0ec19a..4c3edc2 100644 --- a/backend/src/tmpReadModels.ts +++ b/backend/src/tmpReadModels.ts @@ -1,20 +1,5 @@ -import client from "./repositories/client"; +import {seed} from "./seed"; -const getAll = async () => { - try { - return await client.model.findMany() - } catch (e) { - console.error('Error fetching validationModels!'); - throw e; - } finally { - await client.$disconnect(); - } -} - -getAll() - .then((models) => { - console.log("All validationModels:", models) - }) - .catch((_) => { - console.error("Error!") - }); +seed() + .then((_) => console.log('success')) + .catch((_) => console.error('error')) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 674bc62..762d09f 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -14,7 +14,9 @@ "@mui/material": "^5.14.13", "@tanstack/react-query": "^4.35.7", "axios": "^1.5.1", + "bibtex-parse": "^2.1.0", "cytoscape": "^3.26.0", + "latex-to-unicode": "^0.1.0", "react": "^18.2.0", "react-dom": "^18.2.0", "react-router-dom": "^6.16.0", @@ -31,6 +33,7 @@ "eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-react-refresh": "^0.4.3", "typescript": "^5.0.2", + "unicodeit": "^0.7.5", "vite": "^4.4.5" } }, @@ -1466,6 +1469,15 @@ "@babel/types": "^7.20.7" } }, + "node_modules/@types/jquery": { + "version": "3.5.26", + "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.26.tgz", + "integrity": "sha512-wWYf2NBI6b+1RPQY86B74HSgZNsLAUtr4eFlGQoOQPJw/B3mCMfwWCflZWQ7OKtAB18MJCcYpL6+0NZbMIXl5g==", + "dev": true, + "dependencies": { + "@types/sizzle": "*" + } + }, "node_modules/@types/json-schema": { "version": "7.0.13", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.13.tgz", @@ -1526,6 +1538,21 @@ "integrity": "sha512-OxepLK9EuNEIPxWNME+C6WwbRAOOI2o2BaQEGzz5Lu2e4Z5eDnEo+/aVEDMIXywoJitJ7xWd641wrGLZdtwRyw==", "dev": true }, + "node_modules/@types/sizzle": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.5.tgz", + "integrity": "sha512-tAe4Q+OLFOA/AMD+0lq8ovp8t3ysxAOeaScnfNdZpUxaGl51ZMDEITxkvFl1STudQ58mz6gzVGl9VhMKhwRnZQ==", + "dev": true + }, + "node_modules/@types/typeahead": { + "version": "0.11.32", + "resolved": "https://registry.npmjs.org/@types/typeahead/-/typeahead-0.11.32.tgz", + "integrity": "sha512-5NkqKPwkBh2dGxFEJjc4Vt9/XsaGmx+tfXMfcJxWjPvCvvCFEKRCz+bz7ZfRAiO0e0Hh1foBol3anLzMY1Ea8A==", + "dev": true, + "dependencies": { + "@types/jquery": "*" + } + }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "6.7.3", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.7.3.tgz", @@ -1841,6 +1868,11 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, + "node_modules/bibtex-parse": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/bibtex-parse/-/bibtex-parse-2.1.0.tgz", + "integrity": "sha512-Ej1vvnhfEfegd2WAeQ1dWJ/NkS3Cb84zRPeMMCFDcOSvAJFAmhm/sAr2oLpK/KQITlnHk0g6+zBokGvLe9+NaQ==" + }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -2081,6 +2113,12 @@ "node": ">=6.0.0" } }, + "node_modules/dom": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/dom/-/dom-0.0.2.tgz", + "integrity": "sha512-e4et+/XWFf396eDrDOiONO1SCT2zAvpIiutNwG0kzkFHSZB+JUq7jn+gYcIvNS7NJZyMQrZNKrJNdHGHpRPiSQ==", + "dev": true + }, "node_modules/dom-helpers": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", @@ -2887,6 +2925,11 @@ "json-buffer": "3.0.1" } }, + "node_modules/latex-to-unicode": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/latex-to-unicode/-/latex-to-unicode-0.1.0.tgz", + "integrity": "sha512-zimqY/OjXd3gnDQQQcA639H75vVEBjRIU7ZMgu9h7Rst0kvtsh0dUO44/HXQwY8yk0/UU1QpleYVo35CR/hOEA==" + }, "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -3671,6 +3714,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/typeahead": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/typeahead/-/typeahead-0.2.2.tgz", + "integrity": "sha512-cJLI/AZaAbBCErlHeax2V+jJEKnchXcJTcEXyeMtkiQUDR22LY2wptj8J1hZbGS5r4FxsqNyFCRPvE87gk6N3g==", + "dev": true, + "dependencies": { + "dom": "0.0.2", + "xtend": "1.0.3" + } + }, "node_modules/typescript": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", @@ -3684,6 +3737,16 @@ "node": ">=14.17" } }, + "node_modules/unicodeit": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/unicodeit/-/unicodeit-0.7.5.tgz", + "integrity": "sha512-IfHeCkRhhf/rvBRw7yMBM6VHzuUg3jSizjFbitT46ATd1VJd9mCYaL78snVzR/vgJEW8a1AczFpNHf3YLSK5dQ==", + "dev": true, + "dependencies": { + "@types/typeahead": "^0.11.32", + "typeahead": "^0.2.2" + } + }, "node_modules/update-browserslist-db": { "version": "1.0.13", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", @@ -3807,6 +3870,15 @@ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true }, + "node_modules/xtend": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-1.0.3.tgz", + "integrity": "sha512-wv78b3q8kHDveC/C7Yq/UUrJXsAAM1t/j5m28h/ZlqYy0+eqByglhsWR88D2j3VImQzZlNIDsSbZ3QItwgWEGw==", + "dev": true, + "engines": { + "node": ">=0.4" + } + }, "node_modules/yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", diff --git a/frontend/package.json b/frontend/package.json index 35db0cf..2556bcf 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -16,7 +16,9 @@ "@mui/material": "^5.14.13", "@tanstack/react-query": "^4.35.7", "axios": "^1.5.1", + "bibtex-parse": "^2.1.0", "cytoscape": "^3.26.0", + "latex-to-unicode": "^0.1.0", "react": "^18.2.0", "react-dom": "^18.2.0", "react-router-dom": "^6.16.0", @@ -33,6 +35,7 @@ "eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-react-refresh": "^0.4.3", "typescript": "^5.0.2", + "unicodeit": "^0.7.5", "vite": "^4.4.5" } } diff --git a/frontend/src/components/FilterBar.tsx b/frontend/src/components/FilterBar.tsx new file mode 100644 index 0000000..3db1705 --- /dev/null +++ b/frontend/src/components/FilterBar.tsx @@ -0,0 +1,200 @@ +import React from "react"; +import {FilterBarProps} from "../types/data"; +import {Button, IconButton, MenuItem, Select, TextField} from "@mui/material"; +import SearchOutlinedIcon from "@mui/icons-material/SearchOutlined"; +import SouthOutlinedIcon from "@mui/icons-material/SouthOutlined"; +import ClearIcon from "@mui/icons-material/Clear"; +import ExpandMoreOutlinedIcon from "@mui/icons-material/ExpandMoreOutlined"; + +const FilterBar: React.FC = ({ + searchNameQuery, + setSearchNameQuery, + searchBibJournalQuery, + setSearchBibJournalQuery, + searchBibYearQuery, + setSearchBibYearQuery, + sortBy, + setSortBy, + filterChanged, + setFilterChanged, + sortOrder, + uniqueKeywords, + countModelsForKeyword, + selectedKeywords, + handleKeywordChange, + toggleSortOrder, + showAdvancedFilters, + toggleAdvancedFilters, + handleResetFilters}) => { + return ( +
+
+
+
+ { + setSearchNameQuery(e.target.value); + setFilterChanged(true) + }} + InputProps={{ + endAdornment: ( + + + + ), + }} + sx={{ + '@media only screen and (max-width: 767px)': { + marginBottom: '1rem', + } + }} + /> +
+ Sort by +
+ + + + +
+
+
+
+ + +
+
+ {showAdvancedFilters && ( +
+
+

Keywords:

+

+ {uniqueKeywords.map((keyword) => ( + + ))} +
+
+
+ { + setSearchBibJournalQuery(e.target.value); + setFilterChanged(true); + }} + InputProps={{ + endAdornment: ( + + + + ), + }} + /> + { + setSearchBibYearQuery(e.target.value); + setFilterChanged(true); + }} + InputProps={{ + endAdornment: ( + + + + ), + }} + /> +
+
+ )} +
+
+ ); +}; + +export default FilterBar; diff --git a/frontend/src/components/ModelViewer.tsx b/frontend/src/components/ModelViewer.tsx index 3372c11..ed6d9cb 100644 --- a/frontend/src/components/ModelViewer.tsx +++ b/frontend/src/components/ModelViewer.tsx @@ -17,7 +17,7 @@ const ModelViewer: React.FC = ({modelData}) => { }); useEffect(() => { - let container = document.getElementById("model-view"); + const container = document.getElementById("model-view"); if (!modelData) { let dataString = '' const data = model?.modelData; diff --git a/frontend/src/hooks/useFilteredModels.ts b/frontend/src/hooks/useFilteredModels.ts new file mode 100644 index 0000000..9b980a8 --- /dev/null +++ b/frontend/src/hooks/useFilteredModels.ts @@ -0,0 +1,95 @@ +import { useEffect, useState } from 'react'; +// eslint-disable-next-line @typescript-eslint/ban-ts-comment +// @ts-ignore +import bibtexParse from 'bibtex-parse'; +import {BibTexItem, FilterOptions, Model} from "../types/data"; + +const useFilteredModels = (models: Model[], { + searchNameQuery, + searchBibJournalQuery, + searchBibYearQuery, + sortBy, + sortOrder, + selectedKeywords +}: FilterOptions) => { + const [filteredModels, setFilteredModels] = useState([]); + + useEffect(() => { + if (!models) return; + + const findValueByName = (array: BibTexItem[], name: string) => { + const field = array.find((item) => item.name === name); + return field ? field.value : undefined; + }; + + const filtered = models.filter(model => { + const keywordMatch = selectedKeywords.length === 0 || selectedKeywords.every(keyword => model.keywords.includes(keyword)); + const nameMatch = model.name.toLowerCase().includes(searchNameQuery.toLowerCase()); + + let journalMatch = false; + let yearMatch = false; + + // Parse the BibTex data + const parsedBib = bibtexParse.parse(model.bib); + + const journal = findValueByName(parsedBib[0].fields, 'journal'); + const school = findValueByName(parsedBib[0].fields, 'school'); + const bookTitle = findValueByName(parsedBib[0].fields, 'booktitle'); + + // Journal match check + if (journal) { + journalMatch = journal.toLowerCase().includes(searchBibJournalQuery.toLowerCase()); + } else if (school) { + journalMatch = school.toLowerCase().includes(searchBibJournalQuery.toLowerCase()); + } else if (bookTitle) { + journalMatch = bookTitle.toLowerCase().includes(searchBibJournalQuery.toLowerCase()); + } + + // Year match check + const year = findValueByName(parsedBib[0].fields, 'year'); + if (year) { + yearMatch = year.toLowerCase().includes(searchBibYearQuery.toLowerCase()); + } + + return keywordMatch && nameMatch && journalMatch && yearMatch; + }); + + // Sorting logic + const sortedModels = filtered.sort((a, b) => { + let comparison = 0; + switch (sortBy) { + case 'name': + comparison = a.name.localeCompare(b.name); + break; + case 'variables': + comparison = a.variables - b.variables; + break; + case 'inputs': + comparison = a.inputs - b.inputs; + break; + case 'regulations': + comparison = a.regulations - b.regulations; + break; + default: + break; + } + + return sortOrder === 'asc' ? comparison : -comparison; + }); + + setFilteredModels(sortedModels); + }, [ + models, + searchNameQuery, + searchBibJournalQuery, + searchBibYearQuery, + sortBy, + sortOrder, + selectedKeywords + ]); + + return filteredModels; +}; + +export default useFilteredModels; + diff --git a/frontend/src/index.css b/frontend/src/index.css index b43d565..26a7ba1 100644 --- a/frontend/src/index.css +++ b/frontend/src/index.css @@ -59,6 +59,7 @@ h1 { } button { + color: white; border-radius: 8px; border: 1px solid transparent; padding: 0.6em 1.2em; @@ -213,7 +214,7 @@ h4 { align-self: center; display: flex; flex-direction: column; - background-color: white; + background-color: white; width: 70vw; margin: 1rem; padding: 1rem 2rem 1rem 2rem; @@ -259,6 +260,10 @@ h4 { font-weight: bold; } +.disabled_checkbox { + filter: opacity(.4); +} + .keyword { display: inline-block; text-decoration: underline; @@ -459,7 +464,7 @@ h4 { .filter_bar_container { margin: 0; - padding-inline-start: 0; + padding-inline-start: 0; } .filter_bar { diff --git a/frontend/src/pages/ModelsDetailPage.tsx b/frontend/src/pages/ModelsDetailPage.tsx index 8299a2f..50d3e03 100644 --- a/frontend/src/pages/ModelsDetailPage.tsx +++ b/frontend/src/pages/ModelsDetailPage.tsx @@ -8,7 +8,7 @@ import { CircularProgress } from '@mui/material'; const ModelsDetailPage: React.FC = () => { const { id } = useParams(); - const [fData, setFData] = useState(''); + const [fileData, setFileData] = useState(''); const [modifications, setModifications] = useState(''); const { data: model, isLoading } = useQuery({ queryKey: ['model'], @@ -27,7 +27,7 @@ const ModelsDetailPage: React.FC = () => { try { const tmp = new Uint8Array((data as unknown as {type: string, data: number[]}).data); const dataString = new TextDecoder('utf-8').decode(tmp); - setFData(dataString); + setFileData(dataString); } catch (e) { console.error("error converting", e); } @@ -37,7 +37,7 @@ const ModelsDetailPage: React.FC = () => { if (notes) { setModifications(parseModifications(notes)) } - }); + }, [model]); return ( <> @@ -65,12 +65,12 @@ const ModelsDetailPage: React.FC = () => {

Model Citation

- {model?.bib} + {model!.bib}

Model Viewer

- +
diff --git a/frontend/src/pages/ModelsPage.tsx b/frontend/src/pages/ModelsPage.tsx index 29cf565..8023968 100644 --- a/frontend/src/pages/ModelsPage.tsx +++ b/frontend/src/pages/ModelsPage.tsx @@ -1,24 +1,21 @@ -import React, {useEffect} from 'react'; +import React, {useEffect, useMemo} from 'react'; import {Link} from "react-router-dom"; import {useQuery} from "@tanstack/react-query"; import {ModelsApi} from "../services"; -import {Model} from "../types/data"; -import {Button, IconButton, MenuItem, Select, TextField, CircularProgress, Pagination} from "@mui/material"; -import SearchOutlinedIcon from "@mui/icons-material/SearchOutlined" -import ExpandMoreOutlinedIcon from '@mui/icons-material/ExpandMoreOutlined'; -import SouthOutlinedIcon from '@mui/icons-material/SouthOutlined'; -import ClearIcon from '@mui/icons-material/Clear'; -import {useRecoilState, useRecoilValue} from "recoil"; +import {FilterOptions} from "../types/data"; +import {CircularProgress, Pagination} from "@mui/material"; +import {useRecoilState} from "recoil"; import { filterChangedAtom, - filteredModelsAtom, pageNumberAtom, + pageNumberAtom, searchBibJournalQueryAtom, searchBibYearQueryAtom, searchNameQueryAtom, selectedKeywordsAtom, showAdvancedAFiltersAtom, sortByAtom, sortOrderAtom } from "../state/filtersAtom"; -import {numberOfModelsSelector} from "../state/filtersSelector"; +import useFilteredModels from "../hooks/useFilteredModels"; +import FilterBar from "../components/FilterBar"; const ModelsPage: React.FC = () => { const { data: models, isLoading } = useQuery({ @@ -32,12 +29,22 @@ const ModelsPage: React.FC = () => { const [sortBy, setSortBy] = useRecoilState(sortByAtom); const [sortOrder, setSortOrder] = useRecoilState(sortOrderAtom); const [selectedKeywords, setSelectedKeywords] = useRecoilState(selectedKeywordsAtom); - const [filteredModels, setFilteredModels] = useRecoilState(filteredModelsAtom); const [showAdvancedFilters, setShowAdvancedFilters] = useRecoilState(showAdvancedAFiltersAtom); - const numberOfModels = useRecoilValue(numberOfModelsSelector); const [filterChanged, setFilterChanged] = useRecoilState(filterChangedAtom); const [pageNumber, setPageNumber] = useRecoilState(pageNumberAtom); + const filterOptions: FilterOptions = { + searchNameQuery, + searchBibJournalQuery, + searchBibYearQuery, + sortBy, + sortOrder, + selectedKeywords + } + + const filteredModels = useFilteredModels(models!, filterOptions); + const numberOfModels = filteredModels.length; + const itemsPerPage = 10; const startIndex = (pageNumber - 1) * itemsPerPage; const endIndex = startIndex + itemsPerPage; @@ -53,75 +60,9 @@ const ModelsPage: React.FC = () => { setFilterChanged(!showAdvancedFilters); } - const journalRegex = /journal=\{([^}]+)}/; - const yearRegex = /year=\{([^}]+)}/; - - useEffect(() => { - // First, filter models based on both search query and selected keywords - const filteredByKeywordsAndSearch = models?.filter((model: Model) => { - // Check if the model's keywords contain all the selected keyword - const keywordMatch = selectedKeywords.length === 0 || selectedKeywords.every((keyword) => model.keywords.includes(keyword)); - - // Check if the model's name matches the search query - const nameMatch = model.name.toLowerCase().includes(searchNameQuery.toLowerCase()); - - const journalRegexMatch = model.bib.match(journalRegex); - const yearRegexMatch = model.bib.match(yearRegex); - - let journalMatch = false; - let yearMatch = false; - - if (journalRegexMatch) { - journalMatch = journalRegexMatch[1].toLowerCase().includes(searchBibJournalQuery.toLowerCase()); - } - - if (yearRegexMatch) { - yearMatch = yearRegexMatch[1].includes(searchBibYearQuery); - } - - return keywordMatch && nameMatch && journalMatch && yearMatch; - - - }) || []; - - // Then, sort the filtered models - const sortedModels = filteredByKeywordsAndSearch.sort((a: Model, b: Model) => { - let comparison = 0; - - switch (sortBy) { - case 'name': - comparison = a.name.localeCompare(b.name); - break; - case 'variables': - comparison = a.variables - b.variables; - break; - case 'inputs': - comparison = a.inputs - b.inputs; - break; - case 'regulations': - comparison = a.regulations - b.regulations; - break; - default: - break; - } - - if (sortOrder === 'asc') { - return comparison; - } else if (sortOrder === 'desc') { - return -comparison; // Reverse the order for DESC - } - return 0; - }); - - setFilteredModels(sortedModels); - }, [selectedKeywords, models, searchNameQuery, searchBibJournalQuery, searchBibYearQuery, sortBy, sortOrder]); - - useEffect(() => { - window.scrollTo({ top: 0, behavior: 'smooth' }); - }, [pageNumber]); - - // Extract unique keywords from the filtered models - const uniqueKeywords = [...new Set(filteredModels.flatMap((model) => model.keywords))]; + const uniqueKeywords = useMemo(() => { + return [...new Set(models?.flatMap((model) => model.keywords))]; + }, [models]); const handleKeywordChange = (keyword: string) => { setFilterChanged(true); @@ -147,169 +88,36 @@ const ModelsPage: React.FC = () => { setFilterChanged(false); }; + useEffect(() => { + window.scrollTo({ top: 0, behavior: 'smooth' }); + }, [pageNumber]); + return ( <>

Model Repository/BIODIVINE

-
-
-
-
- { - setSearchNameQuery(e.target.value); - setFilterChanged(true) - }} - InputProps={{ - endAdornment: ( - - - - ), - }} - sx={{ - '@media only screen and (max-width: 767px)': { - marginBottom: '1rem', - } - }} - /> -
- Sort by -
- - - - -
-
-
-
- - -
-
- {showAdvancedFilters && ( -
-
-

Keywords:

-

- {uniqueKeywords.map((keyword) => ( - - ))} -
-
-
- { - setSearchBibJournalQuery(e.target.value); - setFilterChanged(true); - }} - InputProps={{ - endAdornment: ( - - - - ), - }} - /> - { - setSearchBibYearQuery(e.target.value); - setFilterChanged(true); - }} - InputProps={{ - endAdornment: ( - - - - ), - }} - /> -
-
- )} -
-
+ {isLoading ? ( ) : ( @@ -326,7 +134,7 @@ const ModelsPage: React.FC = () => { Keywords: {model.keywords.map((keyword, index) => ( handleKeywordChange(keyword)}>[{keyword}] ))}
diff --git a/frontend/src/services/modelsApi.ts b/frontend/src/services/modelsApi.ts index f393b28..ebe4b33 100644 --- a/frontend/src/services/modelsApi.ts +++ b/frontend/src/services/modelsApi.ts @@ -3,7 +3,6 @@ import {Model} from "../types/data"; export const getAll = async (): Promise => { const response = await axiosInstance.get(`/models`); - console.log(response.data); return response.data?.data; } diff --git a/frontend/src/state/filtersSelector.ts b/frontend/src/state/filtersSelector.ts deleted file mode 100644 index 18d469a..0000000 --- a/frontend/src/state/filtersSelector.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { selector } from 'recoil'; -import {filteredModelsAtom} from "./filtersAtom"; - -export const numberOfModelsSelector = selector({ - key: 'numberOfModelsSelector', - get: ({ get }) => { - const filteredModels = get(filteredModelsAtom); // Assuming you have an atom called filteredModelsState - return filteredModels.length; - }, -}); diff --git a/frontend/src/types/data.ts b/frontend/src/types/data.ts index 480de66..45d8a18 100644 --- a/frontend/src/types/data.ts +++ b/frontend/src/types/data.ts @@ -11,3 +11,41 @@ export type Model = { bib: string, modelData: Buffer } + +export type BibTexItem = { + name: string, + value: string, + datatype: string, + raw: string +} + +export type FilterOptions = { + searchNameQuery: string; + searchBibJournalQuery: string; + searchBibYearQuery: string; + sortBy: string; // Replace with actual sort options + sortOrder: string; + selectedKeywords: string[]; +} + +export type FilterBarProps = { + searchNameQuery: string; + setSearchNameQuery: (value: string) => void; + searchBibJournalQuery: string; + setSearchBibJournalQuery: (value: string) => void; + searchBibYearQuery: string; + setSearchBibYearQuery: (value: string) => void; + sortBy: string; + setSortBy: (value: string) => void; + filterChanged: boolean, + setFilterChanged: (value: boolean) => void; + sortOrder: string; + uniqueKeywords: string[]; + countModelsForKeyword: (value: string) => number; + selectedKeywords: string[]; + handleKeywordChange: (value: string) => void; + toggleSortOrder: () => void; + showAdvancedFilters: boolean; + toggleAdvancedFilters: () => void; + handleResetFilters: () => void; +} diff --git a/models/.DS_Store b/models/.DS_Store deleted file mode 100644 index 48c114d6867e97c263f8562265e5537e822840c5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45060 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 d=l!|t@htlPv9IcpEi=eP|37lp{|E8^e*wma{VM Sic1 (S_3)` sign set to `unknown`.\n - Regulation `Start (S_9) -> Whi5 (S_14)` sign set to `unknown`.", - "bib": "@article{bbm-024,\n title={Ergodic sets as cell phenotype of budding yeast cell cycle},\n author={Todd, Robert G and Helikar, Tom{\\'a}{\\v{s}}},\n year={2012},\n publisher={Public Library of Science San Francisco, USA}\n}" + "bib": "@article{bbm-024,\n title={Ergodic Sets as Cell Phenotype of Budding Yeast Cell Cycle},\n author={Robert G. Todd and Tom{\\'a}{\\vs} Helikar},\n journal={PLoS ONE},\n year={2012},\n volume={7},\n url={https://api.semanticscholar.org/CorpusID:17537524}\n}" } \ No newline at end of file diff --git a/models/[id-170]__[var-4]__[in-3]__[DROSOPHILA-GAP-B]/README.md b/models/[id-170]__[var-4]__[in-3]__[DROSOPHILA-GAP-B]/README.md index dd325b3..7744dfe 100644 --- a/models/[id-170]__[var-4]__[in-3]__[DROSOPHILA-GAP-B]/README.md +++ b/models/[id-170]__[var-4]__[in-3]__[DROSOPHILA-GAP-B]/README.md @@ -15,8 +15,16 @@ The model is provided without modifications. ### Model citation ``` -@article{bbm-999, - +@article{bbm-170, + title={A logical analysis of the Drosophila gap-gene system}, + author={S{\'a}nchez, Lucas and Thieffry, Denis}, + journal={Journal of theoretical Biology}, + volume={211}, + number={2}, + pages={115--141}, + year={2001}, + publisher={Elsevier} } + ``` diff --git a/models/[id-170]__[var-4]__[in-3]__[DROSOPHILA-GAP-B]/metadata.json b/models/[id-170]__[var-4]__[in-3]__[DROSOPHILA-GAP-B]/metadata.json index 5e85957..a864a02 100644 --- a/models/[id-170]__[var-4]__[in-3]__[DROSOPHILA-GAP-B]/metadata.json +++ b/models/[id-170]__[var-4]__[in-3]__[DROSOPHILA-GAP-B]/metadata.json @@ -12,5 +12,5 @@ "inputs": 3, "regulations": 15, "notes": "### Modifications\n\nThe model is provided without modifications.", - "bib": "@article{bbm-999,\n \n}" + "bib": "@article{bbm-170,\n title={A logical analysis of the Drosophila gap-gene system},\n author={S{\\'a}nchez, Lucas and Thieffry, Denis},\n journal={Journal of theoretical Biology},\n volume={211},\n number={2},\n pages={115--141},\n year={2001},\n publisher={Elsevier}\n}\n" } \ No newline at end of file diff --git a/models/[id-171]__[var-5]__[in-2]__[DROSOPHILA-GAP-C]/README.md b/models/[id-171]__[var-5]__[in-2]__[DROSOPHILA-GAP-C]/README.md index eb9ab7e..0bb78e3 100644 --- a/models/[id-171]__[var-5]__[in-2]__[DROSOPHILA-GAP-C]/README.md +++ b/models/[id-171]__[var-5]__[in-2]__[DROSOPHILA-GAP-C]/README.md @@ -15,8 +15,16 @@ The model is provided without modifications. ### Model citation ``` -@article{bbm-999, - +@article{bbm-171, + title={A logical analysis of the Drosophila gap-gene system}, + author={S{\'a}nchez, Lucas and Thieffry, Denis}, + journal={Journal of theoretical Biology}, + volume={211}, + number={2}, + pages={115--141}, + year={2001}, + publisher={Elsevier} } + ``` diff --git a/models/[id-171]__[var-5]__[in-2]__[DROSOPHILA-GAP-C]/metadata.json b/models/[id-171]__[var-5]__[in-2]__[DROSOPHILA-GAP-C]/metadata.json index e726d82..74ccf0f 100644 --- a/models/[id-171]__[var-5]__[in-2]__[DROSOPHILA-GAP-C]/metadata.json +++ b/models/[id-171]__[var-5]__[in-2]__[DROSOPHILA-GAP-C]/metadata.json @@ -12,5 +12,5 @@ "inputs": 2, "regulations": 20, "notes": "### Modifications\n\nThe model is provided without modifications.", - "bib": "@article{bbm-999,\n \n}" + "bib": "@article{bbm-171,\n title={A logical analysis of the Drosophila gap-gene system},\n author={S{\\'a}nchez, Lucas and Thieffry, Denis},\n journal={Journal of theoretical Biology},\n volume={211},\n number={2},\n pages={115--141},\n year={2001},\n publisher={Elsevier}\n}\n" } \ No newline at end of file diff --git a/models/[id-172]__[var-5]__[in-2]__[DROSOPHILA-GAP-D]/README.md b/models/[id-172]__[var-5]__[in-2]__[DROSOPHILA-GAP-D]/README.md index 2bccbce..eb72590 100644 --- a/models/[id-172]__[var-5]__[in-2]__[DROSOPHILA-GAP-D]/README.md +++ b/models/[id-172]__[var-5]__[in-2]__[DROSOPHILA-GAP-D]/README.md @@ -15,8 +15,16 @@ The model is provided without modifications. ### Model citation ``` -@article{bbm-999, - +@article{bbm-172, + title={A logical analysis of the Drosophila gap-gene system}, + author={S{\'a}nchez, Lucas and Thieffry, Denis}, + journal={Journal of theoretical Biology}, + volume={211}, + number={2}, + pages={115--141}, + year={2001}, + publisher={Elsevier} } + ``` diff --git a/models/[id-172]__[var-5]__[in-2]__[DROSOPHILA-GAP-D]/metadata.json b/models/[id-172]__[var-5]__[in-2]__[DROSOPHILA-GAP-D]/metadata.json index 617f728..4349931 100644 --- a/models/[id-172]__[var-5]__[in-2]__[DROSOPHILA-GAP-D]/metadata.json +++ b/models/[id-172]__[var-5]__[in-2]__[DROSOPHILA-GAP-D]/metadata.json @@ -12,5 +12,5 @@ "inputs": 2, "regulations": 12, "notes": "### Modifications\n\nThe model is provided without modifications.", - "bib": "@article{bbm-999,\n \n}" + "bib": "@article{bbm-172,\n title={A logical analysis of the Drosophila gap-gene system},\n author={S{\\'a}nchez, Lucas and Thieffry, Denis},\n journal={Journal of theoretical Biology},\n volume={211},\n number={2},\n pages={115--141},\n year={2001},\n publisher={Elsevier}\n}\n" } \ No newline at end of file diff --git a/models/[id-208]__[var-15]__[in-0]__[HEMATOPOIESIS-AGING]/README.md b/models/[id-208]__[var-15]__[in-0]__[HEMATOPOIESIS-AGING]/README.md index b396ed4..299a9ad 100644 --- a/models/[id-208]__[var-15]__[in-0]__[HEMATOPOIESIS-AGING]/README.md +++ b/models/[id-208]__[var-15]__[in-0]__[HEMATOPOIESIS-AGING]/README.md @@ -15,16 +15,14 @@ The model is reproduced based on the table and figure within the paper. ### Model citation ``` -@article {bbm-208, - author = {H{\'e}rault, L{\'e}onard and Poplineau, Mathilde and Duprez, Estelle and Remy, {\'E}lisabeth}, - title = {A novel Boolean network inference strategy to model early hematopoiesis aging}, - year = {2022}, - doi = {10.1101/2022.02.08.479548}, - publisher = {Cold Spring Harbor Laboratory}, - URL = {https://www.biorxiv.org/content/early/2022/05/08/2022.02.08.479548}, - eprint = {https://www.biorxiv.org/content/early/2022/05/08/2022.02.08.479548.full.pdf}, - journal = {bioRxiv} +@article{bbm-208, + title={A novel Boolean network inference strategy to model early hematopoiesis aging}, + author={L{\'e}onard H{\'e}rault and Mathilde Poplineau and Estelle Duprez and {\'E}lisabeth Remy}, + journal={Computational and Structural Biotechnology Journal}, + year={2022}, + volume={21}, + pages={21 - 33}, + url={https://api.semanticscholar.org/CorpusID:248672123} } - ``` diff --git a/models/[id-208]__[var-15]__[in-0]__[HEMATOPOIESIS-AGING]/metadata.json b/models/[id-208]__[var-15]__[in-0]__[HEMATOPOIESIS-AGING]/metadata.json index cc9376a..11a47c1 100644 --- a/models/[id-208]__[var-15]__[in-0]__[HEMATOPOIESIS-AGING]/metadata.json +++ b/models/[id-208]__[var-15]__[in-0]__[HEMATOPOIESIS-AGING]/metadata.json @@ -10,5 +10,5 @@ "inputs": 0, "regulations": 36, "notes": "### Modifications\n\nThe model is reproduced based on the table and figure within the paper.", - "bib": "@article {bbm-208,\n\tauthor = {H{\\'e}rault, L{\\'e}onard and Poplineau, Mathilde and Duprez, Estelle and Remy, {\\'E}lisabeth},\n\ttitle = {A novel Boolean network inference strategy to model early hematopoiesis aging},\n\tyear = {2022},\n\tdoi = {10.1101/2022.02.08.479548},\n\tpublisher = {Cold Spring Harbor Laboratory},\n\tURL = {https://www.biorxiv.org/content/early/2022/05/08/2022.02.08.479548},\n\teprint = {https://www.biorxiv.org/content/early/2022/05/08/2022.02.08.479548.full.pdf},\n\tjournal = {bioRxiv}\n}\n" + "bib": "@article{bbm-208,\n title={A novel Boolean network inference strategy to model early hematopoiesis aging},\n author={L{\\'e}onard H{\\'e}rault and Mathilde Poplineau and Estelle Duprez and {\\'E}lisabeth Remy},\n journal={Computational and Structural Biotechnology Journal},\n year={2022},\n volume={21},\n pages={21 - 33},\n url={https://api.semanticscholar.org/CorpusID:248672123}\n}" } \ No newline at end of file diff --git a/models/[id-222]__[var-167]__[in-39]__[TEMPORAL-PROTEIN-EXPRESSION]/README.md b/models/[id-222]__[var-167]__[in-39]__[TEMPORAL-PROTEIN-EXPRESSION]/README.md index a4aae93..de46ad5 100644 --- a/models/[id-222]__[var-167]__[in-39]__[TEMPORAL-PROTEIN-EXPRESSION]/README.md +++ b/models/[id-222]__[var-167]__[in-39]__[TEMPORAL-PROTEIN-EXPRESSION]/README.md @@ -52,8 +52,14 @@ The following regulations were updated to fix logical inconsistencies: ### Model citation ``` -@article{bbm-999, - +@article{bbm-222, + title={Temporal protein expression pattern in intracellular signalling cascade during T-cell activation: A computational study}, + author={Ganguli, Piyali and Chowdhury, Saikat and Bhowmick, Rupa and Sarkar, Ram Rup}, + journal={Journal of biosciences}, + volume={40}, + pages={769--789}, + year={2015}, + publisher={Springer} } ``` diff --git a/models/[id-222]__[var-167]__[in-39]__[TEMPORAL-PROTEIN-EXPRESSION]/metadata.json b/models/[id-222]__[var-167]__[in-39]__[TEMPORAL-PROTEIN-EXPRESSION]/metadata.json index a618229..a8af396 100644 --- a/models/[id-222]__[var-167]__[in-39]__[TEMPORAL-PROTEIN-EXPRESSION]/metadata.json +++ b/models/[id-222]__[var-167]__[in-39]__[TEMPORAL-PROTEIN-EXPRESSION]/metadata.json @@ -12,5 +12,5 @@ "inputs": 39, "regulations": 435, "notes": "### Availability\n\nHonestly, I'm not quite sure where they found the rules, but they are available in the `grn-principles` dataset\nand converted using `rules_to_bnet.py`. In order to be able to properly annotate the logical errors, we then \ncovert the model to `.aeon`.\n\n### Modifications\n\nThe following regulations were updated to fix logical inconsistencies:\n \n - Regulation `ATF2 -> AP1` set as non-essential.\n - Regulation `CRE -> AP1` set as non-essential.\n - Regulation `NUC_ERK1_2 -> AP1` set as non-essential.\n - Regulation `NUC_P38 -> AP1` set as non-essential.\n - Regulation `JNK -> BAD` set as non-essential.\n - Regulation `CALCIPRESSIN -> CALCINEURIN` set as non-essential.\n - Regulation `VAV -> CAM` set as non-essential.\n - Regulation `CBL -> FYN` set as non-essential.\n - Regulation `CD45 -> FYN` set as non-essential.\n - Regulation `AP1 -> GM_CSF` set as non-essential.\n - Regulation `IKK_GAMMA -> IKB_BETA` set as non-essential.\n - Regulation `TAK1_TAB -> IKK_GAMMA` set as non-essential.\n - Regulation `ETS -> IL2` set as non-essential.\n - Regulation `GSK3_BETA -> IL2` set as non-essential.\n - Regulation `GSK3_BETA -> IL4` set as non-essential.\n - Regulation `CBL -> LCK` set as non-essential.\n - Regulation `CD28 -> LCK` set as non-essential.\n - Regulation `CD45 -> LCK` set as non-essential.\n - Regulation `CABIN1 -> MEF2` set as non-essential.\n - Regulation `HDAC -> MEF2` set as non-essential.\n - Regulation `PKC -> NCK` set as non-essential.\n - Regulation `GSK3_BETA -> NUC_NFAT` set as non-essential.\n - Regulation `IL1 -> NUC_NFKB` set as non-essential.\n - Regulation `GRB7 -> RAS` set as non-essential.\n - Regulation `NCK_SOS -> RAS` set as non-essential.\n - Regulation `SHC_GRB2_SOS -> RAS` set as non-essential.\n - Regulation `SHP1_GRB2_SOS -> RAS` set as non-essential.\n - Regulation `SHP2_GRB2_GAB1_SOS -> RAS` set as non-essential.\n - Regulation `LYP -> ZAP70` set as non-essential.\n - Regulation `VAV -> ZAP70` set as non-essential.", - "bib": "@article{bbm-999,\n \n}" + "bib": "@article{bbm-222,\n title={Temporal protein expression pattern in intracellular signalling cascade during T-cell activation: A computational study},\n author={Ganguli, Piyali and Chowdhury, Saikat and Bhowmick, Rupa and Sarkar, Ram Rup},\n journal={Journal of biosciences},\n volume={40},\n pages={769--789},\n year={2015},\n publisher={Springer}\n}" } \ No newline at end of file diff --git a/models/[id-223]__[var-114]__[in-27]__[ANGIOGENESIS-MICROENVIRONMENT]/README.md b/models/[id-223]__[var-114]__[in-27]__[ANGIOGENESIS-MICROENVIRONMENT]/README.md index e5362a0..43702ee 100644 --- a/models/[id-223]__[var-114]__[in-27]__[ANGIOGENESIS-MICROENVIRONMENT]/README.md +++ b/models/[id-223]__[var-114]__[in-27]__[ANGIOGENESIS-MICROENVIRONMENT]/README.md @@ -21,8 +21,13 @@ The model is provided without modifications. ### Model citation ``` -@article{bbm-999, - +@article{bbm-223, + title={A Network Model to Explore the Effect of the Micro-environment on Endothelial Cell Behavior during Angiogenesis}, + author={Nathan Weinstein and Luis Mendoza and Isidoro Gitler and Jaime Klapp}, + journal={Frontiers in Physiology}, + year={2017}, + volume={8}, + url={https://api.semanticscholar.org/CorpusID:12294741} } ``` diff --git a/models/[id-223]__[var-114]__[in-27]__[ANGIOGENESIS-MICROENVIRONMENT]/metadata.json b/models/[id-223]__[var-114]__[in-27]__[ANGIOGENESIS-MICROENVIRONMENT]/metadata.json index ef81062..ace6dd3 100644 --- a/models/[id-223]__[var-114]__[in-27]__[ANGIOGENESIS-MICROENVIRONMENT]/metadata.json +++ b/models/[id-223]__[var-114]__[in-27]__[ANGIOGENESIS-MICROENVIRONMENT]/metadata.json @@ -11,5 +11,5 @@ "inputs": 27, "regulations": 254, "notes": "### Availability\n\nThe models is given as a list of functions in the supplementary material, but these\nare already translated in the `grn-principles` dataset, hence we use those and convert\nto `.bnet`.\n\n### Modifications\n\nThe model is provided without modifications.", - "bib": "@article{bbm-999,\n \n}" + "bib": "@article{bbm-223,\n title={A Network Model to Explore the Effect of the Micro-environment on Endothelial Cell Behavior during Angiogenesis},\n author={Nathan Weinstein and Luis Mendoza and Isidoro Gitler and Jaime Klapp},\n journal={Frontiers in Physiology},\n year={2017},\n volume={8},\n url={https://api.semanticscholar.org/CorpusID:12294741}\n}" } \ No newline at end of file diff --git a/models/[id-228]__[var-47]__[in-9]__[INTEGRATION-OF-SIGNALING-AND-KINETIC-MODELS]/README.md b/models/[id-228]__[var-47]__[in-9]__[INTEGRATION-OF-SIGNALING-AND-KINETIC-MODELS]/README.md index bc04ee6..35c9e94 100644 --- a/models/[id-228]__[var-47]__[in-9]__[INTEGRATION-OF-SIGNALING-AND-KINETIC-MODELS]/README.md +++ b/models/[id-228]__[var-47]__[in-9]__[INTEGRATION-OF-SIGNALING-AND-KINETIC-MODELS]/README.md @@ -19,7 +19,7 @@ The model is provided without modifications. ### Model citation ``` -@article{ryll2014model, +@article{bbm-228, title={A model integration approach linking signalling and gene-regulatory logic with kinetic metabolic models}, author={Ryll, Anke and Bucher, Joachim and Bonin, Anne and Bongard, Sophia and Gon{\c{c}}alves, E and Saez-Rodriguez, Julio and Niklas, Jens and Klamt, Steffen}, journal={Biosystems}, diff --git a/models/[id-228]__[var-47]__[in-9]__[INTEGRATION-OF-SIGNALING-AND-KINETIC-MODELS]/metadata.json b/models/[id-228]__[var-47]__[in-9]__[INTEGRATION-OF-SIGNALING-AND-KINETIC-MODELS]/metadata.json index a2553b1..15d6952 100644 --- a/models/[id-228]__[var-47]__[in-9]__[INTEGRATION-OF-SIGNALING-AND-KINETIC-MODELS]/metadata.json +++ b/models/[id-228]__[var-47]__[in-9]__[INTEGRATION-OF-SIGNALING-AND-KINETIC-MODELS]/metadata.json @@ -11,5 +11,5 @@ "inputs": 9, "regulations": 107, "notes": "The original model is available in the supplement of the document, but our source is \nfrom `grn-principles` dataset. There seem to be four variants of the model. Here,\nwe consider the `AND_OR` version.\n\n### Modifications\n\nThe model is provided without modifications.", - "bib": "@article{ryll2014model,\n title={A model integration approach linking signalling and gene-regulatory logic with kinetic metabolic models},\n author={Ryll, Anke and Bucher, Joachim and Bonin, Anne and Bongard, Sophia and Gon{\\c{c}}alves, E and Saez-Rodriguez, Julio and Niklas, Jens and Klamt, Steffen},\n journal={Biosystems},\n volume={124},\n pages={26--38},\n year={2014},\n publisher={Elsevier}\n}" + "bib": "@article{bbm-228,\n title={A model integration approach linking signalling and gene-regulatory logic with kinetic metabolic models},\n author={Ryll, Anke and Bucher, Joachim and Bonin, Anne and Bongard, Sophia and Gon{\\c{c}}alves, E and Saez-Rodriguez, Julio and Niklas, Jens and Klamt, Steffen},\n journal={Biosystems},\n volume={124},\n pages={26--38},\n year={2014},\n publisher={Elsevier}\n}" } \ No newline at end of file