fix : change in lag fixed

This commit is contained in:
karthik 2025-08-07 12:36:02 +05:30
parent 87fa43bbe2
commit 7f64ff3c64
3 changed files with 72 additions and 36 deletions

View File

@ -42,7 +42,7 @@
class="nav-dropdown w-50 text-start ps-3"
(click)="openRaceModal()"
>
Race No. | {{ currentLegRaceDisplay ? currentLegRaceDisplay : 'Race ' + selectedRace }}
Race No. | {{ selectedRace }}
</button>
</div>
<div class="d-flex justify-content-end" style="width: 40vw">
@ -95,7 +95,7 @@
class="nav-dropdown w-100 text-end pe-3"
(click)="openRaceModal()"
>
Race No. | {{ currentLegRaceDisplay ? currentLegRaceDisplay : 'Race ' + selectedRace }}
Race No. | {{ selectedRace }}
</button>
<div class="d-flex flex-column text-end">

View File

@ -1,4 +1,4 @@
import { Component, OnInit, HostListener, OnDestroy } from '@angular/core';
import { Component, OnInit, HostListener, OnDestroy, NgZone } from '@angular/core';
import { CommonModule } from '@angular/common';
import { BtcService } from '../../service/btc.service';
import { Router } from '@angular/router';
@ -37,8 +37,10 @@ export class NavbarComponent implements OnInit, OnDestroy {
selectedRaceId: number = 0;
enabledHorseNumbers: number[] = [];
multiLegBaseRaceIdx: number = 0; // Track base race index for multi-leg pools
currentPool: string | null = null; // Track current multi-leg pool
multiLegBaseRaceIdx: number = 0;
currentPool: string | null = null;
private prevEnabledKey = ''; // For memoization
wallet = {
withdraw: 0,
@ -67,12 +69,17 @@ export class NavbarComponent implements OnInit, OnDestroy {
constructor(
private btcService: BtcService,
private router: Router,
private sharedStateService: SharedStateService
private sharedStateService: SharedStateService,
private zone: NgZone // <-- Add NgZone
) {}
ngOnInit() {
this.updateDateTime();
setInterval(() => this.updateDateTime(), 1000);
// Use NgZone to run setInterval outside Angular's change detection
this.zone.runOutsideAngular(() => {
setInterval(() => {
this.zone.run(() => this.updateDateTime());
}, 1000);
});
this.subscription = interval(5000)
.pipe(
@ -91,16 +98,7 @@ export class NavbarComponent implements OnInit, OnDestroy {
}
});
const cachedData = localStorage.getItem('raceCardData');
if (cachedData) {
this.raceCardData = JSON.parse(cachedData);
console.log('📦 Loaded race card from localStorage:', this.raceCardData);
this.selectedVenue = this.raceCardData?.Venue || 'Select Venue';
this.updateEnabledHorseNumbers();
} else {
this.raceCardData = { raceVenueRaces: { races: [] }, pools: {} };
console.warn('⚠️ No race card data found in localStorage.');
}
this.sharedStateService.sharedData$.subscribe(data => {
if (data.type === 'currentLegRace') {
@ -150,22 +148,29 @@ export class NavbarComponent implements OnInit, OnDestroy {
private updateEnabledHorseNumbersForMultiLeg(baseRaceIdx: number) {
const raceCardData = this.raceCardData?.raceVenueRaces?.races || [];
let combinedHorseNumbers: number[] = [];
const legCount = this.getLegCountForLabel();
const key = `${this.currentPool}-${baseRaceIdx}-${legCount}`;
for (let i = 0; i < legCount; i++) {
const raceIdx = this.getRaceForLeg(this.currentPool || '', i) - 1;
if (this.prevEnabledKey === key) return; // 🧠 Memoization
this.prevEnabledKey = key;
let combinedHorseNumbers: number[] = [];
const raceIndices = Array.from({ length: legCount }, (_, i) =>
this.getRaceForLeg(this.currentPool || '', i) - 1
);
for (const raceIdx of raceIndices) {
const race = raceCardData[raceIdx] || [];
if (Array.isArray(race)) {
const horses = race
.map((runner: any) => runner?.horseNumber)
.filter((n: number) => typeof n === 'number' && n >= 1 && n <= 30);
combinedHorseNumbers = combinedHorseNumbers.concat(horses);
combinedHorseNumbers.push(...horses);
}
}
combinedHorseNumbers = Array.from(new Set(combinedHorseNumbers));
this.enabledHorseNumbers = combinedHorseNumbers;
this.enabledHorseNumbers = Array.from(new Set(combinedHorseNumbers));
this.sharedStateService.updateSharedData({
type: 'enabledHorseNumbers',
@ -176,7 +181,6 @@ export class NavbarComponent implements OnInit, OnDestroy {
}
private getLegCountForLabel(): number {
if (!this.currentPool) return 3;
switch (this.currentPool) {
case 'mjp1': return 4;
case 'jkp1': return 5;
@ -214,6 +218,17 @@ export class NavbarComponent implements OnInit, OnDestroy {
}
openVenueModal() {
const cachedData = localStorage.getItem('raceCardData');
if (cachedData) {
this.raceCardData = JSON.parse(cachedData);
// console.log('📦 Loaded race card from localStorage:', this.raceCardData); // comment out for perf
this.selectedVenue = this.raceCardData?.Venue || 'Select Venue';
this.updateEnabledHorseNumbers();
} else {
this.raceCardData = { raceVenueRaces: { races: [] }, pools: {} };
// console.warn('⚠️ No race card data found in localStorage.'); // comment out for perf
}
console.log('[MODAL] Opening venue modal');
this.showVenueModal = true;
}
@ -225,8 +240,6 @@ export class NavbarComponent implements OnInit, OnDestroy {
const venueIndex = Object.keys(this.raceCardData?.raceVenueRaces?.races || [])
.findIndex((_, idx) => idx === this.selectedRaceId);
if (venueIndex !== -1) {
this.raceData = this.raceCardData.raceVenueRaces.races[venueIndex] || [];
}
@ -253,8 +266,6 @@ export class NavbarComponent implements OnInit, OnDestroy {
});
console.log('[VENUE] Venue resolved to:', this.selectedVenue);
console.log('[VENUE] Venue sent to sharedStateService');
this.closeModals();
}
@ -293,12 +304,12 @@ export class NavbarComponent implements OnInit, OnDestroy {
this.enabledHorseNumbers = [];
}
console.log('[HORSE NUMBERS] Enabled horse numbers:', this.enabledHorseNumbers);
this.sharedStateService.updateSharedData({
type: 'enabledHorseNumbers',
value: this.enabledHorseNumbers,
});
console.log('[HORSE NUMBERS] Enabled horse numbers:', this.enabledHorseNumbers);
}
selectHorseNumber(number: number) {
@ -358,4 +369,9 @@ export class NavbarComponent implements OnInit, OnDestroy {
this.subscription.unsubscribe();
}
}
}
// Add trackByHorse for use in *ngFor
trackByHorse(index: number, item: number): number {
return item;
}
}

View File

@ -1,4 +1,11 @@
import { Component, Input, OnInit, OnDestroy } from '@angular/core';
import {
Component,
Input,
OnInit,
OnDestroy,
NgZone,
ChangeDetectionStrategy
} from '@angular/core';
import { CommonModule } from '@angular/common';
import { Subscription } from 'rxjs';
import { SelectionService, SelectionData } from '../selection.service/selection.service';
@ -10,7 +17,8 @@ import { LabelRestrictionService } from '../selection.service/label-restriction.
standalone: true,
imports: [CommonModule],
templateUrl: './touch-pad-menu.component.html',
styleUrls: ['./touch-pad-menu.component.css']
styleUrls: ['./touch-pad-menu.component.css'],
changeDetection: ChangeDetectionStrategy.OnPush // 🔥 CRUCIAL for performance
})
export class TouchPadMenuComponent implements OnInit, OnDestroy {
@Input() ticketingActive: boolean = false;
@ -79,10 +87,16 @@ export class TouchPadMenuComponent implements OnInit, OnDestroy {
private currentTotal: number = 0;
private currentSelections: SelectionData[] = [];
enabledHorseNumbers: number[] = [];
prevEnabledKey: string = '';
raceCardData: any = {};
constructor(
private selectionService: SelectionService,
private sharedStateService: SharedStateService,
private labelRestrictionService: LabelRestrictionService
private labelRestrictionService: LabelRestrictionService,
private ngZone: NgZone // <-- inject NgZone
) {}
@ -133,6 +147,12 @@ export class TouchPadMenuComponent implements OnInit, OnDestroy {
}
});
const data = localStorage.getItem('raceCardData');
if (data) {
this.raceCardData = JSON.parse(data);
} else {
this.raceCardData = {};
}
}
ngOnDestroy() {
@ -911,7 +931,7 @@ const winLabels = allRows.map(row => {
this.erase(); // ✅ Clear selections after successful print
});
// this.erase(); // ✅ Clear selections after successful print
this.erase(); // ✅ Clear selections after successful print
//--------------------Ended Print here -----------------------------