cps-ui-kit 20.0.0 → 20.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/cps-ui-kit.mjs +485 -42
- package/fesm2022/cps-ui-kit.mjs.map +1 -1
- package/index.d.ts +28 -4
- package/package.json +1 -1
package/fesm2022/cps-ui-kit.mjs
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import * as i2 from '@angular/common';
|
|
2
2
|
import { DOCUMENT, CommonModule, isPlatformBrowser } from '@angular/common';
|
|
3
3
|
import * as i0 from '@angular/core';
|
|
4
|
-
import { Input, Inject, Component, inject, ElementRef, SecurityContext, HostListener, Directive, EventEmitter, ViewChild, Output, Self, Optional, Pipe, PLATFORM_ID, ViewEncapsulation, ChangeDetectionStrategy, HostBinding, InjectionToken, Host, ViewChildren, ContentChild, RendererStyleFlags2, TemplateRef, ContentChildren, numberAttribute, input, computed, createComponent, createEnvironmentInjector, SkipSelf
|
|
4
|
+
import { Input, Inject, Component, inject, ElementRef, SecurityContext, HostListener, Directive, EventEmitter, ViewChild, Output, Self, Optional, Pipe, PLATFORM_ID, ViewEncapsulation, ChangeDetectionStrategy, HostBinding, InjectionToken, Host, ViewChildren, ContentChild, RendererStyleFlags2, TemplateRef, ContentChildren, numberAttribute, Injectable, ChangeDetectorRef, input, computed, createComponent, createEnvironmentInjector, SkipSelf } from '@angular/core';
|
|
5
5
|
import { DomSanitizer } from '@angular/platform-browser';
|
|
6
6
|
import * as i1 from '@angular/forms';
|
|
7
|
-
import { FormsModule, Validators, ReactiveFormsModule } from '@angular/forms';
|
|
7
|
+
import { FormsModule, FormBuilder, Validators, ReactiveFormsModule } from '@angular/forms';
|
|
8
8
|
import { isEqual, cloneDeep } from 'lodash-es';
|
|
9
9
|
import * as i1$5 from '@angular/animations';
|
|
10
10
|
import { trigger, state, transition, style, animate, animation, useAnimation, query, animateChild } from '@angular/animations';
|
|
@@ -11718,6 +11718,415 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.1", ngImpor
|
|
|
11718
11718
|
args: ['fileInput']
|
|
11719
11719
|
}] } });
|
|
11720
11720
|
|
|
11721
|
+
/**
|
|
11722
|
+
* Service for validating 6-field cron expressions with extended features.
|
|
11723
|
+
*
|
|
11724
|
+
* This service handles cron validation logic for extended cron expression formats
|
|
11725
|
+
* that support additional features beyond standard Unix cron for more flexible
|
|
11726
|
+
* scheduling capabilities.
|
|
11727
|
+
*
|
|
11728
|
+
* Format: minutes hours day-of-month month day-of-week year
|
|
11729
|
+
*
|
|
11730
|
+
* Key Features:
|
|
11731
|
+
* - Wildcards: asterisk (any value), question mark (any value for day fields)
|
|
11732
|
+
* - Ranges: 1-5, MON-FRI, JAN-MAR
|
|
11733
|
+
* - Steps: asterisk/15, 5/10, 1-5/2
|
|
11734
|
+
* - Lists: 1,3,5, MON,WED,FRI
|
|
11735
|
+
* - Special chars: L (last), W (weekday), hash (nth occurrence)
|
|
11736
|
+
* @see {@link https://docs.aws.amazon.com/scheduler/latest/UserGuide/schedule-types.html#cron-based | AWS EventBridge Scheduler - Cron-based schedules}
|
|
11737
|
+
*/
|
|
11738
|
+
class CronValidationService {
|
|
11739
|
+
/**
|
|
11740
|
+
* Validates a complete 6-field cron expression.
|
|
11741
|
+
*
|
|
11742
|
+
* @param cron - The 6-field cron expression to validate
|
|
11743
|
+
* @param allowEmpty - Whether to allow empty cron expressions
|
|
11744
|
+
* @returns boolean - True if the cron expression is valid
|
|
11745
|
+
*/
|
|
11746
|
+
isValidCron(cron, allowEmpty = false) {
|
|
11747
|
+
if (typeof cron !== 'string')
|
|
11748
|
+
return false;
|
|
11749
|
+
if (allowEmpty && cron === '')
|
|
11750
|
+
return true;
|
|
11751
|
+
if (!cron)
|
|
11752
|
+
return false;
|
|
11753
|
+
const parts = cron.split(' ');
|
|
11754
|
+
if (parts.length !== 6) {
|
|
11755
|
+
return false;
|
|
11756
|
+
}
|
|
11757
|
+
return this.validateCronFields(parts);
|
|
11758
|
+
}
|
|
11759
|
+
/**
|
|
11760
|
+
* Validates all six fields of an extended cron expression.
|
|
11761
|
+
*
|
|
11762
|
+
* Extended cron format uses 6 fields: minutes hours day-of-month month day-of-week year
|
|
11763
|
+
* This method validates each field according to extended cron syntax rules,
|
|
11764
|
+
* which build upon standard Unix cron with additional features.
|
|
11765
|
+
*
|
|
11766
|
+
* Field Ranges and Features:
|
|
11767
|
+
* - Minutes (0-59): Numeric, ranges, steps, lists
|
|
11768
|
+
* - Hours (0-23): Numeric, ranges, steps, lists
|
|
11769
|
+
* - Day-of-month (1-31): Numeric + special chars (L, W, LW)
|
|
11770
|
+
* - Month (1-12): Numeric or named (JAN-DEC), ranges, steps, lists
|
|
11771
|
+
* - Day-of-week (1-7): Numeric or named (SUN-SAT), special chars (L, #)
|
|
11772
|
+
* - Year (1970-2199): Extended range for long-term scheduling
|
|
11773
|
+
*
|
|
11774
|
+
* Key Rules:
|
|
11775
|
+
* - Day-of-month and day-of-week are mutually exclusive (one must be * or ?)
|
|
11776
|
+
* - ? is only valid for day-of-month and day-of-week fields
|
|
11777
|
+
* - Special characters provide advanced scheduling capabilities
|
|
11778
|
+
*
|
|
11779
|
+
* @param parts - Array of 6 cron field strings [minutes, hours, dayOfMonth, month, dayOfWeek, year]
|
|
11780
|
+
* @returns boolean - True if all fields are valid and follow extended cron rules
|
|
11781
|
+
*/
|
|
11782
|
+
validateCronFields(parts) {
|
|
11783
|
+
const [minutes, hours, dayOfMonth, month, dayOfWeek, year] = parts;
|
|
11784
|
+
// Validate minutes (0-59) - use enhanced validation
|
|
11785
|
+
if (!this.validateComplexField(minutes, 0, 59, 'minutes'))
|
|
11786
|
+
return false;
|
|
11787
|
+
// Validate hours (0-23) - use enhanced validation
|
|
11788
|
+
if (!this.validateComplexField(hours, 0, 23, 'hours'))
|
|
11789
|
+
return false;
|
|
11790
|
+
// Validate day of month (1-31 or wildcards)
|
|
11791
|
+
if (!this.validateDayOfMonth(dayOfMonth))
|
|
11792
|
+
return false;
|
|
11793
|
+
// Validate month (1-12 or JAN-DEC) - use enhanced validation
|
|
11794
|
+
if (!this.validateMonth(month))
|
|
11795
|
+
return false;
|
|
11796
|
+
// Validate day of week (1-7 or SUN-SAT) - enhanced method will handle this
|
|
11797
|
+
if (!this.validateDayOfWeek(dayOfWeek))
|
|
11798
|
+
return false;
|
|
11799
|
+
// Validate year (1970-2199) - use enhanced validation
|
|
11800
|
+
if (!this.validateComplexField(year, 1970, 2199, 'year'))
|
|
11801
|
+
return false;
|
|
11802
|
+
// Validate mutual exclusivity of day-of-month and day-of-week
|
|
11803
|
+
if (!this.validateDayMutualExclusivity(dayOfMonth, dayOfWeek))
|
|
11804
|
+
return false;
|
|
11805
|
+
return true;
|
|
11806
|
+
}
|
|
11807
|
+
/**
|
|
11808
|
+
* Enhanced validation for complex cron field patterns.
|
|
11809
|
+
* Supports extended cron features including ranges, steps, lists, and special characters.
|
|
11810
|
+
*
|
|
11811
|
+
* This method handles extended cron expression syntax which builds upon
|
|
11812
|
+
* standard Unix cron format with additional features for flexible scheduling.
|
|
11813
|
+
*
|
|
11814
|
+
* Supported patterns:
|
|
11815
|
+
* - Wildcards: asterisk (any value), question mark (any value for day fields)
|
|
11816
|
+
* - Ranges: 1-5 (values 1 through 5), MON-FRI (Monday through Friday)
|
|
11817
|
+
* - Steps: asterisk/10 (every 10th value), 1-5/2 (every 2nd value from 1 to 5)
|
|
11818
|
+
* - Lists: 1,3,5 (specific values), MON,WED,FRI (specific days)
|
|
11819
|
+
* - Special chars: L (last), W (weekday), hash (nth occurrence)
|
|
11820
|
+
*
|
|
11821
|
+
* @param field - The cron field value to validate (examples: "1-5/2", "MON-FRI", "asterisk/10")
|
|
11822
|
+
* @param min - Minimum valid numeric value for this field type
|
|
11823
|
+
* @param max - Maximum valid numeric value for this field type
|
|
11824
|
+
* @param type - The cron field type ('minutes', 'hours', 'dayOfMonth', 'month', 'dayOfWeek', 'year')
|
|
11825
|
+
* @returns boolean - True if the field is valid according to EventBridge Scheduler rules
|
|
11826
|
+
*/
|
|
11827
|
+
validateComplexField(field, min, max, type) {
|
|
11828
|
+
// Handle wildcard characters
|
|
11829
|
+
// '*' means "any value" and is valid for all fields
|
|
11830
|
+
// '?' means "no specific value" and is only valid for day-of-month and day-of-week fields
|
|
11831
|
+
if (field === '*' || field === '?') {
|
|
11832
|
+
return type === 'dayOfMonth' || type === 'dayOfWeek' || field === '*';
|
|
11833
|
+
}
|
|
11834
|
+
// Handle comma-separated lists: "1,3,5" or "MON,WED,FRI" or "MON-WED,FRI"
|
|
11835
|
+
// Allows scheduling on multiple specific values within a field
|
|
11836
|
+
if (field.includes(',')) {
|
|
11837
|
+
return field.split(',').every((val) => {
|
|
11838
|
+
const trimmedVal = val.trim();
|
|
11839
|
+
// Recursively validate each part of the list
|
|
11840
|
+
return this.validateComplexField(trimmedVal, min, max, type);
|
|
11841
|
+
});
|
|
11842
|
+
}
|
|
11843
|
+
// Handle complex range with step patterns: "1-5/2" (every 2nd value from 1 to 5)
|
|
11844
|
+
// This allows scheduling at intervals within a specific range
|
|
11845
|
+
if (field.includes('-') && field.includes('/')) {
|
|
11846
|
+
const [range, step] = field.split('/');
|
|
11847
|
+
const [start, end] = range.split('-');
|
|
11848
|
+
return this.validateRangeWithStep(start, end, step, min, max, type);
|
|
11849
|
+
}
|
|
11850
|
+
// Handle simple range patterns: "1-5" (values from 1 to 5), "MON-FRI" (Monday to Friday)
|
|
11851
|
+
// Extended cron supports both numeric and named ranges for time-based scheduling
|
|
11852
|
+
if (field.includes('-')) {
|
|
11853
|
+
const [start, end] = field.split('-');
|
|
11854
|
+
return this.validateSimpleRange(start, end, min, max, type);
|
|
11855
|
+
}
|
|
11856
|
+
// Handle step patterns from start: "5/10" (every 10th value starting from 5)
|
|
11857
|
+
// Extended cron uses this for interval-based scheduling from a specific starting point
|
|
11858
|
+
if (field.includes('/')) {
|
|
11859
|
+
const [start, step] = field.split('/');
|
|
11860
|
+
return this.validateStepField(start, step, min, max, type);
|
|
11861
|
+
}
|
|
11862
|
+
// Handle single values and special characters (L, W, #)
|
|
11863
|
+
// These provide advanced scheduling capabilities like "last day of month" or "3rd Tuesday"
|
|
11864
|
+
return this.validateSingleValue(field, min, max, type);
|
|
11865
|
+
}
|
|
11866
|
+
/**
|
|
11867
|
+
* Validates single values and extended cron special characters.
|
|
11868
|
+
*
|
|
11869
|
+
* This method handles the validation of individual field values including:
|
|
11870
|
+
* - Numeric values within specified ranges
|
|
11871
|
+
* - Special characters for advanced scheduling
|
|
11872
|
+
* - Named values like month names (JAN, FEB) and day names (SUN, MON)
|
|
11873
|
+
*
|
|
11874
|
+
* Extended Cron Special Characters:
|
|
11875
|
+
* - L: Last day of month (day-of-month) or last occurrence of weekday (day-of-week)
|
|
11876
|
+
* - W: Nearest weekday to the specified day (day-of-month only)
|
|
11877
|
+
* - LW: Last weekday of the month (day-of-month only)
|
|
11878
|
+
* - #: Nth occurrence of weekday (e.g., "3#2" = 3rd Tuesday of month)
|
|
11879
|
+
*
|
|
11880
|
+
* @param value - The single value to validate (e.g., "15", "L", "15W", "MON", "3#2")
|
|
11881
|
+
* @param min - Minimum valid numeric value for this field type
|
|
11882
|
+
* @param max - Maximum valid numeric value for this field type
|
|
11883
|
+
* @param type - The cron field type for context-specific validation
|
|
11884
|
+
* @returns boolean - True if the value is valid for EventBridge Scheduler
|
|
11885
|
+
*/
|
|
11886
|
+
validateSingleValue(value, min, max, type) {
|
|
11887
|
+
// Handle special characters for day of month field
|
|
11888
|
+
// Extended cron supports advanced day-of-month scheduling patterns
|
|
11889
|
+
if (type === 'dayOfMonth') {
|
|
11890
|
+
// 'L' = last day of month, 'LW' = last weekday of month
|
|
11891
|
+
if (value === 'L' || value === 'LW')
|
|
11892
|
+
return true;
|
|
11893
|
+
// '15W' = nearest weekday to the 15th (if 15th is weekend, use closest weekday)
|
|
11894
|
+
if (value.endsWith('W')) {
|
|
11895
|
+
const day = Number(value.slice(0, -1));
|
|
11896
|
+
return day >= 1 && day <= 31;
|
|
11897
|
+
}
|
|
11898
|
+
}
|
|
11899
|
+
// Handle special characters for day of week field
|
|
11900
|
+
// Extended cron supports advanced day-of-week scheduling patterns
|
|
11901
|
+
if (type === 'dayOfWeek') {
|
|
11902
|
+
// 'MONL' = last Monday of month (last occurrence)
|
|
11903
|
+
if (value.endsWith('L')) {
|
|
11904
|
+
const day = value.slice(0, -1);
|
|
11905
|
+
return this.isValidDayOfWeek(day);
|
|
11906
|
+
}
|
|
11907
|
+
// '3#2' = 3rd Tuesday of month (3=Tuesday, 2=second occurrence)
|
|
11908
|
+
if (value.includes('#')) {
|
|
11909
|
+
const [day, week] = value.split('#');
|
|
11910
|
+
return (this.isValidDayOfWeek(day) && Number(week) >= 1 && Number(week) <= 5);
|
|
11911
|
+
}
|
|
11912
|
+
// Standard day names: SUN, MON, TUE, etc.
|
|
11913
|
+
if (this.isValidDayOfWeek(value))
|
|
11914
|
+
return true;
|
|
11915
|
+
}
|
|
11916
|
+
// Handle month names (JAN, FEB, MAR, etc.) for month field
|
|
11917
|
+
// Extended cron allows both numeric (1-12) and named month values
|
|
11918
|
+
if (type === 'month' && this.isValidMonthName(value))
|
|
11919
|
+
return true;
|
|
11920
|
+
// Validate numeric values within the specified range
|
|
11921
|
+
// This covers standard numeric scheduling (minutes: 0-59, hours: 0-23, etc.)
|
|
11922
|
+
const num = Number(value);
|
|
11923
|
+
return !isNaN(num) && num >= min && num <= max;
|
|
11924
|
+
}
|
|
11925
|
+
/**
|
|
11926
|
+
* Validates range patterns with step intervals.
|
|
11927
|
+
*
|
|
11928
|
+
* This method handles complex range-step patterns like "1-5/2" which means
|
|
11929
|
+
* "every 2nd value from 1 to 5" (resulting in: 1, 3, 5).
|
|
11930
|
+
*
|
|
11931
|
+
* Extended cron uses this pattern for flexible interval scheduling within specific ranges.
|
|
11932
|
+
* For example: "9-17/2" for hours would trigger at 9:00, 11:00, 13:00, 15:00, 17:00.
|
|
11933
|
+
*
|
|
11934
|
+
* @param start - Range start value (numeric or named like "MON")
|
|
11935
|
+
* @param end - Range end value (numeric or named like "FRI")
|
|
11936
|
+
* @param step - Step interval as string (must be positive integer)
|
|
11937
|
+
* @param min - Minimum allowed value for this field type
|
|
11938
|
+
* @param max - Maximum allowed value for this field type
|
|
11939
|
+
* @param type - Field type for context-aware validation (dayOfWeek gets special handling)
|
|
11940
|
+
* @returns boolean - True if the range-step pattern is valid for EventBridge
|
|
11941
|
+
*/
|
|
11942
|
+
validateRangeWithStep(start, end, step, min, max, type) {
|
|
11943
|
+
// Validate step value - must be positive integer
|
|
11944
|
+
const stepNum = Number(step);
|
|
11945
|
+
if (isNaN(stepNum) || stepNum <= 0)
|
|
11946
|
+
return false;
|
|
11947
|
+
// Special handling for day-of-week ranges (supports named days like MON-FRI)
|
|
11948
|
+
// Extended cron allows both numeric (1-7) and named (SUN-SAT) day ranges
|
|
11949
|
+
if (type === 'dayOfWeek') {
|
|
11950
|
+
return this.isValidDayOfWeek(start) && this.isValidDayOfWeek(end);
|
|
11951
|
+
}
|
|
11952
|
+
// Special handling for month ranges (supports named months like JAN-DEC)
|
|
11953
|
+
// Extended cron allows both numeric (1-12) and named (JAN-DEC) month ranges
|
|
11954
|
+
if (type === 'month') {
|
|
11955
|
+
const startValid = this.isValidMonthName(start) ||
|
|
11956
|
+
this.validateSingleValue(start, min, max, type);
|
|
11957
|
+
const endValid = this.isValidMonthName(end) ||
|
|
11958
|
+
this.validateSingleValue(end, min, max, type);
|
|
11959
|
+
return startValid && endValid;
|
|
11960
|
+
}
|
|
11961
|
+
// Validate numeric ranges for other field types
|
|
11962
|
+
// Ensures range boundaries are valid and logical (start <= end)
|
|
11963
|
+
const startNum = Number(start);
|
|
11964
|
+
const endNum = Number(end);
|
|
11965
|
+
return (!isNaN(startNum) &&
|
|
11966
|
+
!isNaN(endNum) &&
|
|
11967
|
+
startNum >= min &&
|
|
11968
|
+
endNum <= max &&
|
|
11969
|
+
startNum <= endNum);
|
|
11970
|
+
}
|
|
11971
|
+
/**
|
|
11972
|
+
* Validates simple range patterns without step intervals.
|
|
11973
|
+
*
|
|
11974
|
+
* This method handles basic range patterns like "1-5" (values 1 through 5) or
|
|
11975
|
+
* "MON-FRI" (Monday through Friday). Extended cron supports both numeric and
|
|
11976
|
+
* named ranges for flexible scheduling.
|
|
11977
|
+
*
|
|
11978
|
+
* Examples:
|
|
11979
|
+
* - "9-17" for hours: triggers every hour from 9:00 to 17:00 (9am to 5pm)
|
|
11980
|
+
* - "MON-FRI" for day-of-week: triggers Monday through Friday
|
|
11981
|
+
* - "JAN-MAR" for months: triggers January through March
|
|
11982
|
+
*
|
|
11983
|
+
* @param start - Range start value (numeric or named)
|
|
11984
|
+
* @param end - Range end value (numeric or named)
|
|
11985
|
+
* @param min - Minimum allowed value for this field type
|
|
11986
|
+
* @param max - Maximum allowed value for this field type
|
|
11987
|
+
* @param type - Field type for validation context (affects named value handling)
|
|
11988
|
+
* @returns boolean - True if the range pattern is valid for EventBridge
|
|
11989
|
+
*/
|
|
11990
|
+
validateSimpleRange(start, end, min, max, type) {
|
|
11991
|
+
// Handle day-of-week ranges with named values (MON-FRI, SUN-SAT, etc.)
|
|
11992
|
+
// Extended cron supports both numeric (1-7) and named day ranges
|
|
11993
|
+
if (type === 'dayOfWeek') {
|
|
11994
|
+
return this.isValidDayOfWeek(start) && this.isValidDayOfWeek(end);
|
|
11995
|
+
}
|
|
11996
|
+
// Handle month ranges with named values (JAN-DEC, etc.)
|
|
11997
|
+
// Extended cron allows both numeric (1-12) and named month ranges
|
|
11998
|
+
if (type === 'month') {
|
|
11999
|
+
const startValid = this.isValidMonthName(start) ||
|
|
12000
|
+
this.validateSingleValue(start, min, max, type);
|
|
12001
|
+
const endValid = this.isValidMonthName(end) ||
|
|
12002
|
+
this.validateSingleValue(end, min, max, type);
|
|
12003
|
+
return startValid && endValid;
|
|
12004
|
+
}
|
|
12005
|
+
// Validate numeric ranges for other field types
|
|
12006
|
+
// Ensures both range boundaries are numeric, within limits, and logical (start <= end)
|
|
12007
|
+
const startNum = Number(start);
|
|
12008
|
+
const endNum = Number(end);
|
|
12009
|
+
return (!isNaN(startNum) &&
|
|
12010
|
+
!isNaN(endNum) &&
|
|
12011
|
+
startNum >= min &&
|
|
12012
|
+
endNum <= max &&
|
|
12013
|
+
startNum <= endNum);
|
|
12014
|
+
}
|
|
12015
|
+
/**
|
|
12016
|
+
* Validates step patterns from a starting point.
|
|
12017
|
+
*
|
|
12018
|
+
* This method handles step patterns like "5/10" (every 10th value starting from 5)
|
|
12019
|
+
* or asterisk/15 (every 15th value starting from minimum). Extended cron uses this for
|
|
12020
|
+
* interval-based scheduling from specific starting points.
|
|
12021
|
+
*
|
|
12022
|
+
* Examples:
|
|
12023
|
+
* - "0/15" for minutes: triggers at 0, 15, 30, 45 minutes past the hour
|
|
12024
|
+
* - asterisk/5 for minutes: triggers every 5 minutes (0, 5, 10, 15, ...)
|
|
12025
|
+
* - "2/3" for day-of-month: triggers every 3rd day starting from the 2nd (2, 5, 8, ...)
|
|
12026
|
+
*
|
|
12027
|
+
* @param start - Starting value (can be asterisk for wildcard start or specific value)
|
|
12028
|
+
* @param step - Step interval as string (must be positive integer)
|
|
12029
|
+
* @param min - Minimum allowed value for this field type
|
|
12030
|
+
* @param max - Maximum allowed value for this field type
|
|
12031
|
+
* @param type - Field type for validation context
|
|
12032
|
+
* @returns boolean - True if the step pattern is valid for EventBridge
|
|
12033
|
+
*/
|
|
12034
|
+
validateStepField(start, step, min, max, type) {
|
|
12035
|
+
// Validate step value - must be positive integer
|
|
12036
|
+
const stepNum = Number(step);
|
|
12037
|
+
if (isNaN(stepNum) || stepNum <= 0)
|
|
12038
|
+
return false;
|
|
12039
|
+
// Handle wildcard start: asterisk/step means start from minimum value with given step
|
|
12040
|
+
// This is the most common pattern for regular intervals (e.g., asterisk/15 = every 15 minutes)
|
|
12041
|
+
if (start === '*')
|
|
12042
|
+
return true;
|
|
12043
|
+
// Handle named day values for day-of-week step patterns
|
|
12044
|
+
// Extended cron supports patterns like "MON/2" (every 2nd occurrence starting Monday)
|
|
12045
|
+
if (type === 'dayOfWeek') {
|
|
12046
|
+
return this.isValidDayOfWeek(start);
|
|
12047
|
+
}
|
|
12048
|
+
// Validate numeric start values - must be within field's valid range
|
|
12049
|
+
// Extended cron requires the starting point to be a valid value for the field type
|
|
12050
|
+
const startNum = Number(start);
|
|
12051
|
+
return !isNaN(startNum) && startNum >= min && startNum <= max;
|
|
12052
|
+
}
|
|
12053
|
+
/**
|
|
12054
|
+
* Validates day-of-month field with special characters.
|
|
12055
|
+
*/
|
|
12056
|
+
validateDayOfMonth(dayOfMonth) {
|
|
12057
|
+
return this.validateComplexField(dayOfMonth, 1, 31, 'dayOfMonth');
|
|
12058
|
+
}
|
|
12059
|
+
/**
|
|
12060
|
+
* Validates month field with support for named months.
|
|
12061
|
+
*/
|
|
12062
|
+
validateMonth(month) {
|
|
12063
|
+
return this.validateComplexField(month, 1, 12, 'month');
|
|
12064
|
+
}
|
|
12065
|
+
/**
|
|
12066
|
+
* Validates day-of-week field with support for named days and special characters.
|
|
12067
|
+
*/
|
|
12068
|
+
validateDayOfWeek(dayOfWeek) {
|
|
12069
|
+
// Check for multiple hash expressions in day-of-week field
|
|
12070
|
+
if (dayOfWeek.includes(',') && dayOfWeek.includes('#')) {
|
|
12071
|
+
const parts = dayOfWeek.split(',');
|
|
12072
|
+
const hashCount = parts.filter((part) => part.trim().includes('#')).length;
|
|
12073
|
+
// AWS EventBridge: Only one hash expression allowed per day-of-week field
|
|
12074
|
+
if (hashCount > 1) {
|
|
12075
|
+
return false;
|
|
12076
|
+
}
|
|
12077
|
+
}
|
|
12078
|
+
return this.validateComplexField(dayOfWeek, 1, 7, 'dayOfWeek');
|
|
12079
|
+
}
|
|
12080
|
+
/**
|
|
12081
|
+
* Validates mutual exclusivity rule for day-of-month and day-of-week fields.
|
|
12082
|
+
* Extended cron requires that one of these fields must be a wildcard.
|
|
12083
|
+
*/
|
|
12084
|
+
validateDayMutualExclusivity(dayOfMonth, dayOfWeek) {
|
|
12085
|
+
// Both cannot be specific values - one must be * or ?
|
|
12086
|
+
const dayOfMonthIsWildcard = dayOfMonth === '*' || dayOfMonth === '?';
|
|
12087
|
+
const dayOfWeekIsWildcard = dayOfWeek === '*' || dayOfWeek === '?';
|
|
12088
|
+
return dayOfMonthIsWildcard || dayOfWeekIsWildcard;
|
|
12089
|
+
}
|
|
12090
|
+
/**
|
|
12091
|
+
* Checks if a value represents a valid day of the week (numeric or named).
|
|
12092
|
+
*/
|
|
12093
|
+
isValidDayOfWeek(day) {
|
|
12094
|
+
const validDays = ['SUN', 'MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT'];
|
|
12095
|
+
if (validDays.includes(day.toUpperCase()))
|
|
12096
|
+
return true;
|
|
12097
|
+
const num = Number(day);
|
|
12098
|
+
return !isNaN(num) && num >= 1 && num <= 7;
|
|
12099
|
+
}
|
|
12100
|
+
/**
|
|
12101
|
+
* Checks if a value represents a valid month name.
|
|
12102
|
+
*/
|
|
12103
|
+
isValidMonthName(month) {
|
|
12104
|
+
const validMonths = [
|
|
12105
|
+
'JAN',
|
|
12106
|
+
'FEB',
|
|
12107
|
+
'MAR',
|
|
12108
|
+
'APR',
|
|
12109
|
+
'MAY',
|
|
12110
|
+
'JUN',
|
|
12111
|
+
'JUL',
|
|
12112
|
+
'AUG',
|
|
12113
|
+
'SEP',
|
|
12114
|
+
'OCT',
|
|
12115
|
+
'NOV',
|
|
12116
|
+
'DEC'
|
|
12117
|
+
];
|
|
12118
|
+
return validMonths.includes(month.toUpperCase());
|
|
12119
|
+
}
|
|
12120
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: CronValidationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
12121
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: CronValidationService, providedIn: 'root' }); }
|
|
12122
|
+
}
|
|
12123
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: CronValidationService, decorators: [{
|
|
12124
|
+
type: Injectable,
|
|
12125
|
+
args: [{
|
|
12126
|
+
providedIn: 'root'
|
|
12127
|
+
}]
|
|
12128
|
+
}] });
|
|
12129
|
+
|
|
11721
12130
|
const timeZones = [
|
|
11722
12131
|
'Asia/Aden',
|
|
11723
12132
|
'America/Cuiaba',
|
|
@@ -12359,10 +12768,7 @@ var Months;
|
|
|
12359
12768
|
* @group Components
|
|
12360
12769
|
*/
|
|
12361
12770
|
class CpsSchedulerComponent {
|
|
12362
|
-
|
|
12363
|
-
constructor(_fb, _cdr) {
|
|
12364
|
-
this._fb = _fb;
|
|
12365
|
-
this._cdr = _cdr;
|
|
12771
|
+
constructor() {
|
|
12366
12772
|
/**
|
|
12367
12773
|
* Label of the component.
|
|
12368
12774
|
* @group Props
|
|
@@ -12440,11 +12846,14 @@ class CpsSchedulerComponent {
|
|
|
12440
12846
|
{ label: 'Yearly', value: 'Yearly' },
|
|
12441
12847
|
{ label: 'Advanced', value: 'Advanced' }
|
|
12442
12848
|
];
|
|
12849
|
+
this._fb = inject(FormBuilder);
|
|
12850
|
+
this._cdr = inject(ChangeDetectorRef);
|
|
12851
|
+
this._cronValidationService = inject(CronValidationService);
|
|
12443
12852
|
this.activeScheduleType = 'Not set';
|
|
12444
12853
|
this.selectOptions = this._getSelectOptions();
|
|
12445
12854
|
this.timeZoneOptions = timeZones.map((tz) => ({ label: tz, value: tz }));
|
|
12446
12855
|
this.form = this._fb.group({
|
|
12447
|
-
advanced: ['', [this._validateAdvancedExpr]]
|
|
12856
|
+
advanced: ['', [this._validateAdvancedExpr.bind(this)]]
|
|
12448
12857
|
});
|
|
12449
12858
|
this._isDirty = false;
|
|
12450
12859
|
this._minutesDefault = '0/1 * 1/1 * ? *';
|
|
@@ -12585,7 +12994,15 @@ class CpsSchedulerComponent {
|
|
|
12585
12994
|
this.cron = value;
|
|
12586
12995
|
this.cronChange.emit(this.cron);
|
|
12587
12996
|
}
|
|
12588
|
-
|
|
12997
|
+
/**
|
|
12998
|
+
* Basic structural validation for pattern recognition.
|
|
12999
|
+
* More permissive than _isValidCron to allow unrecognized patterns
|
|
13000
|
+
* to reach Advanced mode (preserving original behavior).
|
|
13001
|
+
*
|
|
13002
|
+
* @param cron - The cron expression to validate structurally
|
|
13003
|
+
* @returns boolean - True if the structure is valid for pattern parsing
|
|
13004
|
+
*/
|
|
13005
|
+
_isValidCronStructure(cron) {
|
|
12589
13006
|
if (typeof cron !== 'string')
|
|
12590
13007
|
return false;
|
|
12591
13008
|
if (!this.showNotSet) {
|
|
@@ -12600,25 +13017,23 @@ class CpsSchedulerComponent {
|
|
|
12600
13017
|
}
|
|
12601
13018
|
return true;
|
|
12602
13019
|
}
|
|
13020
|
+
/**
|
|
13021
|
+
* Validates a cron expression using the CronValidationService.
|
|
13022
|
+
*
|
|
13023
|
+
* @param cron - The cron expression to validate
|
|
13024
|
+
* @returns boolean - True if the cron expression is valid
|
|
13025
|
+
*/
|
|
13026
|
+
_isValidCron(cron) {
|
|
13027
|
+
return this._cronValidationService.isValidCron(cron, this.showNotSet);
|
|
13028
|
+
}
|
|
12603
13029
|
_validateAdvancedExpr(c) {
|
|
12604
13030
|
const cron = c.value;
|
|
12605
13031
|
if (!cron)
|
|
12606
13032
|
return null;
|
|
12607
|
-
|
|
12608
|
-
|
|
12609
|
-
|
|
12610
|
-
|
|
12611
|
-
return cronSeven.match(/\d+ 0\/\d+ \* 1\/1 \* \? \*/) ||
|
|
12612
|
-
cronSeven.match(/\d+ \d+ 0\/\d+ 1\/1 \* \? \*/) ||
|
|
12613
|
-
cronSeven.match(/\d+ \d+ \d+ 1\/\d+ \* \? \*/) ||
|
|
12614
|
-
cronSeven.match(/\d+ \d+ \d+ \? \* MON-FRI \*/) ||
|
|
12615
|
-
cronSeven.match(/\d+ \d+ \d+ \? \* (MON|TUE|WED|THU|FRI|SAT|SUN)(,(MON|TUE|WED|THU|FRI|SAT|SUN))* \*/) ||
|
|
12616
|
-
cronSeven.match(/\d+ \d+ \d+ (\d+|L|LW|1W) 1\/\d+ \? \*/) ||
|
|
12617
|
-
cronSeven.match(/\d+ \d+ \d+ \? \d+\/\d+ (MON|TUE|WED|THU|FRI|SAT|SUN)((#[1-5])|L) \*/) ||
|
|
12618
|
-
cronSeven.match(/\d+ \d+ \d+ (\d+|L|LW|1W) \d+ \? \*/) ||
|
|
12619
|
-
cronSeven.match(/\d+ \d+ \d+ \? \d+ (MON|TUE|WED|THU|FRI|SAT|SUN)((#[1-5])|L) \*/)
|
|
12620
|
-
? null
|
|
12621
|
-
: { invalidExpression: 'Invalid expression' };
|
|
13033
|
+
if (!this._isValidCron(cron)) {
|
|
13034
|
+
return { invalidExpression: 'Invalid cron expression format' };
|
|
13035
|
+
}
|
|
13036
|
+
return null;
|
|
12622
13037
|
}
|
|
12623
13038
|
_getAmPmHour(hour) {
|
|
12624
13039
|
return this.use24HourTime ? hour : ((hour + 11) % 12) + 1;
|
|
@@ -12641,7 +13056,7 @@ class CpsSchedulerComponent {
|
|
|
12641
13056
|
}
|
|
12642
13057
|
}
|
|
12643
13058
|
_handleModelChange(cron) {
|
|
12644
|
-
if (!this.
|
|
13059
|
+
if (!this._isValidCronStructure(cron)) {
|
|
12645
13060
|
console.error('Invalid cron value:', cron);
|
|
12646
13061
|
this.cron = this.showNotSet ? '' : this._minutesDefault;
|
|
12647
13062
|
return;
|
|
@@ -12660,16 +13075,16 @@ class CpsSchedulerComponent {
|
|
|
12660
13075
|
}
|
|
12661
13076
|
const cronSeven = `0 ${cron}`;
|
|
12662
13077
|
const [minutes, hours, dayOfMonth, month, dayOfWeek] = cron.split(' ');
|
|
12663
|
-
if (
|
|
13078
|
+
if (this._isMinutesPattern(cronSeven)) {
|
|
12664
13079
|
this.activeScheduleType = 'Minutes';
|
|
12665
13080
|
this.state.minutes.minutes = Number(minutes.substring(2));
|
|
12666
13081
|
}
|
|
12667
|
-
else if (
|
|
13082
|
+
else if (this._isHourlyPattern(cronSeven)) {
|
|
12668
13083
|
this.activeScheduleType = 'Hourly';
|
|
12669
13084
|
this.state.hourly.hours = Number(hours.substring(2));
|
|
12670
13085
|
this.state.hourly.minutes = Number(minutes);
|
|
12671
13086
|
}
|
|
12672
|
-
else if (
|
|
13087
|
+
else if (this._isDailyEveryDaysPattern(cronSeven)) {
|
|
12673
13088
|
this.activeScheduleType = 'Daily';
|
|
12674
13089
|
this.state.daily.subTab = 'everyDays';
|
|
12675
13090
|
this.state.daily.everyDays.days = Number(dayOfMonth.substring(2));
|
|
@@ -12678,7 +13093,7 @@ class CpsSchedulerComponent {
|
|
|
12678
13093
|
this.state.daily.everyDays.hourType = this._getHourType(parsedHours);
|
|
12679
13094
|
this.state.daily.everyDays.minutes = Number(minutes);
|
|
12680
13095
|
}
|
|
12681
|
-
else if (
|
|
13096
|
+
else if (this._isDailyWeekdayPattern(cronSeven)) {
|
|
12682
13097
|
this.activeScheduleType = 'Daily';
|
|
12683
13098
|
this.state.daily.subTab = 'everyWeekDay';
|
|
12684
13099
|
const parsedHours = Number(hours);
|
|
@@ -12686,7 +13101,7 @@ class CpsSchedulerComponent {
|
|
|
12686
13101
|
this.state.daily.everyWeekDay.hourType = this._getHourType(parsedHours);
|
|
12687
13102
|
this.state.daily.everyWeekDay.minutes = Number(minutes);
|
|
12688
13103
|
}
|
|
12689
|
-
else if (
|
|
13104
|
+
else if (this._isWeeklyPattern(cronSeven)) {
|
|
12690
13105
|
this.activeScheduleType = 'Weekly';
|
|
12691
13106
|
this.selectOptions.days
|
|
12692
13107
|
.map((d) => d.value)
|
|
@@ -12699,11 +13114,11 @@ class CpsSchedulerComponent {
|
|
|
12699
13114
|
this.state.weekly.hourType = this._getHourType(parsedHours);
|
|
12700
13115
|
this.state.weekly.minutes = Number(minutes);
|
|
12701
13116
|
}
|
|
12702
|
-
else if (
|
|
13117
|
+
else if (this._isMonthlySpecificDayPattern(cronSeven)) {
|
|
12703
13118
|
this.activeScheduleType = 'Monthly';
|
|
12704
13119
|
this.state.monthly.subTab = 'specificDay';
|
|
12705
|
-
if (dayOfMonth.
|
|
12706
|
-
this.state.monthly.specificDay.day = dayOfMonth.
|
|
13120
|
+
if (dayOfMonth.includes('W')) {
|
|
13121
|
+
this.state.monthly.specificDay.day = dayOfMonth.replace('W', '');
|
|
12707
13122
|
this.state.monthly.runOnWeekday = true;
|
|
12708
13123
|
}
|
|
12709
13124
|
else {
|
|
@@ -12715,14 +13130,14 @@ class CpsSchedulerComponent {
|
|
|
12715
13130
|
this.state.monthly.specificDay.hourType = this._getHourType(parsedHours);
|
|
12716
13131
|
this.state.monthly.specificDay.minutes = Number(minutes);
|
|
12717
13132
|
}
|
|
12718
|
-
else if (
|
|
13133
|
+
else if (this._isMonthlySpecificWeekDayPattern(cronSeven)) {
|
|
12719
13134
|
const day = dayOfWeek.substring(0, 3);
|
|
12720
13135
|
const monthWeek = dayOfWeek.substring(3);
|
|
12721
13136
|
this.activeScheduleType = 'Monthly';
|
|
12722
13137
|
this.state.monthly.subTab = 'specificWeekDay';
|
|
12723
13138
|
this.state.monthly.specificWeekDay.monthWeek = monthWeek;
|
|
12724
13139
|
this.state.monthly.specificWeekDay.day = day;
|
|
12725
|
-
if (month.
|
|
13140
|
+
if (month.includes('/')) {
|
|
12726
13141
|
const [startMonth, months] = month.split('/').map(Number);
|
|
12727
13142
|
this.state.monthly.specificWeekDay.months = months;
|
|
12728
13143
|
this.state.monthly.specificWeekDay.startMonth = startMonth;
|
|
@@ -12733,12 +13148,12 @@ class CpsSchedulerComponent {
|
|
|
12733
13148
|
this._getHourType(parsedHours);
|
|
12734
13149
|
this.state.monthly.specificWeekDay.minutes = Number(minutes);
|
|
12735
13150
|
}
|
|
12736
|
-
else if (
|
|
13151
|
+
else if (this._isYearlySpecificMonthDayPattern(cronSeven)) {
|
|
12737
13152
|
this.activeScheduleType = 'Yearly';
|
|
12738
13153
|
this.state.yearly.subTab = 'specificMonthDay';
|
|
12739
13154
|
this.state.yearly.specificMonthDay.month = Number(month);
|
|
12740
|
-
if (dayOfMonth.
|
|
12741
|
-
this.state.yearly.specificMonthDay.day = dayOfMonth.
|
|
13155
|
+
if (dayOfMonth.includes('W')) {
|
|
13156
|
+
this.state.yearly.specificMonthDay.day = dayOfMonth.replace('W', '');
|
|
12742
13157
|
this.state.yearly.runOnWeekday = true;
|
|
12743
13158
|
}
|
|
12744
13159
|
else {
|
|
@@ -12750,7 +13165,7 @@ class CpsSchedulerComponent {
|
|
|
12750
13165
|
this._getHourType(parsedHours);
|
|
12751
13166
|
this.state.yearly.specificMonthDay.minutes = Number(minutes);
|
|
12752
13167
|
}
|
|
12753
|
-
else if (
|
|
13168
|
+
else if (this._isYearlySpecificMonthWeekPattern(cronSeven)) {
|
|
12754
13169
|
const day = dayOfWeek.substring(0, 3);
|
|
12755
13170
|
const monthWeek = dayOfWeek.substring(3);
|
|
12756
13171
|
this.activeScheduleType = 'Yearly';
|
|
@@ -12771,6 +13186,34 @@ class CpsSchedulerComponent {
|
|
|
12771
13186
|
}
|
|
12772
13187
|
this._cdr.detectChanges();
|
|
12773
13188
|
}
|
|
13189
|
+
// Enhanced pattern matching methods with support for all EventBridge features
|
|
13190
|
+
_isMinutesPattern(cronSeven) {
|
|
13191
|
+
return /^\d+ 0\/\d+ \* (1\/1|\*) \* \? \*$/.test(cronSeven);
|
|
13192
|
+
}
|
|
13193
|
+
_isHourlyPattern(cronSeven) {
|
|
13194
|
+
return /^\d+ \d+ 0\/\d+ (1\/1|\*) \* \? \*$/.test(cronSeven);
|
|
13195
|
+
}
|
|
13196
|
+
_isDailyEveryDaysPattern(cronSeven) {
|
|
13197
|
+
return /^\d+ \d+ \d+ 1\/\d+ \* \? \*$/.test(cronSeven);
|
|
13198
|
+
}
|
|
13199
|
+
_isDailyWeekdayPattern(cronSeven) {
|
|
13200
|
+
return /^\d+ \d+ \d+ \? \* MON-FRI \*$/.test(cronSeven);
|
|
13201
|
+
}
|
|
13202
|
+
_isWeeklyPattern(cronSeven) {
|
|
13203
|
+
return /^\d+ \d+ \d+ \? \* (MON|TUE|WED|THU|FRI|SAT|SUN)(,(MON|TUE|WED|THU|FRI|SAT|SUN))* \*$/.test(cronSeven);
|
|
13204
|
+
}
|
|
13205
|
+
_isMonthlySpecificDayPattern(cronSeven) {
|
|
13206
|
+
return /^\d+ \d+ \d+ (\d+|L|LW|\d+W) 1\/\d+ \? \*$/.test(cronSeven);
|
|
13207
|
+
}
|
|
13208
|
+
_isMonthlySpecificWeekDayPattern(cronSeven) {
|
|
13209
|
+
return /^\d+ \d+ \d+ \? \d+\/\d+ (MON|TUE|WED|THU|FRI|SAT|SUN)((#[1-5])|L) \*$/.test(cronSeven);
|
|
13210
|
+
}
|
|
13211
|
+
_isYearlySpecificMonthDayPattern(cronSeven) {
|
|
13212
|
+
return /^\d+ \d+ \d+ (\d+|L|LW|\d+W) \d+ \? \*$/.test(cronSeven);
|
|
13213
|
+
}
|
|
13214
|
+
_isYearlySpecificMonthWeekPattern(cronSeven) {
|
|
13215
|
+
return /^\d+ \d+ \d+ \? \d+ (MON|TUE|WED|THU|FRI|SAT|SUN)((#[1-5])|L) \*$/.test(cronSeven);
|
|
13216
|
+
}
|
|
12774
13217
|
_getDefaultState() {
|
|
12775
13218
|
const [defaultHours, defaultMinutes] = this.defaultTime
|
|
12776
13219
|
.split(':')
|
|
@@ -12943,8 +13386,8 @@ class CpsSchedulerComponent {
|
|
|
12943
13386
|
const res = Number(value);
|
|
12944
13387
|
return isNaN(res) ? 0 : res;
|
|
12945
13388
|
}
|
|
12946
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: CpsSchedulerComponent, deps: [
|
|
12947
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.2.1", type: CpsSchedulerComponent, isStandalone: true, selector: "cps-scheduler", inputs: { label: "label", cron: "cron", timeZone: "timeZone", showNotSet: "showNotSet", showAdvanced: "showAdvanced", showMinutes: "showMinutes", showTimeZone: "showTimeZone", defaultTime: "defaultTime", use24HourTime: "use24HourTime", disabled: "disabled", infoTooltip: "infoTooltip" }, outputs: { cronChange: "cronChange", timeZoneChange: "timeZoneChange" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"cps-scheduler-selector\">\n <cps-button-toggle\n [options]=\"scheduleTypes\"\n [disabled]=\"disabled\"\n [label]=\"label\"\n [infoTooltip]=\"infoTooltip\"\n [(ngModel)]=\"activeScheduleType\"\n (ngModelChange)=\"setActiveScheduleType($event)\">\n </cps-button-toggle>\n</div>\n\n<div\n [ngSwitch]=\"activeScheduleType\"\n class=\"cps-scheduler-container\"\n [ngClass]=\"{ 'cps-scheduler-container-disabled': disabled }\">\n <div *ngSwitchCase=\"'Not set'\" class=\"cps-scheduler-tab-pane\"></div>\n\n <div *ngSwitchCase=\"'Minutes'\" class=\"cps-scheduler-tab-pane\">\n <div class=\"cps-scheduler-tab-pane-row\">\n Every\n <cps-select\n width=\"70px\"\n [disabled]=\"disabled\"\n [returnObject]=\"false\"\n [hideDetails]=\"true\"\n (valueChanged)=\"regenerateCron()\"\n [(ngModel)]=\"state.minutes.minutes\"\n [options]=\"selectOptions.minutes\"\n class=\"cps-scheduler-select-control\">\n </cps-select>\n minute(s)\n </div>\n </div>\n\n <div *ngSwitchCase=\"'Hourly'\" class=\"cps-scheduler-tab-pane\">\n <div class=\"cps-scheduler-tab-pane-row\">\n Every\n <cps-select\n width=\"70px\"\n [disabled]=\"disabled\"\n [returnObject]=\"false\"\n [hideDetails]=\"true\"\n (valueChanged)=\"regenerateCron()\"\n [(ngModel)]=\"state.hourly.hours\"\n [options]=\"selectOptions.hours\"\n class=\"cps-scheduler-select-control\">\n </cps-select>\n hour(s) on minute\n <cps-select\n width=\"70px\"\n [disabled]=\"disabled\"\n [returnObject]=\"false\"\n [hideDetails]=\"true\"\n (valueChanged)=\"regenerateCron()\"\n [(ngModel)]=\"state.hourly.minutes\"\n [options]=\"selectOptions.fullMinutes\"\n class=\"cps-scheduler-select-control\">\n </cps-select>\n </div>\n </div>\n\n <div *ngSwitchCase=\"'Daily'\" class=\"cps-scheduler-tab-pane\">\n <cps-radio-group\n [hideDetails]=\"true\"\n [(ngModel)]=\"state.daily.subTab\"\n (valueChanged)=\"regenerateCron()\"\n [vertical]=\"true\">\n <cps-radio [option]=\"{ value: 'everyDays', disabled: disabled }\">\n <div\n class=\"cps-scheduler-tab-pane-row\"\n [ngClass]=\"{\n 'cps-scheduler-tab-pane-row-disabled':\n state.daily.subTab !== 'everyDays'\n }\">\n Every\n <cps-select\n width=\"70px\"\n [disabled]=\"disabled || state.daily.subTab !== 'everyDays'\"\n [returnObject]=\"false\"\n [hideDetails]=\"true\"\n (valueChanged)=\"regenerateCron()\"\n [(ngModel)]=\"state.daily.everyDays.days\"\n [options]=\"selectOptions.monthDays\"\n class=\"cps-scheduler-select-control\">\n </cps-select>\n day(s) at\n <cps-timepicker\n [disabled]=\"disabled || state.daily.subTab !== 'everyDays'\"\n [use24HourTime]=\"use24HourTime\"\n [mandatoryValue]=\"true\"\n [value]=\"formatTimeValue(state.daily.everyDays)\"\n [hideDetails]=\"true\"\n (valueChanged)=\"onTimeChanged($event, state.daily.everyDays)\">\n </cps-timepicker>\n </div>\n </cps-radio>\n <cps-radio [option]=\"{ value: 'everyWeekDay', disabled: disabled }\">\n <div\n class=\"cps-scheduler-tab-pane-row\"\n [ngClass]=\"{\n 'cps-scheduler-tab-pane-row-disabled':\n state.daily.subTab !== 'everyWeekDay'\n }\">\n Every working day at\n <cps-timepicker\n [disabled]=\"disabled || state.daily.subTab !== 'everyWeekDay'\"\n [use24HourTime]=\"use24HourTime\"\n [mandatoryValue]=\"true\"\n [value]=\"formatTimeValue(state.daily.everyWeekDay)\"\n [hideDetails]=\"true\"\n (valueChanged)=\"onTimeChanged($event, state.daily.everyWeekDay)\">\n </cps-timepicker>\n </div>\n </cps-radio>\n </cps-radio-group>\n </div>\n\n <div *ngSwitchCase=\"'Weekly'\" class=\"cps-scheduler-tab-pane\">\n <div class=\"cps-scheduler-days-checkbox-group\">\n <cps-checkbox\n (valueChanged)=\"regenerateCron()\"\n [disabled]=\"disabled\"\n label=\"Monday\"\n [(ngModel)]=\"state.weekly.MON\">\n </cps-checkbox>\n <cps-checkbox\n (valueChanged)=\"regenerateCron()\"\n [disabled]=\"disabled\"\n label=\"Tuesday\"\n [(ngModel)]=\"state.weekly.TUE\">\n </cps-checkbox>\n <cps-checkbox\n (valueChanged)=\"regenerateCron()\"\n [disabled]=\"disabled\"\n label=\"Wednesday\"\n [(ngModel)]=\"state.weekly.WED\">\n </cps-checkbox>\n <cps-checkbox\n (valueChanged)=\"regenerateCron()\"\n [disabled]=\"disabled\"\n label=\"Thursday\"\n [(ngModel)]=\"state.weekly.THU\">\n </cps-checkbox>\n <cps-checkbox\n (valueChanged)=\"regenerateCron()\"\n [disabled]=\"disabled\"\n label=\"Friday\"\n [(ngModel)]=\"state.weekly.FRI\">\n </cps-checkbox>\n <cps-checkbox\n (valueChanged)=\"regenerateCron()\"\n [disabled]=\"disabled\"\n label=\"Saturday\"\n [(ngModel)]=\"state.weekly.SAT\">\n </cps-checkbox>\n <cps-checkbox\n (valueChanged)=\"regenerateCron()\"\n [disabled]=\"disabled\"\n label=\"Sunday\"\n [(ngModel)]=\"state.weekly.SUN\">\n </cps-checkbox>\n </div>\n <div class=\"cps-scheduler-tab-pane-row\">\n at\n <cps-timepicker\n [disabled]=\"disabled\"\n [use24HourTime]=\"use24HourTime\"\n [mandatoryValue]=\"true\"\n [value]=\"formatTimeValue(state.weekly)\"\n [hideDetails]=\"true\"\n (valueChanged)=\"onTimeChanged($event, state.weekly)\">\n </cps-timepicker>\n </div>\n </div>\n\n <div *ngSwitchCase=\"'Monthly'\" class=\"cps-scheduler-tab-pane\">\n <cps-radio-group\n [hideDetails]=\"true\"\n [(ngModel)]=\"state.monthly.subTab\"\n (valueChanged)=\"regenerateCron()\"\n [vertical]=\"true\">\n <cps-radio [option]=\"{ value: 'specificDay', disabled: disabled }\">\n <div\n class=\"cps-scheduler-tab-pane-row\"\n [ngClass]=\"{\n 'cps-scheduler-tab-pane-row-disabled':\n state.monthly.subTab !== 'specificDay'\n }\">\n On the\n <cps-select\n width=\"120px\"\n [disabled]=\"disabled || state.monthly.subTab !== 'specificDay'\"\n [returnObject]=\"false\"\n [hideDetails]=\"true\"\n (valueChanged)=\"regenerateCron()\"\n [(ngModel)]=\"state.monthly.specificDay.day\"\n [options]=\"selectOptions.monthDaysWithLasts\"\n class=\"cps-scheduler-select-control\">\n </cps-select>\n of every\n <cps-select\n width=\"70px\"\n [disabled]=\"disabled || state.monthly.subTab !== 'specificDay'\"\n [returnObject]=\"false\"\n [hideDetails]=\"true\"\n (valueChanged)=\"regenerateCron()\"\n [(ngModel)]=\"state.monthly.specificDay.months\"\n [options]=\"selectOptions.monthsNumeric\"\n class=\"cps-scheduler-select-control\">\n </cps-select>\n month(s) at\n <cps-timepicker\n [disabled]=\"disabled || state.monthly.subTab !== 'specificDay'\"\n [use24HourTime]=\"use24HourTime\"\n [mandatoryValue]=\"true\"\n [value]=\"formatTimeValue(state.monthly.specificDay)\"\n [hideDetails]=\"true\"\n (valueChanged)=\"onTimeChanged($event, state.monthly.specificDay)\">\n </cps-timepicker>\n <cps-checkbox\n (valueChanged)=\"regenerateCron()\"\n [disabled]=\"disabled || state.monthly.subTab !== 'specificDay'\"\n label=\"During the nearest weekday\"\n [(ngModel)]=\"state.monthly.runOnWeekday\"\n class=\"cps-scheduler-nearest-weekday-checkbox\">\n </cps-checkbox>\n </div>\n </cps-radio>\n\n <cps-radio [option]=\"{ value: 'specificWeekDay', disabled: disabled }\">\n <div\n class=\"cps-scheduler-tab-pane-row\"\n [ngClass]=\"{\n 'cps-scheduler-tab-pane-row-disabled':\n state.monthly.subTab !== 'specificWeekDay'\n }\">\n On the\n <cps-select\n width=\"106px\"\n [disabled]=\"disabled || state.monthly.subTab !== 'specificWeekDay'\"\n [returnObject]=\"false\"\n [hideDetails]=\"true\"\n (valueChanged)=\"regenerateCron()\"\n [(ngModel)]=\"state.monthly.specificWeekDay.monthWeek\"\n [options]=\"selectOptions.monthWeeks\"\n class=\"cps-scheduler-select-control\">\n </cps-select>\n <cps-select\n width=\"130px\"\n [disabled]=\"disabled || state.monthly.subTab !== 'specificWeekDay'\"\n [returnObject]=\"false\"\n [hideDetails]=\"true\"\n (valueChanged)=\"regenerateCron()\"\n [(ngModel)]=\"state.monthly.specificWeekDay.day\"\n [options]=\"selectOptions.days\"\n class=\"cps-scheduler-select-control\">\n </cps-select>\n of every\n <cps-select\n width=\"90px\"\n [disabled]=\"disabled || state.monthly.subTab !== 'specificWeekDay'\"\n [returnObject]=\"false\"\n [hideDetails]=\"true\"\n (valueChanged)=\"regenerateCron()\"\n [(ngModel)]=\"state.monthly.specificWeekDay.months\"\n [options]=\"selectOptions.monthsNumeric\"\n class=\"cps-scheduler-select-control\">\n </cps-select>\n month(s) starting in\n <cps-select\n width=\"120px\"\n [disabled]=\"disabled || state.monthly.subTab !== 'specificWeekDay'\"\n [returnObject]=\"false\"\n [hideDetails]=\"true\"\n (valueChanged)=\"regenerateCron()\"\n [(ngModel)]=\"state.monthly.specificWeekDay.startMonth\"\n [options]=\"selectOptions.months\"\n class=\"cps-scheduler-select-control\">\n </cps-select>\n at\n <cps-timepicker\n [disabled]=\"disabled || state.monthly.subTab !== 'specificWeekDay'\"\n [use24HourTime]=\"use24HourTime\"\n [mandatoryValue]=\"true\"\n [value]=\"formatTimeValue(state.monthly.specificWeekDay)\"\n [hideDetails]=\"true\"\n (valueChanged)=\"\n onTimeChanged($event, state.monthly.specificWeekDay)\n \">\n </cps-timepicker>\n </div>\n </cps-radio>\n </cps-radio-group>\n </div>\n\n <div *ngSwitchCase=\"'Yearly'\" class=\"cps-scheduler-tab-pane\">\n <cps-radio-group\n [hideDetails]=\"true\"\n [(ngModel)]=\"state.yearly.subTab\"\n (valueChanged)=\"regenerateCron()\"\n [vertical]=\"true\">\n <cps-radio [option]=\"{ value: 'specificMonthDay', disabled: disabled }\">\n <div\n class=\"cps-scheduler-tab-pane-row\"\n [ngClass]=\"{\n 'cps-scheduler-tab-pane-row-disabled':\n state.yearly.subTab !== 'specificMonthDay'\n }\">\n Every\n <cps-select\n width=\"120px\"\n [disabled]=\"disabled || state.yearly.subTab !== 'specificMonthDay'\"\n [returnObject]=\"false\"\n [hideDetails]=\"true\"\n (valueChanged)=\"regenerateCron()\"\n [(ngModel)]=\"state.yearly.specificMonthDay.month\"\n [options]=\"selectOptions.months\"\n class=\"cps-scheduler-select-control\">\n </cps-select>\n on the\n <cps-select\n width=\"120px\"\n [disabled]=\"disabled || state.yearly.subTab !== 'specificMonthDay'\"\n [returnObject]=\"false\"\n [hideDetails]=\"true\"\n (valueChanged)=\"regenerateCron()\"\n [(ngModel)]=\"state.yearly.specificMonthDay.day\"\n [options]=\"selectOptions.monthDaysWithLasts\"\n class=\"cps-scheduler-select-control\">\n </cps-select>\n at\n <cps-timepicker\n [disabled]=\"disabled || state.yearly.subTab !== 'specificMonthDay'\"\n [use24HourTime]=\"use24HourTime\"\n [mandatoryValue]=\"true\"\n [value]=\"formatTimeValue(state.yearly.specificMonthDay)\"\n [hideDetails]=\"true\"\n (valueChanged)=\"\n onTimeChanged($event, state.yearly.specificMonthDay)\n \">\n </cps-timepicker>\n <cps-checkbox\n (valueChanged)=\"regenerateCron()\"\n [disabled]=\"disabled || state.yearly.subTab !== 'specificMonthDay'\"\n label=\"During the nearest weekday\"\n [(ngModel)]=\"state.yearly.runOnWeekday\"\n class=\"cps-scheduler-nearest-weekday-checkbox\">\n </cps-checkbox>\n </div>\n </cps-radio>\n\n <cps-radio [option]=\"{ value: 'specificMonthWeek', disabled: disabled }\">\n <div\n class=\"cps-scheduler-tab-pane-row\"\n [ngClass]=\"{\n 'cps-scheduler-tab-pane-row-disabled':\n state.yearly.subTab !== 'specificMonthWeek'\n }\">\n On the\n <cps-select\n width=\"106px\"\n [disabled]=\"disabled || state.yearly.subTab !== 'specificMonthWeek'\"\n [returnObject]=\"false\"\n [hideDetails]=\"true\"\n (valueChanged)=\"regenerateCron()\"\n [(ngModel)]=\"state.yearly.specificMonthWeek.monthWeek\"\n [options]=\"selectOptions.monthWeeks\"\n class=\"cps-scheduler-select-control\">\n </cps-select>\n <cps-select\n width=\"120px\"\n [disabled]=\"disabled || state.yearly.subTab !== 'specificMonthWeek'\"\n [returnObject]=\"false\"\n [hideDetails]=\"true\"\n (valueChanged)=\"regenerateCron()\"\n [(ngModel)]=\"state.yearly.specificMonthWeek.day\"\n [options]=\"selectOptions.days\"\n class=\"cps-scheduler-select-control\">\n </cps-select>\n of\n <cps-select\n width=\"120px\"\n [disabled]=\"disabled || state.yearly.subTab !== 'specificMonthWeek'\"\n [returnObject]=\"false\"\n [hideDetails]=\"true\"\n (valueChanged)=\"regenerateCron()\"\n [(ngModel)]=\"state.yearly.specificMonthWeek.month\"\n [options]=\"selectOptions.months\"\n class=\"cps-scheduler-select-control\">\n </cps-select>\n at\n <cps-timepicker\n [disabled]=\"disabled || state.yearly.subTab !== 'specificMonthWeek'\"\n [use24HourTime]=\"use24HourTime\"\n [mandatoryValue]=\"true\"\n [value]=\"formatTimeValue(state.yearly.specificMonthWeek)\"\n [hideDetails]=\"true\"\n (valueChanged)=\"\n onTimeChanged($event, state.yearly.specificMonthWeek)\n \">\n </cps-timepicker>\n </div>\n </cps-radio>\n </cps-radio-group>\n </div>\n\n <div *ngSwitchCase=\"'Advanced'\">\n <form [formGroup]=\"form\">\n <cps-input\n label=\"\"\n [disabled]=\"disabled\"\n width=\"500px\"\n placeholder=\"Please enter\"\n formControlName=\"advanced\"\n (valueChanged)=\"regenerateCron()\">\n </cps-input>\n </form>\n </div>\n <div class=\"cps-scheduler-time-zone\" *ngIf=\"cron && showTimeZone\">\n <cps-autocomplete\n label=\"Time zone\"\n [(ngModel)]=\"timeZone\"\n (valueChanged)=\"onTimeZoneChanged($event)\"\n [returnObject]=\"false\"\n width=\"300\"\n [options]=\"timeZoneOptions\"></cps-autocomplete>\n </div>\n</div>\n", styles: [":host .cps-scheduler-selector{margin-bottom:24px}:host .cps-scheduler-container{margin-top:10px;margin-left:16px}:host .cps-scheduler-container .cps-scheduler-select-control{margin-left:8px;margin-right:8px}:host .cps-scheduler-container .cps-scheduler-days-checkbox-group{max-width:700px;display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));grid-template-rows:1fr 1fr;grid-gap:20px;margin-bottom:16px}:host .cps-scheduler-container .cps-scheduler-tab-pane{margin-bottom:28px}:host .cps-scheduler-container .cps-scheduler-tab-pane cps-radio-group ::ng-deep .cps-radio-group-content{margin-left:0!important}:host .cps-scheduler-container .cps-scheduler-tab-pane .cps-scheduler-tab-pane-row{display:flex;align-items:center}:host .cps-scheduler-container .cps-scheduler-tab-pane .cps-scheduler-tab-pane-row-disabled{color:var(--cps-color-text-light)}:host .cps-scheduler-container .cps-scheduler-tab-pane .cps-scheduler-nearest-weekday-checkbox{margin-left:16px}:host .cps-scheduler-container .cps-scheduler-tab-pane cps-timepicker{margin-left:8px}:host .cps-scheduler-container-disabled{color:var(--cps-color-text-light)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: CpsButtonToggleComponent, selector: "cps-button-toggle", inputs: ["label", "options", "multiple", "disabled", "mandatory", "equalWidths", "optionTooltipPosition", "infoTooltip", "infoTooltipClass", "infoTooltipMaxWidth", "infoTooltipPersistent", "infoTooltipPosition", "value"], outputs: ["valueChanged"] }, { kind: "component", type: CpsSelectComponent, selector: "cps-select", inputs: ["label", "placeholder", "hint", "returnObject", "multiple", "disabled", "width", "selectAll", "chips", "closableChips", "clearable", "openOnClear", "options", "keepInitialOrder", "optionLabel", "optionValue", "optionInfo", "optionIcon", "optionIconColor", "hideDetails", "persistentClear", "prefixIcon", "prefixIconSize", "loading", "virtualScroll", "numToleratedItems", "infoTooltip", "infoTooltipClass", "infoTooltipMaxWidth", "infoTooltipPersistent", "infoTooltipPosition", "optionsClass", "appearance", "showChevron", "value"], outputs: ["valueChanged", "focused", "blurred"] }, { kind: "component", type: CpsRadioGroupComponent, selector: "cps-radio-group", inputs: ["options", "groupLabel", "vertical", "disabled", "infoTooltip", "infoTooltipClass", "infoTooltipMaxWidth", "infoTooltipPersistent", "infoTooltipPosition", "hint", "hideDetails", "value"], outputs: ["valueChanged", "blurred", "focused"] }, { kind: "component", type: CpsRadioComponent, selector: "cps-radio", inputs: ["option"] }, { kind: "component", type: CpsCheckboxComponent, selector: "cps-checkbox", inputs: ["label", "disabled", "infoTooltip", "infoTooltipClass", "infoTooltipMaxWidth", "infoTooltipPersistent", "infoTooltipPosition", "icon", "iconColor", "value"], outputs: ["valueChanged"] }, { kind: "component", type: CpsInputComponent, selector: "cps-input", inputs: ["label", "hint", "placeholder", "disabled", "readonly", "width", "type", "loading", "clearable", "prefixIcon", "prefixIconClickable", "prefixIconSize", "prefixText", "hideDetails", "persistentClear", "error", "infoTooltip", "infoTooltipClass", "infoTooltipMaxWidth", "infoTooltipPersistent", "infoTooltipPosition", "appearance", "valueToDisplay", "value"], outputs: ["valueChanged", "focused", "prefixIconClicked", "blurred", "cleared", "enterClicked"] }, { kind: "component", type: CpsTimepickerComponent, selector: "cps-timepicker", inputs: ["label", "disabled", "use24HourTime", "withSeconds", "hint", "hideDetails", "infoTooltip", "infoTooltipClass", "infoTooltipMaxWidth", "infoTooltipPersistent", "infoTooltipPosition", "mandatoryValue", "value"], outputs: ["valueChanged", "focused", "blurred"] }, { kind: "component", type: CpsAutocompleteComponent, selector: "cps-autocomplete", inputs: ["label", "placeholder", "hint", "returnObject", "multiple", "disabled", "width", "selectAll", "showChevron", "withOptionsAliases", "useOptionsAliasesWhenNoMatch", "optionAlias", "chips", "closableChips", "clearable", "openOnClear", "keepInitialOrder", "optionLabel", "optionValue", "optionInfo", "hideDetails", "persistentClear", "prefixIcon", "prefixIconSize", "loading", "loadingMessage", "showLoadingMessage", "emptyMessage", "showEmptyMessage", "virtualScroll", "numToleratedItems", "externalError", "infoTooltip", "infoTooltipClass", "infoTooltipMaxWidth", "infoTooltipPersistent", "infoTooltipPosition", "appearance", "emptyOptionIndex", "inputChangeDebounceTime", "validating", "value", "options"], outputs: ["valueChanged", "inputChanged", "focused", "blurred"] }] }); }
|
|
13389
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: CpsSchedulerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
13390
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.2.1", type: CpsSchedulerComponent, isStandalone: true, selector: "cps-scheduler", inputs: { label: "label", cron: "cron", timeZone: "timeZone", showNotSet: "showNotSet", showAdvanced: "showAdvanced", showMinutes: "showMinutes", showTimeZone: "showTimeZone", defaultTime: "defaultTime", use24HourTime: "use24HourTime", disabled: "disabled", infoTooltip: "infoTooltip" }, outputs: { cronChange: "cronChange", timeZoneChange: "timeZoneChange" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"cps-scheduler-selector\">\n <cps-button-toggle\n data-cy=\"schedule-type-toggle\"\n [options]=\"scheduleTypes\"\n [disabled]=\"disabled\"\n [label]=\"label\"\n [infoTooltip]=\"infoTooltip\"\n [(ngModel)]=\"activeScheduleType\"\n (ngModelChange)=\"setActiveScheduleType($event)\">\n </cps-button-toggle>\n</div>\n\n<div\n [ngSwitch]=\"activeScheduleType\"\n class=\"cps-scheduler-container\"\n [class.cps-scheduler-container-disabled]=\"disabled\">\n <div\n *ngSwitchCase=\"'Not set'\"\n class=\"cps-scheduler-tab-pane\"\n data-cy=\"not-set-config\"></div>\n\n <div\n *ngSwitchCase=\"'Minutes'\"\n class=\"cps-scheduler-tab-pane\"\n data-cy=\"minutes-config\">\n <div class=\"cps-scheduler-tab-pane-row\">\n Every\n <cps-select\n width=\"70px\"\n [disabled]=\"disabled\"\n [returnObject]=\"false\"\n [hideDetails]=\"true\"\n data-cy=\"minutes-input\"\n (valueChanged)=\"regenerateCron()\"\n [(ngModel)]=\"state.minutes.minutes\"\n [options]=\"selectOptions.minutes\"\n class=\"cps-scheduler-select-control\">\n </cps-select>\n minute(s)\n </div>\n </div>\n\n <div\n *ngSwitchCase=\"'Hourly'\"\n class=\"cps-scheduler-tab-pane\"\n data-cy=\"hourly-config\">\n <div class=\"cps-scheduler-tab-pane-row\">\n Every\n <cps-select\n width=\"70px\"\n [disabled]=\"disabled\"\n [returnObject]=\"false\"\n [hideDetails]=\"true\"\n data-cy=\"hourly-hours-input\"\n (valueChanged)=\"regenerateCron()\"\n [(ngModel)]=\"state.hourly.hours\"\n [options]=\"selectOptions.hours\"\n class=\"cps-scheduler-select-control\">\n </cps-select>\n hour(s) on minute\n <cps-select\n width=\"70px\"\n [disabled]=\"disabled\"\n [returnObject]=\"false\"\n [hideDetails]=\"true\"\n data-cy=\"hourly-minutes-input\"\n (valueChanged)=\"regenerateCron()\"\n [(ngModel)]=\"state.hourly.minutes\"\n [options]=\"selectOptions.fullMinutes\"\n class=\"cps-scheduler-select-control\">\n </cps-select>\n </div>\n </div>\n\n <div\n *ngSwitchCase=\"'Daily'\"\n class=\"cps-scheduler-tab-pane\"\n data-cy=\"daily-config\">\n <cps-radio-group\n [hideDetails]=\"true\"\n [(ngModel)]=\"state.daily.subTab\"\n (valueChanged)=\"regenerateCron()\"\n [vertical]=\"true\">\n <cps-radio\n [option]=\"{ value: 'everyDays', disabled: disabled }\"\n data-cy=\"daily-subtab-everyDays\">\n <div\n class=\"cps-scheduler-tab-pane-row\"\n [class.cps-scheduler-tab-pane-row-disabled]=\"\n state.daily.subTab !== 'everyDays'\n \">\n Every\n <cps-select\n width=\"70px\"\n data-cy=\"daily-every-days-input\"\n [disabled]=\"disabled || state.daily.subTab !== 'everyDays'\"\n [returnObject]=\"false\"\n [hideDetails]=\"true\"\n (valueChanged)=\"regenerateCron()\"\n [(ngModel)]=\"state.daily.everyDays.days\"\n [options]=\"selectOptions.monthDays\"\n class=\"cps-scheduler-select-control\">\n </cps-select>\n day(s) at\n <cps-timepicker\n data-cy=\"daily-timepicker\"\n [disabled]=\"disabled || state.daily.subTab !== 'everyDays'\"\n [use24HourTime]=\"use24HourTime\"\n [mandatoryValue]=\"true\"\n [value]=\"formatTimeValue(state.daily.everyDays)\"\n [hideDetails]=\"true\"\n (valueChanged)=\"onTimeChanged($event, state.daily.everyDays)\">\n </cps-timepicker>\n </div>\n </cps-radio>\n <cps-radio\n data-cy=\"daily-subtab-everyWeekDay\"\n [option]=\"{ value: 'everyWeekDay', disabled: disabled }\">\n <div\n class=\"cps-scheduler-tab-pane-row\"\n data-cy=\"daily-weekday-config\"\n [class.cps-scheduler-tab-pane-row-disabled]=\"\n state.daily.subTab !== 'everyWeekDay'\n \">\n Every working day at\n <cps-timepicker\n [disabled]=\"disabled || state.daily.subTab !== 'everyWeekDay'\"\n [use24HourTime]=\"use24HourTime\"\n [mandatoryValue]=\"true\"\n [value]=\"formatTimeValue(state.daily.everyWeekDay)\"\n [hideDetails]=\"true\"\n (valueChanged)=\"onTimeChanged($event, state.daily.everyWeekDay)\">\n </cps-timepicker>\n </div>\n </cps-radio>\n </cps-radio-group>\n </div>\n\n <div\n *ngSwitchCase=\"'Weekly'\"\n class=\"cps-scheduler-tab-pane\"\n data-cy=\"weekly-config\">\n <div class=\"cps-scheduler-days-checkbox-group\">\n <cps-checkbox\n (valueChanged)=\"regenerateCron()\"\n [disabled]=\"disabled\"\n data-cy=\"weekly-MON\"\n label=\"Monday\"\n [(ngModel)]=\"state.weekly.MON\">\n </cps-checkbox>\n <cps-checkbox\n (valueChanged)=\"regenerateCron()\"\n [disabled]=\"disabled\"\n data-cy=\"weekly-TUE\"\n label=\"Tuesday\"\n [(ngModel)]=\"state.weekly.TUE\">\n </cps-checkbox>\n <cps-checkbox\n (valueChanged)=\"regenerateCron()\"\n [disabled]=\"disabled\"\n data-cy=\"weekly-WED\"\n label=\"Wednesday\"\n [(ngModel)]=\"state.weekly.WED\">\n </cps-checkbox>\n <cps-checkbox\n (valueChanged)=\"regenerateCron()\"\n [disabled]=\"disabled\"\n data-cy=\"weekly-THU\"\n label=\"Thursday\"\n [(ngModel)]=\"state.weekly.THU\">\n </cps-checkbox>\n <cps-checkbox\n (valueChanged)=\"regenerateCron()\"\n [disabled]=\"disabled\"\n data-cy=\"weekly-FRI\"\n label=\"Friday\"\n [(ngModel)]=\"state.weekly.FRI\">\n </cps-checkbox>\n <cps-checkbox\n (valueChanged)=\"regenerateCron()\"\n [disabled]=\"disabled\"\n data-cy=\"weekly-SAT\"\n label=\"Saturday\"\n [(ngModel)]=\"state.weekly.SAT\">\n </cps-checkbox>\n <cps-checkbox\n (valueChanged)=\"regenerateCron()\"\n [disabled]=\"disabled\"\n data-cy=\"weekly-SUN\"\n label=\"Sunday\"\n [(ngModel)]=\"state.weekly.SUN\">\n </cps-checkbox>\n </div>\n <div class=\"cps-scheduler-tab-pane-row\">\n at\n <cps-timepicker\n [disabled]=\"disabled\"\n data-cy=\"weekly-timepicker\"\n [use24HourTime]=\"use24HourTime\"\n [mandatoryValue]=\"true\"\n [value]=\"formatTimeValue(state.weekly)\"\n [hideDetails]=\"true\"\n (valueChanged)=\"onTimeChanged($event, state.weekly)\">\n </cps-timepicker>\n </div>\n </div>\n\n <div\n *ngSwitchCase=\"'Monthly'\"\n class=\"cps-scheduler-tab-pane\"\n data-cy=\"monthly-config\">\n <cps-radio-group\n [hideDetails]=\"true\"\n [(ngModel)]=\"state.monthly.subTab\"\n (valueChanged)=\"regenerateCron()\"\n [vertical]=\"true\">\n <cps-radio\n [option]=\"{ value: 'specificDay', disabled: disabled }\"\n data-cy=\"monthly-subtab-specificDay\">\n <div\n class=\"cps-scheduler-tab-pane-row\"\n [class.cps-scheduler-tab-pane-row-disabled]=\"\n state.monthly.subTab !== 'specificDay'\n \">\n On the\n <cps-select\n width=\"120px\"\n data-cy=\"monthly-day-select\"\n [disabled]=\"disabled || state.monthly.subTab !== 'specificDay'\"\n [returnObject]=\"false\"\n [hideDetails]=\"true\"\n (valueChanged)=\"regenerateCron()\"\n [(ngModel)]=\"state.monthly.specificDay.day\"\n [options]=\"selectOptions.monthDaysWithLasts\"\n class=\"cps-scheduler-select-control\">\n </cps-select>\n of every\n <cps-select\n width=\"70px\"\n data-cy=\"monthly-months-input\"\n [disabled]=\"disabled || state.monthly.subTab !== 'specificDay'\"\n [returnObject]=\"false\"\n [hideDetails]=\"true\"\n (valueChanged)=\"regenerateCron()\"\n [(ngModel)]=\"state.monthly.specificDay.months\"\n [options]=\"selectOptions.monthsNumeric\"\n class=\"cps-scheduler-select-control\">\n </cps-select>\n month(s) at\n <cps-timepicker\n [disabled]=\"disabled || state.monthly.subTab !== 'specificDay'\"\n [use24HourTime]=\"use24HourTime\"\n [mandatoryValue]=\"true\"\n [value]=\"formatTimeValue(state.monthly.specificDay)\"\n [hideDetails]=\"true\"\n (valueChanged)=\"onTimeChanged($event, state.monthly.specificDay)\">\n </cps-timepicker>\n <cps-checkbox\n data-cy=\"monthly-weekday-toggle\"\n (valueChanged)=\"regenerateCron()\"\n [disabled]=\"disabled || state.monthly.subTab !== 'specificDay'\"\n label=\"During the nearest weekday\"\n [(ngModel)]=\"state.monthly.runOnWeekday\"\n class=\"cps-scheduler-nearest-weekday-checkbox\">\n </cps-checkbox>\n </div>\n </cps-radio>\n\n <cps-radio\n [option]=\"{ value: 'specificWeekDay', disabled: disabled }\"\n data-cy=\"monthly-subtab-specificWeekDay\">\n <div\n class=\"cps-scheduler-tab-pane-row\"\n [class.cps-scheduler-tab-pane-row-disabled]=\"\n state.monthly.subTab !== 'specificWeekDay'\n \">\n On the\n <cps-select\n width=\"106px\"\n data-cy=\"monthly-week-select\"\n [disabled]=\"disabled || state.monthly.subTab !== 'specificWeekDay'\"\n [returnObject]=\"false\"\n [hideDetails]=\"true\"\n (valueChanged)=\"regenerateCron()\"\n [(ngModel)]=\"state.monthly.specificWeekDay.monthWeek\"\n [options]=\"selectOptions.monthWeeks\"\n class=\"cps-scheduler-select-control\">\n </cps-select>\n <cps-select\n width=\"130px\"\n data-cy=\"monthly-weekday-select\"\n [disabled]=\"disabled || state.monthly.subTab !== 'specificWeekDay'\"\n [returnObject]=\"false\"\n [hideDetails]=\"true\"\n (valueChanged)=\"regenerateCron()\"\n [(ngModel)]=\"state.monthly.specificWeekDay.day\"\n [options]=\"selectOptions.days\"\n class=\"cps-scheduler-select-control\">\n </cps-select>\n of every\n <cps-select\n width=\"90px\"\n [disabled]=\"disabled || state.monthly.subTab !== 'specificWeekDay'\"\n [returnObject]=\"false\"\n [hideDetails]=\"true\"\n (valueChanged)=\"regenerateCron()\"\n data-cy=\"monthly-weekday-months-input\"\n [(ngModel)]=\"state.monthly.specificWeekDay.months\"\n [options]=\"selectOptions.monthsNumeric\"\n class=\"cps-scheduler-select-control\">\n </cps-select>\n month(s) starting in\n <cps-select\n width=\"120px\"\n [disabled]=\"disabled || state.monthly.subTab !== 'specificWeekDay'\"\n [returnObject]=\"false\"\n [hideDetails]=\"true\"\n data-cy=\"monthly-weekday-start-month-select\"\n (valueChanged)=\"regenerateCron()\"\n [(ngModel)]=\"state.monthly.specificWeekDay.startMonth\"\n [options]=\"selectOptions.months\"\n class=\"cps-scheduler-select-control\">\n </cps-select>\n at\n <cps-timepicker\n [disabled]=\"disabled || state.monthly.subTab !== 'specificWeekDay'\"\n [use24HourTime]=\"use24HourTime\"\n [mandatoryValue]=\"true\"\n data-cy=\"monthly-weekday-timepicker\"\n [value]=\"formatTimeValue(state.monthly.specificWeekDay)\"\n [hideDetails]=\"true\"\n (valueChanged)=\"\n onTimeChanged($event, state.monthly.specificWeekDay)\n \">\n </cps-timepicker>\n </div>\n </cps-radio>\n </cps-radio-group>\n </div>\n\n <div\n *ngSwitchCase=\"'Yearly'\"\n class=\"cps-scheduler-tab-pane\"\n data-cy=\"yearly-config\">\n <cps-radio-group\n [hideDetails]=\"true\"\n [(ngModel)]=\"state.yearly.subTab\"\n (valueChanged)=\"regenerateCron()\"\n [vertical]=\"true\">\n <cps-radio\n [option]=\"{ value: 'specificMonthDay', disabled: disabled }\"\n data-cy=\"yearly-subtab-specificMonthDay\">\n <div\n class=\"cps-scheduler-tab-pane-row\"\n [class.cps-scheduler-tab-pane-row-disabled]=\"\n state.yearly.subTab !== 'specificMonthDay'\n \">\n Every\n <cps-select\n width=\"120px\"\n [disabled]=\"disabled || state.yearly.subTab !== 'specificMonthDay'\"\n [returnObject]=\"false\"\n [hideDetails]=\"true\"\n (valueChanged)=\"regenerateCron()\"\n [(ngModel)]=\"state.yearly.specificMonthDay.month\"\n [options]=\"selectOptions.months\"\n data-cy=\"yearly-month-select\"\n class=\"cps-scheduler-select-control\">\n </cps-select>\n on the\n <cps-select\n width=\"120px\"\n data-cy=\"yearly-day-select\"\n [disabled]=\"disabled || state.yearly.subTab !== 'specificMonthDay'\"\n [returnObject]=\"false\"\n [hideDetails]=\"true\"\n (valueChanged)=\"regenerateCron()\"\n [(ngModel)]=\"state.yearly.specificMonthDay.day\"\n [options]=\"selectOptions.monthDaysWithLasts\"\n class=\"cps-scheduler-select-control\">\n </cps-select>\n at\n <cps-timepicker\n [disabled]=\"disabled || state.yearly.subTab !== 'specificMonthDay'\"\n [use24HourTime]=\"use24HourTime\"\n [mandatoryValue]=\"true\"\n [value]=\"formatTimeValue(state.yearly.specificMonthDay)\"\n [hideDetails]=\"true\"\n (valueChanged)=\"\n onTimeChanged($event, state.yearly.specificMonthDay)\n \">\n </cps-timepicker>\n <cps-checkbox\n data-cy=\"yearly-weekday-toggle\"\n (valueChanged)=\"regenerateCron()\"\n [disabled]=\"disabled || state.yearly.subTab !== 'specificMonthDay'\"\n label=\"During the nearest weekday\"\n [(ngModel)]=\"state.yearly.runOnWeekday\"\n class=\"cps-scheduler-nearest-weekday-checkbox\">\n </cps-checkbox>\n </div>\n </cps-radio>\n\n <cps-radio\n [option]=\"{ value: 'specificMonthWeek', disabled: disabled }\"\n data-cy=\"yearly-subtab-specificMonthWeek\">\n <div\n class=\"cps-scheduler-tab-pane-row\"\n [class.cps-scheduler-tab-pane-row-disabled]=\"\n state.yearly.subTab !== 'specificMonthWeek'\n \">\n On the\n <cps-select\n width=\"106px\"\n data-cy=\"yearly-week-select\"\n [disabled]=\"disabled || state.yearly.subTab !== 'specificMonthWeek'\"\n [returnObject]=\"false\"\n [hideDetails]=\"true\"\n (valueChanged)=\"regenerateCron()\"\n [(ngModel)]=\"state.yearly.specificMonthWeek.monthWeek\"\n [options]=\"selectOptions.monthWeeks\"\n class=\"cps-scheduler-select-control\">\n </cps-select>\n <cps-select\n width=\"120px\"\n data-cy=\"yearly-weekday-select\"\n [disabled]=\"disabled || state.yearly.subTab !== 'specificMonthWeek'\"\n [returnObject]=\"false\"\n [hideDetails]=\"true\"\n (valueChanged)=\"regenerateCron()\"\n [(ngModel)]=\"state.yearly.specificMonthWeek.day\"\n [options]=\"selectOptions.days\"\n class=\"cps-scheduler-select-control\">\n </cps-select>\n of\n <cps-select\n width=\"120px\"\n [disabled]=\"disabled || state.yearly.subTab !== 'specificMonthWeek'\"\n [returnObject]=\"false\"\n [hideDetails]=\"true\"\n (valueChanged)=\"regenerateCron()\"\n [(ngModel)]=\"state.yearly.specificMonthWeek.month\"\n [options]=\"selectOptions.months\"\n class=\"cps-scheduler-select-control\">\n </cps-select>\n at\n <cps-timepicker\n [disabled]=\"disabled || state.yearly.subTab !== 'specificMonthWeek'\"\n [use24HourTime]=\"use24HourTime\"\n [mandatoryValue]=\"true\"\n [value]=\"formatTimeValue(state.yearly.specificMonthWeek)\"\n [hideDetails]=\"true\"\n (valueChanged)=\"\n onTimeChanged($event, state.yearly.specificMonthWeek)\n \">\n </cps-timepicker>\n </div>\n </cps-radio>\n </cps-radio-group>\n </div>\n\n <div *ngSwitchCase=\"'Advanced'\" data-cy=\"advanced-config\">\n <form [formGroup]=\"form\">\n <cps-input\n label=\"\"\n data-cy=\"advanced-cron-input\"\n [disabled]=\"disabled\"\n width=\"500px\"\n placeholder=\"Please enter\"\n formControlName=\"advanced\"\n (valueChanged)=\"regenerateCron()\">\n </cps-input>\n </form>\n </div>\n\n <div\n class=\"cps-scheduler-time-zone\"\n *ngIf=\"cron && showTimeZone\"\n data-cy=\"timezone-selector\">\n <cps-autocomplete\n label=\"Time zone\"\n data-cy=\"timezone-select\"\n [(ngModel)]=\"timeZone\"\n (valueChanged)=\"onTimeZoneChanged($event)\"\n [returnObject]=\"false\"\n width=\"300\"\n [options]=\"timeZoneOptions\">\n </cps-autocomplete>\n </div>\n</div>\n", styles: [":host .cps-scheduler-selector{margin-bottom:24px}:host .cps-scheduler-container{margin-top:10px;margin-left:16px}:host .cps-scheduler-container .cps-scheduler-select-control{margin-left:8px;margin-right:8px}:host .cps-scheduler-container .cps-scheduler-days-checkbox-group{max-width:700px;display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));grid-template-rows:1fr 1fr;grid-gap:20px;margin-bottom:16px}:host .cps-scheduler-container .cps-scheduler-tab-pane{margin-bottom:28px}:host .cps-scheduler-container .cps-scheduler-tab-pane cps-radio-group ::ng-deep .cps-radio-group-content{margin-left:0!important}:host .cps-scheduler-container .cps-scheduler-tab-pane .cps-scheduler-tab-pane-row{display:flex;align-items:center}:host .cps-scheduler-container .cps-scheduler-tab-pane .cps-scheduler-tab-pane-row-disabled{color:var(--cps-color-text-light)}:host .cps-scheduler-container .cps-scheduler-tab-pane .cps-scheduler-nearest-weekday-checkbox{margin-left:16px}:host .cps-scheduler-container .cps-scheduler-tab-pane cps-timepicker{margin-left:8px}:host .cps-scheduler-container-disabled{color:var(--cps-color-text-light)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: CpsButtonToggleComponent, selector: "cps-button-toggle", inputs: ["label", "options", "multiple", "disabled", "mandatory", "equalWidths", "optionTooltipPosition", "infoTooltip", "infoTooltipClass", "infoTooltipMaxWidth", "infoTooltipPersistent", "infoTooltipPosition", "value"], outputs: ["valueChanged"] }, { kind: "component", type: CpsSelectComponent, selector: "cps-select", inputs: ["label", "placeholder", "hint", "returnObject", "multiple", "disabled", "width", "selectAll", "chips", "closableChips", "clearable", "openOnClear", "options", "keepInitialOrder", "optionLabel", "optionValue", "optionInfo", "optionIcon", "optionIconColor", "hideDetails", "persistentClear", "prefixIcon", "prefixIconSize", "loading", "virtualScroll", "numToleratedItems", "infoTooltip", "infoTooltipClass", "infoTooltipMaxWidth", "infoTooltipPersistent", "infoTooltipPosition", "optionsClass", "appearance", "showChevron", "value"], outputs: ["valueChanged", "focused", "blurred"] }, { kind: "component", type: CpsRadioGroupComponent, selector: "cps-radio-group", inputs: ["options", "groupLabel", "vertical", "disabled", "infoTooltip", "infoTooltipClass", "infoTooltipMaxWidth", "infoTooltipPersistent", "infoTooltipPosition", "hint", "hideDetails", "value"], outputs: ["valueChanged", "blurred", "focused"] }, { kind: "component", type: CpsRadioComponent, selector: "cps-radio", inputs: ["option"] }, { kind: "component", type: CpsCheckboxComponent, selector: "cps-checkbox", inputs: ["label", "disabled", "infoTooltip", "infoTooltipClass", "infoTooltipMaxWidth", "infoTooltipPersistent", "infoTooltipPosition", "icon", "iconColor", "value"], outputs: ["valueChanged"] }, { kind: "component", type: CpsInputComponent, selector: "cps-input", inputs: ["label", "hint", "placeholder", "disabled", "readonly", "width", "type", "loading", "clearable", "prefixIcon", "prefixIconClickable", "prefixIconSize", "prefixText", "hideDetails", "persistentClear", "error", "infoTooltip", "infoTooltipClass", "infoTooltipMaxWidth", "infoTooltipPersistent", "infoTooltipPosition", "appearance", "valueToDisplay", "value"], outputs: ["valueChanged", "focused", "prefixIconClicked", "blurred", "cleared", "enterClicked"] }, { kind: "component", type: CpsTimepickerComponent, selector: "cps-timepicker", inputs: ["label", "disabled", "use24HourTime", "withSeconds", "hint", "hideDetails", "infoTooltip", "infoTooltipClass", "infoTooltipMaxWidth", "infoTooltipPersistent", "infoTooltipPosition", "mandatoryValue", "value"], outputs: ["valueChanged", "focused", "blurred"] }, { kind: "component", type: CpsAutocompleteComponent, selector: "cps-autocomplete", inputs: ["label", "placeholder", "hint", "returnObject", "multiple", "disabled", "width", "selectAll", "showChevron", "withOptionsAliases", "useOptionsAliasesWhenNoMatch", "optionAlias", "chips", "closableChips", "clearable", "openOnClear", "keepInitialOrder", "optionLabel", "optionValue", "optionInfo", "hideDetails", "persistentClear", "prefixIcon", "prefixIconSize", "loading", "loadingMessage", "showLoadingMessage", "emptyMessage", "showEmptyMessage", "virtualScroll", "numToleratedItems", "externalError", "infoTooltip", "infoTooltipClass", "infoTooltipMaxWidth", "infoTooltipPersistent", "infoTooltipPosition", "appearance", "emptyOptionIndex", "inputChangeDebounceTime", "validating", "value", "options"], outputs: ["valueChanged", "inputChanged", "focused", "blurred"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
12948
13391
|
}
|
|
12949
13392
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: CpsSchedulerComponent, decorators: [{
|
|
12950
13393
|
type: Component,
|
|
@@ -12960,8 +13403,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.1", ngImpor
|
|
|
12960
13403
|
CpsInputComponent,
|
|
12961
13404
|
CpsTimepickerComponent,
|
|
12962
13405
|
CpsAutocompleteComponent
|
|
12963
|
-
], template: "<div class=\"cps-scheduler-selector\">\n <cps-button-toggle\n [options]=\"scheduleTypes\"\n [disabled]=\"disabled\"\n [label]=\"label\"\n [infoTooltip]=\"infoTooltip\"\n [(ngModel)]=\"activeScheduleType\"\n (ngModelChange)=\"setActiveScheduleType($event)\">\n </cps-button-toggle>\n</div>\n\n<div\n [ngSwitch]=\"activeScheduleType\"\n class=\"cps-scheduler-container\"\n [ngClass]=\"{ 'cps-scheduler-container-disabled': disabled }\">\n <div *ngSwitchCase=\"'Not set'\" class=\"cps-scheduler-tab-pane\"></div>\n\n <div *ngSwitchCase=\"'Minutes'\" class=\"cps-scheduler-tab-pane\">\n <div class=\"cps-scheduler-tab-pane-row\">\n Every\n <cps-select\n width=\"70px\"\n [disabled]=\"disabled\"\n [returnObject]=\"false\"\n [hideDetails]=\"true\"\n (valueChanged)=\"regenerateCron()\"\n [(ngModel)]=\"state.minutes.minutes\"\n [options]=\"selectOptions.minutes\"\n class=\"cps-scheduler-select-control\">\n </cps-select>\n minute(s)\n </div>\n </div>\n\n <div *ngSwitchCase=\"'Hourly'\" class=\"cps-scheduler-tab-pane\">\n <div class=\"cps-scheduler-tab-pane-row\">\n Every\n <cps-select\n width=\"70px\"\n [disabled]=\"disabled\"\n [returnObject]=\"false\"\n [hideDetails]=\"true\"\n (valueChanged)=\"regenerateCron()\"\n [(ngModel)]=\"state.hourly.hours\"\n [options]=\"selectOptions.hours\"\n class=\"cps-scheduler-select-control\">\n </cps-select>\n hour(s) on minute\n <cps-select\n width=\"70px\"\n [disabled]=\"disabled\"\n [returnObject]=\"false\"\n [hideDetails]=\"true\"\n (valueChanged)=\"regenerateCron()\"\n [(ngModel)]=\"state.hourly.minutes\"\n [options]=\"selectOptions.fullMinutes\"\n class=\"cps-scheduler-select-control\">\n </cps-select>\n </div>\n </div>\n\n <div *ngSwitchCase=\"'Daily'\" class=\"cps-scheduler-tab-pane\">\n <cps-radio-group\n [hideDetails]=\"true\"\n [(ngModel)]=\"state.daily.subTab\"\n (valueChanged)=\"regenerateCron()\"\n [vertical]=\"true\">\n <cps-radio [option]=\"{ value: 'everyDays', disabled: disabled }\">\n <div\n class=\"cps-scheduler-tab-pane-row\"\n [ngClass]=\"{\n 'cps-scheduler-tab-pane-row-disabled':\n state.daily.subTab !== 'everyDays'\n }\">\n Every\n <cps-select\n width=\"70px\"\n [disabled]=\"disabled || state.daily.subTab !== 'everyDays'\"\n [returnObject]=\"false\"\n [hideDetails]=\"true\"\n (valueChanged)=\"regenerateCron()\"\n [(ngModel)]=\"state.daily.everyDays.days\"\n [options]=\"selectOptions.monthDays\"\n class=\"cps-scheduler-select-control\">\n </cps-select>\n day(s) at\n <cps-timepicker\n [disabled]=\"disabled || state.daily.subTab !== 'everyDays'\"\n [use24HourTime]=\"use24HourTime\"\n [mandatoryValue]=\"true\"\n [value]=\"formatTimeValue(state.daily.everyDays)\"\n [hideDetails]=\"true\"\n (valueChanged)=\"onTimeChanged($event, state.daily.everyDays)\">\n </cps-timepicker>\n </div>\n </cps-radio>\n <cps-radio [option]=\"{ value: 'everyWeekDay', disabled: disabled }\">\n <div\n class=\"cps-scheduler-tab-pane-row\"\n [ngClass]=\"{\n 'cps-scheduler-tab-pane-row-disabled':\n state.daily.subTab !== 'everyWeekDay'\n }\">\n Every working day at\n <cps-timepicker\n [disabled]=\"disabled || state.daily.subTab !== 'everyWeekDay'\"\n [use24HourTime]=\"use24HourTime\"\n [mandatoryValue]=\"true\"\n [value]=\"formatTimeValue(state.daily.everyWeekDay)\"\n [hideDetails]=\"true\"\n (valueChanged)=\"onTimeChanged($event, state.daily.everyWeekDay)\">\n </cps-timepicker>\n </div>\n </cps-radio>\n </cps-radio-group>\n </div>\n\n <div *ngSwitchCase=\"'Weekly'\" class=\"cps-scheduler-tab-pane\">\n <div class=\"cps-scheduler-days-checkbox-group\">\n <cps-checkbox\n (valueChanged)=\"regenerateCron()\"\n [disabled]=\"disabled\"\n label=\"Monday\"\n [(ngModel)]=\"state.weekly.MON\">\n </cps-checkbox>\n <cps-checkbox\n (valueChanged)=\"regenerateCron()\"\n [disabled]=\"disabled\"\n label=\"Tuesday\"\n [(ngModel)]=\"state.weekly.TUE\">\n </cps-checkbox>\n <cps-checkbox\n (valueChanged)=\"regenerateCron()\"\n [disabled]=\"disabled\"\n label=\"Wednesday\"\n [(ngModel)]=\"state.weekly.WED\">\n </cps-checkbox>\n <cps-checkbox\n (valueChanged)=\"regenerateCron()\"\n [disabled]=\"disabled\"\n label=\"Thursday\"\n [(ngModel)]=\"state.weekly.THU\">\n </cps-checkbox>\n <cps-checkbox\n (valueChanged)=\"regenerateCron()\"\n [disabled]=\"disabled\"\n label=\"Friday\"\n [(ngModel)]=\"state.weekly.FRI\">\n </cps-checkbox>\n <cps-checkbox\n (valueChanged)=\"regenerateCron()\"\n [disabled]=\"disabled\"\n label=\"Saturday\"\n [(ngModel)]=\"state.weekly.SAT\">\n </cps-checkbox>\n <cps-checkbox\n (valueChanged)=\"regenerateCron()\"\n [disabled]=\"disabled\"\n label=\"Sunday\"\n [(ngModel)]=\"state.weekly.SUN\">\n </cps-checkbox>\n </div>\n <div class=\"cps-scheduler-tab-pane-row\">\n at\n <cps-timepicker\n [disabled]=\"disabled\"\n [use24HourTime]=\"use24HourTime\"\n [mandatoryValue]=\"true\"\n [value]=\"formatTimeValue(state.weekly)\"\n [hideDetails]=\"true\"\n (valueChanged)=\"onTimeChanged($event, state.weekly)\">\n </cps-timepicker>\n </div>\n </div>\n\n <div *ngSwitchCase=\"'Monthly'\" class=\"cps-scheduler-tab-pane\">\n <cps-radio-group\n [hideDetails]=\"true\"\n [(ngModel)]=\"state.monthly.subTab\"\n (valueChanged)=\"regenerateCron()\"\n [vertical]=\"true\">\n <cps-radio [option]=\"{ value: 'specificDay', disabled: disabled }\">\n <div\n class=\"cps-scheduler-tab-pane-row\"\n [ngClass]=\"{\n 'cps-scheduler-tab-pane-row-disabled':\n state.monthly.subTab !== 'specificDay'\n }\">\n On the\n <cps-select\n width=\"120px\"\n [disabled]=\"disabled || state.monthly.subTab !== 'specificDay'\"\n [returnObject]=\"false\"\n [hideDetails]=\"true\"\n (valueChanged)=\"regenerateCron()\"\n [(ngModel)]=\"state.monthly.specificDay.day\"\n [options]=\"selectOptions.monthDaysWithLasts\"\n class=\"cps-scheduler-select-control\">\n </cps-select>\n of every\n <cps-select\n width=\"70px\"\n [disabled]=\"disabled || state.monthly.subTab !== 'specificDay'\"\n [returnObject]=\"false\"\n [hideDetails]=\"true\"\n (valueChanged)=\"regenerateCron()\"\n [(ngModel)]=\"state.monthly.specificDay.months\"\n [options]=\"selectOptions.monthsNumeric\"\n class=\"cps-scheduler-select-control\">\n </cps-select>\n month(s) at\n <cps-timepicker\n [disabled]=\"disabled || state.monthly.subTab !== 'specificDay'\"\n [use24HourTime]=\"use24HourTime\"\n [mandatoryValue]=\"true\"\n [value]=\"formatTimeValue(state.monthly.specificDay)\"\n [hideDetails]=\"true\"\n (valueChanged)=\"onTimeChanged($event, state.monthly.specificDay)\">\n </cps-timepicker>\n <cps-checkbox\n (valueChanged)=\"regenerateCron()\"\n [disabled]=\"disabled || state.monthly.subTab !== 'specificDay'\"\n label=\"During the nearest weekday\"\n [(ngModel)]=\"state.monthly.runOnWeekday\"\n class=\"cps-scheduler-nearest-weekday-checkbox\">\n </cps-checkbox>\n </div>\n </cps-radio>\n\n <cps-radio [option]=\"{ value: 'specificWeekDay', disabled: disabled }\">\n <div\n class=\"cps-scheduler-tab-pane-row\"\n [ngClass]=\"{\n 'cps-scheduler-tab-pane-row-disabled':\n state.monthly.subTab !== 'specificWeekDay'\n }\">\n On the\n <cps-select\n width=\"106px\"\n [disabled]=\"disabled || state.monthly.subTab !== 'specificWeekDay'\"\n [returnObject]=\"false\"\n [hideDetails]=\"true\"\n (valueChanged)=\"regenerateCron()\"\n [(ngModel)]=\"state.monthly.specificWeekDay.monthWeek\"\n [options]=\"selectOptions.monthWeeks\"\n class=\"cps-scheduler-select-control\">\n </cps-select>\n <cps-select\n width=\"130px\"\n [disabled]=\"disabled || state.monthly.subTab !== 'specificWeekDay'\"\n [returnObject]=\"false\"\n [hideDetails]=\"true\"\n (valueChanged)=\"regenerateCron()\"\n [(ngModel)]=\"state.monthly.specificWeekDay.day\"\n [options]=\"selectOptions.days\"\n class=\"cps-scheduler-select-control\">\n </cps-select>\n of every\n <cps-select\n width=\"90px\"\n [disabled]=\"disabled || state.monthly.subTab !== 'specificWeekDay'\"\n [returnObject]=\"false\"\n [hideDetails]=\"true\"\n (valueChanged)=\"regenerateCron()\"\n [(ngModel)]=\"state.monthly.specificWeekDay.months\"\n [options]=\"selectOptions.monthsNumeric\"\n class=\"cps-scheduler-select-control\">\n </cps-select>\n month(s) starting in\n <cps-select\n width=\"120px\"\n [disabled]=\"disabled || state.monthly.subTab !== 'specificWeekDay'\"\n [returnObject]=\"false\"\n [hideDetails]=\"true\"\n (valueChanged)=\"regenerateCron()\"\n [(ngModel)]=\"state.monthly.specificWeekDay.startMonth\"\n [options]=\"selectOptions.months\"\n class=\"cps-scheduler-select-control\">\n </cps-select>\n at\n <cps-timepicker\n [disabled]=\"disabled || state.monthly.subTab !== 'specificWeekDay'\"\n [use24HourTime]=\"use24HourTime\"\n [mandatoryValue]=\"true\"\n [value]=\"formatTimeValue(state.monthly.specificWeekDay)\"\n [hideDetails]=\"true\"\n (valueChanged)=\"\n onTimeChanged($event, state.monthly.specificWeekDay)\n \">\n </cps-timepicker>\n </div>\n </cps-radio>\n </cps-radio-group>\n </div>\n\n <div *ngSwitchCase=\"'Yearly'\" class=\"cps-scheduler-tab-pane\">\n <cps-radio-group\n [hideDetails]=\"true\"\n [(ngModel)]=\"state.yearly.subTab\"\n (valueChanged)=\"regenerateCron()\"\n [vertical]=\"true\">\n <cps-radio [option]=\"{ value: 'specificMonthDay', disabled: disabled }\">\n <div\n class=\"cps-scheduler-tab-pane-row\"\n [ngClass]=\"{\n 'cps-scheduler-tab-pane-row-disabled':\n state.yearly.subTab !== 'specificMonthDay'\n }\">\n Every\n <cps-select\n width=\"120px\"\n [disabled]=\"disabled || state.yearly.subTab !== 'specificMonthDay'\"\n [returnObject]=\"false\"\n [hideDetails]=\"true\"\n (valueChanged)=\"regenerateCron()\"\n [(ngModel)]=\"state.yearly.specificMonthDay.month\"\n [options]=\"selectOptions.months\"\n class=\"cps-scheduler-select-control\">\n </cps-select>\n on the\n <cps-select\n width=\"120px\"\n [disabled]=\"disabled || state.yearly.subTab !== 'specificMonthDay'\"\n [returnObject]=\"false\"\n [hideDetails]=\"true\"\n (valueChanged)=\"regenerateCron()\"\n [(ngModel)]=\"state.yearly.specificMonthDay.day\"\n [options]=\"selectOptions.monthDaysWithLasts\"\n class=\"cps-scheduler-select-control\">\n </cps-select>\n at\n <cps-timepicker\n [disabled]=\"disabled || state.yearly.subTab !== 'specificMonthDay'\"\n [use24HourTime]=\"use24HourTime\"\n [mandatoryValue]=\"true\"\n [value]=\"formatTimeValue(state.yearly.specificMonthDay)\"\n [hideDetails]=\"true\"\n (valueChanged)=\"\n onTimeChanged($event, state.yearly.specificMonthDay)\n \">\n </cps-timepicker>\n <cps-checkbox\n (valueChanged)=\"regenerateCron()\"\n [disabled]=\"disabled || state.yearly.subTab !== 'specificMonthDay'\"\n label=\"During the nearest weekday\"\n [(ngModel)]=\"state.yearly.runOnWeekday\"\n class=\"cps-scheduler-nearest-weekday-checkbox\">\n </cps-checkbox>\n </div>\n </cps-radio>\n\n <cps-radio [option]=\"{ value: 'specificMonthWeek', disabled: disabled }\">\n <div\n class=\"cps-scheduler-tab-pane-row\"\n [ngClass]=\"{\n 'cps-scheduler-tab-pane-row-disabled':\n state.yearly.subTab !== 'specificMonthWeek'\n }\">\n On the\n <cps-select\n width=\"106px\"\n [disabled]=\"disabled || state.yearly.subTab !== 'specificMonthWeek'\"\n [returnObject]=\"false\"\n [hideDetails]=\"true\"\n (valueChanged)=\"regenerateCron()\"\n [(ngModel)]=\"state.yearly.specificMonthWeek.monthWeek\"\n [options]=\"selectOptions.monthWeeks\"\n class=\"cps-scheduler-select-control\">\n </cps-select>\n <cps-select\n width=\"120px\"\n [disabled]=\"disabled || state.yearly.subTab !== 'specificMonthWeek'\"\n [returnObject]=\"false\"\n [hideDetails]=\"true\"\n (valueChanged)=\"regenerateCron()\"\n [(ngModel)]=\"state.yearly.specificMonthWeek.day\"\n [options]=\"selectOptions.days\"\n class=\"cps-scheduler-select-control\">\n </cps-select>\n of\n <cps-select\n width=\"120px\"\n [disabled]=\"disabled || state.yearly.subTab !== 'specificMonthWeek'\"\n [returnObject]=\"false\"\n [hideDetails]=\"true\"\n (valueChanged)=\"regenerateCron()\"\n [(ngModel)]=\"state.yearly.specificMonthWeek.month\"\n [options]=\"selectOptions.months\"\n class=\"cps-scheduler-select-control\">\n </cps-select>\n at\n <cps-timepicker\n [disabled]=\"disabled || state.yearly.subTab !== 'specificMonthWeek'\"\n [use24HourTime]=\"use24HourTime\"\n [mandatoryValue]=\"true\"\n [value]=\"formatTimeValue(state.yearly.specificMonthWeek)\"\n [hideDetails]=\"true\"\n (valueChanged)=\"\n onTimeChanged($event, state.yearly.specificMonthWeek)\n \">\n </cps-timepicker>\n </div>\n </cps-radio>\n </cps-radio-group>\n </div>\n\n <div *ngSwitchCase=\"'Advanced'\">\n <form [formGroup]=\"form\">\n <cps-input\n label=\"\"\n [disabled]=\"disabled\"\n width=\"500px\"\n placeholder=\"Please enter\"\n formControlName=\"advanced\"\n (valueChanged)=\"regenerateCron()\">\n </cps-input>\n </form>\n </div>\n <div class=\"cps-scheduler-time-zone\" *ngIf=\"cron && showTimeZone\">\n <cps-autocomplete\n label=\"Time zone\"\n [(ngModel)]=\"timeZone\"\n (valueChanged)=\"onTimeZoneChanged($event)\"\n [returnObject]=\"false\"\n width=\"300\"\n [options]=\"timeZoneOptions\"></cps-autocomplete>\n </div>\n</div>\n", styles: [":host .cps-scheduler-selector{margin-bottom:24px}:host .cps-scheduler-container{margin-top:10px;margin-left:16px}:host .cps-scheduler-container .cps-scheduler-select-control{margin-left:8px;margin-right:8px}:host .cps-scheduler-container .cps-scheduler-days-checkbox-group{max-width:700px;display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));grid-template-rows:1fr 1fr;grid-gap:20px;margin-bottom:16px}:host .cps-scheduler-container .cps-scheduler-tab-pane{margin-bottom:28px}:host .cps-scheduler-container .cps-scheduler-tab-pane cps-radio-group ::ng-deep .cps-radio-group-content{margin-left:0!important}:host .cps-scheduler-container .cps-scheduler-tab-pane .cps-scheduler-tab-pane-row{display:flex;align-items:center}:host .cps-scheduler-container .cps-scheduler-tab-pane .cps-scheduler-tab-pane-row-disabled{color:var(--cps-color-text-light)}:host .cps-scheduler-container .cps-scheduler-tab-pane .cps-scheduler-nearest-weekday-checkbox{margin-left:16px}:host .cps-scheduler-container .cps-scheduler-tab-pane cps-timepicker{margin-left:8px}:host .cps-scheduler-container-disabled{color:var(--cps-color-text-light)}\n"] }]
|
|
12964
|
-
}],
|
|
13406
|
+
], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"cps-scheduler-selector\">\n <cps-button-toggle\n data-cy=\"schedule-type-toggle\"\n [options]=\"scheduleTypes\"\n [disabled]=\"disabled\"\n [label]=\"label\"\n [infoTooltip]=\"infoTooltip\"\n [(ngModel)]=\"activeScheduleType\"\n (ngModelChange)=\"setActiveScheduleType($event)\">\n </cps-button-toggle>\n</div>\n\n<div\n [ngSwitch]=\"activeScheduleType\"\n class=\"cps-scheduler-container\"\n [class.cps-scheduler-container-disabled]=\"disabled\">\n <div\n *ngSwitchCase=\"'Not set'\"\n class=\"cps-scheduler-tab-pane\"\n data-cy=\"not-set-config\"></div>\n\n <div\n *ngSwitchCase=\"'Minutes'\"\n class=\"cps-scheduler-tab-pane\"\n data-cy=\"minutes-config\">\n <div class=\"cps-scheduler-tab-pane-row\">\n Every\n <cps-select\n width=\"70px\"\n [disabled]=\"disabled\"\n [returnObject]=\"false\"\n [hideDetails]=\"true\"\n data-cy=\"minutes-input\"\n (valueChanged)=\"regenerateCron()\"\n [(ngModel)]=\"state.minutes.minutes\"\n [options]=\"selectOptions.minutes\"\n class=\"cps-scheduler-select-control\">\n </cps-select>\n minute(s)\n </div>\n </div>\n\n <div\n *ngSwitchCase=\"'Hourly'\"\n class=\"cps-scheduler-tab-pane\"\n data-cy=\"hourly-config\">\n <div class=\"cps-scheduler-tab-pane-row\">\n Every\n <cps-select\n width=\"70px\"\n [disabled]=\"disabled\"\n [returnObject]=\"false\"\n [hideDetails]=\"true\"\n data-cy=\"hourly-hours-input\"\n (valueChanged)=\"regenerateCron()\"\n [(ngModel)]=\"state.hourly.hours\"\n [options]=\"selectOptions.hours\"\n class=\"cps-scheduler-select-control\">\n </cps-select>\n hour(s) on minute\n <cps-select\n width=\"70px\"\n [disabled]=\"disabled\"\n [returnObject]=\"false\"\n [hideDetails]=\"true\"\n data-cy=\"hourly-minutes-input\"\n (valueChanged)=\"regenerateCron()\"\n [(ngModel)]=\"state.hourly.minutes\"\n [options]=\"selectOptions.fullMinutes\"\n class=\"cps-scheduler-select-control\">\n </cps-select>\n </div>\n </div>\n\n <div\n *ngSwitchCase=\"'Daily'\"\n class=\"cps-scheduler-tab-pane\"\n data-cy=\"daily-config\">\n <cps-radio-group\n [hideDetails]=\"true\"\n [(ngModel)]=\"state.daily.subTab\"\n (valueChanged)=\"regenerateCron()\"\n [vertical]=\"true\">\n <cps-radio\n [option]=\"{ value: 'everyDays', disabled: disabled }\"\n data-cy=\"daily-subtab-everyDays\">\n <div\n class=\"cps-scheduler-tab-pane-row\"\n [class.cps-scheduler-tab-pane-row-disabled]=\"\n state.daily.subTab !== 'everyDays'\n \">\n Every\n <cps-select\n width=\"70px\"\n data-cy=\"daily-every-days-input\"\n [disabled]=\"disabled || state.daily.subTab !== 'everyDays'\"\n [returnObject]=\"false\"\n [hideDetails]=\"true\"\n (valueChanged)=\"regenerateCron()\"\n [(ngModel)]=\"state.daily.everyDays.days\"\n [options]=\"selectOptions.monthDays\"\n class=\"cps-scheduler-select-control\">\n </cps-select>\n day(s) at\n <cps-timepicker\n data-cy=\"daily-timepicker\"\n [disabled]=\"disabled || state.daily.subTab !== 'everyDays'\"\n [use24HourTime]=\"use24HourTime\"\n [mandatoryValue]=\"true\"\n [value]=\"formatTimeValue(state.daily.everyDays)\"\n [hideDetails]=\"true\"\n (valueChanged)=\"onTimeChanged($event, state.daily.everyDays)\">\n </cps-timepicker>\n </div>\n </cps-radio>\n <cps-radio\n data-cy=\"daily-subtab-everyWeekDay\"\n [option]=\"{ value: 'everyWeekDay', disabled: disabled }\">\n <div\n class=\"cps-scheduler-tab-pane-row\"\n data-cy=\"daily-weekday-config\"\n [class.cps-scheduler-tab-pane-row-disabled]=\"\n state.daily.subTab !== 'everyWeekDay'\n \">\n Every working day at\n <cps-timepicker\n [disabled]=\"disabled || state.daily.subTab !== 'everyWeekDay'\"\n [use24HourTime]=\"use24HourTime\"\n [mandatoryValue]=\"true\"\n [value]=\"formatTimeValue(state.daily.everyWeekDay)\"\n [hideDetails]=\"true\"\n (valueChanged)=\"onTimeChanged($event, state.daily.everyWeekDay)\">\n </cps-timepicker>\n </div>\n </cps-radio>\n </cps-radio-group>\n </div>\n\n <div\n *ngSwitchCase=\"'Weekly'\"\n class=\"cps-scheduler-tab-pane\"\n data-cy=\"weekly-config\">\n <div class=\"cps-scheduler-days-checkbox-group\">\n <cps-checkbox\n (valueChanged)=\"regenerateCron()\"\n [disabled]=\"disabled\"\n data-cy=\"weekly-MON\"\n label=\"Monday\"\n [(ngModel)]=\"state.weekly.MON\">\n </cps-checkbox>\n <cps-checkbox\n (valueChanged)=\"regenerateCron()\"\n [disabled]=\"disabled\"\n data-cy=\"weekly-TUE\"\n label=\"Tuesday\"\n [(ngModel)]=\"state.weekly.TUE\">\n </cps-checkbox>\n <cps-checkbox\n (valueChanged)=\"regenerateCron()\"\n [disabled]=\"disabled\"\n data-cy=\"weekly-WED\"\n label=\"Wednesday\"\n [(ngModel)]=\"state.weekly.WED\">\n </cps-checkbox>\n <cps-checkbox\n (valueChanged)=\"regenerateCron()\"\n [disabled]=\"disabled\"\n data-cy=\"weekly-THU\"\n label=\"Thursday\"\n [(ngModel)]=\"state.weekly.THU\">\n </cps-checkbox>\n <cps-checkbox\n (valueChanged)=\"regenerateCron()\"\n [disabled]=\"disabled\"\n data-cy=\"weekly-FRI\"\n label=\"Friday\"\n [(ngModel)]=\"state.weekly.FRI\">\n </cps-checkbox>\n <cps-checkbox\n (valueChanged)=\"regenerateCron()\"\n [disabled]=\"disabled\"\n data-cy=\"weekly-SAT\"\n label=\"Saturday\"\n [(ngModel)]=\"state.weekly.SAT\">\n </cps-checkbox>\n <cps-checkbox\n (valueChanged)=\"regenerateCron()\"\n [disabled]=\"disabled\"\n data-cy=\"weekly-SUN\"\n label=\"Sunday\"\n [(ngModel)]=\"state.weekly.SUN\">\n </cps-checkbox>\n </div>\n <div class=\"cps-scheduler-tab-pane-row\">\n at\n <cps-timepicker\n [disabled]=\"disabled\"\n data-cy=\"weekly-timepicker\"\n [use24HourTime]=\"use24HourTime\"\n [mandatoryValue]=\"true\"\n [value]=\"formatTimeValue(state.weekly)\"\n [hideDetails]=\"true\"\n (valueChanged)=\"onTimeChanged($event, state.weekly)\">\n </cps-timepicker>\n </div>\n </div>\n\n <div\n *ngSwitchCase=\"'Monthly'\"\n class=\"cps-scheduler-tab-pane\"\n data-cy=\"monthly-config\">\n <cps-radio-group\n [hideDetails]=\"true\"\n [(ngModel)]=\"state.monthly.subTab\"\n (valueChanged)=\"regenerateCron()\"\n [vertical]=\"true\">\n <cps-radio\n [option]=\"{ value: 'specificDay', disabled: disabled }\"\n data-cy=\"monthly-subtab-specificDay\">\n <div\n class=\"cps-scheduler-tab-pane-row\"\n [class.cps-scheduler-tab-pane-row-disabled]=\"\n state.monthly.subTab !== 'specificDay'\n \">\n On the\n <cps-select\n width=\"120px\"\n data-cy=\"monthly-day-select\"\n [disabled]=\"disabled || state.monthly.subTab !== 'specificDay'\"\n [returnObject]=\"false\"\n [hideDetails]=\"true\"\n (valueChanged)=\"regenerateCron()\"\n [(ngModel)]=\"state.monthly.specificDay.day\"\n [options]=\"selectOptions.monthDaysWithLasts\"\n class=\"cps-scheduler-select-control\">\n </cps-select>\n of every\n <cps-select\n width=\"70px\"\n data-cy=\"monthly-months-input\"\n [disabled]=\"disabled || state.monthly.subTab !== 'specificDay'\"\n [returnObject]=\"false\"\n [hideDetails]=\"true\"\n (valueChanged)=\"regenerateCron()\"\n [(ngModel)]=\"state.monthly.specificDay.months\"\n [options]=\"selectOptions.monthsNumeric\"\n class=\"cps-scheduler-select-control\">\n </cps-select>\n month(s) at\n <cps-timepicker\n [disabled]=\"disabled || state.monthly.subTab !== 'specificDay'\"\n [use24HourTime]=\"use24HourTime\"\n [mandatoryValue]=\"true\"\n [value]=\"formatTimeValue(state.monthly.specificDay)\"\n [hideDetails]=\"true\"\n (valueChanged)=\"onTimeChanged($event, state.monthly.specificDay)\">\n </cps-timepicker>\n <cps-checkbox\n data-cy=\"monthly-weekday-toggle\"\n (valueChanged)=\"regenerateCron()\"\n [disabled]=\"disabled || state.monthly.subTab !== 'specificDay'\"\n label=\"During the nearest weekday\"\n [(ngModel)]=\"state.monthly.runOnWeekday\"\n class=\"cps-scheduler-nearest-weekday-checkbox\">\n </cps-checkbox>\n </div>\n </cps-radio>\n\n <cps-radio\n [option]=\"{ value: 'specificWeekDay', disabled: disabled }\"\n data-cy=\"monthly-subtab-specificWeekDay\">\n <div\n class=\"cps-scheduler-tab-pane-row\"\n [class.cps-scheduler-tab-pane-row-disabled]=\"\n state.monthly.subTab !== 'specificWeekDay'\n \">\n On the\n <cps-select\n width=\"106px\"\n data-cy=\"monthly-week-select\"\n [disabled]=\"disabled || state.monthly.subTab !== 'specificWeekDay'\"\n [returnObject]=\"false\"\n [hideDetails]=\"true\"\n (valueChanged)=\"regenerateCron()\"\n [(ngModel)]=\"state.monthly.specificWeekDay.monthWeek\"\n [options]=\"selectOptions.monthWeeks\"\n class=\"cps-scheduler-select-control\">\n </cps-select>\n <cps-select\n width=\"130px\"\n data-cy=\"monthly-weekday-select\"\n [disabled]=\"disabled || state.monthly.subTab !== 'specificWeekDay'\"\n [returnObject]=\"false\"\n [hideDetails]=\"true\"\n (valueChanged)=\"regenerateCron()\"\n [(ngModel)]=\"state.monthly.specificWeekDay.day\"\n [options]=\"selectOptions.days\"\n class=\"cps-scheduler-select-control\">\n </cps-select>\n of every\n <cps-select\n width=\"90px\"\n [disabled]=\"disabled || state.monthly.subTab !== 'specificWeekDay'\"\n [returnObject]=\"false\"\n [hideDetails]=\"true\"\n (valueChanged)=\"regenerateCron()\"\n data-cy=\"monthly-weekday-months-input\"\n [(ngModel)]=\"state.monthly.specificWeekDay.months\"\n [options]=\"selectOptions.monthsNumeric\"\n class=\"cps-scheduler-select-control\">\n </cps-select>\n month(s) starting in\n <cps-select\n width=\"120px\"\n [disabled]=\"disabled || state.monthly.subTab !== 'specificWeekDay'\"\n [returnObject]=\"false\"\n [hideDetails]=\"true\"\n data-cy=\"monthly-weekday-start-month-select\"\n (valueChanged)=\"regenerateCron()\"\n [(ngModel)]=\"state.monthly.specificWeekDay.startMonth\"\n [options]=\"selectOptions.months\"\n class=\"cps-scheduler-select-control\">\n </cps-select>\n at\n <cps-timepicker\n [disabled]=\"disabled || state.monthly.subTab !== 'specificWeekDay'\"\n [use24HourTime]=\"use24HourTime\"\n [mandatoryValue]=\"true\"\n data-cy=\"monthly-weekday-timepicker\"\n [value]=\"formatTimeValue(state.monthly.specificWeekDay)\"\n [hideDetails]=\"true\"\n (valueChanged)=\"\n onTimeChanged($event, state.monthly.specificWeekDay)\n \">\n </cps-timepicker>\n </div>\n </cps-radio>\n </cps-radio-group>\n </div>\n\n <div\n *ngSwitchCase=\"'Yearly'\"\n class=\"cps-scheduler-tab-pane\"\n data-cy=\"yearly-config\">\n <cps-radio-group\n [hideDetails]=\"true\"\n [(ngModel)]=\"state.yearly.subTab\"\n (valueChanged)=\"regenerateCron()\"\n [vertical]=\"true\">\n <cps-radio\n [option]=\"{ value: 'specificMonthDay', disabled: disabled }\"\n data-cy=\"yearly-subtab-specificMonthDay\">\n <div\n class=\"cps-scheduler-tab-pane-row\"\n [class.cps-scheduler-tab-pane-row-disabled]=\"\n state.yearly.subTab !== 'specificMonthDay'\n \">\n Every\n <cps-select\n width=\"120px\"\n [disabled]=\"disabled || state.yearly.subTab !== 'specificMonthDay'\"\n [returnObject]=\"false\"\n [hideDetails]=\"true\"\n (valueChanged)=\"regenerateCron()\"\n [(ngModel)]=\"state.yearly.specificMonthDay.month\"\n [options]=\"selectOptions.months\"\n data-cy=\"yearly-month-select\"\n class=\"cps-scheduler-select-control\">\n </cps-select>\n on the\n <cps-select\n width=\"120px\"\n data-cy=\"yearly-day-select\"\n [disabled]=\"disabled || state.yearly.subTab !== 'specificMonthDay'\"\n [returnObject]=\"false\"\n [hideDetails]=\"true\"\n (valueChanged)=\"regenerateCron()\"\n [(ngModel)]=\"state.yearly.specificMonthDay.day\"\n [options]=\"selectOptions.monthDaysWithLasts\"\n class=\"cps-scheduler-select-control\">\n </cps-select>\n at\n <cps-timepicker\n [disabled]=\"disabled || state.yearly.subTab !== 'specificMonthDay'\"\n [use24HourTime]=\"use24HourTime\"\n [mandatoryValue]=\"true\"\n [value]=\"formatTimeValue(state.yearly.specificMonthDay)\"\n [hideDetails]=\"true\"\n (valueChanged)=\"\n onTimeChanged($event, state.yearly.specificMonthDay)\n \">\n </cps-timepicker>\n <cps-checkbox\n data-cy=\"yearly-weekday-toggle\"\n (valueChanged)=\"regenerateCron()\"\n [disabled]=\"disabled || state.yearly.subTab !== 'specificMonthDay'\"\n label=\"During the nearest weekday\"\n [(ngModel)]=\"state.yearly.runOnWeekday\"\n class=\"cps-scheduler-nearest-weekday-checkbox\">\n </cps-checkbox>\n </div>\n </cps-radio>\n\n <cps-radio\n [option]=\"{ value: 'specificMonthWeek', disabled: disabled }\"\n data-cy=\"yearly-subtab-specificMonthWeek\">\n <div\n class=\"cps-scheduler-tab-pane-row\"\n [class.cps-scheduler-tab-pane-row-disabled]=\"\n state.yearly.subTab !== 'specificMonthWeek'\n \">\n On the\n <cps-select\n width=\"106px\"\n data-cy=\"yearly-week-select\"\n [disabled]=\"disabled || state.yearly.subTab !== 'specificMonthWeek'\"\n [returnObject]=\"false\"\n [hideDetails]=\"true\"\n (valueChanged)=\"regenerateCron()\"\n [(ngModel)]=\"state.yearly.specificMonthWeek.monthWeek\"\n [options]=\"selectOptions.monthWeeks\"\n class=\"cps-scheduler-select-control\">\n </cps-select>\n <cps-select\n width=\"120px\"\n data-cy=\"yearly-weekday-select\"\n [disabled]=\"disabled || state.yearly.subTab !== 'specificMonthWeek'\"\n [returnObject]=\"false\"\n [hideDetails]=\"true\"\n (valueChanged)=\"regenerateCron()\"\n [(ngModel)]=\"state.yearly.specificMonthWeek.day\"\n [options]=\"selectOptions.days\"\n class=\"cps-scheduler-select-control\">\n </cps-select>\n of\n <cps-select\n width=\"120px\"\n [disabled]=\"disabled || state.yearly.subTab !== 'specificMonthWeek'\"\n [returnObject]=\"false\"\n [hideDetails]=\"true\"\n (valueChanged)=\"regenerateCron()\"\n [(ngModel)]=\"state.yearly.specificMonthWeek.month\"\n [options]=\"selectOptions.months\"\n class=\"cps-scheduler-select-control\">\n </cps-select>\n at\n <cps-timepicker\n [disabled]=\"disabled || state.yearly.subTab !== 'specificMonthWeek'\"\n [use24HourTime]=\"use24HourTime\"\n [mandatoryValue]=\"true\"\n [value]=\"formatTimeValue(state.yearly.specificMonthWeek)\"\n [hideDetails]=\"true\"\n (valueChanged)=\"\n onTimeChanged($event, state.yearly.specificMonthWeek)\n \">\n </cps-timepicker>\n </div>\n </cps-radio>\n </cps-radio-group>\n </div>\n\n <div *ngSwitchCase=\"'Advanced'\" data-cy=\"advanced-config\">\n <form [formGroup]=\"form\">\n <cps-input\n label=\"\"\n data-cy=\"advanced-cron-input\"\n [disabled]=\"disabled\"\n width=\"500px\"\n placeholder=\"Please enter\"\n formControlName=\"advanced\"\n (valueChanged)=\"regenerateCron()\">\n </cps-input>\n </form>\n </div>\n\n <div\n class=\"cps-scheduler-time-zone\"\n *ngIf=\"cron && showTimeZone\"\n data-cy=\"timezone-selector\">\n <cps-autocomplete\n label=\"Time zone\"\n data-cy=\"timezone-select\"\n [(ngModel)]=\"timeZone\"\n (valueChanged)=\"onTimeZoneChanged($event)\"\n [returnObject]=\"false\"\n width=\"300\"\n [options]=\"timeZoneOptions\">\n </cps-autocomplete>\n </div>\n</div>\n", styles: [":host .cps-scheduler-selector{margin-bottom:24px}:host .cps-scheduler-container{margin-top:10px;margin-left:16px}:host .cps-scheduler-container .cps-scheduler-select-control{margin-left:8px;margin-right:8px}:host .cps-scheduler-container .cps-scheduler-days-checkbox-group{max-width:700px;display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));grid-template-rows:1fr 1fr;grid-gap:20px;margin-bottom:16px}:host .cps-scheduler-container .cps-scheduler-tab-pane{margin-bottom:28px}:host .cps-scheduler-container .cps-scheduler-tab-pane cps-radio-group ::ng-deep .cps-radio-group-content{margin-left:0!important}:host .cps-scheduler-container .cps-scheduler-tab-pane .cps-scheduler-tab-pane-row{display:flex;align-items:center}:host .cps-scheduler-container .cps-scheduler-tab-pane .cps-scheduler-tab-pane-row-disabled{color:var(--cps-color-text-light)}:host .cps-scheduler-container .cps-scheduler-tab-pane .cps-scheduler-nearest-weekday-checkbox{margin-left:16px}:host .cps-scheduler-container .cps-scheduler-tab-pane cps-timepicker{margin-left:8px}:host .cps-scheduler-container-disabled{color:var(--cps-color-text-light)}\n"] }]
|
|
13407
|
+
}], propDecorators: { label: [{
|
|
12965
13408
|
type: Input
|
|
12966
13409
|
}], cron: [{
|
|
12967
13410
|
type: Input
|