Compare commits

..

7 Commits

Author SHA1 Message Date
wagonsoftware
3076900a07 Merge remote-tracking branch 'origin/main'
# Conflicts:
#	package-lock.json
#	package.json
#	src/app/app.component.html
#	src/app/app.component.ts
#	src/app/app.module.ts
#	src/app/services/go.ts
2022-10-17 16:59:16 +03:00
wagonsoftware
7e482d1d90 add ignore mac files 2022-10-17 16:55:58 +03:00
wagonsoftware
450830676b rename routing 2022-10-17 16:55:40 +03:00
wagonsoftware
b80ebafa51 Angular add 2022-10-17 16:55:04 +03:00
wagonsoftware
188f7b6aa2 java-go experiments 2022-10-17 16:54:44 +03:00
wagonsoftware
07e7c8845d Add java-go funcs 2022-10-17 16:54:25 +03:00
wagonsoftware
157b49ed85 add game components 2022-10-17 16:54:14 +03:00
19 changed files with 211 additions and 15 deletions

2
.gitignore vendored
View File

@ -103,7 +103,6 @@ dist
# vuepress v2.x temp and cache directory
.temp
.cache
# Docusaurus cache and generated files
.docusaurus
@ -132,3 +131,4 @@ dist
#angular
.angular/
/.DS_Store

View File

@ -34,7 +34,7 @@
"@angular-devkit/build-angular": "^14.1.3",
"@angular/cli": "~14.1.3",
"@angular/compiler-cli": "^14.1.0",
"@types/dompurify": "2.2.3",
"@schematics/angular": "^14.2.6",
"@types/jasmine": "~4.0.0",
"jasmine-core": "~4.2.0",
"karma": "~6.4.0",

View File

@ -0,0 +1,7 @@
a {
padding: 10px;
&.active {
background: green;
}
}

View File

@ -0,0 +1,2 @@
<h1>{{game.title}}</h1>
<p>{{game.description}}</p>

View File

@ -0,0 +1,3 @@
:host {
display: block;
}

View File

@ -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();
});
});

View File

@ -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 {}
}

View File

@ -0,0 +1,3 @@
<div class="game" [ngClass]="{'active': active}">
<div class="game-title">{{game.title}}</div>
</div>

View File

@ -0,0 +1,11 @@
:host {
display: block;
.game {
&.active {
background-color: green;
color: #fff;
}
}
}

View File

@ -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();
});
});

View File

@ -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 {}
}

View 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>

View File

@ -0,0 +1,11 @@
:host {
display: flex;
.games {
}
.game-info {
}
}

View 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();
});
});

View 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;
});
}
}

View 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 {}

View File

@ -0,0 +1,6 @@
export interface Game {
id: number;
title: string;
image: string;
description: string;
}

View File

@ -5,6 +5,6 @@ const routes: Routes = [];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule]
exports: [RouterModule],
})
export class AppRoutingModule {}

View File

@ -1,21 +1,32 @@
import { Game } from '../interfaces/game.interface';
export interface Go extends Window {
GetVersion: () => string;
RunGame: () => string;
GetGames: () => Promise<Game[]>;
}
export interface GoCallback extends Window {
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;
export declare type GetVersionCallbackDetail = string;
let w = window as unknown as GoCallback;
(<GoCallback>(<unknown>window)).SetVersion = function (value: string): void {
const event = new CustomEvent<string>('GetVersion_Callback', {
detail: value,
});
document.dispatchEvent(event);
};
export { GetVersion, SetVersion, RunGame};
// var register = function <Type>(name: string): void {
// const event = new CustomEvent<Type>(`${name}_Callback`, {
// detail: value
// })
// document.dispatchEvent(event)
// };
// 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 };