@finos/legend-extension-dsl-data-quality
Version:
Legend extension for Data Quality
101 lines • 9.12 kB
JavaScript
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
/**
* Copyright (c) 2020-present, Goldman Sachs
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { observer } from 'mobx-react-lite';
import { useApplicationStore } from '@finos/legend-application';
import { useEffect } from 'react';
import { guaranteeNonNullable, guaranteeType } from '@finos/legend-shared';
import { flowResult } from 'mobx';
import { getMappingCompatibleRuntimes, PackageableElementExplicitReference, RuntimePointer, } from '@finos/legend-graph';
import { DataQualityClassSelector } from './DataQualitySideBar.js';
import { CheckIcon, createFilter, MenuContentItemIcon, MenuContentItemLabel, MoreHorizontalIcon, PlayIcon, CustomSelectorInput, ControlledDropdownMenu, MenuContent, MenuContentItem, PURE_RuntimeIcon, } from '@finos/legend-art';
import { resolveUsableDataSpaceClasses } from '@finos/legend-extension-dsl-data-space/graph';
import { DataSpaceIcon } from '@finos/legend-extension-dsl-data-space/application';
import { buildDataSpaceOption, buildExecutionContextOption, formatDataSpaceOptionLabel, } from '@finos/legend-extension-dsl-data-space/application-query';
import { buildRuntimeValueOption, getRuntimeOptionFormatter, } from '@finos/legend-query-builder';
export const DataQualityDataSpaceBuilderSetupPanelContent = observer((props) => {
const { dataQualityState } = props;
const { dataQualityQueryBuilderState } = dataQualityState;
const dataSpace = dataQualityState.dataSpace;
if (!dataSpace) {
return null;
}
const applicationStore = useApplicationStore();
// data product
const dataSpaceOptions = dataQualityState.dataSpaces.map(buildDataSpaceOption);
const selectedDataSpaceOption = {
label: dataSpace.title ?? dataSpace.name,
value: {
title: dataSpace.title,
name: dataSpace.name,
path: dataSpace.path,
defaultExecutionContext: dataSpace.defaultExecutionContext.name,
},
};
const executionContextOptions = dataSpace.executionContexts.map(buildExecutionContextOption);
const runtimeOptions = getMappingCompatibleRuntimes(guaranteeNonNullable(dataQualityQueryBuilderState.executionContextState.mapping), dataQualityState.graphManagerState.usableRuntimes)
.map((rt) => new RuntimePointer(PackageableElementExplicitReference.create(rt)))
.map(buildRuntimeValueOption);
const selectedRuntimeOption = dataQualityQueryBuilderState
.executionContextState.runtimeValue
? buildRuntimeValueOption(dataQualityQueryBuilderState.executionContextState.runtimeValue)
: null;
const classes = resolveUsableDataSpaceClasses(dataSpace, guaranteeNonNullable(dataQualityQueryBuilderState.executionContextState.mapping), dataQualityState.graphManagerState);
const onDataSpaceOptionChange = (option) => {
dataQualityState.onDataSpaceChange(option.value);
dataQualityState.updateElementOnDataSpaceChange();
};
const selectedExecutionContextOption = buildExecutionContextOption(dataQualityState.executionContext);
const onExecutionContextOptionChange = (option) => {
if (option.value === dataQualityState.executionContext) {
return;
}
dataQualityState.setExecutionContext(option.value);
dataQualityState.propagateExecutionContextChange(option.value);
dataQualityState.updateElementOnExecutionContextChange(option.value.name);
dataQualityState.onExecutionContextChange?.(option.value);
};
const changeRuntime = (option) => {
if (option.value ===
dataQualityQueryBuilderState.executionContextState.runtimeValue) {
return;
}
dataQualityQueryBuilderState.changeRuntime(option.value);
dataQualityState.onRuntimeChange?.(option.value);
};
const runtimeFilterOption = createFilter({
ignoreCase: true,
ignoreAccents: false,
stringify: (option) => guaranteeType(option.data.value, RuntimePointer).packageableRuntime
.value.path,
});
useEffect(() => {
flowResult(dataQualityState.loadDataSpaces()).catch(applicationStore.alertUnhandledError);
}, [dataQualityState, applicationStore]);
return (_jsxs(_Fragment, { children: [_jsxs("div", { className: "data-quality-validation__setup__config-group", children: [_jsxs("div", { className: "data-quality-validation__setup__config-group__header", children: [_jsx("div", { className: "data-quality-validation__setup__config-group__header__title", children: "data product execution context" }), _jsx(ControlledDropdownMenu, { className: "data-quality-validation__setup__config-group__header__dropdown-trigger", title: "Show Settings...", content: _jsx(MenuContent, { children: _jsxs(MenuContentItem, { onClick: () => dataQualityState.setShowRuntimeSelector(!dataQualityState.showRuntimeSelector), children: [_jsx(MenuContentItemIcon, { children: dataQualityState.showRuntimeSelector ? (_jsx(CheckIcon, {})) : null }), _jsx(MenuContentItemLabel, { children: "Show Runtime Selector" })] }) }), menuProps: {
anchorOrigin: { vertical: 'bottom', horizontal: 'right' },
transformOrigin: { vertical: 'top', horizontal: 'right' },
}, children: _jsx(MoreHorizontalIcon, {}) })] }), _jsxs("div", { className: "data-quality-validation__setup__config-group__content", children: [_jsxs("div", { className: "data-quality-validation__setup__config-group__item", children: [_jsx("div", { className: "btn--sm data-quality-validation__setup__config-group__item__label", title: "data product", children: _jsx(DataSpaceIcon, {}) }), _jsx(CustomSelectorInput, { className: "panel__content__form__section__dropdown data-quality-validation__setup__config-group__item__selector", options: dataSpaceOptions, isLoading: dataQualityState.loadDataSpacesState.isInProgress, onChange: onDataSpaceOptionChange, value: selectedDataSpaceOption, placeholder: "Search for data product...", escapeClearsValue: true, darkMode: !applicationStore.layoutService
.TEMPORARY__isLightColorThemeEnabled, formatOptionLabel: formatDataSpaceOptionLabel })] }), _jsxs("div", { className: "data-quality-validation__setup__config-group__item", children: [_jsx("div", { className: "btn--sm data-quality-validation__setup__config-group__item__label", title: "execution context", children: _jsx(PlayIcon, { className: "data-quality-validation__setup__data-space__icon__execution-context" }) }), _jsx(CustomSelectorInput, { className: "panel__content__form__section__dropdown data-quality-validation__setup__config-group__item__selector", placeholder: "Choose an execution context...", options: executionContextOptions, disabled: executionContextOptions.length < 1 ||
(executionContextOptions.length === 1 &&
Boolean(selectedExecutionContextOption)), onChange: onExecutionContextOptionChange, value: selectedExecutionContextOption, darkMode: !applicationStore.layoutService
.TEMPORARY__isLightColorThemeEnabled })] }), dataQualityState.showRuntimeSelector && (_jsxs("div", { className: "data-quality-validation__setup__config-group__item", children: [_jsx("div", { className: "btn--sm data-quality-validation__setup__config-group__item__label", title: "runtime", children: _jsx(PURE_RuntimeIcon, {}) }), _jsx(CustomSelectorInput, { className: "panel__content__form__section__dropdown data-quality-validation__setup__config-group__item__selector", placeholder: "Choose a runtime...", noMatchMessage: "No compatible runtime found for specified execution context", options: runtimeOptions, onChange: changeRuntime, value: selectedRuntimeOption, darkMode: !applicationStore.layoutService
.TEMPORARY__isLightColorThemeEnabled, filterOption: runtimeFilterOption, formatOptionLabel: getRuntimeOptionFormatter({
darkMode: !applicationStore.layoutService
.TEMPORARY__isLightColorThemeEnabled,
}), disabled: true })] }))] })] }), _jsx(DataQualityClassSelector, { dataQualityState: dataQualityState, classes: classes, noMatchMessage: "No compatible class found for specified execution context" })] }));
});
//# sourceMappingURL=DataQualityDataSpaceBuilder.js.map