Compare commits
7 Commits
801250ea5f
...
3076900a07
Author | SHA1 | Date | |
---|---|---|---|
|
3076900a07 | ||
|
7e482d1d90 | ||
|
450830676b | ||
|
b80ebafa51 | ||
|
188f7b6aa2 | ||
|
07e7c8845d | ||
|
157b49ed85 |
2
.gitignore
vendored
2
.gitignore
vendored
@ -103,7 +103,6 @@ dist
|
|||||||
|
|
||||||
# vuepress v2.x temp and cache directory
|
# vuepress v2.x temp and cache directory
|
||||||
.temp
|
.temp
|
||||||
.cache
|
|
||||||
|
|
||||||
# Docusaurus cache and generated files
|
# Docusaurus cache and generated files
|
||||||
.docusaurus
|
.docusaurus
|
||||||
@ -132,3 +131,4 @@ dist
|
|||||||
|
|
||||||
#angular
|
#angular
|
||||||
.angular/
|
.angular/
|
||||||
|
/.DS_Store
|
||||||
|
@ -34,7 +34,7 @@
|
|||||||
"@angular-devkit/build-angular": "^14.1.3",
|
"@angular-devkit/build-angular": "^14.1.3",
|
||||||
"@angular/cli": "~14.1.3",
|
"@angular/cli": "~14.1.3",
|
||||||
"@angular/compiler-cli": "^14.1.0",
|
"@angular/compiler-cli": "^14.1.0",
|
||||||
"@types/dompurify": "2.2.3",
|
"@schematics/angular": "^14.2.6",
|
||||||
"@types/jasmine": "~4.0.0",
|
"@types/jasmine": "~4.0.0",
|
||||||
"jasmine-core": "~4.2.0",
|
"jasmine-core": "~4.2.0",
|
||||||
"karma": "~6.4.0",
|
"karma": "~6.4.0",
|
||||||
|
@ -0,0 +1,7 @@
|
|||||||
|
a {
|
||||||
|
padding: 10px;
|
||||||
|
|
||||||
|
&.active {
|
||||||
|
background: green;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,2 @@
|
|||||||
|
<h1>{{game.title}}</h1>
|
||||||
|
<p>{{game.description}}</p>
|
@ -0,0 +1,3 @@
|
|||||||
|
:host {
|
||||||
|
display: block;
|
||||||
|
}
|
@ -0,0 +1,23 @@
|
|||||||
|
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||||
|
|
||||||
|
import { GameInfoComponent } from './game-info.component';
|
||||||
|
|
||||||
|
describe('GameInfoComponent', () => {
|
||||||
|
let component: GameInfoComponent;
|
||||||
|
let fixture: ComponentFixture<GameInfoComponent>;
|
||||||
|
|
||||||
|
beforeEach(async () => {
|
||||||
|
await TestBed.configureTestingModule({
|
||||||
|
declarations: [ GameInfoComponent ]
|
||||||
|
})
|
||||||
|
.compileComponents();
|
||||||
|
|
||||||
|
fixture = TestBed.createComponent(GameInfoComponent);
|
||||||
|
component = fixture.componentInstance;
|
||||||
|
fixture.detectChanges();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should create', () => {
|
||||||
|
expect(component).toBeTruthy();
|
||||||
|
});
|
||||||
|
});
|
@ -0,0 +1,15 @@
|
|||||||
|
import { Component, Input, OnInit } from '@angular/core';
|
||||||
|
import { Game } from 'src/app/interfaces/game.interface';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'app-game-info[game]',
|
||||||
|
templateUrl: './game-info.component.html',
|
||||||
|
styleUrls: ['./game-info.component.scss'],
|
||||||
|
})
|
||||||
|
export class GameInfoComponent implements OnInit {
|
||||||
|
@Input() game!: Game;
|
||||||
|
|
||||||
|
constructor() {}
|
||||||
|
|
||||||
|
ngOnInit(): void {}
|
||||||
|
}
|
@ -0,0 +1,3 @@
|
|||||||
|
<div class="game" [ngClass]="{'active': active}">
|
||||||
|
<div class="game-title">{{game.title}}</div>
|
||||||
|
</div>
|
@ -0,0 +1,11 @@
|
|||||||
|
:host {
|
||||||
|
display: block;
|
||||||
|
|
||||||
|
.game {
|
||||||
|
|
||||||
|
&.active {
|
||||||
|
background-color: green;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,23 @@
|
|||||||
|
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||||
|
|
||||||
|
import { GameItemComponent } from './game-item.component';
|
||||||
|
|
||||||
|
describe('GameItemComponent', () => {
|
||||||
|
let component: GameItemComponent;
|
||||||
|
let fixture: ComponentFixture<GameItemComponent>;
|
||||||
|
|
||||||
|
beforeEach(async () => {
|
||||||
|
await TestBed.configureTestingModule({
|
||||||
|
declarations: [ GameItemComponent ]
|
||||||
|
})
|
||||||
|
.compileComponents();
|
||||||
|
|
||||||
|
fixture = TestBed.createComponent(GameItemComponent);
|
||||||
|
component = fixture.componentInstance;
|
||||||
|
fixture.detectChanges();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should create', () => {
|
||||||
|
expect(component).toBeTruthy();
|
||||||
|
});
|
||||||
|
});
|
@ -0,0 +1,16 @@
|
|||||||
|
import { Component, Input, OnInit } from '@angular/core';
|
||||||
|
import { Game } from 'src/app/interfaces/game.interface';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'app-game-item[game]',
|
||||||
|
templateUrl: './game-item.component.html',
|
||||||
|
styleUrls: ['./game-item.component.scss'],
|
||||||
|
})
|
||||||
|
export class GameItemComponent implements OnInit {
|
||||||
|
@Input() game!: Game;
|
||||||
|
@Input() active: boolean = false;
|
||||||
|
|
||||||
|
constructor() {}
|
||||||
|
|
||||||
|
ngOnInit(): void {}
|
||||||
|
}
|
4
src/app/components/games-bar/games-bar.component.html
Normal file
4
src/app/components/games-bar/games-bar.component.html
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
<div class="games">
|
||||||
|
<app-game-item [active]="i === activeGame" *ngFor="let game of games; index as i" [game]="game" (click)="activeGame = i"></app-game-item>
|
||||||
|
</div>
|
||||||
|
<app-game-info *ngIf="activeGame !== null" [game]="games[activeGame]"></app-game-info>
|
11
src/app/components/games-bar/games-bar.component.scss
Normal file
11
src/app/components/games-bar/games-bar.component.scss
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
:host {
|
||||||
|
display: flex;
|
||||||
|
|
||||||
|
.games {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
.game-info {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
23
src/app/components/games-bar/games-bar.component.spec.ts
Normal file
23
src/app/components/games-bar/games-bar.component.spec.ts
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||||
|
|
||||||
|
import { GamesBarComponent } from './games-bar.component';
|
||||||
|
|
||||||
|
describe('GamesBarComponent', () => {
|
||||||
|
let component: GamesBarComponent;
|
||||||
|
let fixture: ComponentFixture<GamesBarComponent>;
|
||||||
|
|
||||||
|
beforeEach(async () => {
|
||||||
|
await TestBed.configureTestingModule({
|
||||||
|
declarations: [ GamesBarComponent ]
|
||||||
|
})
|
||||||
|
.compileComponents();
|
||||||
|
|
||||||
|
fixture = TestBed.createComponent(GamesBarComponent);
|
||||||
|
component = fixture.componentInstance;
|
||||||
|
fixture.detectChanges();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should create', () => {
|
||||||
|
expect(component).toBeTruthy();
|
||||||
|
});
|
||||||
|
});
|
26
src/app/components/games-bar/games-bar.component.ts
Normal file
26
src/app/components/games-bar/games-bar.component.ts
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
import { Component, OnInit } from '@angular/core';
|
||||||
|
import { Game } from 'src/app/interfaces/game.interface';
|
||||||
|
import { GetGames } from 'src/app/services/go';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'app-games-bar',
|
||||||
|
templateUrl: './games-bar.component.html',
|
||||||
|
styleUrls: ['./games-bar.component.scss'],
|
||||||
|
})
|
||||||
|
export class GamesBarComponent implements OnInit {
|
||||||
|
games: Game[] = [];
|
||||||
|
activeGame: Game['id'] | null = null;
|
||||||
|
|
||||||
|
constructor() {}
|
||||||
|
|
||||||
|
ngOnInit(): void {
|
||||||
|
this.getGames();
|
||||||
|
}
|
||||||
|
|
||||||
|
getGames() {
|
||||||
|
GetGames().then((value) => {
|
||||||
|
console.log(value);
|
||||||
|
this.games = value;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
12
src/app/components/games-bar/games-bar.module.ts
Normal file
12
src/app/components/games-bar/games-bar.module.ts
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
import { NgModule } from '@angular/core';
|
||||||
|
import { CommonModule } from '@angular/common';
|
||||||
|
import { GamesBarComponent } from './games-bar.component';
|
||||||
|
import { GameItemComponent } from './game-item/game-item.component';
|
||||||
|
import { GameInfoComponent } from './game-info/game-info.component';
|
||||||
|
|
||||||
|
@NgModule({
|
||||||
|
declarations: [GamesBarComponent, GameItemComponent, GameInfoComponent],
|
||||||
|
imports: [CommonModule],
|
||||||
|
exports: [GamesBarComponent, GameItemComponent, GameInfoComponent],
|
||||||
|
})
|
||||||
|
export class GamesBarModule {}
|
6
src/app/interfaces/game.interface.ts
Normal file
6
src/app/interfaces/game.interface.ts
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
export interface Game {
|
||||||
|
id: number;
|
||||||
|
title: string;
|
||||||
|
image: string;
|
||||||
|
description: string;
|
||||||
|
}
|
@ -5,6 +5,6 @@ const routes: Routes = [];
|
|||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
imports: [RouterModule.forRoot(routes)],
|
imports: [RouterModule.forRoot(routes)],
|
||||||
exports: [RouterModule]
|
exports: [RouterModule],
|
||||||
})
|
})
|
||||||
export class AppRoutingModule { }
|
export class AppRoutingModule {}
|
@ -1,21 +1,32 @@
|
|||||||
|
import { Game } from '../interfaces/game.interface';
|
||||||
|
|
||||||
export interface Go extends Window {
|
export interface Go extends Window {
|
||||||
GetVersion: () => string;
|
GetGames: () => Promise<Game[]>;
|
||||||
RunGame: () => string;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface GoCallback extends Window {
|
export interface GoCallback extends Window {
|
||||||
SetVersion: (value: string) => void;
|
SetVersion: (value: string) => void;
|
||||||
}
|
}
|
||||||
|
|
||||||
let { GetVersion, RunGame} = window as unknown as Go;
|
let { GetGames } = window as unknown as Go;
|
||||||
let { SetVersion } = window as unknown as GoCallback;
|
let { SetVersion } = window as unknown as GoCallback;
|
||||||
|
|
||||||
export declare type GetVersionCallbackDetail = string;
|
let w = window as unknown as GoCallback;
|
||||||
|
|
||||||
(<GoCallback>(<unknown>window)).SetVersion = function (value: string): void {
|
// var register = function <Type>(name: string): void {
|
||||||
const event = new CustomEvent<string>('GetVersion_Callback', {
|
// const event = new CustomEvent<Type>(`${name}_Callback`, {
|
||||||
detail: value,
|
// detail: value
|
||||||
});
|
// })
|
||||||
document.dispatchEvent(event);
|
// document.dispatchEvent(event)
|
||||||
};
|
// };
|
||||||
export { GetVersion, SetVersion, RunGame};
|
|
||||||
|
// w.SetVersion = register<string>('SetVersion')
|
||||||
|
|
||||||
|
// (<GoCallback>(<unknown>window)).SetVersion = function <T>(value: T): void {
|
||||||
|
// const event = new CustomEvent<T>('GetVersion_Callback', {
|
||||||
|
// detail: value,
|
||||||
|
// });
|
||||||
|
// document.dispatchEvent(event);
|
||||||
|
// };
|
||||||
|
|
||||||
|
export { GetGames, SetVersion };
|
||||||
|
Loading…
Reference in New Issue
Block a user