@@ -26,9 +26,9 @@ export interface StudySessionRecord {
2626 records : CardRecord [ ] ;
2727}
2828
29- export interface HydratedCard {
29+ export interface HydratedCard < TView = unknown > {
3030 item : StudySessionItem ;
31- view : any ; // Vue component - avoid circular dependency with common-ui
31+ view : TView ;
3232 data : ViewData [ ] ;
3333}
3434
@@ -87,11 +87,11 @@ class ItemQueue<T> {
8787
8888import { DataLayerProvider } from '@db/core' ;
8989
90- export class SessionController extends Loggable {
90+ export class SessionController < TView = unknown > extends Loggable {
9191 _className = 'SessionController' ;
9292 private sources : StudyContentSource [ ] ;
9393 private dataLayer : DataLayerProvider ;
94- private getViewComponent : ( viewId : string ) => any ;
94+ private getViewComponent : ( viewId : string ) => TView ;
9595 private _sessionRecord : StudySessionRecord [ ] = [ ] ;
9696 public set sessionRecord ( r : StudySessionRecord [ ] ) {
9797 this . _sessionRecord = r ;
@@ -100,7 +100,7 @@ export class SessionController extends Loggable {
100100 private reviewQ : ItemQueue < StudySessionReviewItem > = new ItemQueue < StudySessionReviewItem > ( ) ;
101101 private newQ : ItemQueue < StudySessionNewItem > = new ItemQueue < StudySessionNewItem > ( ) ;
102102 private failedQ : ItemQueue < StudySessionFailedItem > = new ItemQueue < StudySessionFailedItem > ( ) ;
103- private hydratedQ : ItemQueue < HydratedCard > = new ItemQueue < HydratedCard > ( ) ;
103+ private hydratedQ : ItemQueue < HydratedCard < TView > > = new ItemQueue < HydratedCard < TView > > ( ) ;
104104 private _currentCard : StudySessionItem | null = null ;
105105 private hydration_in_progress : boolean = false ;
106106
@@ -126,7 +126,7 @@ export class SessionController extends Loggable {
126126 sources : StudyContentSource [ ] ,
127127 time : number ,
128128 dataLayer : DataLayerProvider ,
129- getViewComponent : ( viewId : string ) => any // Vue component
129+ getViewComponent : ( viewId : string ) => TView
130130 ) {
131131 super ( ) ;
132132
@@ -356,7 +356,7 @@ export class SessionController extends Loggable {
356356 | 'dismiss-failed'
357357 | 'marked-failed'
358358 | 'dismiss-error' = 'dismiss-success'
359- ) : Promise < HydratedCard | null > {
359+ ) : Promise < HydratedCard < TView > | null > {
360360 // dismiss (or sort to failedQ) the current card
361361 this . dismissCurrentCard ( action ) ;
362362
@@ -431,7 +431,7 @@ export class SessionController extends Loggable {
431431 return this . reviewQ . length > 0 || this . newQ . length > 0 || this . failedQ . length > 0 ;
432432 }
433433
434- private async nextHydratedCard ( ) : Promise < HydratedCard | null > {
434+ private async nextHydratedCard ( ) : Promise < HydratedCard < TView > | null > {
435435 // Wait for a card to become available in hydratedQ
436436 while ( this . hydratedQ . length === 0 && this . hasAvailableCards ( ) ) {
437437 await new Promise ( ( resolve ) => setTimeout ( resolve , 25 ) ) ; // Short polling interval
0 commit comments