@defra/forms-model 3.0.246 → 3.0.248
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/dist/module/components/component-types.js +0 -7
- package/dist/module/components/component-types.js.map +1 -1
- package/dist/module/components/enums.js +0 -1
- package/dist/module/components/enums.js.map +1 -1
- package/dist/module/components/helpers.js +2 -2
- package/dist/module/components/helpers.js.map +1 -1
- package/dist/module/components/types.js.map +1 -1
- package/dist/module/conditions/condition-abstract.js.map +1 -1
- package/dist/module/conditions/condition-field.js.map +1 -1
- package/dist/module/conditions/condition-group-def.js.map +1 -1
- package/dist/module/conditions/condition-group.js.map +1 -1
- package/dist/module/conditions/condition-model.js +4 -4
- package/dist/module/conditions/condition-model.js.map +1 -1
- package/dist/module/conditions/condition-operators.js +21 -25
- package/dist/module/conditions/condition-operators.js.map +1 -1
- package/dist/module/conditions/condition-ref.js.map +1 -1
- package/dist/module/conditions/condition-values.js +17 -54
- package/dist/module/conditions/condition-values.js.map +1 -1
- package/dist/module/conditions/condition.js.map +1 -1
- package/dist/module/conditions/enums.js +7 -1
- package/dist/module/conditions/enums.js.map +1 -1
- package/dist/module/conditions/helpers.js.map +1 -1
- package/dist/module/conditions/index.js +3 -3
- package/dist/module/conditions/index.js.map +1 -1
- package/dist/module/conditions/types.js.map +1 -1
- package/dist/module/form/form-definition/index.js +22 -29
- package/dist/module/form/form-definition/index.js.map +1 -1
- package/dist/module/form/form-definition/types.js.map +1 -1
- package/dist/module/form/form-metadata/types.js.map +1 -1
- package/dist/types/components/component-types.d.ts.map +1 -1
- package/dist/types/components/enums.d.ts +0 -1
- package/dist/types/components/enums.d.ts.map +1 -1
- package/dist/types/components/helpers.d.ts.map +1 -1
- package/dist/types/components/types.d.ts +7 -12
- package/dist/types/components/types.d.ts.map +1 -1
- package/dist/types/conditions/condition-abstract.d.ts +3 -3
- package/dist/types/conditions/condition-abstract.d.ts.map +1 -1
- package/dist/types/conditions/condition-field.d.ts +6 -8
- package/dist/types/conditions/condition-field.d.ts.map +1 -1
- package/dist/types/conditions/condition-group-def.d.ts +5 -3
- package/dist/types/conditions/condition-group-def.d.ts.map +1 -1
- package/dist/types/conditions/condition-group.d.ts +11 -10
- package/dist/types/conditions/condition-group.d.ts.map +1 -1
- package/dist/types/conditions/condition-model.d.ts +9 -17
- package/dist/types/conditions/condition-model.d.ts.map +1 -1
- package/dist/types/conditions/condition-operators.d.ts +8 -14
- package/dist/types/conditions/condition-operators.d.ts.map +1 -1
- package/dist/types/conditions/condition-ref.d.ts +4 -4
- package/dist/types/conditions/condition-ref.d.ts.map +1 -1
- package/dist/types/conditions/condition-values.d.ts +13 -30
- package/dist/types/conditions/condition-values.d.ts.map +1 -1
- package/dist/types/conditions/condition.d.ts +5 -5
- package/dist/types/conditions/condition.d.ts.map +1 -1
- package/dist/types/conditions/enums.d.ts +6 -1
- package/dist/types/conditions/enums.d.ts.map +1 -1
- package/dist/types/conditions/helpers.d.ts +5 -2
- package/dist/types/conditions/helpers.d.ts.map +1 -1
- package/dist/types/conditions/index.d.ts +3 -3
- package/dist/types/conditions/index.d.ts.map +1 -1
- package/dist/types/conditions/types.d.ts +36 -37
- package/dist/types/conditions/types.d.ts.map +1 -1
- package/dist/types/form/form-definition/index.d.ts +0 -5
- package/dist/types/form/form-definition/index.d.ts.map +1 -1
- package/dist/types/form/form-definition/types.d.ts +6 -10
- package/dist/types/form/form-definition/types.d.ts.map +1 -1
- package/dist/types/form/form-metadata/types.d.ts +5 -0
- package/dist/types/form/form-metadata/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/components/component-types.ts +0 -8
- package/src/components/enums.ts +0 -1
- package/src/components/helpers.ts +1 -2
- package/src/components/types.ts +7 -17
- package/src/conditions/condition-abstract.ts +5 -5
- package/src/conditions/condition-field.ts +6 -4
- package/src/conditions/condition-group-def.ts +7 -3
- package/src/conditions/condition-group.ts +11 -10
- package/src/conditions/condition-model.ts +27 -25
- package/src/conditions/condition-operators.ts +29 -49
- package/src/conditions/condition-ref.ts +3 -3
- package/src/conditions/condition-values.ts +31 -89
- package/src/conditions/condition.ts +5 -5
- package/src/conditions/enums.ts +7 -1
- package/src/conditions/helpers.ts +10 -2
- package/src/conditions/index.ts +4 -6
- package/src/conditions/types.ts +47 -24
- package/src/form/form-definition/index.ts +47 -51
- package/src/form/form-definition/types.ts +6 -13
- package/src/form/form-metadata/types.ts +6 -0
@@ -29,14 +29,6 @@ export const ComponentTypes: ComponentDef[] = [
|
|
29
29
|
options: {},
|
30
30
|
schema: {}
|
31
31
|
},
|
32
|
-
{
|
33
|
-
name: 'TimeField',
|
34
|
-
title: 'Time field',
|
35
|
-
type: ComponentType.TimeField,
|
36
|
-
hint: '',
|
37
|
-
options: {},
|
38
|
-
schema: {}
|
39
|
-
},
|
40
32
|
{
|
41
33
|
name: 'DatePartsField',
|
42
34
|
title: 'Date field',
|
package/src/components/enums.ts
CHANGED
@@ -43,8 +43,8 @@ export function isConditionalType(
|
|
43
43
|
ComponentType.EmailAddressField,
|
44
44
|
ComponentType.MultilineTextField,
|
45
45
|
ComponentType.NumberField,
|
46
|
+
ComponentType.SelectField,
|
46
47
|
ComponentType.TextField,
|
47
|
-
ComponentType.TimeField,
|
48
48
|
ComponentType.YesNoField
|
49
49
|
]
|
50
50
|
|
@@ -106,7 +106,6 @@ export function hasInputField(
|
|
106
106
|
ComponentType.TelephoneNumberField,
|
107
107
|
ComponentType.YesNoField,
|
108
108
|
ComponentType.MonthYearField,
|
109
|
-
ComponentType.TimeField,
|
110
109
|
ComponentType.DatePartsField,
|
111
110
|
ComponentType.UkAddressField
|
112
111
|
]
|
package/src/components/types.ts
CHANGED
@@ -7,8 +7,8 @@ export type ConditionalComponentType =
|
|
7
7
|
| ComponentType.EmailAddressField
|
8
8
|
| ComponentType.MultilineTextField
|
9
9
|
| ComponentType.NumberField
|
10
|
+
| ComponentType.SelectField
|
10
11
|
| ComponentType.TextField
|
11
|
-
| ComponentType.TimeField
|
12
12
|
| ComponentType.YesNoField
|
13
13
|
|
14
14
|
/**
|
@@ -93,18 +93,15 @@ interface ContentFieldBase {
|
|
93
93
|
}
|
94
94
|
|
95
95
|
interface DateFieldBase {
|
96
|
-
type:
|
97
|
-
| ComponentType.DatePartsField
|
98
|
-
| ComponentType.MonthYearField
|
99
|
-
| ComponentType.TimeField
|
96
|
+
type: ComponentType.DatePartsField | ComponentType.MonthYearField
|
100
97
|
name: string
|
101
98
|
title: string
|
102
99
|
hint?: string
|
103
100
|
options: {
|
104
101
|
required?: boolean
|
105
102
|
optionalText?: boolean
|
106
|
-
maxDaysInFuture?: number
|
107
103
|
maxDaysInPast?: number
|
104
|
+
maxDaysInFuture?: number
|
108
105
|
}
|
109
106
|
schema: object
|
110
107
|
}
|
@@ -186,13 +183,6 @@ export interface MonthYearFieldComponent extends DateFieldBase {
|
|
186
183
|
}
|
187
184
|
}
|
188
185
|
|
189
|
-
export interface TimeFieldComponent extends DateFieldBase {
|
190
|
-
type: ComponentType.TimeField
|
191
|
-
options: DateFieldBase['options'] & {
|
192
|
-
condition?: string
|
193
|
-
}
|
194
|
-
}
|
195
|
-
|
196
186
|
// Content Fields
|
197
187
|
export interface DetailsComponent extends ContentFieldBase {
|
198
188
|
type: ComponentType.Details
|
@@ -231,7 +221,10 @@ export interface RadiosFieldComponent extends ListFieldBase {
|
|
231
221
|
|
232
222
|
export interface SelectFieldComponent extends ListFieldBase {
|
233
223
|
type: ComponentType.SelectField
|
234
|
-
options: ListFieldBase['options'] & {
|
224
|
+
options: ListFieldBase['options'] & {
|
225
|
+
autocomplete?: string
|
226
|
+
condition?: string
|
227
|
+
}
|
235
228
|
}
|
236
229
|
|
237
230
|
export type ComponentDef =
|
@@ -250,7 +243,6 @@ export type ComponentDef =
|
|
250
243
|
| SelectFieldComponent
|
251
244
|
| TelephoneNumberFieldComponent
|
252
245
|
| TextFieldComponent
|
253
|
-
| TimeFieldComponent
|
254
246
|
| UkAddressFieldComponent
|
255
247
|
| YesNoFieldComponent
|
256
248
|
|
@@ -263,7 +255,6 @@ export type InputFieldsComponentsDef =
|
|
263
255
|
| TelephoneNumberFieldComponent
|
264
256
|
| YesNoFieldComponent
|
265
257
|
| MonthYearFieldComponent
|
266
|
-
| TimeFieldComponent
|
267
258
|
| DatePartsFieldFieldComponent
|
268
259
|
| UkAddressFieldComponent
|
269
260
|
|
@@ -313,5 +304,4 @@ export type ConditionalComponentsDef =
|
|
313
304
|
| MultilineTextFieldComponent
|
314
305
|
| NumberFieldComponent
|
315
306
|
| TextFieldComponent
|
316
|
-
| TimeFieldComponent
|
317
307
|
| YesNoFieldComponent
|
@@ -1,9 +1,9 @@
|
|
1
1
|
import { Coordinator } from '~/src/conditions/enums.js'
|
2
2
|
|
3
3
|
export class ConditionAbstract {
|
4
|
-
coordinator
|
4
|
+
coordinator?: Coordinator
|
5
5
|
|
6
|
-
constructor(coordinator
|
6
|
+
constructor(coordinator?: Coordinator) {
|
7
7
|
if (coordinator && !Object.values(Coordinator).includes(coordinator)) {
|
8
8
|
throw Error(`coordinator ${coordinator} is not a valid coordinator`)
|
9
9
|
}
|
@@ -11,15 +11,15 @@ export class ConditionAbstract {
|
|
11
11
|
this.coordinator = coordinator
|
12
12
|
}
|
13
13
|
|
14
|
-
coordinatorString() {
|
14
|
+
coordinatorString(): string {
|
15
15
|
return this.coordinator ? `${this.coordinator} ` : ''
|
16
16
|
}
|
17
17
|
|
18
|
-
getCoordinator() {
|
18
|
+
getCoordinator(): Coordinator | undefined {
|
19
19
|
return this.coordinator
|
20
20
|
}
|
21
21
|
|
22
|
-
setCoordinator(coordinator
|
22
|
+
setCoordinator(coordinator?: Coordinator) {
|
23
23
|
this.coordinator = coordinator
|
24
24
|
}
|
25
25
|
|
@@ -1,10 +1,12 @@
|
|
1
1
|
import { type ComponentType } from '~/src/components/enums.js'
|
2
2
|
import { isConditionalType } from '~/src/components/helpers.js'
|
3
|
+
import { type ConditionalComponentType } from '~/src/components/types.js'
|
4
|
+
import { type ConditionFieldData } from '~/src/conditions/types.js'
|
3
5
|
|
4
6
|
export class ConditionField {
|
5
|
-
name
|
6
|
-
type
|
7
|
-
display
|
7
|
+
name: string
|
8
|
+
type: ConditionalComponentType
|
9
|
+
display: string
|
8
10
|
|
9
11
|
constructor(name?: string, type?: ComponentType, display?: string) {
|
10
12
|
if (!name || typeof name !== 'string') {
|
@@ -24,7 +26,7 @@ export class ConditionField {
|
|
24
26
|
this.display = display
|
25
27
|
}
|
26
28
|
|
27
|
-
static from(obj:
|
29
|
+
static from(obj: ConditionField | ConditionFieldData) {
|
28
30
|
return new ConditionField(obj.name, obj.type, obj.display)
|
29
31
|
}
|
30
32
|
}
|
@@ -1,10 +1,12 @@
|
|
1
|
-
import { type
|
1
|
+
import { type ConditionGroup } from '~/src/conditions/condition-group.js'
|
2
|
+
import { type ConditionRef } from '~/src/conditions/condition-ref.js'
|
3
|
+
import { type Condition } from '~/src/conditions/condition.js'
|
2
4
|
|
3
5
|
export class ConditionGroupDef {
|
4
6
|
first: number
|
5
7
|
last: number
|
6
8
|
|
7
|
-
constructor(first
|
9
|
+
constructor(first?: number, last?: number) {
|
8
10
|
if (typeof first !== 'number' || typeof last !== 'number') {
|
9
11
|
throw Error(`Cannot construct a group from ${first} and ${last}`)
|
10
12
|
} else if (first >= last) {
|
@@ -23,7 +25,9 @@ export class ConditionGroupDef {
|
|
23
25
|
return this.first === index
|
24
26
|
}
|
25
27
|
|
26
|
-
applyTo(
|
28
|
+
applyTo(
|
29
|
+
conditions: (Condition | ConditionRef | ConditionGroup)[]
|
30
|
+
): (Condition | ConditionRef | ConditionGroup)[] {
|
27
31
|
return [...conditions].splice(this.first, this.last - this.first + 1)
|
28
32
|
}
|
29
33
|
}
|
@@ -1,11 +1,12 @@
|
|
1
|
+
import { type ConditionRef } from '~/src/conditions/condition-ref.js'
|
2
|
+
import { type Condition } from '~/src/conditions/condition.js'
|
1
3
|
import { type Coordinator } from '~/src/conditions/enums.js'
|
2
4
|
import { toPresentationString, toExpression } from '~/src/conditions/helpers.js'
|
3
|
-
import { type ConditionsArray } from '~/src/conditions/types.js'
|
4
5
|
|
5
6
|
export class ConditionGroup {
|
6
|
-
conditions:
|
7
|
+
conditions: (Condition | ConditionRef | ConditionGroup)[]
|
7
8
|
|
8
|
-
constructor(conditions:
|
9
|
+
constructor(conditions: (Condition | ConditionRef | ConditionGroup)[] = []) {
|
9
10
|
if (!Array.isArray(conditions) || conditions.length < 2) {
|
10
11
|
throw Error('Cannot construct a condition group from a single condition')
|
11
12
|
}
|
@@ -13,11 +14,11 @@ export class ConditionGroup {
|
|
13
14
|
this.conditions = conditions
|
14
15
|
}
|
15
16
|
|
16
|
-
coordinatorString() {
|
17
|
+
coordinatorString(): string {
|
17
18
|
return this.conditions[0].coordinatorString()
|
18
19
|
}
|
19
20
|
|
20
|
-
conditionString() {
|
21
|
+
conditionString(): string {
|
21
22
|
const copy = [...this.conditions]
|
22
23
|
copy.splice(0, 1)
|
23
24
|
return `(${this.conditions[0].conditionString()} ${copy
|
@@ -25,7 +26,7 @@ export class ConditionGroup {
|
|
25
26
|
.join(' ')})`
|
26
27
|
}
|
27
28
|
|
28
|
-
conditionExpression() {
|
29
|
+
conditionExpression(): string {
|
29
30
|
const copy = [...this.conditions]
|
30
31
|
copy.splice(0, 1)
|
31
32
|
return `(${this.conditions[0].conditionExpression()} ${copy
|
@@ -38,11 +39,11 @@ export class ConditionGroup {
|
|
38
39
|
return this
|
39
40
|
}
|
40
41
|
|
41
|
-
getCoordinator() {
|
42
|
+
getCoordinator(): Coordinator | undefined {
|
42
43
|
return this.conditions[0].getCoordinator()
|
43
44
|
}
|
44
45
|
|
45
|
-
setCoordinator(coordinator
|
46
|
+
setCoordinator(coordinator?: Coordinator) {
|
46
47
|
this.conditions[0].setCoordinator(coordinator)
|
47
48
|
}
|
48
49
|
|
@@ -50,11 +51,11 @@ export class ConditionGroup {
|
|
50
51
|
return true
|
51
52
|
}
|
52
53
|
|
53
|
-
getGroupedConditions() {
|
54
|
+
getGroupedConditions(): (Condition | ConditionRef | ConditionGroup)[] {
|
54
55
|
return this.conditions.map((condition) => condition.clone())
|
55
56
|
}
|
56
57
|
|
57
|
-
clone() {
|
58
|
+
clone(): ConditionGroup {
|
58
59
|
return new ConditionGroup(
|
59
60
|
this.conditions.map((condition) => condition.clone())
|
60
61
|
)
|
@@ -6,18 +6,16 @@ import { conditionValueFrom } from '~/src/conditions/condition-values.js'
|
|
6
6
|
import { Condition } from '~/src/conditions/condition.js'
|
7
7
|
import { Coordinator } from '~/src/conditions/enums.js'
|
8
8
|
import { toPresentationString, toExpression } from '~/src/conditions/helpers.js'
|
9
|
-
import {
|
10
|
-
|
11
|
-
type
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
conditions: Condition[]
|
16
|
-
}
|
9
|
+
import {
|
10
|
+
type ConditionData,
|
11
|
+
type ConditionGroupData,
|
12
|
+
type ConditionRefData,
|
13
|
+
type ConditionsModelData
|
14
|
+
} from '~/src/conditions/types.js'
|
17
15
|
|
18
16
|
export class ConditionsModel {
|
19
|
-
#groupedConditions:
|
20
|
-
#userGroupedConditions:
|
17
|
+
#groupedConditions: (Condition | ConditionRef | ConditionGroup)[] = []
|
18
|
+
#userGroupedConditions: (Condition | ConditionRef | ConditionGroup)[] = []
|
21
19
|
#conditionName: string | undefined = undefined
|
22
20
|
|
23
21
|
clone() {
|
@@ -47,7 +45,7 @@ export class ConditionsModel {
|
|
47
45
|
return this.#conditionName
|
48
46
|
}
|
49
47
|
|
50
|
-
add(condition: Condition) {
|
48
|
+
add(condition: Condition | ConditionRef) {
|
51
49
|
const coordinatorExpected = this.#userGroupedConditions.length !== 0
|
52
50
|
|
53
51
|
if (condition.getCoordinator() && !coordinatorExpected) {
|
@@ -144,7 +142,7 @@ export class ConditionsModel {
|
|
144
142
|
this.#userGroupedConditions[1].setCoordinator(
|
145
143
|
this.#userGroupedConditions[0].getCoordinator()
|
146
144
|
)
|
147
|
-
this.#userGroupedConditions[0].setCoordinator(
|
145
|
+
this.#userGroupedConditions[0].setCoordinator()
|
148
146
|
}
|
149
147
|
|
150
148
|
get asPerUserGroupings() {
|
@@ -172,7 +170,7 @@ export class ConditionsModel {
|
|
172
170
|
}
|
173
171
|
|
174
172
|
_applyGroups(
|
175
|
-
userGroupedConditions: (Condition |
|
173
|
+
userGroupedConditions: (Condition | ConditionRef | ConditionGroup)[]
|
176
174
|
) {
|
177
175
|
const correctedUserGroups = userGroupedConditions.map((condition) =>
|
178
176
|
condition instanceof ConditionGroup && condition.conditions.length > 2
|
@@ -191,8 +189,11 @@ export class ConditionsModel {
|
|
191
189
|
)
|
192
190
|
}
|
193
191
|
|
194
|
-
_group(
|
195
|
-
|
192
|
+
_group(
|
193
|
+
conditions: (Condition | ConditionRef | ConditionGroup)[],
|
194
|
+
groupDefs: ConditionGroupDef[]
|
195
|
+
) {
|
196
|
+
return conditions.reduce<(Condition | ConditionRef | ConditionGroup)[]>(
|
196
197
|
(groups, condition, index, conditions) => {
|
197
198
|
const groupDef = groupDefs.find((groupDef) => groupDef.contains(index))
|
198
199
|
|
@@ -211,7 +212,10 @@ export class ConditionsModel {
|
|
211
212
|
)
|
212
213
|
}
|
213
214
|
|
214
|
-
_ungroup(
|
215
|
+
_ungroup(
|
216
|
+
conditions: (Condition | ConditionRef | ConditionGroup)[],
|
217
|
+
splitIndex: number
|
218
|
+
) {
|
215
219
|
if (conditions[splitIndex].isGroup()) {
|
216
220
|
const copy = [...conditions]
|
217
221
|
copy.splice(
|
@@ -224,7 +228,7 @@ export class ConditionsModel {
|
|
224
228
|
return conditions
|
225
229
|
}
|
226
230
|
|
227
|
-
_autoGroupDefs(conditions:
|
231
|
+
_autoGroupDefs(conditions: (Condition | ConditionRef | ConditionGroup)[]) {
|
228
232
|
const orPositions: number[] = []
|
229
233
|
|
230
234
|
conditions.forEach((condition, index) => {
|
@@ -258,17 +262,17 @@ export class ConditionsModel {
|
|
258
262
|
return []
|
259
263
|
}
|
260
264
|
|
261
|
-
toJSON() {
|
265
|
+
toJSON(): ConditionsModelData {
|
262
266
|
const name = this.#conditionName
|
263
267
|
const conditions = this.#userGroupedConditions
|
264
268
|
return {
|
265
|
-
name,
|
269
|
+
name: name ?? '',
|
266
270
|
conditions: conditions.map((it) => it.clone())
|
267
271
|
}
|
268
272
|
}
|
269
273
|
|
270
274
|
// TODO:- why is this not a constructor?
|
271
|
-
static from(obj:
|
275
|
+
static from(obj: ConditionsModel | ConditionsModelData) {
|
272
276
|
if (obj instanceof ConditionsModel) {
|
273
277
|
return obj
|
274
278
|
}
|
@@ -284,11 +288,9 @@ export class ConditionsModel {
|
|
284
288
|
}
|
285
289
|
}
|
286
290
|
|
287
|
-
|
288
|
-
it:
|
289
|
-
)
|
290
|
-
|
291
|
-
const conditionFrom: ConditionFrom = function (it) {
|
291
|
+
function conditionFrom(
|
292
|
+
it: ConditionData | ConditionRefData | ConditionGroupData
|
293
|
+
): Condition | ConditionRef | ConditionGroup {
|
292
294
|
if ('conditions' in it) {
|
293
295
|
return new ConditionGroup(
|
294
296
|
it.conditions.map((condition) => conditionFrom(condition))
|
@@ -3,11 +3,8 @@ import { isConditionalType } from '../components/helpers.js'
|
|
3
3
|
import { ComponentType } from '~/src/components/enums.js'
|
4
4
|
import { type ComponentDef } from '~/src/components/types.js'
|
5
5
|
import {
|
6
|
-
timeUnits,
|
7
|
-
dateUnits,
|
8
|
-
dateTimeUnits,
|
9
6
|
ConditionValue,
|
10
|
-
|
7
|
+
RelativeDateValue
|
11
8
|
} from '~/src/conditions/condition-values.js'
|
12
9
|
import {
|
13
10
|
DateDirections,
|
@@ -16,9 +13,7 @@ import {
|
|
16
13
|
} from '~/src/conditions/enums.js'
|
17
14
|
import {
|
18
15
|
type Conditionals,
|
19
|
-
type
|
20
|
-
type OperatorDefinition,
|
21
|
-
type TimeUnits
|
16
|
+
type OperatorDefinition
|
22
17
|
} from '~/src/conditions/types.js'
|
23
18
|
|
24
19
|
const defaultOperators = {
|
@@ -36,35 +31,25 @@ const textFieldOperators = {
|
|
36
31
|
[OperatorName.HasLength]: lengthIs(Operator.Is)
|
37
32
|
}
|
38
33
|
|
39
|
-
const
|
40
|
-
[OperatorName.Is]:
|
41
|
-
[OperatorName.IsNot]:
|
42
|
-
[OperatorName.IsBefore]:
|
43
|
-
[OperatorName.IsAfter]:
|
34
|
+
const absoluteDateOperators = {
|
35
|
+
[OperatorName.Is]: absoluteDate(Operator.Is),
|
36
|
+
[OperatorName.IsNot]: absoluteDate(Operator.IsNot),
|
37
|
+
[OperatorName.IsBefore]: absoluteDate(Operator.IsLessThan),
|
38
|
+
[OperatorName.IsAfter]: absoluteDate(Operator.IsMoreThan)
|
44
39
|
}
|
45
40
|
|
46
|
-
const
|
47
|
-
[OperatorName.IsAtLeast]:
|
48
|
-
|
49
|
-
|
50
|
-
units
|
51
|
-
),
|
52
|
-
[OperatorName.IsAtMost]: relativeTime(
|
53
|
-
Operator.IsAtLeast,
|
54
|
-
Operator.IsAtMost,
|
55
|
-
units
|
56
|
-
),
|
57
|
-
[OperatorName.IsLessThan]: relativeTime(
|
41
|
+
const relativeDateOperators = {
|
42
|
+
[OperatorName.IsAtLeast]: relativeDate(Operator.IsAtMost, Operator.IsAtLeast),
|
43
|
+
[OperatorName.IsAtMost]: relativeDate(Operator.IsAtLeast, Operator.IsAtMost),
|
44
|
+
[OperatorName.IsLessThan]: relativeDate(
|
58
45
|
Operator.IsMoreThan,
|
59
|
-
Operator.IsLessThan
|
60
|
-
units
|
46
|
+
Operator.IsLessThan
|
61
47
|
),
|
62
|
-
[OperatorName.IsMoreThan]:
|
48
|
+
[OperatorName.IsMoreThan]: relativeDate(
|
63
49
|
Operator.IsLessThan,
|
64
|
-
Operator.IsMoreThan
|
65
|
-
units
|
50
|
+
Operator.IsMoreThan
|
66
51
|
)
|
67
|
-
}
|
52
|
+
}
|
68
53
|
|
69
54
|
export const customOperators = {
|
70
55
|
[ComponentType.RadiosField]: defaultOperators,
|
@@ -78,17 +63,14 @@ export const customOperators = {
|
|
78
63
|
[OperatorName.IsLessThan]: inline(Operator.IsLessThan),
|
79
64
|
[OperatorName.IsMoreThan]: inline(Operator.IsMoreThan)
|
80
65
|
}),
|
81
|
-
[ComponentType.TimeField]: {
|
82
|
-
...absoluteDateTimeOperators,
|
83
|
-
...relativeTimeOperators(timeUnits)
|
84
|
-
},
|
85
66
|
[ComponentType.DatePartsField]: {
|
86
|
-
...
|
87
|
-
...
|
67
|
+
...absoluteDateOperators,
|
68
|
+
...relativeDateOperators
|
88
69
|
},
|
89
70
|
[ComponentType.TextField]: withDefaults(textFieldOperators),
|
90
71
|
[ComponentType.MultilineTextField]: withDefaults(textFieldOperators),
|
91
72
|
[ComponentType.EmailAddressField]: withDefaults(textFieldOperators),
|
73
|
+
[ComponentType.SelectField]: defaultOperators,
|
92
74
|
[ComponentType.YesNoField]: defaultOperators
|
93
75
|
}
|
94
76
|
|
@@ -105,7 +87,7 @@ export function getExpression(
|
|
105
87
|
fieldType: ComponentType,
|
106
88
|
fieldName: string,
|
107
89
|
operator: OperatorName,
|
108
|
-
value: ConditionValue |
|
90
|
+
value: ConditionValue | RelativeDateValue
|
109
91
|
) {
|
110
92
|
const conditionals = getConditionals(fieldType)
|
111
93
|
if (!conditionals) {
|
@@ -171,7 +153,7 @@ function not(operatorDefinition: OperatorDefinition): OperatorDefinition {
|
|
171
153
|
|
172
154
|
function formatValue(
|
173
155
|
field: Pick<ComponentDef, 'type'>,
|
174
|
-
value: ConditionValue |
|
156
|
+
value: ConditionValue | RelativeDateValue
|
175
157
|
) {
|
176
158
|
if (
|
177
159
|
'value' in value &&
|
@@ -184,15 +166,15 @@ function formatValue(
|
|
184
166
|
return `'${value.toExpression()}'`
|
185
167
|
}
|
186
168
|
|
187
|
-
export const
|
188
|
-
|
169
|
+
export const absoluteDateOperatorNames = Object.keys(
|
170
|
+
absoluteDateOperators
|
189
171
|
) as OperatorName[]
|
190
172
|
|
191
|
-
export const
|
192
|
-
|
173
|
+
export const relativeDateOperatorNames = Object.keys(
|
174
|
+
relativeDateOperators
|
193
175
|
) as OperatorName[]
|
194
176
|
|
195
|
-
function
|
177
|
+
function absoluteDate(operator: Operator): OperatorDefinition {
|
196
178
|
return {
|
197
179
|
expression(field, value) {
|
198
180
|
if (!(value instanceof ConditionValue)) {
|
@@ -206,17 +188,15 @@ function absoluteDateTime(operator: Operator): OperatorDefinition {
|
|
206
188
|
}
|
207
189
|
}
|
208
190
|
|
209
|
-
function
|
191
|
+
function relativeDate(
|
210
192
|
pastOperator: Operator,
|
211
|
-
futureOperator: Operator
|
212
|
-
units: DateUnits | TimeUnits
|
193
|
+
futureOperator: Operator
|
213
194
|
): OperatorDefinition {
|
214
195
|
return {
|
215
|
-
units,
|
216
196
|
expression(field, value) {
|
217
|
-
if (!(value instanceof
|
197
|
+
if (!(value instanceof RelativeDateValue)) {
|
218
198
|
throw new Error(
|
219
|
-
"Expression param 'value' must be
|
199
|
+
"Expression param 'value' must be RelativeDateValue instance"
|
220
200
|
)
|
221
201
|
}
|
222
202
|
|
@@ -2,13 +2,13 @@ import { ConditionAbstract } from '~/src/conditions/condition-abstract.js'
|
|
2
2
|
import { type Coordinator } from '~/src/conditions/enums.js'
|
3
3
|
|
4
4
|
export class ConditionRef extends ConditionAbstract {
|
5
|
-
conditionName
|
6
|
-
conditionDisplayName
|
5
|
+
conditionName: string
|
6
|
+
conditionDisplayName: string
|
7
7
|
|
8
8
|
constructor(
|
9
9
|
conditionName: string,
|
10
10
|
conditionDisplayName: string,
|
11
|
-
coordinator
|
11
|
+
coordinator?: Coordinator
|
12
12
|
) {
|
13
13
|
super(coordinator)
|
14
14
|
|