UNPKG

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

Version:
83 lines 7.07 kB
import { jsx as _jsx, jsxs as _jsxs } 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 { useCallback, useRef } from 'react'; import { observer } from 'mobx-react-lite'; import { FilledWindowMaximizeIcon, PanelDnDEntry, PanelEntryDragHandle, RocketIcon, TimesIcon, useDragPreviewLayer, clsx, } from '@finos/legend-art'; import { flowResult } from 'mobx'; import { PrimitiveType } from '@finos/legend-graph'; import { ApplicationNavigationContextData, useApplicationStore, } from '@finos/legend-application'; import { InlineLambdaEditor } from '@finos/legend-query-builder'; import { DATA_QUALITY_RELATION_VALIDATION_EDITOR_TAB, } from './states/DataQualityRelationValidationConfigurationState.js'; import { dataQualityRelationValidation_setDescription, dataQualityRelationValidation_setName, dataQualityRelationValidation_swapValidations, } from '../graph-manager/DSL_DataQuality_GraphModifierHelper.js'; import { DataQualityValidationDetailPanel } from './DataQualityValidationDetailPanel.js'; import { useDrag, useDrop } from 'react-dnd'; import { DSL_DATA_QUALITY_LEGEND_STUDIO_APPLICATION_NAVIGATION_CONTEXT_KEY } from '../__lib__/studio/DSL_DataQuality_LegendStudioApplicationNavigationContext.js'; export const RELATION_VALIDATION_DND_TYPE = 'RELATION_VALIDATION'; export const DataQualityRelationValidationEditor = observer((props) => { const ref = useRef(null); const handleRef = useRef(null); const { validation, deleteValidation, relationValidationConfigurationState, isReadOnly, } = props; const applicationStore = useApplicationStore(); const hasParserError = relationValidationConfigurationState.validationStates.some((state) => Boolean(state.parserError)); const validationState = relationValidationConfigurationState.getValidationState(validation); const changeName = (event) => dataQualityRelationValidation_setName(validation, event.target.value); const changeDescription = (event) => dataQualityRelationValidation_setDescription(validation, event.target.value); const handleHover = useCallback((item) => { const draggingProperty = item.validation; const hoveredProperty = validation; dataQualityRelationValidation_swapValidations(relationValidationConfigurationState.validationElement, draggingProperty, hoveredProperty); }, [relationValidationConfigurationState.validationElement, validation]); const [{ isBeingDraggedValidation }, dropConnector] = useDrop(() => ({ accept: [RELATION_VALIDATION_DND_TYPE], hover: (item) => handleHover(item), collect: (monitor) => ({ isBeingDraggedValidation: monitor.getItem()?.validation, }), }), [handleHover]); const isBeingDragged = validation === isBeingDraggedValidation; const [, dragConnector, dragPreviewConnector] = useDrag(() => ({ type: RELATION_VALIDATION_DND_TYPE, item: () => ({ validation: validation, }), }), [validation]); dragConnector(handleRef); dropConnector(ref); useDragPreviewLayer(dragPreviewConnector); // Actions const onLambdaEditorFocus = (isAssertion) => applicationStore.navigationContextService.push(ApplicationNavigationContextData.createTransient(DSL_DATA_QUALITY_LEGEND_STUDIO_APPLICATION_NAVIGATION_CONTEXT_KEY.VALIDATION_ASSERTION_EDITOR)); const remove = applicationStore.guardUnhandledError(async () => { await flowResult(validationState.convertLambdaObjectToGrammarString({ pretty: false })); deleteValidation(); }); const runQuery = () => { relationValidationConfigurationState.setSelectedTab(DATA_QUALITY_RELATION_VALIDATION_EDITOR_TAB.TRIAL_RUN); if (!relationValidationConfigurationState.resultState.isRunningValidation) { relationValidationConfigurationState.resetResultState(); relationValidationConfigurationState.resultState.setValidationToRun(validation); relationValidationConfigurationState.resultState.handleRunValidation(); } }; const openValidationDialog = () => { validationState.setIsValidationDialogOpen(true); }; return (_jsxs(PanelDnDEntry, { ref: ref, placeholder: _jsx("div", { className: "uml-element-editor__dnd__placeholder" }), className: "relation-validation__container", showPlaceholder: isBeingDragged, children: [_jsxs("div", { className: clsx('relation-validation', { backdrop__element: validationState.parserError, }), children: [_jsxs("div", { className: "relation-validation__content", children: [_jsx(PanelEntryDragHandle, { dragSourceConnector: handleRef, isDragging: isBeingDragged }), _jsx("input", { className: "relation-validation__content__name", spellCheck: false, disabled: isReadOnly, value: validation.name, onChange: changeName, placeholder: "Validation name" }), !isReadOnly && (_jsx("button", { className: "uml-element-editor__remove-btn", onClick: remove, tabIndex: -1, title: "Remove", children: _jsx(TimesIcon, {}) })), _jsx("button", { className: "uml-element-editor__remove-btn", onClick: runQuery, tabIndex: -1, title: "Run Validation", disabled: hasParserError, children: _jsx(RocketIcon, {}) }), _jsx("button", { className: "uml-element-editor__remove-btn", onClick: openValidationDialog, tabIndex: -1, title: "Open Validation Details dialog", children: _jsx(FilledWindowMaximizeIcon, {}) })] }), _jsxs("div", { className: "data-quality-uml-element-editor__lambda", children: [_jsx("div", { className: "data-quality-uml-element-editor__lambda__label", children: "Assertion" }), _jsx("div", { className: "data-quality-uml-element-editor__lambda__value", children: _jsx(InlineLambdaEditor, { disabled: relationValidationConfigurationState.isConvertingValidationLambdaObjects || isReadOnly, lambdaEditorState: validationState, forceBackdrop: hasParserError, expectedType: PrimitiveType.BOOLEAN, onEditorFocus: () => onLambdaEditorFocus(true), disablePopUp: true, className: "relation-validation__lambda" }) })] })] }), validationState.isValidationDialogOpen && (_jsx(DataQualityValidationDetailPanel, { dataQualityRelationValidationState: relationValidationConfigurationState, isReadOnly: isReadOnly, relationValidationState: validationState, changeName: changeName, changeDescription: changeDescription, onLambdaEditorFocus: onLambdaEditorFocus, forceBackdrop: hasParserError }))] })); }); //# sourceMappingURL=DataQualityRelationValidationEditor.js.map