diff --git a/components/nouns/NounsClassExample.vue b/components/nouns/NounsClassExample.vue index 6a03fe04e..e912f3f2a 100644 --- a/components/nouns/NounsClassExample.vue +++ b/components/nouns/NounsClassExample.vue @@ -33,20 +33,24 @@ const declension = computed(() => { return undefined; } - const declension = nounsData.declensions[template.value.declension]; - if (!declension[numerus.value]) { + const declension = nounsData.declensions?.[template.value.declension]; + if (declension?.[numerus.value] === undefined || nounsData.classExample?.[numerus.value] === undefined) { return undefined; } const entries = Object.entries(declension[numerus.value] ?? {}).map(([caseAbbreviation, declensionSuffix]) => { - return [caseAbbreviation.toUpperCase() + (props.plural ? '_pl' : ''), - nounsData.classExample[numerus.value][caseAbbreviation].replace(/\{([^}]+)}/, (_match, morpheme) => { + const article = nounsData.classExample?.[numerus.value][caseAbbreviation] + .replace(/\{([^}]+)}/, (_match, morpheme) => { const value = props.nounConvention.morphemes[morpheme]; if (value === undefined) { return ''; } return typeof value === 'string' ? value : value.spelling; - }) + stem.value + template.value.suffix + declensionSuffix]; + }) ?? ''; + return [ + caseAbbreviation.toUpperCase() + (props.plural ? '_pl' : ''), + article + stem.value + template.value.suffix + declensionSuffix, + ]; }); return new NounDeclension(Object.fromEntries(entries)); diff --git a/components/nouns/NounsConventionPage.vue b/components/nouns/NounsConventionPage.vue index 906a7f14e..371379a9c 100644 --- a/components/nouns/NounsConventionPage.vue +++ b/components/nouns/NounsConventionPage.vue @@ -36,12 +36,12 @@ const examples = computed(() => { if (exampleValues.value === undefined) { return undefined; } - return nounsData?.examples.map((example) => Example.parse(example)) + return nounsData.examples?.map((example) => Example.parse(example)) .filter((example) => example.areRequiredExampleValuesPresent(exampleValues.value!)); }); const nounConventionGroup = computed(() => { - return Object.values(nounsData.groups).find((nounConventionGroup) => { + return Object.values(nounsData.groups ?? []).find((nounConventionGroup) => { return nounConventionGroup.conventions.includes(props.nounConvention.key); }); }); diff --git a/components/nouns/NounsConventionsIndex.vue b/components/nouns/NounsConventionsIndex.vue index 1ca14e991..1d1edf757 100644 --- a/components/nouns/NounsConventionsIndex.vue +++ b/components/nouns/NounsConventionsIndex.vue @@ -5,7 +5,7 @@ const nounsData = await loadNounsData();