Files
homepage/src/utils/config/dashboard.js
T

55 lines
1.6 KiB
JavaScript

import cache from "memory-cache";
import { serverSideTranslations } from "next-i18next/pages/serverSideTranslations";
import { bookmarksResponse, servicesResponse, widgetsResponse } from "utils/config/api-response";
import { getSettings } from "utils/config/config";
import createLogger from "utils/logger";
const cacheKey = "homepageDashboardData";
export function invalidateDashboardData() {
cache.del(cacheKey);
}
async function loadDashboardData() {
const { providers, ...settings } = getSettings();
const language = settings.language?.toLowerCase() === "zh-cn" ? "zh-Hans" : settings.language || "en";
const [services, bookmarks, widgets, translations] = await Promise.all([
servicesResponse(),
bookmarksResponse(),
widgetsResponse(),
serverSideTranslations(language),
]);
return {
initialSettings: settings,
fallback: {
"/api/services": services,
"/api/bookmarks": bookmarks,
"/api/widgets": widgets,
"/api/hash": false,
},
...translations,
};
}
export async function getDashboardData() {
let pending = cache.get(cacheKey);
if (!pending) {
pending = loadDashboardData().catch((error) => {
if (cache.get(cacheKey) === pending) invalidateDashboardData();
throw error;
});
cache.put(cacheKey, pending);
}
try {
return await pending;
} catch (error) {
createLogger("index").error(error);
return {
initialSettings: {},
fallback: { "/api/services": [], "/api/bookmarks": [], "/api/widgets": [], "/api/hash": false },
...(await serverSideTranslations("en")),
};
}
}