Skip to content

Commit 92b72fd

Browse files
committed
feat: class for display file indicator status and method to evaluate if conditional is active
1 parent bdd68ab commit 92b72fd

File tree

2 files changed

+51
-1
lines changed

2 files changed

+51
-1
lines changed

src/tests/dspf.test.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { expect, describe, it } from "vitest";
2-
import { Conditional, DdsLineRange, DisplayFile, FieldInfo } from "../ui/dspf";
2+
import { Conditional, DdsLineRange, DisplayFile, DisplayFileIndicators, FieldInfo } from "../ui/dspf";
33

44
describe('DisplayFile tests', () => {
55

@@ -125,6 +125,14 @@ describe('DisplayFile tests', () => {
125125
expect(cond.getConditions().length).toBe(2);
126126
expect(cond.getConditions().at(1)?.indicators.length).toBe(2);
127127

128+
let indicators = new DisplayFileIndicators();
129+
indicators.set(11, true);
130+
expect(cond.isActive(indicators)).toBeTruthy;
131+
indicators.set(10, true);
132+
expect(cond.isActive(indicators)).toBeFalsy;
133+
indicators.set(20, true);
134+
expect(cond.isActive(indicators)).toBeTruthy;
135+
128136
});
129137

130138
});

src/ui/dspf.ts

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -634,4 +634,46 @@ export class Conditional {
634634
return lines;
635635
}
636636

637+
isActive(indicators: DisplayFileIndicators): boolean {
638+
if (this.conditions.length <= 1 && this.conditions[0].indicators.length == 0) {
639+
return true;
640+
}
641+
this.conditions.forEach(cond => {
642+
let condResult = true;
643+
cond.indicators.forEach(ind => {
644+
if ((!indicators.get(ind.indicator) && !ind.negate) || (indicators.get(ind.indicator) && ind.negate)) {
645+
condResult = false;
646+
}
647+
});
648+
if (condResult) {
649+
return true;
650+
}
651+
});
652+
return false;
653+
}
654+
637655
}
656+
657+
658+
export class DisplayFileIndicators {
659+
private indicators: boolean[] = Array(99).fill(false);
660+
661+
set(indicator: number, state: boolean) {
662+
if (indicator < 1 || indicator > 99) {
663+
throw new Error(`Invalid indicator number`);
664+
}
665+
this.indicators[indicator - 1] = state;
666+
}
667+
668+
setAll(state: boolean) {
669+
this.indicators.forEach(ind => ind = state);
670+
}
671+
672+
get(indicator: number) :boolean {
673+
if (indicator < 1 || indicator > 99) {
674+
throw new Error(`Invalid indicator number`);
675+
}
676+
return this.indicators[indicator - 1];
677+
}
678+
679+
}

0 commit comments

Comments
 (0)