@finos/legend-extension-dsl-data-space 10.4.252 → 10.4.254

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 (111) hide show
  1. package/lib/__lib__/DSL_DataSpace_LegendApplicationCommand.js +8 -8
  2. package/lib/__lib__/DSL_DataSpace_LegendApplicationCommand.js.map +1 -1
  3. package/lib/components/DSL_DataSpace_LegendApplicationPlugin.js +2 -2
  4. package/lib/components/DSL_DataSpace_LegendApplicationPlugin.js.map +1 -1
  5. package/lib/components/DataSpaceDataAccess.d.ts.map +1 -1
  6. package/lib/components/DataSpaceDataAccess.js +6 -2
  7. package/lib/components/DataSpaceDataAccess.js.map +1 -1
  8. package/lib/components/DataSpaceDescription.d.ts.map +1 -1
  9. package/lib/components/DataSpaceDescription.js +6 -2
  10. package/lib/components/DataSpaceDescription.js.map +1 -1
  11. package/lib/components/DataSpaceInfoPanel.js +1 -1
  12. package/lib/components/DataSpaceInfoPanel.js.map +1 -1
  13. package/lib/components/DataSpaceLegendAISchema.d.ts.map +1 -1
  14. package/lib/components/DataSpaceLegendAISchema.js +6 -1
  15. package/lib/components/DataSpaceLegendAISchema.js.map +1 -1
  16. package/lib/components/DataSpaceQuickStart.d.ts.map +1 -1
  17. package/lib/components/DataSpaceQuickStart.js +16 -7
  18. package/lib/components/DataSpaceQuickStart.js.map +1 -1
  19. package/lib/components/DataSpaceSupportPanel.d.ts.map +1 -1
  20. package/lib/components/DataSpaceSupportPanel.js +13 -1
  21. package/lib/components/DataSpaceSupportPanel.js.map +1 -1
  22. package/lib/components/DataSpaceViewer.js +2 -2
  23. package/lib/components/DataSpaceViewer.js.map +1 -1
  24. package/lib/components/DataSpaceWiki.d.ts.map +1 -1
  25. package/lib/components/DataSpaceWiki.js +2 -2
  26. package/lib/components/DataSpaceWiki.js.map +1 -1
  27. package/lib/components/query-builder/DataSpaceAdvancedSearchModal.js +2 -2
  28. package/lib/components/query-builder/DataSpaceAdvancedSearchModal.js.map +1 -1
  29. package/lib/components/query-builder/DataSpaceQueryBuilder.js +3 -3
  30. package/lib/components/query-builder/DataSpaceQueryBuilder.js.map +1 -1
  31. package/lib/graph/DSL_DataSpace_HashUtils.d.ts +4 -0
  32. package/lib/graph/DSL_DataSpace_HashUtils.d.ts.map +1 -1
  33. package/lib/graph/DSL_DataSpace_HashUtils.js +4 -0
  34. package/lib/graph/DSL_DataSpace_HashUtils.js.map +1 -1
  35. package/lib/graph/metamodel/pure/model/packageableElements/dataSpace/DSL_DataSpace_DataSpace.d.ts +26 -1
  36. package/lib/graph/metamodel/pure/model/packageableElements/dataSpace/DSL_DataSpace_DataSpace.d.ts.map +1 -1
  37. package/lib/graph/metamodel/pure/model/packageableElements/dataSpace/DSL_DataSpace_DataSpace.js +55 -0
  38. package/lib/graph/metamodel/pure/model/packageableElements/dataSpace/DSL_DataSpace_DataSpace.js.map +1 -1
  39. package/lib/graph-manager/action/changeDetection/DSL_DataSpace_ObserverHelper.d.ts +2 -0
  40. package/lib/graph-manager/action/changeDetection/DSL_DataSpace_ObserverHelper.d.ts.map +1 -1
  41. package/lib/graph-manager/action/changeDetection/DSL_DataSpace_ObserverHelper.js +67 -1
  42. package/lib/graph-manager/action/changeDetection/DSL_DataSpace_ObserverHelper.js.map +1 -1
  43. package/lib/graph-manager/index.d.ts +1 -1
  44. package/lib/graph-manager/index.d.ts.map +1 -1
  45. package/lib/graph-manager/index.js +1 -1
  46. package/lib/graph-manager/index.js.map +1 -1
  47. package/lib/graph-manager/protocol/pure/DSL_DataSpace_PureProtocolProcessorPlugin.d.ts +4 -1
  48. package/lib/graph-manager/protocol/pure/DSL_DataSpace_PureProtocolProcessorPlugin.d.ts.map +1 -1
  49. package/lib/graph-manager/protocol/pure/DSL_DataSpace_PureProtocolProcessorPlugin.js +109 -13
  50. package/lib/graph-manager/protocol/pure/DSL_DataSpace_PureProtocolProcessorPlugin.js.map +1 -1
  51. package/lib/graph-manager/protocol/pure/v1/V1_DSL_DataSpace_PureGraphManagerExtension.d.ts.map +1 -1
  52. package/lib/graph-manager/protocol/pure/v1/V1_DSL_DataSpace_PureGraphManagerExtension.js +13 -9
  53. package/lib/graph-manager/protocol/pure/v1/V1_DSL_DataSpace_PureGraphManagerExtension.js.map +1 -1
  54. package/lib/graph-manager/protocol/pure/v1/V1_DSL_DataSpace_SystemModels.json +8 -1
  55. package/lib/graph-manager/protocol/pure/v1/engine/analytics/V1_DataSpaceAnalysis.js +2 -2
  56. package/lib/graph-manager/protocol/pure/v1/engine/analytics/V1_DataSpaceAnalysis.js.map +1 -1
  57. package/lib/graph-manager/protocol/pure/v1/model/packageableElements/dataSpace/V1_DSL_DataSpace_DataSpace.d.ts +26 -1
  58. package/lib/graph-manager/protocol/pure/v1/model/packageableElements/dataSpace/V1_DSL_DataSpace_DataSpace.d.ts.map +1 -1
  59. package/lib/graph-manager/protocol/pure/v1/model/packageableElements/dataSpace/V1_DSL_DataSpace_DataSpace.js +55 -0
  60. package/lib/graph-manager/protocol/pure/v1/model/packageableElements/dataSpace/V1_DSL_DataSpace_DataSpace.js.map +1 -1
  61. package/lib/graph-manager/protocol/pure/v1/transformation/pureProtocol/V1_DSL_DataSpace_ProtocolHelper.d.ts.map +1 -1
  62. package/lib/graph-manager/protocol/pure/v1/transformation/pureProtocol/V1_DSL_DataSpace_ProtocolHelper.js +36 -3
  63. package/lib/graph-manager/protocol/pure/v1/transformation/pureProtocol/V1_DSL_DataSpace_ProtocolHelper.js.map +1 -1
  64. package/lib/index.css +2 -2
  65. package/lib/index.css.map +1 -1
  66. package/lib/package.json +1 -1
  67. package/lib/stores/DataSpaceLayoutState.d.ts +9 -0
  68. package/lib/stores/DataSpaceLayoutState.d.ts.map +1 -1
  69. package/lib/stores/DataSpaceLayoutState.js +36 -0
  70. package/lib/stores/DataSpaceLayoutState.js.map +1 -1
  71. package/lib/stores/DataSpaceModelsDocumentationState.d.ts.map +1 -1
  72. package/lib/stores/DataSpaceModelsDocumentationState.js +3 -1
  73. package/lib/stores/DataSpaceModelsDocumentationState.js.map +1 -1
  74. package/lib/stores/DataSpaceViewerDiagramViewerState.d.ts.map +1 -1
  75. package/lib/stores/DataSpaceViewerDiagramViewerState.js +4 -1
  76. package/lib/stores/DataSpaceViewerDiagramViewerState.js.map +1 -1
  77. package/lib/stores/DataSpaceViewerExecutableState.d.ts.map +1 -1
  78. package/lib/stores/DataSpaceViewerExecutableState.js +2 -1
  79. package/lib/stores/DataSpaceViewerExecutableState.js.map +1 -1
  80. package/lib/stores/query-builder/DataSpaceQueryBuilderState.d.ts +2 -1
  81. package/lib/stores/query-builder/DataSpaceQueryBuilderState.d.ts.map +1 -1
  82. package/lib/stores/query-builder/DataSpaceQueryBuilderState.js +12 -1
  83. package/lib/stores/query-builder/DataSpaceQueryBuilderState.js.map +1 -1
  84. package/package.json +14 -14
  85. package/src/__lib__/DSL_DataSpace_LegendApplicationCommand.ts +8 -8
  86. package/src/components/DSL_DataSpace_LegendApplicationPlugin.tsx +2 -2
  87. package/src/components/DataSpaceDataAccess.tsx +42 -11
  88. package/src/components/DataSpaceDescription.tsx +40 -14
  89. package/src/components/DataSpaceInfoPanel.tsx +4 -4
  90. package/src/components/DataSpaceLegendAISchema.ts +5 -0
  91. package/src/components/DataSpaceQuickStart.tsx +73 -15
  92. package/src/components/DataSpaceSupportPanel.tsx +125 -0
  93. package/src/components/DataSpaceViewer.tsx +2 -2
  94. package/src/components/DataSpaceWiki.tsx +0 -2
  95. package/src/components/query-builder/DataSpaceAdvancedSearchModal.tsx +4 -4
  96. package/src/components/query-builder/DataSpaceQueryBuilder.tsx +5 -5
  97. package/src/graph/DSL_DataSpace_HashUtils.ts +4 -0
  98. package/src/graph/metamodel/pure/model/packageableElements/dataSpace/DSL_DataSpace_DataSpace.ts +67 -0
  99. package/src/graph-manager/action/changeDetection/DSL_DataSpace_ObserverHelper.ts +92 -0
  100. package/src/graph-manager/index.ts +1 -0
  101. package/src/graph-manager/protocol/pure/DSL_DataSpace_PureProtocolProcessorPlugin.ts +159 -10
  102. package/src/graph-manager/protocol/pure/v1/V1_DSL_DataSpace_PureGraphManagerExtension.ts +16 -8
  103. package/src/graph-manager/protocol/pure/v1/V1_DSL_DataSpace_SystemModels.json +8 -1
  104. package/src/graph-manager/protocol/pure/v1/engine/analytics/V1_DataSpaceAnalysis.ts +2 -2
  105. package/src/graph-manager/protocol/pure/v1/model/packageableElements/dataSpace/V1_DSL_DataSpace_DataSpace.ts +67 -0
  106. package/src/graph-manager/protocol/pure/v1/transformation/pureProtocol/V1_DSL_DataSpace_ProtocolHelper.ts +61 -0
  107. package/src/stores/DataSpaceLayoutState.ts +41 -0
  108. package/src/stores/DataSpaceModelsDocumentationState.ts +7 -1
  109. package/src/stores/DataSpaceViewerDiagramViewerState.ts +5 -1
  110. package/src/stores/DataSpaceViewerExecutableState.ts +2 -0
  111. package/src/stores/query-builder/DataSpaceQueryBuilderState.ts +20 -0
@@ -14,7 +14,7 @@
14
14
  * limitations under the License.
15
15
  */
16
16
 
17
- import { AnchorLinkIcon } from '@finos/legend-art';
17
+ import { AnchorLinkIcon, ExpandMoreIcon, clsx } from '@finos/legend-art';
18
18
  import { type DataSpaceViewerState } from '../stores/DataSpaceViewerState.js';
19
19
  import { observer } from 'mobx-react-lite';
20
20
  import { DataSpaceWikiPlaceholder } from './DataSpacePlaceholder.js';
@@ -33,6 +33,14 @@ export const DataSpaceDescription = observer(
33
33
  const anchor = generateAnchorForActivity(
34
34
  DATA_SPACE_VIEWER_ACTIVITY_MODE.DESCRIPTION,
35
35
  );
36
+ const isCollapsed =
37
+ dataSpaceViewerState.layoutState.sectionCollapseState.isSectionCollapsed(
38
+ anchor,
39
+ );
40
+ const toggleCollapse = (): void =>
41
+ dataSpaceViewerState.layoutState.sectionCollapseState.toggleSectionCollapse(
42
+ anchor,
43
+ );
36
44
 
37
45
  useEffect(() => {
38
46
  if (sectionRef.current) {
@@ -48,6 +56,22 @@ export const DataSpaceDescription = observer(
48
56
  <div ref={sectionRef} className="data-space__viewer__wiki__section">
49
57
  <div className="data-space__viewer__wiki__section__header">
50
58
  <div className="data-space__viewer__wiki__section__header__label">
59
+ <button
60
+ className="data-space__viewer__wiki__section__header__caret-btn"
61
+ tabIndex={-1}
62
+ onClick={toggleCollapse}
63
+ title={isCollapsed ? 'Expand' : 'Collapse'}
64
+ >
65
+ <ExpandMoreIcon
66
+ className={clsx(
67
+ 'data-space__viewer__wiki__section__header__caret',
68
+ {
69
+ 'data-space__viewer__wiki__section__header__caret--collapsed':
70
+ isCollapsed,
71
+ },
72
+ )}
73
+ />
74
+ </button>
51
75
  Description
52
76
  <button
53
77
  className="data-space__viewer__wiki__section__header__anchor"
@@ -58,20 +82,22 @@ export const DataSpaceDescription = observer(
58
82
  </button>
59
83
  </div>
60
84
  </div>
61
- <div className="data-space__viewer__wiki__section__content">
62
- {analysisResult.description !== undefined && (
63
- <div className="data-space__viewer__description">
64
- <div className="data-space__viewer__description__content">
65
- <DataSpaceMarkdownTextViewer
66
- value={analysisResult.description}
67
- />
85
+ {!isCollapsed && (
86
+ <div className="data-space__viewer__wiki__section__content">
87
+ {analysisResult.description !== undefined && (
88
+ <div className="data-space__viewer__description">
89
+ <div className="data-space__viewer__description__content">
90
+ <DataSpaceMarkdownTextViewer
91
+ value={analysisResult.description}
92
+ />
93
+ </div>
68
94
  </div>
69
- </div>
70
- )}
71
- {analysisResult.description === undefined && (
72
- <DataSpaceWikiPlaceholder message="(not specified)" />
73
- )}
74
- </div>
95
+ )}
96
+ {analysisResult.description === undefined && (
97
+ <DataSpaceWikiPlaceholder message="(not specified)" />
98
+ )}
99
+ </div>
100
+ )}
75
101
  </div>
76
102
  );
77
103
  },
@@ -71,12 +71,12 @@ export const DataSpaceInfoPanel = observer(
71
71
  </div>
72
72
  <div className="data-space__viewer__info__section__entry">
73
73
  <div className="data-space__viewer__info__project-info__label">
74
- Data Product
74
+ Data Space
75
75
  </div>
76
76
  <button
77
77
  className="data-space__viewer__info__project-info__value"
78
78
  tabIndex={-1}
79
- title="Click to View Data Product"
79
+ title="Click to View Data Space"
80
80
  onClick={viewDataSpaceInProject}
81
81
  >
82
82
  {analysisResult.path}
@@ -84,7 +84,7 @@ export const DataSpaceInfoPanel = observer(
84
84
  <button
85
85
  className="data-space__viewer__info__project-info__link"
86
86
  tabIndex={-1}
87
- title="Edit Data Product"
87
+ title="Edit Data Space"
88
88
  onClick={viewDataSpaceInSDLCProject}
89
89
  >
90
90
  <PencilIcon />
@@ -92,7 +92,7 @@ export const DataSpaceInfoPanel = observer(
92
92
  <button
93
93
  className="data-space__viewer__info__project-info__link"
94
94
  tabIndex={-1}
95
- title="View Data Product"
95
+ title="View Data Space"
96
96
  onClick={viewDataSpaceInProject}
97
97
  >
98
98
  <ExternalLinkIcon />
@@ -55,6 +55,7 @@ import {
55
55
  import {
56
56
  DataSpaceSupportEmail,
57
57
  DataSpaceSupportCombinedInfo,
58
+ DataSpaceSupportFullInfo,
58
59
  } from '../graph/metamodel/pure/model/packageableElements/dataSpace/DSL_DataSpace_DataSpace.js';
59
60
 
60
61
  const MAX_QUERY_SCAN_LENGTH = 5_000;
@@ -392,6 +393,10 @@ export function extractMetadataFromDataSpaceAnalysis(
392
393
  supportInfoText = result.supportInfo.address;
393
394
  } else if (result.supportInfo instanceof DataSpaceSupportCombinedInfo) {
394
395
  supportInfoText = (result.supportInfo.emails ?? []).join(', ');
396
+ } else if (result.supportInfo instanceof DataSpaceSupportFullInfo) {
397
+ supportInfoText = (result.supportInfo.emails ?? [])
398
+ .map((email) => email.address)
399
+ .join(', ');
395
400
  }
396
401
 
397
402
  const metadata: LegendAIProductMetadata = {
@@ -21,6 +21,7 @@ import {
21
21
  CodeIcon,
22
22
  CopyIcon,
23
23
  DataAccessIcon,
24
+ ExpandMoreIcon,
24
25
  LegendLogo,
25
26
  MoreVerticalIcon,
26
27
  QuestionCircleIcon,
@@ -470,6 +471,14 @@ const DataSpaceExecutableAnalysisResultView = observer(
470
471
  const executableAnalysisResult = executableState.value;
471
472
  const quickStartRef = useRef<HTMLDivElement>(null);
472
473
  const anchor = generateAnchorForQuickStart(executableAnalysisResult);
474
+ const isCollapsed =
475
+ dataSpaceViewerState.layoutState.sectionCollapseState.isSectionCollapsed(
476
+ anchor,
477
+ );
478
+ const toggleCollapse = (): void =>
479
+ dataSpaceViewerState.layoutState.sectionCollapseState.toggleSectionCollapse(
480
+ anchor,
481
+ );
473
482
 
474
483
  useEffect(() => {
475
484
  if (quickStartRef.current) {
@@ -501,6 +510,22 @@ const DataSpaceExecutableAnalysisResultView = observer(
501
510
  return (
502
511
  <div ref={quickStartRef} className="data-space__viewer__quickstart__item">
503
512
  <div className="data-space__viewer__quickstart__item__header">
513
+ <button
514
+ className="data-space__viewer__quickstart__item__header__caret-btn"
515
+ tabIndex={-1}
516
+ onClick={toggleCollapse}
517
+ title={isCollapsed ? 'Expand' : 'Collapse'}
518
+ >
519
+ <ExpandMoreIcon
520
+ className={clsx(
521
+ 'data-space__viewer__quickstart__item__header__caret',
522
+ {
523
+ 'data-space__viewer__quickstart__item__header__caret--collapsed':
524
+ isCollapsed,
525
+ },
526
+ )}
527
+ />
528
+ </button>
504
529
  <div className="data-space__viewer__quickstart__item__header__title">
505
530
  {executableAnalysisResult.title}
506
531
  </div>
@@ -515,21 +540,25 @@ const DataSpaceExecutableAnalysisResultView = observer(
515
540
  <AnchorLinkIcon />
516
541
  </button>
517
542
  </div>
518
- {executableAnalysisResult.description !== undefined && (
519
- <div className="data-space__viewer__quickstart__item__description">
520
- <DataSpaceMarkdownTextViewer
521
- value={executableAnalysisResult.description}
522
- />
523
- </div>
524
- )}
525
- {(executableState.resultState instanceof
526
- DataSpaceExecutableTDSResultState ||
527
- executableState.resultState instanceof
528
- DataSpaceExecutableRelationResultState) && (
529
- <DataSpaceExecutableResultView
530
- executableState={executableState}
531
- resultState={executableState.resultState}
532
- />
543
+ {!isCollapsed && (
544
+ <>
545
+ {executableAnalysisResult.description !== undefined && (
546
+ <div className="data-space__viewer__quickstart__item__description">
547
+ <DataSpaceMarkdownTextViewer
548
+ value={executableAnalysisResult.description}
549
+ />
550
+ </div>
551
+ )}
552
+ {(executableState.resultState instanceof
553
+ DataSpaceExecutableTDSResultState ||
554
+ executableState.resultState instanceof
555
+ DataSpaceExecutableRelationResultState) && (
556
+ <DataSpaceExecutableResultView
557
+ executableState={executableState}
558
+ resultState={executableState.resultState}
559
+ />
560
+ )}
561
+ </>
533
562
  )}
534
563
  </div>
535
564
  );
@@ -546,6 +575,17 @@ export const DataSpaceQuickStart = observer(
546
575
  const anchor = generateAnchorForActivity(
547
576
  DATA_SPACE_VIEWER_ACTIVITY_MODE.QUICK_START,
548
577
  );
578
+ const executableAnchors = dataSpaceViewerState.executableStates.map(
579
+ (executableState) => generateAnchorForQuickStart(executableState.value),
580
+ );
581
+ const isCollapsed =
582
+ dataSpaceViewerState.layoutState.sectionCollapseState.areAllSectionsCollapsed(
583
+ executableAnchors,
584
+ );
585
+ const toggleCollapse = (): void =>
586
+ dataSpaceViewerState.layoutState.sectionCollapseState.toggleAllSectionsCollapse(
587
+ executableAnchors,
588
+ );
549
589
 
550
590
  useEffect(() => {
551
591
  if (sectionRef.current) {
@@ -569,6 +609,24 @@ export const DataSpaceQuickStart = observer(
569
609
  <div ref={sectionRef} className="data-space__viewer__wiki__section">
570
610
  <div className="data-space__viewer__wiki__section__header">
571
611
  <div className="data-space__viewer__wiki__section__header__label">
612
+ {executableAnchors.length > 0 && (
613
+ <button
614
+ className="data-space__viewer__wiki__section__header__caret-btn"
615
+ tabIndex={-1}
616
+ onClick={toggleCollapse}
617
+ title={isCollapsed ? 'Expand All' : 'Collapse All'}
618
+ >
619
+ <ExpandMoreIcon
620
+ className={clsx(
621
+ 'data-space__viewer__wiki__section__header__caret',
622
+ {
623
+ 'data-space__viewer__wiki__section__header__caret--collapsed':
624
+ isCollapsed,
625
+ },
626
+ )}
627
+ />
628
+ </button>
629
+ )}
572
630
  Quick Start
573
631
  <button
574
632
  className="data-space__viewer__wiki__section__header__anchor"
@@ -25,8 +25,10 @@ import {
25
25
  SupportIcon,
26
26
  } from '@finos/legend-art';
27
27
  import {
28
+ type DataSpaceLink,
28
29
  DataSpaceSupportCombinedInfo,
29
30
  DataSpaceSupportEmail,
31
+ DataSpaceSupportFullInfo,
30
32
  } from '../graph/metamodel/pure/model/packageableElements/dataSpace/DSL_DataSpace_DataSpace.js';
31
33
  import { type DataSpaceViewerState } from '../stores/DataSpaceViewerState.js';
32
34
 
@@ -160,6 +162,122 @@ const DataSpaceSupportCombinedInfoViewer = observer(
160
162
  },
161
163
  );
162
164
 
165
+ const DataSpaceSupportLinkEntry = observer(
166
+ (props: {
167
+ label: string;
168
+ link: DataSpaceLink | undefined;
169
+ iconClassName?: string | undefined;
170
+ icon: React.ReactNode;
171
+ }) => {
172
+ const { label, link, iconClassName, icon } = props;
173
+
174
+ return (
175
+ <div className="data-space__viewer__support__entry" title={label}>
176
+ <div
177
+ className={`data-space__viewer__support__entry__icon${
178
+ iconClassName ? ` ${iconClassName}` : ''
179
+ }`}
180
+ >
181
+ {icon}
182
+ </div>
183
+ {link ? (
184
+ <a
185
+ href={link.url}
186
+ className="data-space__viewer__support__entry__content"
187
+ >
188
+ {link.label ?? link.url}
189
+ </a>
190
+ ) : (
191
+ <div className="data-space__viewer__support__entry__content">
192
+ (not specified)
193
+ </div>
194
+ )}
195
+ </div>
196
+ );
197
+ },
198
+ );
199
+
200
+ const DataSpaceSupportFullInfoViewer = observer(
201
+ (props: {
202
+ dataSpaceViewerState: DataSpaceViewerState;
203
+ supportInfo: DataSpaceSupportFullInfo;
204
+ }) => {
205
+ const { supportInfo } = props;
206
+
207
+ return (
208
+ <>
209
+ <div className="data-space__viewer__support__section">
210
+ <DataSpaceSupportLinkEntry
211
+ label="Website"
212
+ link={supportInfo.website}
213
+ iconClassName="data-space__viewer__support__entry__icon--website"
214
+ icon={<HomeIcon />}
215
+ />
216
+ <DataSpaceSupportLinkEntry
217
+ label="Documentation"
218
+ link={supportInfo.documentation}
219
+ icon={<DocumentationIcon />}
220
+ />
221
+ <DataSpaceSupportLinkEntry
222
+ label="Support"
223
+ link={supportInfo.supportUrl}
224
+ iconClassName="data-space__viewer__support__entry__icon--support"
225
+ icon={<SupportIcon />}
226
+ />
227
+ <DataSpaceSupportLinkEntry
228
+ label="FAQ"
229
+ link={supportInfo.faqUrl}
230
+ iconClassName="data-space__viewer__support__entry__icon--faq"
231
+ icon={<QuestionAnswerIcon />}
232
+ />
233
+ </div>
234
+ {Boolean(supportInfo.emails?.length) && (
235
+ <div className="data-space__viewer__support__section">
236
+ {supportInfo.emails?.map((email) => (
237
+ <div
238
+ key={email.address}
239
+ className="data-space__viewer__support__entry"
240
+ title={email.title}
241
+ >
242
+ <div className="data-space__viewer__support__entry__icon">
243
+ <EnvelopeIcon />
244
+ </div>
245
+ <a
246
+ href={`mailto:${email.address}`}
247
+ className="data-space__viewer__support__entry__content"
248
+ >
249
+ {email.title} - {email.address}
250
+ </a>
251
+ </div>
252
+ ))}
253
+ </div>
254
+ )}
255
+ {Boolean(supportInfo.expertise?.length) && (
256
+ <div className="data-space__viewer__support__section">
257
+ {supportInfo.expertise?.map((expertise, idx) => (
258
+ <div
259
+ // eslint-disable-next-line react/no-array-index-key
260
+ key={idx}
261
+ className="data-space__viewer__support__entry"
262
+ title="Expertise"
263
+ >
264
+ <div className="data-space__viewer__support__entry__icon">
265
+ <SparkleIcon />
266
+ </div>
267
+ <div className="data-space__viewer__support__entry__content">
268
+ {expertise.description ?? '(not specified)'}
269
+ {Boolean(expertise.expertIds?.length) &&
270
+ ` (${expertise.expertIds?.join(', ')})`}
271
+ </div>
272
+ </div>
273
+ ))}
274
+ </div>
275
+ )}
276
+ </>
277
+ );
278
+ },
279
+ );
280
+
163
281
  const DataSpaceSupport = observer(
164
282
  (props: { dataSpaceViewerState: DataSpaceViewerState }) => {
165
283
  const { dataSpaceViewerState } = props;
@@ -182,6 +300,13 @@ const DataSpaceSupport = observer(
182
300
  supportInfo={supportInfo}
183
301
  />
184
302
  );
303
+ } else if (supportInfo instanceof DataSpaceSupportFullInfo) {
304
+ return (
305
+ <DataSpaceSupportFullInfoViewer
306
+ dataSpaceViewerState={dataSpaceViewerState}
307
+ supportInfo={supportInfo}
308
+ />
309
+ );
185
310
  }
186
311
  return (
187
312
  <div className="data-space__viewer__panel__content__placeholder">
@@ -85,7 +85,7 @@ const DataSpaceHeader = observer(
85
85
  {dataSpaceViewerState.isVerified && (
86
86
  <div
87
87
  className="data-space__viewer__header__title__verified-badge"
88
- title="Verified Data Product"
88
+ title="Verified Data Space"
89
89
  >
90
90
  <VerifiedIcon />
91
91
  </div>
@@ -162,7 +162,7 @@ const DataSpaceHeader = observer(
162
162
  )
163
163
  }
164
164
  >
165
- Query Data Product
165
+ Query Data Space
166
166
  </MenuContentItem>
167
167
  <MenuContentDivider />
168
168
  </>
@@ -59,7 +59,6 @@ export const DataSpaceWiki = observer(
59
59
  <div className="data-space__viewer__wiki">
60
60
  <DataSpaceDescription dataSpaceViewerState={dataSpaceViewerState} />
61
61
  <DiagramViewer
62
- applicationStore={dataSpaceViewerState.applicationStore}
63
62
  diagramViewerState={dataSpaceViewerState.diagramViewerState}
64
63
  actions={{
65
64
  onQueryClass: dataSpaceViewerState.queryClass,
@@ -97,7 +96,6 @@ export const DataSpaceWiki = observer(
97
96
  modelsDocumentationState={
98
97
  dataSpaceViewerState.modelsDocumentationState
99
98
  }
100
- applicationStore={dataSpaceViewerState.applicationStore}
101
99
  />
102
100
  <DataSpaceQuickStart dataSpaceViewerState={dataSpaceViewerState} />
103
101
  <DataSpaceDataAccess dataSpaceViewerState={dataSpaceViewerState} />
@@ -121,7 +121,7 @@ export const DataSpaceAdvancedSearchModal = observer(
121
121
  className="editor-modal data-space-advanced-search__dialog"
122
122
  >
123
123
  <ModalHeader className="data-space-advanced-search__dialog__header">
124
- <ModalTitle title="Search for data product " />
124
+ <ModalTitle title="Search for data space " />
125
125
  <ModalHeaderActions>
126
126
  <button
127
127
  className="modal__header__action"
@@ -144,7 +144,7 @@ export const DataSpaceAdvancedSearchModal = observer(
144
144
  isLoading={searchState.loadDataSpacesState.isInProgress}
145
145
  onChange={onDataSpaceOptionChange}
146
146
  value={selectedDataSpaceOption}
147
- placeholder="Search for data product by name..."
147
+ placeholder="Search for data space by name..."
148
148
  isClearable={true}
149
149
  escapeClearsValue={true}
150
150
  darkMode={
@@ -164,7 +164,7 @@ export const DataSpaceAdvancedSearchModal = observer(
164
164
  tabIndex={-1}
165
165
  title={`[${
166
166
  searchState.toGetSnapShot ? 'on' : 'off'
167
- }] Toggle show data products from snapshot releases instead of latest releases`}
167
+ }] Toggle show data spaces from snapshot releases instead of latest releases`}
168
168
  onClick={toggleGetSnapshot}
169
169
  >
170
170
  <BoltIcon />
@@ -201,7 +201,7 @@ export const DataSpaceAdvancedSearchModal = observer(
201
201
  <TimesCircleIcon />
202
202
  </div>
203
203
  <div className="data-space-advanced-search__dialog__view--failed__text">
204
- {`Can't load data product`}
204
+ {`Can't load data space`}
205
205
  </div>
206
206
  </div>
207
207
  </BlankPanelContent>
@@ -271,7 +271,7 @@ const DataSpaceQueryBuilderSetupPanelContent = observer(
271
271
  <PanelHeader title="properties">
272
272
  <PanelHeaderActions>
273
273
  <PanelHeaderActionItem
274
- title="copy data product query set up link to clipboard"
274
+ title="copy data space query set up link to clipboard"
275
275
  onClick={copyDataSpaceLinkToClipboard}
276
276
  disabled={!queryBuilderState.isDataSpaceLinkable}
277
277
  >
@@ -313,10 +313,10 @@ const DataSpaceQueryBuilderSetupPanelContent = observer(
313
313
  <div className="query-builder__setup__config-group__item">
314
314
  <label
315
315
  className="btn--sm query-builder__setup__config-group__data-product"
316
- title="data product"
316
+ title="data space"
317
317
  htmlFor="query-builder__setup__data-space-selector"
318
318
  >
319
- Data Product
319
+ Data Space
320
320
  </label>
321
321
  <CustomSelectorInput
322
322
  inputId="query-builder__setup__data-space-selector"
@@ -325,7 +325,7 @@ const DataSpaceQueryBuilderSetupPanelContent = observer(
325
325
  isLoading={queryBuilderState.loadEntitiesState.isInProgress}
326
326
  onChange={onDataSpaceOptionChange}
327
327
  value={selectedDataSpaceOption}
328
- placeholder="Search for data product..."
328
+ placeholder="Search for data space..."
329
329
  escapeClearsValue={true}
330
330
  darkMode={
331
331
  !applicationStore.layoutService
@@ -339,7 +339,7 @@ const DataSpaceQueryBuilderSetupPanelContent = observer(
339
339
  tabIndex={-1}
340
340
  className="query-builder__setup__data-space-searcher__btn btn--dark"
341
341
  onClick={openDataSpaceAdvancedSearch}
342
- title="Open advanced search for data product..."
342
+ title="Open advanced search for data space..."
343
343
  >
344
344
  <SearchIcon />
345
345
  </button>
@@ -25,5 +25,9 @@ export enum DATA_SPACE_HASH_STRUCTURE {
25
25
  DATA_SPACE_DIAGRAM = 'DATA_SPACE_DIAGRAM',
26
26
  DATA_SPACE_SUPPORT_COMBINED_INFO = 'DATA_SPACE_SUPPORT_COMBINED_INFO',
27
27
  DATA_SPACE_SUPPORT_EMAIL = 'DATA_SPACE_SUPPORT_EMAIL',
28
+ DATA_SPACE_SUPPORT_FULL_INFO = 'DATA_SPACE_SUPPORT_FULL_INFO',
29
+ DATA_SPACE_LINK = 'DATA_SPACE_LINK',
30
+ DATA_SPACE_EMAIL = 'DATA_SPACE_EMAIL',
31
+ DATA_SPACE_EXPERTISE = 'DATA_SPACE_EXPERTISE',
28
32
  MAPPING_INCLUDE_DATASPACE = 'MAPPING_INCLUDE_DATASPACE',
29
33
  }
@@ -26,6 +26,7 @@ import {
26
26
  type Package,
27
27
  type RawLambda,
28
28
  type DataElementReference,
29
+ type OperationalMetadata,
29
30
  PackageableElement,
30
31
  ConcreteFunctionDefinition,
31
32
  generateFunctionPrettyName,
@@ -200,6 +201,70 @@ export class DataSpaceSupportCombinedInfo
200
201
  }
201
202
  }
202
203
 
204
+ export class DataSpaceLink implements Hashable {
205
+ label?: string | undefined;
206
+ url!: string;
207
+
208
+ get hashCode(): string {
209
+ return hashArray([
210
+ DATA_SPACE_HASH_STRUCTURE.DATA_SPACE_LINK,
211
+ this.label ?? '',
212
+ this.url,
213
+ ]);
214
+ }
215
+ }
216
+
217
+ export class DataSpaceEmail implements Hashable {
218
+ title!: string;
219
+ address!: string;
220
+
221
+ get hashCode(): string {
222
+ return hashArray([
223
+ DATA_SPACE_HASH_STRUCTURE.DATA_SPACE_EMAIL,
224
+ this.title,
225
+ this.address,
226
+ ]);
227
+ }
228
+ }
229
+
230
+ export class DataSpaceExpertise implements Hashable {
231
+ description?: string | undefined;
232
+ expertIds?: string[] | undefined;
233
+
234
+ get hashCode(): string {
235
+ return hashArray([
236
+ DATA_SPACE_HASH_STRUCTURE.DATA_SPACE_EXPERTISE,
237
+ this.description ?? '',
238
+ hashArray(this.expertIds ?? []),
239
+ ]);
240
+ }
241
+ }
242
+
243
+ export class DataSpaceSupportFullInfo
244
+ extends DataSpaceSupportInfo
245
+ implements Hashable
246
+ {
247
+ documentation?: DataSpaceLink | undefined;
248
+ website?: DataSpaceLink | undefined;
249
+ faqUrl?: DataSpaceLink | undefined;
250
+ supportUrl?: DataSpaceLink | undefined;
251
+ emails?: DataSpaceEmail[] | undefined;
252
+ expertise?: DataSpaceExpertise[] | undefined;
253
+
254
+ get hashCode(): string {
255
+ return hashArray([
256
+ DATA_SPACE_HASH_STRUCTURE.DATA_SPACE_SUPPORT_FULL_INFO,
257
+ this.documentationUrl ?? '',
258
+ this.documentation ?? '',
259
+ this.website ?? '',
260
+ this.faqUrl ?? '',
261
+ this.supportUrl ?? '',
262
+ hashArray(this.emails ?? []),
263
+ hashArray(this.expertise ?? []),
264
+ ]);
265
+ }
266
+ }
267
+
203
268
  export class DataSpace extends PackageableElement implements Hashable {
204
269
  title?: string | undefined;
205
270
  description?: string | undefined;
@@ -209,6 +274,7 @@ export class DataSpace extends PackageableElement implements Hashable {
209
274
  executables?: DataSpaceExecutable[] | undefined;
210
275
  diagrams?: DataSpaceDiagram[] | undefined;
211
276
  supportInfo?: DataSpaceSupportInfo | undefined;
277
+ operationalMetadata?: OperationalMetadata | undefined;
212
278
 
213
279
  protected override get _elementHashCode(): string {
214
280
  return hashArray([
@@ -225,6 +291,7 @@ export class DataSpace extends PackageableElement implements Hashable {
225
291
  hashArray(this.executables ?? []),
226
292
  hashArray(this.diagrams ?? []),
227
293
  this.supportInfo ?? '',
294
+ this.operationalMetadata ?? '',
228
295
  ]);
229
296
  }
230
297