From f8e7b816bc5bff0a5371ba7d4e0332bcf341a0a4 Mon Sep 17 00:00:00 2001 From: Igor Propisnov Date: Mon, 29 Jul 2024 23:10:43 +0200 Subject: [PATCH] Event creating W.I.P --- frontend/src/app/app.routes.ts | 20 ++++- .../layout/main-layout/layout.component.html | 5 +- .../create-event/create-event.component.html | 32 +++++++ .../create-event/create-event.component.ts | 76 +++++++++++++++++ .../steps/basic-step.component.html | 85 +++++++++++++++++++ .../steps/basic-step.component.ts | 13 +++ .../event-empty-state.component.html | 24 ++++++ .../event-empty-state.component.ts | 17 ++++ .../event-root/event-root.component.html | 2 +- .../pages/event-root/event-root.component.ts | 4 +- package.json | 3 + 11 files changed, 271 insertions(+), 10 deletions(-) create mode 100644 frontend/src/app/pages/event-root/create-event/create-event.component.html create mode 100644 frontend/src/app/pages/event-root/create-event/create-event.component.ts create mode 100644 frontend/src/app/pages/event-root/create-event/steps/basic-step.component.html create mode 100644 frontend/src/app/pages/event-root/create-event/steps/basic-step.component.ts create mode 100644 frontend/src/app/pages/event-root/event-empty-state/event-empty-state.component.html create mode 100644 frontend/src/app/pages/event-root/event-empty-state/event-empty-state.component.ts diff --git a/frontend/src/app/app.routes.ts b/frontend/src/app/app.routes.ts index e445049..f0d58b1 100644 --- a/frontend/src/app/app.routes.ts +++ b/frontend/src/app/app.routes.ts @@ -29,10 +29,22 @@ const protectedRoutes: Routes = [ }, { path: 'event', - loadComponent: () => - import('./pages/event-root/event-root.component').then( - (m) => m.EventRootComponent - ), + children: [ + { + path: '', + loadComponent: () => + import('./pages/event-root/event-root.component').then( + (m) => m.EventRootComponent + ), + }, + { + path: 'create', + loadComponent: () => + import('./pages/event-root/create-event/create-event.component').then( + (m) => m.CreateEventComponent + ), + }, + ], }, ]; diff --git a/frontend/src/app/layout/main-layout/layout.component.html b/frontend/src/app/layout/main-layout/layout.component.html index e923857..2ba8ef2 100644 --- a/frontend/src/app/layout/main-layout/layout.component.html +++ b/frontend/src/app/layout/main-layout/layout.component.html @@ -144,10 +144,7 @@ -
-

isCollapsed: {{ isCollapsed }}

-

isDesktopCollapsed: {{ isDesktopCollapsed }}

-

showMobileMenu: {{ showMobileMenu }}

+
diff --git a/frontend/src/app/pages/event-root/create-event/create-event.component.html b/frontend/src/app/pages/event-root/create-event/create-event.component.html new file mode 100644 index 0000000..0f9bd86 --- /dev/null +++ b/frontend/src/app/pages/event-root/create-event/create-event.component.html @@ -0,0 +1,32 @@ +
+
+
+
+ @if (currentStep() === 0) { + + } +
+
+
+ +
+ + +
    + @for (step of steps; track $index) { +
  • + {{ step }} +
  • + } +
+
+
diff --git a/frontend/src/app/pages/event-root/create-event/create-event.component.ts b/frontend/src/app/pages/event-root/create-event/create-event.component.ts new file mode 100644 index 0000000..307ba6b --- /dev/null +++ b/frontend/src/app/pages/event-root/create-event/create-event.component.ts @@ -0,0 +1,76 @@ +import { CommonModule } from '@angular/common'; +import { + Component, + ChangeDetectionStrategy, + signal, + WritableSignal, + ElementRef, + OnInit, +} from '@angular/core'; + +import { + BackgroundPatternService, + ThemeService, +} from '../../../shared/service'; + +import { BasicStepComponent } from './steps/basic-step.component'; + +@Component({ + selector: 'app-create-event', + standalone: true, + providers: [], + imports: [BasicStepComponent, CommonModule], + templateUrl: './create-event.component.html', + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class CreateEventComponent implements OnInit { + public actionbar: { 'background-image': string } | null = null; + public currentStep: WritableSignal = signal(0); + public readonly steps: string[] = ['Basic', 'Tickets', 'Review']; + + public constructor( + private readonly backgroundPatternService: BackgroundPatternService, + private readonly themeService: ThemeService, + private readonly el: ElementRef + ) {} + + public ngOnInit(): void { + this.setBackground(); + } + + public setBackground(): void { + const theme = this.themeService.getTheme(); + let opacity: number; + + if (theme === 'dark') { + opacity = 0.05; + } else { + opacity = 0.1; + } + + const colorPrimaryC = getComputedStyle( + this.el.nativeElement + ).getPropertyValue('--pc'); + + const svgUrlActionbar = this.backgroundPatternService.getBankNotePattern( + colorPrimaryC, + opacity + ); + + this.actionbar = { + 'background-image': `url("${svgUrlActionbar}")`, + }; + } + + public nextStep(): void { + if (this.currentStep() < this.steps.length - 1) { + this.currentStep.set(this.currentStep() + 1); + } + } + + public prevStep(): void { + if (this.currentStep() > 0) { + this.currentStep.set(this.currentStep() - 1); + } + } +} diff --git a/frontend/src/app/pages/event-root/create-event/steps/basic-step.component.html b/frontend/src/app/pages/event-root/create-event/steps/basic-step.component.html new file mode 100644 index 0000000..335dad5 --- /dev/null +++ b/frontend/src/app/pages/event-root/create-event/steps/basic-step.component.html @@ -0,0 +1,85 @@ +
+

Event Basic Information

+ +
+ + +
+ +
+
+ + +
+
+ + +
+
+ +
+ + +
+ +
+ + +
+ +
+
+ + +
+
+ + +
+
+ +
+ + +
+
diff --git a/frontend/src/app/pages/event-root/create-event/steps/basic-step.component.ts b/frontend/src/app/pages/event-root/create-event/steps/basic-step.component.ts new file mode 100644 index 0000000..b6b0093 --- /dev/null +++ b/frontend/src/app/pages/event-root/create-event/steps/basic-step.component.ts @@ -0,0 +1,13 @@ +import { ChangeDetectionStrategy, Component } from '@angular/core'; + +@Component({ + selector: 'app-basic-step', + standalone: true, + templateUrl: './basic-step.component.html', + providers: [], + imports: [], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class BasicStepComponent { + public constructor() {} +} diff --git a/frontend/src/app/pages/event-root/event-empty-state/event-empty-state.component.html b/frontend/src/app/pages/event-root/event-empty-state/event-empty-state.component.html new file mode 100644 index 0000000..2505cd9 --- /dev/null +++ b/frontend/src/app/pages/event-root/event-empty-state/event-empty-state.component.html @@ -0,0 +1,24 @@ +
+
+
+

No Events Yet

+ +
+

+ Every great event starts with a single step. Take yours today! +

+
+ +

+ Create your first event and start +
+ selling tickets today! +

+ +
+
+
diff --git a/frontend/src/app/pages/event-root/event-empty-state/event-empty-state.component.ts b/frontend/src/app/pages/event-root/event-empty-state/event-empty-state.component.ts new file mode 100644 index 0000000..bae31d8 --- /dev/null +++ b/frontend/src/app/pages/event-root/event-empty-state/event-empty-state.component.ts @@ -0,0 +1,17 @@ +import { ChangeDetectionStrategy, Component } from '@angular/core'; +import { Router } from '@angular/router'; + +@Component({ + selector: 'app-event-empty-state', + standalone: true, + templateUrl: './event-empty-state.component.html', + providers: [], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class EventEmptyStateComponent { + public constructor(private readonly router: Router) {} + + public navigateToCreateEvent(): void { + this.router.navigate(['/event/create']); + } +} diff --git a/frontend/src/app/pages/event-root/event-root.component.html b/frontend/src/app/pages/event-root/event-root.component.html index 164b9f2..5ca8bb2 100644 --- a/frontend/src/app/pages/event-root/event-root.component.html +++ b/frontend/src/app/pages/event-root/event-root.component.html @@ -1 +1 @@ -

Event Root Works

+ diff --git a/frontend/src/app/pages/event-root/event-root.component.ts b/frontend/src/app/pages/event-root/event-root.component.ts index 5d02ac9..10d2fe9 100644 --- a/frontend/src/app/pages/event-root/event-root.component.ts +++ b/frontend/src/app/pages/event-root/event-root.component.ts @@ -1,10 +1,12 @@ import { CommonModule } from '@angular/common'; import { Component, ChangeDetectionStrategy } from '@angular/core'; +import { EventEmptyStateComponent } from './event-empty-state/event-empty-state.component'; + @Component({ selector: 'app-event-root', standalone: true, - imports: [CommonModule], + imports: [CommonModule, EventEmptyStateComponent], providers: [], templateUrl: './event-root.component.html', changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/package.json b/package.json index f932772..d308e65 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,9 @@ { "name": "mvp-ticket", "version": "1.0.0", + "engines": { + "node": "18.17.1" + }, "description": "", "main": "index.js", "scripts": {