@reltio/components 1.4.1105 → 1.4.1106
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/cjs/components/CollaborationItem/CommentTarget/CommentTarget.js +14 -6
- package/cjs/hooks/index.d.ts +1 -0
- package/cjs/hooks/index.js +3 -1
- package/cjs/hooks/useCommentsEntitiesMap.d.ts +2 -0
- package/cjs/hooks/useCommentsEntitiesMap.js +89 -0
- package/esm/components/CollaborationItem/CommentTarget/CommentTarget.js +14 -6
- package/esm/hooks/index.d.ts +1 -0
- package/esm/hooks/index.js +1 -0
- package/esm/hooks/useCommentsEntitiesMap.d.ts +2 -0
- package/esm/hooks/useCommentsEntitiesMap.js +82 -0
- package/package.json +3 -3
|
@@ -1,4 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
|
3
|
+
__assign = Object.assign || function(t) {
|
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
+
s = arguments[i];
|
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
+
t[p] = s[p];
|
|
8
|
+
}
|
|
9
|
+
return t;
|
|
10
|
+
};
|
|
11
|
+
return __assign.apply(this, arguments);
|
|
12
|
+
};
|
|
2
13
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
14
|
if (k2 === undefined) k2 = k;
|
|
4
15
|
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
@@ -44,7 +55,7 @@ var CommentTarget = function (_a) {
|
|
|
44
55
|
var metadata = react_redux_1.useSelector(mdm_module_1.default.selectors.getMetadata);
|
|
45
56
|
var entitiesMap = react_1.useContext(contexts_1.EntitiesMapContext);
|
|
46
57
|
var getContent = function () {
|
|
47
|
-
var _a
|
|
58
|
+
var _a;
|
|
48
59
|
switch (comment.objectType) {
|
|
49
60
|
case mdm_sdk_1.CollaborationObjectTypes.ENTITY_ATTRIBUTE: {
|
|
50
61
|
var attributeTypeUri = mdm_sdk_2.getAttributeTypeUriByValueUri(comment.objectId, entity.type);
|
|
@@ -68,10 +79,7 @@ var CommentTarget = function (_a) {
|
|
|
68
79
|
}
|
|
69
80
|
case mdm_sdk_1.CollaborationObjectTypes.RELATION: {
|
|
70
81
|
var relatedEntityUri = utils_1.getRelatedEntityUri(comment, entity.uri);
|
|
71
|
-
var relatedEntity = {
|
|
72
|
-
uri: relatedEntityUri,
|
|
73
|
-
label: (_a = entitiesMap[relatedEntityUri]) === null || _a === void 0 ? void 0 : _a.label
|
|
74
|
-
};
|
|
82
|
+
var relatedEntity = __assign(__assign({}, (entitiesMap[relatedEntityUri] || {})), { uri: relatedEntityUri });
|
|
75
83
|
return (react_1.default.createElement(react_1.default.Fragment, null,
|
|
76
84
|
react_1.default.createElement(Typography_1.default, { className: styles.title }, ui_i18n_1.default.text('Selected relation:')),
|
|
77
85
|
react_1.default.createElement(Typography_1.default, { className: styles.label },
|
|
@@ -85,7 +93,7 @@ var CommentTarget = function (_a) {
|
|
|
85
93
|
var relatedEntityUri = utils_1.getRelatedEntityUri(comment, entity.uri);
|
|
86
94
|
var relatedEntity = {
|
|
87
95
|
uri: relatedEntityUri,
|
|
88
|
-
label: (
|
|
96
|
+
label: (_a = entitiesMap[relatedEntityUri]) === null || _a === void 0 ? void 0 : _a.label
|
|
89
97
|
};
|
|
90
98
|
return (react_1.default.createElement(react_1.default.Fragment, null,
|
|
91
99
|
react_1.default.createElement(Typography_1.default, { className: styles.title }, ui_i18n_1.default.text('Selected potential match:')),
|
package/cjs/hooks/index.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ export { useAPI, CustomAction } from './useAPI';
|
|
|
3
3
|
export type { CustomActionTask } from './useAPI';
|
|
4
4
|
export { useAsyncMount } from './useAsyncMount';
|
|
5
5
|
export { useCollaboration } from './useCollaboration';
|
|
6
|
+
export { useCommentsEntitiesMap } from './useCommentsEntitiesMap';
|
|
6
7
|
export { useDidUpdateEffect } from './useDidUpdateEffect';
|
|
7
8
|
export { usePrevious } from './usePrevious';
|
|
8
9
|
export { useRelationTypeSelector } from './useRelationTypeSelector';
|
package/cjs/hooks/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.useReadableSearchState = exports.useEditableConnection = exports.useCustomScripts = exports.useMarkAsNotMatchRequest = exports.useMergeAllRequest = exports.usePagingSimulator = exports.useMatchesLoader = exports.useConfigPermissions = exports.useWhyDidYouUpdate = exports.useUsers = exports.useSavedState = exports.useSafePromise = exports.useRunOnceAfterValueInitialization = exports.useRelationsLoader = exports.useRelationTypeSelector = exports.usePrevious = exports.useDidUpdateEffect = exports.useCollaboration = exports.useAsyncMount = exports.CustomAction = exports.useAPI = exports.useActions = void 0;
|
|
3
|
+
exports.useReadableSearchState = exports.useEditableConnection = exports.useCustomScripts = exports.useMarkAsNotMatchRequest = exports.useMergeAllRequest = exports.usePagingSimulator = exports.useMatchesLoader = exports.useConfigPermissions = exports.useWhyDidYouUpdate = exports.useUsers = exports.useSavedState = exports.useSafePromise = exports.useRunOnceAfterValueInitialization = exports.useRelationsLoader = exports.useRelationTypeSelector = exports.usePrevious = exports.useDidUpdateEffect = exports.useCommentsEntitiesMap = exports.useCollaboration = exports.useAsyncMount = exports.CustomAction = exports.useAPI = exports.useActions = void 0;
|
|
4
4
|
var useActions_1 = require("./useActions");
|
|
5
5
|
Object.defineProperty(exports, "useActions", { enumerable: true, get: function () { return useActions_1.useActions; } });
|
|
6
6
|
var useAPI_1 = require("./useAPI");
|
|
@@ -10,6 +10,8 @@ var useAsyncMount_1 = require("./useAsyncMount");
|
|
|
10
10
|
Object.defineProperty(exports, "useAsyncMount", { enumerable: true, get: function () { return useAsyncMount_1.useAsyncMount; } });
|
|
11
11
|
var useCollaboration_1 = require("./useCollaboration");
|
|
12
12
|
Object.defineProperty(exports, "useCollaboration", { enumerable: true, get: function () { return useCollaboration_1.useCollaboration; } });
|
|
13
|
+
var useCommentsEntitiesMap_1 = require("./useCommentsEntitiesMap");
|
|
14
|
+
Object.defineProperty(exports, "useCommentsEntitiesMap", { enumerable: true, get: function () { return useCommentsEntitiesMap_1.useCommentsEntitiesMap; } });
|
|
13
15
|
var useDidUpdateEffect_1 = require("./useDidUpdateEffect");
|
|
14
16
|
Object.defineProperty(exports, "useDidUpdateEffect", { enumerable: true, get: function () { return useDidUpdateEffect_1.useDidUpdateEffect; } });
|
|
15
17
|
var usePrevious_1 = require("./usePrevious");
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
|
3
|
+
__assign = Object.assign || function(t) {
|
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
+
s = arguments[i];
|
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
+
t[p] = s[p];
|
|
8
|
+
}
|
|
9
|
+
return t;
|
|
10
|
+
};
|
|
11
|
+
return __assign.apply(this, arguments);
|
|
12
|
+
};
|
|
13
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
14
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.useCommentsEntitiesMap = void 0;
|
|
18
|
+
var react_1 = require("react");
|
|
19
|
+
var ramda_1 = require("ramda");
|
|
20
|
+
var react_redux_1 = require("react-redux");
|
|
21
|
+
var mdm_module_1 = __importDefault(require("@reltio/mdm-module"));
|
|
22
|
+
var mdm_sdk_1 = require("@reltio/mdm-sdk");
|
|
23
|
+
var useSafePromise_1 = require("./useSafePromise");
|
|
24
|
+
var SELECT_OPTION = 'uri,label,type';
|
|
25
|
+
var useCommentsEntitiesMap = function (comments) {
|
|
26
|
+
var safePromise = useSafePromise_1.useSafePromise();
|
|
27
|
+
var currentEntityUri = react_redux_1.useSelector(mdm_module_1.default.selectors.getEntityUriWithDataTenant);
|
|
28
|
+
var _a = react_1.useState({}), entitiesMap = _a[0], setEntitiesMap = _a[1];
|
|
29
|
+
var getEntities = react_1.useCallback(function (entitiesUris) {
|
|
30
|
+
var requestFilters = [
|
|
31
|
+
{
|
|
32
|
+
filter: mdm_sdk_1.FilterOptions.EQUALS,
|
|
33
|
+
fieldName: 'uri',
|
|
34
|
+
values: entitiesUris
|
|
35
|
+
}
|
|
36
|
+
];
|
|
37
|
+
var requestOptions = {
|
|
38
|
+
max: entitiesUris.length,
|
|
39
|
+
activeness: mdm_sdk_1.ActivityFilters.ALL,
|
|
40
|
+
select: 'uri,label,type'
|
|
41
|
+
};
|
|
42
|
+
return safePromise(mdm_sdk_1.getFilteredEntities(requestFilters, requestOptions));
|
|
43
|
+
}, [safePromise]);
|
|
44
|
+
var getNotFoundEntity = function (entityUri) {
|
|
45
|
+
return mdm_sdk_1.getEntity(entityUri, { options: SELECT_OPTION })
|
|
46
|
+
.then(function (entity) { return ({
|
|
47
|
+
uri: entityUri,
|
|
48
|
+
label: entity.label,
|
|
49
|
+
type: entity.type
|
|
50
|
+
}); })
|
|
51
|
+
.catch(function () { return ({}); });
|
|
52
|
+
};
|
|
53
|
+
var addNotFoundEntities = react_1.useCallback(function (entitiesUris, entities) {
|
|
54
|
+
return safePromise(Promise.all((entitiesUris || []).map(getNotFoundEntity))).then(ramda_1.pipe(ramda_1.reject(ramda_1.isEmpty), ramda_1.concat(entities)));
|
|
55
|
+
}, [safePromise]);
|
|
56
|
+
react_1.useEffect(function () {
|
|
57
|
+
var uniqEntitiesUris = ramda_1.pipe(ramda_1.reduce(function (entitiesUris, comment) {
|
|
58
|
+
var type = comment.objectType, relatedObjectUris = comment.relatedObjectUris;
|
|
59
|
+
if (type === 'relation' || type === 'potentialMatch') {
|
|
60
|
+
(relatedObjectUris || []).forEach(function (uri) {
|
|
61
|
+
if (uri !== currentEntityUri && mdm_sdk_1.isEntityUri(uri) && !entitiesMap[uri]) {
|
|
62
|
+
entitiesUris.push(uri);
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
return entitiesUris;
|
|
67
|
+
}, []), ramda_1.uniq)(comments || []);
|
|
68
|
+
if (uniqEntitiesUris.length) {
|
|
69
|
+
getEntities(uniqEntitiesUris)
|
|
70
|
+
.then(function (results) {
|
|
71
|
+
var getNotFoundUris = ramda_1.pipe(ramda_1.map(ramda_1.prop('uri')), ramda_1.difference(uniqEntitiesUris));
|
|
72
|
+
var notFoundEntities = getNotFoundUris(results);
|
|
73
|
+
return addNotFoundEntities(notFoundEntities, results);
|
|
74
|
+
})
|
|
75
|
+
.then(function (results) {
|
|
76
|
+
setEntitiesMap(function (prevEntitiesMap) {
|
|
77
|
+
return results.reduce(function (entities, entity) {
|
|
78
|
+
entities[entity.uri] = entity;
|
|
79
|
+
return entities;
|
|
80
|
+
}, __assign({}, prevEntitiesMap));
|
|
81
|
+
});
|
|
82
|
+
})
|
|
83
|
+
.catch(function () { });
|
|
84
|
+
}
|
|
85
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
86
|
+
}, [getEntities, addNotFoundEntities, comments, currentEntityUri]);
|
|
87
|
+
return entitiesMap;
|
|
88
|
+
};
|
|
89
|
+
exports.useCommentsEntitiesMap = useCommentsEntitiesMap;
|
|
@@ -1,3 +1,14 @@
|
|
|
1
|
+
var __assign = (this && this.__assign) || function () {
|
|
2
|
+
__assign = Object.assign || function(t) {
|
|
3
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
4
|
+
s = arguments[i];
|
|
5
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
6
|
+
t[p] = s[p];
|
|
7
|
+
}
|
|
8
|
+
return t;
|
|
9
|
+
};
|
|
10
|
+
return __assign.apply(this, arguments);
|
|
11
|
+
};
|
|
1
12
|
import React, { useContext } from 'react';
|
|
2
13
|
import { useSelector } from 'react-redux';
|
|
3
14
|
import i18n from 'ui-i18n';
|
|
@@ -19,7 +30,7 @@ export var CommentTarget = function (_a) {
|
|
|
19
30
|
var metadata = useSelector(mdm.selectors.getMetadata);
|
|
20
31
|
var entitiesMap = useContext(EntitiesMapContext);
|
|
21
32
|
var getContent = function () {
|
|
22
|
-
var _a
|
|
33
|
+
var _a;
|
|
23
34
|
switch (comment.objectType) {
|
|
24
35
|
case CollaborationObjectTypes.ENTITY_ATTRIBUTE: {
|
|
25
36
|
var attributeTypeUri = getAttributeTypeUriByValueUri(comment.objectId, entity.type);
|
|
@@ -43,10 +54,7 @@ export var CommentTarget = function (_a) {
|
|
|
43
54
|
}
|
|
44
55
|
case CollaborationObjectTypes.RELATION: {
|
|
45
56
|
var relatedEntityUri = getRelatedEntityUri(comment, entity.uri);
|
|
46
|
-
var relatedEntity = {
|
|
47
|
-
uri: relatedEntityUri,
|
|
48
|
-
label: (_a = entitiesMap[relatedEntityUri]) === null || _a === void 0 ? void 0 : _a.label
|
|
49
|
-
};
|
|
57
|
+
var relatedEntity = __assign(__assign({}, (entitiesMap[relatedEntityUri] || {})), { uri: relatedEntityUri });
|
|
50
58
|
return (React.createElement(React.Fragment, null,
|
|
51
59
|
React.createElement(Typography, { className: styles.title }, i18n.text('Selected relation:')),
|
|
52
60
|
React.createElement(Typography, { className: styles.label },
|
|
@@ -60,7 +68,7 @@ export var CommentTarget = function (_a) {
|
|
|
60
68
|
var relatedEntityUri = getRelatedEntityUri(comment, entity.uri);
|
|
61
69
|
var relatedEntity = {
|
|
62
70
|
uri: relatedEntityUri,
|
|
63
|
-
label: (
|
|
71
|
+
label: (_a = entitiesMap[relatedEntityUri]) === null || _a === void 0 ? void 0 : _a.label
|
|
64
72
|
};
|
|
65
73
|
return (React.createElement(React.Fragment, null,
|
|
66
74
|
React.createElement(Typography, { className: styles.title }, i18n.text('Selected potential match:')),
|
package/esm/hooks/index.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ export { useAPI, CustomAction } from './useAPI';
|
|
|
3
3
|
export type { CustomActionTask } from './useAPI';
|
|
4
4
|
export { useAsyncMount } from './useAsyncMount';
|
|
5
5
|
export { useCollaboration } from './useCollaboration';
|
|
6
|
+
export { useCommentsEntitiesMap } from './useCommentsEntitiesMap';
|
|
6
7
|
export { useDidUpdateEffect } from './useDidUpdateEffect';
|
|
7
8
|
export { usePrevious } from './usePrevious';
|
|
8
9
|
export { useRelationTypeSelector } from './useRelationTypeSelector';
|
package/esm/hooks/index.js
CHANGED
|
@@ -2,6 +2,7 @@ export { useActions } from './useActions';
|
|
|
2
2
|
export { useAPI, CustomAction } from './useAPI';
|
|
3
3
|
export { useAsyncMount } from './useAsyncMount';
|
|
4
4
|
export { useCollaboration } from './useCollaboration';
|
|
5
|
+
export { useCommentsEntitiesMap } from './useCommentsEntitiesMap';
|
|
5
6
|
export { useDidUpdateEffect } from './useDidUpdateEffect';
|
|
6
7
|
export { usePrevious } from './usePrevious';
|
|
7
8
|
export { useRelationTypeSelector } from './useRelationTypeSelector';
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
var __assign = (this && this.__assign) || function () {
|
|
2
|
+
__assign = Object.assign || function(t) {
|
|
3
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
4
|
+
s = arguments[i];
|
|
5
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
6
|
+
t[p] = s[p];
|
|
7
|
+
}
|
|
8
|
+
return t;
|
|
9
|
+
};
|
|
10
|
+
return __assign.apply(this, arguments);
|
|
11
|
+
};
|
|
12
|
+
import { useCallback, useEffect, useState } from 'react';
|
|
13
|
+
import { concat, difference, isEmpty, map, pipe, prop, reduce, reject, uniq } from 'ramda';
|
|
14
|
+
import { useSelector } from 'react-redux';
|
|
15
|
+
import mdm from '@reltio/mdm-module';
|
|
16
|
+
import { ActivityFilters, FilterOptions, getFilteredEntities, isEntityUri, getEntity } from '@reltio/mdm-sdk';
|
|
17
|
+
import { useSafePromise } from './useSafePromise';
|
|
18
|
+
var SELECT_OPTION = 'uri,label,type';
|
|
19
|
+
export var useCommentsEntitiesMap = function (comments) {
|
|
20
|
+
var safePromise = useSafePromise();
|
|
21
|
+
var currentEntityUri = useSelector(mdm.selectors.getEntityUriWithDataTenant);
|
|
22
|
+
var _a = useState({}), entitiesMap = _a[0], setEntitiesMap = _a[1];
|
|
23
|
+
var getEntities = useCallback(function (entitiesUris) {
|
|
24
|
+
var requestFilters = [
|
|
25
|
+
{
|
|
26
|
+
filter: FilterOptions.EQUALS,
|
|
27
|
+
fieldName: 'uri',
|
|
28
|
+
values: entitiesUris
|
|
29
|
+
}
|
|
30
|
+
];
|
|
31
|
+
var requestOptions = {
|
|
32
|
+
max: entitiesUris.length,
|
|
33
|
+
activeness: ActivityFilters.ALL,
|
|
34
|
+
select: 'uri,label,type'
|
|
35
|
+
};
|
|
36
|
+
return safePromise(getFilteredEntities(requestFilters, requestOptions));
|
|
37
|
+
}, [safePromise]);
|
|
38
|
+
var getNotFoundEntity = function (entityUri) {
|
|
39
|
+
return getEntity(entityUri, { options: SELECT_OPTION })
|
|
40
|
+
.then(function (entity) { return ({
|
|
41
|
+
uri: entityUri,
|
|
42
|
+
label: entity.label,
|
|
43
|
+
type: entity.type
|
|
44
|
+
}); })
|
|
45
|
+
.catch(function () { return ({}); });
|
|
46
|
+
};
|
|
47
|
+
var addNotFoundEntities = useCallback(function (entitiesUris, entities) {
|
|
48
|
+
return safePromise(Promise.all((entitiesUris || []).map(getNotFoundEntity))).then(pipe(reject(isEmpty), concat(entities)));
|
|
49
|
+
}, [safePromise]);
|
|
50
|
+
useEffect(function () {
|
|
51
|
+
var uniqEntitiesUris = pipe(reduce(function (entitiesUris, comment) {
|
|
52
|
+
var type = comment.objectType, relatedObjectUris = comment.relatedObjectUris;
|
|
53
|
+
if (type === 'relation' || type === 'potentialMatch') {
|
|
54
|
+
(relatedObjectUris || []).forEach(function (uri) {
|
|
55
|
+
if (uri !== currentEntityUri && isEntityUri(uri) && !entitiesMap[uri]) {
|
|
56
|
+
entitiesUris.push(uri);
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
return entitiesUris;
|
|
61
|
+
}, []), uniq)(comments || []);
|
|
62
|
+
if (uniqEntitiesUris.length) {
|
|
63
|
+
getEntities(uniqEntitiesUris)
|
|
64
|
+
.then(function (results) {
|
|
65
|
+
var getNotFoundUris = pipe(map(prop('uri')), difference(uniqEntitiesUris));
|
|
66
|
+
var notFoundEntities = getNotFoundUris(results);
|
|
67
|
+
return addNotFoundEntities(notFoundEntities, results);
|
|
68
|
+
})
|
|
69
|
+
.then(function (results) {
|
|
70
|
+
setEntitiesMap(function (prevEntitiesMap) {
|
|
71
|
+
return results.reduce(function (entities, entity) {
|
|
72
|
+
entities[entity.uri] = entity;
|
|
73
|
+
return entities;
|
|
74
|
+
}, __assign({}, prevEntitiesMap));
|
|
75
|
+
});
|
|
76
|
+
})
|
|
77
|
+
.catch(function () { });
|
|
78
|
+
}
|
|
79
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
80
|
+
}, [getEntities, addNotFoundEntities, comments, currentEntityUri]);
|
|
81
|
+
return entitiesMap;
|
|
82
|
+
};
|
package/package.json
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@reltio/components",
|
|
3
|
-
"version": "1.4.
|
|
3
|
+
"version": "1.4.1106",
|
|
4
4
|
"license": "SEE LICENSE IN LICENSE FILE",
|
|
5
5
|
"main": "./cjs/index.js",
|
|
6
6
|
"module": "./esm/index.js",
|
|
7
7
|
"dependencies": {
|
|
8
8
|
"@date-io/moment": "^1.3.5",
|
|
9
9
|
"@react-google-maps/api": "2.7.0",
|
|
10
|
-
"@reltio/mdm-module": "^1.4.
|
|
11
|
-
"@reltio/mdm-sdk": "^1.4.
|
|
10
|
+
"@reltio/mdm-module": "^1.4.1106",
|
|
11
|
+
"@reltio/mdm-sdk": "^1.4.1106",
|
|
12
12
|
"classnames": "^2.2.5",
|
|
13
13
|
"d3-cloud": "^1.2.5",
|
|
14
14
|
"d3-geo": "^2.0.1",
|