From 8fe9aef69131f122a91ca3af85e93e6c8e557d9a Mon Sep 17 00:00:00 2001 From: Iveta Date: Wed, 29 Jan 2025 09:17:27 -0500 Subject: [PATCH] Filter dropdown styled --- src/components/DataTable/index.tsx | 71 ++++++++++++++--------- src/components/DataTable/styles.scss | 44 +++++++++++++- src/query/external/useSEContracStorage.ts | 1 - 3 files changed, 86 insertions(+), 30 deletions(-) diff --git a/src/components/DataTable/index.tsx b/src/components/DataTable/index.tsx index f07dfc8c..674dcb62 100644 --- a/src/components/DataTable/index.tsx +++ b/src/components/DataTable/index.tsx @@ -1,4 +1,4 @@ -import { useEffect, useState } from "react"; +import { Fragment, useEffect, useState } from "react"; import { Button, Card, @@ -126,8 +126,18 @@ export const DataTable = ({ setIsUpdating(true); }; + const closeFilterDropdown = () => { + setVisibleFilters(undefined); + // Clear selections that weren't applied + setSelectedFilters({ ...appliedFilters }); + }; + const toggleFilterDropdown = (headerId: FilterCols) => { - setVisibleFilters(visibleFilters === headerId ? undefined : headerId); + if (visibleFilters === headerId) { + closeFilterDropdown(); + } else { + setVisibleFilters(headerId); + } }; const paginateData = (data: DataTableCell[][]): DataTableCell[][] => { @@ -176,21 +186,19 @@ export const DataTable = ({ { - setVisibleFilters(undefined); - }} + onClose={closeFilterDropdown} triggerDataAttribute="filter" >
Filter by
-
- {filters.map((f) => { - const id = `filter-${headerId}-${f}`; + <> + {filters.map((f, idx) => { + const id = `filter-${headerId}-${f}-${idx}`; let currentFilters = selectedFilters[headerId] || []; return (
-
); })} -
-
+ + + -
+
); @@ -250,14 +265,14 @@ export const DataTable = ({ }; const renderFilterBadges = () => { - return Object.entries(appliedFilters).map((af) => { + return Object.entries(appliedFilters).map((af, afIdx) => { const [id, filters] = af; return ( - <> - {filters.map((f) => ( + + {filters.map((f, fIdx) => (
{f} @@ -278,7 +293,7 @@ export const DataTable = ({
))} - +
); }); }; @@ -311,8 +326,8 @@ export const DataTable = ({ > - {tableHeaders.map((th) => ( - + {tableHeaders.map((th, idx) => ( +
{th.value} diff --git a/src/components/DataTable/styles.scss b/src/components/DataTable/styles.scss index f4bdbd8f..f0d368bc 100644 --- a/src/components/DataTable/styles.scss +++ b/src/components/DataTable/styles.scss @@ -140,14 +140,56 @@ top: 85%; left: pxToRem(4px); - // TODO: style &__container { + display: flex; + flex-direction: column; + gap: pxToRem(4px); } &__title { + font-size: pxToRem(14px); + line-height: pxToRem(20px); + font-weight: var(--sds-fw-medium); + color: var(--sds-clr-gray-11); + padding: pxToRem(6px) pxToRem(8px); } &__filter { + display: flex; + flex-direction: row; + align-items: center; + justify-content: space-between; + padding: pxToRem(6px) pxToRem(8px); + background-color: transparent; + transition: background-color var(--sds-anim-transition-default); + border-radius: pxToRem(4px); + cursor: pointer; + + .Label__wrapper { + width: 100%; + } + + .Label { + color: var(--sds-clr-gray-12); + width: 100%; + cursor: pointer; + } + + @media (hover: hover) { + &:hover { + background-color: var(--sds-clr-gray-04); + } + } + + &:has(input[type="checkbox"]:checked) { + background-color: var(--sds-clr-gray-04); + } + } + + &__buttons { + .Button { + flex: 1; + } } } diff --git a/src/query/external/useSEContracStorage.ts b/src/query/external/useSEContracStorage.ts index 2bae55e7..b5db121e 100644 --- a/src/query/external/useSEContracStorage.ts +++ b/src/query/external/useSEContracStorage.ts @@ -65,7 +65,6 @@ export const useSEContractStorage = ({ await fetchData(lastRecord?.paging_token); } - // TODO: check max entries for smooth UX return allRecords; } catch (e: any) { throw `Something went wrong. ${e}`;