diff --git a/ccm-core-apiclient/src/main/typescript/entities/themes.ts b/ccm-core-apiclient/src/main/typescript/entities/themes.ts new file mode 100644 index 000000000..cccc53efb --- /dev/null +++ b/ccm-core-apiclient/src/main/typescript/entities/themes.ts @@ -0,0 +1,67 @@ +/** + * Entities used by the RESTful API for managing themes + * @packageDocumentation + */ + +import { + LocalizedString, + assertProperties, +} from "@libreccm/ccm-apiclient-commons"; + +export interface ThemeInfo { + themeManifest: ThemeManifest; + version: ThemeVersion; + provider: string; +} + +export interface ThemeManifest { + name: string; + type: string; + masterTheme: string; + title: LocalizedString; + description: LocalizedString; + defaultTemplate: string; +} + +export enum ThemeVersion { + DRAFT, + LIVE, +} + +export function buildThemeInfoFromRecord( + record: Record +): ThemeInfo { + assertProperties(record, ["themeManifest", "version", "provider"]); + + const themeManifest: ThemeManifest = buildThemeManifestFromRecord( + record.themeManifest as Record + ); + + return { + themeManifest, + version: record.version as ThemeVersion, + provider: record.provider as string, + }; +} + +export function buildThemeManifestFromRecord( + record: Record +): ThemeManifest { + assertProperties(record, [ + "name", + "type", + "masterTheme", + "title", + "description", + "defaultTemplate", + ]); + + return { + name: record.name as string, + type: record.type as string, + masterTheme: record.masterTheme as string, + title: record.title as LocalizedString, + description: record.description as LocalizedString, + defaultTemplate: record.defaultTemplate as string, + }; +}