@finos/legend-application-marketplace 0.1.55 → 0.1.57

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 (74) hide show
  1. package/lib/__lib__/LegendMarketplaceAppEvent.d.ts +1 -0
  2. package/lib/__lib__/LegendMarketplaceAppEvent.d.ts.map +1 -1
  3. package/lib/__lib__/LegendMarketplaceAppEvent.js +1 -0
  4. package/lib/__lib__/LegendMarketplaceAppEvent.js.map +1 -1
  5. package/lib/__lib__/LegendMarketplaceNavigation.d.ts +9 -2
  6. package/lib/__lib__/LegendMarketplaceNavigation.d.ts.map +1 -1
  7. package/lib/__lib__/LegendMarketplaceNavigation.js +7 -1
  8. package/lib/__lib__/LegendMarketplaceNavigation.js.map +1 -1
  9. package/lib/__lib__/LegendMarketplaceTelemetryHelper.d.ts +11 -1
  10. package/lib/__lib__/LegendMarketplaceTelemetryHelper.d.ts.map +1 -1
  11. package/lib/__lib__/LegendMarketplaceTelemetryHelper.js +57 -3
  12. package/lib/__lib__/LegendMarketplaceTelemetryHelper.js.map +1 -1
  13. package/lib/application/LegendMarketplaceWebApplication.d.ts.map +1 -1
  14. package/lib/application/LegendMarketplaceWebApplication.js +4 -1
  15. package/lib/application/LegendMarketplaceWebApplication.js.map +1 -1
  16. package/lib/components/Header/LegendMarketplaceIconToolbar.d.ts.map +1 -1
  17. package/lib/components/Header/LegendMarketplaceIconToolbar.js +11 -2
  18. package/lib/components/Header/LegendMarketplaceIconToolbar.js.map +1 -1
  19. package/lib/components/SearchBar/LegendMarketplaceSearchBar.d.ts.map +1 -1
  20. package/lib/components/SearchBar/LegendMarketplaceSearchBar.js +4 -0
  21. package/lib/components/SearchBar/LegendMarketplaceSearchBar.js.map +1 -1
  22. package/lib/index.css +2 -2
  23. package/lib/index.css.map +1 -1
  24. package/lib/package.json +1 -1
  25. package/lib/pages/Lakehouse/MarketplaceLakehouseHome.d.ts.map +1 -1
  26. package/lib/pages/Lakehouse/MarketplaceLakehouseHome.js +5 -19
  27. package/lib/pages/Lakehouse/MarketplaceLakehouseHome.js.map +1 -1
  28. package/lib/pages/Lakehouse/admin/LakehouseAdminContractsDashboard.js +2 -2
  29. package/lib/pages/Lakehouse/admin/LakehouseAdminContractsDashboard.js.map +1 -1
  30. package/lib/pages/Lakehouse/entitlements/EntitlementsClosedContractsDashboard.d.ts.map +1 -1
  31. package/lib/pages/Lakehouse/entitlements/EntitlementsClosedContractsDashboard.js +38 -132
  32. package/lib/pages/Lakehouse/entitlements/EntitlementsClosedContractsDashboard.js.map +1 -1
  33. package/lib/pages/Lakehouse/entitlements/EntitlementsPendingContractsDashboard.d.ts.map +1 -1
  34. package/lib/pages/Lakehouse/entitlements/EntitlementsPendingContractsDashboard.js +36 -160
  35. package/lib/pages/Lakehouse/entitlements/EntitlementsPendingContractsDashboard.js.map +1 -1
  36. package/lib/pages/Lakehouse/entitlements/EntitlementsPendingTasksDashboard.d.ts.map +1 -1
  37. package/lib/pages/Lakehouse/entitlements/EntitlementsPendingTasksDashboard.js +60 -40
  38. package/lib/pages/Lakehouse/entitlements/EntitlementsPendingTasksDashboard.js.map +1 -1
  39. package/lib/pages/Lakehouse/entitlements/LakehouseDataContract.d.ts +17 -0
  40. package/lib/pages/Lakehouse/entitlements/LakehouseDataContract.d.ts.map +1 -0
  41. package/lib/pages/Lakehouse/entitlements/LakehouseDataContract.js +124 -0
  42. package/lib/pages/Lakehouse/entitlements/LakehouseDataContract.js.map +1 -0
  43. package/lib/stores/lakehouse/LegendMarketplaceProductViewerStore.js +2 -2
  44. package/lib/stores/lakehouse/LegendMarketplaceProductViewerStore.js.map +1 -1
  45. package/lib/stores/lakehouse/entitlements/EntitlementsDashboardState.d.ts +22 -11
  46. package/lib/stores/lakehouse/entitlements/EntitlementsDashboardState.d.ts.map +1 -1
  47. package/lib/stores/lakehouse/entitlements/EntitlementsDashboardState.js +145 -74
  48. package/lib/stores/lakehouse/entitlements/EntitlementsDashboardState.js.map +1 -1
  49. package/lib/stores/orders/OrderHelpers.d.ts +1 -1
  50. package/lib/stores/orders/OrderHelpers.d.ts.map +1 -1
  51. package/lib/stores/orders/OrderHelpers.js +7 -6
  52. package/lib/stores/orders/OrderHelpers.js.map +1 -1
  53. package/lib/utils/EntitlementsUtils.d.ts +20 -0
  54. package/lib/utils/EntitlementsUtils.d.ts.map +1 -0
  55. package/lib/utils/EntitlementsUtils.js +107 -0
  56. package/lib/utils/EntitlementsUtils.js.map +1 -0
  57. package/package.json +10 -10
  58. package/src/__lib__/LegendMarketplaceAppEvent.ts +1 -0
  59. package/src/__lib__/LegendMarketplaceNavigation.ts +19 -3
  60. package/src/__lib__/LegendMarketplaceTelemetryHelper.ts +80 -4
  61. package/src/application/LegendMarketplaceWebApplication.tsx +15 -0
  62. package/src/components/Header/LegendMarketplaceIconToolbar.tsx +29 -0
  63. package/src/components/SearchBar/LegendMarketplaceSearchBar.tsx +7 -0
  64. package/src/pages/Lakehouse/MarketplaceLakehouseHome.tsx +4 -54
  65. package/src/pages/Lakehouse/admin/LakehouseAdminContractsDashboard.tsx +3 -3
  66. package/src/pages/Lakehouse/entitlements/EntitlementsClosedContractsDashboard.tsx +91 -244
  67. package/src/pages/Lakehouse/entitlements/EntitlementsPendingContractsDashboard.tsx +91 -298
  68. package/src/pages/Lakehouse/entitlements/EntitlementsPendingTasksDashboard.tsx +87 -52
  69. package/src/pages/Lakehouse/entitlements/LakehouseDataContract.tsx +284 -0
  70. package/src/stores/lakehouse/LegendMarketplaceProductViewerStore.ts +3 -3
  71. package/src/stores/lakehouse/entitlements/EntitlementsDashboardState.ts +234 -109
  72. package/src/stores/orders/OrderHelpers.ts +8 -7
  73. package/src/utils/EntitlementsUtils.tsx +207 -0
  74. package/tsconfig.json +2 -0
@@ -28,6 +28,8 @@ export enum LEGEND_MARKETPLACE_ROUTE_PATTERN_TOKEN {
28
28
  DATA_PRODUCT_ID = 'dataProductId',
29
29
  DEPLOYMENT_ID = 'deploymentId',
30
30
  TERMINAL_ID = 'terminalId',
31
+ DATA_CONTRACT_ID = 'dataContractId',
32
+ DATA_CONTRACT_TASK_ID = 'dataContractTaskId',
31
33
  }
32
34
 
33
35
  export enum LEGEND_MARKETPLACE_SEARCH_RESULTS_QUERY_PARAM_TOKEN {
@@ -48,6 +50,11 @@ export type LakehouseDataProductPathParams = {
48
50
  [LEGEND_MARKETPLACE_ROUTE_PATTERN_TOKEN.DEPLOYMENT_ID]: string;
49
51
  };
50
52
 
53
+ export type LakehouseDataContractTaskPathParams = {
54
+ [LEGEND_MARKETPLACE_ROUTE_PATTERN_TOKEN.DATA_CONTRACT_ID]: string;
55
+ [LEGEND_MARKETPLACE_ROUTE_PATTERN_TOKEN.DATA_CONTRACT_TASK_ID]: string;
56
+ };
57
+
51
58
  export type LakehouseSDLCDataProductPathParams = {
52
59
  [LEGEND_MARKETPLACE_ROUTE_PATTERN_TOKEN.GAV]: string;
53
60
  [LEGEND_MARKETPLACE_ROUTE_PATTERN_TOKEN.DATA_PRODUCT_PATH]: string;
@@ -77,6 +84,7 @@ export const LEGEND_MARKETPLACE_ROUTE_PATTERN = Object.freeze({
77
84
  DATA_PRODUCT_SEARCH_RESULTS: '/dataProduct/results',
78
85
  // Lakehouse
79
86
  LAKEHOUSE_ENTITLEMENTS: '/lakehouse/entitlements',
87
+ LAKEHOUSE_ENTITLEMENTS_CONTRACT_TASK: `/lakehouse/entitlements/:${LEGEND_MARKETPLACE_ROUTE_PATTERN_TOKEN.DATA_CONTRACT_ID}/:${LEGEND_MARKETPLACE_ROUTE_PATTERN_TOKEN.DATA_CONTRACT_TASK_ID}`,
80
88
  LAKEHOUSE_ADMIN: '/lakehouse/admin',
81
89
  // Deprecated
82
90
  DEPRECATED_LAKEHOUSE: '/lakehouse',
@@ -94,6 +102,17 @@ export const generateLakehouseDataProductPath = (
94
102
  deploymentId: deploymentId.toString(),
95
103
  });
96
104
 
105
+ export const generateContractPagePath = (
106
+ dataContractId: string,
107
+ dataContractTaskId: string,
108
+ ): string =>
109
+ generatePath(
110
+ LEGEND_MARKETPLACE_ROUTE_PATTERN.LAKEHOUSE_ENTITLEMENTS_CONTRACT_TASK,
111
+ {
112
+ dataContractId,
113
+ dataContractTaskId,
114
+ },
115
+ );
97
116
  export const generateLegacyDataProductPath = (
98
117
  gav: string,
99
118
  path: string,
@@ -103,9 +122,6 @@ export const generateLegacyDataProductPath = (
103
122
  path,
104
123
  });
105
124
 
106
- export const generateLakehouseTaskPath = (taskId: string): string =>
107
- `${LEGEND_MARKETPLACE_ROUTE_PATTERN.LAKEHOUSE_ENTITLEMENTS}?selectedTasks=${taskId}`;
108
-
109
125
  export const generateLakehouseSearchResultsRoute = (
110
126
  query: string | undefined,
111
127
  useProducerSearch: boolean,
@@ -73,17 +73,71 @@ type MarketPlaceDataProductIntegration_TemeletryData =
73
73
  accessPointPath?: string | undefined;
74
74
  };
75
75
 
76
+ export type MarketplaceUserSession = {
77
+ searchEventId: number;
78
+ searchSessionId: string | undefined;
79
+ };
80
+
81
+ export const SEARCH_SESSION_KEY = 'marketplace_user_session';
82
+
76
83
  export class LegendMarketplaceTelemetryHelper {
84
+ private static getSearchSession(): MarketplaceUserSession {
85
+ const stored = localStorage.getItem(SEARCH_SESSION_KEY);
86
+
87
+ if (stored) {
88
+ const session = JSON.parse(stored) as MarketplaceUserSession;
89
+ return session;
90
+ } else {
91
+ return this.clearSearchSession();
92
+ }
93
+ }
94
+
95
+ private static createNewSearchSession(
96
+ searchSessionId: string,
97
+ ): MarketplaceUserSession {
98
+ const newSearchSession: MarketplaceUserSession = {
99
+ searchEventId: 1,
100
+ searchSessionId: searchSessionId,
101
+ };
102
+
103
+ localStorage.setItem(SEARCH_SESSION_KEY, JSON.stringify(newSearchSession));
104
+ return newSearchSession;
105
+ }
106
+
107
+ static clearSearchSession(): MarketplaceUserSession {
108
+ const newSearchSession: MarketplaceUserSession = {
109
+ searchEventId: 0,
110
+ searchSessionId: undefined,
111
+ };
112
+
113
+ localStorage.setItem(SEARCH_SESSION_KEY, JSON.stringify(newSearchSession));
114
+ return newSearchSession;
115
+ }
116
+
117
+ private static updateSearchEventId() {
118
+ const currentSession = this.getSearchSession();
119
+ const updatedSession: MarketplaceUserSession = {
120
+ ...currentSession,
121
+ searchEventId: currentSession.searchEventId + 1,
122
+ };
123
+
124
+ localStorage.setItem(SEARCH_SESSION_KEY, JSON.stringify(updatedSession));
125
+ return updatedSession;
126
+ }
127
+
77
128
  static logEvent_ClickingDataProductCard(
78
129
  telemetryService: TelemetryService,
79
130
  dataProductData: MarketplaceDataProduct_TelemetryData,
80
131
  clickedFrom: LEGEND_MARKETPLACE_PAGE,
81
132
  ): void {
133
+ this.updateSearchEventId();
134
+ const session = this.getSearchSession();
82
135
  telemetryService.logEvent(
83
136
  LEGEND_MARKETPLACE_APP_EVENT.CLICK_DATA_PRODUCT_CARD,
84
137
  {
85
138
  ...dataProductData,
86
139
  clickedFrom: clickedFrom,
140
+ ...session,
87
141
  },
88
142
  );
89
143
  }
@@ -93,23 +147,26 @@ export class LegendMarketplaceTelemetryHelper {
93
147
  query: string | undefined,
94
148
  searchedFrom: LEGEND_MARKETPLACE_PAGE,
95
149
  ): void {
150
+ this.createNewSearchSession(telemetryService.applicationStore.uuid);
151
+ const session = this.getSearchSession();
96
152
  telemetryService.logEvent(LEGEND_MARKETPLACE_APP_EVENT.SEARCH_QUERY, {
97
153
  query: query,
98
154
  searchedFrom: searchedFrom,
155
+ ...session,
99
156
  });
100
157
  }
101
158
 
102
159
  static logEvent_ActionDataContracts(
103
160
  telemetryService: TelemetryService,
104
161
  selectedContracts: V1_ContractUserEventRecord[],
105
- allContracts: V1_LiteDataContract[] | undefined,
162
+ pendingTaskContracts: V1_LiteDataContract[] | undefined,
106
163
  action: CONTRACT_ACTION,
107
164
  actionTakenBy: string,
108
165
  errors: string[] | undefined,
109
166
  ): void {
110
167
  const actionedContractsDetails = selectedContracts.map((contract) => {
111
- const dataContract = allContracts?.find(
112
- (_contract) => _contract.guid === contract.dataContractId,
168
+ const dataContract = pendingTaskContracts?.find(
169
+ (c) => c.guid === contract.dataContractId,
113
170
  );
114
171
  const accessPointGroup =
115
172
  dataContract?.resourceType === V1_ResourceType.ACCESS_POINT_GROUP
@@ -170,9 +227,15 @@ export class LegendMarketplaceTelemetryHelper {
170
227
  intTelemetryData: MarketPlaceDataProductIntegration_TemeletryData,
171
228
  error: string | undefined,
172
229
  ): void {
230
+ this.updateSearchEventId();
231
+ const session = this.getSearchSession();
173
232
  const telemetryData =
174
233
  error === undefined
175
- ? { ...intTelemetryData, status: MARKETPLACE_EVENT_STATUS.SUCCESS }
234
+ ? {
235
+ ...intTelemetryData,
236
+ status: MARKETPLACE_EVENT_STATUS.SUCCESS,
237
+ ...session,
238
+ }
176
239
  : {
177
240
  ...intTelemetryData,
178
241
  status: MARKETPLACE_EVENT_STATUS.FAILURE,
@@ -261,4 +324,17 @@ export class LegendMarketplaceTelemetryHelper {
261
324
  tabTitle: tabTitle,
262
325
  });
263
326
  }
327
+
328
+ static logEvent_toggleProducerSearch(
329
+ telemetryService: TelemetryService,
330
+ isEnabled: boolean,
331
+ ): void {
332
+ telemetryService.logEvent(
333
+ LEGEND_MARKETPLACE_APP_EVENT.PRODUCER_SEARCH_TOGGLE,
334
+ {
335
+ isEnabled: isEnabled,
336
+ toggleAction: isEnabled ? 'enabled' : 'disabled',
337
+ },
338
+ );
339
+ }
264
340
  }
@@ -79,6 +79,13 @@ const LakehouseEntitlements = React.lazy(() =>
79
79
  }),
80
80
  ),
81
81
  );
82
+ const LakehouseDataContractTask = React.lazy(() =>
83
+ import('../pages/Lakehouse/entitlements/LakehouseDataContract.js').then(
84
+ (module) => ({
85
+ default: module.LakehouseDataContractTask,
86
+ }),
87
+ ),
88
+ );
82
89
  const LakehouseAdmin = React.lazy(() =>
83
90
  import('../pages/Lakehouse/admin/LakehouseAdmin.js').then((module) => ({
84
91
  default: module.LakehouseAdmin,
@@ -309,6 +316,14 @@ export const LegendMarketplaceWebApplicationRouter = observer(() => {
309
316
  path={LEGEND_MARKETPLACE_ROUTE_PATTERN.LEGACY_DATA_PRODUCT}
310
317
  element={<LegacyDataProduct />}
311
318
  />
319
+ <Route
320
+ path={
321
+ LEGEND_MARKETPLACE_ROUTE_PATTERN.LAKEHOUSE_ENTITLEMENTS_CONTRACT_TASK
322
+ }
323
+ element={React.createElement(
324
+ useProtectedPage(LakehouseDataContractTask),
325
+ )}
326
+ />
312
327
  <Route
313
328
  path={LEGEND_MARKETPLACE_ROUTE_PATTERN.LAKEHOUSE_ENTITLEMENTS}
314
329
  element={React.createElement(
@@ -18,7 +18,9 @@ import {
18
18
  HelpOutlineIcon,
19
19
  MenuContentDivider,
20
20
  MoonIcon,
21
+ OpenNewTabIcon,
21
22
  ShoppingCartOutlineIcon,
23
+ SimpleCalendarIcon,
22
24
  SunFilledIcon,
23
25
  UserCircleIcon,
24
26
  } from '@finos/legend-art';
@@ -233,6 +235,22 @@ export const LegendMarketplaceIconToolbar = observer(() => {
233
235
  )
234
236
  .filter(isNonNullable);
235
237
 
238
+ const handleShowDemo = (): void => {
239
+ marketplaceStore.setDemoModal(true);
240
+ setAnchorEl(null);
241
+ };
242
+
243
+ const handleNewsletterClick = (): void => {
244
+ applicationStore.navigationService.navigator.visitAddress(
245
+ applicationStore.config.options.newsletterUrl,
246
+ );
247
+ applicationStore.telemetryService.logEvent(
248
+ LEGEND_MARKETPLACE_APP_EVENT.CLICK_SUBSCRIBE_TO_NEWSLETTER,
249
+ {},
250
+ );
251
+ setAnchorEl(null);
252
+ };
253
+
236
254
  return (
237
255
  <>
238
256
  <IconButton
@@ -242,6 +260,17 @@ export const LegendMarketplaceIconToolbar = observer(() => {
242
260
  <HelpOutlineIcon />
243
261
  </IconButton>
244
262
  <Menu anchorEl={anchorEl} open={open} onClose={() => setAnchorEl(null)}>
263
+ {showDevFeatures && (
264
+ <MenuItem onClick={handleShowDemo}>
265
+ <SimpleCalendarIcon style={{ marginRight: '8px' }} />
266
+ Schedule a Demo
267
+ </MenuItem>
268
+ )}
269
+ <MenuItem onClick={handleNewsletterClick}>
270
+ <OpenNewTabIcon style={{ marginRight: '8px' }} />
271
+ Subscribe to our Newsletter
272
+ </MenuItem>
273
+ <MenuContentDivider />
245
274
  <MenuItem
246
275
  onClick={() => {
247
276
  setOpenAppInfo(true);
@@ -27,6 +27,8 @@ import {
27
27
  import { clsx, SearchIcon, TuneIcon } from '@finos/legend-art';
28
28
  import { observer } from 'mobx-react-lite';
29
29
  import { LegendMarketplaceInfoTooltip } from '../InfoTooltip/LegendMarketplaceInfoTooltip.js';
30
+ import { LegendMarketplaceTelemetryHelper } from '../../__lib__/LegendMarketplaceTelemetryHelper.js';
31
+ import { useLegendMarketplaceBaseStore } from '../../application/providers/LegendMarketplaceFrameworkProvider.js';
30
32
 
31
33
  export interface Vendor {
32
34
  provider: string;
@@ -54,6 +56,7 @@ export const LegendMarketplaceSearchBar = observer(
54
56
  initialUseProducerSearch,
55
57
  } = props;
56
58
 
59
+ const applicationStore = useLegendMarketplaceBaseStore().applicationStore;
57
60
  const [searchQuery, setSearchQuery] = useState<string>(initialValue ?? '');
58
61
  const [useProducerSearch, setUseProducerSearch] = useState(
59
62
  initialUseProducerSearch ?? false,
@@ -117,6 +120,10 @@ export const LegendMarketplaceSearchBar = observer(
117
120
  checked={useProducerSearch}
118
121
  onChange={(event) => {
119
122
  setUseProducerSearch(event.target.checked);
123
+ LegendMarketplaceTelemetryHelper.logEvent_toggleProducerSearch(
124
+ applicationStore.telemetryService,
125
+ event.target.checked,
126
+ );
120
127
  }}
121
128
  />
122
129
  }
@@ -23,8 +23,6 @@ import { useAuth } from 'react-oidc-context';
23
23
  import {
24
24
  CubesLoadingIndicator,
25
25
  CubesLoadingIndicatorIcon,
26
- OpenNewTabIcon,
27
- SimpleCalendarIcon,
28
26
  } from '@finos/legend-art';
29
27
  import { generateLakehouseSearchResultsRoute } from '../../__lib__/LegendMarketplaceNavigation.js';
30
28
  import {
@@ -40,7 +38,6 @@ import {
40
38
  LEGEND_MARKETPLACE_PAGE,
41
39
  LegendMarketplaceTelemetryHelper,
42
40
  } from '../../__lib__/LegendMarketplaceTelemetryHelper.js';
43
- import { LEGEND_MARKETPLACE_APP_EVENT } from '../../__lib__/LegendMarketplaceAppEvent.js';
44
41
  import type { ProductCardState } from '../../stores/lakehouse/dataProducts/ProductCardState.js';
45
42
  import { generatePathForDataProductSearchResult } from '../../utils/SearchUtils.js';
46
43
  import { logClickingDataProductCard } from '../../utils/LogUtils.js';
@@ -50,10 +47,6 @@ export const MarketplaceLakehouseHome = observer(() => {
50
47
  const legendMarketplaceBaseStore = useLegendMarketplaceBaseStore();
51
48
  const applicationStore = legendMarketplaceBaseStore.applicationStore;
52
49
  const auth = useAuth();
53
- const configOptions = applicationStore.config.options;
54
- const showDevFeatures = configOptions.showDevFeatures;
55
- const adjacentUrl = applicationStore.config.adjacentEnvUrl;
56
- const adjacentEnvState = legendMarketplaceBaseStore.adjacentEnvState;
57
50
 
58
51
  const isDarkMode =
59
52
  !applicationStore.layoutService.TEMPORARY__isLightColorThemeEnabled;
@@ -63,6 +56,10 @@ export const MarketplaceLakehouseHome = observer(() => {
63
56
  >([]);
64
57
  const [loading, setLoading] = useState(false);
65
58
 
59
+ useEffect(() => {
60
+ LegendMarketplaceTelemetryHelper.clearSearchSession();
61
+ }, []);
62
+
66
63
  const [activeIndex, setActiveIndex] = useState(0);
67
64
  useEffect(() => {
68
65
  const loadDataProducts = async (): Promise<void> => {
@@ -142,55 +139,8 @@ export const MarketplaceLakehouseHome = observer(() => {
142
139
  return '';
143
140
  };
144
141
 
145
- const newsletterNavigation = (): void => {
146
- applicationStore.navigationService.navigator.visitAddress(
147
- applicationStore.config.options.newsletterUrl,
148
- );
149
- applicationStore.telemetryService.logEvent(
150
- LEGEND_MARKETPLACE_APP_EVENT.CLICK_SUBSCRIBE_TO_NEWSLETTER,
151
- {},
152
- );
153
- };
154
-
155
- const visitAdjacentEnv = (): void => {
156
- if (adjacentUrl) {
157
- applicationStore.navigationService.navigator.visitAddress(adjacentUrl);
158
- }
159
- };
160
-
161
- const handleShowDemo = (): void => {
162
- legendMarketplaceBaseStore.setDemoModal(true);
163
- };
164
-
165
142
  return (
166
143
  <LegendMarketplacePage className="marketplace-lakehouse-home">
167
- <div className="legend-marketplace-home__button-group">
168
- {showDevFeatures && (
169
- <button
170
- onClick={handleShowDemo}
171
- className="legend-marketplace-home__button"
172
- >
173
- <SimpleCalendarIcon className="legend-marketplace-home__button__icon" />
174
- Schedule a Demo
175
- </button>
176
- )}
177
- {adjacentUrl && adjacentEnvState && (
178
- <button
179
- className="legend-marketplace-home__button"
180
- onClick={visitAdjacentEnv}
181
- >
182
- <OpenNewTabIcon className="legend-marketplace-home__button__icon" />
183
- {`${adjacentEnvState.label} Env`}
184
- </button>
185
- )}
186
- <button
187
- className="legend-marketplace-home__button"
188
- onClick={newsletterNavigation}
189
- >
190
- <OpenNewTabIcon className="legend-marketplace-home__button__icon" />
191
- Subscribe to our Newsletter
192
- </button>
193
- </div>
194
144
  <Container className="marketplace-lakehouse-home__search-container">
195
145
  <Box className="marketplace-lakehouse-home__search-container__logo">
196
146
  <img
@@ -35,8 +35,8 @@ import {
35
35
  EntitlementsDataContractViewerState,
36
36
  } from '@finos/legend-extension-dsl-data-product';
37
37
  import {
38
+ generateContractPagePath,
38
39
  generateLakehouseDataProductPath,
39
- generateLakehouseTaskPath,
40
40
  } from '../../../__lib__/LegendMarketplaceNavigation.js';
41
41
 
42
42
  export const LakehouseAdminContractsDashboard = observer(
@@ -143,9 +143,9 @@ export const LakehouseAdminContractsDashboard = observer(
143
143
  )
144
144
  }
145
145
  onRefresh={() => adminStore.refresh()}
146
- getContractTaskUrl={(taskId: string) =>
146
+ getContractTaskUrl={(contractId: string, taskId: string) =>
147
147
  adminStore.legendMarketplaceBaseStore.applicationStore.navigationService.navigator.generateAddress(
148
- generateLakehouseTaskPath(taskId),
148
+ generateContractPagePath(contractId, taskId),
149
149
  )
150
150
  }
151
151
  getDataProductUrl={(dataProductId: string, deploymentId: number) =>