chore: copia de libs/shared con prefijo Pi y APIs de terceros actualizadas
This commit is contained in:
31
libs/ui/src/lib/util/router-store/custom-route-serializer.ts
Normal file
31
libs/ui/src/lib/util/router-store/custom-route-serializer.ts
Normal file
@@ -0,0 +1,31 @@
|
||||
// Angular
|
||||
import { ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';
|
||||
|
||||
// Router
|
||||
import { RouterStateUrl } from './state/router.reducer';
|
||||
|
||||
// Ngrx
|
||||
import * as fromRouter from '@ngrx/router-store';
|
||||
|
||||
export class CustomSerializer implements fromRouter.RouterStateSerializer<RouterStateUrl> {
|
||||
serialize(routerState: RouterStateSnapshot): RouterStateUrl {
|
||||
const { url } = routerState;
|
||||
const { queryParams } = routerState.root;
|
||||
|
||||
let route: ActivatedRouteSnapshot = routerState.root;
|
||||
|
||||
while (route.firstChild) {
|
||||
route = route.firstChild;
|
||||
}
|
||||
const { params, routeConfig } = route;
|
||||
|
||||
// Only return an object including the URL, params and query params
|
||||
// instead of the entire snapshot
|
||||
return {
|
||||
url,
|
||||
params,
|
||||
queryParams,
|
||||
title: typeof routeConfig?.title === 'string' ? routeConfig.title : '',
|
||||
};
|
||||
}
|
||||
}
|
||||
11
libs/ui/src/lib/util/router-store/error-handler.ts
Normal file
11
libs/ui/src/lib/util/router-store/error-handler.ts
Normal file
@@ -0,0 +1,11 @@
|
||||
import { ErrorHandler, Injectable, Injector } from '@angular/core';
|
||||
import { Router } from '@angular/router';
|
||||
|
||||
@Injectable()
|
||||
export class GlobalErrorHandler implements ErrorHandler {
|
||||
constructor(private injector: Injector) { }
|
||||
handleError(error: any) {
|
||||
const router = this.injector.get(Router);
|
||||
console.error(error.stack.toString());
|
||||
}
|
||||
}
|
||||
10
libs/ui/src/lib/util/router-store/index.ts
Normal file
10
libs/ui/src/lib/util/router-store/index.ts
Normal file
@@ -0,0 +1,10 @@
|
||||
export * from './util-router-store.module';
|
||||
|
||||
// State
|
||||
export * from './state/router.actions';
|
||||
export * from './state/router.effects';
|
||||
export * from './state/router.reducer';
|
||||
export * from './state/router.selectors';
|
||||
|
||||
// Error handler
|
||||
export * from './error-handler';
|
||||
29
libs/ui/src/lib/util/router-store/state/router.actions.ts
Normal file
29
libs/ui/src/lib/util/router-store/state/router.actions.ts
Normal file
@@ -0,0 +1,29 @@
|
||||
import { NavigationExtras } from '@angular/router';
|
||||
|
||||
import { createAction, props } from '@ngrx/store';
|
||||
|
||||
export const navigateTo = createAction(
|
||||
'[Core Router] Navigate To',
|
||||
props<{
|
||||
payload: {
|
||||
path: any[];
|
||||
query?: object;
|
||||
extras?: NavigationExtras;
|
||||
};
|
||||
}>()
|
||||
);
|
||||
|
||||
export const navigateRefreshTo = createAction(
|
||||
'[Core Router] Navigate Refresh To',
|
||||
props<{
|
||||
payload: {
|
||||
path: any[];
|
||||
query?: object;
|
||||
extras?: NavigationExtras;
|
||||
};
|
||||
}>()
|
||||
);
|
||||
|
||||
export const navigateBack = createAction('[Core Router] Navigate Back');
|
||||
|
||||
export const navigateForward = createAction('[Core Router] Navigate Forward');
|
||||
74
libs/ui/src/lib/util/router-store/state/router.effects.ts
Normal file
74
libs/ui/src/lib/util/router-store/state/router.effects.ts
Normal file
@@ -0,0 +1,74 @@
|
||||
import { Actions, createEffect, ofType } from '@ngrx/effects';
|
||||
|
||||
import * as RouterActions from './router.actions';
|
||||
|
||||
import { map, tap } from 'rxjs/operators';
|
||||
|
||||
import { Injectable } from '@angular/core';
|
||||
import { Location } from '@angular/common';
|
||||
import { Router } from '@angular/router';
|
||||
|
||||
@Injectable()
|
||||
export class RouterEffects {
|
||||
navigateTo$ = createEffect(
|
||||
() => {
|
||||
return this.action$.pipe(
|
||||
ofType(RouterActions.navigateTo),
|
||||
map((action) => {
|
||||
return action.payload;
|
||||
}),
|
||||
tap(({ path, query: queryParams, extras }) => {
|
||||
this._router.navigate(path, { queryParams, ...extras });
|
||||
})
|
||||
);
|
||||
},
|
||||
{ dispatch: false }
|
||||
);
|
||||
|
||||
navigateRefreshTo$ = createEffect(
|
||||
() => {
|
||||
return this.action$.pipe(
|
||||
ofType(RouterActions.navigateRefreshTo),
|
||||
map((action) => {
|
||||
return action.payload;
|
||||
}),
|
||||
tap(({ path, query: queryParams, extras }) => {
|
||||
this._router.routeReuseStrategy.shouldReuseRoute = () => false;
|
||||
this._router.onSameUrlNavigation = 'reload';
|
||||
this._router.navigate(path, { queryParams, ...extras });
|
||||
})
|
||||
);
|
||||
},
|
||||
{ dispatch: false }
|
||||
);
|
||||
|
||||
navigateBack$ = createEffect(
|
||||
() => {
|
||||
return this.action$.pipe(
|
||||
ofType(RouterActions.navigateBack),
|
||||
tap(() => {
|
||||
this._location.back();
|
||||
})
|
||||
);
|
||||
},
|
||||
{ dispatch: false }
|
||||
);
|
||||
|
||||
navigateForward$ = createEffect(
|
||||
() => {
|
||||
return this.action$.pipe(
|
||||
ofType(RouterActions.navigateForward),
|
||||
tap(() => {
|
||||
this._location.forward();
|
||||
})
|
||||
);
|
||||
},
|
||||
{ dispatch: false }
|
||||
);
|
||||
|
||||
constructor(
|
||||
private _location: Location,
|
||||
private action$: Actions,
|
||||
private _router: Router
|
||||
) {}
|
||||
}
|
||||
16
libs/ui/src/lib/util/router-store/state/router.reducer.ts
Normal file
16
libs/ui/src/lib/util/router-store/state/router.reducer.ts
Normal file
@@ -0,0 +1,16 @@
|
||||
import * as fromRouter from '@ngrx/router-store';
|
||||
|
||||
import { Params } from '@angular/router';
|
||||
|
||||
export const coreRouterFeatureKey = 'CORE_router';
|
||||
|
||||
export interface RouterStateUrl {
|
||||
url: string;
|
||||
queryParams: Params;
|
||||
params: Params;
|
||||
title: string;
|
||||
}
|
||||
|
||||
export interface RouterState {
|
||||
routerReducer: fromRouter.RouterReducerState<RouterStateUrl>;
|
||||
}
|
||||
15
libs/ui/src/lib/util/router-store/state/router.selectors.ts
Normal file
15
libs/ui/src/lib/util/router-store/state/router.selectors.ts
Normal file
@@ -0,0 +1,15 @@
|
||||
import { createFeatureSelector, createSelector } from '@ngrx/store';
|
||||
|
||||
import * as fromRouter from '@ngrx/router-store';
|
||||
|
||||
import * as fromReducer from './router.reducer';
|
||||
|
||||
export const getRouterState = createFeatureSelector<
|
||||
fromRouter.RouterReducerState<fromReducer.RouterStateUrl>
|
||||
>(fromReducer.coreRouterFeatureKey);
|
||||
|
||||
export const getTitle = createSelector(getRouterState, (state) => {
|
||||
return state?.state?.title
|
||||
});
|
||||
|
||||
export const getRoute = createSelector(getRouterState, (state) => state?.state?.url);
|
||||
@@ -0,0 +1,16 @@
|
||||
import { ErrorHandler, NgModule } from '@angular/core';
|
||||
import { CommonModule } from '@angular/common';
|
||||
|
||||
import { RouterState, StoreRouterConnectingModule } from '@ngrx/router-store';
|
||||
import { CustomSerializer } from './custom-route-serializer';
|
||||
|
||||
@NgModule({
|
||||
imports: [
|
||||
CommonModule,
|
||||
StoreRouterConnectingModule.forRoot({
|
||||
routerState: RouterState.Minimal,
|
||||
serializer: CustomSerializer,
|
||||
}),
|
||||
],
|
||||
})
|
||||
export class PiSharedUtilRouterStoreModule {}
|
||||
Reference in New Issue
Block a user