@truedat/qx 7.0.8 → 7.1.1
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/package.json +13 -4
- package/src/api.js +29 -20
- package/src/components/QxRoutes.js +18 -16
- package/src/components/__tests__/__fixtures__/helper.js +189 -0
- package/src/components/common/TestFormWrapper.js +38 -0
- package/src/components/common/__tests__/ResourceSelector.spec.js +18 -7
- package/src/components/common/__tests__/__snapshots__/ResourceSelector.spec.js.snap +0 -12
- package/src/components/common/expressions/__tests__/Condition.spec.js +4 -1
- package/src/components/common/expressions/__tests__/FunctionArgs.spec.js +18 -5
- package/src/components/common/expressions/__tests__/ShapeSelector.spec.js +10 -4
- package/src/components/common/expressions/__tests__/__snapshots__/FunctionArgs.spec.js.snap +10 -2
- package/src/components/common/resourceSelectors/__tests__/DataStructureSelector.spec.js +6 -3
- package/src/components/common/resourceSelectors/__tests__/__snapshots__/DataStructureSelector.spec.js.snap +0 -12
- package/src/components/dataViews/__tests__/DataViewEditor.spec.js +83 -53
- package/src/components/dataViews/__tests__/DataViews.spec.js +14 -1
- package/src/components/dataViews/__tests__/__snapshots__/DataViewEditor.spec.js.snap +93 -4
- package/src/components/dataViews/queryableProperties/__tests__/SelectField.spec.js +13 -6
- package/src/components/functions/__tests__/FunctionEditor.spec.js +2 -34
- package/src/components/functions/__tests__/FunctionParams.spec.js +4 -17
- package/src/components/functions/__tests__/Functions.spec.js +2 -34
- package/src/components/functions/__tests__/__snapshots__/FunctionEditor.spec.js.snap +48 -48
- package/src/components/functions/__tests__/__snapshots__/FunctionParams.spec.js.snap +4 -4
- package/src/components/functions/__tests__/__snapshots__/Functions.spec.js.snap +4 -4
- package/src/components/qualityControls/ControlProperties.js +43 -0
- package/src/components/qualityControls/ControlPropertiesView.js +109 -0
- package/src/components/qualityControls/EditQualityControl.js +5 -21
- package/src/components/qualityControls/IconPopup.js +28 -0
- package/src/components/qualityControls/NewDraftQualityControl.js +4 -13
- package/src/components/qualityControls/NewQualityControl.js +10 -25
- package/src/components/qualityControls/QualityBadge.js +33 -0
- package/src/components/qualityControls/QualityControl.js +11 -53
- package/src/components/qualityControls/QualityControlActions.js +133 -46
- package/src/components/qualityControls/QualityControlEditor.js +113 -134
- package/src/components/qualityControls/QualityControlHeader.js +29 -7
- package/src/components/qualityControls/QualityControlHistory.js +6 -12
- package/src/components/qualityControls/QualityControlQueryModal.js +8 -5
- package/src/components/qualityControls/QualityControlRoutes.js +51 -96
- package/src/components/qualityControls/QualityControlRow.js +21 -2
- package/src/components/qualityControls/QualityControlScores.js +140 -0
- package/src/components/qualityControls/QualityControlTabs.js +24 -23
- package/src/components/qualityControls/QualityControls.js +142 -59
- package/src/components/qualityControls/QualityControlsLabelResults.js +51 -0
- package/src/components/qualityControls/QualityControlsTable.js +69 -43
- package/src/components/qualityControls/ScoreCriteria.js +40 -0
- package/src/components/qualityControls/{ResultCriteria.js → ScoreCriteriaView.js} +26 -42
- package/src/components/qualityControls/__tests__/ControlProperties.spec.js +86 -0
- package/src/components/qualityControls/__tests__/ControlPropertiesView.spec.js +86 -0
- package/src/components/qualityControls/__tests__/EditQualityControl.spec.js +219 -0
- package/src/components/qualityControls/__tests__/IconPopup.spec.js +33 -0
- package/src/components/qualityControls/__tests__/NewDraftQualityControl.spec.js +253 -0
- package/src/components/qualityControls/__tests__/NewQualityControl.spec.js +384 -0
- package/src/components/qualityControls/__tests__/QualityBadge.spec.js +30 -0
- package/src/components/qualityControls/__tests__/QualityControl.spec.js +47 -0
- package/src/components/qualityControls/__tests__/QualityControlActions.spec.js +192 -0
- package/src/components/qualityControls/__tests__/QualityControlCrumbs.spec.js +18 -0
- package/src/components/qualityControls/__tests__/QualityControlEditor.spec.js +296 -0
- package/src/components/qualityControls/__tests__/QualityControlHeader.spec.js +68 -0
- package/src/components/qualityControls/__tests__/QualityControlHistory.spec.js +21 -0
- package/src/components/qualityControls/__tests__/QualityControlQueryModal.spec.js +77 -0
- package/src/components/qualityControls/__tests__/QualityControlRow.spec.js +91 -0
- package/src/components/qualityControls/__tests__/QualityControlScores.spec.js +139 -0
- package/src/components/qualityControls/__tests__/QualityControlTabs.spec.js +20 -0
- package/src/components/qualityControls/__tests__/QualityControls.spec.js +202 -0
- package/src/components/qualityControls/__tests__/QualityControlsLabelResults.spec.js +83 -0
- package/src/components/qualityControls/__tests__/QualityControlsTable.spec.js +38 -0
- package/src/components/qualityControls/__tests__/ScoreCriteria.spec.js +77 -0
- package/src/components/qualityControls/__tests__/ScoreCriteriaView.spec.js +62 -0
- package/src/components/qualityControls/__tests__/__fixtures__/qualityControlHelper.js +281 -0
- package/src/components/qualityControls/__tests__/__snapshots__/ControlProperties.spec.js.snap +151 -0
- package/src/components/qualityControls/__tests__/__snapshots__/ControlPropertiesView.spec.js.snap +290 -0
- package/src/components/qualityControls/__tests__/__snapshots__/EditQualityControl.spec.js.snap +672 -0
- package/src/components/qualityControls/__tests__/__snapshots__/IconPopup.spec.js.snap +10 -0
- package/src/components/qualityControls/__tests__/__snapshots__/NewDraftQualityControl.spec.js.snap +648 -0
- package/src/components/qualityControls/__tests__/__snapshots__/NewQualityControl.spec.js.snap +336 -0
- package/src/components/qualityControls/__tests__/__snapshots__/QualityBadge.spec.js.snap +11 -0
- package/src/components/qualityControls/__tests__/__snapshots__/QualityControl.spec.js.snap +255 -0
- package/src/components/qualityControls/__tests__/__snapshots__/QualityControlActions.spec.js.snap +85 -0
- package/src/components/qualityControls/__tests__/__snapshots__/QualityControlCrumbs.spec.js.snap +25 -0
- package/src/components/qualityControls/__tests__/__snapshots__/QualityControlEditor.spec.js.snap +930 -0
- package/src/components/qualityControls/__tests__/__snapshots__/QualityControlHeader.spec.js.snap +127 -0
- package/src/components/qualityControls/__tests__/__snapshots__/QualityControlHistory.spec.js.snap +75 -0
- package/src/components/qualityControls/__tests__/__snapshots__/QualityControlQueryModal.spec.js.snap +27 -0
- package/src/components/qualityControls/__tests__/__snapshots__/QualityControlRow.spec.js.snap +113 -0
- package/src/components/qualityControls/__tests__/__snapshots__/QualityControlScores.spec.js.snap +161 -0
- package/src/components/qualityControls/__tests__/__snapshots__/QualityControlTabs.spec.js.snap +28 -0
- package/src/components/qualityControls/__tests__/__snapshots__/QualityControls.spec.js.snap +219 -0
- package/src/components/qualityControls/__tests__/__snapshots__/QualityControlsLabelResults.spec.js.snap +11 -0
- package/src/components/qualityControls/__tests__/__snapshots__/QualityControlsTable.spec.js.snap +121 -0
- package/src/components/qualityControls/__tests__/__snapshots__/ScoreCriteria.spec.js.snap +186 -0
- package/src/components/qualityControls/__tests__/__snapshots__/ScoreCriteriaView.spec.js.snap +76 -0
- package/src/components/qualityControls/__tests__/qualityByControlMode.spec.js +248 -0
- package/src/components/qualityControls/controlProperties/ErrorCount.js +56 -0
- package/src/components/qualityControls/controlProperties/Ratio.js +79 -0
- package/src/components/qualityControls/controlProperties/__tests__/ErrorCount.spec.js +82 -0
- package/src/components/qualityControls/controlProperties/__tests__/Ratio.spec.js +115 -0
- package/src/components/qualityControls/controlProperties/__tests__/__snapshots__/ErrorCount.spec.js.snap +62 -0
- package/src/components/qualityControls/controlProperties/__tests__/__snapshots__/Ratio.spec.js.snap +143 -0
- package/src/components/qualityControls/qualityByControlMode.js +62 -0
- package/src/components/qualityControls/qualityControlScoresColumns.js +52 -0
- package/src/components/qualityControls/{resultCriterias → scoreCriterias}/Deviation.js +6 -6
- package/src/components/qualityControls/{resultCriterias/ErrorsNumber.js → scoreCriterias/ErrorCount.js} +7 -7
- package/src/components/qualityControls/{resultCriterias → scoreCriterias}/Percentage.js +6 -6
- package/src/components/qualityControls/scoreCriterias/__tests__/Deviation.spec.js +75 -0
- package/src/components/qualityControls/scoreCriterias/__tests__/ErrorCount.spec.js +63 -0
- package/src/components/qualityControls/scoreCriterias/__tests__/Percentage.spec.js +61 -0
- package/src/components/qualityControls/scoreCriterias/__tests__/__snapshots__/Deviation.spec.js.snap +58 -0
- package/src/components/qualityControls/scoreCriterias/__tests__/__snapshots__/ErrorCount.spec.js.snap +58 -0
- package/src/components/qualityControls/scoreCriterias/__tests__/__snapshots__/Percentage.spec.js.snap +58 -0
- package/src/components/{executions/ExecutionGroupsHeader.js → scores/MyScoreGroups.js} +5 -3
- package/src/components/scores/QualityBar.js +73 -0
- package/src/components/scores/Score.js +32 -0
- package/src/components/scores/ScoreContext.js +3 -0
- package/src/components/scores/ScoreCrumbs.js +40 -0
- package/src/components/scores/ScoreDetails.js +67 -0
- package/src/components/scores/ScoreEvents.js +59 -0
- package/src/components/scores/ScoreGroup.js +83 -0
- package/src/components/scores/ScoreGroupBreadcrumbs.js +25 -0
- package/src/components/{qualityControls/ExecutionForm.js → scores/ScoreGroupForm.js} +11 -13
- package/src/components/scores/ScoreGroupLink.js +18 -0
- package/src/components/scores/ScoreGroupMessage.js +25 -0
- package/src/components/{qualityControls/ExecutionPopup.js → scores/ScoreGroupPopup.js} +13 -22
- package/src/components/scores/ScoreGroupsTable.js +113 -0
- package/src/components/scores/ScoreRoutes.js +32 -0
- package/src/components/{executions/ExecutionStatusDecorator.js → scores/ScoreStatusDecorator.js} +10 -8
- package/src/components/scores/ScoreTabs.js +32 -0
- package/src/components/scores/__tests__/MyScoreGroups.spec.js +31 -0
- package/src/components/scores/__tests__/QualityBar.spec.js +55 -0
- package/src/components/scores/__tests__/Score.spec.js +41 -0
- package/src/components/scores/__tests__/ScoreCrumbs.spec.js +39 -0
- package/src/components/scores/__tests__/ScoreDetails.spec.js +38 -0
- package/src/components/scores/__tests__/ScoreEvents.spec.js +24 -0
- package/src/components/scores/__tests__/ScoreGroup.spec.js +43 -0
- package/src/components/scores/__tests__/ScoreGroupBreadcrumbs.spec.js +16 -0
- package/src/components/scores/__tests__/ScoreGroupForm.spec.js +78 -0
- package/src/components/scores/__tests__/ScoreGroupLink.spec.js +16 -0
- package/src/components/scores/__tests__/ScoreGroupMessage.spec.js +20 -0
- package/src/components/scores/__tests__/ScoreGroupPopup.spec.js +59 -0
- package/src/components/scores/__tests__/ScoreGroupsTable.spec.js +40 -0
- package/src/components/scores/__tests__/ScoreStatusDecorator.spec.js +21 -0
- package/src/components/scores/__tests__/ScoreTabs.spec.js +27 -0
- package/src/components/scores/__tests__/__fixtures__/scoreHelper.js +182 -0
- package/src/components/scores/__tests__/__snapshots__/MyScoreGroups.spec.js.snap +154 -0
- package/src/components/scores/__tests__/__snapshots__/QualityBar.spec.js.snap +24 -0
- package/src/components/scores/__tests__/__snapshots__/Score.spec.js.snap +92 -0
- package/src/components/scores/__tests__/__snapshots__/ScoreCrumbs.spec.js.snap +39 -0
- package/src/components/scores/__tests__/__snapshots__/ScoreDetails.spec.js.snap +156 -0
- package/src/components/scores/__tests__/__snapshots__/ScoreEvents.spec.js.snap +167 -0
- package/src/components/scores/__tests__/__snapshots__/ScoreGroup.spec.js.snap +103 -0
- package/src/components/scores/__tests__/__snapshots__/ScoreGroupBreadcrumbs.spec.js.snap +29 -0
- package/src/components/scores/__tests__/__snapshots__/ScoreGroupForm.spec.js.snap +145 -0
- package/src/components/scores/__tests__/__snapshots__/ScoreGroupLink.spec.js.snap +15 -0
- package/src/components/scores/__tests__/__snapshots__/ScoreGroupMessage.spec.js.snap +43 -0
- package/src/components/scores/__tests__/__snapshots__/ScoreGroupPopup.spec.js.snap +11 -0
- package/src/components/scores/__tests__/__snapshots__/ScoreGroupsTable.spec.js.snap +147 -0
- package/src/components/scores/__tests__/__snapshots__/ScoreStatusDecorator.spec.js.snap +71 -0
- package/src/components/scores/__tests__/__snapshots__/ScoreTabs.spec.js.snap +43 -0
- package/src/components/scores/index.js +15 -0
- package/src/hooks/useQualityControls.js +3 -9
- package/src/hooks/useScoreGroups.js +23 -0
- package/src/hooks/useScores.js +22 -0
- package/src/styles/Expression.less +16 -0
- package/src/styles/scores.less +63 -0
- package/src/components/executions/ExecutionGroupBreadcrumbs.js +0 -25
- package/src/components/executions/ExecutionGroupContent.js +0 -42
- package/src/components/executions/ExecutionGroupLink.js +0 -18
- package/src/components/executions/ExecutionGroupMessage.js +0 -27
- package/src/components/executions/ExecutionGroupsTable.js +0 -101
- package/src/components/executions/executionGroupDetail.js +0 -87
- package/src/components/qualityControls/ResultType.js +0 -57
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { FormattedMessage } from "react-intl";
|
|
3
|
+
import { Icon, Popup, Header, List, ListItem } from "semantic-ui-react";
|
|
4
|
+
|
|
5
|
+
export default function IconPopup({ color, label1, value1, label2, value2 }) {
|
|
6
|
+
return (
|
|
7
|
+
<Popup
|
|
8
|
+
trigger={<Icon name="circle" color={color} />}
|
|
9
|
+
content={
|
|
10
|
+
<List>
|
|
11
|
+
<ListItem>
|
|
12
|
+
<Header as="h5">
|
|
13
|
+
<FormattedMessage id={"quality_control.score_criteria"} />
|
|
14
|
+
</Header>
|
|
15
|
+
</ListItem>
|
|
16
|
+
<ListItem>
|
|
17
|
+
<FormattedMessage id={label1} />
|
|
18
|
+
{`: ${value1}`}
|
|
19
|
+
</ListItem>
|
|
20
|
+
<ListItem>
|
|
21
|
+
<FormattedMessage id={label2} />
|
|
22
|
+
{`: ${value2}`}
|
|
23
|
+
</ListItem>
|
|
24
|
+
</List>
|
|
25
|
+
}
|
|
26
|
+
/>
|
|
27
|
+
);
|
|
28
|
+
}
|
|
@@ -15,8 +15,9 @@ export default function NewDraftQualityControl() {
|
|
|
15
15
|
const history = useHistory();
|
|
16
16
|
const { trigger, isMutating } = useQualityControlCreateDraft(id);
|
|
17
17
|
|
|
18
|
-
const { data, loading } = useQualityControl(id);
|
|
18
|
+
const { data, loading: qualityControlLoading } = useQualityControl(id);
|
|
19
19
|
const qualityControl = data?.data;
|
|
20
|
+
const loading = qualityControlLoading || isMutating;
|
|
20
21
|
|
|
21
22
|
const handlePublish = (qualityControl) =>
|
|
22
23
|
trigger({
|
|
@@ -29,20 +30,10 @@ export default function NewDraftQualityControl() {
|
|
|
29
30
|
history.push(linkTo.QUALITY_CONTROL({ id }));
|
|
30
31
|
});
|
|
31
32
|
const handleSave = (qualityControl) => {
|
|
32
|
-
const resource = _.prop("resource")(qualityControl);
|
|
33
|
-
const validation = _.prop("validation")(qualityControl);
|
|
34
33
|
trigger({
|
|
35
34
|
quality_control: {
|
|
36
35
|
...qualityControl,
|
|
37
36
|
status: "draft",
|
|
38
|
-
resource: _.conforms({ type: _.isNil })(resource) ? null : resource,
|
|
39
|
-
validation: _.isEqual([
|
|
40
|
-
{
|
|
41
|
-
expressions: [{ shape: "function", value: { isCondition: true } }],
|
|
42
|
-
},
|
|
43
|
-
])(validation)
|
|
44
|
-
? []
|
|
45
|
-
: validation,
|
|
46
37
|
},
|
|
47
38
|
}).then((data) => {
|
|
48
39
|
const id = _.prop("data.data.id")(data);
|
|
@@ -50,7 +41,7 @@ export default function NewDraftQualityControl() {
|
|
|
50
41
|
});
|
|
51
42
|
};
|
|
52
43
|
return (
|
|
53
|
-
<Segment floated="left" loading={
|
|
44
|
+
<Segment floated="left" loading={loading}>
|
|
54
45
|
<Container text>
|
|
55
46
|
<Header as="h2">
|
|
56
47
|
<Icon circular name="archive" />
|
|
@@ -68,7 +59,7 @@ export default function NewDraftQualityControl() {
|
|
|
68
59
|
onPublish={handlePublish}
|
|
69
60
|
onSave={handleSave}
|
|
70
61
|
onCancel={() => history.push(QUALITY_CONTROLS)}
|
|
71
|
-
isSubmitting={
|
|
62
|
+
isSubmitting={loading}
|
|
72
63
|
/>
|
|
73
64
|
) : null}
|
|
74
65
|
</Container>
|
|
@@ -7,11 +7,17 @@ import { QUALITY_CONTROLS, linkTo } from "@truedat/core/routes";
|
|
|
7
7
|
import { useQualityControlCreate } from "../../hooks/useQualityControls";
|
|
8
8
|
import QualityControlEditor from "./QualityControlEditor";
|
|
9
9
|
|
|
10
|
+
export const defaultQualityControl = {
|
|
11
|
+
name: "",
|
|
12
|
+
active: true,
|
|
13
|
+
domain_ids: [],
|
|
14
|
+
df_type: null,
|
|
15
|
+
};
|
|
10
16
|
export default function NewQualityControl() {
|
|
11
17
|
const history = useHistory();
|
|
12
18
|
const { trigger, isMutating } = useQualityControlCreate();
|
|
13
19
|
|
|
14
|
-
const handlePublish = (qualityControl) =>
|
|
20
|
+
const handlePublish = (qualityControl) => {
|
|
15
21
|
trigger({
|
|
16
22
|
quality_control: {
|
|
17
23
|
...qualityControl,
|
|
@@ -21,21 +27,12 @@ export default function NewQualityControl() {
|
|
|
21
27
|
const id = _.prop("data.data.id")(data);
|
|
22
28
|
history.push(linkTo.QUALITY_CONTROL({ id }));
|
|
23
29
|
});
|
|
30
|
+
};
|
|
24
31
|
const handleSave = (qualityControl) => {
|
|
25
|
-
const resource = _.prop("resource")(qualityControl);
|
|
26
|
-
const validation = _.prop("validation")(qualityControl);
|
|
27
32
|
trigger({
|
|
28
33
|
quality_control: {
|
|
29
34
|
...qualityControl,
|
|
30
35
|
status: "draft",
|
|
31
|
-
resource: _.conforms({ type: _.isNil })(resource) ? null : resource,
|
|
32
|
-
validation: _.isEqual([
|
|
33
|
-
{
|
|
34
|
-
expressions: [{ shape: "function", value: { isCondition: true } }],
|
|
35
|
-
},
|
|
36
|
-
])(validation)
|
|
37
|
-
? []
|
|
38
|
-
: validation,
|
|
39
36
|
},
|
|
40
37
|
}).then((data) => {
|
|
41
38
|
const id = _.prop("data.data.id")(data);
|
|
@@ -56,24 +53,12 @@ export default function NewQualityControl() {
|
|
|
56
53
|
</Header.Content>
|
|
57
54
|
</Header>
|
|
58
55
|
<QualityControlEditor
|
|
59
|
-
value={
|
|
60
|
-
name: "",
|
|
61
|
-
domain_ids: [],
|
|
62
|
-
// df_content: {},
|
|
63
|
-
df_type: null,
|
|
64
|
-
validation: [
|
|
65
|
-
{
|
|
66
|
-
expressions: [
|
|
67
|
-
{ shape: "function", value: { isCondition: true } },
|
|
68
|
-
],
|
|
69
|
-
},
|
|
70
|
-
],
|
|
71
|
-
}}
|
|
56
|
+
value={defaultQualityControl}
|
|
72
57
|
isModification={false}
|
|
73
58
|
onPublish={handlePublish}
|
|
74
59
|
onSave={handleSave}
|
|
75
60
|
onCancel={() => history.push(QUALITY_CONTROLS)}
|
|
76
|
-
isSubmitting={
|
|
61
|
+
isSubmitting={isMutating}
|
|
77
62
|
/>
|
|
78
63
|
</Container>
|
|
79
64
|
</Segment>
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import _ from "lodash/fp";
|
|
2
|
+
import React from "react";
|
|
3
|
+
import { FormattedMessage } from "react-intl";
|
|
4
|
+
import { Icon } from "semantic-ui-react";
|
|
5
|
+
import IconPopup from "./IconPopup";
|
|
6
|
+
import qualityByControlMode from "./qualityByControlMode";
|
|
7
|
+
|
|
8
|
+
export default function QualityBadge({ score }) {
|
|
9
|
+
const quality = qualityByControlMode(score);
|
|
10
|
+
|
|
11
|
+
return quality.isFailed ? (
|
|
12
|
+
<>
|
|
13
|
+
<Icon color="red" name="warning circle" />
|
|
14
|
+
<FormattedMessage id={"score.status.failed"} />
|
|
15
|
+
</>
|
|
16
|
+
) : quality.isEmpty ? (
|
|
17
|
+
<>
|
|
18
|
+
<Icon inverted color="grey" name="warning circle" />
|
|
19
|
+
<FormattedMessage id={"score.no_results"} />
|
|
20
|
+
</>
|
|
21
|
+
) : (
|
|
22
|
+
<>
|
|
23
|
+
<IconPopup
|
|
24
|
+
color={quality.color}
|
|
25
|
+
label1={quality.label1}
|
|
26
|
+
value1={quality.value1}
|
|
27
|
+
label2={quality.label2}
|
|
28
|
+
value2={quality.value2}
|
|
29
|
+
/>
|
|
30
|
+
{quality.text}
|
|
31
|
+
</>
|
|
32
|
+
);
|
|
33
|
+
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import _ from "lodash/fp";
|
|
2
2
|
import React, { useContext } from "react";
|
|
3
3
|
import { FormattedMessage } from "react-intl";
|
|
4
|
-
import { Header, Icon,
|
|
4
|
+
import { Header, Icon, List, Label } from "semantic-ui-react";
|
|
5
5
|
|
|
6
|
-
import ClauseViewer from "@truedat/qx/components/common/ClauseViewer";
|
|
7
6
|
import QxContext from "../QxContext";
|
|
8
|
-
import
|
|
7
|
+
import ScoreCriteriaView from "./ScoreCriteriaView";
|
|
8
|
+
import ControlPropertiesView from "./ControlPropertiesView";
|
|
9
9
|
|
|
10
10
|
const DynamicFormViewer = React.lazy(() =>
|
|
11
11
|
import("@truedat/df/components/DynamicFormViewer")
|
|
@@ -18,14 +18,16 @@ export default function QualityControl() {
|
|
|
18
18
|
<List size="big" relaxed>
|
|
19
19
|
<List.Item>
|
|
20
20
|
<List.Header>
|
|
21
|
-
<FormattedMessage id="quality_control.form.domain_ids" />
|
|
21
|
+
<FormattedMessage id="quality_control.form.domain_ids" />
|
|
22
22
|
{_.map((domain) => <Label key={domain.id}>{domain.name}</Label>)(
|
|
23
23
|
qualityControl.domains
|
|
24
24
|
)}
|
|
25
25
|
</List.Header>
|
|
26
26
|
</List.Item>
|
|
27
27
|
</List>
|
|
28
|
-
|
|
28
|
+
|
|
29
|
+
<ScoreCriteriaView qualityControl={qualityControl} />
|
|
30
|
+
|
|
29
31
|
{qualityControl.df_type ? (
|
|
30
32
|
<>
|
|
31
33
|
<Header as="h3">
|
|
@@ -37,57 +39,13 @@ export default function QualityControl() {
|
|
|
37
39
|
<DynamicFormViewer
|
|
38
40
|
boxLayout
|
|
39
41
|
template={qualityControl.df_type}
|
|
40
|
-
content={qualityControl.
|
|
42
|
+
content={qualityControl.dynamic_content}
|
|
43
|
+
domainIds={qualityControl.domain_ids}
|
|
41
44
|
/>
|
|
42
45
|
</>
|
|
43
46
|
) : null}
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
<Icon name="puzzle piece" size="small" />
|
|
47
|
-
<Header.Content>
|
|
48
|
-
<FormattedMessage id="quality_control.form.implementation" />
|
|
49
|
-
</Header.Content>
|
|
50
|
-
</Header>
|
|
51
|
-
<Segment>
|
|
52
|
-
<List>
|
|
53
|
-
<List.Item>
|
|
54
|
-
<List.Header>
|
|
55
|
-
<FormattedMessage id="quality_control.form.dataset" />
|
|
56
|
-
</List.Header>
|
|
57
|
-
<List.Content>
|
|
58
|
-
{qualityControl.resource ? (
|
|
59
|
-
<List.Description>
|
|
60
|
-
<Label horizontal>
|
|
61
|
-
<FormattedMessage
|
|
62
|
-
id={`queryables.resource.selector.${qualityControl.resource?.type}`}
|
|
63
|
-
/>
|
|
64
|
-
</Label>
|
|
65
|
-
<Label color="blue">
|
|
66
|
-
{_.prop("resource.embedded.name")(qualityControl)}
|
|
67
|
-
</Label>
|
|
68
|
-
</List.Description>
|
|
69
|
-
) : (
|
|
70
|
-
<FormattedMessage id="quality_control.form.dataset.empty" />
|
|
71
|
-
)}
|
|
72
|
-
</List.Content>
|
|
73
|
-
</List.Item>
|
|
74
|
-
<List.Item>
|
|
75
|
-
<List.Header>
|
|
76
|
-
<FormattedMessage id="quality_control.form.validation" />
|
|
77
|
-
</List.Header>
|
|
78
|
-
<List.Content>
|
|
79
|
-
{qualityControl.validation ? (
|
|
80
|
-
<List.Description>
|
|
81
|
-
<ClauseViewer clause={qualityControl.validation} />
|
|
82
|
-
</List.Description>
|
|
83
|
-
) : (
|
|
84
|
-
<FormattedMessage id="quality_control.form.validation.empty" />
|
|
85
|
-
)}
|
|
86
|
-
</List.Content>
|
|
87
|
-
</List.Item>
|
|
88
|
-
</List>
|
|
89
|
-
</Segment>
|
|
90
|
-
</>
|
|
47
|
+
|
|
48
|
+
<ControlPropertiesView qualityControl={qualityControl} />
|
|
91
49
|
</>
|
|
92
50
|
);
|
|
93
51
|
}
|
|
@@ -1,67 +1,154 @@
|
|
|
1
1
|
import _ from "lodash/fp";
|
|
2
|
-
import React from "react";
|
|
2
|
+
import React, { useContext } from "react";
|
|
3
3
|
import PropTypes from "prop-types";
|
|
4
4
|
import { useIntl } from "react-intl";
|
|
5
|
-
import { Link } from "react-router-dom";
|
|
5
|
+
import { Link, useHistory } from "react-router-dom";
|
|
6
6
|
import { Button, Container } from "semantic-ui-react";
|
|
7
7
|
import { linkTo } from "@truedat/core/routes";
|
|
8
8
|
import { useAuthorized } from "@truedat/core/hooks";
|
|
9
|
-
import {
|
|
9
|
+
import { ConfirmModal, GroupActions } from "@truedat/core/components";
|
|
10
|
+
import { useScoreGroupCreate } from "../../hooks/useScoreGroups";
|
|
11
|
+
import QxContext from "../QxContext";
|
|
12
|
+
import { ScoreGroupPopup } from "../scores";
|
|
13
|
+
import {
|
|
14
|
+
useQualityControlUpdateStatus,
|
|
15
|
+
useQualityControlUpdateMain,
|
|
16
|
+
} from "../../hooks/useQualityControls";
|
|
10
17
|
import QualityControlQueryModal from "./QualityControlQueryModal";
|
|
11
18
|
|
|
12
|
-
export
|
|
13
|
-
actions,
|
|
14
|
-
qualityControl,
|
|
15
|
-
mutate,
|
|
16
|
-
}) {
|
|
19
|
+
export const ConfirmToggleActiveModal = ({ onConfirm, qualityControl }) => {
|
|
17
20
|
const { formatMessage } = useIntl();
|
|
18
|
-
const {
|
|
19
|
-
|
|
21
|
+
const { active, name } = qualityControl || {};
|
|
22
|
+
const action = active ? "disable" : "enable";
|
|
23
|
+
const icon = active ? "pause" : "play";
|
|
24
|
+
return (
|
|
25
|
+
<ConfirmModal
|
|
26
|
+
icon={icon}
|
|
27
|
+
trigger={
|
|
28
|
+
<Button
|
|
29
|
+
icon={icon}
|
|
30
|
+
content={formatMessage({ id: `quality_controls.actions.${action}` })}
|
|
31
|
+
/>
|
|
32
|
+
}
|
|
33
|
+
header={formatMessage({
|
|
34
|
+
id: `quality_controls.actions.${action}.confirmation.header`,
|
|
35
|
+
})}
|
|
36
|
+
size="small"
|
|
37
|
+
content={formatMessage(
|
|
38
|
+
{ id: `quality_controls.actions.${action}.confirmation.content` },
|
|
39
|
+
{ name: <i>{name}</i> }
|
|
40
|
+
)}
|
|
41
|
+
onConfirm={() => onConfirm()}
|
|
42
|
+
/>
|
|
20
43
|
);
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
ConfirmToggleActiveModal.propTypes = {
|
|
47
|
+
action: PropTypes.object,
|
|
48
|
+
onConfirm: PropTypes.func,
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
export default function QualityControlActions() {
|
|
52
|
+
const history = useHistory();
|
|
53
|
+
const { formatMessage } = useIntl();
|
|
21
54
|
const authorized = useAuthorized();
|
|
55
|
+
const { qualityControl, actions, mutate } = useContext(QxContext);
|
|
56
|
+
const { trigger: updateQualityControlStatus, isMutating } =
|
|
57
|
+
useQualityControlUpdateStatus(qualityControl.id);
|
|
58
|
+
|
|
59
|
+
const { trigger: updateMainQualityControl, isMutating: isMutatingMain } =
|
|
60
|
+
useQualityControlUpdateMain(qualityControl.id);
|
|
22
61
|
|
|
23
|
-
const
|
|
62
|
+
const { trigger: triggerCreateScoreGroup, loading: groupCreating } =
|
|
63
|
+
useScoreGroupCreate();
|
|
64
|
+
|
|
65
|
+
const updateStatus = (action) =>
|
|
66
|
+
updateQualityControlStatus({ action }).then(() => mutate());
|
|
67
|
+
|
|
68
|
+
const toggleActive = () =>
|
|
69
|
+
updateMainQualityControl({
|
|
70
|
+
quality_control: { active: !qualityControl.active },
|
|
71
|
+
}).then(() => mutate());
|
|
72
|
+
|
|
73
|
+
const availableActions = _.flow(
|
|
74
|
+
_.reject(_.includes(["delete_score"])),
|
|
75
|
+
_.map((action) => {
|
|
76
|
+
const actionIcon = {
|
|
77
|
+
create_draft: "edit",
|
|
78
|
+
deprecate: "folder open outline",
|
|
79
|
+
edit: "edit",
|
|
80
|
+
publish: "bullhorn",
|
|
81
|
+
reject: "window close outline",
|
|
82
|
+
restore: "undo",
|
|
83
|
+
send_to_approval: "send",
|
|
84
|
+
send_to_draft: "clipboard outline",
|
|
85
|
+
};
|
|
86
|
+
const base = {
|
|
87
|
+
key: action,
|
|
88
|
+
disabled: isMutating || isMutatingMain,
|
|
89
|
+
icon: _.prop(action)(actionIcon),
|
|
90
|
+
};
|
|
91
|
+
switch (action) {
|
|
92
|
+
case "create_draft":
|
|
93
|
+
return {
|
|
94
|
+
...base,
|
|
95
|
+
as: Link,
|
|
96
|
+
to: linkTo.QUALITY_CONTROL_NEW_DRAFT(qualityControl),
|
|
97
|
+
text: formatMessage({ id: `quality_controls.actions.${action}` }),
|
|
98
|
+
};
|
|
99
|
+
case "edit":
|
|
100
|
+
return {
|
|
101
|
+
...base,
|
|
102
|
+
as: Link,
|
|
103
|
+
to: linkTo.QUALITY_CONTROL_EDIT(qualityControl),
|
|
104
|
+
text: formatMessage({ id: `quality_controls.actions.${action}` }),
|
|
105
|
+
};
|
|
106
|
+
case "toggle_active":
|
|
107
|
+
return {
|
|
108
|
+
...base,
|
|
109
|
+
as: ConfirmToggleActiveModal,
|
|
110
|
+
onConfirm: toggleActive,
|
|
111
|
+
qualityControl: qualityControl,
|
|
112
|
+
};
|
|
113
|
+
default:
|
|
114
|
+
return {
|
|
115
|
+
...base,
|
|
116
|
+
text: formatMessage({ id: `quality_controls.actions.${action}` }),
|
|
117
|
+
onClick: () => updateStatus(action),
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
})
|
|
121
|
+
)(actions);
|
|
122
|
+
|
|
123
|
+
const onCreateScoreGroup = ({ content, df_type }) => {
|
|
124
|
+
const score_group = {
|
|
125
|
+
dynamic_content: content,
|
|
126
|
+
df_type,
|
|
127
|
+
};
|
|
128
|
+
|
|
129
|
+
triggerCreateScoreGroup({
|
|
130
|
+
score_group,
|
|
131
|
+
ids: [qualityControl.version_id],
|
|
132
|
+
}).then(({ data }) => {
|
|
133
|
+
const id = _.prop("data.id")(data);
|
|
134
|
+
history.push(linkTo.SCORE_GROUP({ id }));
|
|
135
|
+
});
|
|
136
|
+
};
|
|
24
137
|
|
|
25
138
|
return (
|
|
26
139
|
<Container textAlign="right">
|
|
27
140
|
{authorized ? (
|
|
28
141
|
<QualityControlQueryModal qualityControlId={qualityControl.id} />
|
|
29
142
|
) : null}
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
id: `quality_controls.actions.${action}`,
|
|
40
|
-
})}
|
|
41
|
-
/>
|
|
42
|
-
) : action === "edit" ? (
|
|
43
|
-
<Button
|
|
44
|
-
key={action}
|
|
45
|
-
primary
|
|
46
|
-
as={Link}
|
|
47
|
-
disabled={isMutating}
|
|
48
|
-
to={linkTo.QUALITY_CONTROL_EDIT(qualityControl)}
|
|
49
|
-
content={formatMessage({
|
|
50
|
-
id: `quality_controls.actions.${action}`,
|
|
51
|
-
})}
|
|
52
|
-
/>
|
|
53
|
-
) : (
|
|
54
|
-
<Button
|
|
55
|
-
key={action}
|
|
56
|
-
primary
|
|
57
|
-
disabled={isMutating}
|
|
58
|
-
onClick={() => updateStatus(action)}
|
|
59
|
-
content={formatMessage({
|
|
60
|
-
id: `quality_controls.actions.${action}`,
|
|
61
|
-
})}
|
|
62
|
-
/>
|
|
63
|
-
)
|
|
64
|
-
)(actions)}
|
|
143
|
+
|
|
144
|
+
{qualityControl.active &&
|
|
145
|
+
!_.includes(qualityControl.status)(["deprecated", "versioned"]) ? (
|
|
146
|
+
<ScoreGroupPopup
|
|
147
|
+
loading={groupCreating}
|
|
148
|
+
onSubmit={onCreateScoreGroup}
|
|
149
|
+
/>
|
|
150
|
+
) : null}
|
|
151
|
+
<GroupActions availableActions={availableActions} />
|
|
65
152
|
</Container>
|
|
66
153
|
);
|
|
67
154
|
}
|