From b60b2fe37665a5c0aa86062cf56b766e0d6afdf2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cmkczarkowski=E2=80=9D?= Date: Wed, 21 Aug 2024 19:48:45 +0200 Subject: [PATCH 1/5] feat: provide an example solution for advanced-filtering challenge --- src/advanced-filtering/src/App.tsx | 12 ++++++------ .../src/components/LogFilter.tsx | 10 +++++----- .../src/services/logProcessing.ts | 19 +++++++++++-------- src/advanced-filtering/src/types/index.ts | 13 ++++++------- 4 files changed, 28 insertions(+), 26 deletions(-) diff --git a/src/advanced-filtering/src/App.tsx b/src/advanced-filtering/src/App.tsx index 74c67d1..4bc168c 100644 --- a/src/advanced-filtering/src/App.tsx +++ b/src/advanced-filtering/src/App.tsx @@ -9,14 +9,14 @@ import { LogSourceMap, } from "./constants"; import { + advancedFilter, advancedSort, NO_FILTER, - simpleLogFilter, } from "./services/logProcessing"; import { + FilterCriteria, LogEntry, LogLevel, - SimpleLogFilterCriteria, SortCriteria, UpdateLogFilterFunction, } from "./types"; @@ -29,9 +29,9 @@ function LogDashboard({logs}: LogDashboardProps) { const [sortCriteria, setSortCriteria] = useState>({ timestamp: {direction: "desc"}, }); - const [filterCriteria, setFilterCriteria] = useState( - {} - ); + const [filterCriteria, setFilterCriteria] = useState< + FilterCriteria + >({}); const compareLogLevels = (a: LogLevel, b: LogLevel) => LogLevelOrder[a] - LogLevelOrder[b]; @@ -58,7 +58,7 @@ function LogDashboard({logs}: LogDashboardProps) { }; const filteredAndSortedLogs = useMemo(() => { - const filteredLogs = simpleLogFilter(logs, filterCriteria); + const filteredLogs = advancedFilter(logs, filterCriteria); return advancedSort(filteredLogs, sortCriteria); }, [logs, filterCriteria, sortCriteria]); diff --git a/src/advanced-filtering/src/components/LogFilter.tsx b/src/advanced-filtering/src/components/LogFilter.tsx index 09454a1..09e4ae4 100644 --- a/src/advanced-filtering/src/components/LogFilter.tsx +++ b/src/advanced-filtering/src/components/LogFilter.tsx @@ -1,6 +1,6 @@ import { - SimpleFilterableLogValue, - SimpleLogFilterKey, + FilterableLogValue, + LogFilterKey, UpdateLogFilterFunction, } from "../types"; @@ -18,8 +18,8 @@ const SelectArrow = () => ( interface LogFilterProps { updateFilter: UpdateLogFilterFunction; - filterKey: SimpleLogFilterKey; - options: readonly SimpleFilterableLogValue[]; + filterKey: LogFilterKey; + options: readonly FilterableLogValue[]; allLabel: string; } @@ -32,7 +32,7 @@ export const LogFilter = ({
- updateFilter(filterKey, e.target.value as FilterableLogValue | "") + updateFilter(filterKey, e.target.value as FilterableLogValue | '') } - className='w-full px-4 py-2 pr-10 text-gray-700 bg-white border rounded-lg appearance-none focus:outline-none focus:ring-2 focus:ring-blue-500' + className="w-full px-4 py-2 pr-10 text-gray-700 bg-white border rounded-lg appearance-none focus:outline-none focus:ring-2 focus:ring-blue-500" > - + {options.map((option) => (