{"version":3,"file":"acknow-srl-ack-services-client.mjs","sources":["../../../projects/services-client/src/lib/services-client.actions.ts","../../../projects/services-client/src/lib/services-client.reducer.ts","../../../projects/services-client/src/lib/components/form-placeholder.directive.ts","../../../projects/services-client/src/lib/injection/forms-module.token.ts","../../../projects/services-client/src/lib/base/service-params.base.ts","../../../projects/services-client/src/lib/components/custom-params-dialog.component.ts","../../../projects/services-client/src/lib/services-client.api.ts","../../../projects/services-client/src/lib/services-client.effects.ts","../../../projects/services-client/src/lib/services-client.module.ts","../../../projects/services-client/src/lib/services-client.service.ts","../../../projects/services-client/src/acknow-srl-ack-services-client.ts"],"sourcesContent":["import { createAction, props } from '@ngrx/store';\nimport { ServiceDialogSettings } from './models/service-dialog-settings.model';\n\nexport const openParamsDialog = createAction('[Services Client] open params dialog',\n  props<{method: 'GET' | 'POST', url: string, componentName?: string, dialogTitle?: string, dialogSettings: ServiceDialogSettings}>());\nexport const callService = createAction('[Services Client] start call service',\n  props<{method: 'GET' | 'POST', url: string, params?: any}>());\nexport const callServiceStarted = createAction('[Services Client] call service http started');\nexport const callServiceSuccess = createAction('[Services Client] call service http succeded');\nexport const callServiceFailure = createAction('[Services Client]  call service http failed', props<{error: string}>());\nexport const callServiceComplete = createAction('[Services Client]  call service complete');\n","import { createReducer, on, createFeatureSelector, select } from '@ngrx/store';\nimport * as actions from './services-client.actions';\nimport { pipe } from 'rxjs';\nimport { filter, map } from 'rxjs/operators';\nimport { ServiceDialogSettings } from './models/service-dialog-settings.model';\n\nexport const featureKey = 'services-client';\n\nexport interface State {\n\n  url: string;\n  method: 'GET' | 'POST';\n  httpStatus: string; // null | 'pending' | 'success' | 'error';\n  error?: string;\n  params?: any;\n  componentName?: string;\n  dialogSettings?: ServiceDialogSettings;\n\n}\n\nexport const initialState: State = {\n  url: null,\n  method: null,\n  httpStatus: null\n};\n\nconst servicesClientReducer = createReducer(\n  initialState,\n  on(actions.callService, (state: State, props) =>\n    ({...state, url: props.url, method: props.method, params: props.params, httpStatus: null})),\n  on(actions.openParamsDialog, (state: State, props) =>\n    ({...state, url: props.url, method: props.method, componentName: props.componentName, httpStatus: null,\n      dialogSettings: props.dialogSettings})),\n  on(actions.callServiceStarted, (state: State) => ({...state, httpStatus: 'pending'})),\n  on(actions.callServiceSuccess, (state: State) => ({...state, httpStatus: 'success'})),\n  on(actions.callServiceFailure, (state: State, props) => {\n    const newState = {...state, error: props.error};\n    newState.httpStatus = 'error';\n\n    return newState;\n  }),\n  on(actions.callServiceComplete, (state: State) => initialState)\n);\n\nexport function reducer(state: State | undefined, action) {\n  return servicesClientReducer(state, action);\n}\n\nexport const selectFeature = createFeatureSelector<any, State>(featureKey);\n\nexport const selectHttpResultValue = pipe(\n  select(selectFeature),\n  filter(state => ['success', 'error'].includes(state.httpStatus)),\n  map(state => ({status: state.httpStatus, error: state.error}))\n);\n","import { Directive, ViewContainerRef } from '@angular/core';\n\n@Directive({\n  selector: '[libFormPlaceholder]'\n})\nexport class FormPlaceholderDirective {\n\n  constructor(\n    public viewContainerRef: ViewContainerRef\n  ) { }\n\n}\n","import { InjectionToken } from '@angular/core';\n\nexport declare type ModuleLoader = () => Promise<any>;\n\nexport const FORMS_MODULE_FACTORY = new InjectionToken<ModuleLoader>('FormsModuleFactory');\n","import { Output, EventEmitter } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\n\nexport abstract class ServiceParamsBase {\n\n  public form: FormGroup;\n  public data: any;\n\n  constructor() {\n  }\n\n  getData(): any {\n    return this.form.getRawValue();\n  }\n\n}\n","import { Component, OnInit, ViewChildren, Optional, Inject, ComponentFactoryResolver, ViewChild } from '@angular/core';\nimport { FormPlaceholderDirective } from './form-placeholder.directive';\nimport * as fromFeature from '../services-client.reducer';\nimport { Store, select } from '@ngrx/store';\nimport { Observable, from, of, EMPTY } from 'rxjs';\nimport * as actions from '../services-client.actions';\nimport { FORMS_MODULE_FACTORY, ModuleLoader } from '../injection/forms-module.token';\nimport { tap, switchMap, withLatestFrom, take } from 'rxjs/operators';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { ServiceParamsBase } from '../base/service-params.base';\nimport { ServiceDialogSettings } from '../models/service-dialog-settings.model';\n\n@Component({\n  selector: 'lib-custom-params-dialog',\n  template: `\n    <ng-container *ngIf=\"state$ | async as state\">\n\n      <h1 mat-dialog-title>{{state.dialogSettings?.title}}</h1>\n\n      <mat-dialog-content>\n        <ng-template libFormPlaceholder></ng-template>\n      </mat-dialog-content>\n\n      <div mat-dialog-actions>\n        <button mat-button mat-dialog-close>ANNULLA</button>\n        <button mat-raised-button color=\"primary\" (click)=\"submit(state)\">CONFERMA</button>\n      </div>\n\n    </ng-container>\n  `,\n  styles: []\n})\nexport class CustomParamsDialogComponent implements OnInit {\n\n  public state$: Observable<fromFeature.State>;\n\n  @ViewChild(FormPlaceholderDirective) private formPlaceholder: FormPlaceholderDirective;\n\n  constructor(\n    @Inject(MAT_DIALOG_DATA) public dialogSettings: ServiceDialogSettings,\n    private store: Store<fromFeature.State>,\n    @Optional() @Inject(FORMS_MODULE_FACTORY) private formsModuleFactory: ModuleLoader,\n    private dialogRef: MatDialogRef<CustomParamsDialogComponent>,\n    private cfr: ComponentFactoryResolver\n  ) {\n    this.state$ = store.pipe(select(fromFeature.selectFeature));\n  }\n\n  private formComponent: ServiceParamsBase;\n\n  ngOnInit(): void {\n\n    if (this.formsModuleFactory) {\n\n      this.state$.pipe(\n        take(1),\n        switchMap(state => {\n          if (state.componentName) {\n            return from(this.formsModuleFactory()).pipe(\n              withLatestFrom(of(state))\n            );\n          }\n          return EMPTY;\n        }),\n        tap(([mod, state]) => {\n\n          const isComponentValid = mod[state.componentName].prototype instanceof ServiceParamsBase;\n\n          if (!isComponentValid) {\n            throw new Error('Services params forms must implement CustomParamsComponentBase class');\n          }\n\n          const compRef = this.formPlaceholder.viewContainerRef.createComponent<ServiceParamsBase>(mod[state.componentName]);\n\n          this.formComponent = compRef.instance;\n          this.formComponent.data = this.dialogSettings.data;\n\n        })\n      ).subscribe();\n\n    }\n\n  }\n\n  submit(state: fromFeature.State) {\n\n    const form = this.formComponent.form;\n\n    if (!form.invalid) {\n      this.store.dispatch(actions.callService({method: state.method, url: state.url, params: this.formComponent.getData()}));\n      this.dialogRef.close();\n    }\n\n  }\n\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient, HttpParams } from '@angular/common/http';\nimport { Observable, from, iif, throwError, of } from 'rxjs';\nimport { mergeMap, switchMap } from 'rxjs/operators';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class ServicesClientApi {\n\n  constructor(\n    private http: HttpClient\n  ) {}\n\n  public callService(method: 'GET' | 'POST', url: string, params: string): Observable<any> {\n\n    let obs: Observable<Blob>;\n\n    switch (method) {\n\n      case 'GET':\n        obs = this.buildGetRequest(url, params);\n        break;\n\n      case 'POST':\n        obs = this.buildPostRequest(url, params);\n        break;\n\n    }\n\n    return obs.pipe(\n      switchMap(blob => {\n\n        const promise = new Response(blob).text();\n\n        return from(promise);\n\n      }),\n      mergeMap(html =>\n        iif(() => this.extractError(html) && true,\n          throwError(new Error(this.extractError(html))),\n          of(true) // the response is html, this obs emit a void stream only if the page does not contains ERRORE:\n      ))\n    );\n\n  }\n\n\n  private buildGetRequest(url: string, params: any): Observable<Blob> {\n\n    let queryString = new HttpParams();\n\n    if (params) {\n      for (const prop in params) {\n        if (params.hasOwnProperty(prop)) {\n\n          if (params[prop] === null) {\n            queryString = queryString.append(prop, '');\n          } else {\n            queryString = queryString.append(prop, params[prop]);\n          }\n\n        }\n      }\n    }\n\n    return this.http.get(url, {params: queryString, responseType: 'blob'});\n\n  }\n\n  private buildPostRequest(url, params): Observable<Blob> {\n\n    const form = new FormData();\n\n    for (const key of Object.keys(params)) {\n\n      if (params[key] === null) {\n        form.append(key, '');\n      } else {\n        form.append(key, params[key]);\n      }\n\n    }\n\n    return this.http.post(url, form, {responseType: 'blob'});\n\n  }\n\n  private extractError(html: string) {\n\n    // remove all new line charachters\n    html = html.replace(/\\r?\\n|\\r/g, '');\n\n    const matches = html.match(/ERRORE:.*/);\n\n    if (!matches || !matches.length) {\n      return null;\n    }\n    return matches[0];\n\n  }\n\n}\n","import { Injectable } from '@angular/core';\nimport { Store, select } from '@ngrx/store';\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\nimport * as actions from './services-client.actions';\nimport * as fromFeature from './services-client.reducer';\nimport { withLatestFrom, switchMap, filter, map, catchError, tap, flatMap } from 'rxjs/operators';\nimport { concat, of, merge, throwError } from 'rxjs';\nimport { ServicesClientApi } from './services-client.api';\nimport { MatDialog } from '@angular/material/dialog';\nimport { CustomParamsDialogComponent } from './components/custom-params-dialog.component';\n\n@Injectable()\nexport class ServicesClientEffetcs {\n\n  constructor(\n    private actions$: Actions,\n    private store: Store<fromFeature.State>,\n    private servicesClientApi: ServicesClientApi,\n    private matDialog: MatDialog\n  ) {}\n\n  effects$ = createEffect(() => {\n\n    const openParamsDialog$ = this.actions$.pipe(\n      ofType(actions.openParamsDialog),\n      tap((action) => this.matDialog.open(CustomParamsDialogComponent, {data: action.dialogSettings})),\n      map(() => ({type: '[Services Client] params dialog opened'}))\n    );\n\n    const startHttp$ = this.actions$.pipe(\n      ofType(actions.callService),\n      withLatestFrom(this.store.pipe(select(fromFeature.selectFeature))),\n      filter(([action, state]) => state.params)\n    );\n\n    const setHttpStarted$ = startHttp$.pipe(\n      flatMap(() => of(actions.callServiceStarted()))\n    );\n\n    const doHttp$ = startHttp$.pipe(\n      withLatestFrom(this.store.pipe(select(fromFeature.selectFeature))),\n      switchMap(([action, state]) => {\n\n        return this.servicesClientApi.callService(state.method, state.url, state.params).pipe(\n          /* api call does not emit any value, cause the php response is not json, is an html page\n              so any event catched that is not an error is considered a successfull response\n          */\n          map(() => actions.callServiceSuccess()),\n\n          catchError((err: Error) => {\n\n            return concat(\n              of(actions.callServiceFailure({error: err.message})),\n              throwError(err)\n            );\n\n          })\n\n        );\n\n      })\n    );\n\n    const completeHttp$ = this.actions$.pipe(\n      ofType(actions.callServiceSuccess, actions.callServiceFailure),\n      map(() => actions.callServiceComplete())\n    );\n\n    return merge(openParamsDialog$, setHttpStarted$, doHttp$, completeHttp$);\n\n  });\n\n}\n","// angular\nimport { NgModule, ModuleWithProviders } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n// ngrx\nimport { StoreModule } from '@ngrx/store';\nimport { EffectsModule } from '@ngrx/effects';\n\n// material\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialogModule } from '@angular/material/dialog';\n\n// state\nimport * as fromFeature from './services-client.reducer';\nimport { ServicesClientEffetcs } from './services-client.effects';\nimport { CustomParamsDialogComponent } from './components/custom-params-dialog.component';\nimport { FormPlaceholderDirective } from './components/form-placeholder.directive';\n\n// internal\nimport { ModuleLoader, FORMS_MODULE_FACTORY } from './injection/forms-module.token';\n\n@NgModule({\n    declarations: [CustomParamsDialogComponent, FormPlaceholderDirective],\n    imports: [\n        CommonModule,\n        StoreModule.forFeature(fromFeature.featureKey, fromFeature.reducer),\n        EffectsModule.forFeature([ServicesClientEffetcs]),\n        MatButtonModule,\n        MatDialogModule\n    ]\n})\nexport class ServicesClientModule {\n\n  static forRoot(factory: ModuleLoader): ModuleWithProviders<ServicesClientModule> {\n    return {\n      ngModule: ServicesClientModule,\n      providers: [\n        {\n          provide: FORMS_MODULE_FACTORY,\n          useValue: factory\n        }\n      ]\n    };\n  }\n\n}\n","import { Injectable } from '@angular/core';\nimport { Store } from '@ngrx/store';\nimport * as fromFeature from './services-client.reducer';\nimport * as actions from './services-client.actions';\nimport { ServiceDialogSettings } from './models/service-dialog-settings.model';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class ServicesClient {\n\n  constructor(\n    private store: Store<fromFeature.State>\n  ) {}\n\n  public callService(\n    method: 'GET' | 'POST',\n    url: string, paramsOrComponentName: string | any,\n    dialogSettings: ServiceDialogSettings = null)\n  : void {\n\n    const isString = typeof paramsOrComponentName === 'string';\n\n    // i have a component name, so open the dialog with that shitty component\n    if (isString) {\n      this.store.dispatch(actions.openParamsDialog({method, url, componentName: paramsOrComponentName, dialogSettings}));\n    } else {\n      this.store.dispatch(actions.callService({method, url, params: paramsOrComponentName}));\n    }\n\n  }\n\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["actions.callService","actions.openParamsDialog","actions.callServiceStarted","actions.callServiceSuccess","actions.callServiceFailure","actions.callServiceComplete","fromFeature.selectFeature","i5.FormPlaceholderDirective","i1","i2","i3.ServicesClientApi","i4","fromFeature.featureKey","fromFeature.reducer"],"mappings":"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"}