Hide filters on xs, Button to show

This commit is contained in:
Bernt Christian Egeland 2021-12-12 00:58:21 +01:00
parent fc3b94cdf3
commit 4e3f07f337
2 changed files with 56 additions and 37 deletions

View File

@ -59,7 +59,7 @@ export const DateFilterOptions = [
export default function DatePicker({ export default function DatePicker({
helpText, helpText,
keyboardType = 'date', keyboardType = 'text',
inputRef, inputRef,
label, label,
leadingIcon: LeadingIcon, leadingIcon: LeadingIcon,
@ -123,10 +123,15 @@ export default function DatePicker({
className="flex space-x-2 items-center" className="flex space-x-2 items-center"
data-testid={`label-${label.toLowerCase().replace(/[^\w]+/g, '_')}`} data-testid={`label-${label.toLowerCase().replace(/[^\w]+/g, '_')}`}
> >
{LeadingIcon ? (
<div className="w-10 h-full">
<LeadingIcon />
</div>
) : null}
<div className="relative w-full"> <div className="relative w-full">
<input <input
className="h-6 mt-6 w-full bg-transparent focus:outline-none focus:ring-0" className="h-6 mt-6 w-full bg-transparent focus:outline-none focus:ring-0"
type="text" type={keyboardType}
readOnly readOnly
onBlur={handleBlur} onBlur={handleBlur}
onFocus={handleFocus} onFocus={handleFocus}
@ -151,6 +156,7 @@ export default function DatePicker({
) : null} ) : null}
</label> </label>
</div> </div>
{helpText ? <div className="text-xs pl-3 pt-1">{helpText}</div> : null}
</div> </div>
); );
} }

View File

@ -1,10 +1,12 @@
import { h } from 'preact'; import { h } from 'preact';
import Filter from './filter'; import Filter from './filter';
import { useConfig } from '../../../api'; import { useConfig } from '../../../api';
import { useMemo } from 'preact/hooks'; import { useMemo, useState } from 'preact/hooks';
import { DateFilterOptions } from '../../../components/DatePicker'; import { DateFilterOptions } from '../../../components/DatePicker';
import Button from '../../../components/Button';
const Filters = ({ onChange, searchParams }) => { const Filters = ({ onChange, searchParams }) => {
const [viewFilters, setViewFilters] = useState(false);
const { data } = useConfig(); const { data } = useConfig();
const cameras = useMemo(() => Object.keys(data.cameras), [data]); const cameras = useMemo(() => Object.keys(data.cameras), [data]);
@ -27,41 +29,52 @@ const Filters = ({ onChange, searchParams }) => {
}, data.objects?.track || []) }, data.objects?.track || [])
.filter((value, i, self) => self.indexOf(value) === i); .filter((value, i, self) => self.indexOf(value) === i);
}, [data]); }, [data]);
return ( return (
<div className="flex space-x-4"> <div>
<Filter <Button
type="dropdown" onClick={() => setViewFilters(!viewFilters)}
onChange={onChange} className="block xs:hidden w-full mb-4 text-center"
options={['all', ...cameras]} type="text"
paramName={['camera']} >
label="Camera" Filters
searchParams={searchParams} </Button>
/> <div className={`xs:flex space-y-1 xs:space-y-0 xs:space-x-4 ${viewFilters ? 'flex-col' : 'hidden'}`}>
<Filter <Filter
type="dropdown" type="dropdown"
onChange={onChange} onChange={onChange}
options={['all', ...zones]} options={['all', ...cameras]}
paramName={['zone']} paramName={['camera']}
label="Zone" label="Camera"
searchParams={searchParams} searchParams={searchParams}
/> />
<Filter
type="dropdown" <Filter
onChange={onChange} type="dropdown"
options={['all', ...labels]} onChange={onChange}
paramName={['label']} options={['all', ...zones]}
label="Label" paramName={['zone']}
searchParams={searchParams} label="Zone"
/> searchParams={searchParams}
<Filter />
type="datepicker"
onChange={onChange} <Filter
options={DateFilterOptions} type="dropdown"
paramName={['before', 'after']} onChange={onChange}
label="DatePicker" options={['all', ...labels]}
searchParams={searchParams} paramName={['label']}
/> label="Label"
searchParams={searchParams}
/>
<Filter
type="datepicker"
onChange={onChange}
options={DateFilterOptions}
paramName={['before', 'after']}
label="DatePicker"
searchParams={searchParams}
/>
</div>
</div> </div>
); );
}; };