dotdata_widgets 0.1.4 → 0.1.6

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 (47) hide show
  1. package/css/widget.css +0 -1
  2. package/dist/index.js +4 -4
  3. package/lib/components/accordion/Accordion.js +6 -7
  4. package/lib/feature/feature-explanation/FeatureExplanation.js +7 -3
  5. package/lib/feature/feature-explanation/components/ColoredExplanationBlock.js +1 -7
  6. package/lib/feature/feature-explanation/components/ColumnExplanationBlock.js +1 -2
  7. package/lib/feature/feature-explanation/components/DataSlotExplanationBlock.js +1 -2
  8. package/lib/feature/feature-explanation/components/TextExplanationBlock.js +3 -1
  9. package/lib/feature/feature-likes/feature-likes.js +20 -14
  10. package/lib/feature-descriptor/domains-descriptions-tree/components/column-tree-item.js +16 -0
  11. package/lib/feature-descriptor/domains-descriptions-tree/components/descriptions-tree-item.js +51 -0
  12. package/lib/feature-descriptor/domains-descriptions-tree/components/index.js +18 -0
  13. package/lib/feature-descriptor/domains-descriptions-tree/components/tree-item-label.js +48 -0
  14. package/lib/feature-descriptor/domains-descriptions-tree/components/type-tree-item.js +19 -0
  15. package/lib/feature-descriptor/domains-descriptions-tree/config/index.js +10 -0
  16. package/lib/feature-descriptor/domains-descriptions-tree/context/domains-descriptions-selection-context.js +54 -0
  17. package/lib/feature-descriptor/domains-descriptions-tree/context/domains-descriptions-tree-config-context.js +42 -0
  18. package/lib/feature-descriptor/domains-descriptions-tree/context/domains-descriptions-tree-item-selection-context.js +56 -0
  19. package/lib/feature-descriptor/domains-descriptions-tree/context/index.js +20 -0
  20. package/lib/feature-descriptor/domains-descriptions-tree/domains-descriptions-tree.js +44 -0
  21. package/lib/feature-descriptor/domains-descriptions-tree/index.js +21 -0
  22. package/lib/feature-descriptor/domains-descriptions-tree/models/domains-descriptions-tree.model.js +37 -0
  23. package/lib/feature-descriptor/domains-descriptions-tree/models/index.js +18 -0
  24. package/lib/feature-descriptor/domains-descriptions-tree/utils/create-domain-predicate.js +16 -0
  25. package/lib/feature-descriptor/domains-descriptions-tree/utils/filter-domains-descriptions-tree.js +23 -0
  26. package/lib/feature-descriptor/domains-descriptions-tree/utils/index.js +19 -0
  27. package/lib/feature-descriptor/domains-descriptors-tree/config/index.js +2 -0
  28. package/lib/feature-descriptor/domains-descriptors-tree/context/domains-descriptions-tree-config-context.js +43 -0
  29. package/lib/feature-descriptor/domains-descriptors-tree/context/domains-descriptions-tree-context-provider.js +53 -0
  30. package/lib/feature-descriptor/domains-descriptors-tree/context/index.js +1 -0
  31. package/lib/models/column/field.js +3 -0
  32. package/lib/models/feature-descriptor/fd_data/aggregation.js +42 -0
  33. package/lib/models/feature-descriptor/fd_data/filter.js +7 -0
  34. package/lib/models/feature-descriptor/feature-descriptor.js +9 -1
  35. package/lib/models/feature-descriptor/index.js +2 -0
  36. package/lib/models/feature-descriptor-domain/fd-domains-description.js +12 -0
  37. package/lib/utils/transducer.js +16 -0
  38. package/lib/widgets/FeatureSpaceWidget.js +3 -2
  39. package/lib/widgets/feature-leaderboard/FeatureLeaderboardOverview.js +12 -4
  40. package/lib/widgets/feature-leaderboard/FeatureLeaderboardView.js +18 -9
  41. package/lib/widgets/feature-leaderboard/components/leaderboard-feature-likes.js +3 -3
  42. package/lib/widgets/feature-leaderboard/leaderboard-entry/FeatureLeaderboardEntry.js +1 -4
  43. package/lib/widgets/feature-leaderboard/leaderboard-entry/FeatureLeaderboardEntryRow.js +2 -8
  44. package/lib/widgets/feature-leaderboard/leaderboard-overview/overview-slider.js +2 -2
  45. package/lib/widgets/feature-space/FeatureDomainsDescriptions.js +9 -17
  46. package/lib/widgets/feature-space/FeatureSpaceView.js +17 -16
  47. package/package.json +1 -1
@@ -31,7 +31,7 @@ exports.AccordionHeader = AccordionHeader;
31
31
  // eslint-disable-next-line @typescript-eslint/ban-types
32
32
  const AccordionDetails = ({ children, }) => react_1.default.createElement(react_1.default.Fragment, null, children);
33
33
  exports.AccordionDetails = AccordionDetails;
34
- exports.Accordion = (0, react_1.forwardRef)(({ children, expandedDetailsStyle, collapsedDetailsStyle, expandedHeaderStyle, collapsedHeaderStyle, toggleStyle, initialState, }, ref) => {
34
+ exports.Accordion = (0, react_1.forwardRef)(({ children, initialState, className }, ref) => {
35
35
  const [isExpanded, setIsExpanded] = (0, react_1.useState)(() => initialState ?? false);
36
36
  const components = react_1.default.Children.toArray(children).filter(react_1.default.isValidElement);
37
37
  const Header = components.find(child => child?.type === exports.AccordionHeader);
@@ -41,12 +41,11 @@ exports.Accordion = (0, react_1.forwardRef)(({ children, expandedDetailsStyle, c
41
41
  setIsExpanded(false);
42
42
  },
43
43
  }));
44
- return (react_1.default.createElement("div", { className: `dotdata-accordion ${isExpanded
45
- ? 'dotdata-accordion-expanded'
46
- : 'dotdata-accordion-collapsed'}` },
47
- react_1.default.createElement("div", { style: isExpanded ? expandedHeaderStyle : collapsedHeaderStyle, className: "dotdata-accordion-header" },
48
- react_1.default.createElement("div", { className: `dotdata-accordion-header-toggle ${isExpanded ? 'expanded' : ''}`, style: toggleStyle, onClick: () => setIsExpanded(!isExpanded) }, "\u25B6"),
44
+ const accordionClasses = (defaultClassNames) => `${defaultClassNames} ${isExpanded ? 'expanded' : 'collapsed'}`;
45
+ return (react_1.default.createElement("div", { className: accordionClasses(`dotdata-accordion ${className ?? ''}`) },
46
+ react_1.default.createElement("div", { className: accordionClasses('dotdata-accordion-header') },
47
+ react_1.default.createElement("div", { className: accordionClasses('dotdata-accordion-header-toggle'), onClick: () => setIsExpanded(!isExpanded) }, "\u25B6"),
49
48
  Header),
50
- isExpanded && (react_1.default.createElement("div", { style: isExpanded ? expandedDetailsStyle : collapsedDetailsStyle, className: "dotdata-accordion-details" }, Details))));
49
+ isExpanded && (react_1.default.createElement("div", { className: accordionClasses('dotdata-accordion-details') }, Details))));
51
50
  });
52
51
  //# sourceMappingURL=Accordion.js.map
@@ -13,8 +13,8 @@ const DataSlotExplanationBlock_1 = require("./components/DataSlotExplanationBloc
13
13
  const TopicExplanationBlock_1 = require("./components/TopicExplanationBlock");
14
14
  const TextWithDataSlotContextExplanationBlock_1 = require("./components/TextWithDataSlotContextExplanationBlock");
15
15
  const UnknownExplanationBlock_1 = require("./components/UnknownExplanationBlock");
16
- const FeatureExplanation = ({ explanationBlocks, }) => {
17
- return (react_1.default.createElement("div", { style: { display: 'flex' } }, explanationBlocks.map(block => {
16
+ const FeatureExplanationInternal = ({ explanationBlocks, }) => {
17
+ return (react_1.default.createElement(react_1.default.Fragment, null, explanationBlocks.map(block => {
18
18
  if (feature_explanation_1.FeatureExplanationBlock.isTextExplanationBlock(block)) {
19
19
  return react_1.default.createElement(TextExplanationBlock_1.TextExplanationBlock, { ...block });
20
20
  }
@@ -34,7 +34,7 @@ const FeatureExplanation = ({ explanationBlocks, }) => {
34
34
  return react_1.default.createElement(TopicExplanationBlock_1.TopicExplanationBlock, { ...block });
35
35
  }
36
36
  else if (feature_explanation_1.FeatureExplanationBlock.isOperatorExplanationBlock(block)) {
37
- return (react_1.default.createElement(exports.FeatureExplanation, { explanationBlocks: block.tokens.map(token => ({
37
+ return (react_1.default.createElement(FeatureExplanationInternal, { explanationBlocks: block.tokens.map(token => ({
38
38
  ...token,
39
39
  pathType: block.type,
40
40
  })) }));
@@ -44,5 +44,9 @@ const FeatureExplanation = ({ explanationBlocks, }) => {
44
44
  }
45
45
  })));
46
46
  };
47
+ const FeatureExplanation = ({ explanationBlocks, }) => {
48
+ return (react_1.default.createElement("span", { style: { whiteSpace: 'nowrap' } },
49
+ react_1.default.createElement(FeatureExplanationInternal, { explanationBlocks: explanationBlocks })));
50
+ };
47
51
  exports.FeatureExplanation = FeatureExplanation;
48
52
  //# sourceMappingURL=FeatureExplanation.js.map
@@ -24,13 +24,7 @@ const ColoredExplanationBlock = ({ block, children }) => {
24
24
  fontWeight = '500';
25
25
  }
26
26
  }
27
- return (react_1.default.createElement("span", { style: {
28
- color: color,
29
- fontWeight,
30
- display: 'inline-block',
31
- wordBreak: 'break-word',
32
- whiteSpace: 'pre',
33
- } }, children));
27
+ return react_1.default.createElement("span", { style: { color, fontWeight } }, children);
34
28
  };
35
29
  exports.ColoredExplanationBlock = ColoredExplanationBlock;
36
30
  //# sourceMappingURL=ColoredExplanationBlock.js.map
@@ -6,7 +6,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.ColumnExplanationBlock = void 0;
7
7
  const react_1 = __importDefault(require("react"));
8
8
  const ColoredExplanationBlock_1 = require("./ColoredExplanationBlock");
9
- const ColumnExplanationBlock = block => (react_1.default.createElement(ColoredExplanationBlock_1.ColoredExplanationBlock, { block: block },
10
- react_1.default.createElement("span", { className: "column-name" }, block.columnName)));
9
+ const ColumnExplanationBlock = block => (react_1.default.createElement(ColoredExplanationBlock_1.ColoredExplanationBlock, { block: block }, block.columnName));
11
10
  exports.ColumnExplanationBlock = ColumnExplanationBlock;
12
11
  //# sourceMappingURL=ColumnExplanationBlock.js.map
@@ -6,7 +6,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.DataSlotExplanationBlock = void 0;
7
7
  const react_1 = __importDefault(require("react"));
8
8
  const ColoredExplanationBlock_1 = require("./ColoredExplanationBlock");
9
- const DataSlotExplanationBlock = block => (react_1.default.createElement(ColoredExplanationBlock_1.ColoredExplanationBlock, { block: block },
10
- react_1.default.createElement("span", { className: "sa-data-slot-name" }, block.dataSlotName)));
9
+ const DataSlotExplanationBlock = block => (react_1.default.createElement(ColoredExplanationBlock_1.ColoredExplanationBlock, { block: block }, block.dataSlotName));
11
10
  exports.DataSlotExplanationBlock = DataSlotExplanationBlock;
12
11
  //# sourceMappingURL=DataSlotExplanationBlock.js.map
@@ -5,6 +5,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.TextExplanationBlock = void 0;
7
7
  const react_1 = __importDefault(require("react"));
8
- const TextExplanationBlock = ({ text, }) => react_1.default.createElement("span", { style: { whiteSpace: 'pre' } }, text);
8
+ const TextExplanationBlock = ({ text, }) => {
9
+ return react_1.default.createElement(react_1.default.Fragment, null, text);
10
+ };
9
11
  exports.TextExplanationBlock = TextExplanationBlock;
10
12
  //# sourceMappingURL=TextExplanationBlock.js.map
@@ -5,34 +5,40 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.FeatureLikes = exports.FeatureLike = void 0;
7
7
  const react_1 = __importDefault(require("react"));
8
+ const ThumbUpAlt_1 = __importDefault(require("@mui/icons-material/ThumbUpAlt"));
9
+ const ThumbDownAlt_1 = __importDefault(require("@mui/icons-material/ThumbDownAlt"));
8
10
  const ThumbUpOffAlt_1 = __importDefault(require("@mui/icons-material/ThumbUpOffAlt"));
9
11
  const ThumbDownOffAlt_1 = __importDefault(require("@mui/icons-material/ThumbDownOffAlt"));
12
+ const material_1 = require("@mui/material");
10
13
  var FeatureLike;
11
14
  (function (FeatureLike) {
12
15
  FeatureLike[FeatureLike["Neutral"] = 0] = "Neutral";
13
16
  FeatureLike[FeatureLike["Liked"] = 1] = "Liked";
14
17
  FeatureLike[FeatureLike["Disliked"] = 2] = "Disliked";
15
18
  })(FeatureLike = exports.FeatureLike || (exports.FeatureLike = {}));
19
+ const neutralStyle = {
20
+ cursor: 'pointer',
21
+ fontSize: '18px',
22
+ color: 'var( --c-grey-600)',
23
+ };
24
+ const likedStyle = {
25
+ cursor: 'pointer',
26
+ fontSize: '18px',
27
+ color: 'var( --c-green-600)',
28
+ };
29
+ const dislikedStyle = {
30
+ cursor: 'pointer',
31
+ fontSize: '18px',
32
+ color: 'var(--c-red-600)',
33
+ };
16
34
  const FeatureLikes = ({ liked, toggleIsLiked, toggleIsDisliked }) => {
17
35
  return (react_1.default.createElement("span", { style: {
18
36
  display: 'flex',
19
37
  alignItems: 'center',
20
38
  justifyContent: 'center',
21
39
  } },
22
- react_1.default.createElement(ThumbUpOffAlt_1.default, { onClick: toggleIsLiked, sx: {
23
- cursor: 'pointer',
24
- fontSize: '18px',
25
- color: liked === FeatureLike.Liked
26
- ? 'var( --c-green-600)'
27
- : 'var( --c-grey-600)',
28
- } }),
29
- react_1.default.createElement(ThumbDownOffAlt_1.default, { onClick: toggleIsDisliked, sx: {
30
- cursor: 'pointer',
31
- fontSize: '18px',
32
- color: liked === FeatureLike.Disliked
33
- ? 'var(--c-red-600)'
34
- : 'var( --c-grey-600)',
35
- } })));
40
+ react_1.default.createElement(material_1.IconButton, { color: "primary", size: "small", onClick: toggleIsLiked }, [FeatureLike.Neutral, FeatureLike.Disliked].includes(liked) ? (react_1.default.createElement(ThumbUpOffAlt_1.default, { sx: neutralStyle })) : (react_1.default.createElement(ThumbUpAlt_1.default, { sx: likedStyle }))),
41
+ react_1.default.createElement(material_1.IconButton, { color: "primary", size: "small", onClick: toggleIsDisliked }, [FeatureLike.Neutral, FeatureLike.Liked].includes(liked) ? (react_1.default.createElement(ThumbDownOffAlt_1.default, { sx: neutralStyle })) : (react_1.default.createElement(ThumbDownAlt_1.default, { sx: dislikedStyle })))));
36
42
  };
37
43
  exports.FeatureLikes = FeatureLikes;
38
44
  //# sourceMappingURL=feature-likes.js.map
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ColumnTreeItem = void 0;
7
+ const react_1 = __importDefault(require("react"));
8
+ const TreeItem_1 = __importDefault(require("@mui/lab/TreeItem"));
9
+ const descriptions_tree_item_1 = require("./descriptions-tree-item");
10
+ const tree_item_label_1 = require("./tree-item-label");
11
+ const ColumnTreeItem = ({ column }) => {
12
+ return column.descriptions.length === 1 ? (react_1.default.createElement(descriptions_tree_item_1.DescriptionsTreeItem, { descriptions: column.descriptions })) : (react_1.default.createElement(TreeItem_1.default, { nodeId: column.nodeId, label: react_1.default.createElement(tree_item_label_1.TreeItemLabel, { label: column.summary, nodeId: column.nodeId, managedDescriptions: column.descriptions }) },
13
+ react_1.default.createElement(descriptions_tree_item_1.DescriptionsTreeItem, { descriptions: column.descriptions })));
14
+ };
15
+ exports.ColumnTreeItem = ColumnTreeItem;
16
+ //# sourceMappingURL=column-tree-item.js.map
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.DescriptionsTreeItem = void 0;
7
+ const react_1 = __importDefault(require("react"));
8
+ const react_virtual_1 = require("@tanstack/react-virtual");
9
+ const material_1 = require("@mui/material");
10
+ const tree_item_label_1 = require("./tree-item-label");
11
+ const feature_descriptor_domain_1 = require("../../../models/feature-descriptor-domain");
12
+ const listLeftIndentation = '31px';
13
+ const DescriptionsVirtualList = ({ descriptions, }) => {
14
+ const parentRef = react_1.default.useRef(null);
15
+ const rowVirtualizer = (0, react_virtual_1.useVirtualizer)({
16
+ count: descriptions.length,
17
+ getScrollElement: () => parentRef.current,
18
+ estimateSize: () => 25,
19
+ overscan: 5,
20
+ });
21
+ return (react_1.default.createElement("div", { ref: parentRef, style: {
22
+ height: `${Math.min(25 * descriptions.length, 500)}px`,
23
+ overflowY: 'auto',
24
+ overflowX: 'hidden',
25
+ } },
26
+ react_1.default.createElement("div", { style: {
27
+ height: `${rowVirtualizer.getTotalSize()}px`,
28
+ position: 'relative',
29
+ } }, rowVirtualizer.getVirtualItems().map(virtualRow => (react_1.default.createElement("div", { key: virtualRow.index, style: {
30
+ position: 'absolute',
31
+ top: 0,
32
+ right: 0,
33
+ left: listLeftIndentation,
34
+ height: `${virtualRow.size}px`,
35
+ transform: `translateY(${virtualRow.start}px)`,
36
+ } },
37
+ react_1.default.createElement(tree_item_label_1.TreeItemLabel, { label: descriptions[virtualRow.index].description, nodeId: descriptions[virtualRow.index].nodeId, managedDescriptions: [descriptions[virtualRow.index]] })))))));
38
+ };
39
+ const DescriptionsList = ({ descriptions }) => {
40
+ return (react_1.default.createElement(react_1.default.Fragment, null, descriptions.map(description => (react_1.default.createElement(tree_item_label_1.TreeItemLabel, { key: feature_descriptor_domain_1.DomainsDescriptionId.toString(description.id), label: description.description, nodeId: description.nodeId, managedDescriptions: [description] })))));
41
+ };
42
+ const DescriptionsTreeItem = ({ descriptions, }) => {
43
+ const [isVirtualListVisible, setIsVirtualListVisible] = react_1.default.useState(() => false);
44
+ const [limitedDescriptions] = react_1.default.useState(() => descriptions.length < 6 ? descriptions : descriptions.slice(0, 3));
45
+ const isWithShowMore = descriptions.length >= 6;
46
+ return isVirtualListVisible ? (react_1.default.createElement(DescriptionsVirtualList, { descriptions: descriptions })) : (react_1.default.createElement("div", { style: { marginLeft: listLeftIndentation } },
47
+ react_1.default.createElement(DescriptionsList, { descriptions: limitedDescriptions }),
48
+ isWithShowMore ? (react_1.default.createElement(material_1.Button, { sx: { textTransform: 'lowercase', display: 'block' }, size: "small", onClick: () => setIsVirtualListVisible(true) }, "more")) : null));
49
+ };
50
+ exports.DescriptionsTreeItem = DescriptionsTreeItem;
51
+ //# sourceMappingURL=descriptions-tree-item.js.map
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./type-tree-item"), exports);
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.TreeItemLabel = void 0;
7
+ const react_1 = __importDefault(require("react"));
8
+ const material_1 = require("@mui/material");
9
+ const _utils_1 = require("../../../utils");
10
+ const feature_descriptor_domain_1 = require("../../../models/feature-descriptor-domain");
11
+ const context_1 = require("../context");
12
+ var SelectionIndicator;
13
+ (function (SelectionIndicator) {
14
+ SelectionIndicator["Checked"] = "checked";
15
+ SelectionIndicator["Unchecked"] = "unchecked";
16
+ SelectionIndicator["Indeterminate"] = "indeterminate";
17
+ })(SelectionIndicator || (SelectionIndicator = {}));
18
+ const TreeItemLabel = props => {
19
+ const { selectable } = (0, context_1.useDomainsDescriptionsTreeConfig)();
20
+ const [selectedTreeItems, { toggleTreeItemSelection }] = (0, context_1.useDomainsDescriptionsTreeItemSelection)();
21
+ const [selectedDomainDescriptionsIds, { toggleSelection }] = (0, context_1.useDomainsDescriptionsSelectionContext)();
22
+ const managedDescriptionIds = react_1.default.useMemo(() => feature_descriptor_domain_1.DomainsDescriptionId.listToMap(props.managedDescriptions.map((0, _utils_1.extractProperty)('id'))), []);
23
+ const checked = react_1.default.useMemo(() => getSelectionState(managedDescriptionIds, selectedDomainDescriptionsIds), [/*props.managedDescriptions,*/ selectedDomainDescriptionsIds]);
24
+ function isSelected() {
25
+ return (0, _utils_1.isSet)(selectedTreeItems[props.nodeId]);
26
+ }
27
+ return (react_1.default.createElement(material_1.FormControlLabel, { className: `text-ellipsis selection-indicator ${isSelected() ? 'selected' : ''}`, sx: { display: 'block', paddingLeft: selectable ? 'initial' : '10px' }, control: selectable ? (react_1.default.createElement(material_1.Checkbox, { sx: { paddingBlock: '2px' }, checked: checked === SelectionIndicator.Checked, indeterminate: checked === SelectionIndicator.Indeterminate, onClick: event => {
28
+ event.stopPropagation();
29
+ const checked = event.target.checked;
30
+ toggleSelection(checked, props.managedDescriptions.map((0, _utils_1.extractProperty)('id')));
31
+ } })) : (react_1.default.createElement(react_1.default.Fragment, null)), label: props.label, onClick: event => {
32
+ toggleTreeItemSelection(props.nodeId, props.managedDescriptions.flatMap((0, _utils_1.extractProperty)('domains')));
33
+ event.stopPropagation();
34
+ event.preventDefault();
35
+ } }));
36
+ };
37
+ exports.TreeItemLabel = TreeItemLabel;
38
+ function getSelectionState(managedDescriptionIds, selectedIds) {
39
+ const managedNotSelectedIds = Array.from(managedDescriptionIds.keys()).filter(id => !selectedIds.has(id)).length;
40
+ const areAllChecked = managedNotSelectedIds === 0;
41
+ const areAllUnselected = managedNotSelectedIds === managedDescriptionIds.size;
42
+ return areAllChecked
43
+ ? SelectionIndicator.Checked
44
+ : areAllUnselected
45
+ ? SelectionIndicator.Unchecked
46
+ : SelectionIndicator.Indeterminate;
47
+ }
48
+ //# sourceMappingURL=tree-item-label.js.map
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.TypeTreeItem = void 0;
7
+ const react_1 = __importDefault(require("react"));
8
+ const TreeItem_1 = __importDefault(require("@mui/lab/TreeItem"));
9
+ const _utils_1 = require("../../../utils");
10
+ const column_tree_item_1 = require("./column-tree-item");
11
+ const tree_item_label_1 = require("./tree-item-label");
12
+ const TypeTreeItem = ({ type }) => {
13
+ return type.columns.length === 1 ? (react_1.default.createElement(column_tree_item_1.ColumnTreeItem, { column: type.columns[0] })) : (react_1.default.createElement(TreeItem_1.default, { nodeId: type.nodeId, classes: {
14
+ focused: 'tree-item-focused',
15
+ selected: 'tree-item-focused',
16
+ }, label: react_1.default.createElement(tree_item_label_1.TreeItemLabel, { label: type.summary, nodeId: type.nodeId, managedDescriptions: type.columns.flatMap((0, _utils_1.extractProperty)('descriptions')) }) }, type.columns.map((column, idx) => (react_1.default.createElement(column_tree_item_1.ColumnTreeItem, { key: column.nodeId, column: column })))));
17
+ };
18
+ exports.TypeTreeItem = TypeTreeItem;
19
+ //# sourceMappingURL=type-tree-item.js.map
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DomainsDescriptionsTreeConfig = void 0;
4
+ var DomainsDescriptionsTreeConfig;
5
+ (function (DomainsDescriptionsTreeConfig) {
6
+ DomainsDescriptionsTreeConfig.DEFAULT = {
7
+ selectable: true,
8
+ };
9
+ })(DomainsDescriptionsTreeConfig = exports.DomainsDescriptionsTreeConfig || (exports.DomainsDescriptionsTreeConfig = {}));
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.DomainsDescriptionsSelectionContextProvider = exports.useDomainsDescriptionsSelectionContext = exports.DomainsDescriptionsSelectionContext = void 0;
27
+ const React = __importStar(require("react"));
28
+ const feature_descriptor_domain_1 = require("../../../models/feature-descriptor-domain");
29
+ exports.DomainsDescriptionsSelectionContext = React.createContext(undefined);
30
+ function useDomainsDescriptionsSelectionContext() {
31
+ const context = React.useContext(exports.DomainsDescriptionsSelectionContext);
32
+ if (context === undefined) {
33
+ throw new Error('useDomainsDescriptionsSelectionContext must be used within a DomainsDescriptionsSelectionContext');
34
+ }
35
+ return context;
36
+ }
37
+ exports.useDomainsDescriptionsSelectionContext = useDomainsDescriptionsSelectionContext;
38
+ function DomainsDescriptionsSelectionContextProvider(props) {
39
+ const selectedDomainDescriptionsIds = React.useMemo(() => feature_descriptor_domain_1.DomainsDescriptionId.listToMap(props.selectedDomainDescriptionIds), [props.selectedDomainDescriptionIds]);
40
+ function toggleSelection(check, ids) {
41
+ ids.forEach(id => {
42
+ if (check) {
43
+ selectedDomainDescriptionsIds.set(feature_descriptor_domain_1.DomainsDescriptionId.toString(id), id);
44
+ }
45
+ else {
46
+ selectedDomainDescriptionsIds.delete(feature_descriptor_domain_1.DomainsDescriptionId.toString(id));
47
+ }
48
+ });
49
+ props.setSelectedDomainDescriptionIds(Array.from(selectedDomainDescriptionsIds.values()));
50
+ }
51
+ return (React.createElement(exports.DomainsDescriptionsSelectionContext.Provider, { value: [selectedDomainDescriptionsIds, { toggleSelection }], ...props }));
52
+ }
53
+ exports.DomainsDescriptionsSelectionContextProvider = DomainsDescriptionsSelectionContextProvider;
54
+ //# sourceMappingURL=domains-descriptions-selection-context.js.map
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.DomainsDescriptionsTreeConfigContextProvider = exports.useDomainsDescriptionsTreeConfig = exports.DomainsDescriptionsTreeConfigContext = void 0;
27
+ const React = __importStar(require("react"));
28
+ const config_1 = require("../config");
29
+ exports.DomainsDescriptionsTreeConfigContext = React.createContext(config_1.DomainsDescriptionsTreeConfig.DEFAULT);
30
+ function useDomainsDescriptionsTreeConfig() {
31
+ const context = React.useContext(exports.DomainsDescriptionsTreeConfigContext);
32
+ if (context === undefined) {
33
+ throw new Error('useDomainsDescriptionsTreeConfig must be used within a DomainsDescriptionsTreeConfigContext');
34
+ }
35
+ return context;
36
+ }
37
+ exports.useDomainsDescriptionsTreeConfig = useDomainsDescriptionsTreeConfig;
38
+ function DomainsDescriptionsTreeConfigContextProvider(props) {
39
+ return (React.createElement(exports.DomainsDescriptionsTreeConfigContext.Provider, { value: props.configuration ?? config_1.DomainsDescriptionsTreeConfig.DEFAULT, ...props }));
40
+ }
41
+ exports.DomainsDescriptionsTreeConfigContextProvider = DomainsDescriptionsTreeConfigContextProvider;
42
+ //# sourceMappingURL=domains-descriptions-tree-config-context.js.map
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.DomainsDescriptionsTreeItemSelectionContextProvider = exports.useDomainsDescriptionsTreeItemSelection = exports.DomainsDescriptionsTreeItemSelectionContext = void 0;
27
+ const lodash_1 = require("lodash");
28
+ const React = __importStar(require("react"));
29
+ const _utils_1 = require("../../../utils");
30
+ exports.DomainsDescriptionsTreeItemSelectionContext = React.createContext(undefined);
31
+ function useDomainsDescriptionsTreeItemSelection() {
32
+ const context = React.useContext(exports.DomainsDescriptionsTreeItemSelectionContext);
33
+ if (context === undefined) {
34
+ throw new Error('useDomainsDescriptionsTreeItemSelection must be used within a DomainsDescriptionsTreeItemSelectionContext');
35
+ }
36
+ return context;
37
+ }
38
+ exports.useDomainsDescriptionsTreeItemSelection = useDomainsDescriptionsTreeItemSelection;
39
+ function DomainsDescriptionsTreeItemSelectionContextProvider(props) {
40
+ const [selectedTreeItems, setSelectedTreeItems] = React.useState(() => ({}));
41
+ function toggleTreeItemSelection(nodeId, domains) {
42
+ if ((0, _utils_1.isSet)(selectedTreeItems[nodeId])) {
43
+ const { [nodeId]: _remove, ...rest } = selectedTreeItems;
44
+ setSelectedTreeItems(rest);
45
+ }
46
+ else {
47
+ setSelectedTreeItems({
48
+ ...selectedTreeItems,
49
+ [nodeId]: (0, lodash_1.uniqBy)(domains, JSON.stringify),
50
+ });
51
+ }
52
+ }
53
+ return (React.createElement(exports.DomainsDescriptionsTreeItemSelectionContext.Provider, { value: [selectedTreeItems, { toggleTreeItemSelection }], ...props }));
54
+ }
55
+ exports.DomainsDescriptionsTreeItemSelectionContextProvider = DomainsDescriptionsTreeItemSelectionContextProvider;
56
+ //# sourceMappingURL=domains-descriptions-tree-item-selection-context.js.map
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./domains-descriptions-tree-item-selection-context"), exports);
18
+ __exportStar(require("./domains-descriptions-tree-config-context"), exports);
19
+ __exportStar(require("./domains-descriptions-selection-context"), exports);
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.DomainsDescriptionsTree = exports.FeatureDomainDescriptionsTreeHeader = void 0;
7
+ const lodash_1 = require("lodash");
8
+ const react_1 = __importDefault(require("react"));
9
+ const TreeView_1 = __importDefault(require("@mui/lab/TreeView"));
10
+ const material_1 = require("@mui/material");
11
+ const UnfoldLess_1 = __importDefault(require("@mui/icons-material/UnfoldLess"));
12
+ const UnfoldMore_1 = __importDefault(require("@mui/icons-material/UnfoldMore"));
13
+ const ExpandMore_1 = __importDefault(require("@mui/icons-material/ExpandMore"));
14
+ const ChevronRight_1 = __importDefault(require("@mui/icons-material/ChevronRight"));
15
+ const _utils_1 = require("../../utils");
16
+ const components_1 = require("./components");
17
+ const ToggleIcon = (props) => props.allNodeIds.length === props.expandedNodes.length ? (react_1.default.createElement(UnfoldLess_1.default, { sx: { marginRight: '-10px' } })) : (react_1.default.createElement(UnfoldMore_1.default, { sx: { marginRight: '-10px' } }));
18
+ const FeatureDomainDescriptionsTreeHeader = (props) => react_1.default.createElement(react_1.default.Fragment, null, props.children);
19
+ exports.FeatureDomainDescriptionsTreeHeader = FeatureDomainDescriptionsTreeHeader;
20
+ const DomainsDescriptionsTree = ({ descriptionsTree, children }) => {
21
+ const [allNodeIds, setAllNodeIds] = react_1.default.useState(() => getAllNodeIds(descriptionsTree));
22
+ const [expandedNodes, setExpandedNodes] = react_1.default.useState(() => []);
23
+ react_1.default.useEffect(() => {
24
+ setAllNodeIds(getAllNodeIds(descriptionsTree));
25
+ }, [descriptionsTree]);
26
+ return (react_1.default.createElement("div", { className: "domains-descriptions-tree" },
27
+ react_1.default.createElement("div", { className: "domains-descriptions-tree-header" },
28
+ react_1.default.createElement(material_1.Button, { className: "toggle-all-nodes-btn", variant: "outlined", startIcon: react_1.default.createElement(ToggleIcon, { allNodeIds: allNodeIds, expandedNodes: expandedNodes }), onClick: () => setExpandedNodes((0, lodash_1.isEmpty)(expandedNodes) ? allNodeIds : []) }),
29
+ react_1.default.Children.toArray(children)
30
+ .filter(react_1.default.isValidElement)
31
+ .filter(child => child?.type === exports.FeatureDomainDescriptionsTreeHeader)),
32
+ react_1.default.createElement("div", null,
33
+ react_1.default.createElement(TreeView_1.default, { defaultCollapseIcon: react_1.default.createElement(ExpandMore_1.default, null), defaultExpandIcon: react_1.default.createElement(ChevronRight_1.default, null), disabledItemsFocusable: false, multiSelect: true, expanded: expandedNodes, onNodeToggle: (_, nodeIds) => setExpandedNodes(nodeIds) }, descriptionsTree.types.map(type => (react_1.default.createElement(components_1.TypeTreeItem, { key: type.nodeId, type: type })))))));
34
+ };
35
+ exports.DomainsDescriptionsTree = DomainsDescriptionsTree;
36
+ function getAllNodeIds(tree) {
37
+ return tree.types
38
+ .map(({ columns, nodeId }, typeIdx) => [
39
+ nodeId,
40
+ columns.map((0, _utils_1.extractProperty)('nodeId')),
41
+ ])
42
+ .flat(2);
43
+ }
44
+ //# sourceMappingURL=domains-descriptions-tree.js.map
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./domains-descriptions-tree"), exports);
18
+ __exportStar(require("./models"), exports);
19
+ __exportStar(require("./context"), exports);
20
+ __exportStar(require("./utils"), exports);
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DescriptionsTree = void 0;
4
+ const _utils_1 = require("../../../utils");
5
+ var DescriptionsTree;
6
+ (function (DescriptionsTree) {
7
+ function appendGroupId(groups, prefix) {
8
+ const id = DescriptionsTree.createGroupId(prefix);
9
+ return {
10
+ types: groups.types.map((type, typeIdx) => {
11
+ return {
12
+ nodeId: id({ typeIdx }),
13
+ summary: type.summary,
14
+ columns: type.columns.map((column, columnIdx) => ({
15
+ nodeId: id({ typeIdx, columnIdx }),
16
+ summary: column.summary,
17
+ descriptions: column.descriptions.map((description, descriptionIdx) => ({
18
+ ...description,
19
+ nodeId: id({ typeIdx, columnIdx, descriptionIdx }),
20
+ })),
21
+ })),
22
+ };
23
+ }),
24
+ };
25
+ }
26
+ DescriptionsTree.appendGroupId = appendGroupId;
27
+ function createGroupId(prefix) {
28
+ return (props) => [
29
+ (0, _utils_1.isSet)(prefix) && `${prefix}_`,
30
+ (0, _utils_1.isSet)(props.typeIdx) && `t${props.typeIdx}`,
31
+ (0, _utils_1.isSet)(props.columnIdx) && `c${props.columnIdx}`,
32
+ (0, _utils_1.isSet)(props.descriptionIdx) && `d${props.descriptionIdx}`,
33
+ ].join('');
34
+ }
35
+ DescriptionsTree.createGroupId = createGroupId;
36
+ })(DescriptionsTree = exports.DescriptionsTree || (exports.DescriptionsTree = {}));
37
+ //# sourceMappingURL=domains-descriptions-tree.model.js.map