@legalplace/tagextractor 2.1.0 → 2.2.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/.eslintignore +2 -0
- package/.eslintrc +2 -58
- package/.gitlab-ci.yml +7 -6
- package/.vscode/settings.json +25 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/libs/Extractor.d.ts +5 -5
- package/dist/libs/Extractor.js +101 -96
- package/dist/libs/Extractor.test.d.ts +1 -0
- package/dist/libs/Extractor.test.js +278 -0
- package/dist/libs/fixtures/inputs.json +60 -0
- package/dist/libs/fixtures/model.json +291 -0
- package/dist/libs/fixtures/ovc.json +15 -0
- package/dist/libs/fixtures/references.json +946 -0
- package/jest.config.ts +205 -0
- package/package.json +24 -22
- package/setupJest.ts +7 -0
- package/src/index.ts +1 -1
- package/src/libs/Extractor.test.ts +360 -0
- package/src/libs/Extractor.ts +119 -63
- package/src/libs/fixtures/inputs.json +60 -0
- package/src/libs/fixtures/model.json +291 -0
- package/src/libs/fixtures/ovc.json +15 -0
- package/src/libs/fixtures/references.json +946 -0
- package/tsconfig.json +19 -7
- package/.prettierrc.js +0 -10
- package/tsconfig.eslint.json +0 -12
package/src/libs/Extractor.ts
CHANGED
|
@@ -1,47 +1,56 @@
|
|
|
1
|
-
import { ModelV3 } from
|
|
2
|
-
import { ReferencesParser, Types } from
|
|
3
|
-
import { ReferencesType } from
|
|
4
|
-
import ConditionsRunner from
|
|
5
|
-
import OvcConverter from
|
|
6
|
-
import InputsType from
|
|
7
|
-
import OvcType from
|
|
8
|
-
import TagsType from
|
|
1
|
+
import { ModelV3 } from "@legalplace/models-v3-types";
|
|
2
|
+
import { ReferencesParser, Types } from "@legalplace/referencesparser";
|
|
3
|
+
import { ReferencesType } from "@legalplace/referencesparser/dist/libs/References.type";
|
|
4
|
+
import ConditionsRunner from "@legalplace/conditions-runner";
|
|
5
|
+
import OvcConverter from "@legalplace/ovc-converter";
|
|
6
|
+
import InputsType from "@legalplace/types/dist/inputs";
|
|
7
|
+
import OvcType from "@legalplace/types/dist/ovc";
|
|
8
|
+
import TagsType from "../types/tags.type";
|
|
9
9
|
|
|
10
10
|
class TagExtractor {
|
|
11
|
-
private references: Types.ReferencesType
|
|
11
|
+
private references: Types.ReferencesType;
|
|
12
12
|
|
|
13
|
-
private inputs: InputsType
|
|
13
|
+
private inputs: InputsType;
|
|
14
14
|
|
|
15
|
-
private conditionsRunner: ConditionsRunner
|
|
15
|
+
private conditionsRunner: ConditionsRunner;
|
|
16
16
|
|
|
17
17
|
private tags: TagsType = {
|
|
18
18
|
options: {},
|
|
19
19
|
variables: {}
|
|
20
|
-
}
|
|
20
|
+
};
|
|
21
21
|
|
|
22
|
-
private isReferencesType = (
|
|
22
|
+
private isReferencesType = (
|
|
23
|
+
_obj: ModelV3 | ReferencesType
|
|
24
|
+
): _obj is ReferencesType => {
|
|
23
25
|
// We check if the object contains one of the fields only contained in ReferencesType
|
|
24
|
-
return Object.keys(_obj).some(key => key ===
|
|
25
|
-
}
|
|
26
|
+
return Object.keys(_obj).some(key => key === "boxes");
|
|
27
|
+
};
|
|
26
28
|
|
|
27
|
-
constructor(
|
|
28
|
-
|
|
29
|
+
constructor(
|
|
30
|
+
modelOrReferences: ModelV3 | ReferencesType,
|
|
31
|
+
ovc: OvcType | InputsType
|
|
32
|
+
) {
|
|
33
|
+
this.references = this.isReferencesType(modelOrReferences)
|
|
34
|
+
? modelOrReferences
|
|
35
|
+
: new ReferencesParser(modelOrReferences).references;
|
|
29
36
|
|
|
30
37
|
// Converting inputs if needed
|
|
31
|
-
this.inputs = OvcConverter.isOptionsVariables(ovc)
|
|
38
|
+
this.inputs = OvcConverter.isOptionsVariables(ovc)
|
|
39
|
+
? ovc
|
|
40
|
+
: OvcConverter.convertToOptionsVariables(ovc, this.references);
|
|
32
41
|
|
|
33
42
|
// Initiaing Conditions runner
|
|
34
|
-
this.conditionsRunner = new ConditionsRunner(this.references, this.inputs)
|
|
43
|
+
this.conditionsRunner = new ConditionsRunner(this.references, this.inputs);
|
|
35
44
|
|
|
36
45
|
// Extracting tags from options
|
|
37
|
-
this.extractFromOptions()
|
|
46
|
+
this.extractFromOptions();
|
|
38
47
|
|
|
39
48
|
// Extracting tags from variables
|
|
40
|
-
this.extractFromVariables()
|
|
49
|
+
this.extractFromVariables();
|
|
41
50
|
}
|
|
42
51
|
|
|
43
52
|
public get getTags() {
|
|
44
|
-
return this.tags
|
|
53
|
+
return this.tags;
|
|
45
54
|
}
|
|
46
55
|
|
|
47
56
|
/**
|
|
@@ -49,12 +58,13 @@ class TagExtractor {
|
|
|
49
58
|
*/
|
|
50
59
|
private extractFromOptions() {
|
|
51
60
|
Object.keys(this.references.options).forEach(id => {
|
|
52
|
-
const { tags, label } = this.references.options[id].meta
|
|
61
|
+
const { tags, label } = this.references.options[id].meta;
|
|
53
62
|
|
|
54
63
|
if (Array.isArray(tags) && tags.length > 0 && this.inputs.options[id]) {
|
|
55
64
|
this.inputs.options[id].forEach((v, index) => {
|
|
56
65
|
tags.forEach(tag => {
|
|
57
|
-
if (this.tags.options[tag] === undefined)
|
|
66
|
+
if (this.tags.options[tag] === undefined)
|
|
67
|
+
this.tags.options[tag] = [];
|
|
58
68
|
this.tags.options[tag].push({
|
|
59
69
|
id: parseInt(id, 10),
|
|
60
70
|
index,
|
|
@@ -62,11 +72,11 @@ class TagExtractor {
|
|
|
62
72
|
condition: this.getOptionCondition(parseInt(id, 10), index),
|
|
63
73
|
visible: this.isOptionDisplayed(parseInt(id, 10), index),
|
|
64
74
|
value: this.inputs.options[id][index]
|
|
65
|
-
})
|
|
66
|
-
})
|
|
67
|
-
})
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
});
|
|
68
78
|
}
|
|
69
|
-
})
|
|
79
|
+
});
|
|
70
80
|
}
|
|
71
81
|
|
|
72
82
|
/**
|
|
@@ -74,24 +84,26 @@ class TagExtractor {
|
|
|
74
84
|
*/
|
|
75
85
|
private extractFromVariables() {
|
|
76
86
|
Object.keys(this.references.variables).forEach(id => {
|
|
77
|
-
const { tags, label } = this.references.variables[id]
|
|
87
|
+
const { tags, label } = this.references.variables[id];
|
|
78
88
|
|
|
79
89
|
if (Array.isArray(tags) && tags.length > 0 && this.inputs.variables[id]) {
|
|
80
90
|
this.inputs.variables[id].forEach((v, index) => {
|
|
81
91
|
tags.forEach(tag => {
|
|
82
|
-
if (this.tags.variables[tag] === undefined)
|
|
92
|
+
if (this.tags.variables[tag] === undefined)
|
|
93
|
+
this.tags.variables[tag] = [];
|
|
83
94
|
this.tags.variables[tag].push({
|
|
84
95
|
id: parseInt(id, 10),
|
|
85
96
|
index,
|
|
86
97
|
label,
|
|
87
|
-
condition:
|
|
98
|
+
condition:
|
|
99
|
+
this.getVariableCondition(parseInt(id, 10), index) !== false,
|
|
88
100
|
visible: this.isVariableDisplayed(parseInt(id, 10), index),
|
|
89
101
|
value: this.inputs.variables[id][index]
|
|
90
|
-
})
|
|
91
|
-
})
|
|
92
|
-
})
|
|
102
|
+
});
|
|
103
|
+
});
|
|
104
|
+
});
|
|
93
105
|
}
|
|
94
|
-
})
|
|
106
|
+
});
|
|
95
107
|
}
|
|
96
108
|
|
|
97
109
|
/**
|
|
@@ -101,12 +113,23 @@ class TagExtractor {
|
|
|
101
113
|
*/
|
|
102
114
|
isVariableDisplayed(id: number, index: number) {
|
|
103
115
|
// Getting variable's conditions & executing it if any
|
|
104
|
-
const variableCondition = this.getVariableCondition(id, index)
|
|
105
|
-
const variableParents =
|
|
106
|
-
|
|
107
|
-
const
|
|
108
|
-
|
|
109
|
-
|
|
116
|
+
const variableCondition = this.getVariableCondition(id, index);
|
|
117
|
+
const variableParents =
|
|
118
|
+
this.references.relations.variables[id]?.parents || [];
|
|
119
|
+
const parentOptionIsDisplayed = this.isOptionDisplayed(
|
|
120
|
+
variableParents[0],
|
|
121
|
+
index
|
|
122
|
+
);
|
|
123
|
+
const parentOptionIsTruethful =
|
|
124
|
+
this.inputs.options[variableParents[0]]?.[index] === true;
|
|
125
|
+
|
|
126
|
+
return (
|
|
127
|
+
[
|
|
128
|
+
variableCondition,
|
|
129
|
+
parentOptionIsDisplayed,
|
|
130
|
+
parentOptionIsTruethful
|
|
131
|
+
].filter(c => c !== true).length === 0
|
|
132
|
+
);
|
|
110
133
|
}
|
|
111
134
|
|
|
112
135
|
/**
|
|
@@ -116,19 +139,29 @@ class TagExtractor {
|
|
|
116
139
|
*/
|
|
117
140
|
isOptionDisplayed(id: number, index: number) {
|
|
118
141
|
// Getting variable's conditions & executing it if any
|
|
119
|
-
const optionCondition = this.getOptionCondition(id, index)
|
|
120
|
-
const optionParents = this.references.relations.options[id]?.parents || []
|
|
142
|
+
const optionCondition = this.getOptionCondition(id, index);
|
|
143
|
+
const optionParents = this.references.relations.options[id]?.parents || [];
|
|
121
144
|
const parentsConditions = optionParents.map(optionId => {
|
|
122
|
-
return this.getOptionCondition(optionId, index) !== false
|
|
123
|
-
})
|
|
145
|
+
return this.getOptionCondition(optionId, index) !== false;
|
|
146
|
+
});
|
|
124
147
|
const parentsInputs = optionParents.map(optionId => {
|
|
125
148
|
// If the parent option is not already defined we set the displayed parameter to false
|
|
126
|
-
return this.inputs.options[optionId]
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
149
|
+
return this.inputs.options[optionId]
|
|
150
|
+
? this.inputs.options[optionId][index]
|
|
151
|
+
: false;
|
|
152
|
+
});
|
|
153
|
+
const parentSectionId = this.getOptionParentSection(id);
|
|
154
|
+
const parentSectionCondition =
|
|
155
|
+
this.getSectionCondition(parentSectionId) !== false;
|
|
156
|
+
|
|
157
|
+
return (
|
|
158
|
+
[
|
|
159
|
+
optionCondition,
|
|
160
|
+
parentSectionCondition,
|
|
161
|
+
...parentsConditions,
|
|
162
|
+
...parentsInputs
|
|
163
|
+
].filter(c => c !== true).length === 0
|
|
164
|
+
);
|
|
132
165
|
}
|
|
133
166
|
|
|
134
167
|
/**
|
|
@@ -137,8 +170,15 @@ class TagExtractor {
|
|
|
137
170
|
* @param index Variable's index
|
|
138
171
|
*/
|
|
139
172
|
private getVariableCondition(id: number, index: number) {
|
|
140
|
-
const conditionObject = this.references.conditions.variables[id]
|
|
141
|
-
return conditionObject === undefined
|
|
173
|
+
const conditionObject = this.references.conditions.variables[id];
|
|
174
|
+
return conditionObject === undefined
|
|
175
|
+
? true
|
|
176
|
+
: this.conditionsRunner.executeCondition(
|
|
177
|
+
conditionObject,
|
|
178
|
+
id,
|
|
179
|
+
index,
|
|
180
|
+
"variables"
|
|
181
|
+
);
|
|
142
182
|
}
|
|
143
183
|
|
|
144
184
|
/**
|
|
@@ -147,8 +187,15 @@ class TagExtractor {
|
|
|
147
187
|
* @param index Option's index
|
|
148
188
|
*/
|
|
149
189
|
private getOptionCondition(id: number, index: number) {
|
|
150
|
-
const conditionObject = this.references.conditions.options[id]
|
|
151
|
-
return conditionObject === undefined
|
|
190
|
+
const conditionObject = this.references.conditions.options[id];
|
|
191
|
+
return conditionObject === undefined
|
|
192
|
+
? true
|
|
193
|
+
: this.conditionsRunner.executeCondition(
|
|
194
|
+
conditionObject,
|
|
195
|
+
id,
|
|
196
|
+
index,
|
|
197
|
+
"options"
|
|
198
|
+
);
|
|
152
199
|
}
|
|
153
200
|
|
|
154
201
|
/**
|
|
@@ -156,8 +203,15 @@ class TagExtractor {
|
|
|
156
203
|
* @param id Section's id
|
|
157
204
|
*/
|
|
158
205
|
private getSectionCondition(id: number) {
|
|
159
|
-
const conditionObject = this.references.conditions.sections.main[id]
|
|
160
|
-
return conditionObject === undefined
|
|
206
|
+
const conditionObject = this.references.conditions.sections.main[id];
|
|
207
|
+
return conditionObject === undefined
|
|
208
|
+
? true
|
|
209
|
+
: this.conditionsRunner.executeCondition(
|
|
210
|
+
conditionObject,
|
|
211
|
+
id,
|
|
212
|
+
0,
|
|
213
|
+
"sections"
|
|
214
|
+
);
|
|
161
215
|
}
|
|
162
216
|
|
|
163
217
|
/**
|
|
@@ -165,20 +219,22 @@ class TagExtractor {
|
|
|
165
219
|
* @param id Option's id
|
|
166
220
|
*/
|
|
167
221
|
private getOptionParentSection(id: number) {
|
|
168
|
-
const { parents } = this.references.relations.options[id]
|
|
222
|
+
const { parents } = this.references.relations.options[id];
|
|
169
223
|
|
|
170
224
|
// Getting root option id
|
|
171
|
-
const rootId = parents.length > 0 ? parents[parents.length - 1] : id
|
|
225
|
+
const rootId = parents.length > 0 ? parents[parents.length - 1] : id;
|
|
172
226
|
|
|
173
227
|
// Looking for section
|
|
174
|
-
const sections = Object.values(this.references.sections.main)
|
|
228
|
+
const sections = Object.values(this.references.sections.main);
|
|
175
229
|
|
|
176
230
|
for (let i = 0; i < sections.length; i += 1) {
|
|
177
|
-
if (sections[i].options.includes(rootId)) return sections[i].id
|
|
231
|
+
if (sections[i].options.includes(rootId)) return sections[i].id;
|
|
178
232
|
}
|
|
179
233
|
|
|
180
|
-
throw new Error(
|
|
234
|
+
throw new Error(
|
|
235
|
+
`Cannot find parent section for option ${id} (Root option id: ${rootId})`
|
|
236
|
+
);
|
|
181
237
|
}
|
|
182
238
|
}
|
|
183
239
|
|
|
184
|
-
export default TagExtractor
|
|
240
|
+
export default TagExtractor;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
{
|
|
2
|
+
"options": {
|
|
3
|
+
"1": [
|
|
4
|
+
true
|
|
5
|
+
],
|
|
6
|
+
"2": [
|
|
7
|
+
true
|
|
8
|
+
],
|
|
9
|
+
"5": [
|
|
10
|
+
true
|
|
11
|
+
],
|
|
12
|
+
"6": [
|
|
13
|
+
true
|
|
14
|
+
],
|
|
15
|
+
"7": [
|
|
16
|
+
true
|
|
17
|
+
],
|
|
18
|
+
"8": [
|
|
19
|
+
false
|
|
20
|
+
],
|
|
21
|
+
"10": [
|
|
22
|
+
false
|
|
23
|
+
],
|
|
24
|
+
"11": [
|
|
25
|
+
true
|
|
26
|
+
],
|
|
27
|
+
"12": [
|
|
28
|
+
true
|
|
29
|
+
],
|
|
30
|
+
"13": [
|
|
31
|
+
false
|
|
32
|
+
],
|
|
33
|
+
"14": [
|
|
34
|
+
false
|
|
35
|
+
],
|
|
36
|
+
"15": [
|
|
37
|
+
false
|
|
38
|
+
],
|
|
39
|
+
"16": [
|
|
40
|
+
true
|
|
41
|
+
],
|
|
42
|
+
"18": [
|
|
43
|
+
false
|
|
44
|
+
],
|
|
45
|
+
"24": [
|
|
46
|
+
true
|
|
47
|
+
]
|
|
48
|
+
},
|
|
49
|
+
"variables": {
|
|
50
|
+
"1": [
|
|
51
|
+
"Company"
|
|
52
|
+
],
|
|
53
|
+
"2": [
|
|
54
|
+
""
|
|
55
|
+
],
|
|
56
|
+
"5": [
|
|
57
|
+
"Non merci"
|
|
58
|
+
]
|
|
59
|
+
}
|
|
60
|
+
}
|
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
{
|
|
2
|
+
"documents": {
|
|
3
|
+
"main": {
|
|
4
|
+
"name": "main",
|
|
5
|
+
"sections": [
|
|
6
|
+
{
|
|
7
|
+
"id": 1,
|
|
8
|
+
"label": "Première section",
|
|
9
|
+
"options": [
|
|
10
|
+
1,
|
|
11
|
+
2,
|
|
12
|
+
5,
|
|
13
|
+
6,
|
|
14
|
+
7,
|
|
15
|
+
11
|
|
16
|
+
]
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"id": 2,
|
|
20
|
+
"label": "Deuxième section ",
|
|
21
|
+
"options": [
|
|
22
|
+
15,
|
|
23
|
+
16
|
|
24
|
+
],
|
|
25
|
+
"grantLevel": "ADMIN"
|
|
26
|
+
}
|
|
27
|
+
]
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
"options": {
|
|
31
|
+
"1": {
|
|
32
|
+
"meta": {
|
|
33
|
+
"type": "hidden",
|
|
34
|
+
"label": "Text de la question",
|
|
35
|
+
"output": "<p></p>",
|
|
36
|
+
"step": "*",
|
|
37
|
+
"id": 1
|
|
38
|
+
},
|
|
39
|
+
"variables": [],
|
|
40
|
+
"options": []
|
|
41
|
+
},
|
|
42
|
+
"2": {
|
|
43
|
+
"meta": {
|
|
44
|
+
"type": "box",
|
|
45
|
+
"id": 2,
|
|
46
|
+
"step": "*",
|
|
47
|
+
"box": {
|
|
48
|
+
"type": "light",
|
|
49
|
+
"content": "<p>Ceci est du texte de présentation de la première section</p>"
|
|
50
|
+
},
|
|
51
|
+
"label": ""
|
|
52
|
+
},
|
|
53
|
+
"options": [],
|
|
54
|
+
"variables": []
|
|
55
|
+
},
|
|
56
|
+
"5": {
|
|
57
|
+
"meta": {
|
|
58
|
+
"type": "checkbox",
|
|
59
|
+
"id": 5,
|
|
60
|
+
"step": "*",
|
|
61
|
+
"label": "J'ai déjà choisi le nom de mon entreprise (conditionne la question sur le nom de l'entreprise)",
|
|
62
|
+
"conditions": {
|
|
63
|
+
"and": [
|
|
64
|
+
{
|
|
65
|
+
"selected": [
|
|
66
|
+
{
|
|
67
|
+
"var": "o.12"
|
|
68
|
+
}
|
|
69
|
+
]
|
|
70
|
+
}
|
|
71
|
+
]
|
|
72
|
+
}
|
|
73
|
+
},
|
|
74
|
+
"options": [],
|
|
75
|
+
"variables": []
|
|
76
|
+
},
|
|
77
|
+
"6": {
|
|
78
|
+
"meta": {
|
|
79
|
+
"type": "static",
|
|
80
|
+
"id": 6,
|
|
81
|
+
"label": "Quel est le nom de votre entreprise ?",
|
|
82
|
+
"step": "*",
|
|
83
|
+
"conditions": {
|
|
84
|
+
"and": [
|
|
85
|
+
{
|
|
86
|
+
"selected": [
|
|
87
|
+
{
|
|
88
|
+
"var": "o.5"
|
|
89
|
+
}
|
|
90
|
+
]
|
|
91
|
+
}
|
|
92
|
+
]
|
|
93
|
+
},
|
|
94
|
+
"multiple": {
|
|
95
|
+
"enabled": false
|
|
96
|
+
},
|
|
97
|
+
"style": "full"
|
|
98
|
+
},
|
|
99
|
+
"options": [
|
|
100
|
+
18,
|
|
101
|
+
24
|
|
102
|
+
],
|
|
103
|
+
"variables": [
|
|
104
|
+
1
|
|
105
|
+
]
|
|
106
|
+
},
|
|
107
|
+
"7": {
|
|
108
|
+
"meta": {
|
|
109
|
+
"type": "static",
|
|
110
|
+
"id": 7,
|
|
111
|
+
"label": "Connaissiez-vous déjà LegalPlace ?",
|
|
112
|
+
"step": "*",
|
|
113
|
+
"hidden": false,
|
|
114
|
+
"tags": [
|
|
115
|
+
"LP_fan"
|
|
116
|
+
]
|
|
117
|
+
},
|
|
118
|
+
"options": [
|
|
119
|
+
8,
|
|
120
|
+
10
|
|
121
|
+
],
|
|
122
|
+
"variables": []
|
|
123
|
+
},
|
|
124
|
+
"8": {
|
|
125
|
+
"meta": {
|
|
126
|
+
"type": "radio",
|
|
127
|
+
"id": 8,
|
|
128
|
+
"step": "*",
|
|
129
|
+
"label": "Oui j'adore"
|
|
130
|
+
},
|
|
131
|
+
"options": [],
|
|
132
|
+
"variables": []
|
|
133
|
+
},
|
|
134
|
+
"10": {
|
|
135
|
+
"meta": {
|
|
136
|
+
"type": "radio",
|
|
137
|
+
"id": 10,
|
|
138
|
+
"step": "*",
|
|
139
|
+
"label": "Non"
|
|
140
|
+
},
|
|
141
|
+
"options": [],
|
|
142
|
+
"variables": []
|
|
143
|
+
},
|
|
144
|
+
"11": {
|
|
145
|
+
"meta": {
|
|
146
|
+
"type": "static",
|
|
147
|
+
"id": 11,
|
|
148
|
+
"label": "Quel type d'entreprise ? ",
|
|
149
|
+
"step": "*"
|
|
150
|
+
},
|
|
151
|
+
"options": [
|
|
152
|
+
12,
|
|
153
|
+
13,
|
|
154
|
+
14
|
|
155
|
+
],
|
|
156
|
+
"variables": []
|
|
157
|
+
},
|
|
158
|
+
"12": {
|
|
159
|
+
"meta": {
|
|
160
|
+
"type": "radio",
|
|
161
|
+
"id": 12,
|
|
162
|
+
"step": "*",
|
|
163
|
+
"label": "SAS"
|
|
164
|
+
},
|
|
165
|
+
"options": [],
|
|
166
|
+
"variables": []
|
|
167
|
+
},
|
|
168
|
+
"13": {
|
|
169
|
+
"meta": {
|
|
170
|
+
"type": "radio",
|
|
171
|
+
"id": 13,
|
|
172
|
+
"step": "*",
|
|
173
|
+
"label": "SASU"
|
|
174
|
+
},
|
|
175
|
+
"options": [],
|
|
176
|
+
"variables": []
|
|
177
|
+
},
|
|
178
|
+
"14": {
|
|
179
|
+
"meta": {
|
|
180
|
+
"type": "radio",
|
|
181
|
+
"id": 14,
|
|
182
|
+
"step": "*",
|
|
183
|
+
"label": "Autre"
|
|
184
|
+
},
|
|
185
|
+
"options": [],
|
|
186
|
+
"variables": []
|
|
187
|
+
},
|
|
188
|
+
"15": {
|
|
189
|
+
"meta": {
|
|
190
|
+
"type": "checkbox",
|
|
191
|
+
"id": 15,
|
|
192
|
+
"step": "*",
|
|
193
|
+
"label": "Je souhaite avoir des questions supplémentaires"
|
|
194
|
+
},
|
|
195
|
+
"options": [],
|
|
196
|
+
"variables": []
|
|
197
|
+
},
|
|
198
|
+
"16": {
|
|
199
|
+
"meta": {
|
|
200
|
+
"type": "static",
|
|
201
|
+
"id": 16,
|
|
202
|
+
"label": "Choisissez le jour de la semaine",
|
|
203
|
+
"step": "*",
|
|
204
|
+
"conditions": {
|
|
205
|
+
"and": [
|
|
206
|
+
{
|
|
207
|
+
"selected": [
|
|
208
|
+
{
|
|
209
|
+
"var": "o.15"
|
|
210
|
+
}
|
|
211
|
+
]
|
|
212
|
+
}
|
|
213
|
+
]
|
|
214
|
+
}
|
|
215
|
+
},
|
|
216
|
+
"options": [],
|
|
217
|
+
"variables": [
|
|
218
|
+
2
|
|
219
|
+
]
|
|
220
|
+
},
|
|
221
|
+
"18": {
|
|
222
|
+
"meta": {
|
|
223
|
+
"type": "checkbox",
|
|
224
|
+
"id": 18,
|
|
225
|
+
"step": "*",
|
|
226
|
+
"label": "Orange"
|
|
227
|
+
},
|
|
228
|
+
"options": [],
|
|
229
|
+
"variables": []
|
|
230
|
+
},
|
|
231
|
+
"24": {
|
|
232
|
+
"meta": {
|
|
233
|
+
"type": "static",
|
|
234
|
+
"id": 24,
|
|
235
|
+
"label": "Voulez-vous changer de nom ? ",
|
|
236
|
+
"step": "*"
|
|
237
|
+
},
|
|
238
|
+
"options": [],
|
|
239
|
+
"variables": [
|
|
240
|
+
5
|
|
241
|
+
]
|
|
242
|
+
}
|
|
243
|
+
},
|
|
244
|
+
"variables": {
|
|
245
|
+
"1": {
|
|
246
|
+
"type": "text",
|
|
247
|
+
"id": 1,
|
|
248
|
+
"label": "Nom de l'entreprise",
|
|
249
|
+
"step": "*",
|
|
250
|
+
"mandatory": false,
|
|
251
|
+
"placeholder": "",
|
|
252
|
+
"conditions": {
|
|
253
|
+
"and": [
|
|
254
|
+
{
|
|
255
|
+
"selected": [
|
|
256
|
+
{
|
|
257
|
+
"var": "o.8"
|
|
258
|
+
}
|
|
259
|
+
]
|
|
260
|
+
}
|
|
261
|
+
]
|
|
262
|
+
},
|
|
263
|
+
"tags": [
|
|
264
|
+
"Company_name"
|
|
265
|
+
],
|
|
266
|
+
"hidden": false
|
|
267
|
+
},
|
|
268
|
+
"2": {
|
|
269
|
+
"type": "list",
|
|
270
|
+
"id": 2,
|
|
271
|
+
"label": "Dropdown",
|
|
272
|
+
"step": "*",
|
|
273
|
+
"selectValues": [
|
|
274
|
+
"Lundi",
|
|
275
|
+
"Mardi",
|
|
276
|
+
"Mercredi",
|
|
277
|
+
"Jeudi",
|
|
278
|
+
"Vendredi"
|
|
279
|
+
]
|
|
280
|
+
},
|
|
281
|
+
"5": {
|
|
282
|
+
"type": "text",
|
|
283
|
+
"id": 5,
|
|
284
|
+
"label": "Field",
|
|
285
|
+
"step": "*",
|
|
286
|
+
"mandatory": false,
|
|
287
|
+
"placeholder": ""
|
|
288
|
+
}
|
|
289
|
+
},
|
|
290
|
+
"customization": {}
|
|
291
|
+
}
|