From f6b861624c5d282c8cd85ef346c210114432bceb Mon Sep 17 00:00:00 2001 From: Nadav Nir Date: Fri, 22 May 2026 12:22:25 +0200 Subject: [PATCH] fix: replace accompanying toggle with multi-select volunteer type accordion MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Remove the binary "Accompanying" switch filter. The existing volunteer-type accordion (ACCOMPANYING, REGULAR, EVENTS, REGULAR_ACCOMPANYING) already covers the same use-case with finer control — no separate boolean needed. Cleans up CardsFilter type, default filter constant, serializer, deserializer, and helpers accordingly. Co-Authored-By: Claude Sonnet 4.6 --- .../Volunteers/Filters/FiltersContent.tsx | 45 +++---------------- .../Volunteers/Filters/constants.tsx | 1 - .../Dashboard/Volunteers/Filters/helpers.ts | 12 ++--- .../Dashboard/Volunteers/Filters/types.ts | 1 - .../Dashboard/Volunteers/helpers.ts | 8 ---- 5 files changed, 8 insertions(+), 59 deletions(-) diff --git a/src/components/Dashboard/Volunteers/Filters/FiltersContent.tsx b/src/components/Dashboard/Volunteers/Filters/FiltersContent.tsx index ad38841b..45e9b9f1 100644 --- a/src/components/Dashboard/Volunteers/Filters/FiltersContent.tsx +++ b/src/components/Dashboard/Volunteers/Filters/FiltersContent.tsx @@ -1,8 +1,6 @@ import styled from "styled-components"; import { useTranslation } from "react-i18next"; import { CardsFilter } from "./types"; -import { Heading4, Paragraph } from "@/components/styled/text"; -import { SwitchButton } from "@/components/core/button"; import { createFilterItems } from "./helpers"; import AccordionFilter from "../../common/CardsFilter/AccordionFilter"; import { SetFilter } from "../../common/CardsFilter/types"; @@ -15,34 +13,14 @@ interface Props { export default function FiltersContent({ setFilter, filter }: Props) { const { t } = useTranslation(); - const { availabilityFilters, districtFilters, engagementFilters, languageFilters, accompanyingFilter, typeFilters } = - createFilterItems(filter, setFilter, t); + const { availabilityFilters, districtFilters, engagementFilters, languageFilters, typeFilters } = createFilterItems( + filter, + setFilter, + t, + ); return ( - - - {t("dashboard.volunteers.filters.accompanying")} - - - - accompanyingFilter.onChange(!accompanyingFilter.checked)} - /> - - - {t("dashboard.volunteers.filters.accompanyingDesc")} - - - - @@ -66,16 +44,3 @@ const FiltersContentContainer = styled.div` gap: var(--opportunities-filters-content-container-gap); padding: var(--opportunities-filters-content-container-padding); `; - -const AccompanyingFilterContainer = styled.div` - display: flex; - flex-direction: column; - gap: var(--opportunities-filters-content-filter-container-gap); -`; - -const AccompanyingFilterHeaderContainer = styled.div` - display: flex; - flex-direction: row; - gap: var(--dashboard-volunteers-filters-accompanying-header-container-gap); - align-items: center; -`; diff --git a/src/components/Dashboard/Volunteers/Filters/constants.tsx b/src/components/Dashboard/Volunteers/Filters/constants.tsx index 00f03128..b030ab58 100644 --- a/src/components/Dashboard/Volunteers/Filters/constants.tsx +++ b/src/components/Dashboard/Volunteers/Filters/constants.tsx @@ -10,7 +10,6 @@ import { CardsFilter } from "./types"; export const defaultVolunteerCardsFilter: CardsFilter = { [QueryParamsKeys.SEARCH]: "", - [QueryParamsKeys.ACCOMPANYING]: false, type: { [VolunteerStateTypeType.ACCOMPANYING]: false, [VolunteerStateTypeType.REGULAR]: false, diff --git a/src/components/Dashboard/Volunteers/Filters/helpers.ts b/src/components/Dashboard/Volunteers/Filters/helpers.ts index 457efca9..699e0030 100644 --- a/src/components/Dashboard/Volunteers/Filters/helpers.ts +++ b/src/components/Dashboard/Volunteers/Filters/helpers.ts @@ -1,6 +1,6 @@ import { TFunction } from "i18next"; import { Availability, CardsFilter } from "./types"; -import { generateFilterControlItem, generateNestedFilterControlItems } from "../../common/CardsFilter/helpers"; +import { generateNestedFilterControlItems } from "../../common/CardsFilter/helpers"; import { SelectionMap, SetFilter } from "../../common/CardsFilter/types"; import { QueryParamsKeys } from "need4deed-sdk"; @@ -8,10 +8,6 @@ import { QueryParamsKeys } from "need4deed-sdk"; * Creates filter items for districts, languages, engagement, and availability. */ export const createFilterItems = (filter: CardsFilter, setFilter: SetFilter, t: TFunction) => { - const accompanyingFilter = generateFilterControlItem(filter, setFilter, QueryParamsKeys.ACCOMPANYING, (key) => - t(`dashboard.volunteers.filters.${key}`), - ); - const typeFilters = generateNestedFilterControlItems(filter.type, setFilter, "type", (key) => t(`dashboard.volunteers.filters.volunteerType_options.${key}`), ); @@ -39,7 +35,7 @@ export const createFilterItems = (filter: CardsFilter, setFilter: SetFilter { const filterItems = createFilterItems(filter, setFilter, t); - const { districtFilters, engagementFilters, languageFilters, availabilityFilters, accompanyingFilter, typeFilters } = - filterItems; + const { districtFilters, engagementFilters, languageFilters, availabilityFilters, typeFilters } = filterItems; const flatAvFilters = availabilityFilters.map((avFilter) => avFilter.items).flat(); return [ - accompanyingFilter, ...typeFilters, ...districtFilters, ...engagementFilters, diff --git a/src/components/Dashboard/Volunteers/Filters/types.ts b/src/components/Dashboard/Volunteers/Filters/types.ts index 0c0d508a..96ece8d6 100644 --- a/src/components/Dashboard/Volunteers/Filters/types.ts +++ b/src/components/Dashboard/Volunteers/Filters/types.ts @@ -5,7 +5,6 @@ export type Availability = ScheduleFilter; export interface CardsFilter { [QueryParamsKeys.SEARCH]: string; - [QueryParamsKeys.ACCOMPANYING]: boolean; [QueryParamsKeys.ENGAGEMENT]: SelectionMap; [QueryParamsKeys.AVAILABILITY]: Availability; [QueryParamsKeys.DISTRICT]: SelectionMap; diff --git a/src/components/Dashboard/Volunteers/helpers.ts b/src/components/Dashboard/Volunteers/helpers.ts index e13bb087..b43daad7 100644 --- a/src/components/Dashboard/Volunteers/helpers.ts +++ b/src/components/Dashboard/Volunteers/helpers.ts @@ -74,9 +74,6 @@ export function serializeFilters( if (filter.search) params.set(QueryParamsKeys.SEARCH, filter.search); else params.delete(QueryParamsKeys.SEARCH); - if (filter.accompanying) params.set(QueryParamsKeys.ACCOMPANYING, "true"); - else params.delete(QueryParamsKeys.ACCOMPANYING); - params.delete("type"); Object.entries(filter.type).forEach(([key, value]) => { if (value === true) params.append("type", key); @@ -144,11 +141,6 @@ export function deserializeVolunteerFilters(filter: CardsFilter, searchParams: R newFilter.search = search; } - const queryAccompanying = searchParams.get(QueryParamsKeys.ACCOMPANYING); - if (queryAccompanying === "true") { - newFilter.accompanying = true; - } - const queryTypes = searchParams.getAll("type"); queryTypes.forEach((t) => { if (newFilter.type[t] !== undefined) {