Files
community-rule/lib/useCaseCompletedRule.ts
T
2026-05-19 22:16:08 -06:00

53 lines
1.6 KiB
TypeScript

import type { CommunityRuleSection } from "../app/components/type/CommunityRule/CommunityRule.types";
import { parsePublishedDocumentForCommunityRuleDisplay } from "./create/publishedDocumentToDisplaySections";
import type useCasesCompletedRules from "../messages/en/pages/useCasesCompletedRules.json";
import {
isUseCaseDetailSlug,
useCaseContentKeyForSlug,
type UseCaseDetailSlug,
} from "./useCaseSyntheticPost";
export type UseCasesCompletedRulesMessages = typeof useCasesCompletedRules;
export type UseCaseCompletedRuleFixture =
UseCasesCompletedRulesMessages[keyof UseCasesCompletedRulesMessages];
export function getUseCaseCompletedRuleFixture(
slug: UseCaseDetailSlug,
completedRules: UseCasesCompletedRulesMessages,
): UseCaseCompletedRuleFixture {
const contentKey = useCaseContentKeyForSlug(slug);
return completedRules[contentKey];
}
export function buildUseCaseCompletedRuleSections(
fixture: UseCaseCompletedRuleFixture,
): CommunityRuleSection[] {
return parsePublishedDocumentForCommunityRuleDisplay(fixture.document);
}
export function resolveUseCaseCompletedRule(
slug: string,
completedRules: UseCasesCompletedRulesMessages,
):
| {
slug: UseCaseDetailSlug;
fixture: UseCaseCompletedRuleFixture;
sections: CommunityRuleSection[];
}
| null {
if (!isUseCaseDetailSlug(slug)) {
return null;
}
const fixture = getUseCaseCompletedRuleFixture(slug, completedRules);
const sections = buildUseCaseCompletedRuleSections(fixture);
if (sections.length === 0) {
return null;
}
return {
slug,
fixture,
sections,
};
}