in translate/src/modules/search/components/FiltersPanel.tsx [230:335]
export function FiltersPanelDialog({
authorsData,
filters: { authors, extras, statuses, tags },
project,
resource,
selectedFiltersCount,
tagsData,
timeRange,
timeRangeData,
setTimeRange,
onApplyFilter,
onApplyFilters,
onResetFilters,
onToggleFilter,
onDiscard,
}: FiltersPanelProps): React.ReactElement<'div'> {
const stats = useStats();
const ref = React.useRef(null);
useOnDiscard(ref, onDiscard);
return (
<div className='menu' ref={ref}>
<ul>
<Localized id='search-FiltersPanel--heading-status'>
<li className='horizontal-separator'>TRANSLATION STATUS</li>
</Localized>
{FILTERS_STATUS.map((status, i) => (
<StatusFilter
key={i}
onSelect={() => onApplyFilter(status.slug, 'statuses')}
onToggle={() => onToggleFilter(status.slug, 'statuses')}
selected={statuses.includes(status.slug)}
stats={stats}
status={status}
/>
))}
{tagsData.length > 0 && resource === 'all-resources' ? (
<>
<Localized id='search-FiltersPanel--heading-tags'>
<li className='horizontal-separator'>TAGS</li>
</Localized>
{tagsData.map((tag, i) => (
<TagFilter
key={i}
onSelect={() => onApplyFilter(tag.slug, 'tags')}
selected={tags.includes(tag.slug)}
tag={tag}
/>
))}
</>
) : null}
<Localized id='search-FiltersPanel--heading-extra'>
<li className='horizontal-separator'>EXTRA FILTERS</li>
</Localized>
{FILTERS_EXTRA.map((extra, i) => (
<ExtraFilter
extra={extra}
key={i}
onSelect={() => onApplyFilter(extra.slug, 'extras')}
onToggle={() => onToggleFilter(extra.slug, 'extras')}
selected={extras.includes(extra.slug)}
/>
))}
<TimeRangeFilter
project={project}
timeRange={timeRange}
timeRangeData={timeRangeData}
applySingleFilter={onApplyFilter}
setTimeRange={setTimeRange}
/>
{authorsData.length > 0 && project !== 'all-projects' ? (
<>
<Localized id='search-FiltersPanel--heading-authors'>
<li className='horizontal-separator'>TRANSLATION AUTHORS</li>
</Localized>
{authorsData.map((author, i) => (
<AuthorFilter
author={author}
key={i}
onSelect={() => onApplyFilter(author.email, 'authors')}
onToggle={() => onToggleFilter(author.email, 'authors')}
selected={authors.includes(author.email)}
/>
))}
</>
) : null}
</ul>
{selectedFiltersCount > 0 ? (
<FilterToolbar
count={selectedFiltersCount}
onApply={onApplyFilters}
onReset={onResetFilters}
/>
) : null}
</div>
);
}