11export type Callback = ( newSearchParams : string ) => void ;
22
3- export abstract class UrlStateRouter {
4- push ( href : string ) : void { }
3+ export interface UrlStateRouter {
4+ push ( href : string ) : void ;
55
6- subscribe ( fn : Callback ) : void { }
7- unsubscribe ( fn : Callback ) : void { }
6+ subscribe ( fn : Callback ) : void ;
7+ unsubscribe ( fn : Callback ) : void ;
88}
99
1010export type GenericRouterOptions = {
@@ -14,28 +14,27 @@ export type GenericRouterOptions = {
1414const subscribers = new Map < Callback , Callback > ( ) ;
1515
1616let genericRouterCurrentStateString = '' ;
17- export class GenericRouter extends UrlStateRouter {
17+ export class GenericRouter implements UrlStateRouter {
1818 private interval : number = 0 ;
1919
2020 constructor ( private options : GenericRouterOptions ) {
21- super ( ) ;
2221 this . options = { poolingIntervalMs : 100 , ...options } ;
2322 }
2423
25- override push ( href : string ) : void {
24+ push ( href : string ) : void {
2625 window . history . pushState ( { } , '' , href ) ;
2726 this . onSearchParamsChange ( ) ;
2827 }
2928
30- override subscribe ( fn : Callback ) : void {
29+ subscribe ( fn : Callback ) : void {
3130 subscribers . set ( fn , fn ) ;
3231
3332 if ( ! this . interval ) {
3433 this . startPolling ( ) ;
3534 }
3635 }
3736
38- override unsubscribe ( fn : Callback ) : void {
37+ unsubscribe ( fn : Callback ) : void {
3938 subscribers . delete ( fn ) ;
4039
4140 if ( subscribers . size === 0 ) {
0 commit comments