Merge branch 'develop' of https://github.com/sergeyyarkov/yarkov.tech into develop

This commit is contained in:
Sergey Yarkov 2022-08-28 14:31:15 +03:00
commit 946d52fd7c
5 changed files with 57 additions and 30 deletions

View File

@ -14,10 +14,19 @@ export const SITE_METADATA: SiteMetadataType = {
telegramUrl: "https://t.me/sergeyyarkov", telegramUrl: "https://t.me/sergeyyarkov",
}, },
nav: [ nav: [
{ key: "navigation.articles", url: "/articles/" }, {
{ key: "navigation.projects", url: "/projects/" }, key: "navigation.articles",
url: "/articles/",
},
{
key: "navigation.projects",
url: "/projects/",
},
{ key: "navigation.about", url: "/about/" }, { key: "navigation.about", url: "/about/" },
{ key: "navigation.contacts", url: "/contacts/" }, {
key: "navigation.contacts",
url: "/contacts/",
},
], ],
projects: [ projects: [
{ {
@ -112,11 +121,20 @@ export const SITE_METADATA: SiteMetadataType = {
en: "Programming", en: "Programming",
}, },
list: [ list: [
{ icon: "nodejs", name: "Javascript/Typescript" }, {
{ icon: "language-c", name: "C Language" }, icon: "nodejs",
name: "Javascript/Typescript",
},
{
icon: "language-c",
name: "C Language",
},
{ icon: "mysql", name: "SQL" }, { icon: "mysql", name: "SQL" },
{ icon: "graphql", name: "GraphQL" }, { icon: "graphql", name: "GraphQL" },
{ icon: "avr", name: "AVR instruction set" }, {
icon: "avr",
name: "AVR instruction set",
},
], ],
}, },
{ {
@ -141,7 +159,10 @@ export const SITE_METADATA: SiteMetadataType = {
list: [ list: [
{ icon: "nodejs", name: "Node.js" }, { icon: "nodejs", name: "Node.js" },
{ icon: "docker", name: "Docker" }, { icon: "docker", name: "Docker" },
{ icon: "git-branch", name: "Git/gitflow" }, {
icon: "git-branch",
name: "Git/gitflow",
},
{ icon: "sass", name: "SASS" }, { icon: "sass", name: "SASS" },
{ icon: "webpack", name: "Webpack" }, { icon: "webpack", name: "Webpack" },
{ icon: "vite", name: "Vite.js" }, { icon: "vite", name: "Vite.js" },
@ -153,7 +174,10 @@ export const SITE_METADATA: SiteMetadataType = {
en: "Databases", en: "Databases",
}, },
list: [ list: [
{ icon: "postgresql", name: "PostgreSQL" }, {
icon: "postgresql",
name: "PostgreSQL",
},
{ icon: "mongodb", name: "MongoDB" }, { icon: "mongodb", name: "MongoDB" },
{ icon: "redis", name: "Redis" }, { icon: "redis", name: "Redis" },
], ],

View File

@ -17,7 +17,9 @@ export interface Props {
} }
export async function getStaticPaths() { export async function getStaticPaths() {
const modules = import.meta.glob<MDXInstance<ArticleType>>("../../content/articles/**/*.mdx", { eager: true }); const modules = import.meta.glob<MDXInstance<ArticleType>>("../../content/articles/**/*.mdx", {
eager: true,
});
const entries = Object.keys(modules).map((key) => [key, key.split("/").slice(6)[0]]); const entries = Object.keys(modules).map((key) => [key, key.split("/").slice(6)[0]]);
const formatted = formatArticlesByLangs(modules); const formatted = formatArticlesByLangs(modules);
@ -26,9 +28,14 @@ export async function getStaticPaths() {
const article = modules[key]; const article = modules[key];
const dirName = key.split("/").at(-3); const dirName = key.split("/").at(-3);
const published_at = new Date(article.frontmatter.published_at).toLocaleDateString("en-CA"); const published_at = new Date(article.frontmatter.published_at).toLocaleDateString("en-CA");
const slug = `${lang !== DEFAULT_LANGUAGE ? `${lang}/` : ""}blog/${published_at}/${article.frontmatter.slug}`; const slug = `${lang !== DEFAULT_LANGUAGE ? `${lang}/` : ""}blog/${published_at}/${
article.frontmatter.slug
}`;
return { params: { slug }, props: { article, alternateLangs: Object.keys(formatted[dirName]) } }; return {
params: { slug },
props: { article, alternateLangs: Object.keys(formatted[dirName]) },
};
}) })
.filter(({ props: { article } }) => !article.frontmatter.draft); .filter(({ props: { article } }) => !article.frontmatter.draft);
} }
@ -42,20 +49,6 @@ const { pathname } = Astro.url;
--- ---
<ArticleLayout lang={siteLang} content={frontmatter} canonicalUrl={canonicalUrl.href}> <ArticleLayout lang={siteLang} content={frontmatter} canonicalUrl={canonicalUrl.href}>
{
alternateLangs.length > 1 && (
<div class="languages-available">
{t("article.availableOn")}:
{alternateLangs
.filter((lang) => lang !== siteLang)
.map((lang) => (
<a href={DEFAULT_LANGUAGE === lang ? `/${pathname.split("/").slice(2).join("/")}` : `/${lang}${pathname}`}>
{languages[lang]}
</a>
))
.reduce((prev, curr) => [prev, ", ", curr])}
</div>
)
}
<Content /> <Content />
</ArticleLayout> </ArticleLayout>

View File

@ -4,7 +4,9 @@ import rss from "@astrojs/rss";
import { DEFAULT_LANGUAGE, SITE_METADATA } from "@root/config"; import { DEFAULT_LANGUAGE, SITE_METADATA } from "@root/config";
import * as utils from "@i18n/utils"; import * as utils from "@i18n/utils";
const data = import.meta.glob<MDXInstance<ArticleType>>("../../content/articles/**/*.mdx", { eager: true }); const data = import.meta.glob<MDXInstance<ArticleType>>("../../content/articles/**/*.mdx", {
eager: true,
});
const articles = Object.values(utils.formatArticlesByLangs(data)); const articles = Object.values(utils.formatArticlesByLangs(data));
const items = []; const items = [];

View File

@ -4,7 +4,9 @@ import { getLanguageFromURL } from "@utils/url";
class ArticleService { class ArticleService {
public getTranslatedArticles(Astro: Readonly<AstroGlobal>): MDXInstance<ArticleType>[] { public getTranslatedArticles(Astro: Readonly<AstroGlobal>): MDXInstance<ArticleType>[] {
const data = import.meta.glob<MDXInstance<ArticleType>>("../../content/articles/**/*.mdx", { eager: true }); const data = import.meta.glob<MDXInstance<ArticleType>>("../../content/articles/**/*.mdx", {
eager: true,
});
const modules = formatArticlesByLangs(data); const modules = formatArticlesByLangs(data);
const siteLang = getLanguageFromURL(Astro.url.pathname); const siteLang = getLanguageFromURL(Astro.url.pathname);
const articles: MDXInstance<ArticleType>[] = []; const articles: MDXInstance<ArticleType>[] = [];

10
src/types/main.d.ts vendored
View File

@ -28,7 +28,10 @@ declare global {
githubUrl: string; githubUrl: string;
telegramUrl: string; telegramUrl: string;
}; };
nav: Array<{ key: UIDictionaryKeys; url: string }>; nav: Array<{
key: UIDictionaryKeys;
url: string;
}>;
projects: Array<ProjectType>; projects: Array<ProjectType>;
skills: Array<SkillsType>; skills: Array<SkillsType>;
}; };
@ -57,7 +60,10 @@ declare global {
type SkillsType = { type SkillsType = {
title: Record<LanguageKeys, string>; title: Record<LanguageKeys, string>;
list: Array<{ icon?: string | undefined; name: string }>; list: Array<{
icon?: string | undefined;
name: string;
}>;
}; };
type ContactFieldsType = { type ContactFieldsType = {