From 1876742b5cb6b4dfb980022ad49315f74ebb72e8 Mon Sep 17 00:00:00 2001 From: Skycat1983 Date: Tue, 5 Aug 2025 11:47:48 +0200 Subject: [PATCH 01/30] =?UTF-8?q?=F0=9F=94=A5=20Remove=20unused=20Land404?= =?UTF-8?q?=20component?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/Land404.tsx | 7 ------- 1 file changed, 7 deletions(-) delete mode 100644 src/pages/Land404.tsx diff --git a/src/pages/Land404.tsx b/src/pages/Land404.tsx deleted file mode 100644 index 290cb10b..00000000 --- a/src/pages/Land404.tsx +++ /dev/null @@ -1,7 +0,0 @@ -import Home from "./Home"; - -function Land404() { - return ; -} - -export default Land404; From dd5f025609861edb4e1b2e49882d5711fb0e8bfd Mon Sep 17 00:00:00 2001 From: Skycat1983 Date: Wed, 6 Aug 2025 11:10:45 +0200 Subject: [PATCH 02/30] =?UTF-8?q?=F0=9F=94=A5=20Remove=20unused=20Arrow=20?= =?UTF-8?q?component?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/svg/Arrow.tsx | 29 ----------------------------- 1 file changed, 29 deletions(-) delete mode 100644 src/components/svg/Arrow.tsx diff --git a/src/components/svg/Arrow.tsx b/src/components/svg/Arrow.tsx deleted file mode 100644 index 7d0e0027..00000000 --- a/src/components/svg/Arrow.tsx +++ /dev/null @@ -1,29 +0,0 @@ -/* eslint-disable react/function-component-definition */ -/* eslint-disable react/jsx-props-no-spreading */ -import React, { FC } from "react"; - -interface Props extends React.SVGProps { - direction: "up" | "down"; - isFilled?: boolean; - color: string; -} - -const Arrow: FC = ({ direction, color, ...props }: Props) => { - const d = - direction === "up" ? "M8 4L14 12L2 12L8 4Z" : "M8 12L2 4L14 4L8 12Z"; - - return ( - - - - ); -}; - -export default Arrow; From cb84c24bc13244f704a9a4abd9128109823ce554 Mon Sep 17 00:00:00 2001 From: Skycat1983 Date: Wed, 6 Aug 2025 11:12:34 +0200 Subject: [PATCH 03/30] =?UTF-8?q?=F0=9F=94=A5=20Remove=20unused=20Categori?= =?UTF-8?q?esContainerMobile=20component=20from=20styled=20containers?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/styled/containers.tsx | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/src/components/styled/containers.tsx b/src/components/styled/containers.tsx index 27a79552..f913bb97 100644 --- a/src/components/styled/containers.tsx +++ b/src/components/styled/containers.tsx @@ -52,18 +52,6 @@ export const CategoriesContainer = styled.div.attrs( gap: var(--homepage-volunteering-categories-grid-gap); `; -// TODO: delete this container after paginated cards container -export const CategoriesContainerMobile = styled.div.attrs( - (props) => ({ - id: props.id, - }), -)` - display: flex; - flex-direction: column; - gap: 20px; - background-color: var(--color-magnolia); -`; - export const ArrowsButtonContainer = styled.div.attrs( (props) => ({ id: props.id, From 79fc39cb56ca4ff42981c384137c97fe9fb3dc91 Mon Sep 17 00:00:00 2001 From: Skycat1983 Date: Wed, 6 Aug 2025 11:13:30 +0200 Subject: [PATCH 04/30] =?UTF-8?q?=F0=9F=94=A5=20Remove=20unused=20Voluntee?= =?UTF-8?q?ringOpportunitiesContainer=20component=20from=20styled=20contai?= =?UTF-8?q?ners?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/styled/containers.tsx | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/src/components/styled/containers.tsx b/src/components/styled/containers.tsx index f913bb97..09adfa0f 100644 --- a/src/components/styled/containers.tsx +++ b/src/components/styled/containers.tsx @@ -97,20 +97,6 @@ export const IconDiv = styled.div` } `; -export const VolunteeringOpportunitiesContainer = styled.div.attrs( - (props) => ({ - id: props.id, - }), -)` - display: flex; - flex-direction: column; - background-color: var(--color-orchid); - margin: 0 auto; // Center it horizontally - padding: var(--homepage-section-container-padding); - gap: var(--homepage-section-container-gap); - max-width: var(--max-width-section); -`; - export const OpportunitiesContainer = styled.div.attrs( (props) => ({ id: props.id, From 40b3dd33960fc72f8d0cf1d09d4c3219cf774787 Mon Sep 17 00:00:00 2001 From: Skycat1983 Date: Wed, 6 Aug 2025 11:14:30 +0200 Subject: [PATCH 05/30] =?UTF-8?q?=F0=9F=94=A5=20Remove=20unused=20Voluntee?= =?UTF-8?q?ringCategoriesContainer=20component=20from=20styled=20container?= =?UTF-8?q?s?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/styled/containers.tsx | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/src/components/styled/containers.tsx b/src/components/styled/containers.tsx index 09adfa0f..fb37d612 100644 --- a/src/components/styled/containers.tsx +++ b/src/components/styled/containers.tsx @@ -128,20 +128,6 @@ export const BaseCard = styled.div` border-radius: var(--card-border-radius); `; -export const VolunteeringCategoriesContainer = styled.div.attrs( - (props) => ({ - id: props.id, - }), -)` - display: flex; - flex-direction: column; - background-color: var(--color-magnolia); - margin: 0 auto; // Center it horizontally - padding: var(--homepage-section-container-padding); - gap: var(--homepage-section-container-gap); - max-width: var(--max-width-section); -`; - export const BaseFooterContainer = styled.div.attrs( (props) => ({ id: props.id, From c6c7a7f5ee04b1b3f0768740bda4864e5d9b4870 Mon Sep 17 00:00:00 2001 From: Skycat1983 Date: Fri, 8 Aug 2025 10:33:57 +0200 Subject: [PATCH 06/30] =?UTF-8?q?=F0=9F=94=A5=20Remove=20unused=20Event831?= =?UTF-8?q?=20component?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Event/Event831.tsx | 66 ------------------------------- 1 file changed, 66 deletions(-) delete mode 100644 src/components/Event/Event831.tsx diff --git a/src/components/Event/Event831.tsx b/src/components/Event/Event831.tsx deleted file mode 100644 index 7697e403..00000000 --- a/src/components/Event/Event831.tsx +++ /dev/null @@ -1,66 +0,0 @@ -import { useTranslation } from "react-i18next"; -import { getImageUrl } from "../../utils/index"; -import "./index.css"; - -const registrationHref = - "https://docs.google.com/forms/d/e/1FAIpQLSe5wRZ0U0wEb_QvRbfuGzM196jRIVflUBC_273wSk2Dl3Gcnw/viewform"; - -export default function Event831() { - const { t } = useTranslation(); - const sommerFestPicStyle = { - backgroundImage: `url(${getImageUrl("event831.webp")})`, - backgroundSize: "cover", - backgroundRepeat: "no-repeat", - width: "100%", - height: "unset", - }; - - return ( -
-

{t("event831.header")}

-
-
-
-

{t("event831.paras.para1")}

-

{t("event831.paras.para2")}

-

- {t("event831.paras.para3.morning.timeslot")} -

-

{t("event831.paras.para3.morning.title1")}

-

- {t("event831.paras.para3.day.timeslot")} -

-

{t("event831.paras.para3.day.title1")}

-

{t("event831.paras.para3.day.title2")}

-

{t("event831.paras.para3.day.title3")}

-

- {t("event831.paras.para3.afternoon.timeslot")} -

-

{t("event831.paras.para3.afternoon.title1")}

-

{t("event831.paras.para3.afternoon.title2")}

-

{t("event831.paras.para3.afternoon.title3")}

-

- {t("event831.paras.para3.all.timeslot")} -

-

{t("event831.paras.para3.all.title1")}

-

{t("event831.paras.para3.all.title2")}

- -

{t("event831.paras.para4")}

-
-
-
-

{t("event831.rsvp.invite")}

-

- {t("event831.rsvp.registration")} -

-
-

{t("event831.final.feelFree")}

- -

{t("event831.final.team")}

-
- ); -} From 2ad02174341d0ff9708d7ebe2926c01de156c36a Mon Sep 17 00:00:00 2001 From: Skycat1983 Date: Fri, 8 Aug 2025 10:36:57 +0200 Subject: [PATCH 07/30] =?UTF-8?q?=F0=9F=94=A5=20Remove=20unused=20EventAcc?= =?UTF-8?q?ompanying=20component?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Event/EventAccompanying.tsx | 93 ---------------------- 1 file changed, 93 deletions(-) delete mode 100644 src/components/Event/EventAccompanying.tsx diff --git a/src/components/Event/EventAccompanying.tsx b/src/components/Event/EventAccompanying.tsx deleted file mode 100644 index 08dd5d0a..00000000 --- a/src/components/Event/EventAccompanying.tsx +++ /dev/null @@ -1,93 +0,0 @@ -import { useTranslation } from "react-i18next"; - -import { getImageUrl } from "../../utils/index"; -import "./index.css"; - -const registrationHref = - "https://docs.google.com/forms/d/e/1FAIpQLSfGnZt8_sT299T8J70ivSjFzJxmD57b8ZBXLX_fZiPKB4fqvg/viewform?usp=dialog"; - -export default function EventAccompanying() { - const { t } = useTranslation(); - const volunteerPicStyle = { - backgroundImage: `url(${getImageUrl("assistance.webp")})`, - }; - - return ( -
-

{t("eventAccompanying.greeting.title")}

-
-
-
{t("eventAccompanying.greeting.invite1")}
-
- {t("eventAccompanying.greeting.host")} -
-
15.05.2025
-
17:00
-
Elsenstraße 87
-
E12435 Berlin
- -
-
-
- - {t("eventAccompanying.greeting.registration1")} - -
-
-
-
-
-
- {t("eventAccompanying.main.title1")} -
-

{t("eventAccompanying.main.para11")}

-

{t("eventAccompanying.main.para12")}

-

{t("eventAccompanying.main.para13")}

-

{t("eventAccompanying.main.para14")}

-
- {t("eventAccompanying.main.title2")} -
-
    -
  • {t("eventAccompanying.main.para21")}
  • -
  • {t("eventAccompanying.main.para22")}
  • -
  • {t("eventAccompanying.main.para23")}
  • -
  • {t("eventAccompanying.main.para24")}
  • -
  • {t("eventAccompanying.main.para25")}
  • -
  • {t("eventAccompanying.main.para26")}
  • -
-
-
- -
- - {t("eventAccompanying.greeting.registration2")} - -
- -
-
{t("eventAccompanying.outro.para1")}
-
{t("eventAccompanying.outro.para2")}
- -
- - -
-
- Elsenstr. 87 -
- 12435 Berlin -
- {t("eventAccompanying.outro.address.floor")} -
- {t("eventAccompanying.outro.address.lead")} -
- ); -} From c4088acc121bb0062a2e49a87eb05fce6a90c17d Mon Sep 17 00:00:00 2001 From: Skycat1983 Date: Fri, 8 Aug 2025 10:39:37 +0200 Subject: [PATCH 08/30] =?UTF-8?q?=F0=9F=94=A5=20Remove=20unused=20EventCoo?= =?UTF-8?q?kingMeet=20component?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Event/EventCookingMeet.tsx | 80 ----------------------- 1 file changed, 80 deletions(-) delete mode 100644 src/components/Event/EventCookingMeet.tsx diff --git a/src/components/Event/EventCookingMeet.tsx b/src/components/Event/EventCookingMeet.tsx deleted file mode 100644 index 5f51ee6a..00000000 --- a/src/components/Event/EventCookingMeet.tsx +++ /dev/null @@ -1,80 +0,0 @@ -import { useTranslation } from "react-i18next"; - -import { getImageUrl } from "../../utils/index"; -import "./index.css"; - -const smilingFace = "\u{1F60A}"; // modern Unicode code point -const winkingFace = "\u{1F609}"; - -const registrationHref = "https://forms.gle/eFmtwmLpw53P5A6M9 "; - -export default function EventCookingMeet() { - const { t } = useTranslation(); - const sonyaVolunteePicStyle = { - backgroundImage: `url(${getImageUrl("cooking-event.webp")})`, - backgroundSize: "cover", - backgroundRepeat: "no-repeat", - width: "100%", - height: "100%", - }; - - return ( -
-

Cooking Event

-
-
-
{`${t("eventCooking.greeting.invite")}${smilingFace})`}
-
{t("eventCooking.greeting.when")}
-
15.03.25
-
16:00-19:30
- -
-
-
- - {t("eventCooking.greeting.registration")} - -
-
-
-
-
-
{t("eventCooking.main.title")}
-

{t("eventCooking.main.para1")}

-

{`${t("eventCooking.main.para2")}${winkingFace})`}

-

{t("eventCooking.main.para3")}

-

{t("eventCooking.main.para4")}

-

{t("eventCooking.main.para5")}

-
-
- -

{t("eventCooking.outro.rsvp.text")}

-
- - {t("eventCooking.greeting.registration")} - -
- -
- - -
-
- Elsenstr. 87 -
- 12435 Berlin -
- {t("VolunTea.outro.address.floor")} -
- {t("VolunTea.outro.address.lead")} -
- ); -} From d48ae566f9e53f3b249de34169becc44d0db6c4f Mon Sep 17 00:00:00 2001 From: Skycat1983 Date: Fri, 8 Aug 2025 10:42:06 +0200 Subject: [PATCH 09/30] =?UTF-8?q?=F0=9F=94=A5=20Remove=20unused=20EventFee?= =?UTF-8?q?d=20component?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Event/EventFeed.tsx | 28 ---------------------------- 1 file changed, 28 deletions(-) delete mode 100644 src/components/Event/EventFeed.tsx diff --git a/src/components/Event/EventFeed.tsx b/src/components/Event/EventFeed.tsx deleted file mode 100644 index cd64e9e1..00000000 --- a/src/components/Event/EventFeed.tsx +++ /dev/null @@ -1,28 +0,0 @@ -import { useTranslation } from "react-i18next"; -import { EventComponentInfo, EventDataType } from "../../config/types"; - -interface Props { - eventData: { events: EventComponentInfo[] }; -} - -export default function EventFeed({ eventData }: Props) { - const { t } = useTranslation(); - const { events } = eventData; - - return ( -
- {events ? ( - events.map( - ({ component: EventComponent, title, eventData: eventDataProp }) => ( - - ), - ) - ) : ( -
{t("event.noEvents")}
- )} -
- ); -} From 7aa55a2899d74db91de1a58efe43a54b6f80f29d Mon Sep 17 00:00:00 2001 From: Skycat1983 Date: Fri, 8 Aug 2025 10:43:08 +0200 Subject: [PATCH 10/30] =?UTF-8?q?=F0=9F=94=A5=20Remove=20unused=20EventHol?= =?UTF-8?q?idayGift=20component?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Event/EventHolidayGift.tsx | 56 ----------------------- 1 file changed, 56 deletions(-) delete mode 100644 src/components/Event/EventHolidayGift.tsx diff --git a/src/components/Event/EventHolidayGift.tsx b/src/components/Event/EventHolidayGift.tsx deleted file mode 100644 index b3a05f5d..00000000 --- a/src/components/Event/EventHolidayGift.tsx +++ /dev/null @@ -1,56 +0,0 @@ -import { useTranslation } from "react-i18next"; -import { getImageUrl } from "../../utils/index"; -import "./index.css"; - -const donationHref = - "https://www.betterplace.org/en/projects/143838-holiday-gifts-for-refugee-children-in-berlin"; -const registrationHref = "https://forms.gle/4PUF3bSiB1UzMSok7"; - -export default function EventHolidayGift() { - const { t } = useTranslation(); - const holidayGiftPicStyle = { - backgroundImage: `url(${getImageUrl("type-daycare.webp")})`, - backgroundSize: "cover", - backgroundRepeat: "no-repeat", - width: "100%", - height: "100%", - }; - - return ( -
-

{t("eventHolidayGift.header")}

-
-
-
-

{t("eventHolidayGift.paras.para1")}

-

{t("eventHolidayGift.paras.para2")}

-
-
-
-

- {t("eventHolidayGift.donate.money.invite")}{" "} - - {t("eventHolidayGift.donate.money.where")} - -

-

- {t("eventHolidayGift.donate.things.invite")} - {t("eventHolidayGift.donate.things.where")} -

-

- {t("eventHolidayGift.donate.wrapping.invite")}{" "} - - {t("eventHolidayGift.donate.wrapping.registration")} - -

-
-

{t("eventHolidayGift.final.feelFree")}

- -

{t("eventHolidayGift.final.team")}

-
- ); -} From 6e0f70f48f9b5a23f702affccc92336909369650 Mon Sep 17 00:00:00 2001 From: Skycat1983 Date: Fri, 8 Aug 2025 10:47:38 +0200 Subject: [PATCH 11/30] =?UTF-8?q?=F0=9F=94=A5=20Remove=20unused=20EventVol?= =?UTF-8?q?unTeaMeet=20component=20and=20its=20related=20utility=20functio?= =?UTF-8?q?n=20getFirstThursdayOfMonth=20+=20associated=20tests?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Event/EventVolunTeaMeet.tsx | 76 ---------------------- src/utils/index.spec.tsx | 48 -------------- src/utils/index.ts | 37 ----------- 3 files changed, 161 deletions(-) delete mode 100644 src/components/Event/EventVolunTeaMeet.tsx diff --git a/src/components/Event/EventVolunTeaMeet.tsx b/src/components/Event/EventVolunTeaMeet.tsx deleted file mode 100644 index 81058521..00000000 --- a/src/components/Event/EventVolunTeaMeet.tsx +++ /dev/null @@ -1,76 +0,0 @@ -import { Lang } from "need4deed-sdk"; -import { useTranslation } from "react-i18next"; -import { useParams } from "react-router-dom"; - -import { getFirstThursdayOfMonth, getImageUrl } from "../../utils/index"; -import "./index.css"; - -const registrationHref = "https://forms.gle/hFJTszu4tCoeDRy4A"; - -export default function EventVolunTeeMeet() { - const { t } = useTranslation(); - const { lng } = useParams(); - const eventDate = getFirstThursdayOfMonth(); - const eventDateStr = eventDate - ? eventDate.toLocaleDateString(lng === Lang.EN ? "en-GB" : lng, { - year: "numeric", - month: "2-digit", - day: "2-digit", - }) - : t("VolunTea.expired"); - const sonyaVolunteePicStyle = { - backgroundImage: `url(${getImageUrl("sonya-voluntee.webp")})`, - backgroundSize: "cover", - backgroundRepeat: "no-repeat", - width: "100%", - height: "100%", - }; - - return ( -
-

VolunTea

-
-
-
{t("VolunTea.greeting.invite")}
-
{t("VolunTea.greeting.when")}
-
-
-
-
{t("VolunTea.main.title")}
-

{t("VolunTea.main.para1")}

-

{t("VolunTea.main.para2")}

-

{t("VolunTea.main.para3")}

-

{t("VolunTea.main.para4")}

-

{t("VolunTea.main.para5")}

-
-
-

- {t("VolunTea.outro.rsvp.text")}{" "} - - {t("VolunTea.outro.rsvp.link")} - -

- -
-
-
-

{t("weekdays.4")}

-
{eventDateStr}
-

17:00-18:00

-
-
-
- Elsenstr. 87 -
- 12435 Berlin -
- {t("VolunTea.outro.address.floor")} -
- {t("VolunTea.outro.address.lead")} -
- ); -} diff --git a/src/utils/index.spec.tsx b/src/utils/index.spec.tsx index 7b964fe1..2c17038b 100644 --- a/src/utils/index.spec.tsx +++ b/src/utils/index.spec.tsx @@ -5,7 +5,6 @@ import { RefObject, act, createRef } from "react"; import { OpportunityParams } from "../config/types"; import { getBaseUrl, - getFirstThursdayOfMonth, getOpportunityImg, getReadableLocalTime, getUrlWithEncodedParams, @@ -278,53 +277,6 @@ describe("utils", () => { }); }); - describe("getFirstThursdayOfMonth", () => { - it("should return 02.01 given today is 15.12", () => { - const today = new Date("2024-12-15"); - const firstThursday = new Date("2025-01-02"); - - const result = getFirstThursdayOfMonth(today); - - expect(result).toEqual(firstThursday); - }); - - it("should return 06.02 given today is 16.01", () => { - const today = new Date("2025-01-16"); - const firstThursday = new Date("2025-02-06"); - - const result = getFirstThursdayOfMonth(today); - - expect(result).toEqual(firstThursday); - }); - - it("should return 06.03 given today is 15.02", () => { - const today = new Date("2025-02-15"); - const firstThursday = new Date("2025-03-06"); - - const result = getFirstThursdayOfMonth(today); - - expect(result).toEqual(firstThursday); - }); - - it("should return 2026.01.01 given today is 12.06", () => { - const today = new Date("2025-12-06"); - const firstThursday = new Date("2026-01-01"); - - const result = getFirstThursdayOfMonth(today); - - expect(result).toEqual(firstThursday); - }); - - it("should return undefined given today is 10.12.2026", () => { - const today = new Date("2026-12-10"); - const firstThursday = undefined; - - const result = getFirstThursdayOfMonth(today); - - expect(result).toEqual(firstThursday); - }); - }); - describe("haveCommonElements", () => { it("returns false when arrays have no common elements", () => { expect(haveCommonElements([1, 2, 3], [4, 5, 6])).toBe(false); diff --git a/src/utils/index.ts b/src/utils/index.ts index f47d68ce..cbf53128 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -233,43 +233,6 @@ export function parseYesNo(value: boolean | undefined): YesNo { return YesNo.NO; } -export function getFirstThursdayOfMonth( - today: Date = new Date(), -): Date | undefined { - const firstThursdaysOf25And26 = [ - new Date(Date.UTC(2025, 0, 2)), - new Date(Date.UTC(2025, 1, 6)), - new Date(Date.UTC(2025, 2, 6)), - new Date(Date.UTC(2025, 3, 3)), - new Date(Date.UTC(2025, 4, 1)), - new Date(Date.UTC(2025, 5, 5)), - new Date(Date.UTC(2025, 6, 3)), - new Date(Date.UTC(2025, 7, 7)), - new Date(Date.UTC(2025, 8, 4)), - new Date(Date.UTC(2025, 9, 2)), - new Date(Date.UTC(2025, 10, 6)), - new Date(Date.UTC(2025, 11, 4)), - new Date(Date.UTC(2026, 0, 1)), - new Date(Date.UTC(2026, 1, 5)), - new Date(Date.UTC(2026, 2, 5)), - new Date(Date.UTC(2026, 3, 2)), - new Date(Date.UTC(2026, 4, 7)), - new Date(Date.UTC(2026, 5, 4)), - new Date(Date.UTC(2026, 6, 2)), - new Date(Date.UTC(2026, 7, 6)), - new Date(Date.UTC(2026, 8, 3)), - new Date(Date.UTC(2026, 9, 1)), - new Date(Date.UTC(2026, 10, 5)), - new Date(Date.UTC(2026, 11, 3)), - ]; - - const nextFirstThursday = firstThursdaysOf25And26.find( - (date) => date >= today, - ); - - return nextFirstThursday; -} - export function consoleLogDeveloperContributionMessage() { if (process.env.NODE_ENV === Env.DEVELOP) return; From 0fe342e038dd00195d93af80ff226dfa9e56c678 Mon Sep 17 00:00:00 2001 From: Skycat1983 Date: Fri, 8 Aug 2025 10:49:26 +0200 Subject: [PATCH 12/30] =?UTF-8?q?=F0=9F=94=A5=20Remove=20unused=20EventWit?= =?UTF-8?q?hKids=20component?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Event/EventWithKids.tsx | 89 -------------------------- 1 file changed, 89 deletions(-) delete mode 100644 src/components/Event/EventWithKids.tsx diff --git a/src/components/Event/EventWithKids.tsx b/src/components/Event/EventWithKids.tsx deleted file mode 100644 index 544a7fb5..00000000 --- a/src/components/Event/EventWithKids.tsx +++ /dev/null @@ -1,89 +0,0 @@ -import { useTranslation } from "react-i18next"; - -import { getImageUrl } from "../../utils/index"; -import "./index.css"; - -const registrationHref = - "https://docs.google.com/forms/d/e/1FAIpQLSclIb8buCR50wyjujxuENpWZWYTdbbBlhG6W_3b4GFZFL7u6w/viewform?usp=dialog"; - -export default function EventWidthKids() { - const { t } = useTranslation(); - const volunteerPicStyle = { - backgroundImage: `url(${getImageUrl("v_w_kids.webp")})`, - }; - - return ( -
-

{t("eventKids.greeting.title")}

-
-
-
{t("eventKids.greeting.invite1")}
-
{t("eventKids.greeting.invite2")}
-
- {t("eventKids.greeting.host")} -
-
03.04.2025
-
17:20
-
Elsenstraße 87
-
E12435 Berlin
- -
-
-
- - {t("eventKids.greeting.registration")} - -
-
-
-
-
-
- {t("eventKids.main.title")} -
-
    -
  • {t("eventKids.main.para1")}
  • -
  • {t("eventKids.main.para2")}
  • -
  • {t("eventKids.main.para3")}
  • -
  • {t("eventKids.main.para4")}
  • -
  • {t("eventKids.main.para5")}
  • -
  • {t("eventKids.main.para6")}
  • -
  • {t("eventKids.main.para7")}
  • -
-
-
- - {t("eventKids.outro.rsvp.text")} -
- - {t("eventKids.greeting.registration")} - -
- -
-
{t("eventKids.outro.para1")}
-
{t("eventKids.outro.para2")}
- -
- - -
-
- Elsenstr. 87 -
- 12435 Berlin -
- {t("eventKids.outro.address.floor")} -
- {t("eventKids.outro.address.lead")} -
- ); -} From 362af672c1843c8576ddecf03d7cbbab0ea78a10 Mon Sep 17 00:00:00 2001 From: Skycat1983 Date: Fri, 8 Aug 2025 10:54:23 +0200 Subject: [PATCH 13/30] =?UTF-8?q?=F0=9F=94=A5=20Remove=20unused=20EventLis?= =?UTF-8?q?t=20component=20and=20its=20related=20hook=20useEventComponents?= =?UTF-8?q?,=20along=20with=20associated=20types=20in=20types.ts?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Event/Events.tsx | 53 ---------------------------- src/config/types.ts | 16 +-------- src/hooks/useEventComponents.tsx | 60 -------------------------------- 3 files changed, 1 insertion(+), 128 deletions(-) delete mode 100644 src/components/Event/Events.tsx delete mode 100644 src/hooks/useEventComponents.tsx diff --git a/src/components/Event/Events.tsx b/src/components/Event/Events.tsx deleted file mode 100644 index c6ba5a61..00000000 --- a/src/components/Event/Events.tsx +++ /dev/null @@ -1,53 +0,0 @@ -import React, { useState } from "react"; -import { useTranslation } from "react-i18next"; - -import { EventComponentInfo, EventDataType } from "../../config/types"; -import useEventComponents from "../../hooks/useEventComponents"; -import ScrollingHorizontalBar from "../core/ScrollingHorizontalBar"; - -export default function EventList() { - const [selectedComponentIdx, setSelectedComponentIdx] = useState(); - const { - eventComponents: eventStripItems, - isLoading, - isError, - } = useEventComponents(); - const { t } = useTranslation(); - - const handleListItemClick = (eventIdx: number) => { - setSelectedComponentIdx(eventIdx); - }; - - const renderSelectedComponent = () => { - if (!(selectedComponentIdx === undefined)) { - return React.createElement( - eventStripItems[selectedComponentIdx].component, - { - eventData: eventStripItems[selectedComponentIdx] - .eventData as EventDataType, - }, - ); - } - return
{t("event.click")}
; - }; - - if (isLoading) { - return

{t("event.loading")}

; - } - if (isError) { - return

{t("event.error")}

; - } - if (!eventStripItems || eventStripItems.length === 0) { - return

{t("event.empty")}

; - } - - return ( -
- - items={eventStripItems} - handleListItemClick={handleListItemClick} - /> - {renderSelectedComponent()} -
- ); -} diff --git a/src/config/types.ts b/src/config/types.ts index 7b779a3b..a8732012 100644 --- a/src/config/types.ts +++ b/src/config/types.ts @@ -1,6 +1,5 @@ import { DeepKeys } from "@tanstack/react-form"; -import { EventN4D, Lang } from "need4deed-sdk"; -import React from "react"; +import { Lang } from "need4deed-sdk"; export interface IncludeClassName { className?: string; @@ -110,19 +109,6 @@ export type PrefixObjectAccessor = { : never; }[keyof T]; -export interface EventComponentInfo { - title: string; - component: React.FC; - eventData?: EventPropType; - active?: boolean; -} - -export type EventDataType = - | { event: EventN4D } - | { events: EventComponentInfo[] }; - -export type EventPropType = { eventData: EventDataType } | object; - export enum ScreenTypes { MOBILE = "mobile", TABLET = "tablet", diff --git a/src/hooks/useEventComponents.tsx b/src/hooks/useEventComponents.tsx deleted file mode 100644 index aa905885..00000000 --- a/src/hooks/useEventComponents.tsx +++ /dev/null @@ -1,60 +0,0 @@ -import { Lang } from "need4deed-sdk"; -import { useMemo } from "react"; // Import useMemo -import { useTranslation } from "react-i18next"; - -import Event from "../components/Event/Event"; -import Event831 from "../components/Event/Event831"; -import EventAccompanying from "../components/Event/EventAccompanying"; -import EventCookingMeet from "../components/Event/EventCookingMeet"; -import EventFeed from "../components/Event/EventFeed"; -import EventHolidayGift from "../components/Event/EventHolidayGift"; -import EventVolunTeaMeet from "../components/Event/EventVolunTeaMeet"; -import EventWithKids from "../components/Event/EventWithKids"; -import { EventComponentInfo, EventPropType } from "../config/types"; -import useEvents from "./api/useEvents"; // Correct import path if needed - -const legacyEvents: EventComponentInfo[] = [ - { component: EventAccompanying, title: "event6" }, - { component: EventWithKids, title: "event5" }, - { component: EventCookingMeet, title: "event4" }, - { component: EventVolunTeaMeet, title: "event3" }, - { component: EventHolidayGift, title: "event2" }, - { component: Event831, title: "event1" }, -]; - -export default function useEventComponents() { - const { i18n } = useTranslation(); - const [events, isLoading, isError] = useEvents(i18n.language as Lang); - - const eventComponents = useMemo(() => { - const today = new Date(); - const itemsCurrent: EventComponentInfo[] = []; - const itemsPast: EventComponentInfo[] = []; - - (events || []).forEach((event) => { - const item: EventComponentInfo = { - title: event.menuTitle, - component: Event as React.FC, - eventData: { event }, - active: event.active, - }; - if (new Date(event.date) < today) { - itemsPast.push(item); - } else { - itemsCurrent.push(item); - } - }); - - return [ - { - title: "event.past", - active: false, - component: EventFeed as React.FC, - eventData: { events: [...itemsPast, ...legacyEvents], active: false }, - } as EventComponentInfo, - ...itemsCurrent, - ]; - }, [events]); - - return { eventComponents, isLoading, isError }; -} From 2fd02c72b26b991a2f9e08425fd6086d7c7de64e Mon Sep 17 00:00:00 2001 From: Skycat1983 Date: Fri, 8 Aug 2025 10:55:56 +0200 Subject: [PATCH 14/30] =?UTF-8?q?=F0=9F=94=A5=20Remove=20unused=20Scrollin?= =?UTF-8?q?gHorizontalBar=20component=20and=20its=20associated=20styles?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/ScrollingHorizontalBar/index.css | 54 ------------------- .../core/ScrollingHorizontalBar/index.tsx | 43 --------------- 2 files changed, 97 deletions(-) delete mode 100644 src/components/core/ScrollingHorizontalBar/index.css delete mode 100644 src/components/core/ScrollingHorizontalBar/index.tsx diff --git a/src/components/core/ScrollingHorizontalBar/index.css b/src/components/core/ScrollingHorizontalBar/index.css deleted file mode 100644 index d8e2c333..00000000 --- a/src/components/core/ScrollingHorizontalBar/index.css +++ /dev/null @@ -1,54 +0,0 @@ -.horizontal-list-container { - display: flex; - gap: 1px; - overflow-x: auto; - overflow-y: hidden; - white-space: nowrap; - list-style: none; - padding: 0; - margin: 0; -} - -.horizontal-list-container li { - width: max-content; - margin: 0; - padding: 0.5rem 1.2rem; - - border-radius: 1.2rem 1.2rem 0 0; - background: var(--n4d-neutral-700); -} - -.horizontal-list-container li[data-active="true"] { - background-image: linear-gradient( - to bottom, - var(--n4d-neutral-700) 1%, - var(--n4d-neutral-900) 99% - ); -} - -.horizontal-list-container button { - background: none; - border: none; - padding: 0; - margin: 0; - cursor: pointer; -} - -.horizontal-list-container li[data-current="true"] { - background-color: color-mix( - in srgb, - var(--n4d-secondary), - var(--n4d-neutral-900) - ); -} - -.horizontal-list-container li[data-current="true"][data-active="true"] { - background-image: linear-gradient( - color-mix(in srgb, var(--n4d-secondary), var(--n4d-neutral-900)) 1%, - var(--n4d-neutral-900) 99% - ); -} - -.horizontal-list-item button:hover { - text-decoration: underline; -} diff --git a/src/components/core/ScrollingHorizontalBar/index.tsx b/src/components/core/ScrollingHorizontalBar/index.tsx deleted file mode 100644 index e4fa0782..00000000 --- a/src/components/core/ScrollingHorizontalBar/index.tsx +++ /dev/null @@ -1,43 +0,0 @@ -import { useRef, useState } from "react"; -import { useTranslation } from "react-i18next"; - -import AutoScrollTag from "../common/AutoScrollTag"; -import "./index.css"; - -interface Props { - items: Array; - handleListItemClick: (idx: number) => void; -} - -export default function ScrollingHorizontalBar< - T extends { title: string; active?: boolean }, ->({ items, handleListItemClick }: Props) { - const [selectedIndex, setSelectedIndex] = useState(0); - const ref = useRef(null); - const { t } = useTranslation(); - - return ( -
-
    - {items.map((item, idx) => ( - - - - ))} -
-
- ); -} From 3553513bc151bc1a9f2d651defde80751ee296d0 Mon Sep 17 00:00:00 2001 From: Skycat1983 Date: Fri, 8 Aug 2025 11:08:12 +0200 Subject: [PATCH 15/30] =?UTF-8?q?=F0=9F=94=A5=20Remove=20unused=20CookieIt?= =?UTF-8?q?em=20and=20Cookies=20components?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Legal/CookieItem.tsx | 21 --------- src/components/Legal/Cookies.tsx | 70 ----------------------------- 2 files changed, 91 deletions(-) delete mode 100644 src/components/Legal/CookieItem.tsx delete mode 100644 src/components/Legal/Cookies.tsx diff --git a/src/components/Legal/CookieItem.tsx b/src/components/Legal/CookieItem.tsx deleted file mode 100644 index 95636825..00000000 --- a/src/components/Legal/CookieItem.tsx +++ /dev/null @@ -1,21 +0,0 @@ -import { SwitchButton } from "../core/button"; -import "../forms/index.css"; - -interface CookieItemProps { - label: string; - isChecked: boolean; - onToggle: () => void; -} - -export default function CookieItem({ - label, - isChecked, - onToggle, -}: CookieItemProps) { - return ( -
-

{label}

- -
- ); -} diff --git a/src/components/Legal/Cookies.tsx b/src/components/Legal/Cookies.tsx deleted file mode 100644 index a9d76e5f..00000000 --- a/src/components/Legal/Cookies.tsx +++ /dev/null @@ -1,70 +0,0 @@ -import { useState } from "react"; -import { useTranslation } from "react-i18next"; -import { getCookieConsentValue, Cookies } from "react-cookie-consent"; -import { useNavigate } from "react-router-dom"; - -import CookieItem from "./CookieItem"; -import "../forms/index.css"; - -interface ICookie { - name: string; - description: string; -} - -const cookies: ICookie[] = [ - { name: "CookieConsent", description: "Google Analytics" }, -]; - -const initializeCookiePreferences = (): Record => - cookies.reduce((preferences, cookie) => { - const consentValue = getCookieConsentValue(cookie.name) === "true"; - return { ...preferences, [cookie.name]: consentValue }; - }, {}); - -export default function Cookie() { - const navigate = useNavigate(); - const { t } = useTranslation(); - - const [cookiePreferences, setCookiePreferences] = useState< - Record - >(initializeCookiePreferences()); - - const handleToggle = (type: keyof typeof cookiePreferences) => { - setCookiePreferences((prev) => ({ - ...prev, - [type]: !prev[type], - })); - }; - - const savePreferences = () => { - Object.entries(cookiePreferences).forEach(([name, value]) => { - Cookies.set(name, value.toString(), { expires: 365 }); - }); - - navigate("/"); - }; - - return ( -
-

{t("cookieSettings.title")}

- -
- {cookies.map(({ name, description }) => ( - handleToggle(name)} - label={description} - /> - ))} -
- - -
- ); -} From af192ecc162970b6649e5735e984d6b1ccb6218d Mon Sep 17 00:00:00 2001 From: Skycat1983 Date: Fri, 8 Aug 2025 11:23:15 +0200 Subject: [PATCH 16/30] =?UTF-8?q?=F0=9F=94=A5=20Remove=20unused=20Subpage?= =?UTF-8?q?=20component=20and=20its=20associated=20routes=20from=20App.tsx?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/App.tsx | 86 ----------------------------------- src/pages/Subpage.tsx | 102 ------------------------------------------ 2 files changed, 188 deletions(-) delete mode 100644 src/pages/Subpage.tsx diff --git a/src/App.tsx b/src/App.tsx index cbf2a882..e93f4a99 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -21,7 +21,6 @@ import Landing from "./pages/Landing"; import LegalNotice from "./pages/LegalNotice"; import Opportunities from "./pages/Opportunities"; import OpportunityForm from "./pages/OpportunityForm"; -import Subpage from "./pages/Subpage"; import VolunteerForm from "./pages/VolunteerForm"; import Agreement from "./pages/VPA"; import { consoleLogDeveloperContributionMessage } from "./utils"; @@ -57,91 +56,6 @@ function App() { } /> } /> } /> - } - /> - } - /> - } - /> - } - /> - } - /> - } - /> - } - /> - } - /> - } - /> - } - /> - } - /> - } - /> - } - /> - } - /> - } - /> - } - /> - } - /> - } - /> - } - /> - } - /> - } - /> - } /> } /> events?.find((event) => event.active), - [events], - ); - - useEffect(() => { - if (isEnumValue(Lang, lng)) { - i18n.changeLanguage(lng); - setLangDirection(containerRef, lng as Lang); - } else { - navigate(`/${type}/${Lang.EN}`, { replace: true }); - } - ReactGA.send({ - hitType: "pageview", - page: `/${type}/`, - title: `Visited ${type}`, - }); - }, [containerRef, i18n, lng, navigate, type]); - - const component = (pageType: Subpages) => { - switch (pageType) { - case Subpages.DATA_PROTECTION: - return ; - case Subpages.NOTICE: - return ; - case Subpages.AGREEMENT: - return ; - case Subpages.GUIDELINES: - return ; - case Subpages.BECOME_VOLUNTEER: - return
; - case Subpages.ADD_OPPORTUNITY: - return ; - case Subpages.ANNOUNCEMENT: - return ; - case Subpages.EVENT: - return ; - case Subpages.EVENTS: - return ; - case Subpages.COOKIES: - return ; - case Subpages.FAQS: - return ; - default: - return null; - } - }; - - const navbarMainContainerStyle = { - backgroundImage: `url(${getImageUrl("need4deed.webp")})`, - backgroundPosition: "center", - backgroundSize: "cover", - }; - - return ( - <> -
-
-
- {component(type)} -