diff --git a/src/components/manage/Blocks/FiltersBlock/View.jsx b/src/components/manage/Blocks/FiltersBlock/View.jsx index 632d8de..2e6ee5f 100644 --- a/src/components/manage/Blocks/FiltersBlock/View.jsx +++ b/src/components/manage/Blocks/FiltersBlock/View.jsx @@ -18,11 +18,12 @@ import { setQueryParam } from 'volto-datablocks/actions'; import { settings } from '~/config'; import _uniqueId from 'lodash/uniqueId'; import axios from 'axios'; +import Highlighter from 'react-highlight-words'; +import menuSVG from '@plone/volto/icons/menu-alt.svg'; import circlePlus from '@plone/volto/icons/circle-plus.svg'; import circleMinus from '@plone/volto/icons/circle-minus.svg'; import clear from '@plone/volto/icons/clear.svg'; -import Highlighter from 'react-highlight-words'; import './style.css'; let nrOfRequests = 0; @@ -59,6 +60,7 @@ const View = ({ content, ...props }) => { searchResultsActive: false, }); const [searchTerm, setSearchTerm] = useState(''); + const [sidebar, setSidebar] = useState(false); const searchContainer = useRef(null); const title = props.data.title?.value; @@ -404,7 +406,12 @@ const View = ({ content, ...props }) => { /* eslint-disable-next-line */ }, [JSON.stringify(state.filters), JSON.stringify(state.filtersMeta)]) - const changeFilter = (data, filter, position = 0) => { + const changeFilter = ( + data, + filter, + position = 0, + triggerQueryUpdate = false, + ) => { const newFilters = { ...state.filters }; if (!newFilters[filter.queryToSet]) newFilters[filter.queryToSet] = []; if (newFilters[filter.queryToSet]?.length >= position) { @@ -419,6 +426,13 @@ const View = ({ content, ...props }) => { ...state, filters: newFilters, }); + if (triggerQueryUpdate) { + props.setQueryParam({ + queryParam: { + [filter.queryToSet]: newFilters[filter.queryToSet], + }, + }); + } }; const updateFilters = () => { @@ -564,208 +578,256 @@ const View = ({ content, ...props }) => { }; return ( - setState({ ...state, open: false })} - onOpen={() => setState({ ...state, open: true })} - open={state.open} - trigger={} - > - - {/* eslint-disable-next-line */} - Advanced search and filter - setState({ ...state, open: false })} - color="red" - name={clear} - size="1em" - /> - - -
Search terms
-
+ <> + setState({ ...state, open: false })} + onOpen={() => setState({ ...state, open: true })} + open={state.open} + trigger={} + > + + {/* eslint-disable-next-line */} + Advanced search and filter + setState({ ...state, open: false })} + color="red" + name={clear} + size="1em" + /> + + +
Search terms
- {state.searchRadioButtons - ? state.searchRadioButtons.map(radioButton => { - return ( - { - setState({ - ...state, - searchResults: [], - searchType: radioButton.key, - }); - }} - /> - ); - }) - : ''} -
-
- { - autoComplete(data); - }} - /> - {state.searchResultsActive && state.searchResults.length ? ( -
- - {state.searchResults.map((result, index) => { +
+ {state.searchRadioButtons + ? state.searchRadioButtons.map(radioButton => { return ( - { + { setState({ ...state, - searchResultsActive: false, + searchResults: [], + searchType: radioButton.key, }); - setSearchTerm(result); }} - > - - + /> ); - })} - -
- ) : ( - '' - )} + }) + : ''} +
+
+ { + autoComplete(data); + }} + /> + {state.searchResultsActive && state.searchResults.length ? ( +
+ + {state.searchResults.map((result, index) => { + return ( + { + setState({ + ...state, + searchResultsActive: false, + }); + setSearchTerm(result); + }} + > + + + ); + })} + +
+ ) : ( + '' + )} +
-
- {state.filtersMeta && - state.filtersMetaOrder && - state.filtersMetaOrder.map(filterKey => { - return ( -
- {state.filtersMeta[filterKey]?.title ? ( -
{state.filtersMeta[filterKey].title}
- ) : ( - '' - )} - {state.filtersMeta[filterKey]?.filteringInputs?.length && - state.filtersMeta[filterKey].filteringInputs.map( - (input, index) => { - if (input.type === 'select') { - const options = state.filtersMeta[ - filterKey - ].options.filter(option => { - if ( - state.filters[ - state.filtersMeta[filterKey].queryToSet - ] && - !state.filters[ - state.filtersMeta[filterKey].queryToSet - ] - .filter((item, itemIndex) => index !== itemIndex) - .includes(option.value) - ) { + {state.filtersMeta && + state.filtersMetaOrder && + state.filtersMetaOrder.map(filterKey => { + return ( +
+ {state.filtersMeta[filterKey]?.title ? ( +
{state.filtersMeta[filterKey].title}
+ ) : ( + '' + )} + {state.filtersMeta[filterKey]?.filteringInputs?.length && + state.filtersMeta[filterKey].filteringInputs.map( + (input, index) => { + if (input.type === 'select') { + const options = state.filtersMeta[ + filterKey + ].options.filter(option => { + if ( + state.filters[ + state.filtersMeta[filterKey].queryToSet + ] && + !state.filters[ + state.filtersMeta[filterKey].queryToSet + ] + .filter( + (item, itemIndex) => index !== itemIndex, + ) + .includes(option.value) + ) { + return true; + } else if ( + state.filters[ + state.filtersMeta[filterKey].queryToSet + ] && + state.filters[ + state.filtersMeta[filterKey].queryToSet + ].includes(option.value) + ) { + return false; + } return true; - } else if ( - state.filters[ - state.filtersMeta[filterKey].queryToSet - ] && - state.filters[ + }); + const value = + state.filters?.[ state.filtersMeta[filterKey].queryToSet - ].includes(option.value) - ) { - return false; - } - return true; - }); - const value = - state.filters?.[ - state.filtersMeta[filterKey].queryToSet - ]?.[index]; - return ( -
- + changeFilter( + data, + state.filtersMeta[filterKey], + input.position, + ) + } + placeholder={ + state.filtersMeta[filterKey].placeholder + } + options={options} + value={value} + /> + {state.filtersMeta[filterKey].filteringInputs + .length - + 1 === + index ? ( +
- removeInput( + addNewInput( filterKey, - state.filtersMeta[filterKey], - index, + 'select', + index + 1, ) } color="red" - name={circleMinus} + name={circlePlus} size="2em" /> - ) : ( - '' - )} -
- ) : ( - '' - )} -
- ); - } - return ''; - }, - )} -
- ); - })} - - -
+ ) : ( + '' + )} + + ); + } + return ''; + }, + )} + + ); + })} +
+ + + + +
+
+ - - - +
+
+
+
Dynamic filter
+
+
+
Reporting year
+
+