@finos/legend-application-studio
Version:
Legend Studio application core
335 lines • 30.4 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 { BlankPanelPlaceholder, CaretDownIcon, clsx, ContextMenu, CustomSelectorInput, Dialog, ControlledDropdownMenu, InfoCircleIcon, MaskIcon, MenuContent, MenuContentItem, Modal, ModalBody, ModalFooter, ModalFooterButton, ModalHeader, PanelLoadingIndicator, PlusIcon, PURE_ConnectionIcon, RefreshIcon, ResizablePanel, ResizablePanelGroup, ResizablePanelSplitter, ResizablePanelSplitterLine, TimesIcon, } from '@finos/legend-art';
import { getAllIdentifiedServiceConnections, DataElementReference, PackageableElementExplicitReference, Column, } from '@finos/legend-graph';
import { observer } from 'mobx-react-lite';
import { forwardRef, useState } from 'react';
import { createMockPrimitiveValueSpecificationFromRelationalDataType, } from '../../../../../stores/editor/editor-state/element-editor-state/service/testable/ServiceTestDataState.js';
import { EmbeddedDataEditor } from '../../data-editor/EmbeddedDataEditor.js';
import { EmbeddedDataType } from '../../../../../stores/editor/editor-state/ExternalFormatState.js';
import { flowResult } from 'mobx';
import { ActionAlertActionType, ActionAlertType, useApplicationStore, } from '@finos/legend-application';
import { buildElementOption } from '@finos/legend-lego/graph-editor';
import { filterByType, guaranteeNonNullable, prettyCONSTName, } from '@finos/legend-shared';
import { useEditorStore } from '../../../EditorStoreProvider.js';
import { BasicValueSpecificationEditor, LambdaParameterValuesEditor, } from '@finos/legend-query-builder';
import { LEGEND_STUDIO_DOCUMENTATION_KEY } from '../../../../../__lib__/LegendStudioDocumentation.js';
import { getPrimitiveTypeFromRelationalType } from '../../../../../stores/editor/utils/MockDataUtils.js';
export const RowIdentifierEditor = observer((props) => {
const { tableRowIdentifierState, rowIdentifierState } = props;
const applicationStore = useApplicationStore();
const columnOptions = tableRowIdentifierState.table.columns
.filter(filterByType(Column))
.map((_c) => ({
label: _c.name,
value: _c,
}));
const changeColumn = (val) => {
if (rowIdentifierState.column.name !== val.value.name) {
const valueSpec = createMockPrimitiveValueSpecificationFromRelationalDataType(guaranteeNonNullable(rowIdentifierState.column.type), tableRowIdentifierState.connectionTestDataState.editorStore
.graphManagerState.graph, tableRowIdentifierState.connectionTestDataState.editorStore
.changeDetectionState.observerContext);
if (valueSpec) {
rowIdentifierState.updateRowIdentifierValue(valueSpec);
rowIdentifierState.updateRowIdentifierColumn(val.value);
}
}
};
const resetNode = () => {
const valueSpec = createMockPrimitiveValueSpecificationFromRelationalDataType(guaranteeNonNullable(rowIdentifierState.column.type), tableRowIdentifierState.connectionTestDataState.editorStore
.graphManagerState.graph, tableRowIdentifierState.connectionTestDataState.editorStore
.changeDetectionState.observerContext);
if (valueSpec) {
rowIdentifierState.updateRowIdentifierValue(valueSpec);
}
};
return (_jsx("div", { className: "panel__content__form__section__list", children: _jsxs("div", { className: "panel__content__form__section__list__new-item", children: [_jsx(CustomSelectorInput, { className: "service-editor__owner__selector", placeholder: "Choose a column...", options: columnOptions, onChange: changeColumn, value: {
label: rowIdentifierState.column.name,
value: rowIdentifierState.column,
}, darkMode: !applicationStore.layoutService
.TEMPORARY__isLightColorThemeEnabled }), _jsx(BasicValueSpecificationEditor, { valueSpecification: rowIdentifierState.value, setValueSpecification: (val) => {
rowIdentifierState.updateRowIdentifierValue(val);
}, graph: tableRowIdentifierState.connectionTestDataState.editorStore
.graphManagerState.graph, observerContext: tableRowIdentifierState.connectionTestDataState.editorStore
.changeDetectionState.observerContext, typeCheckOption: {
expectedType: guaranteeNonNullable(getPrimitiveTypeFromRelationalType(guaranteeNonNullable(rowIdentifierState.column.type))),
}, resetValue: resetNode }), _jsx("button", { className: "btn--icon btn--dark btn--sm", onClick: () => tableRowIdentifierState.removeRowIdentifierState(rowIdentifierState), tabIndex: -1, title: 'Remove Row', children: _jsx(TimesIcon, {}) })] }) }));
});
export const TableRowIdentifierEditor = observer((props) => {
const { connectionTestDataState, tableRowIdentifierState } = props;
const applicationStore = useApplicationStore();
const tables = connectionTestDataState.getAvailableTables();
const tableOptions = tables.map((_t) => ({
label: `${_t.schema.name}.${_t.name}`,
value: _t,
}));
const changeTable = (val) => {
if (tableRowIdentifierState.table !== val.value) {
tableRowIdentifierState.updateTable(val.value);
tableRowIdentifierState.setNewRowIdentifierState([]);
}
};
const addNewRow = () => {
tableRowIdentifierState.addNewRowIdentifierState(guaranteeNonNullable(tableRowIdentifierState.table.columns.filter(filterByType(Column))[0]));
};
return (_jsxs(ModalBody, { className: "lambda-parameter-values__modal__body", children: [_jsxs("div", { className: "panel__content__form__section", children: [_jsx("div", { className: "panel__content__form__section__header__label", children: "Table" }), _jsx("div", { className: "panel__content__form__section__header__prompt", children: "create seed data below based on root tables" }), _jsx(CustomSelectorInput, { placeholder: "Choose a root table...", options: tableOptions, onChange: changeTable, value: {
label: `${tableRowIdentifierState.table.schema.name}.${tableRowIdentifierState.table.name}`,
value: tableRowIdentifierState.table,
}, darkMode: !applicationStore.layoutService
.TEMPORARY__isLightColorThemeEnabled })] }), _jsxs("div", { className: "panel__content__form__section", children: [_jsx("div", { className: "panel__content__form__section__header__label", children: "Seed Data" }), _jsx("div", { className: "panel__content__form__section__header__prompt", children: "create value for primary key column" }), tableRowIdentifierState.rowIdentifierStates.map((rowIdentifierState) => (_jsx(RowIdentifierEditor, { tableRowIdentifierState: tableRowIdentifierState, rowIdentifierState: rowIdentifierState }, rowIdentifierState._UUID))), _jsx("div", { className: "panel__content__form__section__list__new-item__add", children: _jsx("button", { className: "panel__content__form__section__list__new-item__add-btn btn btn--dark", onClick: addNewRow, tabIndex: -1, title: "Add Seed Data for column", children: "Add Row" }) })] })] }));
});
export const SeedDataInputModal = observer((props) => {
const { connectionTestDataState } = props;
const applicationStore = useApplicationStore();
const useSeedDataInputModal = connectionTestDataState.useSeedDataInputModal;
const closeModal = () => connectionTestDataState.setUseSeedDataInputModal(false);
const generateWithSeedData = () => {
closeModal();
flowResult(connectionTestDataState.generateTestDataWithSeedData()).catch(applicationStore.alertUnhandledError);
};
const addNewTable = () => {
const tables = connectionTestDataState.getAvailableTables();
if (tables[0]) {
connectionTestDataState.addNewTableIdentifierState(tables[0]);
}
};
return (_jsx(Dialog, { open: useSeedDataInputModal, onClose: closeModal, classes: {
root: 'editor-modal__root-container',
container: 'editor-modal__container',
paper: 'editor-modal__content',
}, children: _jsxs(Modal, { darkMode: !applicationStore.layoutService.TEMPORARY__isLightColorThemeEnabled, className: "editor-modal lambda-parameter-values__modal", children: [_jsx(ModalHeader, { title: "Create Seed Data Input (BETA)" }), _jsxs(ModalBody, { className: "lambda-parameter-values__modal__body", children: [connectionTestDataState.tableRowIdentifierStates.map((tableRowIdentifierState) => (_jsx(TableRowIdentifierEditor, { connectionTestDataState: connectionTestDataState, tableRowIdentifierState: tableRowIdentifierState }, tableRowIdentifierState._UUID))), _jsx("button", { className: "panel__content__form__section__list__new-item__add-btn btn btn--dark", onClick: addNewTable, tabIndex: -1, title: "Add Seed Data for table", children: "Add a Different Table" })] }), _jsxs(ModalFooter, { children: [_jsx(ModalFooterButton, { onClick: closeModal, text: "Close", type: "secondary" }), _jsx(ModalFooterButton, { onClick: generateWithSeedData, text: "Generate" })] })] }) }));
});
export const UseDataElementModal = observer((props) => {
const { connectionTestDataState } = props;
const editorStore = connectionTestDataState.editorStore;
const applicationStore = editorStore.applicationStore;
const useSharedModal = connectionTestDataState.useSharedModal;
const closeModal = () => connectionTestDataState.setUseSharedModal(false);
const dataElements = connectionTestDataState.editorStore.graphManagerState.graph.dataElements;
const [dataElement, setDataElement] = useState(dataElements[0]);
const dataElementOptions = editorStore.graphManagerState.usableDataElements.map(buildElementOption);
const selectedDataElement = dataElement
? buildElementOption(dataElement)
: null;
const onDataElementChange = (val) => {
if (val.value !== selectedDataElement?.value && val.value) {
setDataElement(val.value);
}
};
const change = () => {
if (dataElement) {
const value = new DataElementReference();
value.dataElement =
PackageableElementExplicitReference.create(dataElement);
connectionTestDataState.changeEmbeddedData(value);
}
closeModal();
};
const isReadOnly = connectionTestDataState.testDataState.testSuiteState.testableState
.serviceEditorState.isReadOnly;
return (_jsx(Dialog, { open: useSharedModal, onClose: closeModal, classes: { container: 'search-modal__container' }, PaperProps: { classes: { root: 'search-modal__inner-container' } }, children: _jsxs(Modal, { darkMode: !applicationStore.layoutService.TEMPORARY__isLightColorThemeEnabled, className: "service-test-data-modal", children: [_jsx(ModalBody, { children: _jsxs("div", { className: "panel__content__form__section", children: [_jsx("div", { className: "panel__content__form__section__header__label", children: "Data Element" }), _jsx("div", { className: "explorer__new-element-modal__driver", children: _jsx(CustomSelectorInput, { className: "panel__content__form__section__dropdown data-element-reference-editor__value__dropdown", disabled: false, options: dataElementOptions, onChange: onDataElementChange, value: selectedDataElement, darkMode: !applicationStore.layoutService
.TEMPORARY__isLightColorThemeEnabled }) })] }) }), _jsx(ModalFooter, { children: _jsx(ModalFooterButton, { className: "database-builder__action--btn", disabled: isReadOnly, onClick: change, title: "Change to use Shared Data", children: "Change" }) })] }) }));
});
export const ConnectionTestDataEditor = observer((props) => {
const { connectionTestDataState } = props;
const applicationStore = useApplicationStore();
const USER_ATTESTATION_MESSAGE = 'Data generated has not been anonmyized. I attest that I am aware of the sensitive data leakage risk when using real data in tests.';
const isReadOnly = connectionTestDataState.testDataState.testSuiteState.testableState
.serviceEditorState.isReadOnly;
const dataElements = connectionTestDataState.editorStore.graphManagerState.graph.dataElements;
const openShared = () => {
if (dataElements.length) {
connectionTestDataState.setUseSharedModal(true);
}
};
// test data
const anonymizeGeneratedData = connectionTestDataState.anonymizeGeneratedData;
const toggleAnonymizeGeneratedData = () => {
connectionTestDataState.setAnonymizeGeneratedData(!anonymizeGeneratedData);
};
const confirmGenerateUnAnonmyizedData = () => {
applicationStore.alertService.setActionAlertInfo({
message: USER_ATTESTATION_MESSAGE,
type: ActionAlertType.CAUTION,
actions: [
{
label: 'Accept',
type: ActionAlertActionType.PROCEED_WITH_CAUTION,
handler: applicationStore.guardUnhandledError(() => flowResult(connectionTestDataState.generateTestData())),
},
{
label: 'Decline',
type: ActionAlertActionType.PROCEED,
default: true,
},
],
});
};
const generateTestData = () => {
if (!anonymizeGeneratedData) {
confirmGenerateUnAnonmyizedData();
}
else {
flowResult(connectionTestDataState.generateTestData()).catch(applicationStore.alertUnhandledError);
}
};
const generateTestDataWithSeedData = () => {
connectionTestDataState.setUseSeedDataInputModal(true);
connectionTestDataState.setNewTableIdentifierState([]);
const table = connectionTestDataState.getAvailableTables()[0];
if (table) {
connectionTestDataState.addNewTableIdentifierState(table);
}
};
const generateQuerySchemas = () => {
flowResult(connectionTestDataState.generateQuerySchemas()).catch(applicationStore.alertUnhandledError);
};
return (_jsxs("div", { className: "service-test-data-editor", children: [_jsxs("div", { className: "service-test-suite-editor__header", children: [_jsx("div", { className: "service-test-suite-editor__header__title", children: _jsx("div", { className: "service-test-suite-editor__header__title__label", children: "data" }) }), _jsxs("div", { className: "panel__header__actions", children: [_jsx("div", { className: clsx('panel__content__form__section__toggler', {
'panel__content__form__section__toggler--disabled': isReadOnly,
}), onClick: toggleAnonymizeGeneratedData, children: _jsx("button", { className: clsx('btn--sm service-execution-editor__test-data__anonymize-btn', {
'service-execution-editor__test-data__anonymize-btn--active': anonymizeGeneratedData,
}), disabled: isReadOnly, tabIndex: -1, title: `[${anonymizeGeneratedData ? 'on' : 'off'}] Anonymize Test Data`, children: _jsx(MaskIcon, {}) }) }), _jsxs("div", { className: "btn__dropdown-combo btn__dropdown-combo--primary", children: [_jsxs("button", { className: "btn__dropdown-combo__label", onClick: generateTestData, title: "Generate test data if possible", disabled: connectionTestDataState.generatingTestDataState.isInProgress, tabIndex: -1, children: [_jsx(RefreshIcon, { className: "btn__dropdown-combo__label__icon" }), _jsx("div", { className: "btn__dropdown-combo__label__title", children: "Generate" })] }), _jsx(ControlledDropdownMenu, { className: "btn__dropdown-combo__dropdown-btn", content: _jsxs(MenuContent, { children: [_jsx(MenuContentItem, { className: "btn__dropdown-combo__option", onClick: generateQuerySchemas, disabled: connectionTestDataState.generateSchemaQueryState
.isInProgress, children: "Generate Query Schemas" }), _jsx(MenuContentItem, { className: "btn__dropdown-combo__option", onClick: generateTestDataWithSeedData, disabled: connectionTestDataState
.generatingTestDataWithSeedDataState.isInProgress, children: "Generate with Seed Data (Beta)" })] }), menuProps: {
anchorOrigin: { vertical: 'bottom', horizontal: 'right' },
transformOrigin: { vertical: 'top', horizontal: 'right' },
}, children: _jsx(CaretDownIcon, {}) })] }), _jsx("button", { className: "panel__header__action service-execution-editor__test-data__generate-btn", onClick: openShared, title: "Use Shared Data via Defined Data Element", disabled: connectionTestDataState.generatingTestDataState.isInProgress ||
!dataElements.length, tabIndex: -1, children: _jsx("div", { className: "service-execution-editor__test-data__generate-btn__label", children: _jsx("div", { className: "service-execution-editor__test-data__generate-btn__label__title", children: "Shared Data" }) }) })] })] }), _jsx(EmbeddedDataEditor, { isReadOnly: isReadOnly, embeddedDataEditorState: connectionTestDataState.embeddedEditorState }), connectionTestDataState.parametersState.parameterValuesEditorState
.showModal && (_jsx(LambdaParameterValuesEditor, { graph: connectionTestDataState.editorStore.graphManagerState.graph, observerContext: connectionTestDataState.editorStore.changeDetectionState
.observerContext, lambdaParametersState: connectionTestDataState.parametersState })), connectionTestDataState.useSharedModal && (_jsx(UseDataElementModal, { connectionTestDataState: connectionTestDataState })), connectionTestDataState.useSeedDataInputModal && (_jsx(SeedDataInputModal, { connectionTestDataState: connectionTestDataState }))] }));
});
const ConnectionTestDataContextMenu = observer(forwardRef(function TestContainerContextMenu(props, ref) {
const { deleteConnectionData } = props;
const remove = () => deleteConnectionData();
return (_jsx(MenuContent, { ref: ref, children: _jsx(MenuContentItem, { onClick: remove, children: "Delete" }) }));
}));
const ConnectionTestDataItem = observer((props) => {
const { connectionTestData, serviceTestDataState } = props;
const [isSelectedFromContextMenu, setIsSelectedFromContextMenu] = useState(false);
const isReadOnly = serviceTestDataState.testSuiteState.testableState.serviceEditorState
.isReadOnly;
const openConnectionTestData = () => serviceTestDataState.openConnectionTestData(connectionTestData);
const isActive = serviceTestDataState.selectedDataState?.connectionData ===
connectionTestData;
const deleteConnectionTestData = () => serviceTestDataState.deleteConnectionTestData(connectionTestData);
const onContextMenuOpen = () => setIsSelectedFromContextMenu(true);
const onContextMenuClose = () => setIsSelectedFromContextMenu(false);
return (_jsx(ContextMenu, { className: clsx('testable-test-assertion-explorer__item', {
'testable-test-assertion-explorer__item--selected-from-context-menu': !isActive && isSelectedFromContextMenu,
}, { 'testable-test-assertion-explorer__item--active': isActive }), disabled: isReadOnly, content: _jsx(ConnectionTestDataContextMenu, { connectionTestData: connectionTestData, deleteConnectionData: deleteConnectionTestData }), menuProps: { elevation: 7 }, onOpen: onContextMenuOpen, onClose: onContextMenuClose, children: _jsxs("button", { className: clsx('testable-test-assertion-explorer__item__label'), onClick: openConnectionTestData, tabIndex: -1, children: [_jsx("div", { className: "testable-test-assertion-explorer__item__label__icon testable-test-assertion-explorer__test-result-indicator__container", children: _jsx(PURE_ConnectionIcon, {}) }), _jsx("div", { className: "testable-test-assertion-explorer__item__label__text", children: connectionTestData.connectionId })] }) }));
});
export const NewConnectionDataModal = observer((props) => {
const { testDataState } = props;
const editorStore = useEditorStore();
const applicationStore = editorStore.applicationStore;
const dataElementOptions = editorStore.graphManagerState.usableDataElements.map(buildElementOption);
const newConnectionState = testDataState.newConnectionDataState;
const dataElement = newConnectionState.dataElement;
const selectedDataElement = dataElement
? buildElementOption(dataElement)
: null;
const onDataElementChange = (val) => {
if (val.value !== selectedDataElement?.value && val.value) {
newConnectionState.setDataElement(val.value);
}
};
const isReadOnly = testDataState.testSuiteState.testableState.serviceEditorState.isReadOnly;
const service = testDataState.testSuiteState.testableState.serviceEditorState.service;
const closeModal = () => newConnectionState.setModal(false);
const allIdentifiedConnections = getAllIdentifiedServiceConnections(service);
const connectionOptions = allIdentifiedConnections.map((e) => ({
label: e.id,
value: e,
}));
const selectedConnection = newConnectionState.connection
? {
label: newConnectionState.connection.id,
value: newConnectionState.connection,
}
: undefined;
const isDisabled = isReadOnly ||
!allIdentifiedConnections.length ||
Boolean(testDataState.testData.connectionsTestData.find((c) => c.connectionId === selectedConnection?.value.id));
const onConnectionSelectionChange = (val) => {
if (val.value === undefined) {
newConnectionState.setConnection(undefined);
}
else if (val.value !== selectedConnection?.value) {
newConnectionState.setConnection(val.value);
}
};
// external format
const selectedEmbeddedType = newConnectionState.embeddedDataType
? {
label: prettyCONSTName(newConnectionState.embeddedDataType.value),
value: newConnectionState.embeddedDataType.value,
}
: undefined;
const extraOptionTypes = editorStore.pluginManager
.getApplicationPlugins()
.flatMap((plugin) => plugin.getExtraEmbeddedDataTypeOptions?.() ?? []);
const embeddedOptions = [
...Object.values(EmbeddedDataType).map((typeOption) => ({
label: prettyCONSTName(typeOption),
value: typeOption,
})),
...extraOptionTypes,
];
const onEmbeddedTypeChange = (val) => {
if (!val) {
newConnectionState.setEmbeddedDataType(undefined);
}
else {
newConnectionState.setEmbeddedDataType(val);
}
};
return (_jsx(Dialog, { open: newConnectionState.showModal, onClose: closeModal, classes: { container: 'search-modal__container' }, PaperProps: { classes: { root: 'search-modal__inner-container' } }, children: _jsxs("form", { onSubmit: (event) => {
event.preventDefault();
const connection = newConnectionState.connection;
const data = newConnectionState.embeddedDataType;
if (connection && data) {
testDataState.createConnectionTestData();
closeModal();
}
}, className: "modal service-test-data-modal modal--dark", children: [_jsx(ModalHeader, { title: "Create A Connection Test Data" }), _jsxs(ModalBody, { children: [_jsxs("div", { className: "panel__content__form__section", children: [_jsx("div", { className: "panel__content__form__section__header__label", children: "Connection ID" }), _jsx("div", { className: "panel__content__form__section__header__prompt", children: "Connection in runtime to povide test data for" }), _jsx("div", { className: "explorer__new-element-modal__driver", children: _jsx(CustomSelectorInput, { className: "explorer__new-element-modal__driver__dropdown", options: connectionOptions, onChange: onConnectionSelectionChange, value: selectedConnection, isClearable: false, darkMode: !applicationStore.layoutService
.TEMPORARY__isLightColorThemeEnabled }) })] }), _jsxs("div", { className: "panel__content__form__section", children: [_jsx("div", { className: "panel__content__form__section__header__label", children: "Data Type" }), _jsx("div", { className: "panel__content__form__section__header__prompt", children: "Test data type that will be loaded to your test connection" }), _jsx("div", { className: "explorer__new-element-modal__driver", children: _jsx(CustomSelectorInput, { className: "explorer__new-element-modal__driver__dropdown", options: embeddedOptions, onChange: onEmbeddedTypeChange, value: selectedEmbeddedType, isClearable: false, darkMode: !applicationStore.layoutService
.TEMPORARY__isLightColorThemeEnabled }) })] }), selectedEmbeddedType?.value === EmbeddedDataType.DATA_ELEMENT && (_jsxs("div", { className: "panel__content__form__section", children: [_jsx("div", { className: "panel__content__form__section__header__label", children: "Data Element" }), _jsx("div", { className: "explorer__new-element-modal__driver", children: _jsx(CustomSelectorInput, { className: "panel__content__form__section__dropdown data-element-reference-editor__value__dropdown", disabled: isReadOnly, options: dataElementOptions, onChange: onDataElementChange, value: selectedDataElement, darkMode: !applicationStore.layoutService
.TEMPORARY__isLightColorThemeEnabled }) })] }))] }), _jsxs(ModalFooter, { children: [_jsx(ModalFooterButton, { onClick: closeModal, text: "Cancel", type: "secondary", preventFormSubmit: true }), _jsx(ModalFooterButton, { text: "Create", disabled: isDisabled })] })] }) }));
});
export const ServiceTestDataEditor = observer((props) => {
const { testDataState } = props;
const applicationStore = useApplicationStore();
const testData = testDataState.testData;
const newConnectionDataState = testDataState.newConnectionDataState;
const identifedConnections = getAllIdentifiedServiceConnections(testDataState.testSuiteState.testableState.service);
const selectedDataState = testDataState.selectedDataState;
const hideExplorer = identifedConnections.length === 1 &&
testData.connectionsTestData.length === 1 &&
testData.connectionsTestData[0]?.connectionId ===
identifedConnections[0]?.id;
const addConnectionTestData = () => {
testDataState.newConnectionDataState.openModal();
};
const seeDocumentation = () => applicationStore.assistantService.openDocumentationEntry(LEGEND_STUDIO_DOCUMENTATION_KEY.QUESTION_HOW_TO_WRITE_SERVICE_CONNECTION_TEST_DATA);
return (_jsxs("div", { className: "service-test-data-editor panel", children: [_jsx("div", { className: "service-test-suite-editor__header", children: _jsx("div", { className: "service-test-suite-editor__header__title", children: _jsx("div", { className: "service-test-suite-editor__header__title__label service-test-suite-editor__header__title__label--data", children: "Test DATA" }) }) }), _jsxs("div", { className: "service-test-data-editor__data", children: [!testData.connectionsTestData.length && (_jsx(BlankPanelPlaceholder, { text: "Add Connection Test Data", onClick: addConnectionTestData, clickActionType: "add", tooltipText: "Click to add connection test data" })), _jsx(PanelLoadingIndicator, { isLoading: Boolean(testDataState.selectedDataState?.generatingTestDataState
.isInProgress) ||
Boolean(testDataState.selectedDataState?.generateSchemaQueryState
.isInProgress) ||
Boolean(testDataState.selectedDataState
?.generatingTestDataWithSeedDataState.isInProgress) }), hideExplorer && selectedDataState ? (_jsx(_Fragment, { children: _jsx(ConnectionTestDataEditor, { connectionTestDataState: selectedDataState }) })) : (_jsxs(ResizablePanelGroup, { orientation: "vertical", children: [_jsxs(ResizablePanel, { minSize: 100, children: [_jsxs("div", { className: "binding-editor__header", children: [_jsx("div", { className: "binding-editor__header__title", children: _jsxs("div", { className: "binding-editor__header__title__label", children: ["connections", _jsx("button", { className: "binding-editor__header__title__label__hint", tabIndex: -1, onClick: seeDocumentation, title: "click to see more details on connection test data", children: _jsx(InfoCircleIcon, {}) })] }) }), _jsx("div", { className: "panel__header__actions", children: _jsx("button", { className: "panel__header__action", tabIndex: -1, onClick: addConnectionTestData, title: "Add Connection Test Data", children: _jsx(PlusIcon, {}) }) })] }), _jsx("div", { children: testData.connectionsTestData.map((connectionTestData) => (_jsx(ConnectionTestDataItem, { serviceTestDataState: testDataState, connectionTestData: connectionTestData }, connectionTestData.connectionId))) })] }), _jsx(ResizablePanelSplitter, { children: _jsx(ResizablePanelSplitterLine, { color: "var(--color-dark-grey-200)" }) }), _jsxs(ResizablePanel, { minSize: 600, children: [testDataState.selectedDataState && (_jsx(ConnectionTestDataEditor, { connectionTestDataState: testDataState.selectedDataState })), newConnectionDataState.showModal && (_jsx(NewConnectionDataModal, { testDataState: testDataState }))] })] }))] })] }));
});
//# sourceMappingURL=ServiceTestDataEditor.js.map