Skip to content

Commit bd902ff

Browse files
authored
feat: [ENG-2794] more obvious clear filters UI (#4454)
* show clear filter when filters clear all requests * clearer filter button * glass' * fix
1 parent b354ce7 commit bd902ff

File tree

3 files changed

+38
-3
lines changed

3 files changed

+38
-3
lines changed

web/components/shared/themed/table/themedTable.tsx

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,8 @@ interface ThemedTableProps<T extends { id?: string; subRows?: T[] }> {
8484
hideHeader?: boolean;
8585
noDataCTA?: React.ReactNode;
8686
onDataSet?: () => void;
87+
showClearFilters?: boolean;
88+
onClearFilters?: () => void;
8789
savedFilters?: {
8890
filters?: OrganizationFilter[];
8991
currentFilter?: string;
@@ -127,6 +129,7 @@ export default function ThemedTable<T extends { id?: string; subRows?: T[] }>(
127129
props: ThemedTableProps<T>,
128130
) {
129131
const {
132+
id,
130133
defaultData,
131134
defaultColumns,
132135
skeletonLoading,
@@ -135,6 +138,8 @@ export default function ThemedTable<T extends { id?: string; subRows?: T[] }>(
135138
sortable,
136139
onRowSelect,
137140
noDataCTA,
141+
showClearFilters = false,
142+
onClearFilters,
138143
checkboxMode = "never",
139144
children,
140145
onSelectAll,
@@ -224,6 +229,15 @@ export default function ThemedTable<T extends { id?: string; subRows?: T[] }>(
224229
<p className="text-xl font-semibold text-slate-900 dark:text-slate-100">
225230
No Data Found
226231
</p>
232+
{showClearFilters && onClearFilters && (
233+
<Button
234+
variant="outline"
235+
onClick={onClearFilters}
236+
className="text-slate-900 dark:text-slate-100"
237+
>
238+
Clear Filters
239+
</Button>
240+
)}
227241
{noDataCTA}
228242
</div>
229243
) : table.getVisibleFlatColumns().length === 0 ? (

web/components/templates/requests/RequestsPage.tsx

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import {
1616
TooltipTrigger,
1717
} from "@/components/ui/tooltip";
1818
import FilterASTButton from "@/filterAST/FilterASTButton";
19+
import { useFilterAST } from "@/filterAST/context/filterContext";
1920
import {
2021
HeliconeRequest,
2122
MappedLLMRequest,
@@ -138,6 +139,7 @@ export default function RequestsPage(props: RequestsPageV2Props) {
138139
const orgContext = useOrg();
139140
const router = useRouter();
140141
const searchParams = useSearchParams();
142+
const { store: filterStore, helpers: filterHelpers } = useFilterAST();
141143
const [drawerSize, setDrawerSize] = useLocalStorage(
142144
"request-drawer-size",
143145
initialRequestId ? 33 : 0,
@@ -360,6 +362,19 @@ export default function RequestsPage(props: RequestsPageV2Props) {
360362
);
361363
}, [requests, selectedIds]);
362364

365+
const hasActiveFilters = useMemo(() => {
366+
return filterStore.filter !== null && filterStore.getFilterNodeCount() > 0;
367+
}, [filterStore.filter, filterStore.getFilterNodeCount]);
368+
369+
const shouldShowClearFilters = useMemo(() => {
370+
return (
371+
shouldShowMockData === false &&
372+
requests.length === 0 &&
373+
!isDataLoading &&
374+
hasActiveFilters
375+
);
376+
}, [shouldShowMockData, requests.length, isDataLoading, hasActiveFilters]);
377+
363378
/* -------------------------------------------------------------------------- */
364379
/* CALLBACKS */
365380
/* -------------------------------------------------------------------------- */
@@ -730,6 +745,10 @@ export default function RequestsPage(props: RequestsPageV2Props) {
730745
selectedIds={selectedIds}
731746
// only for request page
732747
currentRow={selectedData}
748+
showClearFilters={shouldShowClearFilters}
749+
onClearFilters={() => {
750+
filterHelpers.clearFilter();
751+
}}
733752
>
734753
{selectMode && (
735754
<Row className="w-full items-center justify-between gap-5 bg-white p-5 dark:bg-black">

web/filterAST/FilterASTButton.tsx

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ export const FilterASTButton: React.FC<FilterASTButtonProps> = ({}) => {
3333
);
3434
}
3535

36+
const numFilters = store.getFilterNodeCount();
37+
3638
return (
3739
<Row>
3840
<Popover onOpenChange={setIsOpen} open={isOpen}>
@@ -60,14 +62,14 @@ export const FilterASTButton: React.FC<FilterASTButtonProps> = ({}) => {
6062
</Popover>
6163
{store.getFilterNodeCount() > 0 && (
6264
<Button
63-
variant="ghost"
65+
variant="glass"
6466
size="sm"
65-
className="gap-2"
67+
className="gap-2 ml-2"
6668
onClick={() => {
6769
store.clearActiveFilter();
6870
}}
6971
>
70-
Clear
72+
Clear {numFilters} filter{numFilters > 1 ? "s" : ""}
7173
</Button>
7274
)}
7375
</Row>

0 commit comments

Comments
 (0)