{"version":3,"file":"app-432eddb4.f584a1446b2fc034d810.bundle.js","mappings":"AAGA","sources":["webpack://lernplattform-admin-frontend/./src/separate-window-layout.html","webpack://lernplattform-admin-frontend/./src/services/AdminStateMutationUtils.ts","webpack://lernplattform-admin-frontend/./src/services/AssessmentWebSocketService.ts","webpack://lernplattform-admin-frontend/./src/services/BreadcrumbService.ts","webpack://lernplattform-admin-frontend/./src/services/ContentEditorService.ts","webpack://lernplattform-admin-frontend/./src/services/CourseCacheService.ts","webpack://lernplattform-admin-frontend/./src/services/CustomDialog.ts","webpack://lernplattform-admin-frontend/./src/services/CustomDialogService.ts","webpack://lernplattform-admin-frontend/./src/services/DateService.ts"],"sourcesContent":["// Module\nvar code = \"<template> <div class=\\\"page\\\" style=\\\"position:relative;z-index:1;display:flex;align-items:stretch;justify-content:stretch\\\"> <slot></slot> </div> </template> \";\n// Exports\nexport default code;","import { NonBlockElementType } from 'common/dto/content-editor/content.editor.types';\nimport { ILayoutContainerDto, LayoutContainerType } from 'common/dto/course/layout.container.interface';\nimport { ArrayUtils } from 'common/utils/ArrayUtils';\nimport { IState } from 'store/state';\n\nexport class AdminStateMutationUtils {\n  private constructor() { }\n\n  public static updateClipboardPerformanceData<TState extends IState>(state: TState): TState {\n    // eslint-disable-next-line prefer-destructuring\n    const layoutContainers: Array<ILayoutContainerDto> = state.contentEditor.clipboard.layoutContainers;\n\n    const blockIdByLayoutContainerId = ArrayUtils.toRecord(layoutContainers.filter(\n      (container: ILayoutContainerDto): container is ILayoutContainerDto & { blockId: number } => container.blockId != null,\n    ), container => container.id, container => container.blockId);\n\n    const blockTypeById = ArrayUtils.toRecord(state.contentEditor.clipboard.blocks, block => block.id, block => block.type);\n\n    // prepared for future usecases other than cards:\n    const elementTypeByContainerId = ArrayUtils.toRecord(\n      layoutContainers.filter(container => container.type === LayoutContainerType.Card),\n      container => container.id,\n      container => {\n        switch(container.type) {\n          case LayoutContainerType.Card:\n            return NonBlockElementType.Card;\n        }\n      },\n    );\n\n    return {\n      ...state,\n      contentEditor: {\n        ...state.contentEditor,\n        clipboard: {\n          ...state.contentEditor.clipboard,\n          blockIdByLayoutContainerId,\n          blockTypeById,\n          elementTypeByContainerId,\n        },\n      },\n    };\n  }\n}\n","import { autoinject } from 'aurelia-framework';\nimport { EventEmitter } from 'common/aurelia-classes/EventEmitter';\nimport { EmitConfig, EventListeners, WebSocketConnection } from 'common/aurelia-classes/WebSocketConnection';\nimport { IAssessmentCodeDto } from 'common/dto/assessment/assessment-code.interface';\nimport { WebSocketActionName, WebSocketEventName } from 'common/enum/assessment.enum';\nimport { Config } from 'common/fe-config/config';\n\n@autoinject()\nexport class AssessmentWebSocketService {\n  private static readonly MAX_RECONNECTION_ATTEMPTS = 5;\n\n  private eventEmitter: EventEmitter<IEventEmitterConfig> = new EventEmitter();\n  // eslint-disable-next-line @typescript-eslint/ban-types\n  private webSocket: WebSocketConnection<AssessmentWebSocketListenerMap, AssessmentWebSocketEmitMap> | null = null;\n\n  public startReceiving(assessmentId: number): void {\n    if(this.webSocket != null && this.webSocket.connected) throw Error('already receiving progress updates');\n\n    if(this.webSocket == null) {\n      this.webSocket = new WebSocketConnection(\n        `${Config().webSocketsGatewayBaseUrl}/frp-assessment`,\n        Config().socketIOPath,\n        AssessmentWebSocketService.MAX_RECONNECTION_ATTEMPTS,\n      );\n      this.webSocket.addEventListeners(this.webSocketListeners);\n    }\n    this.webSocket.connect();\n    void this.webSocket.emit(WebSocketActionName.SubscribeToProgress, { assessmentId });\n    void this.webSocket.emit(WebSocketActionName.SubscribeToState, { assessmentId });\n  }\n\n  public stopReceiving(): void {\n    this.webSocket?.disconnect();\n    this.webSocket = null;\n  }\n\n  public addAnswerProgressListener(scope: unknown, callback: (payload: AssessmentCodePayload) => void): void {\n    this.eventEmitter.addEventListener(scope, WebSocketEventName.AnswerProgress, callback);\n  }\n\n  public addCodeStateListener(scope: unknown, callback: (payload: AssessmentCodePayload) => void): void {\n    this.eventEmitter.addEventListener(scope, WebSocketEventName.CodeState, callback);\n  }\n\n  public addClosedDueToInactivityStateListener(scope: unknown, callback: (payload: AssessmentPayload) => void): void {\n    this.eventEmitter.addEventListener(scope, WebSocketEventName.ClosedDueToInactivity, callback);\n  }\n\n  public removeListenersByScope(scope: unknown): void {\n    this.eventEmitter.removeEventListenersByScope(scope);\n  }\n\n  private get webSocketListeners(): EventListeners<AssessmentWebSocketListenerMap> {\n    return {\n      [WebSocketEventName.AnswerProgress]: data => this.eventEmitter.dispatch(WebSocketEventName.AnswerProgress, data),\n      [WebSocketEventName.CodeState]: data => this.eventEmitter.dispatch(WebSocketEventName.CodeState, data),\n      [WebSocketEventName.ClosedDueToInactivity]: data => this.eventEmitter.dispatch(WebSocketEventName.ClosedDueToInactivity, data),\n    };\n  }\n}\n\nexport type AssessmentWebSocketListenerMap = {\n  [WebSocketEventName.AnswerProgress]: (data: AssessmentCodePayload) => void;\n  [WebSocketEventName.CodeState]: (data: AssessmentCodePayload) => void;\n  [WebSocketEventName.ClosedDueToInactivity]: (data: AssessmentPayload) => void;\n};\n\nexport type AssessmentWebSocketEmitMap = {\n  [WebSocketActionName.SubscribeToProgress]: EmitConfig<{ assessmentId: number }>;\n  [WebSocketActionName.SubscribeToState]: EmitConfig<{ assessmentId: number }>;\n};\n\ninterface IEventEmitterConfig {\n  [WebSocketEventName.AnswerProgress]: AssessmentCodePayload;\n  [WebSocketEventName.CodeState]: AssessmentCodePayload;\n  [WebSocketEventName.ClosedDueToInactivity]: AssessmentPayload;\n}\n\nexport type AssessmentCodePayload = { code: IAssessmentCodeDto<string> };\nexport type AssessmentPayload = { assessmentId: number };\n","import { autoinject } from 'aurelia-framework';\nimport { EventAggregator } from 'aurelia-event-aggregator';\nimport { Router, RouterEvent, NavigationInstruction } from 'aurelia-router';\nimport { IBreadcrumb } from 'common/aurelia-components/breadcrumbs/breadcrumbs';\nimport { EventEmitter } from 'common/aurelia-classes/EventEmitter';\nimport { selectFirstChange, StoreService, StoreSubscriptionManager } from 'common/aurelia-services/StoreService';\nimport { IHistoryInstruction, IState } from 'store/state';\nimport { addInstructionToNavigationHistory, clearNavigationHistory, setCurrentNavigationInstruction } from 'store/actions';\n\nexport enum BreadcrumbsEvent {\n  Changed = 'breadcrumbs-changed',\n}\n\n@autoinject()\nexport class BreadcrumbService {\n  private eventEmitter = new EventEmitter<IEventEmitterConfig>();\n  private storeSubscriptionManager: StoreSubscriptionManager<IState>;\n  private breadcrumbs: Array<IBreadcrumb> = [];\n\n  private previousInstructions: Array<IHistoryInstruction> = [];\n  private currentInstruction: IHistoryInstruction | null = null;\n\n  constructor(\n    ea: EventAggregator,\n    storeService: StoreService<IState>,\n    private router: Router,\n  ) {\n    this.storeSubscriptionManager = storeService.createStoreSubscriptionManager();\n\n    ea.subscribe(RouterEvent.Processing, (({ instruction }) => {\n      const [previousInstruction] = instruction.getAllPreviousInstructions() as Array<NavigationInstruction | undefined>;\n\n      if(previousInstruction != null) {\n        this.storeSubscriptionManager.getStore().dispatch(addInstructionToNavigationHistory, this.convertNavigationInstructionToHistoryInstruction(previousInstruction));\n      }\n    }) as RouterEventCallback);\n\n    ea.subscribe(RouterEvent.Success, (({ instruction }) => {\n      if(instruction.config.settings.isTopLevel === true) {\n        this.storeSubscriptionManager.getStore()\n          .pipe(clearNavigationHistory)\n          .pipe(setCurrentNavigationInstruction, this.convertNavigationInstructionToHistoryInstruction(instruction))\n          .dispatch();\n      } else {\n        this.storeSubscriptionManager.getStore().dispatch(setCurrentNavigationInstruction, this.convertNavigationInstructionToHistoryInstruction(instruction));\n      }\n    }) as RouterEventCallback);\n\n    this.storeSubscriptionManager.subscribeToDetailedChanges([\n      state => state.navigationHistory.previousInstructions,\n    ], (_, previousInstructions) => {\n      this.previousInstructions = previousInstructions;\n    });\n\n    this.storeSubscriptionManager.subscribeToDetailedChanges([\n      selectFirstChange(),\n      state => state.navigationHistory.currentInstruction,\n    ], (_, isFirstChange, currentInstruction) => {\n      if(isFirstChange && currentInstruction != null && this.router.currentInstruction.config.name !== currentInstruction.config.name) {\n        // reset if route name has changed on reload\n        this.storeSubscriptionManager.getStore().dispatch(clearNavigationHistory);\n      }\n      this.currentInstruction = currentInstruction;\n      this.updateBreadcrumbs();\n    });\n  }\n\n  public subscribeToBreadcrumbs(scope: unknown, callback: BreadcrumbsChangedCallback): void {\n    this.eventEmitter.addEventListener(scope, BreadcrumbsEvent.Changed, callback);\n    callback(this.breadcrumbs);\n  }\n\n  public disposeSubscriptions(scope: unknown): void {\n    this.eventEmitter.removeEventListenersByScope(scope);\n  }\n\n  private updateBreadcrumbs(): void {\n    if(this.currentInstruction == null || this.previousInstructions.length === 0) {\n      this.breadcrumbs = [];\n    } else {\n      this.breadcrumbs = [\n        ...this.previousInstructions.map(instruction => ({\n          text: { textTk: instruction.config.title ?? '' },\n          callback: () => { this.router.navigateToRoute(instruction.config.name ?? '/', instruction.params); }\n        })),\n        {\n          text: { textTk: this.currentInstruction.config.title ?? '' },\n        },\n      ];\n    }\n    this.eventEmitter.dispatch(BreadcrumbsEvent.Changed, this.breadcrumbs);\n  }\n\n  private convertNavigationInstructionToHistoryInstruction(instruction: NavigationInstruction): IHistoryInstruction {\n    return {\n      config: {\n        name: instruction.config.name ?? '',\n        title: instruction.config.title ?? '',\n        settings: instruction.config.settings,\n      },\n      params: instruction.params,\n    };\n  }\n}\n\ntype RouterEventCallback = ({ instruction }: { instruction: NavigationInstruction }) => Promise<void> | void;\n\nexport type BreadcrumbsChangedCallback = (breadcrumbs: Array<IBreadcrumb>) => Promise<void> | void;\n\nexport interface INavigationBreadcrumb {\n  text: string | {\n    textTk: string;\n  };\n  route: {\n    name: string;\n    params?: any;\n  };\n}\n\nexport interface IEventEmitterConfig {\n  [BreadcrumbsEvent.Changed]: Array<IBreadcrumb>;\n}\n","import { StoreService } from 'common/aurelia-services/StoreService';\nimport { ILayoutChanges, UniversalBlock, UniversalLayoutContainer } from 'common/dto/content-editor/content.editor.interface';\nimport { BlockType } from 'common/dto/course/content/course.types';\nimport { autoinject } from 'aurelia-framework';\nimport { IState } from '../store/state';\nimport * as ContentEditorMutations from '../store/content.editor.mutations';\n\n@autoinject()\nexport class ContentEditorService {\n\n  constructor(\n    private storeService: StoreService<IState>,\n  ) { }\n\n  public async focusNewTextBlock(changes: ILayoutChanges<UniversalLayoutContainer, UniversalBlock>): Promise<void> {\n    const freshBlock: UniversalBlock | undefined = changes.blockChanges.added[0];\n    if(!freshBlock) return;\n    if(freshBlock.type === BlockType.TEXT || freshBlock.type === BlockType.MP_INTERACTIVE_TEXT) {\n      await this.storeService.dispatch(ContentEditorMutations.updateEditBlockId, freshBlock.id);\n    }\n  }\n}\n","import { autoinject } from 'aurelia-framework';\nimport { RecordCache } from 'common/aurelia-classes/RecordCache';\nimport { PresentationApiService } from 'common/aurelia-services/PresentationApiService';\nimport { StoreService } from 'common/aurelia-services/StoreService';\nimport { ICourseContentDto, IPresentationContentDto } from 'common/dto/course/content/course.interface';\nimport * as CourseContentMutations from 'common/store/mutations/course.content.mutations';\nimport * as PresentationContentMutations from 'common/store/mutations/presentation.content.mutations';\nimport { ICommonState } from 'common/store/store.interface';\nimport { ContentEditorApiService } from './api/ContentEditorApiService';\nimport { CourseManagementApiService } from './api/CourseManagementApiService';\nimport { DateService } from './DateService';\n\n/**\n * a service which caches courses locally in the store\n * cached courses will be available in `state.cache.coursesById`\n */\n@autoinject()\nexport class CourseCacheService {\n  private static RELOAD_COOLDOWN_MS = 10000;\n\n  private coursesById = new RecordCache<number, ICourseContentDto>();\n  private presentationsById = new RecordCache<number, IPresentationContentDto>();\n  private preventCallsToEditedAtUntilByCourseId: Record<number, number> = {};\n\n  constructor(\n    private dateService: DateService,\n    private storeService: StoreService<ICommonState>,\n    private courseApi: CourseManagementApiService,\n    private contentEditorApi: ContentEditorApiService,\n    private presentationApi: PresentationApiService,\n  ) {\n    this.storeService.subscribe(this, state => {\n      this.coursesById.setState(state.courseContentById as Record<number, ICourseContentDto>);\n      this.presentationsById.setState(state.presentationContentById as Record<number, IPresentationContentDto>);\n    });\n  }\n\n  /**\n   * ensures that the course is in the cache\n   * Doesn't need to be awaited if you want to download the course in the background\n   *\n   * @param courseId\n   */\n  public async ensureCourseInCache(courseId: number): Promise<void> {\n    await this.coursesById.ensureInCache(\n      courseId,\n      async () => {\n        const course = await this.contentEditorApi.getCourseContent(courseId);\n        await this.storeService.dispatch(CourseContentMutations.setContent, course);\n      },\n      async course => {\n        if(course?.id == null) return false;\n\n        const now = Date.now();\n        if(now < this.preventCallsToEditedAtUntilByCourseId[course.id]) return false;\n        this.preventCallsToEditedAtUntilByCourseId[course.id] = now + CourseCacheService.RELOAD_COOLDOWN_MS;\n        \n        const lastUpdatedAt = await this.courseApi.getCourseEditedAt(courseId);\n        return !!course?.updatedAt && this.dateService.getNowISOString(lastUpdatedAt) !== this.dateService.getNowISOString(course.updatedAt);\n      }\n    );\n  }\n\n  /**\n   * ensures that the presentation is in the cache\n   * Doesn't need to be awaited if you want to download the course in the background\n   *\n   * @param presentationId\n   */\n  public async ensurePresentationInCache(presentationId: number): Promise<void> {\n    await this.presentationsById.ensureInCache(\n      presentationId,\n      async () => {\n        const course = await this.presentationApi.getPresentationContent(presentationId);\n        await this.storeService.dispatch(PresentationContentMutations.setContent, course);\n      },\n      async presentation => {\n        const lastUpdatedAt = await this.courseApi.getCourseEditedAt(presentationId);\n        return !!presentation?.updatedAt && this.dateService.getNowISOString(lastUpdatedAt) !== this.dateService.getNowISOString(presentation.updatedAt);\n      }\n    );\n  }\n\n  public async ensureAllTenantCoursesInCache(): Promise<void> {\n    const courseIds = await this.courseApi.getTenantCourseIds();\n    for(const courseId of courseIds) {\n      await this.ensureCourseInCache(courseId);\n    }\n  }\n}\n","import { autoinject } from 'aurelia-framework';\nimport { DialogController } from 'aurelia-dialog';\nimport { SubscriptionManagerService } from 'common/aurelia-services/SubscriptionManagerService';\nimport { FocusTrap } from 'common/aurelia-classes/FocusTrap';\n\n@autoinject()\nexport class CustomDialog {\n  public model!: unknown;\n  public value!: unknown;\n\n  constructor(protected controller: DialogController) { }\n\n  public activate(model: unknown): void {\n    this.model = model;\n    this.initValue(model);\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-empty-function,@typescript-eslint/no-unused-vars\n  public initValue(model: unknown): void { }\n\n  protected ok(): void {\n    this.controller.ok(this.value);\n  }\n\n  protected cancel(): void {\n    this.controller.cancel();\n  }\n}\n\n@autoinject()\nexport class FullWidthCustomDialog extends CustomDialog {\n  protected domElement: HTMLElement;\n\n  constructor(controller: DialogController, element: Element) {\n    super(controller);\n    this.domElement = element as HTMLElement;\n  }\n  protected attached(): void {\n    this.domElement.style.width = 'auto';\n  }\n}\n\n@autoinject()\nexport class FocusTrapCustomDialog extends CustomDialog {\n  private subscriptionManagerService: SubscriptionManagerService;\n  private domElement: HTMLElement;\n  private focusTrap: FocusTrap | null = null;\n\n  constructor(\n    controller: DialogController,\n    element: Element,\n    subscriptionManagerService: SubscriptionManagerService\n  ) {\n    super(controller);\n    this.subscriptionManagerService = subscriptionManagerService;\n    this.domElement = element as HTMLElement;\n  }\n\n  public activate(model: unknown): void {\n    super.activate(model);\n    this.domElement.setAttribute('tabindex', '0');\n    this.focusTrap = new FocusTrap(this.domElement, this.subscriptionManagerService);\n    this.focusTrap.setup();\n  }\n\n  protected ok(): void {\n    this.focusTrap?.destroy();\n    super.ok();\n  }\n\n  protected cancel(): void {\n    this.focusTrap?.destroy();\n    super.cancel();\n  }\n}","var _a, _b, _c, _d;\nimport { __awaiter, __decorate, __metadata } from \"tslib\";\nimport { DialogService } from 'aurelia-dialog';\nimport { autoinject } from 'aurelia-framework';\nimport { VerticalDisplayMode } from 'common/enum/responsiveness-mode.enum';\nimport { LogUtils } from 'common/utils/LogUtils';\nimport Moment from 'moment';\nimport { AppUtils } from 'utils/AppUtils';\nimport { AddBlocklistedNicknameDialog } from '../resources/dialogs/add-blocklisted-nickname-dialog/add-blocklisted-nickname-dialog';\nimport { AddInvitationToCourseGroupDialog } from '../resources/dialogs/add-invitation-to-course-group-dialog/add-invitation-to-course-group-dialog';\nimport { AddInvitationsToCourseGroupDialog } from '../resources/dialogs/add-invitations-to-course-group-dialog/add-invitations-to-course-group-dialog';\nimport { AddPageDialog } from '../resources/dialogs/add-page-dialog/add-page-dialog';\nimport { AddPresentationDialog } from '../resources/dialogs/add-presentation-dialog/add-presentation-dialog';\nimport { AddQuestionDialog } from '../resources/dialogs/add-question-dialog/add-question-dialog';\nimport { AssignCoursesToLearningJourneyDialog } from '../resources/dialogs/assign-courses-to-learning-journeys-dialog/assign-courses-to-learning-journeys-dialog';\nimport { AssignCoursesToStudentsDialog } from '../resources/dialogs/assign-courses-to-students-dialog/assign-courses-to-students-dialog';\nimport { AssignCoursesToTenantsDialog } from '../resources/dialogs/assign-courses-to-tenants-dialog/assign-courses-to-tenants-dialog';\nimport { AssignLearningJourneyToCoursesDialog } from '../resources/dialogs/assign-learning-journeys-to-courses-dialog/assign-learning-journeys-to-courses-dialog';\nimport { AssignLearningJourneyToStudentDialog } from '../resources/dialogs/assign-learning-journeys-to-student-dialog/assign-learning-journeys-to-student-dialog';\nimport { AssignSkillToStudentDialog } from '../resources/dialogs/assign-skill-to-student-dialog/assign-skill-to-student-dialog';\nimport { AssignSkillsToCoursesDialog } from '../resources/dialogs/assign-skills-to-courses-dialog/assign-skills-to-courses-dialog';\nimport { AssignStudentsToCoursesDialog } from '../resources/dialogs/assign-students-to-courses-dialog/assign-students-to-courses-dialog';\nimport { AssignStudentsToLearningJourneysDialog } from '../resources/dialogs/assign-students-to-learning-journeys-dialog/assign-students-to-learning-journeys-dialog';\nimport { AssignStudentsToTenantsDialog } from '../resources/dialogs/assign-students-to-tenants-dialog/assign-students-to-tenants-dialog';\nimport { AssignTenantsToCoursesDialog } from '../resources/dialogs/assign-tenants-to-courses-dialog/assign-tenants-to-courses-dialog';\nimport { AssignTenantsToStudentsDialog } from '../resources/dialogs/assign-tenants-to-students-dialog/assign-tenants-to-students-dialog';\nimport { BatchRenameMediaDialog } from '../resources/dialogs/batch-rename-media-dialog/batch-rename-media-dialog';\nimport { ChangeItemSizeDialog } from '../resources/dialogs/change-item-size-dialog/change-item-size-dialog';\nimport { ChangeTenantDialog } from '../resources/dialogs/change-tenant-dialog/change-tenant-dialog';\nimport { ChatLinkSearchDialog } from '../resources/dialogs/chat-link-search-dialog/chat-link-search-dialog';\nimport { ChooseCsvTypeDialog } from '../resources/dialogs/choose-csv-type-dialog/choose-csv-type-dialog';\nimport { ConfirmationDialog } from '../resources/dialogs/confirmation-dialog/confirmation-dialog';\nimport { ContentEditorBlockEditorDialog } from '../resources/dialogs/content-editor-block-editor-dialog/content-editor-block-editor-dialog';\nimport { CopyQuestionDialog } from '../resources/dialogs/copy-question-dialog/copy-question-dialog';\nimport { CourseGroupDialog } from '../resources/dialogs/course-group-dialog/course-group-dialog';\nimport { CourseLicenseDialog } from '../resources/dialogs/course-license-dialog/course-license-dialog';\nimport { CourseSelectDialog } from '../resources/dialogs/course-select-dialog/course-select-dialog';\nimport { CreateAssessmentCodesDialog } from '../resources/dialogs/create-assessment-codes-dialog/create-assessment-codes-dialog';\nimport { CreateAssessmentDialog } from '../resources/dialogs/create-assessment-dialog/create-assessment-dialog';\nimport { CreateAvatarComponentSetDialog } from '../resources/dialogs/create-avatar-component-set-dialog/create-avatar-component-set-dialog';\nimport { CreateLearningJourneyDialog } from '../resources/dialogs/create-learning-journey-dialog/create-learning-journey-dialog';\nimport { CreateQuestionDialog } from '../resources/dialogs/create-question-dialog/create-question-dialog';\nimport { CropImageDialog } from '../resources/dialogs/crop-image-dialog/crop-image-dialog';\nimport { DataProtectionDialog } from '../resources/dialogs/data-protection-dialog/data-protection-dialog';\nimport { DeleteConfirmationDialog } from '../resources/dialogs/delete-confirmation-dialog/delete-confirmation-dialog';\nimport { DistinarStartConferenceDialog } from '../resources/dialogs/distinar-start-conference-dialog/distinar-start-conference-dialog';\nimport { DownloadAssessmentCodesDialog } from '../resources/dialogs/download-assessment-codes-dialog/download-assessment-codes-dialog';\nimport { EditAnnouncementDialog } from '../resources/dialogs/edit-announcement-dialog/edit-announcement-dialog';\nimport { EditBlockPreviewDialog } from '../resources/dialogs/edit-block-preview-dialog/edit-block-preview-dialog';\nimport { EditLearningJourneyCourseDialog } from '../resources/dialogs/edit-learning-journey-course-dialog/edit-learning-journey-course-dialog';\nimport { EditPageDialog } from '../resources/dialogs/edit-page-dialog/edit-page-dialog';\nimport { EditQuestionDialog } from '../resources/dialogs/edit-question-dialog/edit-question-dialog';\nimport { EditStudentSkillDialog } from '../resources/dialogs/edit-student-skill-dialog/edit-student-skill-dialog';\nimport { EditTileDialog } from '../resources/dialogs/edit-tile-dialog/edit-tile-dialog';\nimport { EmailPrompt } from '../resources/dialogs/email-prompt/email-prompt';\nimport { FromToDatesDialog } from '../resources/dialogs/from-to-dates-dialog/from-to-dates-dialog';\nimport { LayoutContainerPreviewDialog } from '../resources/dialogs/layout-container-preview-dialog/layout-container-preview-dialog';\nimport { LectureSettingsDialog } from '../resources/dialogs/lecture-settings-dialog/lecture-settings-dialog';\nimport { ManageAttendanceDialog } from '../resources/dialogs/manage-attendance-dialog/manage-attendance-dialog';\nimport { ManageAttendanceIntervalsDialog } from '../resources/dialogs/manage-attendance-intervals-dialog/manage-attendance-intervals-dialog';\nimport { MediaLibraryUploadDialog } from '../resources/dialogs/media-library-upload-dialog/media-library-upload-dialog';\nimport { MediaSelectDialog } from '../resources/dialogs/media-select-dialog/media-select-dialog';\nimport { MediaShareDialog } from '../resources/dialogs/media-share-dialog/media-share-dialog';\nimport { MediaShareTableDialog } from '../resources/dialogs/media-share-table-dialog/media-share-table-dialog';\nimport { OperationStatusDialog } from '../resources/dialogs/operation-status-dialog/operation-status-dialog';\nimport { PdfGeneratedDialog } from '../resources/dialogs/pdf-generated-dialog/pdf-generated-dialog';\nimport { PicturePreviewDialog } from '../resources/dialogs/picture-preview-dialog/picture-preview-dialog';\nimport { PointsExplanationDialog } from '../resources/dialogs/points-explanation-dialog/points-explanation-dialog';\nimport { ProviderMediaSelectDialog } from '../resources/dialogs/provider-media-select-dialog/provider-media-select-dialog';\nimport { QuestionPreviewDialog } from '../resources/dialogs/question-preview-dialog/question-preview-dialog';\nimport { QuestionsImportDialog } from '../resources/dialogs/questions-import-dialog/questions-import-dialog';\nimport { QuizTemplateCreateDialog } from '../resources/dialogs/quiz-template-create-dialog/quiz-template-create-dialog';\nimport { QuizTemplateEditDialog } from '../resources/dialogs/quiz-template-edit-dialog/quiz-template-edit-dialog';\nimport { ScormPreviewDialog } from '../resources/dialogs/scorm-preview-dialog/scorm-preview-dialog';\nimport { SendMessageToStudentsDialog } from '../resources/dialogs/send-message-to-students-dialog/send-message-to-students-dialog';\nimport { ShowDistinarQrCodeDialog } from '../resources/dialogs/show-distinar-qr-code-dialog/show-distinar-qr-code-dialog';\nimport { ShowStudentsDialog } from '../resources/dialogs/show-students-dialog/show-students-dialog';\nimport { SingleRatingDialog } from '../resources/dialogs/single-rating-dialog/single-rating-dialog';\nimport { StartQuickQuizDialog } from '../resources/dialogs/start-quick-quiz-dialog/start-quick-quiz-dialog';\nimport { StartTemplateQuizDialog } from '../resources/dialogs/start-template-quiz-dialog/start-template-quiz-dialog';\nimport { StudentImportDialog } from '../resources/dialogs/student-import-dialog/student-import-dialog';\nimport { TransferInvitationWarningDialog } from '../resources/dialogs/transfer-invitation-warning-dialog/transfer-invitation-warning-dialog';\nimport { VideoPreviewDialog } from '../resources/dialogs/video-preview-dialog/video-preview-dialog';\nimport { AnnouncementApiService } from './api/AnnouncementApiService';\nimport { AudienceApiService } from './api/AudienceApiService';\nimport { TenantApiService } from './api/TenantApiService';\nlet CustomDialogService = class CustomDialogService {\n    constructor(dialogService, tenantApi, announcementApiService, audienceApiService) {\n        this.dialogService = dialogService;\n        this.tenantApi = tenantApi;\n        this.announcementApiService = announcementApiService;\n        this.audienceApiService = audienceApiService;\n    }\n    isAnyDialogOpen() {\n        return this.dialogService.hasOpenDialog || this.dialogService.hasActiveDialog;\n    }\n    promptEmail(model) {\n        return __awaiter(this, void 0, void 0, function* () {\n            return this.getResultOrNull(EmailPrompt, model);\n        });\n    }\n    showDataProtectionDialog(model) {\n        return __awaiter(this, void 0, void 0, function* () {\n            yield this.dialogService.open({\n                rejectOnCancel: false,\n                viewModel: DataProtectionDialog,\n                centerHorizontalOnly: true,\n                model,\n                lock: true,\n                overlayDismiss: false,\n            });\n        });\n    }\n    confirmDeletion(textTk) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const dialogPromise = yield this.dialogService.open({\n                rejectOnCancel: false,\n                viewModel: DeleteConfirmationDialog,\n                model: {\n                    textTk,\n                },\n                lock: false,\n                overlayDismiss: true,\n            });\n            if (dialogPromise.wasCancelled)\n                return false;\n            const closeResult = yield dialogPromise.closeResult;\n            return !closeResult.wasCancelled;\n        });\n    }\n    confirmAction(model) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const dialogPromise = yield this.dialogService.open({\n                rejectOnCancel: false,\n                viewModel: ConfirmationDialog,\n                model,\n                lock: false,\n                overlayDismiss: true,\n            });\n            if (dialogPromise.wasCancelled)\n                return false;\n            const closeResult = yield dialogPromise.closeResult;\n            return !closeResult.wasCancelled;\n        });\n    }\n    showChangeItemSizeDialog(model) {\n        return __awaiter(this, void 0, void 0, function* () {\n            return this.getResultOrNull(ChangeItemSizeDialog, model);\n        });\n    }\n    showCropImageDialog(model) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const transformedImageUrl = AppUtils.transformUfeImageUrlToAfeUrlIfNeeded(model.imageUrl);\n            return this.getResultOrNull(CropImageDialog, Object.assign(Object.assign({}, model), { imageUrl: transformedImageUrl }));\n        });\n    }\n    showCreateQuestionDialog(courseId) {\n        return __awaiter(this, void 0, void 0, function* () {\n            return this.getResultOrNull(CreateQuestionDialog, { courseId }, { centerHorizontalOnly: true });\n        });\n    }\n    showEditQuestionDialog(model) {\n        return __awaiter(this, void 0, void 0, function* () {\n            return this.getResultOrNull(EditQuestionDialog, model, { centerHorizontalOnly: true });\n        });\n    }\n    showAddQuestionDialog(model) {\n        return __awaiter(this, void 0, void 0, function* () {\n            return this.getResultOrNull(AddQuestionDialog, model, { centerHorizontalOnly: true });\n        });\n    }\n    showCopyQuestionDialog(model) {\n        return __awaiter(this, void 0, void 0, function* () {\n            return this.getResultOrNull(CopyQuestionDialog, model, { centerHorizontalOnly: true });\n        });\n    }\n    showEditTileDialog(tile, tileInfo) {\n        return __awaiter(this, void 0, void 0, function* () {\n            return this.getResultOrNull(EditTileDialog, { tile, tileInfo });\n        });\n    }\n    showDistinarStartConferenceDialog(startConferenceCallback) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const dialogResult = yield this.dialogService.open({\n                rejectOnCancel: false,\n                viewModel: DistinarStartConferenceDialog,\n                model: { startConferenceCallback },\n                lock: false,\n                overlayDismiss: false,\n            });\n            if (dialogResult.wasCancelled)\n                return { wasCancelled: true };\n            const closeResult = yield dialogResult.closeResult;\n            return { wasCancelled: closeResult.wasCancelled };\n        });\n    }\n    showLectureSettingsDialog(lecture) {\n        return __awaiter(this, void 0, void 0, function* () {\n            return this.getResultOrNull(LectureSettingsDialog, { value: lecture });\n        });\n    }\n    showQuizTemplateCreateDialog(availableCourses) {\n        return __awaiter(this, void 0, void 0, function* () {\n            return this.getResultOrNull(QuizTemplateCreateDialog, { availableCourses });\n        });\n    }\n    showContentEditorBlockEditorDialog(model) {\n        return __awaiter(this, void 0, void 0, function* () {\n            return this.getResultOrNull(ContentEditorBlockEditorDialog, model);\n        });\n    }\n    showChooseCsvTypeDialog() {\n        return __awaiter(this, void 0, void 0, function* () {\n            return this.getResultOrNull(ChooseCsvTypeDialog, null);\n        });\n    }\n    showChangeTenantDialog(availableTenants, getCourseGroupsDelegate) {\n        return __awaiter(this, void 0, void 0, function* () {\n            return this.getResultOrNull(ChangeTenantDialog, { availableTenants, getCourseGroupsDelegate });\n        });\n    }\n    showAddPresentationDialog() {\n        return __awaiter(this, void 0, void 0, function* () {\n            yield this.dialogService.open({\n                rejectOnCancel: false,\n                model: {},\n                viewModel: AddPresentationDialog,\n                lock: true,\n                overlayDismiss: false,\n            });\n        });\n    }\n    showTransferInvitationWarningDialog(model) {\n        return __awaiter(this, void 0, void 0, function* () {\n            return this.getResultOrNull(TransferInvitationWarningDialog, model, { centerHorizontalOnly: true });\n        });\n    }\n    showCourseSelectDialog() {\n        return __awaiter(this, void 0, void 0, function* () {\n            const availableCourses = yield this.tenantApi.getAvailableRegularCourses();\n            return this.getResultOrNull(CourseSelectDialog, { options: availableCourses });\n        });\n    }\n    showCourseLicenseDialog(config) {\n        return __awaiter(this, void 0, void 0, function* () {\n            return this.getResultOrNull(CourseLicenseDialog, config);\n        });\n    }\n    showEditPageDialog(model) {\n        return __awaiter(this, void 0, void 0, function* () {\n            return this.getResultOrNull(EditPageDialog, model);\n        });\n    }\n    showAddPageDialog(model) {\n        return __awaiter(this, void 0, void 0, function* () {\n            return this.getResultOrNull(AddPageDialog, model);\n        });\n    }\n    showCreateCourseGroupDialog(availableCourses) {\n        return __awaiter(this, void 0, void 0, function* () {\n            return this.getResultOrNull(CourseGroupDialog, { courseGroup: null, availableCourses });\n        });\n    }\n    showEditCourseGroupDialog(courseGroup) {\n        return __awaiter(this, void 0, void 0, function* () {\n            return this.getResultOrNull(CourseGroupDialog, { courseGroup, availableCourses: [] });\n        });\n    }\n    showAddInvitationToCourseGroupDialog(model) {\n        return __awaiter(this, void 0, void 0, function* () {\n            return this.getResultOrNull(AddInvitationToCourseGroupDialog, model, { centerHorizontalOnly: true });\n        });\n    }\n    showAddInvitationsToCourseGroupDialog(availableCourseGroups, selectedCourseGroupId) {\n        return __awaiter(this, void 0, void 0, function* () {\n            return this.getResultOrNull(AddInvitationsToCourseGroupDialog, { options: availableCourseGroups, selectedCourseGroupId });\n        });\n    }\n    showSendMessageToStudentsDialog(config) {\n        return __awaiter(this, void 0, void 0, function* () {\n            return this.getResultOrNull(SendMessageToStudentsDialog, config);\n        });\n    }\n    showStartQuickQuizDialog(availableCourses, attendees) {\n        return __awaiter(this, void 0, void 0, function* () {\n            return this.getResultOrNull(StartQuickQuizDialog, { availableCourses, attendees });\n        });\n    }\n    showStartTemplateQuizDialog() {\n        return __awaiter(this, void 0, void 0, function* () {\n            return this.getResultOrNull(StartTemplateQuizDialog, null);\n        });\n    }\n    showManageAttendanceIntervalsDialog(model) {\n        return __awaiter(this, void 0, void 0, function* () {\n            return this.getResultOrNull(ManageAttendanceIntervalsDialog, model);\n        });\n    }\n    showManageAttendanceDialog(user) {\n        return __awaiter(this, void 0, void 0, function* () {\n            return this.getResultOrNull(ManageAttendanceDialog, { user });\n        });\n    }\n    showQuizTemplateEditDialog(quizTemplate) {\n        return __awaiter(this, void 0, void 0, function* () {\n            return this.getResultOrNull(QuizTemplateEditDialog, { quizTemplate });\n        });\n    }\n    showPdfGeneratedDialog(config) {\n        return __awaiter(this, void 0, void 0, function* () {\n            return this.getResultOrNull(PdfGeneratedDialog, config);\n        });\n    }\n    showProviderMediaSelect(config) {\n        return __awaiter(this, void 0, void 0, function* () {\n            return this.getResultOrNull(ProviderMediaSelectDialog, config);\n        });\n    }\n    showMediaSelect(config) {\n        return __awaiter(this, void 0, void 0, function* () {\n            return this.getResultOrNull(MediaSelectDialog, config);\n        });\n    }\n    showMediaShare(config) {\n        return __awaiter(this, void 0, void 0, function* () {\n            return this.getResultOrNull(MediaShareDialog, config, { centerHorizontalOnly: true });\n        });\n    }\n    showMediaShareTableDialog(model) {\n        return __awaiter(this, void 0, void 0, function* () {\n            return this.getResultOrNull(MediaShareTableDialog, model, { centerHorizontalOnly: true });\n        });\n    }\n    showDistinarQrCodeDialog(model) {\n        return __awaiter(this, void 0, void 0, function* () {\n            yield this.getResultOrNull(ShowDistinarQrCodeDialog, model);\n        });\n    }\n    showStudentsDialog(model) {\n        return __awaiter(this, void 0, void 0, function* () {\n            return this.getResultOrNull(ShowStudentsDialog, model, { centerHorizontalOnly: true });\n        });\n    }\n    showEditStudentSkillDialog(model) {\n        return __awaiter(this, void 0, void 0, function* () {\n            return this.getResultOrNull(EditStudentSkillDialog, model, { centerHorizontalOnly: true });\n        });\n    }\n    showAssignSkillToStudentDialog() {\n        return __awaiter(this, void 0, void 0, function* () {\n            return this.getResultOrNull(AssignSkillToStudentDialog, {}, { centerHorizontalOnly: true });\n        });\n    }\n    showCreateLearningJourneyDialog() {\n        return __awaiter(this, void 0, void 0, function* () {\n            return this.getResultOrNull(CreateLearningJourneyDialog, {}, { centerHorizontalOnly: true });\n        });\n    }\n    showEditLearningJourneyCourseDialog(model) {\n        return __awaiter(this, void 0, void 0, function* () {\n            return this.getResultOrNull(EditLearningJourneyCourseDialog, model, { centerHorizontalOnly: true });\n        });\n    }\n    showAssignLearningJourneysToStudentsDialog(model) {\n        return __awaiter(this, void 0, void 0, function* () {\n            return this.getResultOrNull(AssignLearningJourneyToStudentDialog, model, { centerHorizontalOnly: true });\n        });\n    }\n    showAssignStudentsToLearningJourneysDialog(model) {\n        return __awaiter(this, void 0, void 0, function* () {\n            return this.getResultOrNull(AssignStudentsToLearningJourneysDialog, model, { centerHorizontalOnly: true });\n        });\n    }\n    showAssignLearningJourneysToCoursesDialog(model) {\n        return __awaiter(this, void 0, void 0, function* () {\n            return this.getResultOrNull(AssignLearningJourneyToCoursesDialog, model, { centerHorizontalOnly: true });\n        });\n    }\n    showAssignCoursesToLearningJourneysDialog(model) {\n        return __awaiter(this, void 0, void 0, function* () {\n            return this.getResultOrNull(AssignCoursesToLearningJourneyDialog, model, { centerHorizontalOnly: true });\n        });\n    }\n    showAssignStudentsToTenantsDialog(model) {\n        return __awaiter(this, void 0, void 0, function* () {\n            return this.getResultOrNull(AssignStudentsToTenantsDialog, model, { centerHorizontalOnly: true });\n        });\n    }\n    showAssignTenantsToStudentsDialog(model) {\n        return __awaiter(this, void 0, void 0, function* () {\n            return this.getResultOrNull(AssignTenantsToStudentsDialog, model, { centerHorizontalOnly: true });\n        });\n    }\n    showAssignSkillsToCoursesDialog(model) {\n        return __awaiter(this, void 0, void 0, function* () {\n            return this.getResultOrNull(AssignSkillsToCoursesDialog, model, { centerHorizontalOnly: true });\n        });\n    }\n    showAssignCoursesToTenantsDialog(model) {\n        return __awaiter(this, void 0, void 0, function* () {\n            return this.getResultOrNull(AssignCoursesToTenantsDialog, model, { centerHorizontalOnly: true });\n        });\n    }\n    showAssignTenantsToCoursesDialog(model) {\n        return __awaiter(this, void 0, void 0, function* () {\n            return this.getResultOrNull(AssignTenantsToCoursesDialog, model, { centerHorizontalOnly: true });\n        });\n    }\n    showAssignStudentsToCoursesDialog(model) {\n        return __awaiter(this, void 0, void 0, function* () {\n            return this.getResultOrNull(AssignStudentsToCoursesDialog, model, { centerHorizontalOnly: true });\n        });\n    }\n    showAssignCoursesToStudentsDialog(model) {\n        return __awaiter(this, void 0, void 0, function* () {\n            return this.getResultOrNull(AssignCoursesToStudentsDialog, model, { centerHorizontalOnly: true });\n        });\n    }\n    showCreateAssessmentDialog() {\n        return __awaiter(this, void 0, void 0, function* () {\n            return this.getResultOrNull(CreateAssessmentDialog, {}, { centerHorizontalOnly: true });\n        });\n    }\n    showCreateAssessmentCodesDialog(model) {\n        return __awaiter(this, void 0, void 0, function* () {\n            return this.getResultOrNull(CreateAssessmentCodesDialog, model, { centerHorizontalOnly: true });\n        });\n    }\n    showDownloadAssessmentCodesDialog() {\n        return __awaiter(this, void 0, void 0, function* () {\n            return this.getResultOrNull(DownloadAssessmentCodesDialog, {}, { centerHorizontalOnly: true });\n        });\n    }\n    showFromToDatesDialog() {\n        return __awaiter(this, void 0, void 0, function* () {\n            return this.getResultOrNull(FromToDatesDialog, {});\n        });\n    }\n    showAddBlocklistedNicknameDialog(model) {\n        return __awaiter(this, void 0, void 0, function* () {\n            yield this.dialogService.open({\n                rejectOnCancel: false,\n                model,\n                viewModel: AddBlocklistedNicknameDialog,\n                lock: true,\n                overlayDismiss: false,\n            });\n        });\n    }\n    showVideoPreview(video) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const model = { video };\n            yield this.dialogService.open({\n                rejectOnCancel: false,\n                model,\n                viewModel: VideoPreviewDialog,\n                lock: false,\n                overlayDismiss: true,\n                centerHorizontalOnly: true,\n            });\n        });\n    }\n    showScormPreview(scorm) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const model = { scorm };\n            yield this.dialogService.open({\n                rejectOnCancel: false,\n                model,\n                viewModel: ScormPreviewDialog,\n                lock: false,\n                overlayDismiss: true,\n                centerHorizontalOnly: true,\n            });\n        });\n    }\n    showAnnouncementEditDialog(config) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const updatedConfig = config;\n            try {\n                if (config.id != null) {\n                    updatedConfig.initialAudienceCount = yield this.announcementApiService.getAnnouncementAudienceCount(config.id);\n                }\n                else {\n                    const audience = { tenantIds: [], courseIds: [] };\n                    updatedConfig.initialAudienceCount = yield this.audienceApiService.getAudienceCount(audience);\n                    const now = new Date();\n                    updatedConfig.value = {\n                        title: '',\n                        text: '',\n                        visibleFrom: now.toISOString(),\n                        visibleTo: Moment(now).add(1, 'month').toDate().toISOString(),\n                    };\n                }\n            }\n            catch (e) {\n                LogUtils.exception(e);\n                throw e;\n            }\n            return this.getResultOrNull(EditAnnouncementDialog, updatedConfig, { centerHorizontalOnly: true, });\n        });\n    }\n    showCreateAvatarComponentSetDialog() {\n        return __awaiter(this, void 0, void 0, function* () {\n            return this.getResultOrNull(CreateAvatarComponentSetDialog, null);\n        });\n    }\n    showPicturePreview(picture) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const model = { picture };\n            yield this.dialogService.open({\n                rejectOnCancel: false,\n                model,\n                viewModel: PicturePreviewDialog,\n                lock: false,\n                overlayDismiss: true,\n                centerHorizontalOnly: true,\n            });\n        });\n    }\n    showQuestionPreview(question) {\n        return __awaiter(this, void 0, void 0, function* () {\n            yield this.dialogService.open({\n                rejectOnCancel: false,\n                model: {\n                    question,\n                    verticalDisplayMode: VerticalDisplayMode.Scroll,\n                },\n                viewModel: QuestionPreviewDialog,\n                lock: false,\n                overlayDismiss: true,\n                centerHorizontalOnly: true,\n            });\n        });\n    }\n    showEditBlockPreview(model) {\n        return __awaiter(this, void 0, void 0, function* () {\n            yield this.dialogService.open({\n                rejectOnCancel: false,\n                model,\n                viewModel: EditBlockPreviewDialog,\n                lock: false,\n                overlayDismiss: true,\n                centerHorizontalOnly: true,\n            });\n        });\n    }\n    showPointsExplanation(trainingQuestionsTotal, course, showGames) {\n        return __awaiter(this, void 0, void 0, function* () {\n            yield this.dialogService.open({\n                rejectOnCancel: false,\n                model: { trainingQuestionsTotal, course, showGames },\n                viewModel: PointsExplanationDialog,\n                lock: false,\n                overlayDismiss: true,\n                centerHorizontalOnly: true,\n            });\n        });\n    }\n    showStudentImportDialog(students) {\n        return __awaiter(this, void 0, void 0, function* () {\n            yield this.dialogService.open({\n                rejectOnCancel: false,\n                model: { students },\n                viewModel: StudentImportDialog,\n                lock: false,\n                overlayDismiss: true,\n                centerHorizontalOnly: true,\n            });\n        });\n    }\n    showChatLinkSearchDialog(userId, courseId = undefined) {\n        return __awaiter(this, void 0, void 0, function* () {\n            return this.getResultOrNull(ChatLinkSearchDialog, { userId, courseId });\n        });\n    }\n    showLayoutContainerPreviewDialog(config) {\n        return __awaiter(this, void 0, void 0, function* () {\n            yield this.getResultOrNull(LayoutContainerPreviewDialog, config, {\n                lock: false,\n                overlayDismiss: true,\n            });\n        });\n    }\n    showOperationStatusDialog(config) {\n        return __awaiter(this, void 0, void 0, function* () {\n            return this.getResultOrNull(OperationStatusDialog, config, {\n                lock: true,\n                overlayDismiss: false,\n            });\n        });\n    }\n    showSingleRatingDialog(config) {\n        return __awaiter(this, void 0, void 0, function* () {\n            return this.getResultOrNull(SingleRatingDialog, config);\n        });\n    }\n    showQuestionsImportDialog(config) {\n        return __awaiter(this, void 0, void 0, function* () {\n            return this.getResultOrNull(QuestionsImportDialog, config, {\n                lock: true,\n                overlayDismiss: false,\n            });\n        });\n    }\n    showBatchRenameMediaDialog(config) {\n        return __awaiter(this, void 0, void 0, function* () {\n            return this.getResultOrNull(BatchRenameMediaDialog, config, {\n                lock: true,\n                overlayDismiss: false,\n            });\n        });\n    }\n    showMediaLibraryUploadDialog() {\n        return __awaiter(this, void 0, void 0, function* () {\n            return this.getResultOrNull(MediaLibraryUploadDialog, {}, {\n                lock: true,\n                overlayDismiss: false,\n            });\n        });\n    }\n    getResultOrNull(viewModel, model, settings = {}) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const dialogPromise = yield this.dialogService.open(Object.assign({ rejectOnCancel: false, viewModel,\n                model, lock: true, overlayDismiss: false }, settings));\n            if (dialogPromise.wasCancelled) {\n                return null;\n            }\n            const closeResult = yield dialogPromise.closeResult;\n            if (closeResult.wasCancelled) {\n                return null;\n            }\n            return closeResult.output;\n        });\n    }\n};\nCustomDialogService = __decorate([\n    autoinject(),\n    __metadata(\"design:paramtypes\", [typeof (_a = typeof DialogService !== \"undefined\" && DialogService) === \"function\" ? _a : Object, typeof (_b = typeof TenantApiService !== \"undefined\" && TenantApiService) === \"function\" ? _b : Object, typeof (_c = typeof AnnouncementApiService !== \"undefined\" && AnnouncementApiService) === \"function\" ? _c : Object, typeof (_d = typeof AudienceApiService !== \"undefined\" && AudienceApiService) === \"function\" ? _d : Object])\n], CustomDialogService);\nexport { CustomDialogService };\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ3VzdG9tRGlhbG9nU2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9zZXJ2aWNlcy9DdXN0b21EaWFsb2dTZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBTyxFQUFFLGFBQWEsRUFBa0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUF5Qi9DLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVqRCxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzFDLE9BQU8sRUFBRSw0QkFBNEIsRUFBbUMsTUFBTSxzRkFBc0YsQ0FBQztBQUNySyxPQUFPLEVBQUUsZ0NBQWdDLEVBQTBDLE1BQU0sa0dBQWtHLENBQUM7QUFDNUwsT0FBTyxFQUFFLGlDQUFpQyxFQUEyQyxNQUFNLG9HQUFvRyxDQUFDO0FBQ2hNLE9BQU8sRUFBRSxhQUFhLEVBQXVCLE1BQU0sc0RBQXNELENBQUM7QUFDMUcsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sc0VBQXNFLENBQUM7QUFDN0csT0FBTyxFQUFFLGlCQUFpQixFQUEyQixNQUFNLDhEQUE4RCxDQUFDO0FBQzFILE9BQU8sRUFBRSxvQ0FBb0MsRUFBOEMsTUFBTSw0R0FBNEcsQ0FBQztBQUM5TSxPQUFPLEVBQUUsNkJBQTZCLEVBQXVDLE1BQU0sMEZBQTBGLENBQUM7QUFDOUssT0FBTyxFQUFFLDRCQUE0QixFQUFzQyxNQUFNLHdGQUF3RixDQUFDO0FBQzFLLE9BQU8sRUFBRSxvQ0FBb0MsRUFBK0MsTUFBTSw0R0FBNEcsQ0FBQztBQUMvTSxPQUFPLEVBQUUsb0NBQW9DLEVBQThDLE1BQU0sNEdBQTRHLENBQUM7QUFDOU0sT0FB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","import { STUDENT_MIN_AGE_IN_YEARS } from 'common/constants/auth.constants';\nimport dayjs from 'dayjs';\nimport Moment from 'moment';\n\nenum DateFormats {\n  DATE = 'DD.MM.YYYY',\n  DATE_TIME = 'DD.MM.YYYY HH:mm',\n  TIME = 'HH:mm'\n}\n\nexport class DateService {\n  public formatDate(date: Date | null | string): string {\n    return date ? dayjs(date).format(DateFormats.DATE) : '';\n  }\n\n  public formatDateTime(date: Date | null | string): string {\n    return date ? dayjs(date).format(DateFormats.DATE_TIME) : '';\n  }\n\n  public formatDateWithTimespan(startdatetime: Date | null | string, enddatetime: Date | null | string): string {\n    return (startdatetime ? dayjs(startdatetime).format(DateFormats.DATE_TIME) : '') +\n      (enddatetime ? ` - ${dayjs(enddatetime).format(DateFormats.TIME)}` : '');\n  }\n\n  public formatTime(date: Date | null | string): string {\n    return date ? dayjs(date).format(DateFormats.TIME) : '';\n  }\n\n  public formatDateForApiFilter(date: Date | null | string): string {\n    return date ? dayjs(date).startOf('day').toISOString() : '';\n  }\n\n  public parseDateTime(date: string): Date {\n    return dayjs(date, DateFormats.DATE_TIME).toDate();\n  }\n\n  public isInPast(date: Date | string): boolean {\n    return dayjs(date).isBefore(dayjs());\n  }\n\n  public getStartOfDayISOString(date?: Date | string): string {\n    return dayjs(date).startOf('day').toISOString();\n  }\n\n  public getEndOfDayISOString(date?: Date | string): string {\n    return dayjs(date).endOf('day').toISOString();\n  }\n\n  public getNowISOString(date?: Date | string): string {\n    return dayjs(date).toISOString();\n  }\n\n  public getDefaultBirthdayISOString(): string {\n    return Moment().subtract(STUDENT_MIN_AGE_IN_YEARS, 'years').toISOString();\n  }\n\n  public combineDateAndTime(date: string, time: string): string {\n    return Moment(date)\n      .set(\n        {\n          'hour': Moment(time).get('hour'),\n          'minute': Moment(time).get('minute'),\n          'millisecond': Moment(time).get('millisecond'),\n        }\n      ).toISOString();\n  }\n\n  public isSameDay(dateA: Date | null, dateB: Date | null): boolean {\n    return Moment(dateA).isSame(dateB, 'day');\n  }\n\n  public roundToNearestMinutesISOString(minuteFactor: number): string {\n    const minutes = Moment().minute();\n    const nearestFive = minuteFactor * Math.floor(minutes / minuteFactor);\n    return Moment().minute(nearestFive).toISOString();\n  }\n}\n"],"names":[],"sourceRoot":""}