Skip to content

Commit

Permalink
[#536] make filtering and sorting actions reusable
Browse files Browse the repository at this point in the history
  • Loading branch information
j-dyczka committed Mar 26, 2024
1 parent 7f9e84c commit 8380cb6
Show file tree
Hide file tree
Showing 8 changed files with 67 additions and 29 deletions.
21 changes: 18 additions & 3 deletions govtool/frontend/src/components/molecules/DataActionsBar.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { Dispatch, FC, SetStateAction } from "react";
import { Box, InputBase } from "@mui/material";
import Search from "@mui/icons-material/Search";

import { GovernanceActionsFilters, GovernanceActionsSorting } from "@molecules";
import { DataActionsFilters, DataActionsSorting } from "@molecules";
import { OrderActionsChip } from "./OrderActionsChip";
import { theme } from "@/theme";

Expand All @@ -12,7 +12,12 @@ type DataActionsBarProps = {
chosenSorting: string;
closeFilters?: () => void;
closeSorts: () => void;
filterOptions?: {
key: string;
label: string;
}[];
filtersOpen?: boolean;
filtersTitle?: string;
isFiltering?: boolean;
searchText: string;
setChosenFilters?: Dispatch<SetStateAction<string[]>>;
Expand All @@ -22,6 +27,10 @@ type DataActionsBarProps = {
setSortOpen: Dispatch<SetStateAction<boolean>>;
sortingActive: boolean;
sortOpen: boolean;
sortOptions?: {
key: string;
label: string;
}[];
};

export const DataActionsBar: FC<DataActionsBarProps> = ({ ...props }) => {
Expand All @@ -31,7 +40,9 @@ export const DataActionsBar: FC<DataActionsBarProps> = ({ ...props }) => {
chosenSorting,
closeFilters = () => {},
closeSorts,
filterOptions = [],
filtersOpen,
filtersTitle,
isFiltering = true,
searchText,
setChosenFilters = () => {},
Expand All @@ -41,6 +52,7 @@ export const DataActionsBar: FC<DataActionsBarProps> = ({ ...props }) => {
setSortOpen,
sortingActive,
sortOpen,
sortOptions = [],
} = props;
const {
palette: { boxShadow2 },
Expand Down Expand Up @@ -87,17 +99,20 @@ export const DataActionsBar: FC<DataActionsBarProps> = ({ ...props }) => {
sortOpen={sortOpen}
>
{filtersOpen && (
<GovernanceActionsFilters
<DataActionsFilters
chosenFilters={chosenFilters}
setChosenFilters={setChosenFilters}
closeFilters={closeFilters}
options={filterOptions}
title={filtersTitle}
/>
)}
{sortOpen && (
<GovernanceActionsSorting
<DataActionsSorting
chosenSorting={chosenSorting}
setChosenSorting={setChosenSorting}
closeSorts={closeSorts}
options={sortOptions}
/>
)}
</OrderActionsChip>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,19 +7,25 @@ import {
Typography,
} from "@mui/material";

import { GOVERNANCE_ACTIONS_FILTERS } from "@consts";
import { useOnClickOutside, useScreenDimension, useTranslation } from "@hooks";
import { useOnClickOutside, useScreenDimension } from "@hooks";

interface Props {
chosenFilters: string[];
setChosenFilters: Dispatch<SetStateAction<string[]>>;
closeFilters: () => void;
options: {
key: string;
label: string;
}[];
title?: string;
}

export const GovernanceActionsFilters = ({
export const DataActionsFilters = ({
chosenFilters,
setChosenFilters,
closeFilters,
options,
title,
}: Props) => {
const handleFilterChange = useCallback(
(e: React.ChangeEvent<HTMLInputElement>) => {
Expand All @@ -37,7 +43,6 @@ export const GovernanceActionsFilters = ({
[chosenFilters, setChosenFilters],
);

const { t } = useTranslation();
const { isMobile, screenWidth } = useScreenDimension();

const wrapperRef = useRef<HTMLDivElement>(null);
Expand All @@ -60,17 +65,19 @@ export const GovernanceActionsFilters = ({
}}
ref={wrapperRef}
>
<FormLabel
sx={{
fontSize: 14,
fontWeight: 500,
color: "#9792B5",
paddingX: "20px",
}}
>
{t("govActions.filterTitle")}
</FormLabel>
{GOVERNANCE_ACTIONS_FILTERS.map((item) => (
{title && (
<FormLabel
sx={{
fontSize: 14,
fontWeight: 500,
color: "#9792B5",
paddingX: "20px",
}}
>
{title}
</FormLabel>
)}
{options.map((item) => (
<Box
key={item.key}
paddingX="20px"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,19 +8,23 @@ import {
Typography,
} from "@mui/material";

import { GOVERNANCE_ACTIONS_SORTING } from "@consts";
import { useTranslation, useOnClickOutside } from "@hooks";

interface Props {
chosenSorting: string;
setChosenSorting: Dispatch<SetStateAction<string>>;
closeSorts: () => void;
options: {
key: string;
label: string;
}[];
}

export const GovernanceActionsSorting = ({
export const DataActionsSorting = ({
chosenSorting,
setChosenSorting,
closeSorts,
options,
}: Props) => {
const { t } = useTranslation();

Expand Down Expand Up @@ -63,7 +67,7 @@ export const GovernanceActionsSorting = ({
setChosenSorting(e.target.value);
}}
>
{GOVERNANCE_ACTIONS_SORTING.map((item) => (
{options.map((item) => (
<FormControlLabel
sx={[
{
Expand Down
4 changes: 2 additions & 2 deletions govtool/frontend/src/components/molecules/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ export * from "./CenteredBoxBottomButtons";
export * from "./CenteredBoxPageWrapper";
export * from "./DashboardActionCard";
export * from "./DataActionsBar";
export * from "./DataActionsFilters";
export * from "./DataActionsSorting";
export * from "./DataMissingInfoBox";
export * from "./DRepInfoCard";
export * from "./Field";
Expand All @@ -19,8 +21,6 @@ export * from "./GovernanceActionDetailsCardVotes";
export * from "./GovernanceActionDetailsCardHeader";
export * from "./GovernanceActionDetailsCardOnChainData";
export * from "./GovernanceActionsDatesBox";
export * from "./GovernanceActionsFilters";
export * from "./GovernanceActionsSorting";
export * from "./GovernanceVotedOnCard";
export * from "./LinkWithIcon";
export * from "./OrderActionsChip";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { useState, useEffect } from "react";
import { Box, CircularProgress, Tab, Tabs, styled } from "@mui/material";
import { useLocation } from "react-router-dom";

import { GOVERNANCE_ACTIONS_FILTERS } from "@consts";
import { GOVERNANCE_ACTIONS_FILTERS, GOVERNANCE_ACTIONS_SORTING } from "@consts";
import { useCardano } from "@context";
import {
useDataActionsBar,
Expand Down Expand Up @@ -103,7 +103,12 @@ export const DashboardGovernanceActions = () => {
flexDirection="column"
>
<>
<DataActionsBar {...dataActionsBarProps} />
<DataActionsBar
{...dataActionsBarProps}
filterOptions={GOVERNANCE_ACTIONS_FILTERS}
filtersTitle={t("govActions.filterTitle")}
sortOptions={GOVERNANCE_ACTIONS_SORTING}
/>
{!proposals || !voter || isEnableLoading || isProposalsLoading ? (
<Box
alignItems="center"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { generatePath, useNavigate, useParams } from "react-router-dom";
import { Box, CircularProgress, Link } from "@mui/material";

import { Background, Typography } from "@atoms";
import { ICONS, PATHS } from "@consts";
import { GOVERNANCE_ACTIONS_SORTING, ICONS, PATHS } from "@consts";
import { useCardano } from "@context";
import { DataActionsBar, GovernanceActionCard } from "@molecules";
import {
Expand Down Expand Up @@ -95,6 +95,7 @@ export const DashboardGovernanceActionsCategory = () => {
<DataActionsBar
{...dataActionsBarProps}
isFiltering={false}
sortOptions={GOVERNANCE_ACTIONS_SORTING}
/>
<Typography
variant="title2"
Expand Down
9 changes: 7 additions & 2 deletions govtool/frontend/src/pages/GovernanceActions.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { useNavigate } from "react-router-dom";
import { Box, CircularProgress, Divider } from "@mui/material";

import { Background, ScrollToManage, Typography } from "@atoms";
import { GOVERNANCE_ACTIONS_FILTERS, PATHS } from "@consts";
import { GOVERNANCE_ACTIONS_FILTERS, GOVERNANCE_ACTIONS_SORTING, PATHS } from "@consts";
import { useCardano } from "@context";
import {
useDataActionsBar,
Expand Down Expand Up @@ -69,7 +69,12 @@ export const GovernanceActions = () => {
/>
)}
<Box flex={1} px={pagePadding}>
<DataActionsBar {...dataActionsBarProps} />
<DataActionsBar
{...dataActionsBarProps}
filterOptions={GOVERNANCE_ACTIONS_FILTERS}
filtersTitle={t("govActions.filterTitle")}
sortOptions={GOVERNANCE_ACTIONS_SORTING}
/>
<Box height={isMobile ? 60 : 80} />
{!proposals || isProposalsLoading ? (
<Box
Expand Down
3 changes: 2 additions & 1 deletion govtool/frontend/src/pages/GovernanceActionsCategory.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { useNavigate, useParams } from "react-router-dom";
import { Box, CircularProgress, Link } from "@mui/material";

import { Background, Typography } from "@atoms";
import { ICONS, PATHS } from "@consts";
import { GOVERNANCE_ACTIONS_SORTING, ICONS, PATHS } from "@consts";
import { useCardano } from "@context";
import { DataActionsBar, GovernanceActionCard } from "@molecules";
import { Footer, TopNav } from "@organisms";
Expand Down Expand Up @@ -105,6 +105,7 @@ export const GovernanceActionsCategory = () => {
<DataActionsBar
{...dataActionsBarProps}
isFiltering={false}
sortOptions={GOVERNANCE_ACTIONS_SORTING}
/>
<Typography
variant="title2"
Expand Down

0 comments on commit 8380cb6

Please sign in to comment.