From 46c67395de6e9ada20f97d7121c526a0740aa686 Mon Sep 17 00:00:00 2001 From: Tapas Adhikary Date: Mon, 16 May 2022 11:40:04 +0530 Subject: [PATCH 1/3] =?UTF-8?q?=E2=9C=A8=20Added=20language=20as=20a=20fil?= =?UTF-8?q?ter=20criteria?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/common/home/Home.jsx | 1 + src/common/search/FilterPlays.jsx | 30 ++++++++++++++++++++-- src/common/search/hooks/useSearchFilter.js | 7 ++++- src/common/search/search-context.js | 3 ++- src/index.js | 1 + src/meta/play-meta-util.js | 18 +++++++++++++ 6 files changed, 56 insertions(+), 4 deletions(-) diff --git a/src/common/home/Home.jsx b/src/common/home/Home.jsx index 30e3b00130..8964b77a37 100644 --- a/src/common/home/Home.jsx +++ b/src/common/home/Home.jsx @@ -26,6 +26,7 @@ const Home = () => { level: "", tags: [], creator: "", + language: "" }); }, [data, setSearchTerm, searchTerm, setFilterQuery]); diff --git a/src/common/search/FilterPlays.jsx b/src/common/search/FilterPlays.jsx index 3489695a8f..85ec19705a 100644 --- a/src/common/search/FilterPlays.jsx +++ b/src/common/search/FilterPlays.jsx @@ -1,5 +1,5 @@ import { Modal } from "common"; -import { getAllCreators, getAllLevels, getAllTags } from "meta/play-meta-util"; +import { getAllCreators, getAllLevels, getAllTags, getAllLanguages } from "meta/play-meta-util"; import { useContext, useState } from "react"; import { useLocation, useNavigate } from "react-router-dom"; import { SearchContext } from "./search-context"; @@ -12,6 +12,7 @@ const FilterPlaysModalBody = ({ filterQuery, setFilterQuery }) => { const tags = getAllTags(); const labels = getAllLevels(); const creators = getAllCreators(); + const languages = getAllLanguages(); return ( <> @@ -66,6 +67,23 @@ const FilterPlaysModalBody = ({ filterQuery, setFilterQuery }) => { ))} +
+ + +
); }; @@ -80,8 +98,11 @@ const getAppliedFilter = (filterObject) => { filterObject.creator !== undefined && filterObject.creator.trim() !== "" ? 1 : 0; + const noOfLanguageApplied = + filterObject.language !== undefined && filterObject.language.trim() !== "" + ? 1 : 0; let totalTags = noOfLevelsApplied + - noOfcreatorsApplied; + noOfcreatorsApplied + noOfLanguageApplied; //if the appiled filter is an array form. Useful for handling multi filter @@ -104,6 +125,7 @@ const FilterPlays = () => { tags: [], labels: [], creators: [], + language: [], }); const [noOfAppliedFilter, setnoOfAppliedFilter] = useState(0); @@ -116,6 +138,7 @@ const FilterPlays = () => { creator: "", labels: [], creators: [], + language: [], }); setFilterQuery({ level: "", @@ -123,6 +146,7 @@ const FilterPlays = () => { creator: "", labels: [], creators: [], + language: [], }); setnoOfAppliedFilter(0); } @@ -132,11 +156,13 @@ const FilterPlays = () => { level: "", tags: [], creator: "", + language: "" }); setFilterQuery({ level: "", tags: [], creator: "", + language: "" }); } setnoOfAppliedFilter(0); diff --git a/src/common/search/hooks/useSearchFilter.js b/src/common/search/hooks/useSearchFilter.js index 56f8879561..369086935f 100644 --- a/src/common/search/hooks/useSearchFilter.js +++ b/src/common/search/hooks/useSearchFilter.js @@ -20,7 +20,7 @@ const useSearchFilter = () => { const filterPlays = (searchTerm, filterQuery) => { let filteredPlays = []; - const { level, tags, creator } = filterQuery; + const { level, tags, creator, language } = filterQuery; const searchedPlays = getPlaysOnSearch(searchTerm); @@ -35,6 +35,11 @@ const filterPlays = (searchTerm, filterQuery) => { filteredPlays = filteredPlays.filter(play => { return (play.tags.includes(tags[0]) || !tags[0]); }); + + filteredPlays = filteredPlays.filter(play => { + const lang = play.language || 'js'; + return (lang === language || !language); + }); return filteredPlays; diff --git a/src/common/search/search-context.js b/src/common/search/search-context.js index fc4d3a3ad0..048499695c 100644 --- a/src/common/search/search-context.js +++ b/src/common/search/search-context.js @@ -6,7 +6,8 @@ export const SearchContext = React.createContext({ filterQuery: { level: '', tags: [], - creator: '' + creator: '', + language: '' }, setSearchTerm: () => {}, setFilterQuery: () => {} diff --git a/src/index.js b/src/index.js index 0eba3eb35d..f650009342 100644 --- a/src/index.js +++ b/src/index.js @@ -11,6 +11,7 @@ const Index = () => { level: "", tags: [], creator: "", + language: "" }); const value = { searchTerm, setSearchTerm, filterQuery, setFilterQuery }; diff --git a/src/meta/play-meta-util.js b/src/meta/play-meta-util.js index 94f4f51bb6..995be29801 100644 --- a/src/meta/play-meta-util.js +++ b/src/meta/play-meta-util.js @@ -34,6 +34,13 @@ const getPlaysByCreator = creator => { }); } +const getPlaysByLanguage = language => { + return plays.filter(play => { + const lang = play.language || 'js'; + return lang === language; + }); +} + const getAllTags = () => { const tags = plays.reduce((acc, play) => { return acc.concat(play.tags.split(',')); @@ -59,6 +66,15 @@ const getAllLevels = () => { return Array.from(new Set([...levels])); } +const getAllLanguages = () => { + const languages = plays.reduce((acc, play) => { + const lang = play.language || 'js'; + return acc.concat(lang); + }, []); + + return Array.from(new Set([...languages])); +} + const getFeaturedPlays = () => { const featuredPlays = plays.filter(play => { return play.featured; @@ -72,9 +88,11 @@ export { getPlaysOnSearch, getPlaysByLevel, getPlaysByTags, + getPlaysByLanguage, getPlaysByCreator, getAllTags, getAllCreators, getAllLevels, + getAllLanguages, getFeaturedPlays }; From 442ad51502a2741840f395a697cd28df47d5c7ab Mon Sep 17 00:00:00 2001 From: Tapas Adhikary Date: Mon, 16 May 2022 12:57:39 +0530 Subject: [PATCH 2/3] =?UTF-8?q?=F0=9F=90=9B=20Simplified=20the=20filter=20?= =?UTF-8?q?context=20data?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/common/search/FilterPlays.jsx | 57 +++++++++++++------------------ 1 file changed, 23 insertions(+), 34 deletions(-) diff --git a/src/common/search/FilterPlays.jsx b/src/common/search/FilterPlays.jsx index 85ec19705a..26de3d90b3 100644 --- a/src/common/search/FilterPlays.jsx +++ b/src/common/search/FilterPlays.jsx @@ -10,7 +10,7 @@ import useBackListener from "common/routing/hooks/useBackListener"; const FilterPlaysModalBody = ({ filterQuery, setFilterQuery }) => { const tags = getAllTags(); - const labels = getAllLevels(); + const levels = getAllLevels(); const creators = getAllCreators(); const languages = getAllLanguages(); @@ -26,9 +26,9 @@ const FilterPlaysModalBody = ({ filterQuery, setFilterQuery }) => { value={filterQuery.level} > - {labels.map((label) => ( - ))} @@ -100,18 +100,11 @@ const getAppliedFilter = (filterObject) => { : 0; const noOfLanguageApplied = filterObject.language !== undefined && filterObject.language.trim() !== "" - ? 1 : 0; + ? 1 : 0; + const noOfTagsApplied = + filterObject?.tags?.length ? filterObject.tags.length : 0 let totalTags = noOfLevelsApplied + - noOfcreatorsApplied + noOfLanguageApplied; - - //if the appiled filter is an array form. Useful for handling multi filter - - if (filterObject?.tags || filterObject?.labels || filterObject?.creators) { - totalTags += - filterObject?.tags?.length ? filterObject.tags.length : 0 + - filterObject?.labels?.length ? filterObject.labels.length : 0 + - filterObject?.creators?.length ? filterObject.creators.length : 0; - } + noOfcreatorsApplied + noOfLanguageApplied + noOfTagsApplied; return totalTags; }; @@ -122,10 +115,10 @@ const FilterPlays = () => { const { setFilterQuery, filterQuery } = useContext(SearchContext); const [showModal, setShowModal] = useState(false); const [modifiedFilterQuery, setModifiedFilterQuery] = useState({ + level: '', tags: [], - labels: [], - creators: [], - language: [], + creator: '', + language: '' }); const [noOfAppliedFilter, setnoOfAppliedFilter] = useState(0); @@ -133,36 +126,32 @@ const FilterPlays = () => { if (action === "POP") { console.log("POP"); setModifiedFilterQuery({ - level: "", + level: '', tags: [], - creator: "", - labels: [], - creators: [], - language: [], + creator: '', + language: '' }); setFilterQuery({ - level: "", + level: '', tags: [], - creator: "", - labels: [], - creators: [], - language: [], + creator: '', + language: '' }); setnoOfAppliedFilter(0); } if (action === "PUSH") { console.log("PUSH"); setModifiedFilterQuery({ - level: "", + level: '', tags: [], - creator: "", - language: "" + creator: '', + language: '' }); setFilterQuery({ - level: "", + level: '', tags: [], - creator: "", - language: "" + creator: '', + language: '' }); } setnoOfAppliedFilter(0); From 0e21eb0d5f2a1bd5797c024ded97882084b56eab Mon Sep 17 00:00:00 2001 From: Tapas Adhikary Date: Mon, 16 May 2022 13:01:22 +0530 Subject: [PATCH 3/3] =?UTF-8?q?=E2=9C=A8=20Chaged=20the=20filter=20modal?= =?UTF-8?q?=20title?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/common/search/FilterPlays.jsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/common/search/FilterPlays.jsx b/src/common/search/FilterPlays.jsx index 26de3d90b3..406b352160 100644 --- a/src/common/search/FilterPlays.jsx +++ b/src/common/search/FilterPlays.jsx @@ -79,7 +79,7 @@ const FilterPlaysModalBody = ({ filterQuery, setFilterQuery }) => { {languages.map((language) => ( ))} @@ -171,7 +171,7 @@ const FilterPlays = () => { return (
setShowModal(false)} onSubmit={handleFilter} show={showModal}