From 5ad30a566133609fc9ce4e8b3591af0757541486 Mon Sep 17 00:00:00 2001 From: Tony Date: Tue, 24 Mar 2026 11:02:31 +0200 Subject: [PATCH 1/2] Add modal component, implemented viewChild for modal using the signals viewChild --- .../vehicle-card/vehicle-card.component.html | 3 ++ .../vehicle-card/vehicle-card.component.ts | 7 +++-- .../vehicle-detail-modal.html | 15 ++++++++++ .../vehicle-detail-modal.scss | 0 .../vehicle-detail-modal.spec.ts | 22 +++++++++++++++ .../vehicle-detail-modal.ts | 28 +++++++++++++++++++ 6 files changed, 73 insertions(+), 2 deletions(-) create mode 100644 src/app/features/vehicles/components/vehicle-detail-modal/vehicle-detail-modal.html create mode 100644 src/app/features/vehicles/components/vehicle-detail-modal/vehicle-detail-modal.scss create mode 100644 src/app/features/vehicles/components/vehicle-detail-modal/vehicle-detail-modal.spec.ts create mode 100644 src/app/features/vehicles/components/vehicle-detail-modal/vehicle-detail-modal.ts diff --git a/src/app/features/vehicles/components/vehicle-card/vehicle-card.component.html b/src/app/features/vehicles/components/vehicle-card/vehicle-card.component.html index 42aa1eb..05d0032 100644 --- a/src/app/features/vehicles/components/vehicle-card/vehicle-card.component.html +++ b/src/app/features/vehicles/components/vehicle-card/vehicle-card.component.html @@ -13,4 +13,7 @@

{{ vehicle().name }}

From {{ vehicle().price }}

{{ vehicle().description || 'test' }}

+ + + diff --git a/src/app/features/vehicles/components/vehicle-card/vehicle-card.component.ts b/src/app/features/vehicles/components/vehicle-card/vehicle-card.component.ts index c94085a..79cc724 100644 --- a/src/app/features/vehicles/components/vehicle-card/vehicle-card.component.ts +++ b/src/app/features/vehicles/components/vehicle-card/vehicle-card.component.ts @@ -1,9 +1,10 @@ -import { ChangeDetectionStrategy, Component, input } from '@angular/core'; +import { ChangeDetectionStrategy, Component, input, viewChild } from '@angular/core'; import { AnyVehicle } from '../../../../core/interfaces/vehicle.interface'; +import { VehicleDetailModal } from "../vehicle-detail-modal/vehicle-detail-modal"; @Component({ selector: 'app-vehicle-card', - imports: [], + imports: [VehicleDetailModal], templateUrl: './vehicle-card.component.html', styleUrl: './vehicle-card.component.scss', changeDetection: ChangeDetectionStrategy.OnPush, @@ -11,6 +12,8 @@ import { AnyVehicle } from '../../../../core/interfaces/vehicle.interface'; export class VehicleCardComponent { vehicle = input.required(); + readonly modal = viewChild.required('modal'); + /** * Used by the parent list to stagger the fade-in animation via * [style.animation-delay] bound on the host element. diff --git a/src/app/features/vehicles/components/vehicle-detail-modal/vehicle-detail-modal.html b/src/app/features/vehicles/components/vehicle-detail-modal/vehicle-detail-modal.html new file mode 100644 index 0000000..162155f --- /dev/null +++ b/src/app/features/vehicles/components/vehicle-detail-modal/vehicle-detail-modal.html @@ -0,0 +1,15 @@ + +
+ +

{{ vehicle().name }}

+
    +
  • Bodystyles: {{ vehicle().meta.bodystyles.join(', ') }}
  • +
  • Drivetrain: {{ vehicle().meta.drivetrain.join(', ') }}
  • +
  • Passengers: {{ vehicle().meta.passengers }}
  • +
  • Emissions: {{ emissionsLabel() }}
  • +
+
+ +
\ No newline at end of file diff --git a/src/app/features/vehicles/components/vehicle-detail-modal/vehicle-detail-modal.scss b/src/app/features/vehicles/components/vehicle-detail-modal/vehicle-detail-modal.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/app/features/vehicles/components/vehicle-detail-modal/vehicle-detail-modal.spec.ts b/src/app/features/vehicles/components/vehicle-detail-modal/vehicle-detail-modal.spec.ts new file mode 100644 index 0000000..acab1af --- /dev/null +++ b/src/app/features/vehicles/components/vehicle-detail-modal/vehicle-detail-modal.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { VehicleDetailModal } from './vehicle-detail-modal'; + +describe('VehicleDetailModal', () => { + let component: VehicleDetailModal; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [VehicleDetailModal], + }).compileComponents(); + + fixture = TestBed.createComponent(VehicleDetailModal); + component = fixture.componentInstance; + await fixture.whenStable(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/features/vehicles/components/vehicle-detail-modal/vehicle-detail-modal.ts b/src/app/features/vehicles/components/vehicle-detail-modal/vehicle-detail-modal.ts new file mode 100644 index 0000000..47e9675 --- /dev/null +++ b/src/app/features/vehicles/components/vehicle-detail-modal/vehicle-detail-modal.ts @@ -0,0 +1,28 @@ +import { Component, ElementRef, input, viewChild } from '@angular/core'; +import { AnyVehicle } from '../../../../core/interfaces/vehicle.interface'; + +@Component({ + selector: 'app-vehicle-detail-modal', + imports: [], + templateUrl: './vehicle-detail-modal.html', + styleUrl: './vehicle-detail-modal.scss', +}) +export class VehicleDetailModal { + +vehicle = input.required(); +emissionsLabel = input(); + +// viewChild give you a signal based reference to the element +private readonly dialog = viewChild.required>('dialog'); + +open() { + this.dialog().nativeElement.showModal(); +} + +close() { + this.dialog().nativeElement.close(); +} + + + +} From 776c5f50258aaa7dd0b8f9e7517980f760bfaa7e Mon Sep 17 00:00:00 2001 From: Tony Date: Tue, 24 Mar 2026 14:00:03 +0200 Subject: [PATCH 2/2] Added car silhouette for a fallback image. added favicon, add button component and styles to match designs --- public/android-chrome-192x192.png | Bin 0 -> 11121 bytes public/android-chrome-512x512.png | Bin 0 -> 50468 bytes public/apple-touch-icon.png | Bin 0 -> 10018 bytes public/fallback.svg | 20 ++++++ public/favicon-16x16.png | Bin 0 -> 367 bytes public/favicon-32x32.png | Bin 0 -> 794 bytes public/favicon.ico | Bin 15086 -> 15406 bytes .../vehicle-card/vehicle-card.component.html | 26 ++++--- .../vehicle-card/vehicle-card.component.scss | 22 +++++- .../vehicle-card/vehicle-card.component.ts | 20 ++++-- .../vehicle-detail-modal.scss | 64 ++++++++++++++++++ .../vehicle-detail-modal.spec.ts | 55 +++++++++++++++ .../shared/ui/button/button.component.html | 8 +++ .../shared/ui/button/button.component.scss | 27 ++++++++ src/app/shared/ui/button/button.component.ts | 13 ++++ .../car-silhouette.component.html | 34 ++++++++++ .../car-silhouette.component.scss | 5 ++ .../car-silhouette.component.ts | 13 ++++ src/index.html | 5 +- 19 files changed, 293 insertions(+), 19 deletions(-) create mode 100644 public/android-chrome-192x192.png create mode 100644 public/android-chrome-512x512.png create mode 100644 public/apple-touch-icon.png create mode 100644 public/fallback.svg create mode 100644 public/favicon-16x16.png create mode 100644 public/favicon-32x32.png create mode 100644 src/app/shared/ui/button/button.component.html create mode 100644 src/app/shared/ui/button/button.component.scss create mode 100644 src/app/shared/ui/button/button.component.ts create mode 100644 src/app/shared/ui/svg/car-silhouette/car-silhouette.component.html create mode 100644 src/app/shared/ui/svg/car-silhouette/car-silhouette.component.scss create mode 100644 src/app/shared/ui/svg/car-silhouette/car-silhouette.component.ts diff --git a/public/android-chrome-192x192.png b/public/android-chrome-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..d47761893098f4d54bae001a27ec16056bd3abd2 GIT binary patch literal 11121 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 literal 0 HcmV?d00001 diff --git a/public/android-chrome-512x512.png b/public/android-chrome-512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..70ec5f90cc06bef4dc497f1d9f74268a1caf46f4 GIT binary patch literal 50468 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 z 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 PPy$`lz^G@anmzbGQW*q^ literal 0 HcmV?d00001 diff --git a/public/apple-touch-icon.png b/public/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..77bb6e241bbba99165c4e2a332ee4defd6a25d6c GIT binary patch literal 10018 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 + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/favicon-16x16.png b/public/favicon-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..e68c17353be6c1fd8b8c390847e4b758c3393d90 GIT binary patch literal 367 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 literal 15086 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 Nr__JTFzvMr^FKp4S3v*( diff --git a/src/app/features/vehicles/components/vehicle-card/vehicle-card.component.html b/src/app/features/vehicles/components/vehicle-card/vehicle-card.component.html index 05d0032..167f01c 100644 --- a/src/app/features/vehicles/components/vehicle-card/vehicle-card.component.html +++ b/src/app/features/vehicles/components/vehicle-card/vehicle-card.component.html @@ -1,19 +1,27 @@
- + @if (showFallback()) { + + } @else { + + }

{{ vehicle().name }}

-

From {{ vehicle().price }}

-

{{ vehicle().description || 'test' }}

+

From {{ vehicle().price || 'unlisted' }}

+

{{ vehicle().description }}

- + +
+ +
diff --git a/src/app/features/vehicles/components/vehicle-card/vehicle-card.component.scss b/src/app/features/vehicles/components/vehicle-card/vehicle-card.component.scss index a1b8164..0e20e61 100644 --- a/src/app/features/vehicles/components/vehicle-card/vehicle-card.component.scss +++ b/src/app/features/vehicles/components/vehicle-card/vehicle-card.component.scss @@ -1,7 +1,9 @@ // Animation runs on the host element so that the parent can control // animation-delay via [style.animation-delay] without ViewEncapsulation issues. :host { - display: block; + display: flex; + flex-direction: column; + height: 100%; opacity: 0; animation: vehicle-card-fade-in 0.5s ease forwards; } @@ -19,6 +21,7 @@ padding: 16px; border-bottom: 1px solid #e0e0e0; background-color: #fff; + flex: 1; // ── Tablet and above: flip to vertical stacked layout ── @media (min-width: 768px) { @@ -67,6 +70,10 @@ } &__name { + border-top: 1px solid black; + border-bottom: 1px solid black; + width: fit-content; + padding-block: 4px; font-family: Georgia, 'Times New Roman', serif; font-size: 1rem; font-weight: 700; @@ -76,9 +83,8 @@ @media (min-width: 768px) { font-size: 1.0625rem; - text-decoration: underline; - text-underline-offset: 5px; margin-bottom: 14px; + margin-inline: auto; } } @@ -98,4 +104,14 @@ line-height: 1.45; margin: 0; } + + &__footer { + margin-top: auto; + padding: 12px 16px; + text-align: center; + + @media (min-width: 768px) { + padding: 16px; + } + } } diff --git a/src/app/features/vehicles/components/vehicle-card/vehicle-card.component.ts b/src/app/features/vehicles/components/vehicle-card/vehicle-card.component.ts index 79cc724..e32ea9c 100644 --- a/src/app/features/vehicles/components/vehicle-card/vehicle-card.component.ts +++ b/src/app/features/vehicles/components/vehicle-card/vehicle-card.component.ts @@ -1,10 +1,12 @@ -import { ChangeDetectionStrategy, Component, input, viewChild } from '@angular/core'; +import { ChangeDetectionStrategy, Component, computed, input, signal } from '@angular/core'; import { AnyVehicle } from '../../../../core/interfaces/vehicle.interface'; import { VehicleDetailModal } from "../vehicle-detail-modal/vehicle-detail-modal"; +import { ButtonComponent } from '../../../../shared/ui/button/button.component'; +import { CarSilhouetteComponent } from '../../../../shared/ui/svg/car-silhouette/car-silhouette.component'; @Component({ selector: 'app-vehicle-card', - imports: [VehicleDetailModal], + imports: [VehicleDetailModal, ButtonComponent, CarSilhouetteComponent], templateUrl: './vehicle-card.component.html', styleUrl: './vehicle-card.component.scss', changeDetection: ChangeDetectionStrategy.OnPush, @@ -12,25 +14,31 @@ import { VehicleDetailModal } from "../vehicle-detail-modal/vehicle-detail-modal export class VehicleCardComponent { vehicle = input.required(); - readonly modal = viewChild.required('modal'); - /** * Used by the parent list to stagger the fade-in animation via * [style.animation-delay] bound on the host element. */ index = input(0); + imageError = signal(false); + /** * Prefer the 16x9 image; CSS aspect-ratio + object-fit handles the * visual crop at all breakpoints so we never need to swap src. */ - get imageUrl(): string { + readonly imageUrl = computed(() => { const { media } = this.vehicle(); return media.find((m) => m.url.includes('16x9'))?.url ?? media[0]?.url ?? ''; - } + }); + + readonly showFallback = computed(() => !this.imageUrl() || this.imageError()); get emissionsLabel(): string { const { template, value } = this.vehicle().meta.emissions; return template.replace('$value', String(value)); } + + onImageError(): void { + this.imageError.set(true); + } } diff --git a/src/app/features/vehicles/components/vehicle-detail-modal/vehicle-detail-modal.scss b/src/app/features/vehicles/components/vehicle-detail-modal/vehicle-detail-modal.scss index e69de29..81927b3 100644 --- a/src/app/features/vehicles/components/vehicle-detail-modal/vehicle-detail-modal.scss +++ b/src/app/features/vehicles/components/vehicle-detail-modal/vehicle-detail-modal.scss @@ -0,0 +1,64 @@ +.vehicle-detail-modal { + border: none; + border-radius: 4px; + padding: 0; + width: min(560px, 90vw); + box-shadow: 0 8px 32px rgba(0, 0, 0, 0.35); + + &::backdrop { + background: rgba(0, 0, 0, 0.55); + backdrop-filter: blur(2px); + } + + &__content { + position: relative; + padding: 32px 28px 28px; + } + + &__close { + position: absolute; + top: 12px; + right: 14px; + background: none; + border: none; + font-size: 1.5rem; + line-height: 1; + cursor: pointer; + color: #555; + padding: 4px 8px; + border-radius: 4px; + transition: background 0.15s ease, color 0.15s ease; + + &:hover { + background: #f0f0f0; + color: #1a1a1a; + } + } + + &__title { + font-family: Georgia, 'Times New Roman', serif; + font-size: 1.25rem; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.04em; + margin: 0 0 20px; + padding-right: 32px; + } + + &__list { + list-style: none; + margin: 0; + padding: 0; + display: flex; + flex-direction: column; + gap: 10px; + + li { + font-size: 0.9rem; + color: #333; + padding: 10px 12px; + background: #f7f7f7; + border-radius: 4px; + } + } +} diff --git a/src/app/features/vehicles/components/vehicle-detail-modal/vehicle-detail-modal.spec.ts b/src/app/features/vehicles/components/vehicle-detail-modal/vehicle-detail-modal.spec.ts index acab1af..6743228 100644 --- a/src/app/features/vehicles/components/vehicle-detail-modal/vehicle-detail-modal.spec.ts +++ b/src/app/features/vehicles/components/vehicle-detail-modal/vehicle-detail-modal.spec.ts @@ -1,6 +1,23 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; import { VehicleDetailModal } from './vehicle-detail-modal'; +import { AnyVehicle } from '../../../../core/interfaces/vehicle.interface'; + +const mockVehicle: AnyVehicle = { + id: '1', + name: 'Test Vehicle', + modelYear: '2024', + apiUrl: '/api/vehicles/1', + media: [{ name: 'hero', url: '/img/hero-16x9.jpg' }], + description: 'A test vehicle description.', + price: '£30,000', + meta: { + passengers: 5, + drivetrain: ['AWD'], + bodystyles: ['SUV'], + emissions: { template: '$value g/km', value: 120 }, + }, +}; describe('VehicleDetailModal', () => { let component: VehicleDetailModal; @@ -13,10 +30,48 @@ describe('VehicleDetailModal', () => { fixture = TestBed.createComponent(VehicleDetailModal); component = fixture.componentInstance; + fixture.componentRef.setInput('vehicle', mockVehicle); + fixture.componentRef.setInput('emissionsLabel', '120 g/km'); await fixture.whenStable(); }); it('should create', () => { expect(component).toBeTruthy(); }); + + it('open() calls showModal() on the dialog element', () => { + const dialog = fixture.nativeElement.querySelector('dialog') as HTMLDialogElement; + const spy = spyOn(dialog, 'showModal'); + component.open(); + expect(spy).toHaveBeenCalled(); + }); + + it('close() calls close() on the dialog element', () => { + const dialog = fixture.nativeElement.querySelector('dialog') as HTMLDialogElement; + const spy = spyOn(dialog, 'close'); + component.close(); + expect(spy).toHaveBeenCalled(); + }); + + it('renders the vehicle name in an h2', () => { + fixture.detectChanges(); + const h2 = fixture.nativeElement.querySelector('h2') as HTMLElement; + expect(h2.textContent).toContain('Test Vehicle'); + }); + + it('renders the emissions label in a list item', () => { + fixture.detectChanges(); + const items = fixture.nativeElement.querySelectorAll('li') as NodeListOf; + const emissionsItem = Array.from(items).find(li => li.textContent?.includes('Emissions')); + expect(emissionsItem?.textContent).toContain('120 g/km'); + }); + + it('clicking the close button calls close() on the dialog element', () => { + fixture.detectChanges(); + const dialog = fixture.nativeElement.querySelector('dialog') as HTMLDialogElement; + const spy = spyOn(dialog, 'close'); + const closeBtn = fixture.nativeElement.querySelector('.vehicle-detail-modal__close') as HTMLButtonElement; + closeBtn.click(); + expect(spy).toHaveBeenCalled(); + }); }); diff --git a/src/app/shared/ui/button/button.component.html b/src/app/shared/ui/button/button.component.html new file mode 100644 index 0000000..dde4011 --- /dev/null +++ b/src/app/shared/ui/button/button.component.html @@ -0,0 +1,8 @@ + diff --git a/src/app/shared/ui/button/button.component.scss b/src/app/shared/ui/button/button.component.scss new file mode 100644 index 0000000..34e7fe0 --- /dev/null +++ b/src/app/shared/ui/button/button.component.scss @@ -0,0 +1,27 @@ +.btn { + display: block; + width: 100%; + padding: 10px 20px; + font-size: 0.875rem; + font-weight: 600; + letter-spacing: 0.04em; + text-transform: uppercase; + border: none; + cursor: pointer; + transition: opacity 0.2s ease; + + &:hover { + opacity: 0.85; + } + + &--primary { + background-color: #1a1a1a; + color: #fff; + } + + &--secondary { + background-color: #fff; + color: #1a1a1a; + border: 1px solid #1a1a1a; + } +} diff --git a/src/app/shared/ui/button/button.component.ts b/src/app/shared/ui/button/button.component.ts new file mode 100644 index 0000000..aa01065 --- /dev/null +++ b/src/app/shared/ui/button/button.component.ts @@ -0,0 +1,13 @@ +import { ChangeDetectionStrategy, Component, input } from '@angular/core'; + +@Component({ + selector: 'app-button', + templateUrl: './button.component.html', + styleUrl: './button.component.scss', + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class ButtonComponent { + label = input.required(); + variant = input<'primary' | 'secondary'>('primary'); + type = input<'button' | 'submit'>('button'); +} diff --git a/src/app/shared/ui/svg/car-silhouette/car-silhouette.component.html b/src/app/shared/ui/svg/car-silhouette/car-silhouette.component.html new file mode 100644 index 0000000..fd9aced --- /dev/null +++ b/src/app/shared/ui/svg/car-silhouette/car-silhouette.component.html @@ -0,0 +1,34 @@ + diff --git a/src/app/shared/ui/svg/car-silhouette/car-silhouette.component.scss b/src/app/shared/ui/svg/car-silhouette/car-silhouette.component.scss new file mode 100644 index 0000000..722a403 --- /dev/null +++ b/src/app/shared/ui/svg/car-silhouette/car-silhouette.component.scss @@ -0,0 +1,5 @@ +.car-silhouette { + display: block; + width: 100%; + height: 100%; +} diff --git a/src/app/shared/ui/svg/car-silhouette/car-silhouette.component.ts b/src/app/shared/ui/svg/car-silhouette/car-silhouette.component.ts new file mode 100644 index 0000000..d297361 --- /dev/null +++ b/src/app/shared/ui/svg/car-silhouette/car-silhouette.component.ts @@ -0,0 +1,13 @@ +import { ChangeDetectionStrategy, Component, input } from '@angular/core'; + +@Component({ + selector: 'app-car-silhouette', + templateUrl: './car-silhouette.component.html', + styleUrl: './car-silhouette.component.scss', + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class CarSilhouetteComponent { + primaryColor = input('#1a1a1a'); + secondaryColor = input('#f0f0f0'); + cssClass = input(''); +} diff --git a/src/index.html b/src/index.html index 2ea1d83..b03c200 100644 --- a/src/index.html +++ b/src/index.html @@ -5,7 +5,10 @@ AngularCodeTest - + + + +