@versatiledatakit/data-pipelines
Version:
Data Pipelines help Data Engineers develop, deploy, run, and manage data processing workloads (called 'Data Job')
1,169 lines (1,141 loc) • 866 kB
JavaScript
import * as i0 from '@angular/core';
import { Directive, Input, Pipe, LOCALE_ID, Inject, InjectionToken, EventEmitter, Output, Component, ChangeDetectionStrategy, ViewEncapsulation, Injectable, HostBinding, ViewChild, HostListener, NgModule } from '@angular/core';
import * as i4 from '@angular/common';
import { PercentPipe, DOCUMENT, DatePipe, CommonModule } from '@angular/common';
import * as i2$2 from '@angular/router';
import { RouterModule } from '@angular/router';
import * as i4$1 from '@angular/forms';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import * as i10 from '@yellowspot/ng-truncate';
import { TruncateModule } from '@yellowspot/ng-truncate';
import * as i3$2 from '@swimlane/ngx-charts';
import { NgxChartsModule } from '@swimlane/ngx-charts';
import * as i3 from 'ngx-timeago';
import { TimeagoModule } from 'ngx-timeago';
import * as i3$1 from 'ngx-lottie';
import { LottieModule } from 'ngx-lottie';
import * as i4$2 from 'ng2-date-picker';
import { DpDatePickerModule } from 'ng2-date-picker';
import * as i6 from '@clr/angular';
import { ClrLoadingState, ClrDatagridSortOrder, ClarityModule } from '@clr/angular';
import * as i1 from '@versatiledatakit/shared';
import { TaurusObject, CollectionsUtil, VmwToastType, TaurusBaseApiService, TaurusBaseEffects, getModel, getModelAndTask, ComponentLoaded, ComponentFailed, processServiceRequestError, LOADED, ComponentUpdate, extractTaskFromIdentifier, generateErrorCode, TaurusBaseComponent, URLStateManager, DESC, ASC, VdkFormState, FORM_STATE, AndCriteria, VdkSharedComponentsModule, VdkSharedFeaturesModule, VdkSharedNgRxModule } from '@versatiledatakit/shared';
import cronstrue from 'cronstrue';
import * as parser from 'cron-parser';
import { Subject, expand, EMPTY, throwError, BehaviorSubject, merge, of, interval, timer, concatMap } from 'rxjs';
import { gql, InMemoryCache, ApolloError } from '@apollo/client/core';
import * as i1$1 from 'apollo-angular';
import * as i2 from 'apollo-angular/http';
import { map, catchError, switchMap, tap, take, distinctUntilChanged, debounceTime, finalize, takeUntil, filter, takeWhile, delay } from 'rxjs/operators';
import * as i2$1 from '@angular/common/http';
import { HttpHeaders, HttpErrorResponse } from '@angular/common/http';
import * as i1$2 from '@ngrx/effects';
import { createEffect, ofType } from '@ngrx/effects';
import * as fileSaver from 'file-saver';
import { get } from 'lodash';
import moment from 'moment';
import { Chart, registerables } from 'chart.js';
import ChartDataLabels from 'chartjs-plugin-datalabels';
import zoomPlugin from 'chartjs-plugin-zoom';
import 'chartjs-adapter-date-fns';
/*
* Copyright 2023-2025 Broadcom
* SPDX-License-Identifier: Apache-2.0
*/
/**
* ** Directive that set provided object as Element attributes.
*
* @author gorankokin
*/
class AttributesDirective extends TaurusObject {
/**
* ** Constructor.
*/
constructor(el, renderer) {
super();
this.el = el;
this.renderer = renderer;
}
/**
* @inheritDoc
*/
ngOnChanges(_changes) {
this._transformAttributes();
}
/**
* @inheritDoc
*/
ngOnInit() {
this._transformAttributes();
}
_transformAttributes() {
if (CollectionsUtil.isEqual(this.attributes, this._attributesCopy)) {
return;
}
if (CollectionsUtil.isNil(this.attributes)) {
if (CollectionsUtil.isNil(this._attributesCopy)) {
return;
}
CollectionsUtil.iterateObject(this._attributesCopy, (_attributeValue, attributeName) => {
this._removeAttribute(attributeName);
});
return;
}
if (!CollectionsUtil.isLiteralObject(this.attributes)) {
return;
}
this._attributesCopy = CollectionsUtil.cloneDeep(this.attributes);
CollectionsUtil.iterateObject(this._attributesCopy, (attributeValue, attributeName) => {
this._setOrRemoveAttribute(attributeName, attributeValue);
});
}
_setOrRemoveAttribute(attributeName, attributeValue) {
if (AttributesDirective._isTruthy(attributeValue)) {
this._setAttribute(attributeName, attributeValue);
}
else {
this._removeAttribute(attributeName);
}
}
_setAttribute(attributeName, attributeValue) {
this.renderer.setAttribute(this.el.nativeElement, attributeName, attributeValue);
}
_removeAttribute(attributeName) {
this.renderer.removeAttribute(this.el.nativeElement, attributeName);
}
// eslint-disable-next-line @typescript-eslint/member-ordering,@typescript-eslint/no-explicit-any
static _isTruthy(value) {
return AttributesDirective._valueNotIn(value, [undefined, false, null, 'delete', 'false', '']);
}
// eslint-disable-next-line @typescript-eslint/member-ordering,@typescript-eslint/no-explicit-any
static _valueNotIn(value, forbiddenValues) {
return forbiddenValues.every((prop) => value !== prop);
}
}
AttributesDirective.ɵfac = function AttributesDirective_Factory(t) { return new (t || AttributesDirective)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i0.Renderer2)); };
AttributesDirective.ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: AttributesDirective, selectors: [["", "libSetAttributes", ""]], inputs: { attributes: "attributes" }, features: [i0.ɵɵInheritDefinitionFeature, i0.ɵɵNgOnChangesFeature] });
(function () {
(typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AttributesDirective, [{
type: Directive,
args: [{
selector: '[libSetAttributes]'
}]
}], function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }]; }, { attributes: [{
type: Input
}] });
})();
/*
* Copyright 2023-2025 Broadcom
* SPDX-License-Identifier: Apache-2.0
*/
/*
* Copyright 2023-2025 Broadcom
* SPDX-License-Identifier: Apache-2.0
*/
class ContactsPresentPipe {
/**
* @inheritDoc
*/
transform(contacts) {
return (CollectionsUtil.isDefined(contacts) &&
(ContactsPresentPipe.contactIsPresent(contacts.notifiedOnJobSuccess) ||
ContactsPresentPipe.contactIsPresent(contacts.notifiedOnJobDeploy) ||
ContactsPresentPipe.contactIsPresent(contacts.notifiedOnJobFailureUserError) ||
ContactsPresentPipe.contactIsPresent(contacts.notifiedOnJobFailurePlatformError)));
}
// eslint-disable-next-line @typescript-eslint/member-ordering
static contactIsPresent(contacts) {
return CollectionsUtil.isArray(contacts) && contacts.length > 0;
}
}
ContactsPresentPipe.ɵfac = function ContactsPresentPipe_Factory(t) { return new (t || ContactsPresentPipe)(); };
ContactsPresentPipe.ɵpipe = /*@__PURE__*/ i0.ɵɵdefinePipe({ name: "contactsPresent", type: ContactsPresentPipe, pure: true });
(function () {
(typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ContactsPresentPipe, [{
type: Pipe,
args: [{
name: 'contactsPresent'
}]
}], null, null);
})();
/*
* Copyright 2023-2025 Broadcom
* SPDX-License-Identifier: Apache-2.0
*/
class ExecutionSuccessRatePipe {
/**
* ** Constructor.
*/
constructor(localeId) {
this.localeId = localeId;
this._percentPipe = new PercentPipe(localeId);
}
/**
* @inheritDoc
*/
transform(deployments) {
let result = '';
if (CollectionsUtil.isArrayEmpty(deployments)) {
return result;
}
const firstDeployment = deployments[0];
const allExecutions = firstDeployment.successfulExecutions + firstDeployment.failedExecutions;
if (allExecutions === 0) {
return result;
}
result += this._percentPipe.transform(firstDeployment.successfulExecutions / allExecutions, '1.2-2');
if (firstDeployment.failedExecutions > 0) {
result += ` (${firstDeployment.failedExecutions} failed)`;
}
return result;
}
}
ExecutionSuccessRatePipe.ɵfac = function ExecutionSuccessRatePipe_Factory(t) { return new (t || ExecutionSuccessRatePipe)(i0.ɵɵdirectiveInject(LOCALE_ID, 16)); };
ExecutionSuccessRatePipe.ɵpipe = /*@__PURE__*/ i0.ɵɵdefinePipe({ name: "executionSuccessRate", type: ExecutionSuccessRatePipe, pure: true });
(function () {
(typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ExecutionSuccessRatePipe, [{
type: Pipe,
args: [{
name: 'executionSuccessRate'
}]
}], function () {
return [{ type: undefined, decorators: [{
type: Inject,
args: [LOCALE_ID]
}] }];
}, null);
})();
/*
* Copyright 2023-2025 Broadcom
* SPDX-License-Identifier: Apache-2.0
*/
const MISSING_DEFAULT_TEAM_MESSAGE = 'The defaultOwnerTeamName property need to be set for the DATA_PIPELINES_CONFIGS';
const RESERVED_DEFAULT_TEAM_NAME_MESSAGE = `The 'default' value is reserved, and can not be used for defaultOwnerTeamName property`;
/*
* Copyright 2023-2025 Broadcom
* SPDX-License-Identifier: Apache-2.0
*/
/**
* ** Injection Token for Data pipelines config.
*/
const DATA_PIPELINES_CONFIGS = new InjectionToken('DataPipelinesConfig');
/**
* ** DateTime format pattern provided to Angular DateTime directives/pipes, etc...
*/
const DATA_PIPELINES_DATE_TIME_FORMAT = 'MMM d, y, hh:mm:ss a';
/**
* ** Team name constant used as key identifier in {@link ComponentState.requestParams}.
*/
const TEAM_NAME_REQ_PARAM = 'team-name-req-param';
/**
* ** Data Job name constant used as key identifier in {@link ComponentState.requestParams}.
*/
const JOB_NAME_REQ_PARAM = 'job-name-req-param';
/**
* ** Data Job deployment ID constant used as key identifier in {@link ComponentState.requestParams}.
*/
const JOB_DEPLOYMENT_ID_REQ_PARAM = 'job-deployment-id-req-param';
/**
* ** Data Job status constant used as key identifier in {@link ComponentState.requestParams}.
*/
const JOB_STATUS_REQ_PARAM = 'job-status-req-param';
/**
* ** Filter constant used as key identifier in {@link ComponentState.requestParams}.
*/
const FILTER_REQ_PARAM = 'filter-req-param';
/**
* ** Order constant used as key identifier in {@link ComponentState.requestParams}.
*/
const ORDER_REQ_PARAM = 'order-req-param';
/**
* ** Data Job details constant used as key identifier in {@link ComponentState.requestParams}.
*/
const JOB_DETAILS_REQ_PARAM = 'job-details-req-param';
/**
* ** Data Job state constant used as key identifier in {@link ComponentState.requestParams}.
*/
const JOB_STATE_REQ_PARAM = 'job-state-req-param';
/**
* ** Data Job state constant used as key identifier in {@link ComponentState.data}
*/
const JOB_STATE_DATA_KEY = 'job-state-data-key';
/**
* ** Data Jobs states constant used as key identifier in {@link ComponentState.data}
*/
const JOBS_DATA_KEY = 'jobs-data-key';
/**
* ** Data Job details constant used as key identifier in {@link ComponentState.data}
*/
const JOB_DETAILS_DATA_KEY = 'job-details-data-key';
/**
* ** Data Job Executions constant used as key identifier in {@link ComponentState.data}
*/
const JOB_EXECUTIONS_DATA_KEY = 'job-executions-data-key';
/*
* Copyright 2023-2025 Broadcom
* SPDX-License-Identifier: Apache-2.0
*/
var DataJobDeploymentStatus;
(function (DataJobDeploymentStatus) {
DataJobDeploymentStatus["NONE"] = "NONE";
DataJobDeploymentStatus["SUCCESS"] = "SUCCESS";
DataJobDeploymentStatus["PLATFORM_ERROR"] = "PLATFORM_ERROR";
DataJobDeploymentStatus["USER_ERROR"] = "USER_ERROR";
})(DataJobDeploymentStatus || (DataJobDeploymentStatus = {}));
var DataJobExecutionType;
(function (DataJobExecutionType) {
DataJobExecutionType["MANUAL"] = "MANUAL";
DataJobExecutionType["SCHEDULED"] = "SCHEDULED";
})(DataJobExecutionType || (DataJobExecutionType = {}));
/**
* ** Execution Status.
*/
var DataJobExecutionStatus;
(function (DataJobExecutionStatus) {
DataJobExecutionStatus["SUBMITTED"] = "SUBMITTED";
DataJobExecutionStatus["RUNNING"] = "RUNNING";
DataJobExecutionStatus["FINISHED"] = "FINISHED";
DataJobExecutionStatus["SUCCEEDED"] = "SUCCEEDED";
DataJobExecutionStatus["CANCELLED"] = "CANCELLED";
DataJobExecutionStatus["SKIPPED"] = "SKIPPED";
DataJobExecutionStatus["FAILED"] = "FAILED";
DataJobExecutionStatus["USER_ERROR"] = "USER_ERROR";
DataJobExecutionStatus["PLATFORM_ERROR"] = "PLATFORM_ERROR";
})(DataJobExecutionStatus || (DataJobExecutionStatus = {}));
/*
* Copyright 2023-2025 Broadcom
* SPDX-License-Identifier: Apache-2.0
*/
var DataJobStatus;
(function (DataJobStatus) {
DataJobStatus["ENABLED"] = "Enabled";
DataJobStatus["DISABLED"] = "Disabled";
DataJobStatus["NOT_DEPLOYED"] = "Not Deployed";
})(DataJobStatus || (DataJobStatus = {}));
/*
* Copyright 2023-2025 Broadcom
* SPDX-License-Identifier: Apache-2.0
*/
/**
* ** Execution status.
*
* @deprecated
*/
// eslint-disable-next-line no-shadow
var DataJobExecutionStatusDeprecated;
(function (DataJobExecutionStatusDeprecated) {
DataJobExecutionStatusDeprecated["SUBMITTED"] = "submitted";
DataJobExecutionStatusDeprecated["RUNNING"] = "running";
DataJobExecutionStatusDeprecated["FINISHED"] = "finished";
DataJobExecutionStatusDeprecated["SUCCEEDED"] = "succeeded";
DataJobExecutionStatusDeprecated["CANCELLED"] = "cancelled";
DataJobExecutionStatusDeprecated["SKIPPED"] = "skipped";
DataJobExecutionStatusDeprecated["FAILED"] = "failed";
DataJobExecutionStatusDeprecated["USER_ERROR"] = "user_error";
DataJobExecutionStatusDeprecated["PLATFORM_ERROR"] = "platform_error";
})(DataJobExecutionStatusDeprecated || (DataJobExecutionStatusDeprecated = {}));
/*
* Copyright 2023-2025 Broadcom
* SPDX-License-Identifier: Apache-2.0
*/
var DisplayMode;
(function (DisplayMode) {
/* eslint-disable-next-line @typescript-eslint/naming-convention */
DisplayMode["COMPACT"] = "compact";
/* eslint-disable-next-line @typescript-eslint/naming-convention */
DisplayMode["STANDARD"] = "standard";
})(DisplayMode || (DisplayMode = {}));
/*
* Copyright 2023-2025 Broadcom
* SPDX-License-Identifier: Apache-2.0
*/
class ToastDefinitions {
static successfullyRanJob(jobName) {
return {
type: VmwToastType.INFO,
title: `Data job Queued for execution`,
description: `Data job "${jobName}" successfully queued for execution.`
};
}
}
/*
* Copyright 2023-2025 Broadcom
* SPDX-License-Identifier: Apache-2.0
*/
/*
* Copyright 2023-2025 Broadcom
* SPDX-License-Identifier: Apache-2.0
*/
class ExtractJobStatusPipe {
/**
* ** Extract Job Status from Details.
*
* - This method should be equal to instance method.
* - Methods: {@link ExtractJobStatusPipe.transform}
*/
static transform(jobDeployments) {
if (!(jobDeployments === null || jobDeployments === void 0 ? void 0 : jobDeployments.length)) {
return DataJobStatus.NOT_DEPLOYED;
}
if (jobDeployments[jobDeployments.length - 1].enabled) {
return DataJobStatus.ENABLED;
}
return DataJobStatus.DISABLED;
}
/**
* @inheritDoc
*
* - This method should be equal to instance method.
* - Methods: {@link ExtractJobStatusPipe.transform}
*/
transform(jobDeployments) {
return ExtractJobStatusPipe.transform(jobDeployments);
}
}
ExtractJobStatusPipe.ɵfac = function ExtractJobStatusPipe_Factory(t) { return new (t || ExtractJobStatusPipe)(); };
ExtractJobStatusPipe.ɵpipe = /*@__PURE__*/ i0.ɵɵdefinePipe({ name: "extractJobStatus", type: ExtractJobStatusPipe, pure: false });
(function () {
(typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ExtractJobStatusPipe, [{
type: Pipe,
args: [{
name: 'extractJobStatus',
pure: false
}]
}], null, null);
})();
/*
* Copyright 2023-2025 Broadcom
* SPDX-License-Identifier: Apache-2.0
*/
/**
* Format Delta Pipe formats the delta of the execution start and end Time.
* The format is dynamic and contains generaly the last two leading fragment of the duration.
*
* For example:
*
* 1: If the duration is less than 1 min, the format is `${seconds}s`
*
* 2: If the duration is between 1 min and 59 mins, the format is `${minutes}m ${seconds}s`
*
* 3: If the duration is between 1 hour and 1 day, the format is `${hours}h ${minutes}m`
*
* 4: If the duration is more than 1 day, the format is `${days}d ${hours}h`
*/
class FormatDeltaPipe {
static formatDelta(delta) {
if (delta < 0) {
return 'N/A';
}
else if (delta < 60) {
return `${Math.ceil(delta)}s`;
}
else if (delta < 3600) {
const minute = Math.floor((delta / 60) % 60);
const seconds = Math.floor(delta % 60);
return `${minute}m ${seconds}s`;
}
else if (delta < 86400) {
const hours = Math.floor((delta / (60 * 60)) % 24);
const minutes = Math.floor((delta / 60) % 60);
return `${hours}h ${minutes}m`;
}
else {
const days = Math.floor(delta / (60 * 60 * 24));
const hours = Math.floor((delta / (60 * 60)) % 24);
return `${days}d ${hours}h`;
}
}
/**
* @inheritDoc
*/
transform(execution) {
if (CollectionsUtil.isNil(execution.startTime)) {
return '';
}
const delta = (FormatDeltaPipe._getEndTime(execution) - FormatDeltaPipe._getStartTime(execution)) / 1000;
return FormatDeltaPipe.formatDelta(delta);
}
// eslint-disable-next-line @typescript-eslint/member-ordering
static _getStartTime(execution) {
if (CollectionsUtil.isDefined(execution.startTime)) {
return new Date(execution.startTime).getTime();
}
return Date.now();
}
// eslint-disable-next-line @typescript-eslint/member-ordering
static _getEndTime(execution) {
if (CollectionsUtil.isDefined(execution.endTime)) {
return new Date(execution.endTime).getTime();
}
return Date.now();
}
}
FormatDeltaPipe.ɵfac = function FormatDeltaPipe_Factory(t) { return new (t || FormatDeltaPipe)(); };
FormatDeltaPipe.ɵpipe = /*@__PURE__*/ i0.ɵɵdefinePipe({ name: "formatDelta", type: FormatDeltaPipe, pure: true });
(function () {
(typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(FormatDeltaPipe, [{
type: Pipe,
args: [{
name: 'formatDelta'
}]
}], null, null);
})();
/*
* Copyright 2023-2025 Broadcom
* SPDX-License-Identifier: Apache-2.0
*/
class FormatSchedulePipe {
static _fallbackTransformNonStandardCron(cron) {
const match = `${cron}`.trim().match(/^@hourly|@daily|@midnight|@weekly|@monthly|@yearly|@annually$/);
if (CollectionsUtil.isNil(match)) {
throw new Error('Cron expression cannot be null or undefined.');
}
switch (match.input) {
case '@hourly':
return 'Run once an hour at the beginning of the hour';
case '@daily':
case '@midnight':
return 'Run once a day at midnight';
case '@weekly':
return 'Run once a week at midnight on Sunday morning';
case '@monthly':
return 'Run once a month at midnight of the first day of the month';
case '@yearly':
case '@annually':
return 'Run once a year at midnight of 1 January';
default:
throw new Error('Cron expression is NOT nonstandard predefined scheduling definition.');
}
}
/**
* @inheritDoc
*
* - Cron schedule default format from kubernetes https://kubernetes.io/docs/concepts/workloads/controllers/cron-jobs/
* - Time in UTC
*/
transform(cronSchedule, defaultResult) {
try {
const defaultValue = defaultResult !== null && defaultResult !== void 0 ? defaultResult : '';
if (!cronSchedule) {
return defaultValue;
}
//TODO : https://github.com/bradymholt/cRonstrue/issues/94
// cronstrue doesn't support timezones. Need to use another library
return cronstrue.toString(cronSchedule, {
monthStartIndexZero: false,
dayOfWeekStartIndexZero: true
});
}
catch (e) {
try {
return FormatSchedulePipe._fallbackTransformNonStandardCron(cronSchedule);
}
catch (_e) {
console.error(`Parsing error. Cron expression "${cronSchedule}"`);
return `Invalid Cron expression "${cronSchedule}"`;
}
}
}
}
FormatSchedulePipe.ɵfac = function FormatSchedulePipe_Factory(t) { return new (t || FormatSchedulePipe)(); };
FormatSchedulePipe.ɵpipe = /*@__PURE__*/ i0.ɵɵdefinePipe({ name: "formatSchedule", type: FormatSchedulePipe, pure: true });
(function () {
(typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(FormatSchedulePipe, [{
type: Pipe,
args: [{
name: 'formatSchedule'
}]
}], null, null);
})();
/*
* Copyright 2023-2025 Broadcom
* SPDX-License-Identifier: Apache-2.0
*/
class ParseEpochPipe {
/**
* ** Transform to Epoch time.
*
* - This method should be equal to instance method.
* - Methods: {@link ParseEpochPipe.transform}
*/
static transform(nextRunEpochSeconds) {
if (nextRunEpochSeconds < 0) {
return null;
}
return new Date(nextRunEpochSeconds * 1000);
}
/**
* @inheritDoc
*
* - This method should be equal to instance method.
* - Methods: {@link ParseEpochPipe.transform}
*/
transform(nextRunEpochSeconds) {
return ParseEpochPipe.transform(nextRunEpochSeconds);
}
}
ParseEpochPipe.ɵfac = function ParseEpochPipe_Factory(t) { return new (t || ParseEpochPipe)(); };
ParseEpochPipe.ɵpipe = /*@__PURE__*/ i0.ɵɵdefinePipe({ name: "parseEpoch", type: ParseEpochPipe, pure: true });
(function () {
(typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ParseEpochPipe, [{
type: Pipe,
args: [{
name: 'parseEpoch'
}]
}], null, null);
})();
/*
* Copyright 2023-2025 Broadcom
* SPDX-License-Identifier: Apache-2.0
*/
class ParseNextRunPipe {
/**
* @inheritDoc
*/
transform(cron, nextExecution) {
if (!cron) {
return null;
}
if (!nextExecution) {
nextExecution = 1;
}
let result;
try {
const parsedDate = parser.parseExpression(cron, { utc: true });
for (let i = 0; i < nextExecution; i++) {
result = parsedDate.next().toDate();
}
}
catch (e) {
result = null;
console.error('Error parsing next run', e);
}
return result;
}
}
ParseNextRunPipe.ɵfac = function ParseNextRunPipe_Factory(t) { return new (t || ParseNextRunPipe)(); };
ParseNextRunPipe.ɵpipe = /*@__PURE__*/ i0.ɵɵdefinePipe({ name: "parseNextRun", type: ParseNextRunPipe, pure: true });
(function () {
(typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ParseNextRunPipe, [{
type: Pipe,
args: [{
name: 'parseNextRun'
}]
}], null, null);
})();
/*
* Copyright 2023-2025 Broadcom
* SPDX-License-Identifier: Apache-2.0
*/
class ExtractContactsPipe {
static transform(contacts) {
if (Array.isArray(contacts) && contacts.length) {
return contacts;
}
else {
return [];
}
}
transform(contacts) {
return ExtractContactsPipe.transform(contacts);
}
}
ExtractContactsPipe.ɵfac = function ExtractContactsPipe_Factory(t) { return new (t || ExtractContactsPipe)(); };
ExtractContactsPipe.ɵpipe = /*@__PURE__*/ i0.ɵɵdefinePipe({ name: "extractContacts", type: ExtractContactsPipe, pure: true });
(function () {
(typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ExtractContactsPipe, [{
type: Pipe,
args: [{
name: 'extractContacts'
}]
}], null, null);
})();
/*
* Copyright 2023-2025 Broadcom
* SPDX-License-Identifier: Apache-2.0
*/
/*
* Copyright 2023-2025 Broadcom
* SPDX-License-Identifier: Apache-2.0
*/
class DeleteModalOptions {
constructor() {
this.opened = false;
this.title = 'Delete';
this.message = 'Are you sure you want to permanently delete this item?';
this.cancelBtn = 'Cancel';
this.showCancelBtn = true;
this.okBtn = 'Delete';
this.showOkBtn = true;
this.showCloseX = true;
}
}
class EditModalOptions {
constructor() {
this.opened = false;
this.title = 'Edit';
this.message = '';
this.cancelBtn = 'Cancel';
this.showCancelBtn = true;
this.okBtn = 'Edit';
this.showOkBtn = true;
this.showCloseX = true;
}
}
class ConfirmationModalOptions {
constructor() {
this.opened = false;
this.title = 'Confirm';
this.message = 'Are you sure?';
this.cancelBtn = 'Cancel';
this.showCancelBtn = true;
this.okBtn = 'Confirm';
this.showOkBtn = true;
this.showCloseX = true;
}
}
/*
* Copyright 2023-2025 Broadcom
* SPDX-License-Identifier: Apache-2.0
*/
class ModalComponentDirective extends TaurusObject {
constructor() {
super();
this.optionsChange = new EventEmitter();
this.cancelAction = new EventEmitter();
}
confirm() {
this.close();
}
/**
* close the modal
*/
close() {
if (!this._isNull(this.options)) {
this.options.opened = false;
this.optionsChange.emit(this.options);
}
}
cancel() {
this.cancelAction.emit();
this.close();
}
_isNull(value) {
return value === null || value === undefined;
}
}
ModalComponentDirective.ɵfac = function ModalComponentDirective_Factory(t) { return new (t || ModalComponentDirective)(); };
ModalComponentDirective.ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: ModalComponentDirective, inputs: { options: "options" }, outputs: { optionsChange: "optionsChange", cancelAction: "cancelAction" }, features: [i0.ɵɵInheritDefinitionFeature] });
(function () {
(typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ModalComponentDirective, [{
type: Directive
}], function () { return []; }, { options: [{
type: Input
}], optionsChange: [{
type: Output
}], cancelAction: [{
type: Output
}] });
})();
/*
* Copyright 2023-2025 Broadcom
* SPDX-License-Identifier: Apache-2.0
*/
function ConfirmationDialogModalComponent_clr_modal_0_clr_alert_5_Template(rf, ctx) {
if (rf & 1) {
i0.ɵɵelementStart(0, "clr-alert", 9)(1, "clr-alert-item");
i0.ɵɵelement(2, "span", 10);
i0.ɵɵelementEnd()();
}
if (rf & 2) {
const ctx_r1 = i0.ɵɵnextContext(2);
i0.ɵɵproperty("clrAlertType", "info")("clrAlertClosable", false);
i0.ɵɵadvance(2);
i0.ɵɵproperty("innerHTML", ctx_r1.options.infoText, i0.ɵɵsanitizeHtml);
}
}
function ConfirmationDialogModalComponent_clr_modal_0_button_7_Template(rf, ctx) {
if (rf & 1) {
const _r5 = i0.ɵɵgetCurrentView();
i0.ɵɵelementStart(0, "button", 11);
i0.ɵɵlistener("click", function ConfirmationDialogModalComponent_clr_modal_0_button_7_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r5); const ctx_r4 = i0.ɵɵnextContext(2); return ctx_r4.cancel(); });
i0.ɵɵtext(1);
i0.ɵɵelementEnd();
}
if (rf & 2) {
const ctx_r2 = i0.ɵɵnextContext(2);
i0.ɵɵadvance(1);
i0.ɵɵtextInterpolate1(" ", ctx_r2.options.cancelBtn, " ");
}
}
function ConfirmationDialogModalComponent_clr_modal_0_button_8_Template(rf, ctx) {
if (rf & 1) {
const _r7 = i0.ɵɵgetCurrentView();
i0.ɵɵelementStart(0, "button", 12);
i0.ɵɵlistener("click", function ConfirmationDialogModalComponent_clr_modal_0_button_8_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r7); const ctx_r6 = i0.ɵɵnextContext(2); return ctx_r6.confirm(); });
i0.ɵɵtext(1);
i0.ɵɵelementEnd();
}
if (rf & 2) {
const ctx_r3 = i0.ɵɵnextContext(2);
i0.ɵɵadvance(1);
i0.ɵɵtextInterpolate1(" ", ctx_r3.options.okBtn, " ");
}
}
function ConfirmationDialogModalComponent_clr_modal_0_Template(rf, ctx) {
if (rf & 1) {
const _r9 = i0.ɵɵgetCurrentView();
i0.ɵɵelementStart(0, "clr-modal", 1);
i0.ɵɵlistener("clrModalOpenChange", function ConfirmationDialogModalComponent_clr_modal_0_Template_clr_modal_clrModalOpenChange_0_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r8 = i0.ɵɵnextContext(); return ctx_r8.options.opened = $event; })("keyup.enter", function ConfirmationDialogModalComponent_clr_modal_0_Template_clr_modal_keyup_enter_0_listener() { i0.ɵɵrestoreView(_r9); const ctx_r10 = i0.ɵɵnextContext(); return ctx_r10.confirm(); });
i0.ɵɵelementStart(1, "h3", 2);
i0.ɵɵtext(2);
i0.ɵɵelementEnd();
i0.ɵɵelementStart(3, "div", 3);
i0.ɵɵelement(4, "p", 4);
i0.ɵɵtemplate(5, ConfirmationDialogModalComponent_clr_modal_0_clr_alert_5_Template, 3, 3, "clr-alert", 5);
i0.ɵɵelementEnd();
i0.ɵɵelementStart(6, "div", 6);
i0.ɵɵtemplate(7, ConfirmationDialogModalComponent_clr_modal_0_button_7_Template, 2, 1, "button", 7);
i0.ɵɵtemplate(8, ConfirmationDialogModalComponent_clr_modal_0_button_8_Template, 2, 1, "button", 8);
i0.ɵɵelementEnd()();
}
if (rf & 2) {
const ctx_r0 = i0.ɵɵnextContext();
i0.ɵɵproperty("clrModalOpen", ctx_r0.options.opened)("clrModalClosable", ctx_r0.options.showCloseX);
i0.ɵɵadvance(2);
i0.ɵɵtextInterpolate(ctx_r0.options.title);
i0.ɵɵadvance(2);
i0.ɵɵproperty("innerHTML", ctx_r0.options.message, i0.ɵɵsanitizeHtml);
i0.ɵɵadvance(1);
i0.ɵɵproperty("ngIf", ctx_r0.options.infoText);
i0.ɵɵadvance(2);
i0.ɵɵproperty("ngIf", ctx_r0.options.showCancelBtn);
i0.ɵɵadvance(1);
i0.ɵɵproperty("ngIf", ctx_r0.options.showOkBtn);
}
}
class ConfirmationDialogModalComponent extends ModalComponentDirective {
constructor() {
super();
this.changeStatus = new EventEmitter();
this.options = new ConfirmationModalOptions();
}
confirm() {
super.confirm();
this.changeStatus.emit();
}
}
ConfirmationDialogModalComponent.ɵfac = function ConfirmationDialogModalComponent_Factory(t) { return new (t || ConfirmationDialogModalComponent)(); };
ConfirmationDialogModalComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ConfirmationDialogModalComponent, selectors: [["lib-confirmation-dialog-modal"]], inputs: { confirmationInput: "confirmationInput" }, outputs: { changeStatus: "changeStatus" }, features: [i0.ɵɵInheritDefinitionFeature], decls: 1, vars: 1, consts: [["class", "schema-confirm-to-prod", 3, "clrModalOpen", "clrModalClosable", "clrModalOpenChange", "keyup.enter", 4, "ngIf"], [1, "schema-confirm-to-prod", 3, "clrModalOpen", "clrModalClosable", "clrModalOpenChange", "keyup.enter"], [1, "modal-title"], [1, "modal-body"], [3, "innerHTML"], [3, "clrAlertType", "clrAlertClosable", 4, "ngIf"], [1, "modal-footer"], ["data-cy", "confirmation-dialog-cancel", "type", "button", "class", "btn btn-outline", 3, "click", 4, "ngIf"], ["data-cy", "confirmation-dialog-ok-btn", "type", "button", "class", "btn btn-primary", 3, "click", 4, "ngIf"], [3, "clrAlertType", "clrAlertClosable"], [1, "alert-text", 3, "innerHTML"], ["data-cy", "confirmation-dialog-cancel", "type", "button", 1, "btn", "btn-outline", 3, "click"], ["data-cy", "confirmation-dialog-ok-btn", "type", "button", 1, "btn", "btn-primary", 3, "click"]], template: function ConfirmationDialogModalComponent_Template(rf, ctx) {
if (rf & 1) {
i0.ɵɵtemplate(0, ConfirmationDialogModalComponent_clr_modal_0_Template, 9, 7, "clr-modal", 0);
}
if (rf & 2) {
i0.ɵɵproperty("ngIf", ctx.options.opened);
}
}, directives: [i4.NgIf, i6.ClrModal, i6.ClrModalBody, i6.ClrAlert, i6.ClrAlertItem, i6.ClrAlertText], styles: [".schema-confirm-to-prod[_ngcontent-%COMP%] .modal-title[_ngcontent-%COMP%]{margin-bottom:.5rem}.schema-confirm-to-prod[_ngcontent-%COMP%] .signpostBtn[_ngcontent-%COMP%]{height:0rem}.schema-confirm-to-prod[_ngcontent-%COMP%] .signpostBtn[_ngcontent-%COMP%] .btn-info[_ngcontent-%COMP%]{margin-top:-.65rem;border:0;height:1.2rem}"] });
(function () {
(typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ConfirmationDialogModalComponent, [{
type: Component,
args: [{ selector: 'lib-confirmation-dialog-modal', template: "<!--\n ~ Copyright 2023-2025 Broadcom\n ~ SPDX-License-Identifier: Apache-2.0\n -->\n\n<clr-modal\n *ngIf=\"options.opened\"\n class=\"schema-confirm-to-prod\"\n [(clrModalOpen)]=\"options.opened\"\n [clrModalClosable]=\"options.showCloseX\"\n (keyup.enter)=\"confirm()\"\n>\n <h3 class=\"modal-title\">{{ options.title }}</h3>\n <div class=\"modal-body\">\n <p [innerHTML]=\"options.message\"></p>\n <clr-alert\n *ngIf=\"options.infoText\"\n [clrAlertType]=\"'info'\"\n [clrAlertClosable]=\"false\"\n >\n <clr-alert-item>\n <span class=\"alert-text\" [innerHTML]=\"options.infoText\"> </span>\n </clr-alert-item>\n </clr-alert>\n </div>\n <div class=\"modal-footer\">\n <button\n data-cy=\"confirmation-dialog-cancel\"\n *ngIf=\"options.showCancelBtn\"\n type=\"button\"\n class=\"btn btn-outline\"\n (click)=\"cancel()\"\n >\n {{ options.cancelBtn }}\n </button>\n <button\n data-cy=\"confirmation-dialog-ok-btn\"\n *ngIf=\"options.showOkBtn\"\n type=\"button\"\n class=\"btn btn-primary\"\n (click)=\"confirm()\"\n >\n {{ options.okBtn }}\n </button>\n </div>\n</clr-modal>\n", styles: ["/*!\n * Copyright 2023-2025 Broadcom\n * SPDX-License-Identifier: Apache-2.0\n */.schema-confirm-to-prod .modal-title{margin-bottom:.5rem}.schema-confirm-to-prod .signpostBtn{height:0rem}.schema-confirm-to-prod .signpostBtn .btn-info{margin-top:-.65rem;border:0;height:1.2rem}\n"] }]
}], function () { return []; }, { confirmationInput: [{
type: Input
}], changeStatus: [{
type: Output
}] });
})();
/*
* Copyright 2023-2025 Broadcom
* SPDX-License-Identifier: Apache-2.0
*/
/*
* Copyright 2023-2025 Broadcom
* SPDX-License-Identifier: Apache-2.0
*/
/*
* Copyright 2023-2025 Broadcom
* SPDX-License-Identifier: Apache-2.0
*/
/*
* Copyright 2023-2025 Broadcom
* SPDX-License-Identifier: Apache-2.0
*/
function DeleteModalComponent_clr_modal_0_clr_alert_5_Template(rf, ctx) {
if (rf & 1) {
i0.ɵɵelementStart(0, "clr-alert", 9)(1, "clr-alert-item");
i0.ɵɵelement(2, "span", 10);
i0.ɵɵelementEnd()();
}
if (rf & 2) {
const ctx_r1 = i0.ɵɵnextContext(2);
i0.ɵɵproperty("clrAlertType", "warning")("clrAlertClosable", false);
i0.ɵɵadvance(2);
i0.ɵɵproperty("innerHTML", ctx_r1.options.infoText, i0.ɵɵsanitizeHtml);
}
}
function DeleteModalComponent_clr_modal_0_button_7_Template(rf, ctx) {
if (rf & 1) {
const _r5 = i0.ɵɵgetCurrentView();
i0.ɵɵelementStart(0, "button", 11);
i0.ɵɵlistener("click", function DeleteModalComponent_clr_modal_0_button_7_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r5); const ctx_r4 = i0.ɵɵnextContext(2); return ctx_r4.close(); });
i0.ɵɵtext(1);
i0.ɵɵelementEnd();
}
if (rf & 2) {
const ctx_r2 = i0.ɵɵnextContext(2);
i0.ɵɵadvance(1);
i0.ɵɵtextInterpolate1(" ", ctx_r2.options.cancelBtn, " ");
}
}
function DeleteModalComponent_clr_modal_0_button_8_Template(rf, ctx) {
if (rf & 1) {
const _r7 = i0.ɵɵgetCurrentView();
i0.ɵɵelementStart(0, "button", 12);
i0.ɵɵlistener("click", function DeleteModalComponent_clr_modal_0_button_8_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r7); const ctx_r6 = i0.ɵɵnextContext(2); return ctx_r6.confirm(); });
i0.ɵɵtext(1);
i0.ɵɵelementEnd();
}
if (rf & 2) {
const ctx_r3 = i0.ɵɵnextContext(2);
i0.ɵɵadvance(1);
i0.ɵɵtextInterpolate1(" ", ctx_r3.options.okBtn, " ");
}
}
function DeleteModalComponent_clr_modal_0_Template(rf, ctx) {
if (rf & 1) {
const _r9 = i0.ɵɵgetCurrentView();
i0.ɵɵelementStart(0, "clr-modal", 1);
i0.ɵɵlistener("clrModalOpenChange", function DeleteModalComponent_clr_modal_0_Template_clr_modal_clrModalOpenChange_0_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r8 = i0.ɵɵnextContext(); return ctx_r8.options.opened = $event; });
i0.ɵɵelementStart(1, "h3", 2);
i0.ɵɵtext(2);
i0.ɵɵelementEnd();
i0.ɵɵelementStart(3, "div", 3);
i0.ɵɵelement(4, "p", 4);
i0.ɵɵtemplate(5, DeleteModalComponent_clr_modal_0_clr_alert_5_Template, 3, 3, "clr-alert", 5);
i0.ɵɵelementEnd();
i0.ɵɵelementStart(6, "div", 6);
i0.ɵɵtemplate(7, DeleteModalComponent_clr_modal_0_button_7_Template, 2, 1, "button", 7);
i0.ɵɵtemplate(8, DeleteModalComponent_clr_modal_0_button_8_Template, 2, 1, "button", 8);
i0.ɵɵelementEnd()();
}
if (rf & 2) {
const ctx_r0 = i0.ɵɵnextContext();
i0.ɵɵproperty("clrModalOpen", ctx_r0.options.opened)("clrModalClosable", ctx_r0.options.showCloseX);
i0.ɵɵadvance(2);
i0.ɵɵtextInterpolate(ctx_r0.options.title);
i0.ɵɵadvance(2);
i0.ɵɵproperty("innerHTML", ctx_r0.options.message, i0.ɵɵsanitizeHtml);
i0.ɵɵadvance(1);
i0.ɵɵproperty("ngIf", ctx_r0.options.infoText);
i0.ɵɵadvance(2);
i0.ɵɵproperty("ngIf", ctx_r0.options.showCancelBtn);
i0.ɵɵadvance(1);
i0.ɵɵproperty("ngIf", ctx_r0.options.showOkBtn);
}
}
class DeleteModalComponent extends ModalComponentDirective {
constructor() {
super();
this.delete = new EventEmitter();
this.options = new DeleteModalOptions();
}
/**
* emit that the user confirmed that it want to delete the item
* and close the modal
*/
confirm() {
super.confirm();
this.delete.emit();
}
}
DeleteModalComponent.ɵfac = function DeleteModalComponent_Factory(t) { return new (t || DeleteModalComponent)(); };
DeleteModalComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: DeleteModalComponent, selectors: [["lib-delete-modal"]], outputs: { delete: "delete" }, features: [i0.ɵɵInheritDefinitionFeature], decls: 1, vars: 1, consts: [["id", "delete-modal", 3, "clrModalOpen", "clrModalClosable", "clrModalOpenChange", 4, "ngIf"], ["id", "delete-modal", 3, "clrModalOpen", "clrModalClosable", "clrModalOpenChange"], ["id", "delete-modal-title", 1, "modal-title"], [1, "modal-body"], [3, "innerHTML"], [3, "clrAlertType", "clrAlertClosable", 4, "ngIf"], [1, "modal-footer"], ["id", "cancelBtn", "type", "button", "class", "btn btn-outline", 3, "click", 4, "ngIf"], ["id", "removeBtn", "type", "button", "class", "btn btn-danger", 3, "click", 4, "ngIf"], [3, "clrAlertType", "clrAlertClosable"], [1, "alert-text", 3, "innerHTML"], ["id", "cancelBtn", "type", "button", 1, "btn", "btn-outline", 3, "click"], ["id", "removeBtn", "type", "button", 1, "btn", "btn-danger", 3, "click"]], template: function DeleteModalComponent_Template(rf, ctx) {
if (rf & 1) {
i0.ɵɵtemplate(0, DeleteModalComponent_clr_modal_0_Template, 9, 7, "clr-modal", 0);
}
if (rf & 2) {
i0.ɵɵproperty("ngIf", ctx.options.opened);
}
}, directives: [i4.NgIf, i6.ClrModal, i6.ClrModalBody, i6.ClrAlert, i6.ClrAlertItem, i6.ClrAlertText], styles: [""] });
(function () {
(typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(DeleteModalComponent, [{
type: Component,
args: [{ selector: 'lib-delete-modal', template: "<!--\n ~ Copyright 2023-2025 Broadcom\n ~ SPDX-License-Identifier: Apache-2.0\n -->\n\n<clr-modal\n *ngIf=\"options.opened\"\n id=\"delete-modal\"\n [(clrModalOpen)]=\"options.opened\"\n [clrModalClosable]=\"options.showCloseX\"\n>\n <h3 id=\"delete-modal-title\" class=\"modal-title\">{{ options.title }}</h3>\n\n <div class=\"modal-body\">\n <p [innerHTML]=\"options.message\"></p>\n\n <clr-alert\n *ngIf=\"options.infoText\"\n [clrAlertType]=\"'warning'\"\n [clrAlertClosable]=\"false\"\n >\n <clr-alert-item>\n <span class=\"alert-text\" [innerHTML]=\"options.infoText\"> </span>\n </clr-alert-item>\n </clr-alert>\n </div>\n\n <div class=\"modal-footer\">\n <button\n id=\"cancelBtn\"\n *ngIf=\"options.showCancelBtn\"\n type=\"button\"\n class=\"btn btn-outline\"\n (click)=\"close()\"\n >\n {{ options.cancelBtn }}\n </button>\n <button\n id=\"removeBtn\"\n *ngIf=\"options.showOkBtn\"\n type=\"button\"\n class=\"btn btn-danger\"\n (click)=\"confirm()\"\n >\n {{ options.okBtn }}\n </button>\n </div>\n</clr-modal>\n", styles: [""] }]
}], function () { return []; }, { delete: [{
type: Output
}] });
})();
/*
* Copyright 2023-2025 Broadcom
* SPDX-License-Identifier: Apache-2.0
*/
/*
* Copyright 2023-2025 Broadcom
* SPDX-License-Identifier: Apache-2.0
*/
function ExecutionsTimelineComponent_li_1_div_1_Template(rf, ctx) {
if (rf & 1) {
i0.ɵɵelement(0, "div", 21);
i0.ɵɵpipe(1, "date");
}
if (rf & 2) {
const execution_r2 = i0.ɵɵnextContext().$implicit;
i0.ɵɵproperty("date", execution_r2.startTime)("live", true);
i0.ɵɵattribute("title", "Started " + i0.ɵɵpipeBind3(1, 3, execution_r2.startTime, "MMM d, y, hh:mm a", "UTC") + " UTC");
}
}
function ExecutionsTimelineComponent_li_1_clr_icon_2_Template(rf, ctx) {
if (rf & 1) {
i0.ɵɵelement(0, "clr-icon", 22);
}
}
function ExecutionsTimelineComponent_li_1_clr_spinner_3_Template(rf, ctx) {
if (rf & 1) {
i0.ɵɵelementStart(0, "clr-spinner", 23);
i0.ɵɵtext(1, "Executing... ");
i0.ɵɵelementEnd();
}
}
function ExecutionsTimelineComponent_li_1_clr_icon_4_Template(rf, ctx) {
if (rf & 1) {
i0.ɵɵelement(0, "clr-icon", 24);
}
}
function ExecutionsTimelineComponent_li_1_clr_icon_5_Template(rf, ctx) {
if (rf & 1) {
i0.ɵɵelement(0, "clr-icon", 25);
}
}
function ExecutionsTimelineComponent_li_1_clr_icon_6_Template(rf, ctx) {
if (rf & 1) {
i0.ɵɵelement(0, "clr-icon", 26);
}
}
function ExecutionsTimelineComponent_li_1_clr_icon_7_Template(rf, ctx) {
if (rf & 1) {
i0.ɵɵelement(0, "clr-icon", 27);
}
}
function ExecutionsTimelineComponent_li_1_clr_icon_8_Template(rf, ctx) {
if (rf & 1) {
i0.ɵɵelement(0, "clr-icon", 28);
}
}
function ExecutionsTimelineComponent_li_1_clr_icon_9_Template(rf, ctx) {
if (rf & 1) {
i0.ɵɵelement(0, "clr-icon", 29);
}
}
function ExecutionsTimelineComponent_li_1_span_16_span_1_Template(rf, ctx) {
if (rf & 1) {
const _r20 = i0.ɵɵgetCurrentView();
i0.ɵɵelementStart(0, "span");
i0.ɵɵtext(1);
i0.ɵɵelementStart(2, "button", 30);
i0.ɵɵlistener("click", function ExecutionsTimelineComponent_li_1_span_16_span_1_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r20); const i_r3 = i0.ɵɵnextContext(2).index; const ctx_r19 = i0.ɵɵnextContext(); return (ctx_r19.showExecutionFullMessage[i_r3] = false); });
i0.ɵɵtext(3, " show less ");
i0.ɵɵelementEnd()();
}
if (rf & 2) {
const execution_r2 = i0.ɵɵnextContext(2).$implicit;
i0.ɵɵadvance(1);
i0.ɵɵtextInterpolate1("", execution_r2.message, " ");
}
}
function ExecutionsTimelineComponent_li_1_span_16_span_2_button_3_Template(rf, ctx) {
if (rf & 1) {
const _r25 = i0.ɵɵgetCurrentView();
i0.ɵɵelementStart(0, "button", 30);
i0.ɵɵlistener("click", function ExecutionsTimelineComponent_li_1_span_16_span_2_button_3_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r25); const i_r3 = i0.ɵɵnextContext(3).index; const ctx_r24 = i0.ɵɵnextContext(); return (ctx_r24.showExecutionFullMessage[i_r3] = true); });
i0.ɵɵtext(1, " show more ");
i0.ɵɵelementEnd();
}
}
function ExecutionsTimelineComponent_li_1_span_16_span_2_Template(rf, ctx) {
if (rf & 1) {
i0.ɵɵelementStart(0, "span");
i0.ɵɵtext(1);
i0.ɵɵpipe(2, "words");
i0.ɵɵtemplate(3, ExecutionsTimelineComponent_li_1_span_16_span_2_button_3_Template, 2, 0, "button", 31);
i0.ɵɵelementEnd();
}
if (rf & 2) {
const execution_r2 = i0.ɵɵnextContext(2).$implicit;
const ctx_r18 = i0.ɵɵnextContext();
i0.ɵɵadvance(1);
i0.ɵɵtextInterpolate1("", i0.ɵɵpipeBind2(2, 2, execution_r2.message, ctx_r18.messageWordsBeforeTruncate), " ");
i0.ɵɵadvance(2);
i0.ɵɵproperty("ngIf", (execution_r2.message == null ? null : execution_r2.message.split(" ").length) > ctx_r18.messageWordsBeforeTruncate);
}
}
function ExecutionsTimelineComponent_li_1_span_16_Template(rf, ctx) {
if (rf & 1) {
i0.ɵɵelementStart(0, "span");
i0.ɵɵtemplate(1, ExecutionsTimelineComponent_li_1_span_16_span_1_Template, 4, 1, "span", 17);
i0.ɵɵtemplate(2, ExecutionsTimelineComponent_li_1_span_16_span_2_Template, 4, 5, "span", 17);
i0.ɵɵelement(3, "br");
i0.ɵɵelementEnd();
}
if (rf & 2) {
const i_r3 = i0.ɵɵnextContext().index;
const ctx_r13 = i0.ɵɵnextContext();
i0.ɵɵadvance(1);
i0.ɵɵproperty("ngIf", ctx_r13.showExecutionFullMessage[i_r3]);
i0.ɵɵadvance(1);
i0.ɵɵproperty("ngIf", !ctx_r13.showExecutionFullMessage[i_r3]);
}
}
function ExecutionsTimelineComponent_li_1_div_23_Template(rf, ctx) {
if (rf & 1) {
i0.ɵɵelementStart(0, "div", 16)(1, "a", 32);
i0.ɵɵelement(2, "clr-icon", 33);
i0.ɵɵelementStart(3, "span");
i0.ɵɵtext(4, " Logs");
i0.ɵɵelementEnd()()();
}
if (rf & 2) {
const execution_r2 = i0.ɵɵnextContext().$implicit;
i0.ɵɵadvance(1);
i0.ɵɵattribute("href", execution_r2.logsUrl, i0.ɵɵsanitizeUrl);
}
}
function ExecutionsTimelineComponent_li_1_span_24_Template(rf, ctx) {
if (rf & 1) {
i0.ɵɵelementStart(0, "span", 34);
i0.ɵɵtext(1, "Manual");
i0.ɵɵelementEnd();
}
if (rf & 2) {
const execution_r2 = i0.ɵɵnextContext().$implicit;
const ctx_r15 = i0.ɵɵnextContext();
i0.ɵɵpropertyInterpolate1("title", "'", ctx_r15.getManualExecutedByTitle(execution_r2), "'");
}
}
function ExecutionsTimelineComponent_li_1_Template(rf, ctx) {
if (rf & 1) {
i0.ɵɵelementStart(0, "li", 3);
i0.ɵɵtemplate(1, ExecutionsTimelineComponent_li_1_div_1_Template, 2, 7, "div", 4);
i0.ɵɵtemplate(2, ExecutionsTimelineComponent_li_1_clr_icon_2_Template, 1, 0, "clr-icon", 5);
i0.ɵɵtemplate(3, ExecutionsTimelineComponent_li_1_clr_spinner_3_Template, 2, 0, "clr-spinner", 6);
i0.ɵɵtemplate(4, ExecutionsTimelineComponent_li_1_clr_icon_4_Template, 1, 0, "clr-icon", 7);
i0.ɵɵtemplate(5, ExecutionsTimelineComponent_li_1_clr_icon_5_Template, 1, 0, "clr-icon", 8);
i0.ɵɵtemplate(6, ExecutionsTimelineComponent_li_1_clr_icon_6_Template, 1, 0, "clr-icon", 9);
i0.ɵɵtemplate(7, ExecutionsTimelineComponent_li_1_clr_icon_7_Template, 1, 0, "clr-icon", 10);
i0.ɵɵtemplate(8, ExecutionsTimelineComponent_li_1_clr_icon_8_Template, 1, 0, "clr-icon", 11);
i0.ɵɵtemplate(9, ExecutionsTimelineComponent_li_1_clr_icon_9_Template, 1, 0, "clr-icon", 12);
i0.ɵɵelementStart(10, "div", 13)(11, "span", 14);
i0.ɵɵtext(12);
i0.ɵɵpipe(13, "titlecase");
i0.ɵɵelementEnd();
i0.ɵɵelementStart(14, "div", 15)(15, "div", 16);
i0.ɵɵtemplate(16, ExecutionsTimelineComponent_li_1_span_16_Template, 4, 2, "span", 17);
i0.ɵɵelementStart(17, "span");
i0.ɵɵtext(18, "Duration: ");
i0.ɵɵelementEnd();
i0.ɵɵelementStart(19, "span", 18);
i0.ɵɵpipe(20, "date");
i0.ɵɵtext(21);
i0.ɵɵpipe(22, "formatDelta");
i0.ɵɵelementEnd()();
i0.ɵɵtemplate(23, ExecutionsTimelineComponent_li_1_div_23_Template, 5, 1, "div", 19);
i0.ɵɵtempl