UNPKG

@finos/legend-extension-dsl-data-quality

Version:
99 lines 7.46 kB
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 { buildElementOption, getPackageableElementOptionFormatter, } from '@finos/legend-lego/graph-editor'; import { getMappingCompatibleClasses, getMappingCompatibleRuntimes, PackageableElementExplicitReference, RuntimePointer, } from '@finos/legend-graph'; import { createFilter, CustomSelectorInput, PURE_MappingIcon, PURE_RuntimeIcon, } from '@finos/legend-art'; import { DataQualityClassSelector } from './DataQualitySideBar.js'; import { buildRuntimeValueOption, getRuntimeOptionFormatter, } from '@finos/legend-query-builder'; import { at, guaranteeNonNullable } from '@finos/legend-shared'; export const DataQualityMappingAndRuntimeBuilder = observer((props) => { const { dataQualityState } = props; const { dataQualityQueryBuilderState } = dataQualityState; const applicationStore = useApplicationStore(); const getRuntimesBasedOnMapping = () => dataQualityQueryBuilderState.executionContextState.mapping ? getMappingCompatibleRuntimes(dataQualityQueryBuilderState.executionContextState.mapping, dataQualityState.graphManagerState.usableRuntimes).map((rt) => new RuntimePointer(PackageableElementExplicitReference.create(rt))) : []; const mappingOptions = dataQualityState.graphManagerState.usableMappings.map(buildElementOption); const selectedMappingOption = dataQualityQueryBuilderState .executionContextState.mapping ? buildElementOption(dataQualityQueryBuilderState.executionContextState.mapping) : null; const changeMapping = (val) => { if (val.value === dataQualityQueryBuilderState.executionContextState.mapping || dataQualityState.isMappingReadOnly) { return; } dataQualityState.changeMapping(val.value); const runtimeOptions = getRuntimesBasedOnMapping(); if (runtimeOptions.length) { dataQualityQueryBuilderState.changeRuntime(at(runtimeOptions, 0)); } dataQualityState.updateElementOnMappingChange(); const classes = getMappingCompatibleClasses(guaranteeNonNullable(dataQualityQueryBuilderState.executionContextState.mapping), dataQualityState.graphManagerState.usableClasses); if (runtimeOptions.length && classes.length) { dataQualityState.changeSourceElement(at(classes, 0)); dataQualityState.updateElementOnClassChange(); } }; const mappingFilterOption = createFilter({ ignoreCase: true, ignoreAccents: false, stringify: (option) => option.data.value.path, }); const runtimeOptions = getRuntimesBasedOnMapping().map(buildRuntimeValueOption); const selectedRuntimeOption = dataQualityQueryBuilderState .executionContextState.runtimeValue ? buildRuntimeValueOption(dataQualityQueryBuilderState.executionContextState.runtimeValue) : null; const classes = selectedRuntimeOption ? getMappingCompatibleClasses(guaranteeNonNullable(dataQualityQueryBuilderState.executionContextState.mapping), dataQualityState.graphManagerState.usableClasses) : []; const changeRuntime = (val) => { if (val.value === dataQualityQueryBuilderState.executionContextState.runtimeValue || dataQualityState.isRuntimeReadOnly) { return; } dataQualityQueryBuilderState.changeRuntime(val.value); dataQualityState.updateElementOnRuntimeChange(val.value); }; const runtimeFilterOption = createFilter({ ignoreCase: true, ignoreAccents: false, stringify: (option) => option.data.value instanceof RuntimePointer ? option.data.value.packageableRuntime.value.path : 'custom', }); return (_jsxs(_Fragment, { children: [_jsxs("div", { className: "data-quality-validation__setup__config-group", children: [_jsx("div", { className: "data-quality-validation__setup__config-group__header", children: _jsx("div", { className: "data-quality-validation__setup__config-group__header__title", children: "execution context" }) }), _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: "mapping", children: _jsx(PURE_MappingIcon, {}) }), _jsx(CustomSelectorInput, { className: "panel__content__form__section__dropdown data-quality-validation__setup__config-group__item__selector", placeholder: mappingOptions.length ? 'Choose a mapping...' : 'No mapping found', disabled: dataQualityState.isMappingReadOnly, options: mappingOptions, onChange: changeMapping, value: selectedMappingOption, darkMode: !applicationStore.layoutService .TEMPORARY__isLightColorThemeEnabled, filterOption: mappingFilterOption, formatOptionLabel: getPackageableElementOptionFormatter({ darkMode: !applicationStore.layoutService .TEMPORARY__isLightColorThemeEnabled, }) })] }), _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: runtimeOptions.length ? 'Choose a runtime...' : 'No runtime found', disabled: dataQualityState.isRuntimeReadOnly || !dataQualityQueryBuilderState.executionContextState.mapping, options: runtimeOptions, onChange: changeRuntime, value: selectedRuntimeOption, darkMode: !applicationStore.layoutService .TEMPORARY__isLightColorThemeEnabled, filterOption: runtimeFilterOption, formatOptionLabel: getRuntimeOptionFormatter({ darkMode: !applicationStore.layoutService .TEMPORARY__isLightColorThemeEnabled, }) })] })] })] }), _jsx(DataQualityClassSelector, { dataQualityState: dataQualityState, classes: classes })] })); }); //# sourceMappingURL=DataQualityMappingAndRuntimeBuilder.js.map