move chronological block to the separated component
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
Dmitriy Pleshevskiy 2022-06-22 11:07:47 +03:00
parent b4b877cfff
commit de56865864
Signed by: pleshevskiy
GPG key ID: 1B59187B161C0215

View file

@ -13,158 +13,184 @@ export function WorksPage(ctx: Context): AnyNode {
return PageLayout(ctx, [ return PageLayout(ctx, [
E("div", classNames("content-width gap-v-1x5 responsive-typography"), [ E("div", classNames("content-width gap-v-1x5 responsive-typography"), [
H3(ctx.tr.Chronological), H3(ctx.tr.Chronological),
E("table", [], [ ChronologicalWorksTable([
E("thead", [], [ {
tr([ name: RepoLink("paren", "/pleshevskiy/paren"),
th("Name"), description: "Library for parsing and rendering information.",
th("Description"), roles: [Role.Author],
th("Role"), technologies: [Technology.TypeScript, Technology.Deno],
th("Stack"), start: "2022",
th("Start"), statuses: [Status.ActiveDeveloped, Status.Experimental],
th("Status"), },
]), {
]), name: RepoLink("hwt", "//github.com/pleshevskiy/hwt"),
E("tbody", [], [ description:
tr([ "healthy workaholic timer A tool that keeps you from breaking your health by working all day.",
td([RepoLink("paren", "/pleshevskiy/paren")]), roles: [Role.Author],
td("Library for parsing and rendering information."), technologies: [Technology.Rust],
td("author"), start: "2022",
td("TS, Deno"), statuses: [Status.ActiveDeveloped],
td("2022"), },
td(`${Status.ActiveDeveloped}, ${Status.Experimental}`), {
]), name: RepoLink("migra", "//github.com/pleshevskiy/migra"),
tr([ description: "Simple SQL migration manager for your project.",
td([RepoLink("hwt", "//github.com/pleshevskiy/hwt")]), roles: [Role.Author],
td( technologies: [Technology.Rust],
"healthy workaholic timer A tool that keeps you from breaking your health by working all day.", start: "2021",
), statuses: [Status.AsIs],
td("author"), },
td("Rust"), {
td("2022"), name: RepoLink(
td(Status.ActiveDeveloped), "ood_persistence",
]), "//github.com/pleshevskiy/ood_persistence",
tr([ ),
td([RepoLink("migra", "//github.com/pleshevskiy/migra")]), description:
td("Simple SQL migration manager for your project."), "Asynchronous and synchronous interfaces and persistence implementations for your OOD architecture ",
td("author"), roles: [Role.Author],
td("Rust"), technologies: [Technology.Rust],
td("2021"), start: "2021",
td(Status.AsIs), statuses: [Status.Deprecated, Status.Experimental],
]), },
tr([ {
td([ name: RepoLink(
RepoLink( "espruino-starter",
"ood_persistence", "//github.com/pleshevskiy/espruino-starter",
"//github.com/pleshevskiy/ood_persistence", ),
), description:
]), "Quickly start creating your new project on the espruino board or a board based on it.",
td( roles: [Role.Author],
"Asynchronous and synchronous interfaces and persistence implementations for your OOD architecture ", technologies: [Technology.JavaScript],
), start: "2021",
td("author"), statuses: [Status.AsIs],
td("Rust"), },
td("2021"), {
td(`${Status.Deprecated}, ${Status.Experimental}`), name: RepoLink(
]), "sonic-channel",
tr([ "//github.com/pleshevskiy/sonic-channel",
td([ ),
RepoLink( description: "Rust client for sonic search backend.",
"espruino-starter", roles: [Role.Author],
"//github.com/pleshevskiy/espruino-starter", technologies: [Technology.Rust],
), start: "2020",
]), statuses: [Status.PassivelyMaintained],
td( },
"Quickly start creating your new project on the espruino board or a board based on it.", {
), name: RepoLink(
td("author"), "react-rest-request",
td("JS"), "//github.com/pleshevskiy/react-rest-request",
td("2021"), ),
td(Status.AsIs), description:
]), "Minimalistic REST API client for React inspired by Apollo.",
tr([ roles: [Role.Author],
td([ technologies: [Technology.TypeScript, Technology.React],
RepoLink( start: "2020",
"sonic-channel", statuses: [Status.AsIs],
"//github.com/pleshevskiy/sonic-channel", },
), {
]), name: RepoLink("itconfig", "/pleshevskiy/itconfig"),
td("Rust client for sonic search backend."), description:
td("author"), "Easy build a configs from environment variables and use it in globally.",
td("Rust"), roles: [Role.Author],
td("2020"), technologies: [Technology.Rust],
td(Status.PassivelyMaintained), start: "2019",
]), statuses: [Status.PassivelyMaintained],
tr([ },
td([ {
RepoLink( name: Link("Cabinet Master Progress", {
"react-rest-request", href: "https://cabinet.masterprogress.ru",
"//github.com/pleshevskiy/react-rest-request", }),
), description:
]), "Student's cabinet of the educational center Master Progress (SSR + SPA)",
td("Minimalistic REST API client for React inspired by Apollo."), roles: [Role.TechLead],
td("author"), technologies: [Technology.Python, Technology.Flask, Technology.React],
td("TS, React"), start: "2019",
td("2020"), statuses: [Status.PassivelyMaintained],
td(Status.AsIs), },
]), {
tr([ name: Link("Master Progress", { href: "https://masterprogress.ru" }),
td([RepoLink("itconfig", "/pleshevskiy/itconfig")]), description:
td( "Main website of the educational center Master Progress (SSR + Forms)",
"Easy build a configs from environment variables and use it in globally.", roles: [Role.TechLead],
), technologies: [Technology.Python, Technology.Flask],
td("author"), start: "2018",
td("Rust"), statuses: [Status.PassivelyMaintained],
td("2019"), },
td(Status.PassivelyMaintained), {
]), name: RepoLink("ictmpl", "//github.com/pleshevskiy/ictmpl"),
tr([ description: "Generate projects from templates",
td([ roles: [Role.Author],
Link("Cabinet Master Progress", { technologies: [Technology.Python],
href: "https://cabinet.masterprogress.ru", start: "2018",
}), statuses: [Status.AsIs],
]), },
td( {
"Student's cabinet of the educational center Master Progress (SSR + SPA)", name: RepoLink("jjcrypto", "//github.com/pleshevskiy/ictmpl"),
), description: "Javascript encoder and decoder",
td("Tech lead"), roles: [Role.Author],
td("Python, Flask, React"), technologies: [Technology.Php],
td("2019"), start: "2015",
td(Status.PassivelyMaintained), statuses: [Status.AsIs],
]), },
tr([
td([
Link("Master Progress", { href: "https://masterprogress.ru" }),
]),
td(
"Main website of the educational center Master Progress (SSR + Forms)",
),
td("Tech lead"),
td("Python, Flask"),
td("2018"),
td(Status.PassivelyMaintained),
]),
tr([
td([RepoLink("ictmpl", "//github.com/pleshevskiy/ictmpl")]),
td("Generate projects from templates"),
td("author"),
td("Python"),
td("2018"),
td(Status.AsIs),
]),
tr([
td([RepoLink("jjcrypto", "//github.com/pleshevskiy/ictmpl")]),
td("Javascript encoder and decoder"),
td("author"),
td("PHP"),
td("2015"),
td(Status.AsIs),
]),
]),
]), ]),
]), ]),
]); ]);
} }
function ChronologicalWorksTable(works: Work[]): AnyNode {
return E("table", [], [
E("thead", [], [
tr([
th("Name"),
th("Description"),
th("Role"),
th("Stack"),
th("Start"),
th("Status"),
]),
]),
E(
"tbody",
[],
works.map((work) => {
return tr([
td([work.name]),
td(work.description),
td(work.roles.join(", ")),
td(work.technologies.join(", ")),
td(work.start),
td(work.statuses.join(", ")),
]);
}),
),
]);
}
interface Work {
name: AnyNode;
description: string;
roles: Role[];
technologies: Technology[];
start: string;
statuses: Status[];
}
enum Role {
Author = "author",
TechLead = "tech lead",
}
enum Technology {
JavaScript = "JS",
TypeScript = "TS",
Rust = "Rust",
Python = "Python",
Php = "PHP",
Deno = "Deno",
NodeJS = "NodeJS",
Flask = "Flask",
React = "React",
}
enum Status { enum Status {
// New features are being added and bugs are being fixed. // New features are being added and bugs are being fixed.
ActiveDeveloped = "actively-developed", ActiveDeveloped = "actively-developed",