{"version":3,"file":"ddata-core.mjs","sources":["../../../projects/ddata-core/src/lib/ddata-injector.module.ts","../../../projects/ddata-core/src/lib/services/env/env.service.ts","../../../projects/ddata-core/src/lib/services/error-handler/ddata-core-error.ts","../../../projects/ddata-core/src/lib/services/error-handler/bad-request-error.ts","../../../projects/ddata-core/src/lib/services/error-handler/error-message-from-api-error.ts","../../../projects/ddata-core/src/lib/services/error-handler/forbidden-error.ts","../../../projects/ddata-core/src/lib/services/error-handler/internal-server-error.ts","../../../projects/ddata-core/src/lib/services/error-handler/method-not-allowed-error.ts","../../../projects/ddata-core/src/lib/services/error-handler/not-found-error.ts","../../../projects/ddata-core/src/lib/services/error-handler/third-party-error.ts","../../../projects/ddata-core/src/lib/services/error-handler/unauthorized-error.ts","../../../projects/ddata-core/src/lib/services/error-handler/unprocessable-entity-error.ts","../../../projects/ddata-core/src/lib/services/error-handler/validation-error.ts","../../../projects/ddata-core/src/lib/services/storage/storage.service.ts","../../../projects/ddata-core/src/lib/services/spinner/spinner.service.ts","../../../projects/ddata-core/src/lib/models/notification/notification.model.ts","../../../projects/ddata-core/src/lib/services/notification/notification.service.ts","../../../projects/ddata-core/src/lib/services/error-handler/app-error-handler.ts","../../../projects/ddata-core/src/lib/ddata-core.module.ts","../../../projects/ddata-core/src/lib/models/error/validation-error.model.ts","../../../projects/ddata-core/src/lib/services/validator/validator.service.ts","../../../projects/ddata-core/src/lib/models/base/base-model.model.ts","../../../projects/ddata-core/src/lib/models/paginate/paginate.interface.ts","../../../projects/ddata-core/src/lib/models/paginate/paginate.model.ts","../../../projects/ddata-core/src/lib/services/sorter/sorter.service.ts","../../../projects/ddata-core/src/lib/services/data/data-service.abstract.ts","../../../projects/ddata-core/src/lib/services/local-data/local-data.service.ts","../../../projects/ddata-core/src/lib/services/remote-data/remote-data.service.ts","../../../projects/ddata-core/src/lib/services/proxy/proxy.service.ts","../../../projects/ddata-core/src/lib/services/proxy/proxy-factory.service.ts","../../../projects/ddata-core/src/lib/services/helper/helper-activated-route.service.ts","../../../projects/ddata-core/src/lib/services/helper/helper.service.ts","../../../projects/ddata-core/src/lib/services/helper/helper-service.factory.ts","../../../projects/ddata-core/src/lib/models/initial-data/initial-data.model.ts","../../../projects/ddata-core/src/lib/services/initial-data/initial-data.service.ts","../../../projects/ddata-core/src/lib/components/base-create-edit/base-create-edit.component.ts","../../../projects/ddata-core/src/lib/components/base-list/base-list.component.ts","../../../projects/ddata-core/src/lib/components/base-list/selectable-list.component.ts","../../../projects/ddata-core/src/lib/components/dd-choose-selected-button/dd-choose-selected-button.component.ts","../../../projects/ddata-core/src/lib/components/dd-choose-selected-button/dd-choose-selected-button.component.html","../../../projects/ddata-core/src/lib/models/selectable/selectable.model.ts","../../../projects/ddata-core/src/lib/components/dd-selectable-list-element-button/dd-selectable-list-element-button.component.ts","../../../projects/ddata-core/src/lib/components/dd-selectable-list-element-button/dd-selectable-list-element-button.component.html","../../../projects/ddata-core/src/public-api.ts","../../../projects/ddata-core/src/ddata-core.ts"],"sourcesContent":["import { NgModule, Injector } from '@angular/core';\n\n// @dynamic\n@NgModule({\n  declarations: [],\n  imports: [],\n  providers: [],\n  exports: [],\n})\nexport class DdataInjectorModule {\n  static InjectorInstance: Injector;\n\n  constructor(injector: Injector) {\n    DdataInjectorModule.InjectorInstance = injector;\n  }\n\n}\n","import { Inject, Injectable } from '@angular/core';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class EnvService {\n  public environment: any = {};\n\n  constructor(@Inject('env') private env?: any) {\n    this.environment = env ?? {};\n  }\n}\n","\nexport class DdataCoreError {\n  msg = '';\n\n  constructor(\n    public originalError?: any,\n  ) {\n    if (!!originalError.error) {\n      if ( !!originalError.error.trace ) {\n        originalError.error.trace.forEach( (trace: any) => {\n          if ( trace.file !== undefined && trace.line !== undefined ) {\n            if ( trace.file.match(/app\\/Http\\/Controllers\\//) ) {\n              this.msg += trace.file + ':' + trace.line;\n            }\n          }\n        });\n      }\n    }\n  }\n}\n","import { DdataCoreError } from './ddata-core-error';\nimport { NotificationService } from '../notification/notification.service';\nimport { NotificationType } from '../../models/base/base-data.type';\n\nexport class BadRequest extends DdataCoreError {\n\n  constructor(\n    originalError: any,\n    notificationService: NotificationService,\n  ) {\n    super(originalError);\n    console.error('Bad Request Error: ', originalError.error.message);\n    notificationService.add('Hiba', 'Valami hiba történt a szerveren!<br>Kérlek próbáld meg később', 'danger' as NotificationType);\n  }\n\n}\n","import { DdataCoreError } from './ddata-core-error';\nimport { NotificationService } from '../notification/notification.service';\nimport { NotificationType } from '../../models/base/base-data.type';\n\nexport class ErrorMessageFromApi extends DdataCoreError {\n  constructor(\n    originalError: any,\n    notificationService: NotificationService,\n  ) {\n    super(originalError);\n\n    console.error('430 - Api message: ', originalError.error);\n\n    notificationService.add('Hiba', originalError.error, 'danger' as NotificationType);\n\n  }\n\n}\n","import { DdataCoreError } from './ddata-core-error';\nimport { NotificationService } from '../notification/notification.service';\nimport { NotificationType } from '../../models/base/base-data.type';\n\nexport class ForbiddenError extends DdataCoreError {\n  constructor(\n    originalError: any,\n    notificationService: NotificationService,\n  ) {\n    super(originalError);\n\n    console.error('403 - Forbidden Error: ', originalError.error.message, originalError);\n\n    notificationService.add('Hiba', 'Nincs engedélyed ezt a műveletet végrehajtani.', 'danger' as NotificationType);\n\n  }\n\n}\n","import { DdataCoreError } from './ddata-core-error';\nimport { NotificationService } from '../notification/notification.service';\nimport { NotificationType } from '../../models/base/base-data.type';\n\nexport class InternalServerError extends DdataCoreError {\n\n  constructor(\n    originalError: any,\n    notificationService: NotificationService,\n  ) {\n    super(originalError);\n    console.error('Internal Server Error: ', originalError.error.message);\n    notificationService.add('Hiba', 'Szerver hiba történt', 'danger' as NotificationType);\n  }\n\n}\n","import { DdataCoreError } from './ddata-core-error';\nimport { NotificationService } from '../notification/notification.service';\nimport { NotificationType } from '../../models/base/base-data.type';\n\nexport class MethodNotAllowedError extends DdataCoreError {\n\n  constructor(\n    originalError: any,\n    notificationService: NotificationService,\n  ) {\n    super(originalError);\n    console.error('Method Not Allowed Error: ', originalError.error.message);\n    notificationService.add('Hiba', 'A funkció nem érhető el.', 'danger' as NotificationType);\n  }\n\n}\n","import { DdataCoreError } from './ddata-core-error';\nimport { NotificationService } from '../notification/notification.service';\nimport { NotificationType } from '../../models/base/base-data.type';\n\nexport class NotFoundError extends DdataCoreError {\n\n  constructor(\n    originalError: any,\n    notificationService: NotificationService,\n  ) {\n    super(originalError);\n    console.error('Not Found Error: ', originalError.error.message);\n    notificationService.add('Hiba', 'A keresett oldal nem található.', 'danger' as NotificationType);\n  }\n\n}\n","import { DdataCoreError } from './ddata-core-error';\nimport { NotificationService } from '../notification/notification.service';\nimport { NotificationType } from '../../models/base/base-data.type';\n\nexport class ThirdPartyError extends DdataCoreError {\n  constructor(\n    originalError: any,\n    notificationService: NotificationService,\n  ) {\n    super(originalError);\n\n    console.error('580 - API message: ', originalError.error);\n\n    notificationService.add('Hiba', originalError.error, 'danger' as NotificationType);\n\n  }\n\n}\n","import { Router } from '@angular/router';\nimport { DdataCoreError } from './ddata-core-error';\nimport { StorageService } from '../storage/storage.service';\n\nexport class UnauthorizedError extends DdataCoreError {\n  constructor(\n    router: Router,\n    originalError: any,\n    storageService: StorageService,\n  ) {\n    super(originalError);\n\n    console.error('401 - Unauthorized Error');\n\n    // notificationService.pushNotification('Hiba', 'A Munka folyamat élrvényessége lejárt!<br>Kérlek jelentkezz be újra.', 'danger');\n\n    if (router.url !== '/login') {\n      storageService.clear();\n\n      const logoutNavbarItem: HTMLElement = document.getElementById('nav-logout') as HTMLElement;\n      if (logoutNavbarItem !== null) {\n        // ha van logout menüpont\n        logoutNavbarItem.click();\n      } else {\n        // ha nincs logout menüpont\n        const loginNavbarItem: HTMLElement = document.getElementById('nav-login') as HTMLElement;\n        if (loginNavbarItem !== null) {\n          // ha van login menüpont\n          loginNavbarItem.click();\n        } else {\n          // ha nincs login menüpont sem\n          router.navigate(['/login']);\n        }\n      }\n    }\n  }\n\n}\n","import { DdataCoreError } from './ddata-core-error';\nimport { NotificationService } from '../notification/notification.service';\nimport { NotificationType } from '../../models/base/base-data.type';\n\nexport class UnprocessableEntity extends DdataCoreError {\n\n  constructor(\n    originalError: any,\n    notificationService: NotificationService,\n  ) {\n    super(originalError);\n    console.error('Unprocessable Entry Error: ', originalError.error.message);\n    notificationService.add('Hiba', 'Nem feldolgozható kérés', 'danger' as NotificationType);\n  }\n\n}\n","import { DdataCoreError } from './ddata-core-error';\nimport { NotificationService } from '../notification/notification.service';\nimport { NotificationType } from '../../models/base/base-data.type';\n\nexport class AppValidationError extends DdataCoreError {\n  constructor(\n    originalError: any,\n    notificationService: NotificationService\n  ) {\n    super(originalError);\n\n    console.error('Validation Error: ', originalError.error);\n\n    let str = 'Valamelyik adatmező nem a megfeleő formátumú';\n\n    if (!!originalError.error.errors) {\n      str = Object.values(originalError.error.errors).join('<br>');\n    }\n\n    if (!!originalError.error.invalids) {\n      str = 'A következő mezők rosszul lettek kitöltve:<br>' + originalError.error.invalids.join(', ');\n    }\n\n    notificationService.add('Hiba', str, 'danger' as NotificationType);\n  }\n\n}\n","import { Injectable } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\nimport { StorageServiceInterface } from './storage-service.interface';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class StorageService implements StorageServiceInterface {\n  private storageSub = new Subject<boolean>();\n\n  constructor() { }\n\n  watchStorage(): Observable<any> {\n    return this.storageSub.asObservable();\n  }\n\n  setItem(key: string, data: any): void {\n    localStorage.setItem(key, data);\n    this.storageSub.next(true);\n  }\n\n  removeItem(key: any): void {\n    localStorage.removeItem(key);\n    this.storageSub.next(true);\n  }\n\n  clear(): void {\n    localStorage.clear();\n    this.storageSub.next(true);\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\nimport { DdataInjectorModule } from '../../ddata-injector.module';\nimport { EnvService } from '../env/env.service';\nimport { SpinnerServiceInterface } from './spinner-service.interface';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class SpinnerService implements SpinnerServiceInterface {\n  /**\n   * Application environment variable from the root application\n   */\n  private appEnv = new EnvService();\n  // TODO ezt vissza kell csinálni\n  // private appEnv = DdataInjectorModule.InjectorInstance.get(EnvService);\n\n  /**\n   * Observable subject of spinner service\n   */\n  private spinnerSubject = new Subject<boolean>();\n\n  /**\n   * Spinner is visible or not\n   */\n  private spinnerIsVisible = false;\n\n  /**\n   * Starter value of spinner service\n   */\n  private starter = '';\n\n  constructor() {}\n\n  /**\n   * You can subscribe to the spinner service observable subject to react the spinner's change.\n   */\n  watch(): Observable<any> {\n    return this.spinnerSubject.asObservable();\n  }\n\n  /**\n   * Spinner can be on or off. This function do all things to change the spinner's state.\n   *\n   * @param state `on` or `off`\n   * @param starter any unique random string to avoid multiple spinners show\n   */\n  private setStatus(state: 'on' | 'off', starter: string): boolean {\n    if (!!this.appEnv.environment.debug) {\n      console.log('global spinner set', state, starter);\n    }\n\n    if (starter === 'ERROR_HANDLER') {\n      this.setValues();\n\n      if (!!this.appEnv.environment.debug) {\n        console.log('Spinner set off by ERROR_HANDLER');\n      }\n\n      return true;\n    }\n\n    if (state === 'on' && !this.spinnerIsVisible && this.starter === '') {\n      this.setValues(true, starter);\n\n      return true;\n    }\n\n    if (state === 'off' && this.spinnerIsVisible === true && this.starter === starter) {\n      this.setValues();\n\n      return true;\n    }\n  }\n\n  /**\n   * Set values of spinner & emit observers.\n   *\n   * @param isVisible boolean\n   * @param starter string\n   */\n  private setValues(isVisible: boolean = false, starter: string = ''): void {\n    this.starter = starter;\n    this.spinnerIsVisible = isVisible;\n    this.spinnerSubject.next(isVisible);\n  }\n\n  /**\n   * Switch on the spinner.\n   *\n   * @param starter string - any random, unique string could be good\n   */\n  on(starter: string): boolean {\n    return this.setStatus('on', starter);\n  }\n\n  /**\n   * Switch off the spinner.\n   *\n   * @param starter string - same string what you used on `on()` function.\n   */\n  off(starter: string): boolean {\n    return this.setStatus('off', starter);\n  }\n\n  /**\n   * You can get the current state of the spinner.\n   */\n  getStatus(): boolean {\n    return this.spinnerIsVisible;\n  }\n\n}\n","import { NotificationType } from '../base/base-data.type';\nimport { NotificationInterface } from './notification.interface';\n\nexport class Notification implements NotificationInterface {\n  text: string;\n  title: string;\n  type: NotificationType;\n  createdTime: Date;\n\n  // types: warning, danger, success\n  constructor(text: string, title: string, type: NotificationType, seconds: number = 5) {\n    this.text = text;\n    this.title = title;\n    this.type = type;\n    this.createdTime = new Date();\n    this.createdTime.setSeconds(this.createdTime.getSeconds() + seconds);\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\nimport { NotificationType } from '../../models/base/base-data.type';\nimport { BaseModelInterface } from '../../models/base/base-model.model';\nimport { NotificationInterface } from '../../models/notification/notification.interface';\nimport { Notification } from '../../models/notification/notification.model';\nimport { NotificationServiceInterface } from './notification-service.interface';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class NotificationService implements NotificationServiceInterface {\n  private notifications: NotificationInterface[] = [];\n  private notificationSub: Subject<NotificationInterface[]> = new Subject<NotificationInterface[]>();\n\n  constructor() { }\n\n  add(title: string, text: string, type: NotificationType): void {\n    const notificationModel: NotificationInterface = new Notification(text, title, type);\n\n    setTimeout(() => {\n      this.delete( this.notifications.indexOf(notificationModel));\n    }, 7000);\n\n    this.notifications.push(notificationModel);\n    this.notificationSub.next(this.notifications);\n  }\n\n  watch(): Observable<NotificationInterface[]> {\n    return this.notificationSub.asObservable();\n  }\n\n  delete(index: number): void {\n    this.notifications.splice(index, 1);\n    this.notificationSub.next(this.notifications);\n  }\n\n  showValidationError(fields: BaseModelInterface<any>): void {\n    const type: NotificationType = 'danger' as NotificationType;\n    this.add('Hiba', 'A következő mezők rosszul lettek kitöltve:<br>' + fields.getValidatedErrorFields().join(', '), type);\n  }\n}\n","import { ErrorHandler, Injectable } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { throwError } from 'rxjs';\nimport { DdataInjectorModule } from '../../ddata-injector.module';\nimport { NotificationService } from '../notification/notification.service';\nimport { SpinnerService } from '../spinner/spinner.service';\nimport { StorageService } from '../storage/storage.service';\nimport { BadRequest } from './bad-request-error';\nimport { ErrorMessageFromApi } from './error-message-from-api-error';\nimport { ForbiddenError } from './forbidden-error';\nimport { InternalServerError } from './internal-server-error';\nimport { MethodNotAllowedError } from './method-not-allowed-error';\nimport { NotFoundError } from './not-found-error';\nimport { ThirdPartyError } from './third-party-error';\nimport { UnauthorizedError } from './unauthorized-error';\nimport { UnprocessableEntity } from './unprocessable-entity-error';\nimport { AppValidationError } from './validation-error';\n\n@Injectable()\nexport class DdataCoreErrorHandler extends ErrorHandler {\n  // storageService: StorageService = DdataInjectorModule.InjectorInstance.get<StorageService>(StorageService);\n  // spinner: SpinnerService = DdataInjectorModule.InjectorInstance.get<SpinnerService>(SpinnerService);\n  // notificationService: NotificationService = DdataInjectorModule.InjectorInstance.get<NotificationService>(NotificationService);\n\n  constructor(\n    private storageService: StorageService,\n    private spinner: SpinnerService,\n    private notificationService: NotificationService,\n  ) {\n    super();\n  }\n\n  handleError(err: any): any {\n    const router = DdataInjectorModule.InjectorInstance.get(Router);\n    const error = !!err.originalError ? err.originalError : err;\n    let result: any;\n\n    console.error('A részletes hiba:', err);\n\n    if (error.status === 400) {\n      result = throwError( new BadRequest(error, this.notificationService) );\n    }\n\n    if (error.status === 401) {\n      result = throwError( new UnauthorizedError(router, error, this.storageService) );\n    }\n\n    if (error.status === 403) {\n      result = throwError( new ForbiddenError(error, this.notificationService) );\n    }\n\n    if (error.status === 404) {\n      result = throwError( new NotFoundError(error, this.notificationService) );\n    }\n\n    if (error.status === 405) {\n      result = throwError( new MethodNotAllowedError(error, this.notificationService) );\n    }\n\n    if (error.status === 422) {\n      result = throwError( new UnprocessableEntity(error, this.notificationService) );\n    }\n\n    if (error.status === 430) {\n      result = throwError( new ErrorMessageFromApi(error, this.notificationService) );\n    }\n\n    if (error.status === 480 || err instanceof AppValidationError) {\n      result = throwError( new AppValidationError(error, this.notificationService) );\n    }\n\n    if (error.status === 500) {\n      result = throwError( new InternalServerError(error, this.notificationService) );\n    }\n\n    if (error.status === 580) {\n      result = throwError( new ThirdPartyError(error, this.notificationService) );\n    }\n\n    this.spinner.off('ERROR_HANDLER');\n    return result;\n    // TODO egyéb hibák kezelését + ismeretlen hibák kezelését is meg kell oldani\n  }\n}\n","import { ErrorHandler, Injector, ModuleWithProviders, NgModule } from '@angular/core';\nimport { DdataInjectorModule } from './ddata-injector.module';\nimport { EnvService } from './services/env/env.service';\nimport { DdataCoreErrorHandler } from './services/error-handler/app-error-handler';\nimport { SpinnerService } from './services/spinner/spinner.service';\n\n// @dynamic\n@NgModule({\n  declarations: [],\n  imports: [\n    DdataInjectorModule,\n  ],\n  providers: [\n    { provide: ErrorHandler, useClass: DdataCoreErrorHandler },\n\n    SpinnerService,\n  ],\n  exports: [],\n})\nexport class DdataCoreModule {\n  static InjectorInstance: Injector;\n\n  constructor(injector: Injector) {\n    DdataCoreModule.InjectorInstance = injector;\n  }\n\n  public static forRoot(environment: any): ModuleWithProviders<DdataCoreModule> {\n    return {\n      ngModule: DdataCoreModule,\n      providers: [\n        EnvService,\n        {\n          provide: 'env', // you can also use InjectionToken\n          useValue: environment\n        }\n      ]\n    };\n  }\n}\n","import { ValidationErrorSettingsInterface } from './validation-error-settings.model';\n\nexport interface ValidationErrorInterface extends Error {\n  name: string;\n  message: string;\n  invalids: string[];\n  status: number;\n  originalError: any;\n}\n\nexport class ValidationError extends Error implements ValidationErrorInterface {\n  readonly name = 'ValidationError';\n  readonly status = 480; // Custom error code: Validation Error on client side\n  message: string;\n  invalids: string[] = [];\n  originalError = {\n    status: this.status,\n    error: {\n      name: this.name,\n      message: this.message,\n      invalids: this.invalids,\n      trace: [],\n    }\n  };\n\n  constructor(settings: ValidationErrorSettingsInterface) {\n    super(settings.message);\n\n    settings = !!settings ? settings : {};\n\n    this.message = !!settings.message ? settings.message : this.message;\n    this.invalids = !!settings.invalids ? settings.invalids : this.invalids;\n    this.originalError.error.invalids = this.invalids;\n\n    Object.setPrototypeOf(this, ValidationError.prototype);\n  }\n}\n","// tslint:disable: max-line-length\nimport { Injectable } from '@angular/core';\nimport { ValidationErrorSettingsInterface } from '../../models/error/validation-error-settings.model';\nimport { ValidationError } from '../../models/error/validation-error.model';\n\n@Injectable()\nexport class ValidatorService {\n  private addressCardNumberRegExp: RegExp = new RegExp(/^([A-Z]{2}\\d{6})$/);\n  private bankaccountRegExp: RegExp = new RegExp(/^(\\d{8}\\-)(\\d{8})(-\\d{8})?$/);\n  private colorCodeRegExp: RegExp = new RegExp(/^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/);\n  private creditCardAmericanExpressRegExp = new RegExp(/^(?:3[47][0-9]{13})$/);\n  private creditCardDiscoverRegExp = new RegExp(/^(?:6(?:011|5[0-9][0-9])[0-9]{12})$/);\n  private creditCardMastercardRegExp = new RegExp(/^(?:5[1-5][0-9]{14})$/);\n  private creditCardVisaRegExp = new RegExp(/^(?:4[0-9]{12}(?:[0-9]{3})?)$/);\n  private domainRegExp: RegExp = new RegExp(/^(?:(?:(?:[a-zA-Z\\-]+)\\:\\/{1,3})?(?:[a-zA-Z0-9])(?:[a-zA-Z0-9-\\.]){1,61}[a-zA-Z0-9](?:\\.[a-zA-Z]{2,})+|\\[(?:(?:(?:[a-fA-F0-9]){1,4})(?::(?:[a-fA-F0-9]){1,4}){7}|::1|::)\\]|(?:(?:[0-9]{1,3})(?:\\.[0-9]{1,3}){3}))(?:\\:[0-9]{1,5})?$/);\n  private drivingLicenceRegExp: RegExp = new RegExp(/^([A-Z]{2}\\d{6})$/);\n  private emailRegExp: RegExp = new RegExp(/^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/);\n  private ibanCodeRegExp: RegExp = new RegExp(/^([A-Z]{2}\\d{2})|([A-Z]{4})|(\\d{4})$/);\n  private idCardNumberRegExp: RegExp = new RegExp(/^(([A-Z]{2}\\d{6})|(\\d{6}[A-Z]{2}))$/);\n  private isoDateRegExp: RegExp = new RegExp(/^(\\d{4})([\\.\\-\\/])(0[0-9]|1[0-2])([\\.\\-\\/])([0-2][0-9]|3[0-1])$/);\n  private langRegExp = new RegExp(/^[A-Za-z]{2}$/);\n  private nameRegExp: RegExp = new RegExp(/^([a-zA-Z]+[\\.]? )*([A-ZÁÉÍÓÖŐÚÜŰ][a-záéíúüűóöő]*)([ -]([A-ZÁÉÍÓÖŐÚÜŰ][a-záéíúüűóöő-]*))*([MD])?$/);\n  private personTaxNumberRegExp: RegExp = new RegExp(/^\\d{10}$/);\n  private phonenumberRegExp: RegExp = new RegExp(/^[+]\\d{10,}$/);\n  private registerNumberRegExp: RegExp = new RegExp(/^(\\d{2}\\-)(\\d{2})(-\\d{6})$/);\n  private socialInsuranceNumberRegExp: RegExp = new RegExp(/^(\\d{3}[ \\-]?){2}(\\d{3})$/);\n  private swiftCodeRegExp: RegExp = new RegExp(/^((\\d{8})|(\\d{11}))$/);\n  private taxnumberRegExp: RegExp = new RegExp(/^(\\d{8})\\-\\d\\-(\\d\\d)$|^(AT|BE|BG|CY|CZ|DE|DK|EE|EL|ES|FI|FR|GB|HR|HU|IE|IT|LT|LU|LV|MT|NL|PL|PT|RO|SE|SI|SK)\\d{8}$/);\n  private urlRegExp: RegExp = new RegExp(/(https?:\\/\\/(?:www\\.|(?!www))[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\\.[^\\s]{2,}|https?:\\/\\/(?:www\\.|(?!www))[a-zA-Z0-9]+\\.[^\\s]{2,})/);\n\n  /**\n   * Validate JSON objects based on custom rules.\n   *\n   * @param data JSON object of datas\n   * @param rules JSON object of rules. Each item of `rules` must be an array of validation keywords, rules.\n   * @param throwError boolean, default true - if validation fails then ValidationError happen.\n   *\n   * ```\n   * rules = {\n   *   id: ['integer', 'required'],\n   *   date_of_birth: ['iso_date', 'required'],\n   *   passport: ['string', 'nullable'],\n   *   identity_card_number: ['id_card_number', 'required']\n   * }\n   * ```\n   */\n  validateObject(data: any, rules: any, isThrowError = true, settings?: ValidationErrorSettingsInterface): [boolean, string[]] {\n    const results: boolean[] = [];\n    const invalids: string[] = [];\n\n    Object.keys(rules).forEach((key: string) => {\n      const fieldValidationResult = this.validate(data[key], rules[key]);\n      results.push(fieldValidationResult);\n\n      if (!fieldValidationResult) {\n        invalids.push(key);\n      }\n    });\n\n    const result = results.every(this.isTrue);\n\n    if (!result && isThrowError) {\n      settings.invalids = invalids;\n      throw new ValidationError(settings);\n    }\n\n    return [result, invalids];\n  }\n\n  validate(data: any, rules: string | string[]): boolean {\n    const ruleList: string[] = typeof rules === 'string' ? [rules] : rules;\n    const results: boolean[] = [];\n\n    if (ruleList.includes('nullable') && data == null) {\n      return true;\n    }\n\n    // if nullable rule enabled\n    if ((ruleList.includes('nullable') && data === undefined) || (ruleList.includes('nullable') && data.length === 0)) {\n      return true;\n    }\n\n    // TODO megcsinálni, hogy kitalálja a függvény a szabályt a típus alapján. Pl. BankAccountNumber - bankaacount\n\n    ruleList.forEach((rule: string)  => {\n      const [ruleType, ruleValue] = rule.split(':');\n\n      switch (ruleType) {\n        case 'string':\n          results.push(this.isString(data));\n          break;\n        case 'number':\n          results.push(this.isNumber(data));\n          break;\n        case 'boolean':\n          results.push(this.isBoolean(data));\n          break;\n        case 'integer':\n          results.push(this.isInteger(data));\n          break;\n        case 'required':\n          results.push(this.isRequired(data));\n          break;\n        case 'name':\n          results.push(this.isName(data));\n          break;\n        case 'email':\n          results.push(this.isEmail(data));\n          break;\n        case 'domain':\n          results.push(this.isDomain(data));\n          break;\n        case 'url':\n          results.push(this.isUrl(data));\n          break;\n        case 'iso_date':\n          results.push(this.isIsoDate(data));\n          break;\n        case 'driving_licence':\n          results.push(this.isDrivingLicence(data));\n          break;\n        case 'id_card_number':\n          results.push(this.isIdCardNumber(data));\n          break;\n        case 'address_card_number':\n          results.push(this.isAddressCardNumber(data));\n          break;\n        case 'phonenumber':\n          results.push(this.isPhoneNumber(data));\n          break;\n        case 'bankaccount':\n          results.push(this.isBankAccount(data));\n          break;\n        case 'taxnumber':\n          results.push(this.isTaxNumber(data));\n          break;\n        case 'social_insurance_number':\n          results.push(this.isSocialInsuranceNumber(data));\n          break;\n        case 'not_zero':\n          results.push(this.isNotZero(data));\n          break;\n        case 'lang':\n          results.push(this.isLang(data));\n          break;\n        case 'register_number':\n          results.push(this.isregisterNumber(data));\n          break;\n        case 'array':\n          results.push(this.isArray(data));\n          break;\n        case 'not_empty':\n          results.push(this.isNotEmpty(data));\n          break;\n        case 'empty':\n          results.push(this.isEmpty(data));\n          break;\n        case 'person_taxnumber':\n          results.push(this.isPersonTaxNumber(data));\n          break;\n        case 'color_code':\n          results.push(this.isColorCode(data));\n          break;\n        case 'nullable':\n          // results.push(true);\n          break;\n        case 'iban_code':\n          results.push(this.isIbanCode(data));\n          break;\n        case 'swift_code':\n          results.push(this.isSwiftCode(data));\n          break;\n        case 'min':\n          results.push(this.min(data, Number(ruleValue)));\n          break;\n        case 'max':\n          results.push(this.max(data, Number(ruleValue)));\n          break;\n\n        default:\n          results.push(false);\n      }\n\n    });\n\n    return results.every(this.isTrue);\n  }\n\n  private isTrue(value: boolean): boolean {\n    return value;\n  }\n\n  min(data: any, minimum: number): boolean {\n    // number\n    if (typeof data === 'number') {\n      return data >= minimum;\n    }\n\n    // array length\n    if (data instanceof Array) {\n      return data.length >= minimum;\n    }\n\n    // string length\n    if (typeof data === 'string') {\n      return data.length >= minimum;\n    }\n\n    return false;\n  }\n\n  max(data: any, maximum: number): boolean {\n    // number\n    if (typeof data === 'number') {\n      return data <= maximum;\n    }\n\n    // array length\n    if (data instanceof Array) {\n      return data.length <= maximum;\n    }\n\n    // string length\n    if (typeof data === 'string') {\n      return data.length <= maximum;\n    }\n\n    return false;\n  }\n\n  isRequired(data: any): boolean {\n\n    if (data instanceof Array && data.length === 0) {\n      return false;\n    }\n\n    if (data instanceof Object && Object.keys(data).length === 0) {\n      return false;\n    }\n\n    if (data !== undefined && data !== null && data !== '') {\n      return true;\n    }\n\n    return false;\n  }\n\n  isNullable(data: any): boolean {\n    return true;\n  }\n\n  isString(data: any): boolean {\n    if (typeof data === 'string') {\n      return true;\n    }\n\n    return false;\n  }\n\n  isBoolean(data: any): boolean {\n    return data === true || data === false || data === null || data === 1 || data === 0;\n  }\n\n  isNumber(data: any): boolean {\n    return !Number.isNaN(data);\n  }\n\n  isInteger(data: any): boolean {\n    if (typeof data === 'number' && Number.isInteger(data)) {\n      return true;\n    }\n\n    return false;\n  }\n\n  isNotZero(data: any): boolean {\n    return data !== 0;\n  }\n\n  isregisterNumber(data: any): boolean {\n    return this.registerNumberRegExp.test(data);\n  }\n\n  isLang(data: any): boolean {\n    return this.langRegExp.test(data);\n  }\n\n  isName(data: any): boolean {\n    return this.nameRegExp.test(data);\n  }\n\n  isEmail(data: any): boolean {\n    return this.emailRegExp.test(data);\n  }\n\n  isDomain(data: any): boolean {\n    return this.domainRegExp.test(data);\n  }\n\n  isUrl(data: any): boolean {\n    return this.urlRegExp.test(data);\n  }\n\n  isIsoDate(data: any): boolean {\n    return this.isoDateRegExp.test(data);\n  }\n\n  isDrivingLicence(data: any): boolean {\n    return this.drivingLicenceRegExp.test(data);\n  }\n\n  isIdCardNumber(data: any): boolean {\n    return this.idCardNumberRegExp.test(data);\n  }\n\n  isAddressCardNumber(data: any): boolean {\n    return this.addressCardNumberRegExp.test(data);\n  }\n\n  isPhoneNumber(data: any): boolean {\n    return this.phonenumberRegExp.test(data);\n  }\n\n  isBankAccount(data: any): boolean {\n    return this.bankaccountRegExp.test(data);\n  }\n\n  isTaxNumber(data: any): boolean {\n    return this.taxnumberRegExp.test(data);\n  }\n\n  isSocialInsuranceNumber(data: any): boolean {\n    return this.socialInsuranceNumberRegExp.test(data);\n  }\n\n  isCreditCard(data: any): boolean {\n    const results: boolean[] = [\n      this.isCreditCardVisa(data),\n      this.isCreditCardMastercard(data),\n      this.isCreditCardAmericanExpress(data),\n      this.isCreditCardDiscover(data)\n    ];\n\n    return results.includes(true);\n  }\n\n  isCreditCardVisa(data: any): boolean {\n    return this.creditCardVisaRegExp.test(data);\n  }\n\n  isCreditCardMastercard(data: any): boolean {\n    return this.creditCardMastercardRegExp.test(data);\n  }\n\n  isCreditCardAmericanExpress(data: any): boolean {\n    return this.creditCardAmericanExpressRegExp.test(data);\n  }\n\n  isCreditCardDiscover(data: any): boolean {\n    return this.creditCardDiscoverRegExp.test(data);\n  }\n\n  isArray(data: any): boolean {\n    return data instanceof Array;\n  }\n\n  isEmpty(data: any): boolean {\n    if (data !== undefined && data !== null) {\n      return data.length === 0;\n    }\n\n    return false;\n\n  }\n\n  isNotEmpty(data: any): boolean {\n    return data.length > 0;\n  }\n\n  isPersonTaxNumber(data: any): boolean {\n    if (!data) {\n      return false;\n    }\n    return this.personTaxNumberRegExp.test(data);\n  }\n\n  isColorCode(data: any): boolean {\n    if (!data) {\n      return false;\n    }\n    return this.colorCodeRegExp.test(data);\n  }\n\n  isIbanCode(data: any): boolean {\n    return this.ibanCodeRegExp.test(data);\n  }\n\n  isSwiftCode(data: any): boolean {\n    return this.swiftCodeRegExp.test(data);\n  }\n}\n","// tslint:disable: max-line-length\n// tslint:disable: variable-name\nimport { DdataCoreModule } from '../../ddata-core.module';\nimport { ValidatorServiceInterface } from '../../services/validator/validator-service.interface';\nimport { ValidatorService } from '../../services/validator/validator.service';\nimport { ValidationErrorSettingsInterface } from '../error/validation-error-settings.model';\nimport { ValidationError } from '../error/validation-error.model';\nimport { ID, ISODate } from './base-data.type';\n\nexport interface FieldInterface {\n  label: string;\n  title: string;\n  placeholder?: string;\n  append?: string;\n  prepend?: string;\n  validateByType?: boolean;\n  validationRules?: Rule[];\n  additionalValidationRules?: Rule[];\n}\n\nexport type FieldContainerInterface<T> = {\n  [key in keyof T]: FieldInterface;\n};\n\nexport interface FieldColumnInterface<T> {\n  cssClass?: string;\n  cssId?: string;\n  cssStyle?: string;\n  fields: FieldContainerInterface<T>[];\n}\n\nexport interface TabInterface<T> {\n  title: string;\n  label: string;\n  cssId?: string;\n  cssClass?: string;\n  columns: FieldColumnInterface<T>[];\n}\n\ntype Rule = 'string' | 'boolean' | 'number' | 'integer' | 'required' | 'nullable' | 'name' | 'email' | 'domain' | 'url' |\n  'iso_date' | 'driving_licence' | 'id_card_number' | 'address_card_number' | 'phonenumber' | 'bankaccount' |\n  'taxnumber' | 'social_insurance_number' | 'not_zero' | 'lang' | 'register_number' |\n  'array' | 'not_empty' | 'empty' | 'person_taxnumber' | 'color_code' | 'iban_code' | 'swift_code';\n\nexport interface ValidationRuleInterface {\n  [key: string]: Rule[];\n}\n\nexport interface BaseModelWithoutTypeDefinitionInterface  {\n  readonly api_endpoint: string;\n  readonly use_localstorage: boolean;\n  readonly model_name: string;\n  id: ID;\n  isValid: boolean;\n  validationErrors: string[];\n  validationRules: ValidationRuleInterface;\n  init(data?: any): any;\n  prepareToSave(): any;\n  validate(): void;\n  getValidatedErrorFields(): string[];\n  setDate(date: Date, days: number): ISODate;\n  getCurrentUserId(): ID;\n  getCurrentISODate(): ISODate;\n  toISODate(date: Date): ISODate;\n  toISODatetime(date: Date): string;\n  calculateDateWithoutWeekend(date: string, days: number, sequence: string): ISODate;\n  getCurrentTime(): string;\n}\n\nexport interface FieldsInterface<T> {\n  fields: FieldContainerInterface<T>;\n}\n\nexport interface BaseModelInterface<T> extends BaseModelWithoutTypeDefinitionInterface {\n  tabs?: TabInterface<T>;\n  fieldAsBoolean(field: string, defaultValue: boolean, data: unknown): void;\n  fieldAsNumber(field: string, defaultValue: number, data: unknown): void;\n  fieldAsString(field: string, defaultValue: string, data: unknown): void;\n  initModelOrNull(fields: Partial<T>, data: unknown): void;\n  initAsBoolean(fields: Partial<T>, data: unknown): void;\n  initAsBooleanWithDefaults(fields: Array<string>, data: unknown): void;\n  initAsNumber(fields: Partial<T>, data: unknown): void;\n  initAsNumberWithDefaults(fields: Array<string>, data: unknown): void;\n  initAsString(fields: Partial<T>, data: unknown): void;\n  initAsStringWithDefaults(fields: Array<string>, data: unknown): void;\n  prepareFieldsToSaveAsBooelan(fields: Partial<T>): Partial<T>;\n  prepareFieldsToSaveAsNumber(fields: Partial<T>): Partial<T>;\n  prepareFieldsToSaveAsString(fields: Partial<T>): Partial<T>;\n}\n\n// tslint:disable-next-line: no-empty-interface\ninterface ModelWithId {\n}\n\nexport class BaseModel implements BaseModelInterface<ModelWithId> {\n  id: ID;\n  api_endpoint = '/you/must/be/define/api_endpoint/in/your/model';\n  use_localstorage = false;\n  model_name = 'NotDefined';\n  isValid = false;\n  validationErrors: string[] = [];\n  validationRules: ValidationRuleInterface = {};\n\n  fields: FieldContainerInterface<ModelWithId> = {};\n\n  init(data: any = null): any {\n      throw new Error('init() function is not implemented');\n  }\n\n  prepareToSave(): any {\n      throw new Error('prepareToSave() function is not implemented');\n  }\n\n  validate(preparedData?: any): void {\n    const validatorService: ValidatorServiceInterface = DdataCoreModule.InjectorInstance.get<ValidatorServiceInterface>(ValidatorService);\n\n    try {\n      [this.isValid, this.validationErrors] = validatorService.validateObject(\n        !!preparedData ? preparedData : this.prepareToSave(), this.validationRules, true,\n        {message: 'Validation Error'}\n      );\n    } catch (error) {\n      const newErrorSettings: ValidationErrorSettingsInterface = {message: error.message};\n\n      if (error instanceof ValidationError) {\n        this.validationErrors = error.invalids;\n        this.isValid = false;\n        newErrorSettings.invalids = this.getValidatedErrorFields();\n\n        throw new ValidationError(newErrorSettings);\n      }\n\n      throw error;\n    }\n  }\n\n  getValidatedErrorFields(): string[] {\n    const errorNames: string[] = [];\n\n    this.validationErrors.forEach((item: string) => {\n      errorNames.push(!!this.fields[item] ? this.fields[item].label : item);\n\n      if (!this.fields[item]) {\n        console.error(`${item} nevű mező nem található ezen a model-en: ${this.model_name}`, this);\n      }\n    });\n\n    return errorNames;\n  }\n\n  setDate(date: Date, days = 0): ISODate {\n    const new_date = new Date(date.setDate(date.getDate() + Number(days))).toISOString().split('T')[0];\n\n    return new_date as ISODate;\n  }\n\n  /**\n   * Return current date as ISODate\n   */\n  getCurrentISODate(): ISODate {\n    return new Date().toISOString().split('T')[0] as ISODate;\n  }\n\n  /**\n   * Return a date as ISODate\n   */\n  toISODate(date: Date): ISODate {\n    return date.toISOString().split('T')[0] as ISODate;\n  }\n\n  /**\n   * Return a datetime as YYYY-MM-DD hh:mm:ss format\n   */\n  toISODatetime(date: Date): string {\n    const iso_date = this.toISODate(date);\n    const iso_time = this.toISOTime(date);\n\n    return `${iso_date} ${iso_time}`;\n  }\n\n  /**\n   * Return a time as hh:mm:ss format\n   *\n   * @param date Date\n   * @returns string\n   */\n  toISOTime(date: Date): string {\n    const hours = (date.getHours() < 10 ? '0' : '') + date.getHours();\n    const minutes = (date.getMinutes() < 10 ? '0' : '') + date.getMinutes();\n    const seconds = (date.getSeconds() < 10 ? '0' : '') + date.getSeconds();\n\n    return `${hours}:${minutes}:${seconds}`;\n  }\n\n  /**\n   * Return current user's id as ID\n   */\n  getCurrentUserId(): ID {\n    return Number(localStorage.getItem('current_user_id')) as ID;\n  }\n\n  /**\n   * Return default deviza id as ID\n   */\n  getDefaultDevizaId(): ID {\n    return 45 as ID;\n  }\n\n  /**\n   * Calculate the date with days without weekends\n   *\n   * @param date start date\n   * @param days number of days to add\n   * @param sequence - asc / desc\n   */\n  calculateDateWithoutWeekend(date: string, days: number, sequence: 'up' | 'down'): ISODate {\n    const currentDate = new Date(date);\n    let calculatedDate = '';\n    let newDate = 0;\n\n    let i = 0;\n    while (i < Number(days)) {\n      sequence === 'down' ? newDate = currentDate.setDate(currentDate.getDate() - 1) : newDate = currentDate.setDate(currentDate.getDate() + 1);\n      const day = new Date(newDate).getDay();\n\n      if (day > 0 && day < 6) {\n          i ++;\n      }\n    }\n\n    if (newDate === 0) {\n      calculatedDate = new Date(date).toISOString().split('T')[0];\n    } else {\n      calculatedDate = new Date(newDate).toISOString().split('T')[0];\n    }\n\n    return calculatedDate as ISODate;\n  }\n\n  prepareFieldsToSaveAsString(fields: Partial<ModelWithId>): Partial<ModelWithId> {\n    const result = {};\n\n    Object.keys(fields).forEach((field: string) => {\n      result[field] = this[field] ?? String(fields[field]) ?? '';\n    });\n\n    return result;\n  }\n\n  prepareFieldsToSaveAsNumber(fields: Partial<ModelWithId>): Partial<ModelWithId> {\n    const result = {};\n\n    Object.keys(fields).forEach((field: string) => {\n      result[field] = this[field] ?? Number(fields[field]) ?? 0;\n    });\n\n    return result;\n  }\n\n  prepareFieldsToSaveAsBooelan(fields: Partial<ModelWithId>): Partial<ModelWithId> {\n    const result = {};\n\n    Object.keys(fields).forEach((field: string) => {\n      result[field] = this[field] ?? Boolean(fields[field]) ?? false;\n    });\n\n    return result;\n  }\n\n  initModelOrNull(fields: Partial<ModelWithId>, data: unknown): void {\n    Object.keys(fields).forEach((field: string) => {\n      this[field] = fields[field]?.init(data[field]) ?? null;\n    });\n  }\n\n  initAsBoolean(fields: Partial<ModelWithId>, data: unknown): void {\n    Object.keys(fields).forEach((field: string) => {\n      this.fieldAsBoolean(field, fields[field], data);\n    });\n  }\n\n  initAsBooleanWithDefaults(fields: Array<string>, data: unknown): void {\n    fields.forEach((field: string) => {\n      this.fieldAsBoolean(field, false, data);\n    });\n  }\n\n  fieldAsBoolean(field: string, defaultValue: boolean, data: unknown): void {\n    this[field] =\n      data[field] !== undefined && data[field] !== null && typeof data[field] === 'boolean'\n        ? data[field]\n        : defaultValue;\n  }\n\n  initAsString(fields: Partial<ModelWithId>, data: unknown): void {\n    Object.keys(fields).forEach((field: string) => {\n      this.fieldAsString(field, fields[field], data);\n    });\n  }\n\n  initAsStringWithDefaults(fields: Array<string>, data: unknown): void {\n    fields.forEach((field: string) => {\n      this.fieldAsString(field, '', data);\n    });\n  }\n\n  fieldAsString(field: string, defaultValue: string, data: unknown): void {\n    this[field] = data[field]?.toString() ?? defaultValue ?? '';\n  }\n\n  initAsNumber(fields: Partial<ModelWithId>, data: unknown): void {\n    Object.keys(fields).forEach((field: string) => {\n      this.fieldAsNumber(field, fields[field], data);\n    });\n  }\n\n  initAsNumberWithDefaults(fields: Array<string>, data: unknown): void {\n    fields.forEach((field: string) => {\n      this.fieldAsNumber(field, 0, data);\n    });\n  }\n\n  fieldAsNumber(field: string, defaultValue: number, data: unknown): void {\n    this[field] = !!data[field] ? Number(data[field]) : defaultValue;\n  }\n\n  getCurrentTime(): string {\n    const currentdate = new Date();\n\n    return `${currentdate.getHours()}:${currentdate.getMinutes()}`;\n  }\n}\n","// tslint:disable: variable-name\n\nexport class PaginateInterface {\n  current_page: number;\n  per_page: number;\n  from: number;\n  to: number;\n  data: any[] = [];\n  total: number;\n  last_page: number;\n}\n","// tslint:disable: variable-name\nimport { PaginateInterface } from './paginate.interface';\n\nexport class Paginate implements PaginateInterface {\n  current_page: number;\n  per_page: number;\n  from: number;\n  to: number;\n  data: any[] = [];\n  total: number;\n  last_page: number;\n\n  constructor(type: any, data?: any) {\n    if (!type) {\n      return null;\n    }\n\n    data = !!data ? data : {};\n\n    this.current_page = !!data.current_page ? data.current_page : 1;\n    this.per_page = !!data.per_page ? data.per_page : 1;\n    this.from = !!data.from ? data.from : 1;\n    this.to = !!data.to ? data.to : 1;\n    this.total = !!data.total ? data.total : 1;\n    this.last_page = !!data.last_page ? data.last_page : 1;\n\n    if (!!data.data) {\n      data.data.forEach( (item: any) => {\n        this.data.push(new type().init(item));\n      });\n    }\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { SorterServiceInterface } from './sorter-service.interface';\n\n@Injectable()\nexport class SorterService<T> implements SorterServiceInterface<T> {\n  sortBy(objects: Array<T>, key: string): Array<T> {\n    if (objects instanceof Array === false) {\n      return [];\n    }\n\n    objects.sort((a: T, b: T) => (!!a[key] ?\n      a[key].toString().localeCompare(b[key].toString(), 'hu', {numeric: true}) : 0));\n\n    return objects;\n  }\n\n  sortByDesc(objects: T[], key: string): T[] {\n    return this.sortBy(objects, key).reverse();\n  }\n}\n","import { PaginateInterface } from '../../models/paginate/paginate.interface';\nimport { Paginate } from '../../models/paginate/paginate.model';\n\nexport abstract class DataServiceAbstract<T> {\n\n  constructor(\n    public model: T,\n  ) { }\n\n  /**\n   * Create a new PaginateInterface object with returned datas. This function will be convert datas to living\n   * models.\n   *\n   * @param type data instance type in paginator\n   * @param result returned data from backend\n   *\n   * @returns PaginateInterface\n   */\n  protected getNewPaginateObject(type: any, returnedPaginateObject: any): PaginateInterface {\n    const paginate = this.hydrate(new Paginate(type), returnedPaginateObject);\n\n    paginate.data = this.hydrateArray(returnedPaginateObject.data);\n\n    return paginate;\n  }\n\n  /**\n   * Create a living models from any JSON data.\n   *\n   * @param data any JSON object\n   */\n  hydrateArray(data: any[]): T[] {\n    const models: T[] = [];\n\n    data.forEach((item: any) => {\n      // to deep clone we need to clear this.model's arrays\n      for (const key of Object.keys(this.model)) {\n        if (this.model[key] instanceof Array) {\n          this.model[key] = [];\n        }\n      }\n\n      // copy `this.model` into a clone object\n      const newModel = this.hydrate(this.model, this.model);\n\n      // initialize the new model with the instance of datas\n      newModel.init(item);\n\n      // push new model into the initialized, clone models array\n      models.push(newModel);\n    });\n\n    return models;\n  }\n\n  /**\n   * Create new clone instance from any object.\n   *\n   * @param fromModel object what you want to clone\n   * @param datas datas what you want to put into the clone object\n   */\n  hydrate = (fromModel: any, datas: any): any =>\n    Object.assign( Object.create( Object.getPrototypeOf(fromModel)), datas)\n\n}\n","import { Observable, Subject } from 'rxjs';\nimport { ID } from '../../models/base/base-data.type';\nimport { BaseModelInterface } from '../../models/base/base-model.model';\nimport { DataServiceAbstract } from '../data/data-service.abstract';\nimport { SorterServiceInterface } from '../sorter/sorter-service.interface';\nimport { SorterService } from '../sorter/sorter.service';\nimport { StorageServiceInterface } from '../storage/storage-service.interface';\nimport { StorageService } from '../storage/storage.service';\nimport { LocalDataServiceInterface } from './local-data-service.interface';\nimport pluralize from 'pluralize';\nimport { Injectable } from '@angular/core';\n\n// @dynamic\n@Injectable()\nexport class LocalDataService<T extends BaseModelInterface<T>>\n  extends DataServiceAbstract<T>\n  implements LocalDataServiceInterface<T> {\n\n  private storageService: StorageServiceInterface = new StorageService();\n  private sorterService: SorterServiceInterface<T> = new SorterService<T>();\n  private storageSubject = new Subject<boolean>();\n  private localStorageItemName = '';\n  private db: T[] = [];\n  private copyOfModel: T;\n\n  constructor(\n    model: T,\n  ) {\n    super(model);\n    this.localStorageItemName = this.convertTitleCaseToSnakeCase(pluralize(model.model_name));\n    this.allFromLocal();\n    this.copyOfModel = {...model};\n  }\n\n  private convertTitleCaseToSnakeCase(str: string): string {\n    return str\n      .replace(/\\.?([A-Z]+)/g, (x, y) => '_' + y.toLowerCase())\n      .replace(/^_/, '');\n  }\n\n  watch(): Observable<any> {\n    return this.storageSubject.asObservable();\n  }\n\n  /**\n   * Get all items from localStorage as T[]\n   */\n  allFromLocal(): T[] {\n    const data = JSON.parse( localStorage.getItem(this.localStorageItemName) ) || [];\n\n    this.db = this.hydrateArray(data);\n\n    return this.db;\n  }\n\n  /**\n   * Delete current id from database,  and refresh localstorage.\n   *\n   * @param item T object\n   * @param paginate Paginate object\n   *\n   * @return Paginate object or null - if null returns, LocalStorage isn't updated\n   */\n  delete(model: T): boolean {\n    if (!model) {\n      return false;\n    }\n\n    const index = this.db.indexOf(model);\n    this.db.splice(index, 1);\n    this.updateLocalstorage(this.db);\n\n    return true;\n  }\n\n  updateLocalstorage(data: T[]): void {\n    this.storageService.setItem(this.localStorageItemName, JSON.stringify(data));\n    this.allFromLocal();\n    this.storageSubject.next(true);\n  }\n\n  /**\n   * Get all sorted(asc) items from localStroage as T[]\n   *\n   * @param fieldName string\n   */\n  allFromLocalSortedBy(fieldName: string): T[] {\n    return this.sorterService.sortBy(this.db, fieldName);\n  }\n\n  /**\n   * Get all sorted(desc) items from localStroage as T[]\n   *\n   * @param fieldName string\n   */\n  allFromLocalSortedByDesc(fieldName: string): T[] {\n    return this.sorterService.sortByDesc(this.db, fieldName);\n  }\n\n  /**\n   * Find one item by ID in localStorage, return as T object.\n   *\n   * @param id unique ID of item\n   */\n  findById(id: number): T {\n    return this.db.find(item => item.id === Number(id)) || this.copyOfModel.init();\n  }\n\n  /**\n   * Find one item by the given field, return as T object.\n   *\n   * @param field field name where search the expression.\n   * @param value the value what search in the given field.\n   */\n  findByField(field: string, value: any): T {\n    return this.db.find( obj => obj[field] === value) || null;\n  }\n\n  /**\n   * Find one item by the given field, return as T object\n   *\n   * @param field field name where search the expression.\n   * @param value the value what search in the given field.\n   */\n  filterByField(field: string, value: any): T[] {\n    return this.db.filter( obj => obj[field] === value) || null;\n  }\n\n  /**\n   * Save a model into localstorage.\n   *\n   * @param model model to save\n   * @param id ID of model\n   */\n  save(model: T, id: number): void {\n    if (model.id === 0) {\n      model.id = id as ID;\n      this.db.push(model);\n      this.updateLocalstorage(this.db);\n    } else {\n      const oldModel = this.db.find(m => m.id === model.id);\n      const index = this.db.indexOf(oldModel);\n\n      this.db[index] = model;\n      this.updateLocalstorage(this.db);\n    }\n  }\n}\n","import { HttpClient, HttpErrorResponse, HttpEvent, HttpEventType, HttpHeaders, HttpRequest, HttpResponse } from '@angular/common/http';\nimport { Observable, of, Subject, throwError } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\nimport { DdataInjectorModule } from '../../ddata-injector.module';\nimport { BaseModelInterface } from '../../models/base/base-model.model';\nimport { FileUploadProcessInterface } from '../../models/file/file-upload-process.interface';\nimport { PaginateInterface } from '../../models/paginate/paginate.interface';\nimport { DataServiceAbstract } from '../data/data-service.abstract';\nimport { EnvService } from '../env/env.service';\nimport { DdataCoreError } from '../error-handler/ddata-core-error';\nimport { RemoteDataServiceInterface } from './remote-data-service.interface';\n\n// @dynamic\nexport class RemoteDataService<T extends BaseModelInterface<T>>\n  extends DataServiceAbstract<T>\n  implements RemoteDataServiceInterface<T> {\n\n  /**\n   * Application environment variable from the root application\n   */\n  private appEnv = DdataInjectorModule.InjectorInstance.get(EnvService);\n\n  /**\n   * Application URL\n   */\n  public url = this.appEnv.environment.apiUrl;\n\n  /**\n   * Headers to all requests\n   */\n  public headers: any;\n\n  /**\n   * Options to all requests\n   */\n  public options: any;\n\n  /**\n   * Angular HttpClient\n   */\n  private http: HttpClient;\n\n  /**\n   * Model's data type\n   */\n  public type: new () => T;\n\n  // @Inject('DdataInjectorModule') private data: DdataInjectorModule;\n\n  constructor(\n    model: T,\n  ) {\n    super(model);\n    this.setupHeaders();\n\n    this.http = DdataInjectorModule.InjectorInstance.get(HttpClient);\n  }\n\n  /**\n   * Set up the HTTP headers what can use every requests.\n   */\n  setupHeaders(): void {\n    this.headers = new HttpHeaders({\n      // tslint:disable-next-line: object-literal-key-quotes\n      'Authorization': 'Bearer ' + localStorage.getItem('token'),\n      'Content-Type': 'application/json',\n      'Accepted-Encoding': 'application/json'\n    });\n\n    this.options = {\n      headers: this.headers,\n      responseType: 'json'\n    };\n  }\n\n  /**\n   * Send HTTP GET request to the API endpoint where can get the all items of requested resource in a PaginateInterface.\n   * PaginateInterface is based on Laravel 6.x's pagination.\n   *\n   * The requested URL will be constructed like this: {environment.apiUrl}/{model.api_endpoint}\n   *\n   * If the ApiUrl is \"http://www.yourdomain.com/api\" and the API endpoint of the model is \"post\", then your url will be\n   * \"http://www.yourdomain.com/api/post\"\n   *\n   * @returns Observable, PaginateInterface with initialized `T` type objects\n   *\n   * @example\n   * constructor(\n   *   private myRemoteStorageService: RemoteStorageService<Post>,\n   * ) {}\n   *\n   * load() {\n   *   this.myRemotStorageService.getAll().subscribe();\n   * }\n   */\n  getAll(pageNumber: number = 0): Observable<PaginateInterface> {\n    this.setupHeaders();\n    const url = this.url + this.model.api_endpoint + (!!pageNumber ? '?page=' + pageNumber : '');\n\n    if (!!this.appEnv.environment.debug) {\n      console.log('URL - getAll()', url);\n    }\n\n    return this.http.get(url, this.options).pipe(map((result: any) => this.getNewPaginateObject(this.type, result)));\n  }\n\n  /**\n   * Send a HTTP GET request to the API endpoint to get a PaginateInterface object belongs to the model.\n   *\n   * The requested URL will be constructed like this: {environment.apiUrl}/{model.api_endpoint}/{uniqueUri}/{pageNumber}\n   *\n   * If the ApiUrl is \"http://www.yourdomain.com/api\" and the API endpoint of the model is \"post\", and you want to get the\n   * 2nd page (and unique Uri is empty - optional) then your url will be\n   * \"http://www.yourdomain.com/api/post/?page=2\"\n   *\n   * @param pageNumber Number of the page\n   * @param uniqueUrl Optional parameter what'll be put into the URL\n   * @returns Observable, PaginateInterface with initialized `T` type objects\n   *\n   * @example\n   * constructor(\n   *   private myRemoteStorageService: RemoteStorageService<Post>,\n   * ) {}\n   *\n   * load() {\n   *   // pageNumber: 2\n   *   // URL: http://www.yourdomain.com/api/post/?page=2\n   *   this.myRemotStorageService.getPage(pageNumber).subscribe();\n   *   // or\n   *   // pageNumber: 2\n   *   // uniqueUri: 'get-page/'\n   *   // URL: http://www.yourdomain.com/api/post/get-page/?page=2\n   *   this.myRemotStorageService.getPage(pageNumber, 'get-page/').subscribe();\n   * }\n   */\n  getPage(pageNumber: number, uniqueUri: string = ''): Observable<PaginateInterface> {\n    this.setupHeaders();\n    const url = this.url + this.model.api_endpoint + uniqueUri + '?page=' + pageNumber;\n\n    if (!!this.appEnv.environment.debug) {\n      console.log('URL - getPaginatePage()', url);\n    }\n\n    return this.http.get(url, this.options).pipe(map((result: any) => this.getNewPaginateObject(this.type, result)));\n  }\n\n  /**\n   * Send HTTP GET request to the API endpoint where can get the all items of requested resource without PaginateInterface.\n   * In Laravel 6.x you need to create a new resurce in the ResourceRegistrar.\n   *\n   * The requested URL will be constructed like this: {environment.apiUrl}/{model.api_endpoint}/list\n   *\n   * If the ApiUrl is \"http://www.yourdomain.com/api\" and the API endpoint of the model is \"post\", then your url will be\n   * \"http://www.yourdomain.com/api/post/list\"\n   *\n   * @returns Observable, array of initialized `T` type objects\n   *\n   * @example\n   * constructor(\n   *   private myRemoteStorageService: RemoteStorageService<Post>,\n   * ) {}\n   *\n   * load() {\n   *   this.myRemotStorageService.getAllWithoutPaginate().subscribe();\n   * }\n   */\n  getAllWithoutPaginate(): Observable<T[]> {\n    this.setupHeaders();\n    const url = this.url + this.model.api_endpoint +  '/list';\n\n    if (!!this.appEnv.environment.debug) {\n      console.log('URL - getAllWithoutPaginate()', url);\n    }\n\n    return this.http.get(url, this.options).pipe(map((result: any) => this.hydrateArray(result)));\n  }\n\n  /**\n   * Send HTTP GET request to the API endpoint where can get one instance of requested resource.\n   *\n   * The requested URL will be constructed like this: {environment.apiUrl}/{model.api_endpoint}/{id}\n   *\n   * If the ApiUrl is \"http://www.yourdomain.com/api\" and the API endpoint of the model is \"post\" and ID is 42, then your\n   * url will be \"http://www.yourdomain.com/api/post/42\"\n   *\n   * @param id unique ID of instance\n   * @returns Observable, initialized model of `T` type object\n   *\n   * @example\n   * constructor(\n   *   private myRemoteStorageService: RemoteStorageService<Post>,\n   * ) {}\n   *\n   * load() {\n   *   const id = 42;\n   *   this.myRemotStorageService.getOne(id).subscribe();\n   * }\n   */\n  getOne(id: number): Observable<T> {\n    this.setupHeaders();\n    const url = this.url + this.model.api_endpoint + '/' + id;\n\n    if (!!this.appEnv.environment.debug) {\n      console.log('URL - getOne()', url);\n    }\n\n    return this.http.get(url, this.options).pipe(map((result: any) =>\n      this.hydrate(this.model, this.model).init(result)));\n  }\n\n  /**\n   * Send HTTP GET request to the API endpoint's unique URI\n   *\n   * The requested URL will be constructed like this: {environment.apiUrl}/{uri}\n   *\n   * If the ApiUrl is \"http://www.yourdomain.com/api\" and the custom URI is \"my/custom/uri\", then your\n   * url will be \"http://www.yourdomain.com/api/my/custom/uri\"\n   *\n   * @param uri unique URI string\n   * @returns Observabe, any\n   *\n   * @example\n   * constructor(\n   *   private myRemoteStorageService: RemoteStorageService<Post>,\n   * ) {}\n   *\n   * load() {\n   *   const uri = '/filter/by/user/42';\n   *   this.myRemotStorageService.getUri(uri).subscribe();\n   * }\n   */\n  getUri(uri: string): Observable<any> {\n    this.setupHeaders();\n    const url = this.url + uri;\n\n    if (!!this.appEnv.environment.debug) {\n      console.log('URL - getUri()', url);\n    }\n\n    return this.http.get(url, this.options).pipe(map((result: any) => result));\n  }\n\n  /**\n   * Send HTTP POST request to the API endpoint's unique URI\n   *\n   * The requested URL will be constructed like this: {environment.apiUrl}/{uri}\n   *\n   * If the ApiUrl is \"http://www.yourdomain.com/api\" and the custom URI is \"my/custom/uri\", then your\n   * url will be \"http://www.yourdomain.com/api/my/custom/uri\"\n   *\n   * @param resource any data\n   * @param uri unique URI string\n   * @returns Observabe, any\n   *\n   * @example\n   * constructor(\n   *   private myRemoteStorageService: RemoteStorageService<Post>,\n   * ) {}\n   *\n   * load() {\n   *   const uri = '/filter/by/user/42';\n   *   this.myRemotStorageService.getUri(uri).subscribe();\n   * }\n   */\n  postUri(resource: any, uri: string): Observable<any> {\n    this.setupHeaders();\n    const url = this.url + this.model.api_endpoint + uri;\n\n    if (!!this.appEnv.environment.debug) {\n      console.log('URL - uniquePost()', url);\n    }\n\n    return this.http.post(url, JSON.stringify(resource), this.options).pipe(map((result: any) => result));\n  }\n\n  /**\n   * Send HTTP POST or PUT request to the API endpoint to create a new instance or update an existing one.\n   *\n   * Create or update depends on the model has `id` field and it's `0` or not.\n   * If it's undefined, null or `0` there will be run a create (POST request), otherwise update (PUT request).\n   *\n   * Before send the create or update the model will be validated on it's custom validaton rules if defined.\n   * You can read more about validation in BaseModel section.\n   *\n   * If the ApiUrl is \"http://www.yourdomain.com/api\" and the API endpoint of the model is \"post\", then your\n   * url will be \"http://www.yourdomain.com/api/post\"\n   *\n   * @param model resource any kind of JSON object, what API can handle. Of course you should give a living model.\n   *\n   * @returns Observabe, number or boolean, depends on backend's settings. If it's a number, then it's the ID of\n   * the saved instance.\n   *\n   * @example\n   * constructor(\n   *   private myRemoteStorageService: RemoteStorageService<Post>,\n   * ) {}\n   *\n   * load() {\n   *   const myPost = new Post().init();\n   *   this.myRemotStorageService.save(myPost).subscribe();\n   * }\n   */\n  save(model: T): Observable<number | boolean> {\n    this.setupHeaders();\n\n    try {\n      model.validate();\n    } catch (error) {\n      return new Observable(() => {\n        throw error;\n      });\n    }\n\n    const preparedData = model.prepareToSave();\n\n    if (!model.id) {\n      // create\n      const url = this.url + model.api_endpoint;\n      if (!!this.appEnv.environment.debug) {\n        console.log('URL - create()', url, preparedData);\n      }\n\n      return this.http.post(url, JSON.stringify(preparedData), this.options)\n        .pipe(\n          map((result: any) => result.id),\n          catchError(err => of(this.handleValidatioErrorFeedback(err, model)))\n        );\n    } else {\n      // update\n      const url = this.url + model.api_endpoint + '/' + model.id;\n\n      if (!!this.appEnv.environment.debug) {\n        console.log('URL - update()', url, preparedData);\n      }\n\n      return this.http.put(url, JSON.stringify(preparedData), this.options)\n        .pipe(\n          map((result: any) => result.id),\n          catchError(err => of(this.handleValidatioErrorFeedback(err, model)))\n        );\n    }\n  }\n\n  /**\n   * Send HTTP DELETE request to the API endpoint to delete an instance.\n   *\n   * If the ApiUrl is \"http://www.yourdomain.com/api\" and the API endpoint of the model is \"post\" with ID 42, then your\n   * url will be \"http://www.yourdomain.com/api/post/42\"\n   *\n   * @param model a living model, what you want to delete\n   *\n   * @returns Observabe, number with HTTP code of delete result\n   *\n   * @example\n   * constructor(\n   *   private myRemoteStorageService: RemoteStorageService<Post>,\n   * ) {}\n   *\n   * load() {\n   *   const myPost = new Post().init();\n   *   this.myRemotStorageService.delete(myPost).subscribe();\n   * }\n   */\n  delete(model: T): Observable<number> {\n    const url = this.url + this.model.api_endpoint + '/' + model.id;\n\n    if (!!this.appEnv.environment.debug) {\n      console.log('URL - delete()', url);\n    }\n\n    return this.http.delete(url, this.options).pipe(map((result: any) => result));\n  }\n\n  /**\n   * Send HTTP POST request to the API endpoint to delete multiple instances\n   *\n   * If the ApiUrl is \"http://www.yourdomain.com/api\" and the API endpoint of the model is \"post\", then your\n   * url will be \"http://www.yourdomain.com/api/post/multiple/delete\"\n   *\n   * The IDs what you want to delete will be send in the request body as an object with this stucture:\n   *\n   * `{data: [1, 2, 4, 42, 69]}`\n   *\n   * @param models array of models what you want to delete\n   *\n   * @returns Observabe, any\n   *\n   * @example\n   * constructor(\n   *   private myRemoteStorageService: RemoteStorageService<Post>,\n   * ) {}\n   *\n   * load() {\n   *   const posts: Post[] = [new Post().init({id: 42}), new Post.init({id: 69})];\n   *   this.myRemotStorageService.deleteMultiple(posts).subscribe();\n   * }\n   */\n  deleteMultiple(models: T[]): Observable<{}> {\n    const idsForDelete: number[] = [];\n    const url = this.url + this.model.api_endpoint + '/multiple/delete';\n\n    models.forEach((model: T) => {\n      idsForDelete.push(model.id);\n    });\n\n    const preparedData = JSON.stringify({data: idsForDelete});\n\n    if (!!this.appEnv.environment.debug) {\n      console.log('URL - deleteMultiple()', url, preparedData);\n    }\n\n    return this.http.post(url, preparedData, this.options).pipe(catchError(this.handleError));\n  }\n\n  /**\n   * You can send one or more files to the backend with this function.\n   *\n   * Send files with HTTP POST as form data.\n   *\n   * You can send files with additional datas in the `data` parameter. This is optional parameter, where you can\n   * send addition datas. For example folder ID, file descriptions, etc. It will be stringified befor sending and\n   * will be attached for every file.\n   *\n   * If the ApiUrl is \"http://www.yourdomain.com/api\" and the API endpoint of the model is \"post\" and the `uri` is\n   * `file`, then your url will be \"http://www.yourdomain.com/api/post/file\"\n   *\n   * @param uri the uri where you want to send the file\n   * @param files Set of JavaScript File instances\n   * @param data optional JSON object for additional datas\n   *\n   * @returns Observabe array, contains FileUploadProcessInterface instances.\n   *\n   * @example\n   * // send files to http://www.yourdomain.com/api/post/file URL\n   * constructor(\n   *   private myRemoteStorageService: RemoteStorageService<Post>,\n   * ) {}\n   *\n   * load() {\n   *   const files: Set<File>;\n   *   const datas = {\n   *     folder_id: 99,\n   *     description: 'Lorem ipsum',\n   *   };\n   *   this.myRemotStorageService.deleteMultiple('/file', files, datas).subscribe();\n   * }\n   */\n  sendFiles(uri: string, id: number, files: Set<File>, data?: any): Observable<FileUploadProcessInterface>[] {\n    // set up custom headers to post\n    const customHeaders = new HttpHeaders({\n      Authorization: 'Bearer ' + localStorage.getItem('token'),\n      'Accepted-Encoding': 'application/json'\n    });\n\n    // set up options to report progress in file uploading\n    const customOptions = {\n      headers: customHeaders,\n      reportProgress: true\n    };\n\n    // create statuses array to contain observables of file uploading\n    const statuses: Observable<FileUploadProcessInterface>[] = [];\n    files.forEach(file => {\n      // create URL\n      const url = this.url + this.model.api_endpoint + uri;\n\n      // create FormData object\n      const formData: FormData = new FormData();\n      // add file with file name to FormData\n      formData.append('file', file, file.name);\n      // add data to FormData object\n      formData.append('data', JSON.stringify(data) );\n\n      // create a new HttpRequest object for the post of FormData\n      const req = new HttpRequest('POST', url, formData, customOptions);\n      // create a subject to follow the upload progress\n      const progress = new Subject<number>();\n      // create a variable to store the current progress in percent\n      let percent = 0;\n\n      if (!!this.appEnv.environment.debug) {\n        console.log('URL - sendFiles()', url, file, formData);\n      }\n\n      const requestPipe = this.http.request(req).pipe(map((event: HttpEvent<any>) => {\n        // variable to store the file name on the remote storage\n        let remoteFileDatas: string = null;\n\n        if (event.type === HttpEventType.UploadProgress) {\n          // while the upload is in progress we just calculate & update the upload progress percent\n          const percentDone = Math.round(100 * event.loaded / event.total);\n          percent = percentDone;\n          progress.next(percentDone);\n        } else if (event instanceof HttpResponse) {\n          // if the upload is done we catch the remote file datas\n          remoteFileDatas = event.body ? event.body as string : null;\n          progress.complete();\n        }\n\n        const fileUploadProcessInterface: FileUploadProcessInterface = {\n          // remote file datas - null until upload isn't done\n          remoteFileDatas,\n          // the original file name\n          file: file.name,\n          // observable upload progress percent\n          progress: progress.asObservable(),\n        };\n\n        return fileUploadProcessInterface;\n      }));\n\n      statuses.push(requestPipe);\n    });\n\n    return statuses;\n  }\n\n  /**\n   * Handle errors with custom error handlers.\n   *\n   * @param error HTTP Error Response\n   */\n  handleError = (error: HttpErrorResponse) => throwError( new DdataCoreError(error) );\n\n  /**\n   * Handle validation error feedback.\n   *\n   * @param err Error message\n   * @param model Model of `T` type\n   */\n  private handleValidatioErrorFeedback(err: any, model: T): void {\n    if (!!this.appEnv.environment.debug) {\n      console.log(err);\n    }\n\n    if ( err.status === 480) {\n      model.validationErrors = Object.keys(err.error.errors);\n    }\n\n    throw err;\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable, of } from 'rxjs';\nimport { map, switchMap } from 'rxjs/operators';\nimport { BaseModelInterface } from '../../models/base/base-model.model';\nimport { FileUploadProcessInterface } from '../../models/file/file-upload-process.interface';\nimport { PaginateInterface } from '../../models/paginate/paginate.interface';\nimport { Paginate } from '../../models/paginate/paginate.model';\nimport { DataServiceAbstract } from '../data/data-service.abstract';\nimport { LocalDataServiceInterface } from '../local-data/local-data-service.interface';\nimport { LocalDataService } from '../local-data/local-data.service';\nimport { NotificationServiceInterface } from '../notification/notification-service.interface';\nimport { NotificationService } from '../notification/notification.service';\nimport { RemoteDataServiceInterface } from '../remote-data/remote-data-service.interface';\nimport { RemoteDataService } from '../remote-data/remote-data.service';\n\n// @dynamic\n@Injectable()\nexport class ProxyService<T extends BaseModelInterface<T>> extends DataServiceAbstract<T> {\n  private notificationService: NotificationServiceInterface;\n  private localStorageService: LocalDataServiceInterface<T>;\n  private remoteStorageService: RemoteDataServiceInterface<T>;\n  private type: new () => T;\n\n  constructor(\n    private instance: T,\n  ) {\n    super(instance);\n    this.notificationService = new NotificationService();\n    this.localStorageService = new LocalDataService(this.instance);\n    this.remoteStorageService = new RemoteDataService(this.instance);\n  }\n\n  getOne(id: number): Observable<T> {\n    if (this.instance.use_localstorage) {\n      return of(this.localStorageService.findById(id));\n    } else {\n      return this.remoteStorageService.getOne(id).pipe(map((result: T) => result));\n    }\n  }\n\n  getAll(pageNumber: number = 0): Observable<PaginateInterface> {\n    if (this.instance.use_localstorage) {\n      const paginate = new Paginate(this.instance);\n      paginate.data = this.localStorageService.allFromLocal();\n\n      return of(paginate);\n    } else {\n      return this.remoteStorageService.getAll(pageNumber).pipe(map((result: PaginateInterface) => result));\n    }\n  }\n\n  getAllWithoutPaginate(): Observable<T[]> {\n    if (this.instance.use_localstorage) {\n      return of(this.localStorageService.allFromLocal());\n    } else {\n      return this.remoteStorageService.getAllWithoutPaginate().pipe(map((result: T[]) => result));\n    }\n  }\n\n  getAllSortedBy(fieldName: string = 'name'): Observable<T[]> {\n    if (this.instance.use_localstorage) {\n      return of(this.localStorageService.allFromLocalSortedBy(fieldName));\n    } else {\n      return this.remoteStorageService.getAllWithoutPaginate().pipe(map((result: T[]) => result));\n    }\n  }\n\n  getAllSortedByDesc(fieldName: string = 'name'): Observable<T[]> {\n    if (this.instance.use_localstorage) {\n      return of(this.localStorageService.allFromLocalSortedByDesc(fieldName));\n    } else {\n      return this.remoteStorageService.getAllWithoutPaginate().pipe(map((result: T[]) => result));\n    }\n  }\n\n  getPage(pageNumber: number): Observable<PaginateInterface> {\n    if (this.instance.use_localstorage) {\n      // TODO meg kell csinálni, hogy itt is egy lapozót adjon vissza\n    } else {\n      return this.remoteStorageService.getPage(pageNumber).pipe(map( (resolve: PaginateInterface) => resolve));\n    }\n  }\n\n  getUri(uri: string): Observable<any> {\n    return this.remoteStorageService.getUri(uri).pipe(map((result: any) => result));\n  }\n\n  postUri(data: any, uri: string): Observable<any> {\n    return this.remoteStorageService.postUri(data, uri).pipe(map((result: any) => result));\n  }\n\n  findById(id: number): Observable<T> {\n    if (this.instance.use_localstorage) {\n      return of(this.localStorageService.findById(id));\n    } else {\n      // TODO megcsinálni a remote-ra is\n    }\n  }\n\n  findByField(fieldName: string, value: any): Observable<T> {\n    if (this.instance.use_localstorage) {\n      return of(this.localStorageService.findByField(fieldName, value));\n    } else {\n      // TODO megcsinálni a remote-ra is\n    }\n  }\n\n  filterByField(fieldName: string, value: any): Observable<T[]> {\n    if (this.instance.use_localstorage) {\n      return of(this.localStorageService.filterByField(fieldName, value));\n    } else {\n      // TODO megcsinálni a remote-ra is\n    }\n  }\n\n  search(data: any,  pageNumber?: number): Observable<PaginateInterface> {\n    const uri = !!pageNumber ? `/search?page=${ pageNumber }` : '/search';\n\n    return this.remoteStorageService.postUri(data, uri).pipe(map((result: PaginateInterface) =>\n      this.getNewPaginateObject(this.type, result)));\n  }\n\n  searchWithoutPaginate(data: any): Observable<T[]> {\n    const uri = '/search?paginate=off';\n\n    return this.remoteStorageService.postUri(data, uri).pipe(map((result: T[]) => {\n      result = this.hydrateArray(result);\n      return result;\n    }));\n  }\n\n  save(model: T): Observable<number> {\n    if (!model) {\n      return of(0);\n    }\n\n    if (model.use_localstorage) {\n      return this.remoteStorageService.save(model).pipe(map( (resolve: number) => {\n        this.localStorageService.save(model, resolve);\n        this.successNotify();\n\n        return resolve;\n      }));\n    } else {\n      return this.remoteStorageService.save(model).pipe(map((resolve: number) => {\n        this.successNotify();\n\n        return resolve;\n      }));\n    }\n  }\n\n  private successNotify(): void {\n    this.notificationService.add('Siker', 'A mentés sikeres', 'success');\n  }\n\n  delete(model: T, paginate: PaginateInterface): Observable<PaginateInterface> {\n    if (!model) {\n      return of(paginate);\n    }\n\n    const models = paginate.data;\n    if (model.id === 0) {\n      models.splice( models.indexOf(model), 1);\n      return of(paginate);\n    }\n\n    if (model.use_localstorage) {\n      return this.remoteStorageService.delete(model).pipe(\n        map((resultDelete: number) => {\n          if (resultDelete) {\n            this.localStorageService.delete(model);\n          }\n        }),\n        switchMap((): Observable<PaginateInterface> => this.remoteStorageService.getAll().pipe(\n          map((resultGetAll: PaginateInterface): PaginateInterface => resultGetAll)\n        ))\n      );\n    } else {\n      return this.remoteStorageService.delete(model).pipe(map((result: number) => {\n        if (result) {\n          models.splice( models.indexOf(model), 1);\n        }\n\n        return paginate;\n      }));\n    }\n  }\n\n  deleteMultiple(models: T[], paginate: PaginateInterface): Observable<PaginateInterface | Observable<PaginateInterface>> {\n    if (!models) {\n      return of(paginate);\n    }\n\n    const modelsToShow = paginate.data;\n    models.forEach((model: T) => {\n      if (model.id === 0) {\n        modelsToShow.splice( modelsToShow.indexOf(model), 1);\n        return of(paginate);\n      }\n\n    });\n\n    if (this.instance.use_localstorage) {\n      return this.remoteStorageService.deleteMultiple(models).pipe(\n        map((resultDelete: boolean) => {\n          if (resultDelete) {\n            models.forEach((model: T) => {\n              this.localStorageService.delete(model);\n            });\n          }\n        }),\n        switchMap((): Observable<PaginateInterface> => this.remoteStorageService.getAll().pipe(\n          map((resultGetAll: PaginateInterface): PaginateInterface => resultGetAll)\n        ))\n      );\n    } else {\n      return this.remoteStorageService.deleteMultiple(models).pipe(map((result: boolean) => {\n        if (result) {\n          models.forEach((model: T) => {\n            modelsToShow.splice( modelsToShow.indexOf(model), 1);\n          });\n        }\n\n        return paginate;\n      }));\n    }\n  }\n\n  watch(): Observable<boolean> {\n    return this.localStorageService.watch().pipe(map((result: boolean) => result));\n  }\n\n  // TODO törölhető funkció\n  registerObserver(target: T[], sortBy: string = 'name'): void {\n    this.watch().subscribe((refresh: boolean) => {\n      if (refresh) {\n        this.getAllSortedBy(sortBy).subscribe((result: T[]) => {\n          target = result;\n        });\n      }\n    });\n  }\n\n\n  sendFiles(subUri: string, id: number, files: Set<File>, data?: any): Observable<FileUploadProcessInterface>[] {\n    return this.remoteStorageService.sendFiles(subUri, id, files, !!data ? data : null);\n  }\n}\n","import { ProxyServiceInterface } from './proxy-service.interface';\nimport { BaseModelInterface } from '../../models/base/base-model.model';\nimport { ProxyService } from './proxy.service';\n\nexport class ProxyFactoryService<T extends BaseModelInterface<T>> {\n\n  constructor() { }\n\n  get(newable: new() => T): ProxyServiceInterface<T> {\n    const instance = new newable();\n\n    return new ProxyService<T>(instance);\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { Params } from '@angular/router';\nimport { Observable, of } from 'rxjs';\n\n@Injectable()\nexport class HelperActivatedRouteService {\n\n  /**\n   * Return object what contains the `id` from the current URL as Observable<Params>\n   *\n   * Returned object in the `Observable` will looks like this (if the ID in the URL is `42`):\n   *\n   * ```json\n   * {\n   *   id: 42\n   * }\n   * ```\n   */\n  params(): Observable<Params> {\n    const params: any = of({\n        id: this.getId(),\n      });\n\n    return params;\n  }\n\n  /**\n   * Return the id from the URL if the URL looks like this:\n   *\n   * @example (.*?)/edit/:id\n   * @example (.*?)/list/:id\n   *\n   * @returns id number\n   */\n  getId(): number {\n    let id = 0;\n    const url = window.location.href;\n    const urlParts = url.split('/');\n    const itemsNumber = urlParts.length - 1;\n    const regex = new RegExp(/^\\d+$/);\n\n    if ( (urlParts[itemsNumber - 1] === 'edit' || urlParts[itemsNumber - 1] === 'list') && regex.test(urlParts[itemsNumber])) {\n      id = Number(urlParts[itemsNumber]);\n    }\n\n    return id;\n  }\n\n  /**\n   * Sándor Dániel> Azért hoztam létre külön egy functiont, mert\n   * 1. a getId() editelést is figyelembe veszi, így edit után is a list/editID-re ugrik\n   *\n   * 2. Ha kivszem, hogy figyelje az editet, akkor nem fogja figyelni a params() lévő idt, és nem tölti be az adatokat.\n   *\n   * 3. Mivel tudnia kell, hogy melyik list/:id térjen vissza, így paraméterben kell szerepelni az id-nek (app routeban\n   * módosítottam) és ha a getId()-ben egészítem ki a vizsgálatot a sajátommal, akkor minden esetben, ha a paraméterben\n   * szerepel id, akkor az edit töltődik be. (a params() függvény több helyen használva van, nem akartam birizgálni, ezért\n   * hoztam létre egy egyedit erre az esetre)\n   *\n   */\n  getUniqueListId(): number {\n    let id = 0;\n    const url = window.location.href;\n    const urlParts = url.split('/');\n    const regex = new RegExp(/^\\d+$/);\n\n    const isUrlIncludeList = urlParts.includes('list');\n\n    if (isUrlIncludeList) {\n      const itemsNumber = urlParts.indexOf('list');\n\n      if ( urlParts[itemsNumber] === 'list' && regex.test(urlParts[itemsNumber + 1])) {\n        id = Number(urlParts[itemsNumber + 1]);\n      }\n    }\n\n    return id;\n  }\n\n  /**\n   * Bablena Ferend> A getUniquListId() kicsit módosított változata\n   * a webshop/product/details/:id-nél derült ki, hogy ott külön kell megadni, mi az url vége\n   *\n   * @param lastWord az id előtt szereplő utolsó egyedi tagot kell megadni\n   */\n  getUniqueId(lastWord: string): number {\n    let id = 0;\n    const url = window.location.href;\n    const urlParts = url.split('/');\n    const regex = new RegExp(/^\\d+$/);\n\n    const isUrlIncludeList = urlParts.includes(lastWord);\n\n    if (isUrlIncludeList) {\n      const itemsNumber = urlParts.indexOf(lastWord);\n\n      if ( urlParts[itemsNumber] === lastWord && regex.test(urlParts[itemsNumber + 1])) {\n        id = Number(urlParts[itemsNumber + 1]);\n      }\n    }\n\n    return id;\n  }\n}\n","import { EventEmitter, Injectable } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { Observable, of } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { DataServiceAbstract } from '../data/data-service.abstract';\nimport { ProxyServiceInterface } from '../proxy/proxy-service.interface';\nimport { ProxyService } from '../proxy/proxy.service';\nimport { SpinnerService } from '../spinner/spinner.service';\nimport { HelperActivatedRouteService } from './helper-activated-route.service';\nimport { DdataCoreModule } from '../../ddata-core.module';\nimport { BaseModelInterface } from '../../models/base/base-model.model';\nimport { PaginateInterface } from '../../models/paginate/paginate.interface';\nimport { Paginate } from '../../models/paginate/paginate.model';\nimport { ID } from '../../models/base/base-data.type';\n\n// @dynamic\n@Injectable()\nexport class HelperService<T extends BaseModelInterface<T>> extends DataServiceAbstract<T> {\n  private proxy: ProxyServiceInterface<T>;\n  private router: Router;\n  private spinner: SpinnerService;\n  private route: HelperActivatedRouteService;\n  private activatedRoute: ActivatedRoute;\n  private modelTypeName: string;\n\n  constructor(\n    private instance: T,\n  ) {\n    super(instance);\n    this.spinner = DdataCoreModule.InjectorInstance.get<SpinnerService>(SpinnerService);\n    this.router = DdataCoreModule.InjectorInstance.get<Router>(Router);\n    this.activatedRoute = DdataCoreModule.InjectorInstance.get<ActivatedRoute>(ActivatedRoute);\n    this.route = new HelperActivatedRouteService();\n    this.proxy = new ProxyService(this.instance);\n  }\n\n  booleanChange(model: T, fieldName: string): Observable<boolean | Observable<boolean>> {\n    if (!model) {\n      return of(false);\n    }\n\n    this.modelTypeName = Object.getPrototypeOf(model).constructor.name;\n    const starterName = 'booleanChange - ' + this.modelTypeName + ' - ' + fieldName;\n    this.spinner.on(starterName);\n    model[fieldName] = !model[fieldName];\n    return this.proxy.save(model).pipe(map( respose => {\n      this.spinner.off(starterName);\n\n      // save wasn't success\n      if (!respose) {\n        model[fieldName] = !model[fieldName];\n\n        return false;\n      }\n\n      return true;\n    }, (error: any) => {\n      model[fieldName] = !model[fieldName];\n      this.spinner.on(starterName);\n\n      return false;\n    }));\n  }\n\n  save(\n    model: T,\n    isModal: boolean = false,\n    emitter: EventEmitter<T> = new EventEmitter(),\n    saveBackend: boolean = true,\n    navigateAfterSuccess?: string\n  ): Observable<boolean | Observable<boolean> | number | Observable<number>> {\n    model.validate();\n    if (!model.isValid) {\n      return of(false);\n    }\n\n    if (isModal && !saveBackend) {\n      emitter.emit(model);\n\n      return of(true);\n    }\n\n    this.spinner.on('save');\n\n    return this.proxy.save(model).pipe(map((result: number) => {\n      model.id = result as ID;\n      if (isModal) {\n        emitter.emit(model);\n        model = this.hydrate(model, {});\n      } else {\n        let url = model.api_endpoint;\n\n        if (!navigateAfterSuccess) {\n          url += '/list' + (this.route.getUniqueListId() !== 0 ? '/' + this.route.getUniqueListId() : '');\n        } else {\n          url = navigateAfterSuccess;\n        }\n\n        this.router.navigateByUrl(url);\n      }\n      this.spinner.off('save');\n\n      return true;\n    }));\n  }\n\n  saveAsNew(model: T): Observable<boolean | Observable<boolean> | number | Observable<number>>  {\n    model.id = 0 as ID;\n    return this.save(model);\n  }\n\n  stepBack(model: T, isModal: boolean, emitter: EventEmitter<T> = new EventEmitter()): void {\n    if (isModal) {\n      emitter.emit(null);\n    } else {\n      this.router.navigateByUrl(model.api_endpoint + '/list');\n    }\n  }\n\n  edit(model: T, reference: any): void {\n    if (reference.isModal) {\n      reference.editModel.emit(model);\n    } else {\n      this.router.navigate([model.api_endpoint, 'edit', model.id ]);\n    }\n  }\n\n  delete(model: T, reference: any): Observable<boolean> {\n    this.modelTypeName = model.model_name;\n\n    if (reference.isModal) {\n      reference.deleteModel.emit(model);\n\n      return of(false);\n    }\n\n    this.spinner.on(this.modelTypeName);\n    return this.proxy.delete(model, reference.paginate).pipe(map((resultPaginate: PaginateInterface) => {\n      reference.models = resultPaginate.data;\n      reference.paginate = resultPaginate;\n\n      this.spinner.off(this.modelTypeName);\n\n      return true;\n    }));\n  }\n\n  deleteMultiple(models: T[], reference: any): Observable<boolean> {\n    this.modelTypeName = models[0] ? models[0].model_name : 'NotSet';\n\n    if (reference.isModal) {\n      reference.deleteMultiple.emit(models);\n\n      return of(false);\n    }\n\n    this.spinner.on(this.modelTypeName);\n    return this.proxy.deleteMultiple(models, reference.paginate).pipe(map((resultPaginate: PaginateInterface) => {\n      reference.models = resultPaginate.data;\n      reference.paginate = resultPaginate;\n\n      this.spinner.off(this.modelTypeName);\n\n      return true;\n    }));\n  }\n\n  changeToPage(turnToPage: number, paginate: PaginateInterface, models: T[]): Observable<boolean> {\n    if (!turnToPage) {\n      return of(false);\n    }\n\n    this.spinner.on('changeToPage');\n\n    return this.proxy.getPage(turnToPage).pipe(map( (result: PaginateInterface) => {\n      paginate = result;\n      models = paginate.data;\n      this.spinner.off('changeToPage');\n\n      return true;\n    }));\n  }\n\n  getOne(model: T, isModal: boolean, handleLoader: boolean = true): Observable<boolean | Observable<boolean>> {\n    if (!model) {\n      return of(false);\n    } else {\n      if (isModal && !model.id) {\n        return of(false);\n      }\n    }\n\n    this.modelTypeName = Object.getPrototypeOf(model).constructor.name;\n\n    if (isModal && !!model.id) {\n      const paramId = model.id;\n      if (handleLoader) {\n        this.spinner.on('getOne modal mode ' + this.modelTypeName);\n      }\n\n      return this.proxy.getOne(Number(paramId)).pipe(map((result: T) => {\n        Object.assign(model, result);\n\n        if (handleLoader) {\n          this.spinner.off('getOne modal mode ' + this.modelTypeName);\n        }\n\n        return true;\n      }));\n    } else {\n      return this.route.params().pipe(map(param => {\n        if ( param.id !== undefined && param.id !== 0 ) {\n          if (handleLoader) {\n            this.spinner.on('getOne Route mode ' + this.modelTypeName);\n          }\n\n          this.proxy.getOne(Number(param.id)).subscribe((result: T) => {\n            Object.assign(model, result);\n\n            if (handleLoader) {\n              this.spinner.off('getOne Route mode ' + this.modelTypeName);\n            }\n\n            return true;\n          });\n        }\n\n        return false;\n      }));\n    }\n  }\n\n  getAll(paginate: PaginateInterface, models: T[], isModal: boolean = false, pageNumber: number = 0): Observable<PaginateInterface> {\n    const spinnerName = 'getAll ' + Math.random();\n    this.spinner.on(spinnerName);\n\n    if (!this.activatedRoute.snapshot.queryParams.filter) {\n      return this.proxy.getAll(pageNumber).pipe(map((result: PaginateInterface) => {\n        // set paginate reference\n        Object.assign(paginate, result);\n        // clear models[]\n        models.splice(0, models.length);\n        // upload models[]\n        models.push(...paginate.data);\n\n        this.spinner.off(spinnerName);\n\n        return result;\n      }));\n    }\n\n    if (!isModal && !!this.activatedRoute.snapshot.queryParams.filter) {\n      const filter = JSON.parse(this.activatedRoute.snapshot.queryParams.filter) || {};\n\n      return this.search(filter, 0).pipe(map((result: PaginateInterface) => {\n        this.spinner.off(spinnerName);\n\n        return result;\n      }));\n    }\n\n    return of(new Paginate(this.instance));\n  }\n\n  search(data: any, pageNumber: number): Observable<PaginateInterface> {\n    this.spinner.on('search');\n    return this.proxy.search(data, pageNumber).pipe(map((result: PaginateInterface) => {\n      this.spinner.off('search');\n      return result;\n    }));\n  }\n\n  searchWithoutPaginate(data: any): Observable<T[]> {\n    this.spinner.on('searchWithoutPaginate');\n    return this.proxy.searchWithoutPaginate(data).pipe(map((result: T[]) => {\n      this.spinner.off('searchWithoutPaginate');\n      return result;\n    }));\n  }\n}\n","import { HelperServiceInterface } from './helper-service.interface';\nimport { HelperService } from './helper.service';\nimport { BaseModelInterface } from '../../models/base/base-model.model';\n\nexport class HelperFactoryService<T extends BaseModelInterface<T>> {\n\n  constructor() { }\n\n  get(newable: new() => T): HelperServiceInterface<T> {\n    const instance = new newable();\n\n    return new HelperService<T>(instance);\n  }\n}\n","// tslint:disable: variable-name\n\nimport { InitialDataInterface } from './initial-data.interface';\n\nexport class InitialData implements InitialDataInterface {\n  readonly api_endpoint = '/init';\n  private _refreshTime = 5000;\n  readonly model_name = 'Init';\n  loaded = true;\n\n  constructor() { }\n\n  data: {};\n\n  set refreshTime(miliseconds: number) {\n    if ( miliseconds === null || miliseconds < 5000 ) {\n      // if not set, or less than 5000 we set it to 60 seconds - don't DDoS the server\n      miliseconds = 60000;\n    }\n\n    this._refreshTime = miliseconds;\n  }\n\n  get refreshTime(): number {\n    return this._refreshTime;\n  }\n\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { DdataCoreModule } from '../../ddata-core.module';\nimport { InitialDataInterface } from '../../models/initial-data/initial-data.interface';\nimport { InitialData } from '../../models/initial-data/initial-data.model';\nimport { ProxyService } from '../proxy/proxy.service';\nimport { SpinnerService } from '../spinner/spinner.service';\nimport { StorageService } from '../storage/storage.service';\nimport { InitialDataServiceInterface } from './initial-data-service.interface';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class InitialDataService extends ProxyService<any> implements InitialDataServiceInterface {\n  private initModel: InitialDataInterface = new InitialData();\n  private spinner: SpinnerService = DdataCoreModule.InjectorInstance.get<SpinnerService>(SpinnerService);\n\n  constructor(\n    private storageService: StorageService,\n  ) {\n    super(new InitialData());\n  }\n\n  /**\n   * Reload the initial datas into the localstorage to speed-up the software.\n   */\n  refresh(): Observable<boolean> {\n    this.spinner.on('dashboard-init');\n\n    return this.getUri(this.initModel.api_endpoint).pipe(map( (result: any) => {\n      // we get here key-value based object, then storage them into localStorage\n      Object.keys(result).forEach(key => {\n        this.storageService.setItem(key, JSON.stringify(result[key]));\n      });\n\n      this.spinner.off('dashboard-init');\n\n      return true;\n    }));\n  }\n}\n","import { Component, EventEmitter, Inject, Injectable, Input, OnInit, Output } from '@angular/core';\nimport { BaseModelInterface } from '../../models/base/base-model.model';\nimport { HelperFactoryService } from '../../services/helper/helper-service.factory';\nimport { HelperServiceInterface } from '../../services/helper/helper-service.interface';\nimport { BaseCreateEditComponentInterface } from './base-create-edit-component.interface';\n\n/**\n * This abscract class extend your create/edit component some basic functionality, like `load()`, `save()`,\n * `saveAsNew()` and `stepBack()`.\n *\n * In this abstract class we some inputs what you can use or simply overwrite in your component to a static\n * variable. This inputs are:\n *\n * @param isModal `boolean`, default `false` - define this component show as a modal dialog or an a child\n * component. Affect is on all functions. If this is true, then `load()` isn't load datas, but wait a `model`\n * input and `save()` isn't send HTTP requests.\n *\n * @param saveToStorage `boolean`, default `true` - set the `save()` method must send to the storage to\n * save model or just simply emit on `saveModel` output.\n *\n * @param model `T`, defaut an empty `T` model - set an instance of `T` model.\n *\n * @param data `{}`, default null - you can set any properties of the component with `data`.\n *\n * @output `saveModel` `EventEmitter<T>`\n *\n * @see HelperService\n */\n// @dynamic\n@Component({\n  template: '',\n})\nexport abstract class BaseCreateEditComponent<T extends BaseModelInterface<T>>\n  implements OnInit, BaseCreateEditComponentInterface<T> {\n\n  @Input() isModal = false;\n  @Input() saveToStorage = true;\n  @Input() model: T = new this.type().init();\n  @Input() set data(value: any) {\n    if (!!value) {\n      Object.keys(value).forEach((key: string) => {\n        if (!!value[key] && key !== 'model' && key !== 'loadData') {\n          this[key] = value[key];\n        }\n      });\n    }\n  }\n\n  @Output() saveModel: EventEmitter<T> = new EventEmitter();\n\n  helperService: HelperServiceInterface<T> = new HelperFactoryService<T>().get(this.type);\n\n  constructor(\n    @Inject('type') private type: new () => T,\n  ) {}\n\n  ngOnInit(): void {\n    this.load();\n  }\n\n  /**\n   * Load one instance of model with a given `id`.\n   */\n  load(): void {\n    this.helperService.getOne(this.model, this.isModal).subscribe();\n  }\n\n  /**\n   * Save the current model.\n   */\n  save(): void {\n    this.helperService.save(this.model, this.isModal, this.saveModel, this.saveToStorage).subscribe();\n  }\n\n  /**\n   * Save model as a new instance.\n   */\n  saveAsNew(): void {\n    this.helperService.saveAsNew(this.model).subscribe();\n  }\n\n  /**\n   * If this is a modal dialog emits `null` in `saveModel` output. Otherwise navigate to the\n   * `{model.api_endpoint}/list` URL.\n   */\n  stepBack(): void {\n    this.helperService.stepBack(this.model, this.isModal, this.saveModel);\n  }\n}\n","import { Component, EventEmitter, Inject, Injectable, Input, OnInit, Output } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { DdataCoreModule } from '../../ddata-core.module';\nimport { BaseModelInterface } from '../../models/base/base-model.model';\nimport { PaginateInterface } from '../../models/paginate/paginate.interface';\nimport { Paginate } from '../../models/paginate/paginate.model';\nimport { HelperFactoryService } from '../../services/helper/helper-service.factory';\nimport { HelperServiceInterface } from '../../services/helper/helper-service.interface';\nimport { BaseListComponentInterface } from './base-list-component.interface';\n\n// @dynamic\n@Component({\n  template: '',\n})\nexport abstract class BaseListComponent<T extends BaseModelInterface<T>>\n  implements OnInit, BaseListComponentInterface<T> {\n\n  @Input() isModal = false;\n  @Input() isEmbed = false;\n  @Input() loadData = true;\n  @Input() models: T[] = [];\n  @Input() filter: any = {};\n  @Input() set data(value: any) {\n    if (!!value) {\n      Object.keys(value).forEach((key: string) => {\n        if (!!value[key] && key !== 'model' && key !== 'loadData') {\n          this[key] = value[key];\n        }\n      });\n    }\n  }\n\n  @Output() editModel: EventEmitter<T> = new EventEmitter();\n  @Output() deleteModel: EventEmitter<T> = new EventEmitter();\n  @Output() deleteMultipleModels: EventEmitter<T[]> = new EventEmitter();\n  @Output() saveModel: EventEmitter<T> = new EventEmitter();\n\n  model: T = new this.type().init();\n  paginate: PaginateInterface = new Paginate(this.model);\n  transformToLowerCase = true;\n  helperService: HelperServiceInterface<T> = new HelperFactoryService<T>().get(this.type);\n  activatedRoute: ActivatedRoute = DdataCoreModule.InjectorInstance.get<ActivatedRoute>(ActivatedRoute);\n  currentPageNumber = 0;\n\n  constructor(\n    @Inject('type') private type: new () => T,\n  ) {}\n\n  ngOnInit(): void {\n    this.load();\n  }\n\n  /**\n   * Load datas. If you set `filter` options the request will be a \"search\" (POST request), otherwise the request\n   * will be a \"get all\" (GET request). Of course only if the model not use the LocalStorage.\n   */\n  load(): void {\n    if (!this.loadData) {\n      return;\n    }\n\n    this.setGetRequest().subscribe((result: PaginateInterface) => {\n      this.paginate = result;\n      this.models = this.paginate.data;\n    });\n  }\n\n  /**\n   * Set the data loader request based on filter and paginate state.\n   */\n  private setGetRequest(): Observable<any> {\n    if (this.isEmptyObject(this.filter)) {\n      // it hasn't got filter options\n      return this.helperService.getAll(this.paginate, this.models, this.isModal, this.currentPageNumber);\n    } else {\n      // it has got filter options\n      return this.helperService.search(this.filter, this.currentPageNumber);\n    }\n  }\n\n  /**\n   * Return true if object has any keys. Helps to find out filter has any key or not.\n   *\n   * @param object JSON object\n   */\n  private isEmptyObject(object: any): boolean {\n    return Object.keys(object).length === 0 && object.constructor === Object;\n  }\n\n  /**\n   * Reverse the model's boolean value and send to the storage the change to save.\n   *\n   * @param model any model\n   * @param field model's field\n   */\n  toggleCheckbox(model: T, field: string): void {\n    this.helperService.booleanChange(model, field).subscribe();\n  }\n\n  /**\n   * Call on start editing a model. If model use LocalStorage it will present an emit, otherwise it will navigate\n   * to the `/{model.api_endpoint}/edit/{model.id}`. Use only if the model has `id` and it's not `0`.\n   */\n  edit(model: T): void {\n    this.helperService.edit(model, this);\n  }\n\n  /**\n   * Delete a model instance. If the component used as child (`isEmbed`) it will do a splice only and nothing to\n   * save. Otherwise it will send a delete request to the storage.\n   *\n   * @param model instance to delete\n   */\n  delete(model: T): void {\n    if (this.isEmbed) {\n      // delete model from models if the component is an embed child component\n      this.models.splice(this.models.indexOf(model), 1);\n    } else {\n      // delete model via services if component is a main component\n      this.helperService.delete(model, this).subscribe();\n    }\n  }\n\n  /**\n   * Delete multiple models in one move.\n   *\n   * @param models instances of model\n   */\n  deleteMultiple(models: T[]): void {\n    this.helperService.deleteMultiple(models, this).subscribe();\n  }\n\n  /**\n   * Change the page and looad datas. If you set `filter` options the request will be a \"search\" (POST request),\n   * otherwise the request will be a \"get all\" (GET request). Of course only if the model not use the LocalStorage.\n   *\n   * @param turnToPage number of new page\n   */\n  changePage(turnToPage: number): void {\n    this.currentPageNumber = turnToPage;\n    this.setGetRequest().subscribe();\n  }\n\n  /**\n   * Save the model.\n   *\n   * @param model instance of model\n   */\n  save(model: T): void {\n    this.helperService.save(model, this.isModal, this.saveModel).subscribe();\n  }\n\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { BaseModelInterface } from '../../models/base/base-model.model';\nimport { SelectableInterface } from '../../models/selectable/selectable.interface';\nimport { BaseListComponent } from './base-list.component';\nimport { SelectableListComponentInterface } from './selectable-list.component.interface';\n\n// @dynamic\n@Component({\n  template: '',\n})\nexport abstract class SelectableListComponent<T extends BaseModelInterface<T> & SelectableInterface>\n  extends BaseListComponent<T>\n  implements SelectableListComponentInterface<T> {\n\n  _selectedElements: Set<T> = new Set([]);\n  @Input() isModal = true;\n  @Input() multipleSelectEnabled = true;\n  @Input() isSelectionList = true;\n  @Input() loadData = false;\n  @Input() set selectedElements(value: T[]) {\n    this.models.map((obj: T) => obj.is_selected = false);\n\n    value.forEach((item: any) => {\n      const selectedModel = this.models.findIndex((obj: T) => obj.id == item.id);\n\n      if (selectedModel !== -1) {\n        this.models[selectedModel].is_selected = true;\n      }\n    });\n\n    this._selectedElements = new Set(!!value.length ? value : []);\n  }\n  get selectedElements(): T[] {\n    return Array.from(this._selectedElements);\n  }\n\n  @Output() removeSelection: EventEmitter<T[]> = new EventEmitter();\n  @Output() setSelection: EventEmitter<T[]> = new EventEmitter();\n  @Output() emitSelected: EventEmitter<T[]> = new EventEmitter();\n\n  datasArrived: BehaviorSubject<number> = new BehaviorSubject(0);\n  select: BehaviorSubject<T[]> = new BehaviorSubject(null);\n\n  toggleSelect(model: T): void {\n    const found: boolean = this._selectedElements.has(model);\n\n    if (found) {\n      this._selectedElements.delete(model);\n      this.removeSelection.emit(Array.from(this._selectedElements));\n    } else {\n      this._selectedElements.add(model);\n      this.setSelection.emit(Array.from(this._selectedElements));\n    }\n  }\n\n  chooseSelect(): void {\n    this.select.next(Array.from(this._selectedElements));\n    this.emitSelected.emit(Array.from(this._selectedElements));\n  }\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { DdataChooseSelectedButtonComponentInterface } from './dd-choose-selected-button.component.interface';\n\n// @dynamic\n@Component({\n  selector: 'dd-choose-selected-button',\n  templateUrl: 'dd-choose-selected-button.component.html',\n})\nexport class DdataChooseSelectedButtonComponent implements DdataChooseSelectedButtonComponentInterface {\n  @Input() multipleSelectEnabled = true;\n  @Output() choosed: EventEmitter<any> = new EventEmitter();\n\n  chooseSelect(): void {\n    this.choosed.emit();\n  }\n}\n","<!-- emit seleted button -->\n<button class=\"mr-1 btn btn-primary\" type=\"button\" (click)=\"chooseSelect()\">\n  <ng-content></ng-content>\n</button>\n","import { SelectableInterface } from './selectable.interface';\n\nexport class Selectable implements SelectableInterface {\n  is_selected = false;\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { SelectableInterface } from '../../models/selectable/selectable.interface';\nimport { Selectable } from '../../models/selectable/selectable.model';\nimport { DdataSelectableListElementButtonComponentInterface } from './dd-selectable-list-element-button.component.interface';\n\n// @dynamic\n@Component({\n  selector: 'dd-selectable-list-element-button',\n  templateUrl: 'dd-selectable-list-element-button.component.html',\n})\nexport class DdataSelectableListElementButtonComponent implements DdataSelectableListElementButtonComponentInterface {\n  @Input() model: SelectableInterface = new Selectable();\n\n  @Output() choosed: EventEmitter<any> = new EventEmitter();\n\n  chooseSelect(model: SelectableInterface): void {\n    this.choosed.emit(model);\n  }\n}\n","<button\n  class=\"mr-1 btn btn-primary\"\n  type=\"button\"\n  (click)=\"chooseSelect(model)\">\n\n  <ng-content></ng-content>\n </button>\n","/*\n * Public API Surface of ddata-core\n */\n\n// base model & types\nexport * from './lib/models/base/base-model.model';\nexport * from './lib/models/base/base-data.type';\n\n// paginate model & interface\nexport * from './lib/models/paginate/paginate.interface';\nexport * from './lib/models/paginate/paginate.model';\n\n// file upload interface\nexport * from './lib/models/file/file-upload-process.interface';\n\n// selectable interface\nexport * from './lib/models/selectable/selectable.interface';\n\n// storage service & interface\nexport * from './lib/services/storage/storage.service';\nexport * from './lib/services/storage/storage-service.interface';\n\n// sorter service & interface\nexport * from './lib/services/sorter/sorter.service';\nexport * from './lib/services/sorter/sorter-service.interface';\n\n// local data service & interface\nexport * from './lib/services/local-data/local-data.service';\nexport * from './lib/services/local-data/local-data-service.interface';\n\n// remote data service & interface\nexport * from './lib/services/remote-data/remote-data.service';\nexport * from './lib/services/remote-data/remote-data-service.interface';\n\n// abstract data service & interface\nexport * from './lib/services/data/data-service.abstract';\n\n// proxy service, factory, interface\nexport * from './lib/services/proxy/proxy-factory.service';\nexport * from './lib/services/proxy/proxy-service.interface';\nexport * from './lib/services/proxy/proxy.service';\n\n// validatior service & interfaces\nexport * from './lib/services/validator/validator.service';\nexport * from './lib/services/validator/validator-service.interface';\nexport * from './lib/models/error/validation-error.model';\nexport * from './lib/models/error/validation-error-settings.model';\n\n// spinner service & interface\nexport * from './lib/services/spinner/spinner.service';\nexport * from './lib/services/spinner/spinner-service.interface';\n\n// notification service & interface\nexport * from './lib/services/notification/notification.service';\nexport * from './lib/services/notification/notification-service.interface';\nexport * from './lib/models/notification/notification.interface';\nexport * from './lib/models/notification/notification.model';\n\n// helper service & other helpers\nexport * from './lib/services/helper/helper-activated-route.service';\nexport * from './lib/services/helper/helper-service.factory';\nexport * from './lib/services/helper/helper-service.interface';\nexport * from './lib/services/helper/helper.service';\n\n// initial data service, model, interface\nexport * from './lib/services/initial-data/initial-data.service';\nexport * from './lib/services/initial-data/initial-data-service.interface';\nexport * from './lib/models/initial-data/initial-data.interface';\nexport * from './lib/models/initial-data/initial-data.model';\n\n// error handler service & error handler instances\nexport * from './lib/services/error-handler/ddata-core-error';\nexport * from './lib/services/error-handler/app-error-handler';\nexport * from './lib/services/error-handler/bad-request-error';\nexport * from './lib/services/error-handler/error-message-from-api-error';\nexport * from './lib/services/error-handler/forbidden-error';\nexport * from './lib/services/error-handler/internal-server-error';\nexport * from './lib/services/error-handler/method-not-allowed-error';\nexport * from './lib/services/error-handler/not-found-error';\nexport * from './lib/services/error-handler/third-party-error';\nexport * from './lib/services/error-handler/unauthorized-error';\nexport * from './lib/services/error-handler/unprocessable-entity-error';\nexport * from './lib/services/error-handler/validation-error';\n\n// base abstract components\nexport * from './lib/components/base-create-edit/base-create-edit-component.interface';\nexport * from './lib/components/base-create-edit/base-create-edit.component';\nexport * from './lib/components/base-list/base-list-component.interface';\nexport * from './lib/components/base-list/base-list.component';\nexport * from './lib/components/base-list/selectable-list.component.interface';\nexport * from './lib/components/base-list/selectable-list.component';\nexport * from './lib/components/dd-choose-selected-button/dd-choose-selected-button.component.interface';\nexport * from './lib/components/dd-choose-selected-button/dd-choose-selected-button.component';\nexport * from './lib/components/dd-selectable-list-element-button/dd-selectable-list-element-button.component.interface';\nexport * from './lib/components/dd-selectable-list-element-button/dd-selectable-list-element-button.component';\n\nexport * from './lib/ddata-core.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.StorageService","i2.SpinnerService","i3.NotificationService"],"mappings":"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"}