Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 36 additions & 3 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,49 @@

### Table of Contents

- [Version 4.1.2](#version-412---_2026-01-03_)
- [Version 4.1.1](#version-411---_2026-01-02_)
- [Version 4.1.0](#version-410---_2025-12-30_)
- [Version 4.0.3](#version-403---_2025-11-26_)
- [Version 4.0.2](#version-402---_2025-11-26_)
- [Version 4.0.1](#version-401---_2025-10-27_)
- [Version 4.0.0](#version-400---_2025-08-17_)

### [Version 4.1.2](https://github.com/tahoni/hpsc-web-vite/releases/tag/version-4.1.2) - _2026-01-03_

Refactored the `Events` and `Members` features to better organise content by year (specifically for 2025).
It introduces a cleaner directory structure, relocates "World Shoot 2025" and "Club Shirts" content into dedicated namespaces,
and fixes several import paths.

#### Refactoring & Organisation
- _Namespace Restructuring:_ Moved `WorldShoot2025` related components, constants, and styles into a new nested directory
structure under `src/features/Events/content/2025/WorldShoot2025/`.
- _Component Renaming:_ Updated `WorldShootContent` to `WorldShoot2025Content` to be more specific to the event year.
- _Member Content Update:_ Relocated `ClubShirts` content to a `2025` subfolder within the `Members` feature.
- _Index Exports:_ Added `index.ts` files to the `2025` content folders to simplify exports and improve modularity.

#### Styles & Assets
- _Style Consolidation:_ Merged `WorldShoot2025.module.scss` into a shared `WorldShoot.module.scss` and
updated `@extend` rules to maintain visual consistency.

#### New Components
- _Section Component_: Introduced a generic `Section` component in `src/shared/components/Section/` to handle
arrays of `ReactElement` with optional collapsed states.

#### Cleanup & Maintenance
- _Import Fixes:_ Cleaned up relative imports and added missing `.tsx` extensions across several files.
- _Version Bump:_ Incremented project version in `package.json` from `4.1.1` to `4.1.2`.
- _MDX Updates:_ Simplified imports within `WorldShoot2025.mdx`.
- _Commented Code:_ Temporarily commented out the "Apparel" section in the World Shoot summary.

#### Changes by

@imgbot
@tahoni

### [Version 4.1.1](https://github.com/tahoni/hpsc-web-vite/releases/tag/version-4.1.1) - _2026-01-02_

Refine the user interface, improve the responsive design for navigation components, and update project documentation and assets.
Refined the user interface, improved the responsive design for navigation components, and updated project documentation and assets.

#### Enhancements & UI Improvements
- _Navigation Refinement:_ Updated `HeaderMenu` with improved breakpoints and layout adjustments to ensure
Expand Down Expand Up @@ -41,8 +74,8 @@ for better API clarity.

### [Version 4.1.0](https://github.com/tahoni/hpsc-web-vite/releases/tag/version-4.1.0) - _2025-12-30_

Modernise the navigation experience, ensure the layouts are robust across various device sizes,
and leverage unique Google Map IDs for better management of map styles and features.
Modernised the navigation experience, ensured the layouts are robust across various device sizes,
and leveraged unique Google Map IDs for better management of map styles and features.

#### Enhancements and Updates
- _Menu Styling:_ Simplified menu styles in `_standard.scss`, moving away from custom dropdown overrides
Expand Down
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,7 @@ The copyright licence can be found in the [`LICENSE.md`](./LICENSE.md) file.
- [![Website Badge](https://custom-icon-badges.demolab.com/badge/https%3A%2F%2Ftahoni.info-blue?logo=file-code)](https://www.tahoni.info)
- [![Email Badge](https://custom-icon-badges.demolab.com/badge/leonil%40tahoni.info-blue?logo=mail)](mailto:leonil@tahoni.info)


- [![Gmail Badge](https://img.shields.io/badge/tahoni%40gmail.com-blue?logo=gmail)](mailto:tahoni@gmail.com)
- [![GitHub Badge](https://img.shields.io/badge/Leoni_Lubbinge-blue?logo=github)](https://github.com/tahoni)
- [![LinkedIn Badge](https://custom-icon-badges.demolab.com/badge/Leoni_Lubbinge-blue.svg?logoSource=feather&logo=linkedin)](https://www.linkedin.com/in/leoni-lubbinge-06066b16/)
50 changes: 27 additions & 23 deletions RELEASE_NOTES.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,30 +2,34 @@

## Release Notes

### Version 4.1.1 - _2026-01-02_

Refine the user interface, improve the responsive design for navigation components, and update project documentation and assets.

#### Enhancements & UI Improvements
- _Navigation Refinement:_ Updated `HeaderMenu` with improved breakpoints and layout adjustments to ensure
better responsiveness on extra-large screens.
- _Header Simplification:_ Streamlined the `Header` structure by removing redundant components (like `HeaderTitle`)
and consolidating `HeaderMenu` into `HeaderContent` for better maintainability.
- _Styling Updates:_
- Refactored SCSS for the header and footer to ensure perfect alignment across different viewports.
- Improved layout consistency in `index.html`.
- _Maps Integration:_ Added support for unique Google Map IDs to allow for better management of map styles and features.

#### Documentation & Assets
- _README Updates:_ Refreshed project screenshots and updated links to reflect the latest UI changes.
- _Legal & Metadata:_ Updated copyright years to 2025 and standardised British English in code annotations and TSDoc.
- _Developer Experience:_ Expanded TypeDoc entry points and enhanced TSDoc documentation across multiple features
for better API clarity.

#### Technical Maintenance
- _Bug Fixes:_ Corrected date formatting inconsistencies in `CHANGELOG` and `RELEASE_NOTES`.
- _Clean-up:_ Removed unused icon constants and simplified the overall component architecture.
### Version 4.1.2 - _2026-01-03_

Refactored the `Events` and `Members` features to better organise content by year (specifically for 2025).
It introduces a cleaner directory structure, relocates "World Shoot 2025" and "Club Shirts" content into dedicated namespaces,
and fixes several import paths.

#### Refactoring & Organisation
- _Namespace Restructuring:_ Moved `WorldShoot2025` related components, constants, and styles into a new nested directory
structure under `src/features/Events/content/2025/WorldShoot2025/`.
- _Component Renaming:_ Updated `WorldShootContent` to `WorldShoot2025Content` to be more specific to the event year.
- _Member Content Update:_ Relocated `ClubShirts` content to a `2025` subfolder within the `Members` feature.
- _Index Exports:_ Added `index.ts` files to the `2025` content folders to simplify exports and improve modularity.

#### Styles & Assets
- _Style Consolidation:_ Merged `WorldShoot2025.module.scss` into a shared `WorldShoot.module.scss` and
updated `@extend` rules to maintain visual consistency.

#### New Components
- _Section Component_: Introduced a generic `Section` component in `src/shared/components/Section/` to handle
arrays of `ReactElement` with optional collapsed states.

#### Cleanup & Maintenance
- _Import Fixes:_ Cleaned up relative imports and added missing `.tsx` extensions across several files.
- _Version Bump:_ Incremented project version in `package.json` from `4.1.1` to `4.1.2`.
- _MDX Updates:_ Simplified imports within `WorldShoot2025.mdx`.
- _Commented Code:_ Temporarily commented out the "Apparel" section in the World Shoot summary.

#### Changes by

@imgbot
@tahoni
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"author": "Leoni Lubbinge <tahoni@gmail.com>",
"description": "HPSC website",
"private": true,
"version": "4.1.1",
"version": "4.1.2",
"type": "module",
"scripts": {
"dev": "vite",
Expand Down
2 changes: 1 addition & 1 deletion src/features/Events/EventsContent.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import React, { MemoExoticComponent, ReactElement } from "react";
import { ContentWithStories } from "@components/Content";
import WorldShootsContent from "./content/Worldshoots";
import { WorldShootsContent } from "./content/2025";

/**
* EventsContent is a React functional component memoised using React.memo.
Expand Down
5 changes: 0 additions & 5 deletions src/features/Events/content/2025/WorldShoot2025.module.scss

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -31,3 +31,7 @@ $video-height: 20em;
.worldShoot h6 {
margin-bottom: 1.55em;
}

.worldShoot2025 {
@extend .worldShoot;
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
import {
worldShoot2025Event,
} from "./WorldShoot2025Constants";
import { worldShoot2025Event } from "./WorldShootConstants.tsx";

<>
South Africa is hosting the <a href={worldShoot2025Event.link} target="_blank">{worldShoot2025Event.description} XX</a>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import React, { CSSProperties, PropsWithChildren, ReactElement } from "react";
import { Image } from "react-bootstrap";
import { SimpleVenueMap } from "@components/Map";
import { worldShootEvents } from "./WorldShootConstants";
import classes from "./WorldShoot.module.scss";
import { YouTubeVideo } from "@components/Video";
import { VenueEvent } from "@models/venues/VenueEvent.ts";
import { VenueType } from "@models/venues/VenueType.ts";
import { worldShootEvents } from "./WorldShootConstants.tsx";
import classes from "./WorldShoot.module.scss";

interface WorldShootContentProps {
year: number;
Expand All @@ -22,7 +22,7 @@ interface WorldShootContentProps {
*
* @type {React.MemoExoticComponent<() => ReactElement>}
*/
const WorldShootContent = React.memo(
const WorldShoot2025Content = React.memo(
(props: PropsWithChildren<WorldShootContentProps>): ReactElement => {
const worldShootEvent: VenueEvent | undefined = worldShootEvents.get(
props.year,
Expand Down Expand Up @@ -61,6 +61,7 @@ const WorldShootContent = React.memo(

<div className={classes.worldShootSummary}>{props.children}</div>

{/*
<h6>Apparel</h6>
<div className={classes.worldShootSummary}>
<p>
Expand All @@ -70,6 +71,7 @@ const WorldShootContent = React.memo(
</p>
</div>
<br />
*/}

<h6>
{worldShootEvent.shootingRangeName} at{" "}
Expand Down Expand Up @@ -98,4 +100,4 @@ const WorldShootContent = React.memo(
},
);

export default WorldShootContent;
export default WorldShoot2025Content;
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
import { JSX } from "react";
import WorldShoot2025Component from "@features/Events/content/2025/WorldShoot2025/WorldShoot2025Component.tsx";
import { ImageWithSourceAndDescription } from "@tahoni/tahoni-lib-react";
import { ShootingRanges } from "@constants/about/venueConstants";
import { VenueEvent } from "@models/venues/VenueEvent";
import { ShootingRanges } from "@constants/about/venueConstants.ts";
import { VenueEvent } from "@models/venues/VenueEvent.ts";

/**
* @packageDocumentation
Expand All @@ -20,6 +22,7 @@ import { VenueEvent } from "@models/venues/VenueEvent";
*/

// Core
const worldShoot2025Year = 2025;
const worldShoot2025Description = "2025 IPSC Handgun World Shoot";

// Images
Expand All @@ -36,6 +39,7 @@ export const worldShoot2025ApparelLink: string =
"https://www.bosninja.co.za/product-category/ipsc-handgun-world-shoot-2025/";
export const worldShoot2025ApparelDescription: string = `${worldShoot2025Description} Apparel @ BosNinja`;

// Event
export const worldShoot2025Event: VenueEvent = new VenueEvent({
description: worldShoot2025Description,
type: "Handgun",
Expand All @@ -56,3 +60,12 @@ export const worldShoot2025Event: VenueEvent = new VenueEvent({
apparelLink: worldShoot2025ApparelLink,
apparelDescription: worldShoot2025ApparelDescription,
});

// Summary
export const worldShootEventYears: number[] = [worldShoot2025Year];
export const worldShootEvents: Map<number, VenueEvent> = new Map([
[worldShoot2025Year, worldShoot2025Event],
]);
export const worldShootComponents: Map<number, JSX.Element> = new Map([
[worldShoot2025Year, <WorldShoot2025Component />],
]);
Original file line number Diff line number Diff line change
@@ -1,9 +1,6 @@
import React, { ReactElement } from "react";
import WorldShootContent from "./WorldShootContent";
import {
worldShootComponents,
worldShootEventYears,
} from "./WorldShootConstants";
import { worldShootComponents, worldShootEventYears } from "./WorldShootConstants.tsx";
import WorldShoot2025Content from "./WorldShoot2025Content.tsx";

/**
* `WorldShootsContent` is a React memoised functional component that renders a section containing a list of `WorldShootContent` components. Each `WorldShootContent` represents a year's world shooting event, dynamically created based on the `worldShootEventYears` array.
Expand All @@ -19,12 +16,12 @@ const WorldShootsContent = React.memo((): ReactElement => {
<section>
{worldShootEventYears.map((year: number, index: number) => {
return (
<WorldShootContent
<WorldShoot2025Content
year={year}
key={"worldShoot_" + "_" + year + "_" + index}
>
{worldShootComponents.get(year)}
</WorldShootContent>
</WorldShoot2025Content>
);
})}
</section>
Expand Down
3 changes: 3 additions & 0 deletions src/features/Events/content/2025/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import WorldShootsContent from "./WorldShoot2025/WorldShootsContent.tsx";

export { WorldShootsContent };
19 changes: 0 additions & 19 deletions src/features/Events/content/WorldShootConstants.tsx

This file was deleted.

2 changes: 1 addition & 1 deletion src/features/Members/MembersContent.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import React, { MemoExoticComponent, ReactElement } from "react";
import ClubShirts from "./content/ClubShirts";
import ClubShirts from "./content/2025/ClubShirts.tsx";
import { ContentWithStories } from "@components/Content";

/**
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import React, { ReactElement } from "react";
import { Image } from "react-bootstrap";
import { clubShirts2024Image } from "../MemberConstants";
import { clubShirts2024Image } from "../../MemberConstants.tsx";

/**
* `ClubShirts` is a React functional component that renders an article element displaying
Expand Down
3 changes: 3 additions & 0 deletions src/features/Members/content/2025/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import ClubShirts from "./ClubShirts";

export { ClubShirts };
16 changes: 16 additions & 0 deletions src/shared/components/Section/Section.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import { memo, ReactElement } from "react";

export interface SectionProps {
content: ReactElement[];
collapsed?: boolean;
}

export const Section = memo((props: SectionProps): ReactElement => {
return (
<>
{props.content.map((item) => (
<div>{item}</div>
))}
</>
);
});
Loading