From 52fa5e27fc37bc156ef722c8258646057a8a826d Mon Sep 17 00:00:00 2001 From: Joe Carstairs <65492573+Sycamost@users.noreply.github.com> Date: Wed, 23 Aug 2023 20:05:41 +0100 Subject: Displays committee role --- src/data/committee.ts | 2 +- src/i18n/translate.ts | 14 +++++++++++++- src/i18n/translations/enums/committeeRole.ts | 21 ++++++++++++++------- src/pages/[locale]/index.astro | 5 +++++ src/types/CommitteeMember.d.ts | 2 +- src/types/TranslationsDictionary.d.ts | 2 +- 6 files changed, 35 insertions(+), 11 deletions(-) (limited to 'src') diff --git a/src/data/committee.ts b/src/data/committee.ts index fd6d428..da936b8 100644 --- a/src/data/committee.ts +++ b/src/data/committee.ts @@ -1,5 +1,5 @@ import type { CommitteeMember } from '$types/CommitteeMember'; -import CommitteeRole from 'enums/CommitteeRole'; +import CommitteeRole from '$enums/CommitteeRole'; const committee: CommitteeMember[] = [ { diff --git a/src/i18n/translate.ts b/src/i18n/translate.ts index a9415b2..8f27e4b 100644 --- a/src/i18n/translate.ts +++ b/src/i18n/translate.ts @@ -1,8 +1,12 @@ +import type CommitteeRole from '$enums/CommitteeRole'; import type Locale from '$types/Locale'; import type { TranslationsDictionary, Translation } from '$types/TranslationsDictionary'; import { defaultLocale } from './locales'; -type TranslationsDictionaryWith = TranslationsDictionary<{ +type TranslationsDictionaryWith< + Key extends string | CommitteeRole, + Params, +> = TranslationsDictionary<{ [key in Key]: { [locale in typeof defaultLocale]: Translation } & { [locale in Locale]?: Translation; }; @@ -14,6 +18,14 @@ export default function (locale: Locale) { Params, Dict extends TranslationsDictionaryWith, >(dict: Dict, params: { key: Key } & { [Param in keyof Params]: string }) { + if (!(params.key in dict)) { + throw new Error(` + Could not find translation for key '${params.key}'. Available keys were: + ${Object.keys(dict) + .map((k) => `'${k}'`) + .join(', ')} + `); + } const translation = dict[params.key][locale] ?? dict[params.key][defaultLocale]; return translation(params); }; diff --git a/src/i18n/translations/enums/committeeRole.ts b/src/i18n/translations/enums/committeeRole.ts index 06b9980..0d13b18 100644 --- a/src/i18n/translations/enums/committeeRole.ts +++ b/src/i18n/translations/enums/committeeRole.ts @@ -1,27 +1,34 @@ import type { TranslationsDictionary } from '$types/TranslationsDictionary'; -import CommitteeRole from 'enums/CommitteeRole'; const tEnum = { - [CommitteeRole.Preses]: { + Preses: { sco: () => 'Preses', 'en-GB': () => 'President', }, - [CommitteeRole.Secretar]: { + Secretar: { sco: () => 'Secretar', - 'en-GB': () => 'Secretar', + 'en-GB': () => 'Secretary', }, - [CommitteeRole.Thesaurer]: { + Thesaurer: { sco: () => 'Thesaurer', 'en-GB': () => 'Treasurer', }, - [CommitteeRole.Wabmaister]: { + MemmershipSecretar: { + sco: () => 'Memmership Secretar', + 'en-GB': () => 'Membership Secretary', + }, + Wabmaister: { sco: () => 'Wabmaister', 'en-GB': () => 'Webmaster', }, - [CommitteeRole.LallansEiditor]: { + LallansEiditor: { sco: () => 'Lallans Eiditor', 'en-GB': () => 'Lallans Editor', }, + HonoraryPreses: { + sco: () => 'Honorary Preses', + 'en-GB': () => 'Honorary President', + }, }; type Raw = typeof tEnum; diff --git a/src/pages/[locale]/index.astro b/src/pages/[locale]/index.astro index cb38bc5..b47a045 100644 --- a/src/pages/[locale]/index.astro +++ b/src/pages/[locale]/index.astro @@ -3,12 +3,14 @@ import Page from '$layouts/Page.astro'; import localeStaticPaths from '$lib/localeStaticPaths'; import translate from '$i18n/translate'; import tPage from '$i18n/translations/pages/home'; +import tRole from '$i18n/translations/enums/committeeRole'; import type Locale from '$types/Locale'; import { getMostRecentNewsItem } from '$lib/newsUtils'; import contactDetails from '$data/contactDetails'; import NewsIndex from '$components/NewsIndex/NewsIndex.astro'; import committee from '$data/committee'; import Button from '$components/Button.astro'; +import CommitteeRole from '$enums/CommitteeRole'; export async function getStaticPaths() { return localeStaticPaths; @@ -51,6 +53,9 @@ const mostRecentNewsItem = await getMostRecentNewsItem(locale); )}

{member.name}

+

+ {member.roles.map((role) => t(tRole, { key: CommitteeRole[role] })).join(', ')} +

{member.bio &&

}

diff --git a/src/types/CommitteeMember.d.ts b/src/types/CommitteeMember.d.ts index e17bb4c..d9f8ee3 100644 --- a/src/types/CommitteeMember.d.ts +++ b/src/types/CommitteeMember.d.ts @@ -1,4 +1,4 @@ -import type CommitteeRole from 'enums/CommitteeRole'; +import type CommitteeRole from '$enums/CommitteeRole'; import type Locale from './Locale'; type CommitteeMember = { diff --git a/src/types/TranslationsDictionary.d.ts b/src/types/TranslationsDictionary.d.ts index d9d7e44..5033ecd 100644 --- a/src/types/TranslationsDictionary.d.ts +++ b/src/types/TranslationsDictionary.d.ts @@ -4,7 +4,7 @@ import type Locale from './Locale'; export type Translation = (params: { [key in keyof Params]: string }) => string; export type TranslationsDictionary = { - [key in keyof Raw]: { + readonly [key in keyof Raw]: { [locale in Locale]?: Translation[0]>; } & { [locale in typeof defaultLocale]: Translation[0]>; -- cgit v1.2.3