@truedat/bg 4.56.8 → 4.56.9
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 +6 -0
- package/package.json +5 -5
- package/src/concepts/components/ConceptTabs.js +17 -2
- package/src/concepts/components/__tests__/ConceptTabs.spec.js +16 -0
- package/src/concepts/components/__tests__/__snapshots__/ConceptTabs.spec.js.snap +45 -0
- package/src/concepts/relations/components/ConceptImplementationLinks.js +85 -23
- package/src/concepts/relations/components/__tests__/ConceptImplementationLinks.spec.js +91 -13
- package/src/concepts/relations/components/__tests__/__snapshots__/ConceptImplementationLinks.spec.js.snap +458 -0
package/CHANGELOG.md
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@truedat/bg",
|
|
3
|
-
"version": "4.56.
|
|
3
|
+
"version": "4.56.9",
|
|
4
4
|
"description": "Truedat Web Business Glossary",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"jsnext:main": "src/index.js",
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
"@testing-library/jest-dom": "^5.16.5",
|
|
35
35
|
"@testing-library/react": "^12.0.0",
|
|
36
36
|
"@testing-library/user-event": "^13.2.1",
|
|
37
|
-
"@truedat/test": "4.56.
|
|
37
|
+
"@truedat/test": "4.56.9",
|
|
38
38
|
"babel-jest": "^28.1.0",
|
|
39
39
|
"babel-plugin-dynamic-import-node": "^2.3.3",
|
|
40
40
|
"babel-plugin-lodash": "^3.3.4",
|
|
@@ -86,8 +86,8 @@
|
|
|
86
86
|
]
|
|
87
87
|
},
|
|
88
88
|
"dependencies": {
|
|
89
|
-
"@truedat/core": "4.56.
|
|
90
|
-
"@truedat/df": "4.56.
|
|
89
|
+
"@truedat/core": "4.56.9",
|
|
90
|
+
"@truedat/df": "4.56.9",
|
|
91
91
|
"file-saver": "^2.0.5",
|
|
92
92
|
"moment": "^2.29.4",
|
|
93
93
|
"path-to-regexp": "^1.7.0",
|
|
@@ -108,5 +108,5 @@
|
|
|
108
108
|
"react-dom": ">= 16.8.6 < 17",
|
|
109
109
|
"semantic-ui-react": ">= 2.0.3 < 2.2"
|
|
110
110
|
},
|
|
111
|
-
"gitHead": "
|
|
111
|
+
"gitHead": "da9a49da6d48b51faf603abff56ff7b1b6c5e413"
|
|
112
112
|
}
|
|
@@ -21,6 +21,8 @@ export const ConceptTabs = ({
|
|
|
21
21
|
concept,
|
|
22
22
|
emptyConceptTags,
|
|
23
23
|
emptyImplementationLinks,
|
|
24
|
+
createImplementation,
|
|
25
|
+
createRawImplementation,
|
|
24
26
|
}) => {
|
|
25
27
|
const archiveActive = useActiveRoute(CONCEPT_ARCHIVE);
|
|
26
28
|
const conceptActive = useActiveRoute({
|
|
@@ -69,7 +71,9 @@ export const ConceptTabs = ({
|
|
|
69
71
|
>
|
|
70
72
|
<FormattedMessage id="tabs.bg.qualityRules" />
|
|
71
73
|
</Menu.Item>
|
|
72
|
-
{!emptyImplementationLinks
|
|
74
|
+
{(!emptyImplementationLinks ||
|
|
75
|
+
createImplementation ||
|
|
76
|
+
createRawImplementation) && (
|
|
73
77
|
<Menu.Item
|
|
74
78
|
active={implementationsActive}
|
|
75
79
|
as={Link}
|
|
@@ -104,9 +108,16 @@ ConceptTabs.propTypes = {
|
|
|
104
108
|
concept: PropTypes.object,
|
|
105
109
|
emptyConceptTags: PropTypes.bool,
|
|
106
110
|
emptyImplementationLinks: PropTypes.bool,
|
|
111
|
+
createImplementation: PropTypes.object,
|
|
112
|
+
createRawImplementation: PropTypes.object,
|
|
107
113
|
};
|
|
108
114
|
|
|
109
|
-
const mapStateToProps = ({
|
|
115
|
+
const mapStateToProps = ({
|
|
116
|
+
concept,
|
|
117
|
+
conceptPermissions,
|
|
118
|
+
conceptLinks,
|
|
119
|
+
relationTags,
|
|
120
|
+
}) => ({
|
|
110
121
|
emptyConceptTags: _.flow(
|
|
111
122
|
_.filter(_.pathEq("value.target_type", "business_concept")),
|
|
112
123
|
_.isEmpty
|
|
@@ -116,6 +127,10 @@ const mapStateToProps = ({ concept, relationTags, conceptLinks }) => ({
|
|
|
116
127
|
_.filter(_.pathEq("resource_type", "implementation")),
|
|
117
128
|
_.isEmpty
|
|
118
129
|
)(conceptLinks),
|
|
130
|
+
createImplementation: _.prop("create_implementation")(conceptPermissions),
|
|
131
|
+
createRawImplementation: _.prop("create_raw_implementation")(
|
|
132
|
+
conceptPermissions
|
|
133
|
+
),
|
|
119
134
|
});
|
|
120
135
|
|
|
121
136
|
export default connect(mapStateToProps)(ConceptTabs);
|
|
@@ -29,4 +29,20 @@ describe("<ConceptTabs />", () => {
|
|
|
29
29
|
const { container } = render(<ConceptTabs {...props} />, renderOpts);
|
|
30
30
|
expect(container).toMatchSnapshot();
|
|
31
31
|
});
|
|
32
|
+
|
|
33
|
+
it("With concept tags and implementation links", () => {
|
|
34
|
+
const props = {
|
|
35
|
+
concept: {
|
|
36
|
+
id: 1,
|
|
37
|
+
business_concept_id: 8,
|
|
38
|
+
},
|
|
39
|
+
emptyConceptTags: true,
|
|
40
|
+
emptyImplementationLinks: true,
|
|
41
|
+
createRawImplementation: { method: "POST" },
|
|
42
|
+
createLinkImplementation: { method: "POST" },
|
|
43
|
+
createImplementation: { method: "POST" },
|
|
44
|
+
};
|
|
45
|
+
const { container } = render(<ConceptTabs {...props} />, renderOpts);
|
|
46
|
+
expect(container).toMatchSnapshot();
|
|
47
|
+
});
|
|
32
48
|
});
|
|
@@ -1,5 +1,50 @@
|
|
|
1
1
|
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
|
2
2
|
|
|
3
|
+
exports[`<ConceptTabs /> With concept tags and implementation links 1`] = `
|
|
4
|
+
<div>
|
|
5
|
+
<div
|
|
6
|
+
class="ui pointing secondary top attached tabular menu"
|
|
7
|
+
>
|
|
8
|
+
<a
|
|
9
|
+
class="item"
|
|
10
|
+
href="/concepts/8/versions/1"
|
|
11
|
+
>
|
|
12
|
+
concept
|
|
13
|
+
</a>
|
|
14
|
+
<a
|
|
15
|
+
class="item"
|
|
16
|
+
href="/concepts/8/versions/1/links/structures"
|
|
17
|
+
>
|
|
18
|
+
relations_data_field
|
|
19
|
+
</a>
|
|
20
|
+
<a
|
|
21
|
+
class="item"
|
|
22
|
+
href="/concepts/8/versions/1/rules"
|
|
23
|
+
>
|
|
24
|
+
qualityRules
|
|
25
|
+
</a>
|
|
26
|
+
<a
|
|
27
|
+
class="item"
|
|
28
|
+
href="/concepts/8/versions/1/links/implementations"
|
|
29
|
+
>
|
|
30
|
+
qualityImplementations
|
|
31
|
+
</a>
|
|
32
|
+
<a
|
|
33
|
+
class="item"
|
|
34
|
+
href="/concepts/8/versions/1/archive"
|
|
35
|
+
>
|
|
36
|
+
history
|
|
37
|
+
</a>
|
|
38
|
+
<a
|
|
39
|
+
class="item"
|
|
40
|
+
href="/concepts/8/versions/1/events"
|
|
41
|
+
>
|
|
42
|
+
audit
|
|
43
|
+
</a>
|
|
44
|
+
</div>
|
|
45
|
+
</div>
|
|
46
|
+
`;
|
|
47
|
+
|
|
3
48
|
exports[`<ConceptTabs /> matches the latest snapshot 1`] = `
|
|
4
49
|
<div>
|
|
5
50
|
<div
|
|
@@ -1,45 +1,107 @@
|
|
|
1
1
|
import _ from "lodash/fp";
|
|
2
2
|
import React from "react";
|
|
3
3
|
import PropTypes from "prop-types";
|
|
4
|
+
import queryString from "query-string";
|
|
4
5
|
import { connect } from "react-redux";
|
|
5
|
-
import { Segment, Header } from "semantic-ui-react";
|
|
6
|
+
import { Button, Segment, Header, Message } from "semantic-ui-react";
|
|
6
7
|
import { FormattedMessage } from "react-intl";
|
|
8
|
+
import { Link, useParams } from "react-router-dom";
|
|
9
|
+
import { useIntl } from "react-intl";
|
|
10
|
+
import {
|
|
11
|
+
IMPLEMENTATION_NEW,
|
|
12
|
+
IMPLEMENTATION_NEW_RAW,
|
|
13
|
+
} from "@truedat/core/routes";
|
|
7
14
|
import { getConceptImplementationLinks } from "../selectors";
|
|
8
15
|
|
|
9
16
|
const RuleImplementationsTable = React.lazy(() =>
|
|
10
17
|
import("@truedat/dq/components/RuleImplementationsTable")
|
|
11
18
|
);
|
|
12
19
|
|
|
13
|
-
export const ConceptImplementationLinks = ({
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
20
|
+
export const ConceptImplementationLinks = ({
|
|
21
|
+
groups,
|
|
22
|
+
createImplementation,
|
|
23
|
+
createLinkImplementation,
|
|
24
|
+
createRawImplementation,
|
|
25
|
+
}) => {
|
|
26
|
+
const params = useParams();
|
|
27
|
+
const { formatMessage } = useIntl();
|
|
28
|
+
return (
|
|
29
|
+
<Segment attached="bottom">
|
|
30
|
+
<div style={{ height: "40px" }}>
|
|
31
|
+
{createRawImplementation && createLinkImplementation ? (
|
|
32
|
+
<Button
|
|
33
|
+
floated="right"
|
|
34
|
+
as={Link}
|
|
35
|
+
to={{
|
|
36
|
+
pathname: IMPLEMENTATION_NEW_RAW,
|
|
37
|
+
search: "?" + queryString.stringify(params),
|
|
38
|
+
}}
|
|
39
|
+
content={formatMessage({
|
|
40
|
+
id: "implementations.actions.create_raw",
|
|
41
|
+
})}
|
|
30
42
|
/>
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
43
|
+
) : null}
|
|
44
|
+
{createImplementation && createLinkImplementation ? (
|
|
45
|
+
<Button
|
|
46
|
+
floated="right"
|
|
47
|
+
primary
|
|
48
|
+
as={Link}
|
|
49
|
+
to={{
|
|
50
|
+
pathname: IMPLEMENTATION_NEW,
|
|
51
|
+
search: "?" + queryString.stringify(params),
|
|
52
|
+
}}
|
|
53
|
+
content={formatMessage({ id: "implementations.actions.create" })}
|
|
54
|
+
/>
|
|
55
|
+
) : null}
|
|
56
|
+
</div>
|
|
57
|
+
{_.flatten(groups).length <= 2 ? (
|
|
58
|
+
<Message
|
|
59
|
+
key="empty_implementations"
|
|
60
|
+
content={formatMessage({ id: "concepts.implementations.empty" })}
|
|
61
|
+
/>
|
|
62
|
+
) : (
|
|
63
|
+
groups.map(([tag, implementations], key) =>
|
|
64
|
+
_.isEmpty(implementations) ? null : (
|
|
65
|
+
<Segment vertical key={key}>
|
|
66
|
+
<Header as="h3">
|
|
67
|
+
{tag === "deleted" ? (
|
|
68
|
+
<FormattedMessage id="implementationDeletedRelation.table.title" />
|
|
69
|
+
) : tag === "\uffee" ? (
|
|
70
|
+
<FormattedMessage id="implementationRelation.table.title" />
|
|
71
|
+
) : (
|
|
72
|
+
tag
|
|
73
|
+
)}
|
|
74
|
+
</Header>
|
|
75
|
+
<RuleImplementationsTable
|
|
76
|
+
ruleImplementations={implementations}
|
|
77
|
+
withoutColumns={["business_concept"]}
|
|
78
|
+
/>
|
|
79
|
+
</Segment>
|
|
80
|
+
)
|
|
81
|
+
)
|
|
82
|
+
)}
|
|
83
|
+
</Segment>
|
|
84
|
+
);
|
|
85
|
+
};
|
|
36
86
|
|
|
37
87
|
ConceptImplementationLinks.propTypes = {
|
|
38
88
|
groups: PropTypes.array,
|
|
89
|
+
createImplementation: PropTypes.object,
|
|
90
|
+
createLinkImplementation: PropTypes.object,
|
|
91
|
+
createRawImplementation: PropTypes.object,
|
|
39
92
|
};
|
|
40
93
|
|
|
41
94
|
const mapStateToProps = (state) => ({
|
|
42
95
|
groups: getConceptImplementationLinks(state),
|
|
96
|
+
createImplementation: _.prop("create_implementation")(
|
|
97
|
+
state.conceptPermissions
|
|
98
|
+
),
|
|
99
|
+
createLinkImplementation: _.prop("create_link_implementation")(
|
|
100
|
+
state.conceptPermissions
|
|
101
|
+
),
|
|
102
|
+
createRawImplementation: _.prop("create_raw_implementation")(
|
|
103
|
+
state.conceptPermissions
|
|
104
|
+
),
|
|
43
105
|
});
|
|
44
106
|
|
|
45
107
|
export default connect(mapStateToProps)(ConceptImplementationLinks);
|
|
@@ -1,24 +1,102 @@
|
|
|
1
1
|
import _ from "lodash/fp";
|
|
2
2
|
import React, { Suspense } from "react";
|
|
3
3
|
import { render } from "@truedat/test/render";
|
|
4
|
-
|
|
4
|
+
import en from "../../../../messages/en";
|
|
5
5
|
import { ConceptImplementationLinks } from "../ConceptImplementationLinks";
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
},
|
|
15
|
-
};
|
|
7
|
+
jest.mock("react-router-dom", () => ({
|
|
8
|
+
...jest.requireActual("react-router-dom"),
|
|
9
|
+
useParams: () => ({
|
|
10
|
+
business_concept_id: "6483",
|
|
11
|
+
id: "12345",
|
|
12
|
+
}),
|
|
13
|
+
}));
|
|
16
14
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
15
|
+
const messages = {
|
|
16
|
+
en: {
|
|
17
|
+
...en,
|
|
18
|
+
"ruleImplementations.props.goal": "Goal",
|
|
19
|
+
"ruleImplementations.props.minimum": "Minimum",
|
|
20
|
+
"ruleImplementations.props.result_type": "Result Type",
|
|
21
|
+
"ruleImplementations.props.last_execution_at": "Last execution",
|
|
22
|
+
"ruleImplementations.props.status": "Status",
|
|
23
|
+
"ruleImplementations.props.rule": "Rule",
|
|
24
|
+
"ruleImplementations.props.implementation_key": "Implementation",
|
|
25
|
+
"ruleImplementations.props.result": "Result",
|
|
26
|
+
"ruleImplementations.props.updated_at": "Updated At",
|
|
27
|
+
"ruleImplementations.props.inserted_at": "Inserted At",
|
|
28
|
+
"implementations.actions.create": "Create Implementation",
|
|
29
|
+
"implementations.actions.create_raw": "Create Raw Implementation",
|
|
30
|
+
"concepts.implementations.empty": "This concept has no implementations",
|
|
31
|
+
},
|
|
32
|
+
};
|
|
20
33
|
|
|
34
|
+
describe("<ConceptImplementationLinks />", () => {
|
|
21
35
|
it("matches the latest snapshot", () => {
|
|
36
|
+
const props = {
|
|
37
|
+
groups: [
|
|
38
|
+
["group", [{ implementation_key: "foo", id: "1" }]],
|
|
39
|
+
["deleted", []],
|
|
40
|
+
],
|
|
41
|
+
};
|
|
42
|
+
const renderOpts = { messages };
|
|
43
|
+
const { container } = render(
|
|
44
|
+
<Suspense fallback={null}>
|
|
45
|
+
<ConceptImplementationLinks {...props} />
|
|
46
|
+
</Suspense>,
|
|
47
|
+
renderOpts
|
|
48
|
+
);
|
|
49
|
+
expect(container).toMatchSnapshot();
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
it("show create implementations buttons when have permissions", () => {
|
|
53
|
+
const renderOpts = { messages };
|
|
54
|
+
const props = {
|
|
55
|
+
groups: [
|
|
56
|
+
["group", [{ implementation_key: "foo", id: "1" }]],
|
|
57
|
+
["deleted", []],
|
|
58
|
+
],
|
|
59
|
+
createRawImplementation: { method: "POST" },
|
|
60
|
+
createLinkImplementation: { method: "POST" },
|
|
61
|
+
createImplementation: { method: "POST" },
|
|
62
|
+
};
|
|
63
|
+
const { container } = render(
|
|
64
|
+
<Suspense fallback={null}>
|
|
65
|
+
<ConceptImplementationLinks {...props} />
|
|
66
|
+
</Suspense>,
|
|
67
|
+
renderOpts
|
|
68
|
+
);
|
|
69
|
+
expect(container).toMatchSnapshot();
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
it("show implementations with groups", () => {
|
|
73
|
+
const renderOpts = { messages };
|
|
74
|
+
const props = {
|
|
75
|
+
groups: [
|
|
76
|
+
["○", [{ implementation_key: "foo", id: "1" }]],
|
|
77
|
+
["deleted", [{ implementation_key: "bar", id: "2" }]],
|
|
78
|
+
],
|
|
79
|
+
createRawImplementation: { method: "POST" },
|
|
80
|
+
createLinkImplementation: { method: "POST" },
|
|
81
|
+
createImplementation: { method: "POST" },
|
|
82
|
+
};
|
|
83
|
+
const { container } = render(
|
|
84
|
+
<Suspense fallback={null}>
|
|
85
|
+
<ConceptImplementationLinks {...props} />
|
|
86
|
+
</Suspense>,
|
|
87
|
+
renderOpts
|
|
88
|
+
);
|
|
89
|
+
expect(container).toMatchSnapshot();
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
it("when don't have any implementation", () => {
|
|
93
|
+
const renderOpts = { messages };
|
|
94
|
+
const props = {
|
|
95
|
+
groups: [["group", []]],
|
|
96
|
+
createRawImplementation: { method: "POST" },
|
|
97
|
+
createLinkImplementation: { method: "POST" },
|
|
98
|
+
createImplementation: { method: "POST" },
|
|
99
|
+
};
|
|
22
100
|
const { container } = render(
|
|
23
101
|
<Suspense fallback={null}>
|
|
24
102
|
<ConceptImplementationLinks {...props} />
|
|
@@ -6,6 +6,45 @@ exports[`<ConceptImplementationLinks /> matches the latest snapshot 1`] = `
|
|
|
6
6
|
class="ui bottom attached segment"
|
|
7
7
|
style="display: none;"
|
|
8
8
|
>
|
|
9
|
+
<div
|
|
10
|
+
style="height: 40px;"
|
|
11
|
+
/>
|
|
12
|
+
<div
|
|
13
|
+
class="ui vertical segment"
|
|
14
|
+
>
|
|
15
|
+
<h3
|
|
16
|
+
class="ui header"
|
|
17
|
+
>
|
|
18
|
+
group
|
|
19
|
+
</h3>
|
|
20
|
+
</div>
|
|
21
|
+
</div>
|
|
22
|
+
</div>
|
|
23
|
+
`;
|
|
24
|
+
|
|
25
|
+
exports[`<ConceptImplementationLinks /> show create implementations buttons when have permissions 1`] = `
|
|
26
|
+
<div>
|
|
27
|
+
<div
|
|
28
|
+
class="ui bottom attached segment"
|
|
29
|
+
>
|
|
30
|
+
<div
|
|
31
|
+
style="height: 40px;"
|
|
32
|
+
>
|
|
33
|
+
<a
|
|
34
|
+
class="ui right floated button"
|
|
35
|
+
href="/implementations/new_raw?business_concept_id=6483&id=12345"
|
|
36
|
+
role="button"
|
|
37
|
+
>
|
|
38
|
+
Create Raw Implementation
|
|
39
|
+
</a>
|
|
40
|
+
<a
|
|
41
|
+
class="ui primary right floated button"
|
|
42
|
+
href="/implementations/new?business_concept_id=6483&id=12345"
|
|
43
|
+
role="button"
|
|
44
|
+
>
|
|
45
|
+
Create Implementation
|
|
46
|
+
</a>
|
|
47
|
+
</div>
|
|
9
48
|
<div
|
|
10
49
|
class="ui vertical segment"
|
|
11
50
|
>
|
|
@@ -14,6 +53,425 @@ exports[`<ConceptImplementationLinks /> matches the latest snapshot 1`] = `
|
|
|
14
53
|
>
|
|
15
54
|
group
|
|
16
55
|
</h3>
|
|
56
|
+
<table
|
|
57
|
+
class="ui sortable table"
|
|
58
|
+
>
|
|
59
|
+
<thead
|
|
60
|
+
class=""
|
|
61
|
+
>
|
|
62
|
+
<tr
|
|
63
|
+
class=""
|
|
64
|
+
>
|
|
65
|
+
<th
|
|
66
|
+
class="two wide"
|
|
67
|
+
>
|
|
68
|
+
Implementation
|
|
69
|
+
</th>
|
|
70
|
+
<th
|
|
71
|
+
class="two wide"
|
|
72
|
+
>
|
|
73
|
+
Rule
|
|
74
|
+
</th>
|
|
75
|
+
<th
|
|
76
|
+
class="two wide"
|
|
77
|
+
>
|
|
78
|
+
Status
|
|
79
|
+
</th>
|
|
80
|
+
<th
|
|
81
|
+
class="two wide"
|
|
82
|
+
>
|
|
83
|
+
Last execution
|
|
84
|
+
</th>
|
|
85
|
+
<th
|
|
86
|
+
class="two wide"
|
|
87
|
+
>
|
|
88
|
+
Result Type
|
|
89
|
+
</th>
|
|
90
|
+
<th
|
|
91
|
+
class="one wide"
|
|
92
|
+
>
|
|
93
|
+
Minimum
|
|
94
|
+
</th>
|
|
95
|
+
<th
|
|
96
|
+
class="one wide"
|
|
97
|
+
>
|
|
98
|
+
Goal
|
|
99
|
+
</th>
|
|
100
|
+
<th
|
|
101
|
+
class="two wide"
|
|
102
|
+
>
|
|
103
|
+
Result
|
|
104
|
+
</th>
|
|
105
|
+
<th
|
|
106
|
+
class="ascending sorted disabled"
|
|
107
|
+
>
|
|
108
|
+
Inserted At
|
|
109
|
+
</th>
|
|
110
|
+
<th
|
|
111
|
+
class="ascending sorted disabled"
|
|
112
|
+
>
|
|
113
|
+
Updated At
|
|
114
|
+
</th>
|
|
115
|
+
</tr>
|
|
116
|
+
</thead>
|
|
117
|
+
<tbody
|
|
118
|
+
class=""
|
|
119
|
+
>
|
|
120
|
+
<tr
|
|
121
|
+
class=""
|
|
122
|
+
>
|
|
123
|
+
<td
|
|
124
|
+
class=""
|
|
125
|
+
>
|
|
126
|
+
<a
|
|
127
|
+
href="/implementations/1"
|
|
128
|
+
>
|
|
129
|
+
foo
|
|
130
|
+
</a>
|
|
131
|
+
</td>
|
|
132
|
+
<td
|
|
133
|
+
class=""
|
|
134
|
+
/>
|
|
135
|
+
<td
|
|
136
|
+
class=""
|
|
137
|
+
>
|
|
138
|
+
ruleImplementation.status.undefined
|
|
139
|
+
</td>
|
|
140
|
+
<td
|
|
141
|
+
class=""
|
|
142
|
+
/>
|
|
143
|
+
<td
|
|
144
|
+
class=""
|
|
145
|
+
/>
|
|
146
|
+
<td
|
|
147
|
+
class="right aligned"
|
|
148
|
+
>
|
|
149
|
+
undefined%
|
|
150
|
+
</td>
|
|
151
|
+
<td
|
|
152
|
+
class="right aligned"
|
|
153
|
+
>
|
|
154
|
+
undefined%
|
|
155
|
+
</td>
|
|
156
|
+
<td
|
|
157
|
+
class="center aligned"
|
|
158
|
+
/>
|
|
159
|
+
<td
|
|
160
|
+
class=""
|
|
161
|
+
/>
|
|
162
|
+
<td
|
|
163
|
+
class=""
|
|
164
|
+
/>
|
|
165
|
+
</tr>
|
|
166
|
+
</tbody>
|
|
167
|
+
</table>
|
|
168
|
+
</div>
|
|
169
|
+
</div>
|
|
170
|
+
</div>
|
|
171
|
+
`;
|
|
172
|
+
|
|
173
|
+
exports[`<ConceptImplementationLinks /> show implementations with groups 1`] = `
|
|
174
|
+
<div>
|
|
175
|
+
<div
|
|
176
|
+
class="ui bottom attached segment"
|
|
177
|
+
>
|
|
178
|
+
<div
|
|
179
|
+
style="height: 40px;"
|
|
180
|
+
>
|
|
181
|
+
<a
|
|
182
|
+
class="ui right floated button"
|
|
183
|
+
href="/implementations/new_raw?business_concept_id=6483&id=12345"
|
|
184
|
+
role="button"
|
|
185
|
+
>
|
|
186
|
+
Create Raw Implementation
|
|
187
|
+
</a>
|
|
188
|
+
<a
|
|
189
|
+
class="ui primary right floated button"
|
|
190
|
+
href="/implementations/new?business_concept_id=6483&id=12345"
|
|
191
|
+
role="button"
|
|
192
|
+
>
|
|
193
|
+
Create Implementation
|
|
194
|
+
</a>
|
|
195
|
+
</div>
|
|
196
|
+
<div
|
|
197
|
+
class="ui vertical segment"
|
|
198
|
+
>
|
|
199
|
+
<h3
|
|
200
|
+
class="ui header"
|
|
201
|
+
>
|
|
202
|
+
Link to Implementation
|
|
203
|
+
</h3>
|
|
204
|
+
<table
|
|
205
|
+
class="ui sortable table"
|
|
206
|
+
>
|
|
207
|
+
<thead
|
|
208
|
+
class=""
|
|
209
|
+
>
|
|
210
|
+
<tr
|
|
211
|
+
class=""
|
|
212
|
+
>
|
|
213
|
+
<th
|
|
214
|
+
class="two wide"
|
|
215
|
+
>
|
|
216
|
+
Implementation
|
|
217
|
+
</th>
|
|
218
|
+
<th
|
|
219
|
+
class="two wide"
|
|
220
|
+
>
|
|
221
|
+
Rule
|
|
222
|
+
</th>
|
|
223
|
+
<th
|
|
224
|
+
class="two wide"
|
|
225
|
+
>
|
|
226
|
+
Status
|
|
227
|
+
</th>
|
|
228
|
+
<th
|
|
229
|
+
class="two wide"
|
|
230
|
+
>
|
|
231
|
+
Last execution
|
|
232
|
+
</th>
|
|
233
|
+
<th
|
|
234
|
+
class="two wide"
|
|
235
|
+
>
|
|
236
|
+
Result Type
|
|
237
|
+
</th>
|
|
238
|
+
<th
|
|
239
|
+
class="one wide"
|
|
240
|
+
>
|
|
241
|
+
Minimum
|
|
242
|
+
</th>
|
|
243
|
+
<th
|
|
244
|
+
class="one wide"
|
|
245
|
+
>
|
|
246
|
+
Goal
|
|
247
|
+
</th>
|
|
248
|
+
<th
|
|
249
|
+
class="two wide"
|
|
250
|
+
>
|
|
251
|
+
Result
|
|
252
|
+
</th>
|
|
253
|
+
<th
|
|
254
|
+
class="ascending sorted disabled"
|
|
255
|
+
>
|
|
256
|
+
Inserted At
|
|
257
|
+
</th>
|
|
258
|
+
<th
|
|
259
|
+
class="ascending sorted disabled"
|
|
260
|
+
>
|
|
261
|
+
Updated At
|
|
262
|
+
</th>
|
|
263
|
+
</tr>
|
|
264
|
+
</thead>
|
|
265
|
+
<tbody
|
|
266
|
+
class=""
|
|
267
|
+
>
|
|
268
|
+
<tr
|
|
269
|
+
class=""
|
|
270
|
+
>
|
|
271
|
+
<td
|
|
272
|
+
class=""
|
|
273
|
+
>
|
|
274
|
+
<a
|
|
275
|
+
href="/implementations/1"
|
|
276
|
+
>
|
|
277
|
+
foo
|
|
278
|
+
</a>
|
|
279
|
+
</td>
|
|
280
|
+
<td
|
|
281
|
+
class=""
|
|
282
|
+
/>
|
|
283
|
+
<td
|
|
284
|
+
class=""
|
|
285
|
+
>
|
|
286
|
+
ruleImplementation.status.undefined
|
|
287
|
+
</td>
|
|
288
|
+
<td
|
|
289
|
+
class=""
|
|
290
|
+
/>
|
|
291
|
+
<td
|
|
292
|
+
class=""
|
|
293
|
+
/>
|
|
294
|
+
<td
|
|
295
|
+
class="right aligned"
|
|
296
|
+
>
|
|
297
|
+
undefined%
|
|
298
|
+
</td>
|
|
299
|
+
<td
|
|
300
|
+
class="right aligned"
|
|
301
|
+
>
|
|
302
|
+
undefined%
|
|
303
|
+
</td>
|
|
304
|
+
<td
|
|
305
|
+
class="center aligned"
|
|
306
|
+
/>
|
|
307
|
+
<td
|
|
308
|
+
class=""
|
|
309
|
+
/>
|
|
310
|
+
<td
|
|
311
|
+
class=""
|
|
312
|
+
/>
|
|
313
|
+
</tr>
|
|
314
|
+
</tbody>
|
|
315
|
+
</table>
|
|
316
|
+
</div>
|
|
317
|
+
<div
|
|
318
|
+
class="ui vertical segment"
|
|
319
|
+
>
|
|
320
|
+
<h3
|
|
321
|
+
class="ui header"
|
|
322
|
+
>
|
|
323
|
+
Deleted Implementations
|
|
324
|
+
</h3>
|
|
325
|
+
<table
|
|
326
|
+
class="ui sortable table"
|
|
327
|
+
>
|
|
328
|
+
<thead
|
|
329
|
+
class=""
|
|
330
|
+
>
|
|
331
|
+
<tr
|
|
332
|
+
class=""
|
|
333
|
+
>
|
|
334
|
+
<th
|
|
335
|
+
class="two wide"
|
|
336
|
+
>
|
|
337
|
+
Implementation
|
|
338
|
+
</th>
|
|
339
|
+
<th
|
|
340
|
+
class="two wide"
|
|
341
|
+
>
|
|
342
|
+
Rule
|
|
343
|
+
</th>
|
|
344
|
+
<th
|
|
345
|
+
class="two wide"
|
|
346
|
+
>
|
|
347
|
+
Status
|
|
348
|
+
</th>
|
|
349
|
+
<th
|
|
350
|
+
class="two wide"
|
|
351
|
+
>
|
|
352
|
+
Last execution
|
|
353
|
+
</th>
|
|
354
|
+
<th
|
|
355
|
+
class="two wide"
|
|
356
|
+
>
|
|
357
|
+
Result Type
|
|
358
|
+
</th>
|
|
359
|
+
<th
|
|
360
|
+
class="one wide"
|
|
361
|
+
>
|
|
362
|
+
Minimum
|
|
363
|
+
</th>
|
|
364
|
+
<th
|
|
365
|
+
class="one wide"
|
|
366
|
+
>
|
|
367
|
+
Goal
|
|
368
|
+
</th>
|
|
369
|
+
<th
|
|
370
|
+
class="two wide"
|
|
371
|
+
>
|
|
372
|
+
Result
|
|
373
|
+
</th>
|
|
374
|
+
<th
|
|
375
|
+
class="ascending sorted disabled"
|
|
376
|
+
>
|
|
377
|
+
Inserted At
|
|
378
|
+
</th>
|
|
379
|
+
<th
|
|
380
|
+
class="ascending sorted disabled"
|
|
381
|
+
>
|
|
382
|
+
Updated At
|
|
383
|
+
</th>
|
|
384
|
+
</tr>
|
|
385
|
+
</thead>
|
|
386
|
+
<tbody
|
|
387
|
+
class=""
|
|
388
|
+
>
|
|
389
|
+
<tr
|
|
390
|
+
class=""
|
|
391
|
+
>
|
|
392
|
+
<td
|
|
393
|
+
class=""
|
|
394
|
+
>
|
|
395
|
+
<a
|
|
396
|
+
href="/implementations/2"
|
|
397
|
+
>
|
|
398
|
+
bar
|
|
399
|
+
</a>
|
|
400
|
+
</td>
|
|
401
|
+
<td
|
|
402
|
+
class=""
|
|
403
|
+
/>
|
|
404
|
+
<td
|
|
405
|
+
class=""
|
|
406
|
+
>
|
|
407
|
+
ruleImplementation.status.undefined
|
|
408
|
+
</td>
|
|
409
|
+
<td
|
|
410
|
+
class=""
|
|
411
|
+
/>
|
|
412
|
+
<td
|
|
413
|
+
class=""
|
|
414
|
+
/>
|
|
415
|
+
<td
|
|
416
|
+
class="right aligned"
|
|
417
|
+
>
|
|
418
|
+
undefined%
|
|
419
|
+
</td>
|
|
420
|
+
<td
|
|
421
|
+
class="right aligned"
|
|
422
|
+
>
|
|
423
|
+
undefined%
|
|
424
|
+
</td>
|
|
425
|
+
<td
|
|
426
|
+
class="center aligned"
|
|
427
|
+
/>
|
|
428
|
+
<td
|
|
429
|
+
class=""
|
|
430
|
+
/>
|
|
431
|
+
<td
|
|
432
|
+
class=""
|
|
433
|
+
/>
|
|
434
|
+
</tr>
|
|
435
|
+
</tbody>
|
|
436
|
+
</table>
|
|
437
|
+
</div>
|
|
438
|
+
</div>
|
|
439
|
+
</div>
|
|
440
|
+
`;
|
|
441
|
+
|
|
442
|
+
exports[`<ConceptImplementationLinks /> when don't have any implementation 1`] = `
|
|
443
|
+
<div>
|
|
444
|
+
<div
|
|
445
|
+
class="ui bottom attached segment"
|
|
446
|
+
>
|
|
447
|
+
<div
|
|
448
|
+
style="height: 40px;"
|
|
449
|
+
>
|
|
450
|
+
<a
|
|
451
|
+
class="ui right floated button"
|
|
452
|
+
href="/implementations/new_raw?business_concept_id=6483&id=12345"
|
|
453
|
+
role="button"
|
|
454
|
+
>
|
|
455
|
+
Create Raw Implementation
|
|
456
|
+
</a>
|
|
457
|
+
<a
|
|
458
|
+
class="ui primary right floated button"
|
|
459
|
+
href="/implementations/new?business_concept_id=6483&id=12345"
|
|
460
|
+
role="button"
|
|
461
|
+
>
|
|
462
|
+
Create Implementation
|
|
463
|
+
</a>
|
|
464
|
+
</div>
|
|
465
|
+
<div
|
|
466
|
+
class="ui message"
|
|
467
|
+
>
|
|
468
|
+
<div
|
|
469
|
+
class="content"
|
|
470
|
+
>
|
|
471
|
+
<p>
|
|
472
|
+
This concept has no implementations
|
|
473
|
+
</p>
|
|
474
|
+
</div>
|
|
17
475
|
</div>
|
|
18
476
|
</div>
|
|
19
477
|
</div>
|