@truedat/bg 7.0.5 → 7.0.7

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.
Files changed (99) hide show
  1. package/package.json +6 -6
  2. package/src/concepts/components/DomainConcepts.js +1 -4
  3. package/src/concepts/components/__tests__/__snapshots__/ConceptForm.spec.js.snap +5 -5
  4. package/src/concepts/components/__tests__/__snapshots__/ConceptsBulkUpdate.spec.js.snap +5 -5
  5. package/src/concepts/components/__tests__/__snapshots__/SharedToForm.spec.js.snap +5 -5
  6. package/src/hooks/useDomains.js +77 -0
  7. package/src/messages/en.js +6 -0
  8. package/src/messages/es.js +5 -0
  9. package/src/reducers/index.js +0 -1
  10. package/src/taxonomy/components/AddDomainMember.js +1 -7
  11. package/src/taxonomy/components/Domain.js +80 -84
  12. package/src/taxonomy/components/DomainActions.js +57 -84
  13. package/src/taxonomy/components/DomainCrumbs.js +51 -43
  14. package/src/taxonomy/components/DomainDetail.js +88 -46
  15. package/src/taxonomy/components/DomainForm.js +34 -36
  16. package/src/taxonomy/components/DomainImplementations.js +1 -4
  17. package/src/taxonomy/components/DomainMembers.js +8 -1
  18. package/src/taxonomy/components/DomainRoutes.js +8 -55
  19. package/src/taxonomy/components/DomainStructures.js +1 -4
  20. package/src/taxonomy/components/DomainTabs.js +22 -29
  21. package/src/taxonomy/components/Domains.js +66 -27
  22. package/src/taxonomy/components/DomainsActions.js +5 -14
  23. package/src/taxonomy/components/EditDomain.js +35 -21
  24. package/src/taxonomy/components/NewDomain.js +47 -22
  25. package/src/taxonomy/components/__tests__/Domain.spec.js +17 -8
  26. package/src/taxonomy/components/__tests__/DomainActions.spec.js +62 -7
  27. package/src/taxonomy/components/__tests__/DomainCrumbs.spec.js +18 -5
  28. package/src/taxonomy/components/__tests__/DomainDetail.spec.js +87 -4
  29. package/src/taxonomy/components/__tests__/DomainForm.spec.js +189 -4
  30. package/src/taxonomy/components/__tests__/DomainMembers.spec.js +1 -3
  31. package/src/taxonomy/components/__tests__/DomainStructures.spec.js +3 -2
  32. package/src/taxonomy/components/__tests__/Domains.spec.js +103 -6
  33. package/src/taxonomy/components/__tests__/EditDomain.spec.js +56 -5
  34. package/src/taxonomy/components/__tests__/NewDomain.spec.js +65 -6
  35. package/src/taxonomy/components/__tests__/__snapshots__/AddDomainMember.spec.js.snap +0 -10
  36. package/src/taxonomy/components/__tests__/__snapshots__/Domain.spec.js.snap +35 -48
  37. package/src/taxonomy/components/__tests__/__snapshots__/DomainActions.spec.js.snap +56 -1
  38. package/src/taxonomy/components/__tests__/__snapshots__/DomainCrumbs.spec.js.snap +14 -2
  39. package/src/taxonomy/components/__tests__/__snapshots__/DomainDetail.spec.js.snap +93 -40
  40. package/src/taxonomy/components/__tests__/__snapshots__/DomainForm.spec.js.snap +7 -7
  41. package/src/taxonomy/components/__tests__/__snapshots__/Domains.spec.js.snap +75 -10
  42. package/src/taxonomy/components/__tests__/__snapshots__/DomainsActions.spec.js.snap +20 -1
  43. package/src/taxonomy/components/__tests__/__snapshots__/EditDomain.spec.js.snap +192 -30
  44. package/src/taxonomy/components/__tests__/__snapshots__/NewDomain.spec.js.snap +405 -28
  45. package/src/taxonomy/components/index.js +1 -2
  46. package/src/taxonomy/index.js +0 -1
  47. package/src/taxonomy/routines.js +0 -10
  48. package/src/taxonomy/sagas/index.js +2 -21
  49. package/src/taxonomy/selectors/getDomainsConcept.js +0 -13
  50. package/src/taxonomy/selectors/index.js +0 -16
  51. package/src/taxonomy/components/DomainCards.js +0 -97
  52. package/src/taxonomy/components/DomainLoader.js +0 -60
  53. package/src/taxonomy/components/DomainMembersLoader.js +0 -44
  54. package/src/taxonomy/components/DomainsLoader.js +0 -40
  55. package/src/taxonomy/components/__tests__/DomainCards.spec.js +0 -30
  56. package/src/taxonomy/components/__tests__/DomainsLoader.spec.js +0 -38
  57. package/src/taxonomy/components/__tests__/__snapshots__/DomainCards.spec.js.snap +0 -160
  58. package/src/taxonomy/reducers/__tests__/domain.spec.js +0 -58
  59. package/src/taxonomy/reducers/__tests__/domainConceptLoading.spec.js +0 -26
  60. package/src/taxonomy/reducers/__tests__/domainCreating.spec.js +0 -24
  61. package/src/taxonomy/reducers/__tests__/domainLoading.spec.js +0 -22
  62. package/src/taxonomy/reducers/__tests__/domainMembersActions.spec.js +0 -38
  63. package/src/taxonomy/reducers/__tests__/domainMembersLoading.spec.js +0 -26
  64. package/src/taxonomy/reducers/__tests__/domainRedirect.spec.js +0 -36
  65. package/src/taxonomy/reducers/__tests__/domainUpdating.spec.js +0 -24
  66. package/src/taxonomy/reducers/__tests__/domains.spec.js +0 -30
  67. package/src/taxonomy/reducers/__tests__/domainsActions.spec.js +0 -36
  68. package/src/taxonomy/reducers/__tests__/domainsConcept.spec.js +0 -30
  69. package/src/taxonomy/reducers/__tests__/domainsFilter.spec.js +0 -41
  70. package/src/taxonomy/reducers/__tests__/domainsLoading.spec.js +0 -22
  71. package/src/taxonomy/reducers/domain.js +0 -32
  72. package/src/taxonomy/reducers/domainActions.js +0 -19
  73. package/src/taxonomy/reducers/domainCreating.js +0 -14
  74. package/src/taxonomy/reducers/domainLoading.js +0 -14
  75. package/src/taxonomy/reducers/domainMembersActions.js +0 -22
  76. package/src/taxonomy/reducers/domainMembersLoading.js +0 -12
  77. package/src/taxonomy/reducers/domainRedirect.js +0 -25
  78. package/src/taxonomy/reducers/domainUpdating.js +0 -14
  79. package/src/taxonomy/reducers/domains.js +0 -19
  80. package/src/taxonomy/reducers/domainsActions.js +0 -20
  81. package/src/taxonomy/reducers/domainsConcept.js +0 -19
  82. package/src/taxonomy/reducers/domainsConceptLoading.js +0 -12
  83. package/src/taxonomy/reducers/domainsFilter.js +0 -24
  84. package/src/taxonomy/reducers/domainsLoading.js +0 -12
  85. package/src/taxonomy/reducers/index.js +0 -31
  86. package/src/taxonomy/sagas/__tests__/fetchDomain.spec.js +0 -69
  87. package/src/taxonomy/sagas/__tests__/fetchDomains.spec.js +0 -90
  88. package/src/taxonomy/sagas/createDomain.js +0 -27
  89. package/src/taxonomy/sagas/deleteDomain.js +0 -34
  90. package/src/taxonomy/sagas/fetchDomain.js +0 -30
  91. package/src/taxonomy/sagas/fetchDomains.js +0 -37
  92. package/src/taxonomy/sagas/updateDomain.js +0 -30
  93. package/src/taxonomy/selectors/__tests__/domainParentOptionsSelector.spec.js +0 -24
  94. package/src/taxonomy/selectors/__tests__/getDomainActions.spec.js +0 -46
  95. package/src/taxonomy/selectors/__tests__/getDomainGroups.spec.js +0 -17
  96. package/src/taxonomy/selectors/__tests__/getDomainTypes.spec.js +0 -14
  97. package/src/taxonomy/selectors/domainParentOptionsSelector.js +0 -12
  98. package/src/taxonomy/selectors/getDomainActions.js +0 -32
  99. package/src/taxonomy/selectors/getDomainGroups.js +0 -11
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@truedat/bg",
3
- "version": "7.0.5",
3
+ "version": "7.0.7",
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": "7.0.5",
37
+ "@truedat/test": "7.0.7",
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,9 +86,9 @@
86
86
  ]
87
87
  },
88
88
  "dependencies": {
89
- "@truedat/core": "7.0.5",
90
- "@truedat/df": "7.0.5",
91
- "@truedat/lm": "7.0.5",
89
+ "@truedat/core": "7.0.7",
90
+ "@truedat/df": "7.0.7",
91
+ "@truedat/lm": "7.0.7",
92
92
  "decode-uri-component": "^0.2.2",
93
93
  "file-saver": "^2.0.5",
94
94
  "moment": "^2.29.4",
@@ -111,5 +111,5 @@
111
111
  "react-dom": ">= 16.8.6 < 17",
112
112
  "semantic-ui-react": ">= 2.0.3 < 2.2"
113
113
  },
114
- "gitHead": "d76d7852ddb993ed53f0266ec17858119e731bbf"
114
+ "gitHead": "f780d02b3356b69c61023b14b61400ffb779e33d"
115
115
  }
@@ -1,6 +1,5 @@
1
1
  import React from "react";
2
2
  import PropTypes from "prop-types";
3
- import { connect } from "react-redux";
4
3
  import ConceptsPanel from "./ConceptsPanel";
5
4
 
6
5
  export const DomainConcepts = ({ domain = {} }) => {
@@ -17,6 +16,4 @@ DomainConcepts.propTypes = {
17
16
  domain: PropTypes.object.isRequired,
18
17
  };
19
18
 
20
- export const mapStateToProps = ({ domain }) => ({ domain });
21
-
22
- export default connect(mapStateToProps)(DomainConcepts);
19
+ export default DomainConcepts;
@@ -7,7 +7,7 @@ exports[`<ConceptForm /> with multiple templates matches the latest snapshot 1`]
7
7
  style=""
8
8
  >
9
9
  <div
10
- class="disabled required field fix-dropdown-selector"
10
+ class="disabled required field fix-dropdown-selector "
11
11
  >
12
12
  <label>
13
13
  Domain
@@ -34,7 +34,7 @@ exports[`<ConceptForm /> with multiple templates matches the latest snapshot 1`]
34
34
  class="menu transition"
35
35
  >
36
36
  <div
37
- class="ui left icon input search"
37
+ class="ui fluid left icon input search "
38
38
  >
39
39
  <input
40
40
  type="text"
@@ -57,7 +57,7 @@ exports[`<ConceptForm /> with multiple templates matches the latest snapshot 1`]
57
57
  >
58
58
  <i
59
59
  aria-hidden="true"
60
- class="plus icon"
60
+ class="chevron circle down icon"
61
61
  />
62
62
  <span
63
63
  style="opacity: 1;"
@@ -76,7 +76,7 @@ exports[`<ConceptForm /> with multiple templates matches the latest snapshot 1`]
76
76
  >
77
77
  <i
78
78
  aria-hidden="true"
79
- class="icon"
79
+ class="circle icon"
80
80
  />
81
81
  <span
82
82
  style="opacity: 1;"
@@ -95,7 +95,7 @@ exports[`<ConceptForm /> with multiple templates matches the latest snapshot 1`]
95
95
  >
96
96
  <i
97
97
  aria-hidden="true"
98
- class="icon"
98
+ class="circle icon"
99
99
  />
100
100
  <span
101
101
  style="opacity: 1;"
@@ -40,7 +40,7 @@ exports[`<ConceptsBulkUpdate /> matches the latest snapshot 1`] = `
40
40
  class="ui form"
41
41
  >
42
42
  <div
43
- class="required field fix-dropdown-selector"
43
+ class="required field fix-dropdown-selector "
44
44
  >
45
45
  <div
46
46
  aria-disabled="false"
@@ -62,7 +62,7 @@ exports[`<ConceptsBulkUpdate /> matches the latest snapshot 1`] = `
62
62
  class="menu transition"
63
63
  >
64
64
  <div
65
- class="ui left icon input search"
65
+ class="ui fluid left icon input search "
66
66
  >
67
67
  <input
68
68
  type="text"
@@ -85,7 +85,7 @@ exports[`<ConceptsBulkUpdate /> matches the latest snapshot 1`] = `
85
85
  >
86
86
  <i
87
87
  aria-hidden="true"
88
- class="plus icon"
88
+ class="chevron circle down icon"
89
89
  />
90
90
  <span
91
91
  style="opacity: 1;"
@@ -104,7 +104,7 @@ exports[`<ConceptsBulkUpdate /> matches the latest snapshot 1`] = `
104
104
  >
105
105
  <i
106
106
  aria-hidden="true"
107
- class="icon"
107
+ class="circle icon"
108
108
  />
109
109
  <span
110
110
  style="opacity: 1;"
@@ -123,7 +123,7 @@ exports[`<ConceptsBulkUpdate /> matches the latest snapshot 1`] = `
123
123
  >
124
124
  <i
125
125
  aria-hidden="true"
126
- class="icon"
126
+ class="circle icon"
127
127
  />
128
128
  <span
129
129
  style="opacity: 1;"
@@ -15,7 +15,7 @@ exports[`<SharedToForm /> matches the latest snapshot 1`] = `
15
15
  class="ui form"
16
16
  >
17
17
  <div
18
- class="field fix-dropdown-selector"
18
+ class="field fix-dropdown-selector "
19
19
  >
20
20
  <div
21
21
  aria-disabled="false"
@@ -42,7 +42,7 @@ exports[`<SharedToForm /> matches the latest snapshot 1`] = `
42
42
  class="menu transition"
43
43
  >
44
44
  <div
45
- class="ui left icon input search"
45
+ class="ui fluid left icon input search "
46
46
  >
47
47
  <input
48
48
  type="text"
@@ -65,7 +65,7 @@ exports[`<SharedToForm /> matches the latest snapshot 1`] = `
65
65
  >
66
66
  <i
67
67
  aria-hidden="true"
68
- class="plus icon"
68
+ class="chevron circle down icon"
69
69
  />
70
70
  <span
71
71
  style="opacity: 1;"
@@ -84,7 +84,7 @@ exports[`<SharedToForm /> matches the latest snapshot 1`] = `
84
84
  >
85
85
  <i
86
86
  aria-hidden="true"
87
- class="icon"
87
+ class="circle icon"
88
88
  />
89
89
  <span
90
90
  style="opacity: 1;"
@@ -103,7 +103,7 @@ exports[`<SharedToForm /> matches the latest snapshot 1`] = `
103
103
  >
104
104
  <i
105
105
  aria-hidden="true"
106
- class="icon"
106
+ class="circle icon"
107
107
  />
108
108
  <span
109
109
  style="opacity: 1;"
@@ -0,0 +1,77 @@
1
+ import _ from "lodash/fp";
2
+ import { compile } from "path-to-regexp";
3
+ import useSWR, { useSWRConfig } from "swr";
4
+ import useSWRMutations from "swr/mutation";
5
+ import {
6
+ apiJson,
7
+ apiJsonPost,
8
+ apiJsonPatch,
9
+ apiJsonDelete,
10
+ } from "@truedat/core/services/api";
11
+ import { API_DOMAINS, API_DOMAIN } from "../taxonomy/api";
12
+
13
+ export const useDomains = () => {
14
+ const toApiPath = compile(API_DOMAINS, "api");
15
+ const url = toApiPath();
16
+ const { data, error } = useSWR(url, apiJson);
17
+ return {
18
+ data: data?.data?.data,
19
+ actions: data?.data?._actions,
20
+ error,
21
+ loading: !error && !data,
22
+ };
23
+ };
24
+
25
+ export const useDomain = (id) => {
26
+ const toApiPath = compile(API_DOMAIN, "api");
27
+ const url = toApiPath({ id });
28
+ const { data, error } = useSWR(url, apiJson);
29
+ return {
30
+ data: data?.data?.data,
31
+ actions: data?.data?._actions,
32
+ error,
33
+ loading: !error && !data,
34
+ };
35
+ };
36
+
37
+ export const useDomainCreate = () => {
38
+ const toApiPath = compile(API_DOMAINS, "api");
39
+ const url = toApiPath();
40
+ return useSWRMutations(url, (url, { arg }) => apiJsonPost(url, arg));
41
+ };
42
+
43
+ export const useDomainUpdate = (id) => {
44
+ const { mutate } = useSWRConfig();
45
+ const url = compile(API_DOMAIN)({ id });
46
+ const mutator = useSWRMutations(url, (url, { arg }) =>
47
+ apiJsonPatch(url, arg)
48
+ );
49
+ return {
50
+ ...mutator,
51
+ trigger: async (arg, options) => {
52
+ const response = await mutator.trigger(arg, options);
53
+ const toApiPath = compile(API_DOMAINS, "api");
54
+ const url = toApiPath();
55
+ mutate(url);
56
+ return response;
57
+ },
58
+ };
59
+ };
60
+
61
+ export const useDomainDelete = (id) => {
62
+ const { mutate } = useSWRConfig();
63
+ const url = compile(API_DOMAIN)({ id });
64
+ const mutator = useSWRMutations(url, (url, { arg }) =>
65
+ apiJsonDelete(url, arg)
66
+ );
67
+ return {
68
+ ...mutator,
69
+ trigger: async (arg, options) => {
70
+ const response = await mutator.trigger(arg, options);
71
+ const toApiPath = compile(API_DOMAINS, "api");
72
+ const url = toApiPath();
73
+ mutate(url);
74
+ return response;
75
+ },
76
+ };
77
+ };
@@ -250,6 +250,9 @@ export default {
250
250
  domain: "Domain",
251
251
  "domain.actions.add_member": "Add",
252
252
  "domain.actions.create": "New Subdomain",
253
+ "domain.actions.delete": "Delete domain",
254
+ "domain.actions.delete.question":
255
+ "Are you sure you want to delete this domain?",
253
256
  "domain.actions.edit": "Edit",
254
257
  "domain.actions.edit.header": "Edit Domain",
255
258
  "domain.children.empty": "This domain has no subdomains",
@@ -284,9 +287,12 @@ export default {
284
287
  "domain.selector.placeholder": "Select a domain...",
285
288
  "domains.actions.create": "New Domain",
286
289
  "domains.search.placeholder": "Search domains...",
290
+ "domains.search.error.fields": "Search fields not valid",
287
291
  "domains.search.results.count": "{count} domains found:",
288
292
  "domains.search.results.empty": "No domains found",
289
293
  "domains.subheader": "Manage governance structure and data domains",
294
+ "domains.general.message":
295
+ "Please, select a domain on the left pane to see the detail.",
290
296
  "events.text": "{field} changed to {value}",
291
297
  "fields.dropdown.placeholder": "Select one...",
292
298
  "fields.pairlist.url.name.placeholder": "Url name",
@@ -254,6 +254,8 @@ export default {
254
254
  domain: "Dominio",
255
255
  "domain.actions.add_member": "Añadir",
256
256
  "domain.actions.create": "Nuevo subdominio",
257
+ "domain.actions.delete": "Eliminar dominio",
258
+ "domain.actions.delete.question": "¿Quieres eliminar este dominio?",
257
259
  "domain.actions.edit": "Editar",
258
260
  "domain.actions.edit.header": "Editar dominio",
259
261
  "domain.children.empty": "Este dominio no tiene subdominios",
@@ -287,10 +289,13 @@ export default {
287
289
  "domain.selector.placeholder": "Selecciona un dominio...",
288
290
  "domains.actions.create": "Nuevo dominio",
289
291
  "domains.search.placeholder": "Buscar dominios...",
292
+ "domains.search.error.fields": "Campos de búsqueda no válidos",
290
293
  "domains.search.results.count": "{count} dominios encontrados:",
291
294
  "domains.search.results.empty": "Ningún dominio encontrado",
292
295
  "domains.subheader":
293
296
  "Gestionar los dominios de negocio y los dominios de gobierno de datos",
297
+ "domains.general.message":
298
+ "Por favor, selecciona un dominio en el panel de la izquierda para ver el detalle.",
294
299
  "events.text": "{field} actualizado a {value}",
295
300
  "fields.dropdown.placeholder": "Selecciona...",
296
301
  "fields.pairlist.url.name.placeholder": "Nombre de la url",
@@ -1,3 +1,2 @@
1
1
  export * from "../concepts/reducers";
2
- export * from "../taxonomy/reducers";
3
2
  export * from "./bgMessage";
@@ -4,17 +4,11 @@ import { useHistory } from "react-router-dom";
4
4
 
5
5
  import { linkTo } from "@truedat/core/routes";
6
6
  import AddResourceMember from "@truedat/core/components/AddResourceMember";
7
- import DomainCrumbs from "./DomainCrumbs";
8
7
 
9
8
  const AddDomainMember = ({ id }) => {
10
9
  const history = useHistory();
11
10
  const onSuccess = () => history.push(linkTo.DOMAIN_MEMBERS({ id }));
12
- return (
13
- <>
14
- <DomainCrumbs />
15
- <AddResourceMember type="domain" id={`${id}`} onSuccess={onSuccess} />
16
- </>
17
- );
11
+ return <AddResourceMember type="domain" id={`${id}`} onSuccess={onSuccess} />;
18
12
  };
19
13
 
20
14
  AddDomainMember.propTypes = {
@@ -1,115 +1,111 @@
1
- import _ from "lodash/fp";
2
1
  import React from "react";
3
2
  import PropTypes from "prop-types";
4
- import { connect } from "react-redux";
5
3
  import { Route, Switch } from "react-router-dom";
6
4
  import { Segment } from "semantic-ui-react";
7
5
  import { Unauthorized } from "@truedat/core/components";
8
6
  import { useAuthorized } from "@truedat/core/hooks";
9
7
  import {
10
- DOMAIN,
11
8
  DOMAIN_CONCEPTS,
12
9
  DOMAIN_IMPLEMENTATIONS,
13
10
  DOMAIN_MEMBERS,
11
+ DOMAIN_MEMBERS_NEW,
14
12
  DOMAIN_STRUCTURES,
15
- linkTo,
13
+ DOMAIN_NEW,
14
+ DOMAIN_EDIT,
16
15
  } from "@truedat/core/routes";
17
16
  import UserSearchFiltersLoader from "@truedat/dd/components/UserSearchFiltersLoader";
18
17
  import DomainConcepts from "../../concepts/components/DomainConcepts";
19
- import DomainActions from "./DomainActions";
20
- import DomainCards from "./DomainCards";
21
- import DomainCrumbs from "./DomainCrumbs";
18
+ import { useDomain } from "../../hooks/useDomains";
22
19
  import DomainDetail from "./DomainDetail";
23
20
  import DomainImplementations from "./DomainImplementations";
24
21
  import DomainMembers from "./DomainMembers";
25
- import DomainSearch from "./DomainSearch";
26
22
  import DomainStructures from "./DomainStructures";
27
23
  import DomainTabs from "./DomainTabs";
24
+ import EditDomain from "./EditDomain";
25
+ import NewDomain from "./NewDomain";
26
+ import AddDomainMember from "./AddDomainMember";
28
27
 
29
- export const Domain = ({ hasChildren, domain, domainLoading }) => {
28
+ const RolesLoader = React.lazy(() =>
29
+ import("@truedat/auth/roles/components/RolesLoader")
30
+ );
31
+
32
+ export const Domain = ({ domainId }) => {
33
+ const { data: domain } = useDomain(domainId);
30
34
  const ddAuthorized = useAuthorized("data_dictionary");
31
35
  const dqAuthorized = useAuthorized("quality");
32
36
 
33
- const actions = {
34
- create: {
35
- order: 1,
36
- icon: "cube",
37
- messageId: "domain.actions.create",
38
- action: (id) => linkTo.DOMAIN_NEW({ id }),
39
- },
40
- };
41
-
42
- return domainLoading ? null : domain && domain.id ? (
43
- <>
44
- <DomainCrumbs />
45
- <Segment>
46
- <DomainDetail />
47
- <DomainTabs />
48
- <Segment attached="bottom">
49
- <Switch>
50
- <Route
51
- exact
52
- path={DOMAIN}
53
- render={() => (
54
- <>
55
- {hasChildren && <DomainSearch />}
56
- <DomainActions availableActions={actions} />
57
- <DomainCards />
58
- </>
59
- )}
60
- />
61
- <Route
62
- exact
63
- path={DOMAIN_MEMBERS}
64
- render={() => <DomainMembers />}
65
- />
66
- <Route
67
- exact
68
- path={DOMAIN_CONCEPTS}
69
- render={() => <DomainConcepts />}
70
- />
71
- <Route
72
- exact
73
- path={DOMAIN_STRUCTURES}
74
- render={() =>
75
- ddAuthorized ? <DomainStructures /> : <Unauthorized />
76
- }
77
- />
78
- <Route
79
- exact
80
- path={DOMAIN_IMPLEMENTATIONS}
81
- render={() =>
82
- dqAuthorized ? (
37
+ return domain ? (
38
+ <Segment>
39
+ <Switch>
40
+ <Route
41
+ exact
42
+ path={DOMAIN_EDIT}
43
+ render={() => <EditDomain domain={domain} />}
44
+ />
45
+ <Route
46
+ exact
47
+ path={DOMAIN_NEW}
48
+ render={() => <NewDomain domain={domain} />}
49
+ />
50
+ <>
51
+ <DomainDetail id={domain.id} />
52
+ <DomainTabs domain={domain} />
53
+ <Segment attached="bottom">
54
+ <Switch>
55
+ <Route
56
+ exact
57
+ path={DOMAIN_CONCEPTS}
58
+ render={() => <DomainConcepts domain={domain} />}
59
+ />
60
+ <Route
61
+ exact
62
+ path={DOMAIN_STRUCTURES}
63
+ render={() =>
64
+ ddAuthorized ? (
65
+ <DomainStructures domain={domain} />
66
+ ) : (
67
+ <Unauthorized />
68
+ )
69
+ }
70
+ />
71
+ <Route
72
+ exact
73
+ path={DOMAIN_IMPLEMENTATIONS}
74
+ render={() =>
75
+ dqAuthorized ? (
76
+ <>
77
+ <UserSearchFiltersLoader scope="rule_implementation" />
78
+ <DomainImplementations domain={domain} />
79
+ </>
80
+ ) : (
81
+ <Unauthorized />
82
+ )
83
+ }
84
+ />
85
+ <Route
86
+ exact
87
+ path={DOMAIN_MEMBERS}
88
+ render={() => <DomainMembers domainId={domain.id} />}
89
+ />
90
+ <Route
91
+ path={DOMAIN_MEMBERS_NEW}
92
+ render={({ match }) => (
83
93
  <>
84
- <UserSearchFiltersLoader scope="rule_implementation" />
85
- <DomainImplementations />
94
+ <RolesLoader />
95
+ <AddDomainMember id={parseInt(match?.params?.id)} />
86
96
  </>
87
- ) : (
88
- <Unauthorized />
89
- )
90
- }
91
- />
92
- </Switch>
93
- </Segment>
94
- </Segment>
95
- </>
97
+ )}
98
+ />
99
+ </Switch>
100
+ </Segment>
101
+ </>
102
+ </Switch>
103
+ </Segment>
96
104
  ) : null;
97
105
  };
98
106
 
99
107
  Domain.propTypes = {
100
- hasChildren: PropTypes.bool,
101
- domain: PropTypes.object,
102
- domainLoading: PropTypes.bool,
108
+ domainId: PropTypes.number,
103
109
  };
104
110
 
105
- const mapStateToProps = ({ domain, domainLoading, domains }) => ({
106
- domain,
107
- domainLoading,
108
- hasChildren: _.flow(
109
- _.filter(_.prop("parent_id")),
110
- _.filter(_.propEq("parent_id", _.prop("id")(domain))),
111
- _.negate(_.isEmpty)
112
- )(domains),
113
- });
114
-
115
- export default connect(mapStateToProps)(Domain);
111
+ export default Domain;