diff --git a/api/package-lock.json b/api/package-lock.json
index 1c1f481..87981ac 100644
--- a/api/package-lock.json
+++ b/api/package-lock.json
@@ -5,7 +5,7 @@
"requires": true,
"packages": {
"": {
- "name": "web-extracts-api",
+ "name": "link-warden-api",
"version": "1.0.0",
"license": "MIT",
"dependencies": {
diff --git a/package-lock.json b/package-lock.json
index fbf19f0..192a061 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -5,7 +5,7 @@
"requires": true,
"packages": {
"": {
- "name": "web-extracts",
+ "name": "link-warden",
"version": "0.1.0",
"dependencies": {
"@testing-library/jest-dom": "^5.16.4",
diff --git a/src/App.js b/src/App.js
index e39e318..9a2f7f0 100644
--- a/src/App.js
+++ b/src/App.js
@@ -7,16 +7,16 @@ import Filters from './componets/Filters';
import Sort from './componets/Sort';
function App() {
- const [data, setData] = useState([]);
- const [newBox, setNewBox] = useState(false);
- const [filterBox, setFilterBox] = useState(false);
- const [sortBox, setSortBox] = useState(false);
- const [searchQuery, setSearchQuery] = useState('');
- const [numberOfResults, setNumberOfResults] = useState(0);
- const [nameChecked, setNameChecked] = useState(true);
- const [descriptionChecked, setDescriptionChecked] = useState(true);
- const [tagsChecked, setTagsChecked] = useState(true);
- const [sort, setSort] = useState('Date');
+ const [data, setData] = useState([]),
+ [newBox, setNewBox] = useState(false),
+ [filterBox, setFilterBox] = useState(false),
+ [sortBox, setSortBox] = useState(false),
+ [searchQuery, setSearchQuery] = useState(''),
+ [numberOfResults, setNumberOfResults] = useState(0),
+ [nameChecked, setNameChecked] = useState(true),
+ [descriptionChecked, setDescriptionChecked] = useState(true),
+ [tagsChecked, setTagsChecked] = useState(true),
+ [sortBy, setSortBy] = useState('Date (Newest first)');
function handleNameCheckbox() {
setNameChecked(!nameChecked);
@@ -45,6 +45,10 @@ function App() {
function search(e) {
setSearchQuery(e.target.value);
}
+
+ function sortByFunc(e) {
+ setSortBy(e)
+ }
const filteredData = data.filter((e) => {
const name = e.name.toLowerCase().includes(searchQuery.toLowerCase());
@@ -65,12 +69,58 @@ function App() {
else if(descriptionChecked) { return title }
});
+ function sortList(data = data, sortBy = 'Default') {
+ let sortedData = data;
+ if(sortBy === 'Date (Oldest first)') {
+ sortedData.sort((a, b) => { return b-a });
+ } else if(sortBy === 'Name (A-Z)') {
+ sortedData.sort(function(a, b){
+ const A = a.name.toLowerCase(), B = b.name.toLowerCase();
+ if (A < B)
+ return -1;
+ if (A > B)
+ return 1;
+ return 0;
+ });
+ } else if(sortBy === 'Name (Z-A)') {
+ sortedData.sort(function(a, b){
+ const A = a.name.toLowerCase(), B = b.name.toLowerCase();
+ if (A > B)
+ return -1;
+ if (A < B)
+ return 1;
+ return 0;
+ });
+ } else if(sortBy === 'Title (A-Z)') {
+ sortedData.sort(function(a, b){
+ const A = a.title.toLowerCase(), B = b.title.toLowerCase();
+ if (A < B)
+ return -1;
+ if (A > B)
+ return 1;
+ return 0;
+ });
+ } else if(sortBy === 'Title (Z-A)') {
+ sortedData.sort(function(a, b){
+ const A = a.title.toLowerCase(), B = b.title.toLowerCase();
+ if (A > B)
+ return -1;
+ if (A < B)
+ return 1;
+ return 0;
+ });
+ }
+
+ return sortedData;
+ }
+
async function fetchData() {
const address = config.api.address + ":" + config.api.port;
const res = await fetch(address + '/api');
const resJSON = await res.json();
- const Data = resJSON.sort((a, b) => { return b-a }); // <-- SORT IT!
- setData(Data);
+ const data = resJSON.sort((a, b) => { return b-a });
+ const sortedData = sortList(data, sortBy);
+ setData(sortedData);
}
const concatTags = () => {
@@ -87,7 +137,7 @@ function App() {
useEffect(() => {
fetchData();
- }, []);
+ }, [sortBy]);
useEffect(() => {
setNumberOfResults(filteredData.length);
@@ -107,8 +157,8 @@ function App() {
{sortBox ? : null}
{filterBox ?
-
+
>
diff --git a/src/componets/Sort.js b/src/componets/Sort.js
index 1c6e3e9..7c8be1b 100644
--- a/src/componets/Sort.js
+++ b/src/componets/Sort.js
@@ -1,23 +1,27 @@
import '../styles/Sort.css'
-const Sort = ({ onExit }) => {
+const Sort = ({ sortBy, onExit }) => {
function abort(e) {
if (e.target.className === "sort-overlay") {
onExit();
}
}
+ function sort(e) {
+ sortBy(e.target.value);
+ }
+
return (
<>
-