{"version":3,"file":"webresto-components-dialog-box.mjs","sources":["../../../projects/components/dialog-box/dialog-box.component.ts","../../../projects/components/dialog-box/dialog-box.component.html","../../../projects/components/dialog-box/webresto-components-dialog-box.ts"],"sourcesContent":["import { AsyncPipe, NgFor, NgIf, NgSwitch, NgSwitchCase } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  ElementRef,\n  EventEmitter,\n  Inject,\n  OnDestroy,\n} from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MAT_DIALOG_DATA, MatDialogModule, MatDialogRef } from '@angular/material/dialog';\nimport { MatIconModule } from '@angular/material/icon';\nimport {\n  TrackByIdDirective,\n  TranslatePipe,\n  createSubject,\n  isValue,\n  objectEntries,\n} from '@axrl/common';\nimport {\n  APP_RECEIPT,\n  ComponentReceiptData,\n  Config,\n} from '@webresto/components/configurable-component';\nimport { RestoProductImageSrcDirective } from '@webresto/components/directives/dish-image-src';\nimport {\n  DialogBoxConfig,\n  DialogOptionButton,\n  DialogOptionProduct,\n  RequestService,\n} from '@webresto/ng-gql';\nimport { switchMap, tap } from 'rxjs';\n\nexport interface DialogBoxAnswer {\n  askId: string;\n  answerId: string;\n}\n\nexport interface DialogBoxComponentData {\n  boxConfig: {\n    askId: string;\n    answerId: string | null;\n    deviceId: string;\n    config: DialogBoxConfig;\n  };\n  imageLink: string;\n  useDarkTheme: boolean;\n}\n\n@Component({\n  selector: 'app-dialog-box',\n  standalone: true,\n  imports: [\n    MatDialogModule,\n    TrackByIdDirective,\n    MatButtonModule,\n    MatIconModule,\n    AsyncPipe,\n    NgIf,\n    NgFor,\n    NgSwitchCase,\n    NgSwitch,\n    RestoProductImageSrcDirective,\n    TranslatePipe,\n  ],\n  host: {\n    '[class.dark-theme]': 'useDarkTheme',\n  },\n  templateUrl: './dialog-box.component.html',\n  styleUrl: './dialog-box.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DialogBoxComponent implements OnDestroy {\n  get title(): string {\n    return this._componentData.boxConfig.config.title;\n  }\n\n  get message(): string {\n    return this._componentData.boxConfig.config.message;\n  }\n\n  get allowClose(): boolean {\n    return this._componentData.boxConfig.config.allowClosing ?? true;\n  }\n\n  get isProductBox(): boolean {\n    return this._componentData.boxConfig.config.optionsType === 'product';\n  }\n\n  get productsOptions(): DialogOptionProduct[] {\n    return this._componentData.boxConfig.config.optionsType === 'product'\n      ? this._componentData.boxConfig.config.options\n      : [];\n  }\n\n  get buttonsOptions(): DialogOptionButton[] {\n    return this._componentData.boxConfig.config.optionsType === 'button'\n      ? this._componentData.boxConfig.config.options\n      : [];\n  }\n\n  get useDarkTheme(): boolean {\n    return this._componentData.useDarkTheme;\n  }\n\n  get imageLink(): string {\n    return this._componentData.imageLink;\n  }\n\n  get withTimeout(): boolean {\n    return isValue(this._componentData.boxConfig.config.timeout);\n  }\n\n  private readonly _dialogBoxBus = new EventEmitter<DialogBoxAnswer>();\n\n  readonly answerProcessSubscription$ = this._dialogBoxBus.pipe(\n    switchMap(payload =>\n      this._requestService.customMutation$<boolean, 'dialogBoxAnswerProcess', DialogBoxAnswer>(\n        'dialogBoxAnswerProcess',\n        true,\n        payload,\n      ),\n    ),\n    tap(res => {\n      console.log(res);\n      this._dialogRef.close();\n    }),\n  );\n\n  private readonly _timeout$ = createSubject<number>(\n    this._componentData.boxConfig.config.timeout ?? 0,\n  );\n  readonly timeout$ = this._timeout$.asObservable();\n\n  constructor(\n    @Inject(MAT_DIALOG_DATA)\n    private _componentData: DialogBoxComponentData,\n    private _requestService: RequestService,\n    private _dialogRef: MatDialogRef<DialogBoxComponent>,\n    @Inject(APP_RECEIPT) private _receiptData: Record<string, ComponentReceiptData<Config>>,\n    private _elementRef: ElementRef<HTMLElement>,\n  ) {\n    objectEntries(this._receiptData['dishcard'].colors).forEach(([property, value]) => {\n      const component = this._elementRef.nativeElement;\n      const propertyLavlue =\n        typeof value === 'string' && value.includes('$')\n          ? document.documentElement.style.getPropertyValue(`--${value.replace('$', '')}`)\n          : value;\n      component.style.setProperty(`--dishcard-${property}`, propertyLavlue);\n    });\n    const dishLineBorderRadius = this._receiptData['dish-line']?.colors?.['border-radius'];\n    if (isValue(dishLineBorderRadius)) {\n      this._elementRef.nativeElement.style.setProperty(\n        '--dishline-border-radius',\n        dishLineBorderRadius,\n      );\n    }\n\n    if (isValue(this._componentData.boxConfig.config.timeout)) {\n      this.registerTimeout(\n        this._componentData.boxConfig.config.timeout,\n        this._componentData.boxConfig.config.timeout,\n      );\n    }\n  }\n\n  registerTimeout(timeout: number, originalTimeoutValue: number) {\n    const endTime =\n      this._componentData.boxConfig.config.emitTime * 1000 + originalTimeoutValue * 1000;\n    const remainder = endTime - Date.now();\n\n    if (remainder < 1000) {\n      this.closeWithDefault();\n    } else {\n      this._timeout$?.next(timeout - 1);\n      setTimeout(() => this.registerTimeout(timeout - 1, originalTimeoutValue), 1000);\n    }\n  }\n\n  closeWithDefault() {\n    const defaultId = this._componentData.boxConfig.config.defaultOptionId;\n    if (isValue(defaultId)) {\n      this.answerProcess(defaultId);\n    } else {\n      this._dialogRef.close();\n    }\n  }\n\n  ngOnDestroy(): void {\n    this._dialogBoxBus.complete();\n    this._timeout$.complete();\n  }\n\n  answerProcess(answerId: string) {\n    this._dialogBoxBus.emit({askId: this._componentData.boxConfig.askId, answerId});\n  }\n}\n","<div class=\"close-button-line\" *ngIf=\"withTimeout || allowClose\">\n  <span *ngIf=\"withTimeout\" class=\"timeout\">{{ timeout$ | async }}</span>\n  <button mat-icon-button (click)=\"closeWithDefault()\" *ngIf=\"allowClose\">\n    <mat-icon svgIcon=\"app-close\"></mat-icon>\n  </button>\n</div>\n<h1 mat-dialog-title>\n  <span>{{ title }}</span>\n</h1>\n<mat-dialog-content>\n  <div>{{ message }}</div>\n  <div class=\"products\" *ngIf=\"isProductBox\">\n    <div class=\"dishcard\" *ngFor=\"let option of productsOptions; trackById\">\n      <img\n        loading=\"lazy\"\n        width=\"262\"\n        height=\"220\"\n        [restoProductImageSrc]=\"option.product\"\n        [imageLink]=\"imageLink\"\n      />\n      <div class=\"dish-name mat-body-1\">{{ option.product.name }}</div>\n      <div class=\"dish-description mat-body-1\">{{ option.product.description }}</div>\n      <button mat-flat-button color=\"primary\" (click)=\"answerProcess(option.id)\">\n        {{ 'Choose' | translate }}\n      </button>\n    </div>\n  </div>\n</mat-dialog-content>\n<mat-dialog-actions *ngIf=\"!isProductBox\">\n  <ng-container *ngFor=\"let option of buttonsOptions; trackById\" [ngSwitch]=\"option.button?.type\">\n    <button\n      class=\"is-fullwidth\"\n      *ngSwitchCase=\"'primary'\"\n      mat-flat-button\n      color=\"primary\"\n      (click)=\"answerProcess(option.id)\"\n    >\n      {{ option.button?.label }}\n    </button>\n    <button\n      class=\"is-fullwidth\"\n      *ngSwitchCase=\"'secondary'\"\n      mat-flat-button\n      color=\"accent\"\n      (click)=\"answerProcess(option.id)\"\n    >\n      {{ option.button?.label }}\n    </button>\n    <button\n      class=\"is-fullwidth\"\n      *ngSwitchCase=\"'link'\"\n      mat-stroked-button\n      color=\"primary\"\n      (click)=\"answerProcess(option.id)\"\n    >\n      {{ option.button?.label }}\n    </button>\n    <button\n      class=\"is-fullwidth\"\n      *ngSwitchCase=\"'abort'\"\n      mat-button\n      (click)=\"answerProcess(option.id)\"\n    >\n      {{ option.button?.label }}\n    </button>\n  </ng-container>\n</mat-dialog-actions>\n<span *ngIf=\"answerProcessSubscription$ | async\"></span>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}