Skip to content

Commit

Permalink
reduce compare operation in item filter
Browse files Browse the repository at this point in the history
Signed-off-by: GRBurst <[email protected]>
  • Loading branch information
GRBurst committed May 26, 2024
1 parent 2f1d30d commit 494b020
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 10 deletions.
14 changes: 9 additions & 5 deletions frontend/src/components/FilterableJobList.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import sanitizeHtml from "sanitize-html";

import { Item } from "../models/Item";
import { TagFilter, TagFilters, tagFilterToString } from "../models/TagFilter";
import { filterByRegexAny, flatFilters, itemFilter } from "../utils/hn";
import { filterByRegexAny, flatFilters, itemFilter, itemPrefilter } from "../utils/hn";
import { TagFilterDrawer } from "./TagFilterBar";
import { AppConfig } from "../utils/config";
import { JobStatistics } from "./JobStatistics";
Expand Down Expand Up @@ -161,14 +161,18 @@ const FilterableJobList = ({
};

console.debug("ItemList: ", items);
const filteredItems = items !== undefined ? itemFilter(
const cleansedItems = items !== undefined ? itemPrefilter(
items,
flatActive,
searchFilter,
parentItemId,
userId
) : undefined;

const filteredItems = cleansedItems !== undefined ? itemFilter(
cleansedItems,
flatActive,
searchFilter,
) : undefined;

console.debug("FilteredItemList: ", filteredItems);

return (
Expand Down Expand Up @@ -200,7 +204,7 @@ const FilterableJobList = ({
onSearch={(needle: string | undefined) => setSearchFilter(needle)}
/>
<JobStatistics
allItems={items ?? []}
allItems={cleansedItems ?? []}
items={filteredItems ?? []}
activeFilters={flatActive}
/>
Expand Down
19 changes: 14 additions & 5 deletions frontend/src/utils/hn.ts
Original file line number Diff line number Diff line change
Expand Up @@ -49,10 +49,9 @@ const filterByRegex = (haystack: string | undefined, patterns: RegExp[]): boolea
patterns
.reduce<boolean>((acc, pattern) => acc && (haystack !== undefined && haystack.search(pattern) > -1), true)

const itemFilter = (items: Item[], tagFilters: TagFilter[], searchFilter: string | undefined = undefined, parentFilter: number | undefined = undefined, userFilter: string | undefined = undefined, filterFlagged: boolean = true) => {
const itemPrefilter = (items: Item[], parentFilter: number | undefined = undefined, userFilter: string | undefined = undefined, filterFlagged: boolean = true) => {
try {
return items
.filter(item => item.id == item.id || parentFilter == parentFilter || filterFlagged == filterFlagged || tagFilters == tagFilters || searchFilter == searchFilter || true)
.filter(item =>
item.text !== undefined
&& item.text !== null
Expand All @@ -64,15 +63,25 @@ const itemFilter = (items: Item[], tagFilters: TagFilter[], searchFilter: string
&& (parentFilter !== undefined && parentFilter !== null ? item.parent == parentFilter : true)
&& (userFilter !== undefined && userFilter !== null ? item.by == userFilter : true)
)
.filter(item => filterByRegex(item.text, tagFilters.map(tag => tag.pattern)))
.filter(item => searchFilter !== undefined ? item.text?.includes(searchFilter) : true)
.reverse()
} catch (e) {
console.warn(e)
return []
}
}

const itemFilter = (items: Item[], tagFilters: TagFilter[], searchFilter: string | undefined = undefined) => {
try {
return items
.filter(item =>
filterByRegex(item.text, tagFilters.map(tag => tag.pattern))
&& searchFilter !== undefined ? item.text?.includes(searchFilter) : true)
} catch (e) {
console.warn(e)
return []
}
}

const flatFilters = (filters: Map<string, TagFilters>): TagFilter[] => Array.from(filters.values()).map(filterSet => Array.from(filterSet)).flat()

export { filterByRegex, filterByRegexAny, flatFilters, getItemFromId, getItemsFromIds, getItemsFromQueryId, getItemsFromQueryIds, getKidItemsFromIds, itemFilter };
export { filterByRegex, filterByRegexAny, flatFilters, getItemFromId, getItemsFromIds, getItemsFromQueryId, getItemsFromQueryIds, getKidItemsFromIds, itemPrefilter, itemFilter };

0 comments on commit 494b020

Please sign in to comment.