122 lines
3.4 KiB
TypeScript
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);
|
|
}
|