122 lines
3.4 KiB
TypeScript

import {
GetLibraryItemsPreviewQuery,
GetWebsiteInterfaceQuery,
} from "graphql/operations-types";
export function prettyDate(
datePicker: GetLibraryItemsPreviewQuery["libraryItems"]["data"][number]["attributes"]["release_date"]
): string {
return (
datePicker.year +
"/" +
datePicker.month.toString().padStart(2, "0") +
"/" +
datePicker.day.toString().padStart(2, "0")
);
}
export function prettyPrice(
pricePicker: GetLibraryItemsPreviewQuery["libraryItems"]["data"][number]["attributes"]["price"]
): string {
return (
pricePicker.currency.data.attributes.symbol +
pricePicker.amount.toLocaleString()
);
}
export function prettySlug(slug: string, parentSlug?: string): string {
if (parentSlug && slug.startsWith(parentSlug))
slug = slug.substring(parentSlug.length + 1);
slug = slug.replace(new RegExp("-", "g"), " ");
slug = slug.replace(new RegExp("_", "g"), " ");
return capitalizeString(slug);
}
export function prettyinlineTitle(
pretitle: string,
title: string,
subtitle: string
): string {
let result = "";
if (pretitle) result += pretitle + ": ";
result += title;
if (subtitle) result += " - " + subtitle;
return result;
}
export function prettyItemType(
metadata: {
__typename: GetLibraryItemsPreviewQuery["libraryItems"]["data"][number]["attributes"]["metadata"][number]["__typename"];
},
langui: GetWebsiteInterfaceQuery["websiteInterfaces"]["data"][number]["attributes"]
): string {
const type = metadata.__typename;
switch (metadata.__typename) {
case "ComponentMetadataAudio":
return langui.library_item_type_audio;
case "ComponentMetadataBooks":
return langui.library_item_type_textual;
case "ComponentMetadataGame":
return langui.library_item_type_game;
case "ComponentMetadataVideo":
return langui.library_item_type_video;
case "ComponentMetadataOther":
return langui.library_item_type_other;
default:
return "";
}
}
export function prettyItemSubType(
metadata: GetLibraryItemsPreviewQuery["libraryItems"]["data"][number]["attributes"]["metadata"][number]
): string {
switch (metadata.__typename) {
case "ComponentMetadataAudio":
case "ComponentMetadataBooks":
case "ComponentMetadataVideo":
case "ComponentMetadataOther": {
return metadata.subtype.data.attributes.titles.length > 0
? metadata.subtype.data.attributes.titles[0].title
: prettySlug(metadata.subtype.data.attributes.slug);
}
case "ComponentMetadataGame":
return metadata.platform.data.attributes.short;
default:
return "";
}
}
export function prettyLanguage(code: string): string {
switch (code) {
case "en":
return "English";
case "es":
return "Español";
case "fr":
return "Français";
case "ja":
return "日本語";
case "en":
return "English";
case "xx":
return "██";
default:
return code;
}
}
export function capitalizeString(string: string): string {
function capitalizeWord(word: string): string {
return word.charAt(0).toUpperCase() + word.substring(1);
}
let words = string.split(" ");
words = words.map((word) => (word = capitalizeWord(word)));
return words.join(" ");
}
export function convertMmToInch(mm: number): string {
return (mm * 0.03937008).toPrecision(3);
}