sending mails is working
This commit is contained in:
parent
4282900f31
commit
e55d29b2f8
7 changed files with 124 additions and 9 deletions
|
@ -46,7 +46,6 @@ jobs:
|
||||||
# git pull ${fullrepo}
|
# git pull ${fullrepo}
|
||||||
npm install @angular/cli
|
npm install @angular/cli
|
||||||
npm run lint
|
npm run lint
|
||||||
echo "getting the username"
|
|
||||||
- name: Update version
|
- name: Update version
|
||||||
run: |
|
run: |
|
||||||
set -e
|
set -e
|
||||||
|
|
|
@ -92,7 +92,10 @@
|
||||||
"buildTarget": "silly-game-frontend:build:development"
|
"buildTarget": "silly-game-frontend:build:development"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"defaultConfiguration": "development"
|
"defaultConfiguration": "development",
|
||||||
|
"options": {
|
||||||
|
"proxyConfig": "proxy.conf.json"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"extract-i18n": {
|
"extract-i18n": {
|
||||||
"builder": "@angular-devkit/build-angular:extract-i18n"
|
"builder": "@angular-devkit/build-angular:extract-i18n"
|
||||||
|
|
8
proxy.conf.json
Normal file
8
proxy.conf.json
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
{
|
||||||
|
"/api": {
|
||||||
|
"target": "http://localhost:8080",
|
||||||
|
"secure": false,
|
||||||
|
"changeOrigin": true,
|
||||||
|
"logLevel": "debug"
|
||||||
|
}
|
||||||
|
}
|
21
src/app/logger.service.ts
Normal file
21
src/app/logger.service.ts
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
import { Injectable } from '@angular/core';
|
||||||
|
|
||||||
|
@Injectable({
|
||||||
|
providedIn: 'root'
|
||||||
|
})
|
||||||
|
export class LoggerService {
|
||||||
|
log(message: string) {
|
||||||
|
const timestamp = new Date().toISOString();
|
||||||
|
console.log(`[LOG ${timestamp}] ${message}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
warn(message: string) {
|
||||||
|
const timestamp = new Date().toISOString();
|
||||||
|
console.warn(`[WARN ${timestamp}] ${message}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
error(message: string) {
|
||||||
|
const timestamp = new Date().toISOString();
|
||||||
|
console.error(`[ERROR ${timestamp}] ${message}`);
|
||||||
|
}
|
||||||
|
}
|
|
@ -5,6 +5,22 @@
|
||||||
<div class="jump-counter">
|
<div class="jump-counter">
|
||||||
Jumps: {{ totalJumps }}
|
Jumps: {{ totalJumps }}
|
||||||
<button (click)="restartGame()">Restart</button>
|
<button (click)="restartGame()">Restart</button>
|
||||||
<button (click)="inviteFriend()">Invite Friend</button>
|
<button (click)="showInvitePopup = true">Invite Friend</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Invite Friend Modal -->
|
||||||
|
<div class="modal-backdrop" *ngIf="showInvitePopup">
|
||||||
|
<div class="modal">
|
||||||
|
<h2>Invite a Friend</h2>
|
||||||
|
<input
|
||||||
|
type="email"
|
||||||
|
placeholder="Enter friend's email"
|
||||||
|
[(ngModel)]="inviteEmail"
|
||||||
|
/>
|
||||||
|
<div class="modal-buttons">
|
||||||
|
<button (click)="sendInvite()">Send Invite</button>
|
||||||
|
<button (click)="showInvitePopup = false">Cancel</button>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
|
@ -33,3 +33,39 @@ body, html {
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.modal-backdrop {
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
background: rgba(0,0,0,0.5);
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
z-index: 999;
|
||||||
|
}
|
||||||
|
|
||||||
|
.modal {
|
||||||
|
background: white;
|
||||||
|
padding: 20px;
|
||||||
|
border-radius: 10px;
|
||||||
|
min-width: 300px;
|
||||||
|
box-shadow: 0 0 20px rgba(0,0,0,0.3);
|
||||||
|
}
|
||||||
|
|
||||||
|
.modal input {
|
||||||
|
width: 100%;
|
||||||
|
padding: 8px;
|
||||||
|
margin-top: 10px;
|
||||||
|
font-size: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.modal-buttons {
|
||||||
|
display: flex;
|
||||||
|
justify-content: flex-end;
|
||||||
|
margin-top: 15px;
|
||||||
|
gap: 10px;
|
||||||
|
}
|
||||||
|
|
|
@ -1,10 +1,14 @@
|
||||||
import { Component, HostListener, OnInit } from '@angular/core';
|
import { Component, HostListener, OnInit } from '@angular/core';
|
||||||
import { JumpService } from '../jump.service';
|
import { JumpService } from '../jump.service';
|
||||||
|
import { LoggerService } from '../logger.service';
|
||||||
|
import { FormsModule } from '@angular/forms';
|
||||||
|
import { HttpClient } from '@angular/common/http';
|
||||||
|
import { CommonModule } from '@angular/common';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-mario',
|
selector: 'app-mario',
|
||||||
standalone: true,
|
standalone: true,
|
||||||
imports: [],
|
imports: [FormsModule, CommonModule],
|
||||||
templateUrl: './mario.component.html',
|
templateUrl: './mario.component.html',
|
||||||
styleUrl: './mario.component.scss'
|
styleUrl: './mario.component.scss'
|
||||||
})
|
})
|
||||||
|
@ -51,6 +55,12 @@ import { JumpService } from '../jump.service';
|
||||||
{ x: 6100, y: 400, width: 140, height: 10 }
|
{ x: 6100, y: 400, width: 140, height: 10 }
|
||||||
];
|
];
|
||||||
|
|
||||||
|
constructor(
|
||||||
|
private jumpService: JumpService,
|
||||||
|
private logger: LoggerService,
|
||||||
|
private http: HttpClient
|
||||||
|
) {}
|
||||||
|
|
||||||
ngOnInit(): void {
|
ngOnInit(): void {
|
||||||
this.canvas = document.getElementById('gameCanvas') as HTMLCanvasElement;
|
this.canvas = document.getElementById('gameCanvas') as HTMLCanvasElement;
|
||||||
this.ctx = this.canvas.getContext('2d')!;
|
this.ctx = this.canvas.getContext('2d')!;
|
||||||
|
@ -58,12 +68,11 @@ import { JumpService } from '../jump.service';
|
||||||
this.canvas.height = this.canvasHeight;
|
this.canvas.height = this.canvasHeight;
|
||||||
this.mario.y = this.canvasHeight - 100;
|
this.mario.y = this.canvasHeight - 100;
|
||||||
this.loop();
|
this.loop();
|
||||||
|
this.logger.log('Game initialized');
|
||||||
}
|
}
|
||||||
|
|
||||||
totalJumps = 0;
|
totalJumps = 0;
|
||||||
|
|
||||||
constructor(private jumpService: JumpService) {}
|
|
||||||
|
|
||||||
@HostListener('window:keydown', ['$event'])
|
@HostListener('window:keydown', ['$event'])
|
||||||
handleKeyDown(event: KeyboardEvent) {
|
handleKeyDown(event: KeyboardEvent) {
|
||||||
if (event.key === 'ArrowRight') this.mario.dx = this.mario.speed;
|
if (event.key === 'ArrowRight') this.mario.dx = this.mario.speed;
|
||||||
|
@ -162,13 +171,36 @@ import { JumpService } from '../jump.service';
|
||||||
}
|
}
|
||||||
|
|
||||||
restartGame() {
|
restartGame() {
|
||||||
|
this.logger.log('Game restarted');
|
||||||
window.location.reload();
|
window.location.reload();
|
||||||
}
|
}
|
||||||
|
|
||||||
inviteFriend() {
|
inviteFriend() {
|
||||||
const inviteLink = window.location.href; // You could customize this
|
this.logger.log('Fiend invited');
|
||||||
|
const inviteLink = window.location.href;
|
||||||
navigator.clipboard.writeText(inviteLink)
|
navigator.clipboard.writeText(inviteLink)
|
||||||
.then(() => alert('Invite link copied to clipboard!'))
|
.then(() => alert('Invite link copied to clipboard!'))
|
||||||
.catch(() => alert('Failed to copy invite link.'));
|
.catch(() => alert('Failed to copy invite link.'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inviteEmail = '';
|
||||||
|
showInvitePopup = false;
|
||||||
|
|
||||||
|
sendInvite() {
|
||||||
|
if (!this.inviteEmail) return;
|
||||||
|
|
||||||
|
this.logger.log(`Sending invite to ${this.inviteEmail}`);
|
||||||
|
|
||||||
|
this.http.post('/api/invite', { email: this.inviteEmail }).subscribe({
|
||||||
|
next: () => {
|
||||||
|
alert('Invite sent!');
|
||||||
|
this.inviteEmail = '';
|
||||||
|
this.showInvitePopup = false;
|
||||||
|
},
|
||||||
|
error: () => {
|
||||||
|
alert('Failed to send invite.');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
Loading…
Reference in a new issue