export type PatternFlat = {
id: number | string,
isRegex: boolean,
value: string,
label: string
}
export class Pattern {
id: number | string;
isRegex: boolean;
value: string;
label: string;
constructor(id: number | string, isRegex: boolean, value: string, label: string) {
this.id = id;
this.isRegex = isRegex;
this.value = value;
this.label = label;
}
get regex() { return new RegExp(this.isRegex ? this.value : `^${this.value}$`); }
get isEmpty() { return this.label === null; }
deflate() {
return {
id: this.id,
isRegex: this.isRegex,
value: this.value,
label: this.label
};
}
static emptyPattern = () => new Pattern(0, true, '', null);
static anyPattern = () => new Pattern('any', true, '.*', 'Any');
static inflate = (obj: PatternFlat) => new Pattern(obj.id, obj.isRegex, obj.value, obj.label);
}
export type PatternEntryColor = {
background: string
}
export type PatternEntryFlat = {
name: string,
idx: number,
cal: PatternFlat,
event: PatternFlat,
color: PatternEntryColor
}
export class PatternEntry {
name: string;
idx: number;
cal: Pattern;
event: Pattern;
color: PatternEntryColor;
constructor(name: string, idx: number,
calPattern: Pattern, eventPattern: Pattern,
color: PatternEntryColor) {
this.name = name;
this.idx = idx;
this.cal = calPattern;
this.event = eventPattern;
this.color = color;
}
deflate() {
return {
name: this.name,
idx: this.idx,
cal: this.cal.deflate(),
event: this.event.deflate(),
color: this.color
};
}
static defaultPatternEntry = (idx: number) => (
new PatternEntry('', idx,
Pattern.emptyPattern(),
Pattern.anyPattern(), {background: null}));
static inflate = (obj: PatternEntryFlat) => new PatternEntry(
obj.name, obj.idx,
Pattern.inflate(obj.cal), Pattern.inflate(obj.event),
obj.color);
}