@helpwave/hightide
Version:
helpwave's component and theming library
48 lines (44 loc) • 1.44 kB
JavaScript
// src/util/news.ts
import { z } from "zod";
// src/hooks/useLanguage.tsx
import { createContext, useContext, useEffect as useEffect2, useState as useState2 } from "react";
// src/hooks/useLocalStorage.tsx
import { useCallback, useEffect, useState } from "react";
// src/hooks/useLanguage.tsx
import { jsx } from "react/jsx-runtime";
var languages = ["en", "de"];
var DEFAULT_LANGUAGE = "en";
var LanguageContext = createContext({ language: DEFAULT_LANGUAGE, setLanguage: (v) => v });
// src/util/news.ts
var newsSchema = z.object({
title: z.string(),
description: z.string(),
date: z.string(),
image: z.string().url().optional(),
externalResource: z.string().url().optional(),
keys: z.array(z.string())
}).transform((obj) => {
let description = [obj.description];
if (obj.image) {
description = [new URL(obj.image), ...description];
}
return {
title: obj.title,
date: new Date(obj.date),
description,
externalResource: obj.externalResource ? new URL(obj.externalResource) : void 0,
keys: obj.keys
};
});
var newsListSchema = z.array(newsSchema);
var localizedNewsSchema = z.record(z.enum(languages), newsListSchema);
var filterNews = (localizedNews, requiredKeys) => {
return localizedNews.filter((news) => requiredKeys.every((value) => news.keys.includes(value)));
};
export {
filterNews,
localizedNewsSchema,
newsListSchema,
newsSchema
};
//# sourceMappingURL=news.mjs.map