Files
playground-frontend/src/app/pages/projects/projects.component.ts

193 lines
6.8 KiB
TypeScript

import {Component, computed, inject, CUSTOM_ELEMENTS_SCHEMA} from '@angular/core';
import {MatCardModule} from '@angular/material/card';
import {MatChipsModule} from '@angular/material/chips';
import {MatIcon} from '@angular/material/icon';
import {TranslatePipe, TranslateService} from '@ngx-translate/core';
import {ActivatedRoute} from '@angular/router';
import {AssetsConstants} from '../../constants/AssetsConstants';
import {MatDialog} from '@angular/material/dialog';
import {MatButtonModule} from '@angular/material/button';
import {ProjectDialogComponent} from './dialog/project-dialog.component';
export interface Projects {
identifier: string;
title: string,
shortDescription: string,
introduction: string,
images: {
url: string,
source: string
}[],
icon: string,
assets: string,
links: {
name: string,
url: string
}[],
bulletPoints: string[],
isFeatured: boolean,
technologies: string[]
}
@Component({
selector: 'app-projects',
imports: [
MatCardModule,
MatChipsModule,
MatIcon,
TranslatePipe,
MatButtonModule
],
templateUrl: './projects.component.html',
styleUrl: './projects.component.scss',
schemas: [CUSTOM_ELEMENTS_SCHEMA],
})
export class ProjectsComponent {
private readonly route = inject(ActivatedRoute);
private readonly dialog = inject(MatDialog);
private readonly translateService = inject(TranslateService);
allProjects: Projects[] = [
{
identifier: "playground",
title: 'PROJECTS.PLAYGROUND.TITLE',
shortDescription: 'PROJECTS.PLAYGROUND.SHORT_DESCRIPTION',
introduction: 'PROJECTS.PLAYGROUND.INTRODUCTION',
images: [],
icon: 'web',
assets: '',
links: [{name: 'PROJECTS.LINK_TO_PROJECT', url: 'https://andreas-dahm.eu'}],
bulletPoints: [
'PROJECTS.PLAYGROUND.BULLET_1',
'PROJECTS.PLAYGROUND.BULLET_2',
'PROJECTS.PLAYGROUND.BULLET_3',
'PROJECTS.PLAYGROUND.BULLET_4',
],
isFeatured: false,
technologies: ['Angular', 'TypeScript', 'SCSS', 'HTML', 'GitHub Actions', 'Docker']
},
{
identifier: "elmucho",
title: 'PROJECTS.EL_MUCHO.TITLE',
shortDescription: 'PROJECTS.EL_MUCHO.SHORT_DESCRIPTION',
introduction: 'PROJECTS.EL_MUCHO.INTRODUCTION',
images: [
{ url: AssetsConstants.EL_MUCHO_1, source: ''},
{ url: AssetsConstants.EL_MUCHO_2, source: ''},
{ url: AssetsConstants.EL_MUCHO_3, source: ''},
{ url: AssetsConstants.EL_MUCHO_4, source: ''}
],
icon: 'sports_esports',
assets: '',
links: [{name: 'PROJECTS.LINK_TO_PROJECT', url: 'https.store.steampowered.com/app/1532640/El_Mucho/'}],
bulletPoints: [
'PROJECTS.EL_MUCHO.BULLET_1',
'PROJECTS.EL_MUCHO.BULLET_2',
'PROJECTS.EL_MUCHO.BULLET_3',
'PROJECTS.EL_MUCHO.BULLET_4',
],
isFeatured: true,
technologies: ['Unity', 'C#', 'Steamworks', 'Git']
},
{
identifier: "gamejams",
title: 'PROJECTS.GAME_JAMS.TITLE',
shortDescription: 'PROJECTS.GAME_JAMS.SHORT_DESCRIPTION',
introduction: 'PROJECTS.GAME_JAMS.INTRODUCTION',
images: [
{ url: AssetsConstants.GAME_JAMS_1, source: ''},
{ url: AssetsConstants.GAME_JAMS_2, source: ''},
{ url: AssetsConstants.GAME_JAMS_3, source: ''}
],
icon: 'videogame_asset',
assets: '',
links: [{name: 'PROJECTS.LINK_TO_PROJECT', url: 'https.itch.io/c/6628860/lobos-collection'}],
bulletPoints: [
'PROJECTS.GAME_JAMS.BULLET_1',
'PROJECTS.GAME_JAMS.BULLET_2',
'PROJECTS.GAME_JAMS.BULLET_3',
'PROJECTS.GAME_JAMS.BULLET_4',
],
isFeatured: false,
technologies: ['Unity', 'C#', 'Git']
},
{
identifier: "diploma",
title: 'PROJECTS.DIPLOMA.TITLE',
shortDescription: 'PROJECTS.DIPLOMA.SHORT_DESCRIPTION',
introduction: 'PROJECTS.DIPLOMA.INTRODUCTION',
images: [
{ url: AssetsConstants.DIPLOMA_1, source: ''},
{ url: AssetsConstants.DIPLOMA_2, source: ''},
{ url: AssetsConstants.DIPLOMA_3, source: ''},
{ url: AssetsConstants.DIPLOMA_4, source: ''},
{ url: AssetsConstants.DIPLOMA_5, source: ''},
{ url: AssetsConstants.DIPLOMA_6, source: ''}
],
icon: 'history_edu',
assets: AssetsConstants.DIPLOMA,
links: [{name: 'PROJECTS.LINK_TO_PROJECT', url: 'https.www.th-bingen.de'}],
bulletPoints: [
'PROJECTS.DIPLOMA.BULLET_1',
'PROJECTS.DIPLOMA.BULLET_2',
'PROJECTS.DIPLOMA.BULLET_3',
'PROJECTS.DIPLOMA.BULLET_4',
],
isFeatured: false,
technologies: ['C++', 'OpenGL', 'Qt', '3D-Scanner']
},
{
identifier: "tribble-the-homeserver",
title: 'PROJECTS.TRIBBLE.TITLE',
shortDescription: 'PROJECTS.TRIBBLE.SHORT_DESCRIPTION',
introduction: 'PROJECTS.TRIBBLE.INTRODUCTION',
images: [
{ url: AssetsConstants.TRIBBLE_1, source: 'https://dashboardicons.com/icons/docker-engine'},
{ url: AssetsConstants.TRIBBLE_2, source: 'https://upload.wikimedia.org/wikipedia/commons/0/03/Hostinger_Logo.png'},
{ url: AssetsConstants.TRIBBLE_3, source: 'https://dashboardicons.com/icons/gitea'},
{ url: AssetsConstants.TRIBBLE_4, source: 'https://commons.wikimedia.org/wiki/File:Traefik.logo.png'}
],
icon: 'dns',
assets: '',
links: [
{name: 'Ubuntu Server', url: 'https://ubuntu.com/server'},
{name: 'Docker', url: 'https://www.docker.com/'},
{name: 'Traefik', url: 'https://traefik.io/'},
{name: 'Gitea', url: 'https://gitea.io/'},
{name: 'Jellyfin', url: 'https://jellyfin.org/'},
{name: 'AdGuard Home', url: 'https://adguard.com/en/adguard-home/overview.html'},
{name: 'Paperless-ngx', url: 'https://paperless-ngx.com/'},
{name: 'Tailscale', url: 'https://tailscale.com/'}
],
bulletPoints: [
'PROJECTS.TRIBBLE.BULLET_1',
'PROJECTS.TRIBBLE.BULLET_2',
'PROJECTS.TRIBBLE.BULLET_3',
'PROJECTS.TRIBBLE.BULLET_4',
],
isFeatured: false,
technologies: ['Ubuntu Server', 'Docker', 'Traefik', 'Gitea', 'Jellyfin', 'AdGuard Home', 'Paperless-ngx', 'Tailscale']
}
]
featuredProject = computed(() => this.allProjects.find(p => p.isFeatured));
otherProjects = computed(() => this.allProjects.filter(p => !p.isFeatured));
constructor() {
this.route.queryParamMap.subscribe(params => {
// this.selectedKey.set(params.get('project'));
});
}
openProjectDialog(project: Projects) {
this.dialog.open(ProjectDialogComponent, {
data: project,
width: '90vw',
maxWidth: '900px',
});
}
}