@finos/legend-application-data-cube 0.7.34 → 0.7.36
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/components/__test-utils__/LegendDataCubeStoreTestUtils.d.ts.map +1 -1
- package/lib/components/__test-utils__/LegendDataCubeStoreTestUtils.js +12 -0
- package/lib/components/__test-utils__/LegendDataCubeStoreTestUtils.js.map +1 -1
- package/lib/components/builder/LegendDataCubeSourceViewer.js +2 -2
- package/lib/components/builder/LegendDataCubeSourceViewer.js.map +1 -1
- package/lib/components/builder/source/LakehouseConsumerDataCubeSourceBuilder.d.ts.map +1 -1
- package/lib/components/builder/source/LakehouseConsumerDataCubeSourceBuilder.js +72 -38
- package/lib/components/builder/source/LakehouseConsumerDataCubeSourceBuilder.js.map +1 -1
- package/lib/index.css +1 -1
- package/lib/package.json +1 -1
- package/lib/stores/LegendDataCubeDataCubeEngine.d.ts.map +1 -1
- package/lib/stores/LegendDataCubeDataCubeEngine.js +30 -6
- package/lib/stores/LegendDataCubeDataCubeEngine.js.map +1 -1
- package/lib/stores/builder/LegendDataCubeCreatorState.js +1 -1
- package/lib/stores/builder/LegendDataCubeCreatorState.js.map +1 -1
- package/lib/stores/builder/source/LakehouseConsumerDataCubeSourceBuilderState.d.ts +15 -24
- package/lib/stores/builder/source/LakehouseConsumerDataCubeSourceBuilderState.d.ts.map +1 -1
- package/lib/stores/builder/source/LakehouseConsumerDataCubeSourceBuilderState.js +57 -107
- package/lib/stores/builder/source/LakehouseConsumerDataCubeSourceBuilderState.js.map +1 -1
- package/lib/stores/model/LakehouseConsumerDataCubeSource.d.ts +1 -1
- package/lib/stores/model/LakehouseConsumerDataCubeSource.d.ts.map +1 -1
- package/lib/stores/model/LakehouseConsumerDataCubeSource.js +1 -1
- package/lib/stores/model/LakehouseConsumerDataCubeSource.js.map +1 -1
- package/package.json +8 -8
- package/src/components/__test-utils__/LegendDataCubeStoreTestUtils.tsx +15 -0
- package/src/components/builder/LegendDataCubeSourceViewer.tsx +3 -3
- package/src/components/builder/source/LakehouseConsumerDataCubeSourceBuilder.tsx +152 -96
- package/src/stores/LegendDataCubeDataCubeEngine.ts +51 -8
- package/src/stores/builder/LegendDataCubeCreatorState.tsx +1 -1
- package/src/stores/builder/source/LakehouseConsumerDataCubeSourceBuilderState.ts +96 -173
- package/src/stores/model/LakehouseConsumerDataCubeSource.ts +1 -1
|
@@ -18,52 +18,58 @@ import { DataCubeCodeEditor, FormTextInput } from '@finos/legend-data-cube';
|
|
|
18
18
|
import { CustomSelectorInput } from '@finos/legend-art';
|
|
19
19
|
import { useAuth } from 'react-oidc-context';
|
|
20
20
|
import { assertErrorThrown, guaranteeNonNullable } from '@finos/legend-shared';
|
|
21
|
-
import { useEffect } from 'react';
|
|
21
|
+
import { useEffect, type ReactNode } from 'react';
|
|
22
22
|
import type { LakehouseConsumerDataCubeSourceBuilderState } from '../../../stores/builder/source/LakehouseConsumerDataCubeSourceBuilderState.js';
|
|
23
23
|
import { useLegendDataCubeBuilderStore } from '../LegendDataCubeBuilderStoreProvider.js';
|
|
24
24
|
import {
|
|
25
|
-
|
|
26
|
-
type
|
|
27
|
-
} from '@finos/legend-
|
|
28
|
-
import { V1_IngestEnvironmentClassification } from '@finos/legend-graph';
|
|
25
|
+
V1_EntitlementsLakehouseEnvironmentType,
|
|
26
|
+
type V1_EntitlementsDataProductLite,
|
|
27
|
+
} from '@finos/legend-graph';
|
|
29
28
|
|
|
30
29
|
export const LakehouseConsumerDataCubeSourceBuilder: React.FC<{
|
|
31
30
|
sourceBuilder: LakehouseConsumerDataCubeSourceBuilderState;
|
|
32
31
|
}> = observer(({ sourceBuilder }) => {
|
|
33
32
|
const auth = useAuth();
|
|
34
33
|
const store = useLegendDataCubeBuilderStore();
|
|
35
|
-
const envOptions = sourceBuilder.environments
|
|
36
|
-
.map(buildIngestDeploymentServerConfigOption)
|
|
37
|
-
// not include dev
|
|
38
|
-
.filter(
|
|
39
|
-
(config) =>
|
|
40
|
-
config.value.environmentClassification !==
|
|
41
|
-
V1_IngestEnvironmentClassification.DEV,
|
|
42
|
-
)
|
|
43
|
-
.sort(
|
|
44
|
-
(a, b) =>
|
|
45
|
-
a.value.environmentName.localeCompare(b.value.environmentName) ||
|
|
46
|
-
a.value.environmentClassification.localeCompare(
|
|
47
|
-
b.value.environmentClassification,
|
|
48
|
-
),
|
|
49
|
-
);
|
|
50
34
|
|
|
51
|
-
const
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
35
|
+
const renderDataProductLabel = (
|
|
36
|
+
dataProduct: V1_EntitlementsDataProductLite,
|
|
37
|
+
): ReactNode => {
|
|
38
|
+
const title = dataProduct.title;
|
|
39
|
+
const id = guaranteeNonNullable(dataProduct.id);
|
|
40
|
+
// If title is empty, show id only. Otherwise show title (prominent) and id (muted)
|
|
41
|
+
// Main text: slightly larger and normal weight. Subtext: grey and slightly smaller.
|
|
42
|
+
return (
|
|
43
|
+
<div className="flex w-full flex-col items-start">
|
|
44
|
+
<div className="w-full whitespace-normal break-words text-base font-normal text-black">
|
|
45
|
+
{title ?? id}
|
|
46
|
+
</div>
|
|
47
|
+
{title ? (
|
|
48
|
+
<div className="mt-1 w-full truncate text-sm text-neutral-500">
|
|
49
|
+
{id}
|
|
50
|
+
</div>
|
|
51
|
+
) : null}
|
|
52
|
+
</div>
|
|
53
|
+
);
|
|
54
|
+
};
|
|
55
|
+
const renderDataProductMainText = (
|
|
56
|
+
dataProduct: V1_EntitlementsDataProductLite,
|
|
57
|
+
): ReactNode => {
|
|
58
|
+
const title = dataProduct.title;
|
|
59
|
+
const id = guaranteeNonNullable(dataProduct.id);
|
|
60
|
+
// Ensure selected value is vertically centered inside the control by
|
|
61
|
+
// making the label container full-height and centering its content.
|
|
62
|
+
return (
|
|
63
|
+
<div className="flex h-full w-full items-center whitespace-normal break-words text-base font-normal text-black">
|
|
64
|
+
{title ?? id}
|
|
65
|
+
</div>
|
|
66
|
+
);
|
|
59
67
|
};
|
|
60
68
|
|
|
61
69
|
useEffect(() => {
|
|
62
70
|
sourceBuilder.reset();
|
|
63
71
|
try {
|
|
64
72
|
sourceBuilder.loadDataProducts(auth.user?.access_token);
|
|
65
|
-
sourceBuilder.fetchEnvironment(auth.user?.access_token);
|
|
66
|
-
sourceBuilder.fetchUserEntitlementEnvs(auth.user?.access_token);
|
|
67
73
|
} catch (error) {
|
|
68
74
|
assertErrorThrown(error);
|
|
69
75
|
store.alertService.alertUnhandledError(error);
|
|
@@ -73,23 +79,93 @@ export const LakehouseConsumerDataCubeSourceBuilder: React.FC<{
|
|
|
73
79
|
return (
|
|
74
80
|
<div className="flex h-full w-full">
|
|
75
81
|
<div className="m-3 flex w-full flex-col items-stretch gap-2 text-neutral-500">
|
|
82
|
+
<div className="query-setup__wizard__group mt-3">
|
|
83
|
+
<div className="query-setup__wizard__group__title">Mode</div>
|
|
84
|
+
<CustomSelectorInput
|
|
85
|
+
className="query-setup__wizard__selector"
|
|
86
|
+
options={[
|
|
87
|
+
{
|
|
88
|
+
label: 'Production',
|
|
89
|
+
value: V1_EntitlementsLakehouseEnvironmentType.PRODUCTION,
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
label: 'Production (parallel)',
|
|
93
|
+
value:
|
|
94
|
+
V1_EntitlementsLakehouseEnvironmentType.PRODUCTION_PARALLEL,
|
|
95
|
+
},
|
|
96
|
+
]}
|
|
97
|
+
onChange={(newVal: {
|
|
98
|
+
label: string;
|
|
99
|
+
value: V1_EntitlementsLakehouseEnvironmentType;
|
|
100
|
+
}) => {
|
|
101
|
+
sourceBuilder.setEnvMode(newVal.value);
|
|
102
|
+
sourceBuilder.resetDataProduct();
|
|
103
|
+
}}
|
|
104
|
+
value={{
|
|
105
|
+
label:
|
|
106
|
+
sourceBuilder.envMode ===
|
|
107
|
+
V1_EntitlementsLakehouseEnvironmentType.PRODUCTION
|
|
108
|
+
? 'Production'
|
|
109
|
+
: sourceBuilder.envMode ===
|
|
110
|
+
V1_EntitlementsLakehouseEnvironmentType.PRODUCTION_PARALLEL
|
|
111
|
+
? 'Production (parallel)'
|
|
112
|
+
: 'Development',
|
|
113
|
+
value: sourceBuilder.envMode,
|
|
114
|
+
}}
|
|
115
|
+
placeholder="Choose mode"
|
|
116
|
+
isClearable={true}
|
|
117
|
+
escapeClearsValue={true}
|
|
118
|
+
/>
|
|
119
|
+
</div>
|
|
76
120
|
<div className="query-setup__wizard__group mt-3">
|
|
77
121
|
<div className="query-setup__wizard__group__title">Data Product</div>
|
|
78
122
|
<CustomSelectorInput
|
|
79
123
|
className="query-setup__wizard__selector text-nowrap"
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
124
|
+
// give the option rows more height to accommodate wrapped titles
|
|
125
|
+
optionCustomization={{ rowHeight: 56 }}
|
|
126
|
+
options={sourceBuilder.filteredDataProducts.map((dataProduct) => {
|
|
127
|
+
const title = dataProduct.title;
|
|
128
|
+
const id = guaranteeNonNullable(dataProduct.id);
|
|
129
|
+
return {
|
|
130
|
+
label: renderDataProductLabel(dataProduct),
|
|
131
|
+
// include a searchable text so react-select filter can match id/title
|
|
132
|
+
searchText: `${title} ${id}`.trim(),
|
|
133
|
+
value: guaranteeNonNullable(dataProduct),
|
|
134
|
+
};
|
|
135
|
+
})}
|
|
136
|
+
filterOption={(option, rawInput) => {
|
|
137
|
+
const input = rawInput.toLowerCase();
|
|
138
|
+
// option.data may contain our custom searchText
|
|
139
|
+
const data = option.data as { searchText?: string } | undefined;
|
|
140
|
+
|
|
141
|
+
// Prefer a non-empty searchText from data when available
|
|
142
|
+
const searchTextSource =
|
|
143
|
+
data?.searchText && data.searchText.trim() !== ''
|
|
144
|
+
? data.searchText.toLowerCase().trim()
|
|
145
|
+
: ''.trim();
|
|
146
|
+
|
|
147
|
+
// If user hasn't typed anything, show all options
|
|
148
|
+
if (input === '') {
|
|
149
|
+
return true;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
return searchTextSource.includes(input);
|
|
153
|
+
}}
|
|
84
154
|
disabled={
|
|
85
155
|
sourceBuilder.dataProductLoadingState.isInProgress ||
|
|
86
156
|
sourceBuilder.dataProductLoadingState.hasFailed
|
|
87
157
|
}
|
|
88
158
|
isLoading={sourceBuilder.dataProductLoadingState.isInProgress}
|
|
89
|
-
onChange={(
|
|
90
|
-
|
|
159
|
+
onChange={(
|
|
160
|
+
newValue: {
|
|
161
|
+
label: ReactNode;
|
|
162
|
+
searchText?: string;
|
|
163
|
+
value: V1_EntitlementsDataProductLite;
|
|
164
|
+
} | null,
|
|
165
|
+
) => {
|
|
166
|
+
sourceBuilder.setSelectedDataProduct(newValue?.value);
|
|
91
167
|
sourceBuilder
|
|
92
|
-
.
|
|
168
|
+
.fetchAccessPoints()
|
|
93
169
|
.catch((error) =>
|
|
94
170
|
store.alertService.alertUnhandledError(error),
|
|
95
171
|
);
|
|
@@ -97,7 +173,11 @@ export const LakehouseConsumerDataCubeSourceBuilder: React.FC<{
|
|
|
97
173
|
value={
|
|
98
174
|
sourceBuilder.selectedDataProduct
|
|
99
175
|
? {
|
|
100
|
-
label:
|
|
176
|
+
label: renderDataProductMainText(
|
|
177
|
+
sourceBuilder.selectedDataProduct,
|
|
178
|
+
),
|
|
179
|
+
searchText:
|
|
180
|
+
`${sourceBuilder.selectedDataProduct.title ?? ''} ${sourceBuilder.selectedDataProduct.id}`.trim(),
|
|
101
181
|
value: sourceBuilder.selectedDataProduct,
|
|
102
182
|
}
|
|
103
183
|
: null
|
|
@@ -107,71 +187,47 @@ export const LakehouseConsumerDataCubeSourceBuilder: React.FC<{
|
|
|
107
187
|
escapeClearsValue={true}
|
|
108
188
|
/>
|
|
109
189
|
</div>
|
|
110
|
-
{sourceBuilder.
|
|
111
|
-
<div className="query-setup__wizard__group mt-
|
|
112
|
-
<div className="query-setup__wizard__group__title">
|
|
190
|
+
{sourceBuilder.accessPoints.size > 0 && (
|
|
191
|
+
<div className="query-setup__wizard__group mt-2">
|
|
192
|
+
<div className="query-setup__wizard__group__title">
|
|
193
|
+
Access Point
|
|
194
|
+
</div>
|
|
113
195
|
<CustomSelectorInput
|
|
114
|
-
className="query-setup__wizard__selector
|
|
115
|
-
options={
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
196
|
+
className="query-setup__wizard__selector"
|
|
197
|
+
options={Array.from(sourceBuilder.accessPoints.entries()).map(
|
|
198
|
+
([id, title]) => ({
|
|
199
|
+
label: title?.trim() ? title : id,
|
|
200
|
+
value: id,
|
|
201
|
+
}),
|
|
202
|
+
)}
|
|
203
|
+
disabled={false}
|
|
204
|
+
isLoading={false}
|
|
205
|
+
onChange={(newValue: { label: string; value: string } | null) => {
|
|
206
|
+
const value = newValue?.value ?? '';
|
|
207
|
+
const label = newValue?.label ?? '';
|
|
208
|
+
sourceBuilder.setSelectedAccessPoint([value, label]);
|
|
209
|
+
sourceBuilder.setWarehouse(
|
|
210
|
+
sourceBuilder.DEFAULT_CONSUMER_WAREHOUSE,
|
|
211
|
+
);
|
|
212
|
+
sourceBuilder
|
|
213
|
+
.initializeQuery()
|
|
214
|
+
.catch((error) =>
|
|
215
|
+
store.alertService.alertUnhandledError(error),
|
|
216
|
+
);
|
|
126
217
|
}}
|
|
127
|
-
value={
|
|
128
|
-
|
|
218
|
+
value={
|
|
219
|
+
sourceBuilder.selectedAccessPoint
|
|
220
|
+
? {
|
|
221
|
+
label: sourceBuilder.selectedAccessPoint[1],
|
|
222
|
+
value: sourceBuilder.selectedAccessPoint[0],
|
|
223
|
+
}
|
|
224
|
+
: null
|
|
225
|
+
}
|
|
129
226
|
isClearable={false}
|
|
130
227
|
escapeClearsValue={true}
|
|
131
228
|
/>
|
|
132
229
|
</div>
|
|
133
230
|
)}
|
|
134
|
-
{sourceBuilder.accessPoints.length > 0 &&
|
|
135
|
-
sourceBuilder.selectedEnvironment && (
|
|
136
|
-
<div className="query-setup__wizard__group mt-2">
|
|
137
|
-
<div className="query-setup__wizard__group__title">
|
|
138
|
-
Access Point
|
|
139
|
-
</div>
|
|
140
|
-
<CustomSelectorInput
|
|
141
|
-
className="query-setup__wizard__selector"
|
|
142
|
-
options={sourceBuilder.accessPoints.map((accessPoint) => ({
|
|
143
|
-
label: accessPoint,
|
|
144
|
-
value: accessPoint,
|
|
145
|
-
}))}
|
|
146
|
-
disabled={false}
|
|
147
|
-
isLoading={false}
|
|
148
|
-
onChange={(
|
|
149
|
-
newValue: { label: string; value: string } | null,
|
|
150
|
-
) => {
|
|
151
|
-
const accessPoint = newValue?.value ?? '';
|
|
152
|
-
sourceBuilder.setSelectedAccessPoint(accessPoint);
|
|
153
|
-
sourceBuilder.setWarehouse(
|
|
154
|
-
sourceBuilder.DEFAULT_CONSUMER_WAREHOUSE,
|
|
155
|
-
);
|
|
156
|
-
sourceBuilder
|
|
157
|
-
.initializeQuery()
|
|
158
|
-
.catch((error) =>
|
|
159
|
-
store.alertService.alertUnhandledError(error),
|
|
160
|
-
);
|
|
161
|
-
}}
|
|
162
|
-
value={
|
|
163
|
-
sourceBuilder.selectedAccessPoint
|
|
164
|
-
? {
|
|
165
|
-
label: sourceBuilder.selectedAccessPoint,
|
|
166
|
-
value: sourceBuilder.selectedAccessPoint,
|
|
167
|
-
}
|
|
168
|
-
: null
|
|
169
|
-
}
|
|
170
|
-
isClearable={false}
|
|
171
|
-
escapeClearsValue={true}
|
|
172
|
-
/>
|
|
173
|
-
</div>
|
|
174
|
-
)}
|
|
175
231
|
{sourceBuilder.selectedAccessPoint && (
|
|
176
232
|
<div className="query-setup__wizard__group mt-2">
|
|
177
233
|
<div className="query-setup__wizard__group__title">Warehouse</div>
|
|
@@ -171,7 +171,9 @@ import {
|
|
|
171
171
|
RawLakehouseSdlcOrigin,
|
|
172
172
|
} from './model/LakehouseConsumerDataCubeSource.js';
|
|
173
173
|
import {
|
|
174
|
-
|
|
174
|
+
buildEnvNameCompatibleWithLakehouseEnvironmentType,
|
|
175
|
+
getEntitlementsLakehouseEnvironmentTypeCompatibleWithEnvName,
|
|
176
|
+
isLakehouseEnvironmentType,
|
|
175
177
|
type LakehouseContractServerClient,
|
|
176
178
|
type LakehouseIngestServerClient,
|
|
177
179
|
} from '@finos/legend-server-lakehouse';
|
|
@@ -347,7 +349,7 @@ export class LegendDataCubeDataCubeEngine extends DataCubeEngine {
|
|
|
347
349
|
}
|
|
348
350
|
} else if (source instanceof LakehouseConsumerDataCubeSource) {
|
|
349
351
|
return {
|
|
350
|
-
environment: source.
|
|
352
|
+
environment: source.userEnvironment,
|
|
351
353
|
warehouse: source.warehouse,
|
|
352
354
|
deploymentId: source.deploymentId,
|
|
353
355
|
project: source.dpCoordinates
|
|
@@ -849,7 +851,6 @@ export class LegendDataCubeDataCubeEngine extends DataCubeEngine {
|
|
|
849
851
|
rawSource,
|
|
850
852
|
source,
|
|
851
853
|
);
|
|
852
|
-
source.environment = rawSource.environment;
|
|
853
854
|
source.paths = rawSource.paths;
|
|
854
855
|
source.warehouse = rawSource.warehouse;
|
|
855
856
|
source.deploymentId = rawSource.deploymentId;
|
|
@@ -1953,9 +1954,49 @@ export class LegendDataCubeDataCubeEngine extends DataCubeEngine {
|
|
|
1953
1954
|
) {
|
|
1954
1955
|
let pmcd: V1_PureModelContext | undefined;
|
|
1955
1956
|
|
|
1957
|
+
// find user entitled environment
|
|
1958
|
+
const env =
|
|
1959
|
+
await this._lakehouseContractServerClient.getUserEntitlementEnvs(
|
|
1960
|
+
this._application.identityService.currentUser,
|
|
1961
|
+
authStore.getAccessToken(),
|
|
1962
|
+
);
|
|
1963
|
+
const userEnv = guaranteeNonNullable(
|
|
1964
|
+
env.users.map((e) => e.lakehouseEnvironment).at(0),
|
|
1965
|
+
);
|
|
1966
|
+
|
|
1967
|
+
// Backwards-compatible environment handling
|
|
1968
|
+
//
|
|
1969
|
+
// The incoming `rawSource.environment` may be in one of two forms:
|
|
1970
|
+
// 1. An entitlement environment type (the canonical enum used by the entitlements
|
|
1971
|
+
// service, e.g. PRODUCTION / PRODUCTION_PARALLEL / DEVELOPMENT).
|
|
1972
|
+
// 2. A legacy, user-specific environment name string (used by older queries).
|
|
1973
|
+
//
|
|
1974
|
+
// To make the consumer view robust across both representations, we normalize
|
|
1975
|
+
// the raw environment into a runtime-compatible environment name that is
|
|
1976
|
+
// compatible with the current user's entitled environment (`userEnv`). This
|
|
1977
|
+
// preserves the ability for any user to open the view regardless of how the
|
|
1978
|
+
// environment was stored.
|
|
1979
|
+
|
|
1980
|
+
if (isLakehouseEnvironmentType(rawSource.environment)) {
|
|
1981
|
+
const lakehouseEnv =
|
|
1982
|
+
getEntitlementsLakehouseEnvironmentTypeCompatibleWithEnvName(
|
|
1983
|
+
rawSource.environment,
|
|
1984
|
+
);
|
|
1985
|
+
source.userEnvironment =
|
|
1986
|
+
buildEnvNameCompatibleWithLakehouseEnvironmentType(
|
|
1987
|
+
userEnv,
|
|
1988
|
+
lakehouseEnv,
|
|
1989
|
+
);
|
|
1990
|
+
} else {
|
|
1991
|
+
source.userEnvironment =
|
|
1992
|
+
buildEnvNameCompatibleWithLakehouseEnvironmentType(
|
|
1993
|
+
userEnv,
|
|
1994
|
+
rawSource.environment,
|
|
1995
|
+
);
|
|
1996
|
+
}
|
|
1956
1997
|
const runtime = new V1_LakehouseRuntime();
|
|
1957
1998
|
runtime.warehouse = rawSource.warehouse;
|
|
1958
|
-
runtime.environment =
|
|
1999
|
+
runtime.environment = source.userEnvironment;
|
|
1959
2000
|
|
|
1960
2001
|
const packageableRuntime = new V1_PackageableRuntime();
|
|
1961
2002
|
packageableRuntime.runtimeValue = runtime;
|
|
@@ -1985,15 +2026,17 @@ export class LegendDataCubeDataCubeEngine extends DataCubeEngine {
|
|
|
1985
2026
|
),
|
|
1986
2027
|
)
|
|
1987
2028
|
: [];
|
|
1988
|
-
const selectedEnv =
|
|
2029
|
+
const selectedEnv = source.userEnvironment;
|
|
1989
2030
|
const dataProduct = dataProducts.find((dp) => {
|
|
1990
2031
|
const envType = dp.lakehouseEnvironment?.type;
|
|
1991
2032
|
if (!envType) {
|
|
1992
2033
|
return false;
|
|
1993
2034
|
}
|
|
1994
|
-
return
|
|
1995
|
-
|
|
1996
|
-
|
|
2035
|
+
return (
|
|
2036
|
+
envType ===
|
|
2037
|
+
getEntitlementsLakehouseEnvironmentTypeCompatibleWithEnvName(
|
|
2038
|
+
selectedEnv,
|
|
2039
|
+
)
|
|
1997
2040
|
);
|
|
1998
2041
|
});
|
|
1999
2042
|
const fullGraphGrammar = guaranteeType(
|
|
@@ -138,7 +138,7 @@ export class LegendDataCubeCreatorState {
|
|
|
138
138
|
return new LakehouseConsumerDataCubeSourceBuilderState(
|
|
139
139
|
this._application,
|
|
140
140
|
this._engine,
|
|
141
|
-
this._store.
|
|
141
|
+
this._store.depotServerClient,
|
|
142
142
|
this._store.contractServerClient,
|
|
143
143
|
this._alertService,
|
|
144
144
|
);
|