@truedat/dq 4.53.6 → 4.53.8
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/CHANGELOG.md +12 -0
- package/package.json +5 -5
- package/src/api/mutations.js +8 -0
- package/src/components/ConditionSummary.js +35 -26
- package/src/components/ImplementationActions.js +16 -0
- package/src/components/ImplementationSearchResults.js +9 -1
- package/src/components/ImplementationSummary.js +20 -14
- package/src/components/ImplementationsRoutes.js +12 -0
- package/src/components/NewRuleImplementation.js +62 -40
- package/src/components/QualityRoutes.js +7 -0
- package/src/components/RuleImplementation.js +1 -9
- package/src/components/__tests__/ImplementationSummary.spec.js +1 -1
- package/src/components/__tests__/NewRuleImplementation.spec.js +49 -45
- package/src/components/__tests__/__fixtures__/NewRuleImplementationProps.js +25 -23
- package/src/components/__tests__/__fixtures__/newRuleImplementationHelper.js +11 -12
- package/src/components/__tests__/__snapshots__/NewRuleImplementation.spec.js.snap +62 -1
- package/src/components/ruleImplementationForm/FiltersGrid.js +1 -1
- package/src/components/ruleImplementationForm/FiltersGroup.js +22 -20
- package/src/components/ruleImplementationForm/RuleImplementationForm.js +62 -25
- package/src/components/ruleImplementationForm/ValidationsForm.js +1 -2
- package/src/messages/en.js +9 -3
- package/src/messages/es.js +9 -3
- package/src/reducers/ruleImplementation.js +4 -1
- package/src/reducers/ruleRedirect.js +3 -0
- package/src/routines.js +1 -0
- package/src/sagas/index.js +3 -0
- package/src/sagas/restoreImplementation.js +24 -0
|
@@ -205,32 +205,34 @@ export const newRuleImplementationProps = {
|
|
|
205
205
|
df_content: {},
|
|
206
206
|
},
|
|
207
207
|
validations: [
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
structure: {
|
|
214
|
-
external_id: "/data/example.txt[agent]",
|
|
215
|
-
id: 4814766,
|
|
216
|
-
metadata: {
|
|
217
|
-
metadata: { order: "6" },
|
|
208
|
+
[
|
|
209
|
+
{
|
|
210
|
+
operator: {
|
|
211
|
+
name: "length_not_eq",
|
|
212
|
+
value_type: "number",
|
|
218
213
|
},
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
214
|
+
structure: {
|
|
215
|
+
external_id: "/data/example.txt[agent]",
|
|
216
|
+
id: 4814766,
|
|
217
|
+
metadata: {
|
|
218
|
+
metadata: { order: "6" },
|
|
219
|
+
},
|
|
220
|
+
name: "agent",
|
|
221
|
+
path: ["Main", "example.txt"],
|
|
222
|
+
system: {
|
|
223
|
+
external_id: "file_system",
|
|
224
|
+
id: 33,
|
|
225
|
+
name: "File System",
|
|
226
|
+
},
|
|
227
|
+
type: "Column",
|
|
225
228
|
},
|
|
226
|
-
|
|
229
|
+
value: [
|
|
230
|
+
{
|
|
231
|
+
raw: 2,
|
|
232
|
+
},
|
|
233
|
+
],
|
|
227
234
|
},
|
|
228
|
-
|
|
229
|
-
{
|
|
230
|
-
raw: 2,
|
|
231
|
-
},
|
|
232
|
-
],
|
|
233
|
-
},
|
|
235
|
+
],
|
|
234
236
|
],
|
|
235
237
|
segments: [
|
|
236
238
|
{
|
|
@@ -13,7 +13,6 @@ const structuresFields = {
|
|
|
13
13
|
11127104: [
|
|
14
14
|
{
|
|
15
15
|
data_structure_id: 11127108,
|
|
16
|
-
data_type_class: "number",
|
|
17
16
|
deleted_at: null,
|
|
18
17
|
description:
|
|
19
18
|
"Department id where employee works; foreign key to department_id column of the departments table",
|
|
@@ -21,6 +20,7 @@ const structuresFields = {
|
|
|
21
20
|
links: [],
|
|
22
21
|
name: "DEPARTMENT_ID",
|
|
23
22
|
metadata: {
|
|
23
|
+
data_type_class: "number",
|
|
24
24
|
database: "xe",
|
|
25
25
|
default: "None",
|
|
26
26
|
host: "localhost",
|
|
@@ -34,13 +34,13 @@ const structuresFields = {
|
|
|
34
34
|
},
|
|
35
35
|
{
|
|
36
36
|
data_structure_id: 11127111,
|
|
37
|
-
data_type_class: "string",
|
|
38
37
|
deleted_at: null,
|
|
39
38
|
description: "First name of the employee. A not null column.",
|
|
40
39
|
inserted_at: "2022-04-12T14:28:06.057667Z",
|
|
41
40
|
links: [],
|
|
42
41
|
name: "FIRST_NAME",
|
|
43
42
|
metadata: {
|
|
43
|
+
data_type_class: "string",
|
|
44
44
|
database: "xe",
|
|
45
45
|
default: "None",
|
|
46
46
|
host: "localhost",
|
|
@@ -54,7 +54,6 @@ const structuresFields = {
|
|
|
54
54
|
},
|
|
55
55
|
{
|
|
56
56
|
data_structure_id: 11127117,
|
|
57
|
-
data_type_class: "number",
|
|
58
57
|
deleted_at: null,
|
|
59
58
|
description:
|
|
60
59
|
"Monthly salary of the employee. Must be greater than zero (enforced by constraint emp_salary_min)",
|
|
@@ -75,7 +74,6 @@ const structuresFields = {
|
|
|
75
74
|
},
|
|
76
75
|
{
|
|
77
76
|
data_structure_id: 11127116,
|
|
78
|
-
data_type_class: "string",
|
|
79
77
|
deleted_at: null,
|
|
80
78
|
description:
|
|
81
79
|
"Phone number of the employee; includes country code and area code",
|
|
@@ -84,6 +82,7 @@ const structuresFields = {
|
|
|
84
82
|
name: "PHONE_NUMBER",
|
|
85
83
|
type: "column",
|
|
86
84
|
metadata: {
|
|
85
|
+
data_type_class: "string",
|
|
87
86
|
database: "xe",
|
|
88
87
|
default: "None",
|
|
89
88
|
host: "localhost",
|
|
@@ -97,7 +96,6 @@ const structuresFields = {
|
|
|
97
96
|
},
|
|
98
97
|
{
|
|
99
98
|
data_structure_id: 11127115,
|
|
100
|
-
data_type_class: "number",
|
|
101
99
|
deleted_at: null,
|
|
102
100
|
description:
|
|
103
101
|
"Manager id of the employee; has same domain as manager_id in departments table. Foreign key to employee_id column of employees table. (useful for reflexive joins and CONNECT BY query)",
|
|
@@ -106,6 +104,7 @@ const structuresFields = {
|
|
|
106
104
|
name: "MANAGER_ID",
|
|
107
105
|
type: "NUMBER",
|
|
108
106
|
metadata: {
|
|
107
|
+
data_type_class: "number",
|
|
109
108
|
database: "xe",
|
|
110
109
|
default: "None",
|
|
111
110
|
host: "localhost",
|
|
@@ -118,7 +117,6 @@ const structuresFields = {
|
|
|
118
117
|
},
|
|
119
118
|
{
|
|
120
119
|
data_structure_id: 11127109,
|
|
121
|
-
data_type_class: "string",
|
|
122
120
|
deleted_at: null,
|
|
123
121
|
description: "Email id of the employee",
|
|
124
122
|
inserted_at: "2022-04-12T14:28:06.057667Z",
|
|
@@ -126,6 +124,7 @@ const structuresFields = {
|
|
|
126
124
|
name: "EMAIL",
|
|
127
125
|
type: "column",
|
|
128
126
|
metadata: {
|
|
127
|
+
data_type_class: "string",
|
|
129
128
|
database: "xe",
|
|
130
129
|
default: "None",
|
|
131
130
|
host: "localhost",
|
|
@@ -139,13 +138,13 @@ const structuresFields = {
|
|
|
139
138
|
},
|
|
140
139
|
{
|
|
141
140
|
data_structure_id: 11127110,
|
|
142
|
-
data_type_class: "number",
|
|
143
141
|
deleted_at: null,
|
|
144
142
|
description: "Primary key of employees table.",
|
|
145
143
|
inserted_at: "2022-04-12T14:28:06.057667Z",
|
|
146
144
|
links: [],
|
|
147
145
|
name: "EMPLOYEE_ID",
|
|
148
146
|
metadata: {
|
|
147
|
+
data_type_class: "number",
|
|
149
148
|
database: "xe",
|
|
150
149
|
default: "None",
|
|
151
150
|
host: "localhost",
|
|
@@ -160,13 +159,13 @@ const structuresFields = {
|
|
|
160
159
|
},
|
|
161
160
|
{
|
|
162
161
|
data_structure_id: 11127114,
|
|
163
|
-
data_type_class: "string",
|
|
164
162
|
deleted_at: null,
|
|
165
163
|
description: "Last name of the employee. A not null column.",
|
|
166
164
|
inserted_at: "2022-04-12T14:28:06.057667Z",
|
|
167
165
|
links: [],
|
|
168
166
|
name: "LAST_NAME",
|
|
169
167
|
metadata: {
|
|
168
|
+
data_type_class: "string",
|
|
170
169
|
database: "xe",
|
|
171
170
|
default: "None",
|
|
172
171
|
host: "localhost",
|
|
@@ -180,7 +179,6 @@ const structuresFields = {
|
|
|
180
179
|
},
|
|
181
180
|
{
|
|
182
181
|
data_structure_id: 11127112,
|
|
183
|
-
data_type_class: "date",
|
|
184
182
|
deleted_at: null,
|
|
185
183
|
description:
|
|
186
184
|
"Date when the employee started on this job. A not null column.",
|
|
@@ -188,6 +186,7 @@ const structuresFields = {
|
|
|
188
186
|
links: [],
|
|
189
187
|
name: "HIRE_DATE",
|
|
190
188
|
metadata: {
|
|
189
|
+
data_type_class: "date",
|
|
191
190
|
database: "xe",
|
|
192
191
|
default: "None",
|
|
193
192
|
host: "localhost",
|
|
@@ -201,7 +200,6 @@ const structuresFields = {
|
|
|
201
200
|
},
|
|
202
201
|
{
|
|
203
202
|
data_structure_id: 11127113,
|
|
204
|
-
data_type_class: "string",
|
|
205
203
|
deleted_at: null,
|
|
206
204
|
description:
|
|
207
205
|
"Current job of the employee; foreign key to job_id column of the jobs table. A not null column.",
|
|
@@ -209,6 +207,7 @@ const structuresFields = {
|
|
|
209
207
|
links: [],
|
|
210
208
|
name: "JOB_ID",
|
|
211
209
|
metadata: {
|
|
210
|
+
data_type_class: "string",
|
|
212
211
|
database: "xe",
|
|
213
212
|
default: "None",
|
|
214
213
|
host: "localhost",
|
|
@@ -222,7 +221,6 @@ const structuresFields = {
|
|
|
222
221
|
},
|
|
223
222
|
{
|
|
224
223
|
data_structure_id: 11127107,
|
|
225
|
-
data_type_class: "number",
|
|
226
224
|
deleted_at: null,
|
|
227
225
|
description:
|
|
228
226
|
"Commission percentage of the employee; Only employees in sales department elgible for commission percentage",
|
|
@@ -230,6 +228,7 @@ const structuresFields = {
|
|
|
230
228
|
links: [],
|
|
231
229
|
name: "COMMISSION_PCT",
|
|
232
230
|
metadata: {
|
|
231
|
+
data_type_class: "number",
|
|
233
232
|
database: "xe",
|
|
234
233
|
default: "None",
|
|
235
234
|
host: "localhost",
|
|
@@ -374,7 +373,7 @@ const ruleImplementation = {
|
|
|
374
373
|
rule_id: null,
|
|
375
374
|
segments: [],
|
|
376
375
|
status: "draft",
|
|
377
|
-
validations: [],
|
|
376
|
+
validations: [[]],
|
|
378
377
|
version: 2,
|
|
379
378
|
};
|
|
380
379
|
|
|
@@ -653,7 +653,7 @@ exports[`<NewRuleImplementation /> calculate aliases when not informed 1`] = `
|
|
|
653
653
|
<div
|
|
654
654
|
class="content"
|
|
655
655
|
>
|
|
656
|
-
|
|
656
|
+
Validations
|
|
657
657
|
</div>
|
|
658
658
|
</h3>
|
|
659
659
|
<div
|
|
@@ -1370,6 +1370,67 @@ exports[`<NewRuleImplementation /> matches the latest snapshot 1`] = `
|
|
|
1370
1370
|
</div>
|
|
1371
1371
|
</div>
|
|
1372
1372
|
</div>
|
|
1373
|
+
<h3
|
|
1374
|
+
class="ui header"
|
|
1375
|
+
>
|
|
1376
|
+
<i
|
|
1377
|
+
aria-hidden="true"
|
|
1378
|
+
class="setting small icon"
|
|
1379
|
+
/>
|
|
1380
|
+
<div
|
|
1381
|
+
class="content"
|
|
1382
|
+
>
|
|
1383
|
+
Validations
|
|
1384
|
+
</div>
|
|
1385
|
+
</h3>
|
|
1386
|
+
<div
|
|
1387
|
+
class="ui segment"
|
|
1388
|
+
>
|
|
1389
|
+
<table
|
|
1390
|
+
class="ui very basic table"
|
|
1391
|
+
>
|
|
1392
|
+
<thead
|
|
1393
|
+
class=""
|
|
1394
|
+
>
|
|
1395
|
+
<tr
|
|
1396
|
+
class=""
|
|
1397
|
+
>
|
|
1398
|
+
<th
|
|
1399
|
+
class=""
|
|
1400
|
+
>
|
|
1401
|
+
Field
|
|
1402
|
+
</th>
|
|
1403
|
+
<th
|
|
1404
|
+
class=""
|
|
1405
|
+
>
|
|
1406
|
+
Operator
|
|
1407
|
+
</th>
|
|
1408
|
+
<th
|
|
1409
|
+
class=""
|
|
1410
|
+
>
|
|
1411
|
+
Values
|
|
1412
|
+
</th>
|
|
1413
|
+
</tr>
|
|
1414
|
+
</thead>
|
|
1415
|
+
<tbody
|
|
1416
|
+
class=""
|
|
1417
|
+
>
|
|
1418
|
+
<tr
|
|
1419
|
+
class=""
|
|
1420
|
+
>
|
|
1421
|
+
<td
|
|
1422
|
+
class="five wide"
|
|
1423
|
+
/>
|
|
1424
|
+
<td
|
|
1425
|
+
class="five wide"
|
|
1426
|
+
/>
|
|
1427
|
+
<td
|
|
1428
|
+
class="five wide"
|
|
1429
|
+
/>
|
|
1430
|
+
</tr>
|
|
1431
|
+
</tbody>
|
|
1432
|
+
</table>
|
|
1433
|
+
</div>
|
|
1373
1434
|
</div>
|
|
1374
1435
|
</div>
|
|
1375
1436
|
</div>
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import _ from "lodash/fp";
|
|
2
|
-
import React, { useState } from "react";
|
|
2
|
+
import React, { Fragment, useState } from "react";
|
|
3
3
|
import { useIntl } from "react-intl";
|
|
4
|
-
import { Accordion, Grid, Icon, Popup } from "semantic-ui-react";
|
|
4
|
+
import { Accordion, Divider, Grid, Icon, Popup } from "semantic-ui-react";
|
|
5
5
|
import PropTypes from "prop-types";
|
|
6
6
|
import ValueConditions from "./ValueConditions";
|
|
7
7
|
import FiltersFormGroup from "./FiltersFormGroup";
|
|
@@ -158,24 +158,26 @@ export const FiltersGroup = ({
|
|
|
158
158
|
scope,
|
|
159
159
|
}) => {
|
|
160
160
|
return rows.map((clause, index) => (
|
|
161
|
-
<
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
161
|
+
<Fragment key={index}>
|
|
162
|
+
<Filter
|
|
163
|
+
activeConditionIndex={activeConditionIndex}
|
|
164
|
+
allOperators={allOperators}
|
|
165
|
+
operators={operators}
|
|
166
|
+
composeValue={composeValue}
|
|
167
|
+
clause={clause}
|
|
168
|
+
index={index}
|
|
169
|
+
onConditionChange={onConditionChange}
|
|
170
|
+
onOperatorChange={onOperatorChange}
|
|
171
|
+
onStructureChange={onStructureChange}
|
|
172
|
+
onValueChange={onValueChange}
|
|
173
|
+
onModifierChange={onModifierChange}
|
|
174
|
+
parentStructures={parentStructures}
|
|
175
|
+
setActiveConditionIndex={setActiveConditionIndex}
|
|
176
|
+
setRowValue={setRowValue}
|
|
177
|
+
scope={scope}
|
|
178
|
+
/>
|
|
179
|
+
{index < rows.length - 1 ? <Divider /> : null}
|
|
180
|
+
</Fragment>
|
|
179
181
|
));
|
|
180
182
|
};
|
|
181
183
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import _ from "lodash/fp";
|
|
2
|
-
import React, { useEffect, useState } from "react";
|
|
2
|
+
import React, { Fragment, useEffect, useState } from "react";
|
|
3
3
|
import PropTypes from "prop-types";
|
|
4
4
|
import { connect } from "react-redux";
|
|
5
5
|
import { useHistory } from "react-router-dom";
|
|
@@ -45,7 +45,8 @@ RuleImplementationStep.propTypes = {
|
|
|
45
45
|
|
|
46
46
|
export const RuleImplementationForm = ({
|
|
47
47
|
addPopulation,
|
|
48
|
-
|
|
48
|
+
addSegment,
|
|
49
|
+
addValidation,
|
|
49
50
|
isSubmitting,
|
|
50
51
|
onChange,
|
|
51
52
|
onSubmit,
|
|
@@ -122,10 +123,6 @@ export const RuleImplementationForm = ({
|
|
|
122
123
|
!!ruleImplementation?.domain_id &&
|
|
123
124
|
areLimitsValid(ruleImplementation);
|
|
124
125
|
|
|
125
|
-
const validValidations = () =>
|
|
126
|
-
_.every(_.negate(_.isEmpty))(validations) &&
|
|
127
|
-
validationsComplete(validations);
|
|
128
|
-
|
|
129
126
|
const validSegments = () => _.every(_.negate(_.isEmpty))(segments);
|
|
130
127
|
|
|
131
128
|
const validDataSet = () => areStructuresComplete();
|
|
@@ -158,7 +155,7 @@ export const RuleImplementationForm = ({
|
|
|
158
155
|
{
|
|
159
156
|
name: "validations",
|
|
160
157
|
icon: "setting",
|
|
161
|
-
isValid: () => validValidations(),
|
|
158
|
+
isValid: () => validValidations(validations),
|
|
162
159
|
},
|
|
163
160
|
...(canManageSegmentsAnyDomain
|
|
164
161
|
? [
|
|
@@ -192,7 +189,13 @@ export const RuleImplementationForm = ({
|
|
|
192
189
|
_.every(_.negate(_.isEmpty))(population) &&
|
|
193
190
|
_.every((p) => itemComplete(p, attrsFromProfile(p)))(population);
|
|
194
191
|
|
|
192
|
+
const validValidations = (validationsSet) =>
|
|
193
|
+
_.every(
|
|
194
|
+
(validations) => _.negate(_.isEmpty) && validationsComplete(validations)
|
|
195
|
+
)(validationsSet);
|
|
196
|
+
|
|
195
197
|
const validationsComplete = (validations) =>
|
|
198
|
+
_.negate(_.isEmpty)(validations) &&
|
|
196
199
|
_.every((v) => itemComplete(v, attrsFromProfile(v)))(validations);
|
|
197
200
|
|
|
198
201
|
const attrsFromProfile = (p) => {
|
|
@@ -361,14 +364,23 @@ export const RuleImplementationForm = ({
|
|
|
361
364
|
{activeStep == "populations" ? (
|
|
362
365
|
<>
|
|
363
366
|
{populations.map((population, i) => (
|
|
364
|
-
<
|
|
365
|
-
<
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
367
|
+
<Fragment key={i}>
|
|
368
|
+
<Segment>
|
|
369
|
+
<PopulationForm
|
|
370
|
+
population={population}
|
|
371
|
+
setPopulation={(p) => setPopulations(p, i)}
|
|
372
|
+
structures={structures}
|
|
373
|
+
typeOperators={operators}
|
|
374
|
+
/>
|
|
375
|
+
</Segment>
|
|
376
|
+
{i < populations.length - 1 ? (
|
|
377
|
+
<Divider horizontal>
|
|
378
|
+
{formatMessage({
|
|
379
|
+
id: "ruleImplementations.or",
|
|
380
|
+
})}
|
|
381
|
+
</Divider>
|
|
382
|
+
) : null}
|
|
383
|
+
</Fragment>
|
|
372
384
|
))}
|
|
373
385
|
{_.flow(_.flatten, _.isEmpty)(populations) ? (
|
|
374
386
|
<PopulationTypeForm createFilter={() => addPopulation()} />
|
|
@@ -383,18 +395,42 @@ export const RuleImplementationForm = ({
|
|
|
383
395
|
) : null}
|
|
384
396
|
</>
|
|
385
397
|
) : null}
|
|
386
|
-
{activeStep == "validations"
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
398
|
+
{activeStep == "validations" ? (
|
|
399
|
+
<>
|
|
400
|
+
{validations.map((validation, i) => (
|
|
401
|
+
<Fragment key={i}>
|
|
402
|
+
<Segment>
|
|
403
|
+
<ValidationsForm
|
|
404
|
+
validations={validation}
|
|
405
|
+
setValidations={(v) => setValidations(v, i)}
|
|
406
|
+
structures={structures}
|
|
407
|
+
typeOperators={operators}
|
|
408
|
+
/>
|
|
409
|
+
</Segment>
|
|
410
|
+
{i < validations.length - 1 ? (
|
|
411
|
+
<Divider horizontal>
|
|
412
|
+
{formatMessage({
|
|
413
|
+
id: "ruleImplementations.or",
|
|
414
|
+
})}
|
|
415
|
+
</Divider>
|
|
416
|
+
) : null}
|
|
417
|
+
</Fragment>
|
|
418
|
+
))}
|
|
419
|
+
{validValidations(validations) ? (
|
|
420
|
+
<Button
|
|
421
|
+
secondary
|
|
422
|
+
onClick={() => addValidation()}
|
|
423
|
+
content={formatMessage({
|
|
424
|
+
id: "ruleImplementationForm.validations.add",
|
|
425
|
+
})}
|
|
426
|
+
/>
|
|
427
|
+
) : null}
|
|
428
|
+
</>
|
|
429
|
+
) : null}
|
|
394
430
|
{activeStep == "segments" ? (
|
|
395
431
|
<>
|
|
396
432
|
{_.flow(_.flatten, _.isEmpty)(segments) ? (
|
|
397
|
-
<SegmentsTypeForm createFilter={() =>
|
|
433
|
+
<SegmentsTypeForm createFilter={() => addSegment()} />
|
|
398
434
|
) : (
|
|
399
435
|
<SegmentsForm
|
|
400
436
|
segments={segments}
|
|
@@ -466,7 +502,8 @@ export const RuleImplementationForm = ({
|
|
|
466
502
|
|
|
467
503
|
RuleImplementationForm.propTypes = {
|
|
468
504
|
addPopulation: PropTypes.func,
|
|
469
|
-
|
|
505
|
+
addValidation: PropTypes.func,
|
|
506
|
+
addSegment: PropTypes.func,
|
|
470
507
|
authManageSegments: PropTypes.bool,
|
|
471
508
|
isAdmin: PropTypes.bool,
|
|
472
509
|
isSubmitting: PropTypes.bool,
|
|
@@ -17,8 +17,7 @@ export const ValidationsForm = ({
|
|
|
17
17
|
const validation = { ..._.nth(index)(validations), ...value };
|
|
18
18
|
setValidations(replaceAt(index, validation)(validations));
|
|
19
19
|
} else {
|
|
20
|
-
|
|
21
|
-
setValidations(_.isEmpty(array) ? [{}] : array);
|
|
20
|
+
setValidations(dropAt(index)(validations));
|
|
22
21
|
}
|
|
23
22
|
};
|
|
24
23
|
|
package/src/messages/en.js
CHANGED
|
@@ -78,9 +78,11 @@ export default {
|
|
|
78
78
|
"implementations.execute.filtered": "{count} implementations to execute",
|
|
79
79
|
"implementations.header": "Quality Implementations",
|
|
80
80
|
"implementations.header.manage": "Implementation Management",
|
|
81
|
+
"implementations.header.deprecated": "Deprecated Implementations",
|
|
81
82
|
"implementations.search.placeholder": "Search implementations...",
|
|
82
83
|
"implementations.subheader": "Quality implementations list and details",
|
|
83
84
|
"implementations.subheader.manage": "Implementation Versions in Progress",
|
|
85
|
+
"implementations.subheader.deprecated": "List of deprecated quality implementations",
|
|
84
86
|
"implementationsStructures.delete.confirmation.content":
|
|
85
87
|
"The relation will be deleted. Are you sure?",
|
|
86
88
|
"implementationsStructures.delete.confirmation.header":
|
|
@@ -438,7 +440,6 @@ export default {
|
|
|
438
440
|
"ruleImplementation.props.reference_dataset": "Reference dataset",
|
|
439
441
|
"ruleImplementation.props.reference_dataset.placeholder":
|
|
440
442
|
"Search reference dataset",
|
|
441
|
-
"ruleImplementation.props.status.deprecated": "Deprecated Implementation",
|
|
442
443
|
"ruleImplementation.props.structure": "Structure",
|
|
443
444
|
"ruleImplementation.props.structure.alias": "Alias",
|
|
444
445
|
"ruleImplementation.props.structure.placeholder": "Search structure",
|
|
@@ -460,6 +461,7 @@ export default {
|
|
|
460
461
|
"ruleImplementation.summary.population": "Population",
|
|
461
462
|
"ruleImplementation.summary.source": "Data source",
|
|
462
463
|
"ruleImplementation.summary.structure": "Structure",
|
|
464
|
+
"ruleImplementation.summary.invalid_structure": "Invalid structure",
|
|
463
465
|
"ruleImplementation.summary.system": "System",
|
|
464
466
|
"ruleImplementation.summary.validations": "Validations",
|
|
465
467
|
"ruleImplementation.summary.values": "Values",
|
|
@@ -467,12 +469,14 @@ export default {
|
|
|
467
469
|
"ruleImplementation.system.placeholder": "Select a system",
|
|
468
470
|
"ruleImplementation.table": "Table",
|
|
469
471
|
"ruleImplementation.table.placeholder": "Select a table",
|
|
472
|
+
"ruleImplementationForm.condition.add": "Add condition",
|
|
470
473
|
"ruleImplementationForm.populations.add": "Add population",
|
|
471
474
|
"ruleImplementationForm.step.dataset": "Data Set",
|
|
472
475
|
"ruleImplementationForm.step.information": "Information",
|
|
473
476
|
"ruleImplementationForm.step.populations": "Populations",
|
|
474
477
|
"ruleImplementationForm.step.segments": "Segments",
|
|
475
478
|
"ruleImplementationForm.step.validations": "Validations",
|
|
479
|
+
"ruleImplementationForm.validations.add": "Add validations",
|
|
476
480
|
"ruleImplementationRawForm.props.database": "Database",
|
|
477
481
|
"ruleImplementationRawForm.props.database.placeholder": "Select database",
|
|
478
482
|
"ruleImplementationRawForm.props.dataset": "Dataset",
|
|
@@ -512,6 +516,7 @@ export default {
|
|
|
512
516
|
"ruleImplementations.events.action_restored": "Implementation restored",
|
|
513
517
|
"ruleImplementations.events.action_updated": "Implementation updated",
|
|
514
518
|
"ruleImplementations.events.action_versioned": "Implementation versioned",
|
|
519
|
+
"ruleImplementations.or": "OR",
|
|
515
520
|
"ruleImplementations.props.business_concept": "Concept",
|
|
516
521
|
"ruleImplementations.props.executable": "Executable",
|
|
517
522
|
"ruleImplementations.props.executable.false": "Internal",
|
|
@@ -549,9 +554,10 @@ export default {
|
|
|
549
554
|
"ruleImplementations.summary.headers.filters": "Filters",
|
|
550
555
|
"ruleImplementations.summary.headers.implementation": "Rule Implementation",
|
|
551
556
|
"ruleImplementations.summary.headers.population": "Population",
|
|
552
|
-
"ruleImplementations.summary.headers.
|
|
557
|
+
"ruleImplementations.summary.headers.population.plural": "Populations",
|
|
553
558
|
"ruleImplementations.summary.headers.segments": "Segments",
|
|
554
|
-
"ruleImplementations.summary.headers.validations": "
|
|
559
|
+
"ruleImplementations.summary.headers.validations": "Validations",
|
|
560
|
+
"ruleImplementations.summary.headers.validations.plural": "Validations",
|
|
555
561
|
"ruleImplementations.update.success.header.implementation_unchanged":
|
|
556
562
|
"The implementation has not changed",
|
|
557
563
|
"ruleImplementations.upload.failed.header":
|
package/src/messages/es.js
CHANGED
|
@@ -79,9 +79,12 @@ export default {
|
|
|
79
79
|
"implementations.execute.filtered": "{count} implementaciones a ejecutar",
|
|
80
80
|
"implementations.header": "Implementaciones de calidad",
|
|
81
81
|
"implementations.header.manage": "Gestión de Implementaciones",
|
|
82
|
+
"implementations.header.deprecated": "Implementaciones archivadas",
|
|
82
83
|
"implementations.search.placeholder": "Buscar implementaciones...",
|
|
83
84
|
"implementations.subheader":
|
|
84
85
|
"Listado y detalle de implementaciones de calidad",
|
|
86
|
+
"implementations.subheader.deprecated":
|
|
87
|
+
"Listado de implementaciones de calidad archivadas",
|
|
85
88
|
"implementations.subheader.manage":
|
|
86
89
|
"Versiones de Implementaciones en Progreso",
|
|
87
90
|
"implementationsStructures.delete.confirmation.content":
|
|
@@ -447,8 +450,6 @@ export default {
|
|
|
447
450
|
"ruleImplementation.props.reference_dataset": "Datos de referencia",
|
|
448
451
|
"ruleImplementation.props.reference_dataset.placeholder":
|
|
449
452
|
"Buscar datos de referencia",
|
|
450
|
-
"ruleImplementation.props.status.deprecated":
|
|
451
|
-
"Esta Implementación está archivada",
|
|
452
453
|
"ruleImplementation.props.structure": "Estructura",
|
|
453
454
|
"ruleImplementation.props.structure.alias": "Alias",
|
|
454
455
|
"ruleImplementation.props.structure.placeholder": "Buscar estructura",
|
|
@@ -470,6 +471,7 @@ export default {
|
|
|
470
471
|
"ruleImplementation.summary.population": "Población",
|
|
471
472
|
"ruleImplementation.summary.source": "Origen de datos",
|
|
472
473
|
"ruleImplementation.summary.structure": "Estructura",
|
|
474
|
+
"ruleImplementation.summary.invalid_structure": "Estructura inválida",
|
|
473
475
|
"ruleImplementation.summary.system": "Sistema",
|
|
474
476
|
"ruleImplementation.summary.validations": "Validaciones",
|
|
475
477
|
"ruleImplementation.summary.values": "Valores",
|
|
@@ -477,12 +479,14 @@ export default {
|
|
|
477
479
|
"ruleImplementation.system.placeholder": "Seleccionar sistema",
|
|
478
480
|
"ruleImplementation.table": "Tabla",
|
|
479
481
|
"ruleImplementation.table.placeholder": "Seleccionar tabla",
|
|
482
|
+
"ruleImplementationForm.condition.add": "Añadir condición",
|
|
480
483
|
"ruleImplementationForm.populations.add": "Añadir población",
|
|
481
484
|
"ruleImplementationForm.step.dataset": "Datos",
|
|
482
485
|
"ruleImplementationForm.step.information": "Información",
|
|
483
486
|
"ruleImplementationForm.step.populations": "Poblaciones",
|
|
484
487
|
"ruleImplementationForm.step.segments": "Segmentos",
|
|
485
488
|
"ruleImplementationForm.step.validations": "Validaciones",
|
|
489
|
+
"ruleImplementationForm.validations.add": "Añadir validación",
|
|
486
490
|
"ruleImplementationRawForm.props.database": "Base de datos",
|
|
487
491
|
"ruleImplementationRawForm.props.database.placeholder":
|
|
488
492
|
"Seleccionar base de datos",
|
|
@@ -528,6 +532,7 @@ export default {
|
|
|
528
532
|
"ruleImplementations.events.action_restored": "Implementación restaurada",
|
|
529
533
|
"ruleImplementations.events.action_updated": "Implementación actualizada",
|
|
530
534
|
"ruleImplementations.events.action_versioned": "Implementación versionada",
|
|
535
|
+
"ruleImplementations.or": "OR",
|
|
531
536
|
"ruleImplementations.props.business_concept": "Concepto",
|
|
532
537
|
"ruleImplementations.props.executable": "Ejecutable",
|
|
533
538
|
"ruleImplementations.props.executable.false": "Interna",
|
|
@@ -570,9 +575,10 @@ export default {
|
|
|
570
575
|
"ruleImplementations.summary.headers.implementation":
|
|
571
576
|
"Implementación de una Regla",
|
|
572
577
|
"ruleImplementations.summary.headers.population": "Población",
|
|
573
|
-
"ruleImplementations.summary.headers.
|
|
578
|
+
"ruleImplementations.summary.headers.population.plural": "Poblaciones",
|
|
574
579
|
"ruleImplementations.summary.headers.segments": "Segmentos",
|
|
575
580
|
"ruleImplementations.summary.headers.validations": "Validaciones",
|
|
581
|
+
"ruleImplementations.summary.headers.validations.plural": "Validaciones",
|
|
576
582
|
"ruleImplementations.update.success.header.implementation_unchanged":
|
|
577
583
|
"La implementación no ha cambiado",
|
|
578
584
|
"ruleImplementations.upload.failed.header":
|
|
@@ -39,7 +39,10 @@ const ruleImplementation = (state = initialState, { type, payload }) => {
|
|
|
39
39
|
case fetchRuleImplementation.TRIGGER:
|
|
40
40
|
return initialState;
|
|
41
41
|
case fetchRuleImplementation.SUCCESS:
|
|
42
|
-
return pickFields(
|
|
42
|
+
return pickFields({
|
|
43
|
+
...payload.data,
|
|
44
|
+
validations: payload.data.validation,
|
|
45
|
+
});
|
|
43
46
|
case clearRuleImplementation.TRIGGER:
|
|
44
47
|
return initialState;
|
|
45
48
|
default:
|