Make a function to get all website settings
This commit is contained in:
133
astro/src/content/settings/settings.ts
Normal file
133
astro/src/content/settings/settings.ts
Normal file
@@ -0,0 +1,133 @@
|
||||
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
|
||||
}
|
||||
}
|
||||
124
astro/src/graphql/settings/settings.graphql
Normal file
124
astro/src/graphql/settings/settings.graphql
Normal file
@@ -0,0 +1,124 @@
|
||||
query getAllSettings {
|
||||
Website_Settings {
|
||||
id,
|
||||
date_created,
|
||||
date_updated,
|
||||
domain_name,
|
||||
title_template,
|
||||
application_name,
|
||||
primary_color,
|
||||
secondary_color,
|
||||
author_name,
|
||||
author_url,
|
||||
designer,
|
||||
developer,
|
||||
owner,
|
||||
copyright,
|
||||
twitter_id,
|
||||
twitter_handle
|
||||
},
|
||||
Blog_Settings {
|
||||
id,
|
||||
date_created,
|
||||
date_updated,
|
||||
enabled,
|
||||
title,
|
||||
subtext,
|
||||
index_route_template,
|
||||
blog_route_template
|
||||
},
|
||||
Project_Settings {
|
||||
id,
|
||||
date_created,
|
||||
date_updated,
|
||||
enabled,
|
||||
title,
|
||||
subtext,
|
||||
index_route_template,
|
||||
project_route_template
|
||||
},
|
||||
Photo_Settings {
|
||||
id,
|
||||
date_created,
|
||||
date_updated,
|
||||
enabled,
|
||||
categories_index_route_template_url,
|
||||
category_route_template_url,
|
||||
albums_per_category_page,
|
||||
category_icons {
|
||||
id,
|
||||
date_created,
|
||||
date_updated,
|
||||
photos_icon {
|
||||
id,
|
||||
created_on,
|
||||
filename_download,
|
||||
width,
|
||||
height
|
||||
},
|
||||
location_icon {
|
||||
id,
|
||||
created_on,
|
||||
filename_download,
|
||||
width,
|
||||
height
|
||||
},
|
||||
date_icon {
|
||||
id,
|
||||
created_on,
|
||||
filename_download,
|
||||
width,
|
||||
height
|
||||
}
|
||||
},
|
||||
album_route_template_url,
|
||||
photos_per_album_page,
|
||||
photo_route_template_url,
|
||||
photo_icons {
|
||||
id,
|
||||
date_created,
|
||||
date_updated,
|
||||
previous_icon {
|
||||
id,
|
||||
created_on,
|
||||
filename_download,
|
||||
width,
|
||||
height
|
||||
},
|
||||
next_icon {
|
||||
id,
|
||||
created_on,
|
||||
filename_download,
|
||||
width,
|
||||
height
|
||||
},
|
||||
close_icon {
|
||||
id,
|
||||
created_on,
|
||||
filename_download,
|
||||
width,
|
||||
height
|
||||
},
|
||||
download_icon {
|
||||
id,
|
||||
created_on,
|
||||
filename_download,
|
||||
width,
|
||||
height
|
||||
}
|
||||
}
|
||||
},
|
||||
Sitemap_Settings {
|
||||
id,
|
||||
date_created,
|
||||
date_updated,
|
||||
per_page
|
||||
},
|
||||
Plugin_Settings {
|
||||
id,
|
||||
date_created,
|
||||
date_updated,
|
||||
swetrix_id,
|
||||
swetrix_url
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,8 @@
|
||||
---
|
||||
import { getSettings } from "@/content/settings/settings"
|
||||
|
||||
const settings = await getSettings();
|
||||
console.log(settings);
|
||||
---
|
||||
|
||||
<html lang="en">
|
||||
|
||||
9
astro/src/types/settings/blog.d.ts
vendored
Normal file
9
astro/src/types/settings/blog.d.ts
vendored
Normal file
@@ -0,0 +1,9 @@
|
||||
type BlogSettings = {
|
||||
enabled: string;
|
||||
|
||||
title: string;
|
||||
subtext: string | null;
|
||||
|
||||
indexRouteTemplate: string;
|
||||
blogRouteTemplate: string;
|
||||
}
|
||||
37
astro/src/types/settings/photo.d.ts
vendored
Normal file
37
astro/src/types/settings/photo.d.ts
vendored
Normal file
@@ -0,0 +1,37 @@
|
||||
type WebsitePhotoSettings = {
|
||||
enabled: boolean;
|
||||
|
||||
categoryIndex: WebsitePhotoSettingsCategoryIndex;
|
||||
category: WebsitePhotoSettingsCategory;
|
||||
album: WebsitePhotoSettingsAlbum;
|
||||
photo: WebsitePhotoSettingsPhoto;
|
||||
}
|
||||
|
||||
type WebsitePhotoSettingsCategoryIndex = {
|
||||
indexRouteTemplate: string;
|
||||
}
|
||||
|
||||
type WebsitePhotoSettingsCategory = {
|
||||
routeTemplate: string;
|
||||
perPage: number;
|
||||
icons: {
|
||||
photos: PhotoProps;
|
||||
location: PhotoProps;
|
||||
date: PhotoProps;
|
||||
}
|
||||
}
|
||||
|
||||
type WebsitePhotoSettingsAlbum = {
|
||||
routeTemplate: string;
|
||||
perPage: number;
|
||||
}
|
||||
|
||||
type WebsitePhotoSettingsPhoto = {
|
||||
routeTemplate: string;
|
||||
icons: {
|
||||
previous: PhotoProps;
|
||||
next: PhotoProps;
|
||||
close: PhotoProps;
|
||||
download: PhotoProps;
|
||||
}
|
||||
}
|
||||
8
astro/src/types/settings/plugin.d.ts
vendored
Normal file
8
astro/src/types/settings/plugin.d.ts
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
type PluginSettings = {
|
||||
swetrix: PluginSettingsSwetrix | null;
|
||||
}
|
||||
|
||||
type PluginSettingsSwetrix = {
|
||||
id: string | null;
|
||||
url: string | null;
|
||||
}
|
||||
9
astro/src/types/settings/project.d.ts
vendored
Normal file
9
astro/src/types/settings/project.d.ts
vendored
Normal file
@@ -0,0 +1,9 @@
|
||||
type ProjectSettings = {
|
||||
enabled: string;
|
||||
|
||||
title: string;
|
||||
subtext: string | null;
|
||||
|
||||
indexRouteTemplate: string;
|
||||
projectRouteTemplate: string;
|
||||
}
|
||||
8
astro/src/types/settings/setting.d.ts
vendored
Normal file
8
astro/src/types/settings/setting.d.ts
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
type GlobalSettings = {
|
||||
website: WebsiteSettings;
|
||||
blog: BlogSettings;
|
||||
project: ProjectSettings;
|
||||
photo: WebsitePhotoSettings;
|
||||
sitemap: SitemapSettings;
|
||||
plugins: PluginSettings;
|
||||
}
|
||||
3
astro/src/types/settings/sitemap.d.ts
vendored
Normal file
3
astro/src/types/settings/sitemap.d.ts
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
type SitemapSettings = {
|
||||
perPage: number;
|
||||
}
|
||||
32
astro/src/types/settings/website.d.ts
vendored
Normal file
32
astro/src/types/settings/website.d.ts
vendored
Normal file
@@ -0,0 +1,32 @@
|
||||
type WebsiteSettings = {
|
||||
domainName: string;
|
||||
titleTemplate: string;
|
||||
applicationName: string;
|
||||
|
||||
colors: WebsiteSettingsColors;
|
||||
|
||||
author: WebsiteSettingsAuthor;
|
||||
|
||||
owner: string;
|
||||
designer: string;
|
||||
developer: string;
|
||||
copyright: string;
|
||||
|
||||
twitter: WebsiteSettingsTwitter;
|
||||
}
|
||||
|
||||
type WebsiteSettingsColors = {
|
||||
primary: string;
|
||||
secondary: string | null;
|
||||
}
|
||||
|
||||
type WebsiteSettingsAuthor = {
|
||||
name: string;
|
||||
url: string;
|
||||
}
|
||||
|
||||
type WebsiteSettingsTwitter = {
|
||||
id: string;
|
||||
handle: string;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user