Files
website/astro/src/content/settings/settings.ts
2026-03-07 19:22:06 +01:00

134 lines
5.4 KiB
TypeScript

import { print } from 'graphql';
import { createDirectusConnection } from "@/lib/directus";
import getSettingsQuery from '@/graphql/settings/settings.graphql';
export async function getSettings(): Promise<GlobalSettings> {
const client = await createDirectusConnection();
const result = await client.query(print(getSettingsQuery));
const websiteResults = result["Website_Settings"];
const websiteSettings: WebsiteSettings = {
domainName: websiteResults["domain_name"],
titleTemplate: websiteResults["title_template"],
applicationName: websiteResults["application_name"],
colors: {
primary: websiteResults["primary_color"],
secondary: websiteResults["secondary_color"]
},
author: {
name: websiteResults["author_name"],
url: websiteResults["author_url"]
},
owner: websiteResults["owner"],
designer: websiteResults["designer"],
developer: websiteResults["developer"],
copyright: websiteResults["copyright"],
twitter: {
id: websiteResults["twitter_id"],
handle: websiteResults["twitter_handle"]
}
};
const blogResults = result["Blog_Settings"];
const blogSettings: BlogSettings = {
enabled: blogResults["enabled"],
title: blogResults["title"],
subtext: blogResults["subtext"],
indexRouteTemplate: blogResults["index_route_template"],
blogRouteTemplate: blogResults["blog_route_template"]
};
const projectResults = result["Project_Settings"];
const projectSettings: ProjectSettings = {
enabled: projectResults["enabled"],
title: projectResults["title"],
subtext: projectResults["subtext"],
indexRouteTemplate: projectResults["index_route_template"],
projectRouteTemplate: projectResults["project_route_template"]
};
const photoResults = result["Photo_Settings"];
const photoSettings: WebsitePhotoSettings = {
enabled: photoResults["enabled"],
categoryIndex: {
indexRouteTemplate: photoResults["categories_index_route_template_url"]
},
category: {
routeTemplate: photoResults["category_route_template_url"],
perPage: photoResults["albums_per_category_page"],
icons: {
photos: {
url: photoResults["category_icons"]["photos_icon"]["filename_download"],
height: photoResults["category_icons"]["photos_icon"]["height"],
width: photoResults["category_icons"]["photos_icon"]["width"]
},
location: {
url: photoResults["category_icons"]["location_icon"]["filename_download"],
height: photoResults["category_icons"]["location_icon"]["height"],
width: photoResults["category_icons"]["location_icon"]["width"]
},
date: {
url: photoResults["category_icons"]["date_icon"]["filename_download"],
height: photoResults["category_icons"]["date_icon"]["height"],
width: photoResults["category_icons"]["date_icon"]["width"]
}
}
},
album: {
routeTemplate: photoResults["album_route_template_url"],
perPage: photoResults["photos_per_album_page"]
},
photo: {
routeTemplate: photoResults["photo_route_template_url"],
icons: {
previous: {
url: photoResults["photo_icons"]["previous_icon"]["filename_download"],
height: photoResults["photo_icons"]["previous_icon"]["height"],
width: photoResults["photo_icons"]["previous_icon"]["width"]
},
next: {
url: photoResults["photo_icons"]["next_icon"]["filename_download"],
height: photoResults["photo_icons"]["next_icon"]["height"],
width: photoResults["photo_icons"]["next_icon"]["width"]
},
close: {
url: photoResults["photo_icons"]["close_icon"]["filename_download"],
height: photoResults["photo_icons"]["close_icon"]["height"],
width: photoResults["photo_icons"]["close_icon"]["width"]
},
download: {
url: photoResults["photo_icons"]["download_icon"]["filename_download"],
height: photoResults["photo_icons"]["download_icon"]["height"],
width: photoResults["photo_icons"]["download_icon"]["width"]
}
}
}
};
const sitemapResults = result["Sitemap_Settings"];
const sitemapSettings: SitemapSettings = {
perPage: sitemapResults["per_page"]
};
const pluginResults = result["Plugin_Settings"];
const pluginSettings: PluginSettings = {
swetrix: {
id: pluginResults["swetrix_id"],
url: pluginResults["swetrix_url"]
}
}
if (pluginResults["swetrix_id"] === null && pluginResults["swetrix_url"] === null) {
pluginSettings.swetrix = null;
}
return {
website: websiteSettings,
blog: blogSettings,
project: projectSettings,
photo: photoSettings,
sitemap: sitemapSettings,
plugins: pluginSettings
}
}