@finos/legend-application-studio
Version:
Legend Studio application core
97 lines • 11.9 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 { forwardRef, useEffect } from 'react';
import { observer } from 'mobx-react-lite';
import { LEGEND_STUDIO_TEST_ID } from '../../../__lib__/LegendStudioTesting.js';
import { useEditorStore } from '../EditorStoreProvider.js';
import { ContextMenu, PanelContent, PURE_ServiceIcon, clsx, PlayIcon, Dialog, Modal, TimesIcon, CheckCircleIcon, CircleNotchIcon, TimesCircleIcon, EmptyCircleIcon, MenuContentItem, MenuContent, ModalBody, ModalHeader, ModalFooter, ModalFooterButton, CheckSquareIcon, SquareIcon, } from '@finos/legend-art';
import { REGISTRATION_RESULT, getServiceRegistrationResult, } from '../../../stores/editor/sidebar-state/BulkServiceRegistrationState.js';
import { BulkServiceRegistrationEditor } from '../editor-group/service-editor/BulkServiceRegistrationEditor.js';
import { guaranteeNonNullable, noop } from '@finos/legend-shared';
import { ServiceRegistrationFail, ServiceRegistrationSuccess, } from '@finos/legend-graph';
import { generateServiceManagementUrl } from '../../../stores/editor/editor-state/element-editor-state/service/ServiceRegistrationState.js';
import { useApplicationStore } from '@finos/legend-application';
import { CODE_EDITOR_LANGUAGE } from '@finos/legend-code-editor';
import { CodeEditor } from '@finos/legend-lego/code-editor';
export const getRegistrationStatusIcon = (isSelected, registrationResult) => {
if (registrationResult === REGISTRATION_RESULT.SUCCESS) {
return (_jsx("div", { title: "Service registered successfully", className: "bulk-service-registration__item__link__content__status__indicator bulk-service-registration__item__link__content__status__indicator--succeeded", children: _jsx(CheckCircleIcon, {}) }));
}
else if (registrationResult === REGISTRATION_RESULT.IN_PROGRESS &&
isSelected) {
return (_jsx("div", { title: "Service registration in progress", className: "bulk-service-registration__item__link__content__status__indicator bulk-service-registration__item__link__content__status__indicator--in-progress", children: _jsx(CircleNotchIcon, {}) }));
}
else if (registrationResult === REGISTRATION_RESULT.FAILED) {
return (_jsx("div", { title: "Service Registration Failed", className: "bulk-service-registration__item__link__content__status__indicator bulk-service-registration__item__link__content__status__indicator--failed", children: _jsx(TimesCircleIcon, {}) }));
}
else {
return (_jsx("div", { title: "Service is not registered", className: "bulk-service-registration__item__link__content__status__indicator bulk-service-registration__item__link__content__status__indicator--unknown", children: _jsx(EmptyCircleIcon, {}) }));
}
};
const ServiceContextMenu = observer(forwardRef(function ServiceContextMenu(props, ref) {
const { serviceState, globalServiceRegistrationState } = props;
const applicationStore = useApplicationStore();
return (_jsxs(MenuContent, { children: [serviceState.registrationResult instanceof
ServiceRegistrationSuccess && (_jsx(MenuContentItem, { onClick: () => {
const config = guaranteeNonNullable(globalServiceRegistrationState.serviceConfigState.options.find((info) => info.env ===
globalServiceRegistrationState.serviceConfigState
.serviceEnv));
applicationStore.navigationService.navigator.visitAddress(generateServiceManagementUrl(config.managementUrl, serviceState.service.pattern));
}, children: "Launch Service" })), serviceState.registrationResult instanceof ServiceRegistrationFail && (_jsx(MenuContentItem, { onClick: () => globalServiceRegistrationState.setFailingView(serviceState.registrationResult), children: "View Error" }))] }));
}));
const ServiceFailViewer = observer((props) => {
const { globalBulkServiceRegistrationState, failure } = props;
const applicationStore = globalBulkServiceRegistrationState.editorStore.applicationStore;
const closeLogViewer = () => globalBulkServiceRegistrationState.setFailingView(undefined);
return (_jsx(Dialog, { open: Boolean(failure), onClose: closeLogViewer, 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", children: [_jsx(ModalHeader, { title: guaranteeNonNullable(failure?.service).path }), _jsx(ModalBody, { children: failure instanceof ServiceRegistrationFail && (_jsx(CodeEditor, { inputValue: failure.errorMessage, isReadOnly: true, language: CODE_EDITOR_LANGUAGE.TEXT })) }), _jsx(ModalFooter, { children: _jsx(ModalFooterButton, { text: "Close", onClick: closeLogViewer, type: "secondary" }) })] }) }));
});
export const RegisterService = observer((props) => {
const editorStore = useEditorStore();
const applicationStore = editorStore.applicationStore;
const services = editorStore.graphManagerState.graph.ownServices;
const toggleSelectAllServices = () => {
editorStore.globalBulkServiceRegistrationState.toggleSelectAllServices(!editorStore.globalBulkServiceRegistrationState.selectAllServices);
editorStore.globalBulkServiceRegistrationState.setSelectAll(editorStore.globalBulkServiceRegistrationState.selectAllServices);
};
const selectService = (serviceState) => {
serviceState.toggleIsSelected();
editorStore.globalBulkServiceRegistrationState.toggleSelectAllServices(editorStore.globalBulkServiceRegistrationState.bulkServiceRegistrationStates.filter((bulkServiceState) => bulkServiceState.isSelected).length ===
editorStore.globalBulkServiceRegistrationState
.bulkServiceRegistrationStates.length);
};
useEffect(() => {
editorStore.globalBulkServiceRegistrationState.init();
}, [editorStore.globalBulkServiceRegistrationState]);
const serviceItems = () => (_jsx(_Fragment, { children: editorStore.globalBulkServiceRegistrationState.bulkServiceRegistrationStates.map((serviceState) => (_jsx(ContextMenu, { content: _jsx(ServiceContextMenu, { globalServiceRegistrationState: editorStore.globalBulkServiceRegistrationState, serviceState: serviceState }), children: _jsxs("div", { className: clsx('side-bar__panel__item'), children: [_jsxs("div", { className: clsx('bulk-service-registration__service__container bulk-service-registration__explorer__service__container'), children: [_jsx("div", { className: "bulk-service-registration__services-tree__node__icon__type", children: getRegistrationStatusIcon(serviceState.isSelected, getServiceRegistrationResult(editorStore.globalBulkServiceRegistrationState
.isServiceRegistering.isInProgress, serviceState.registrationResult)) }), _jsx("div", { className: "bulk-service-registration__explorer__service__result__icon__type", children: _jsx(PURE_ServiceIcon, {}) }), _jsx("div", { className: "bulk-service-registration__item__link__content", children: _jsx("div", { className: "bulk-service-registration__item__link__content__id", children: serviceState.service.name }) })] }), _jsx("button", { type: "button", className: clsx('bulk-service-registration__section__toggler__btn', {
'bulk-service-registration__section__toggler__btn--toggled': serviceState.isSelected,
}), onClick: () => {
selectService(serviceState);
}, tabIndex: -1, children: serviceState.isSelected ? (_jsx(CheckSquareIcon, {})) : (_jsx(SquareIcon, {})) })] }) }, serviceState.service._UUID))) }));
return (_jsxs("div", { "data-testid": LEGEND_STUDIO_TEST_ID.BULK_REGISTRATION, className: "panel bulk-service-registration", children: [_jsxs("div", { className: "panel__header side-bar__header", children: [_jsx("div", { className: "panel__header__title bulk-service-registration__header__title", children: _jsx("div", { className: "panel__header__title__content side-bar__header__title__content", children: "REGISTER SERVICES" }) }), _jsx("button", { className: "panel__header__action bulk-service-registration__service__header__action bulk-service-registration__play-btn", onClick: () => editorStore.globalBulkServiceRegistrationState.setShowRegConfig(true), tabIndex: -1, title: "Register All Services", children: _jsx(PlayIcon, {}) }), _jsx(Dialog, { onClose: noop, open: editorStore.globalBulkServiceRegistrationState
.showRegistrationConfig, children: _jsxs(Modal, { darkMode: !applicationStore.layoutService
.TEMPORARY__isLightColorThemeEnabled, className: clsx('editor-modal bulk-service-registration__service__editor'), children: [_jsxs("div", { className: "bulk-service-registration__header", children: [_jsx("div", { className: "bulk-service-registration__header__actions" }), _jsx("button", { className: "bulk-service-registration__header__action", tabIndex: -1, onClick: () => editorStore.globalBulkServiceRegistrationState.setShowRegConfig(false), children: _jsx(TimesIcon, {}) })] }), _jsx("div", { className: "bulk-service-registration__panel__content__form", children: _jsx(BulkServiceRegistrationEditor, {}) })] }) })] }), _jsxs("div", { className: "panel__header side-bar__header", children: [_jsx("div", { className: "panel__header__title bulk-service-registration__header__title", children: _jsx("div", { className: "panel__header__title__content side-bar__header__title__content", children: "Select All" }) }), _jsx("button", { type: "button", className: clsx('panel__header__action bulk-service-registration__section__toggler__btn', {
'panel__header__action bulk-service-registration__section__toggler__btn--toggled': editorStore.globalBulkServiceRegistrationState
.selectAllServices,
}), onClick: toggleSelectAllServices, tabIndex: -1, children: editorStore.globalBulkServiceRegistrationState
.selectAllServices ? (_jsx(CheckSquareIcon, {})) : (_jsx(SquareIcon, {})) })] }), _jsx("div", { className: "panel__content side-bar__content", children: _jsxs("div", { className: "panel side-bar__panel", children: [_jsxs("div", { className: "panel__header", children: [_jsx("div", { className: "panel__header__title", children: _jsx("div", { className: "panel__header__title__content", children: "SERVICES" }) }), _jsxs("div", { className: "bulk-service-registration__header__changes-count", "data-testid": LEGEND_STUDIO_TEST_ID.SIDEBAR_PANEL_HEADER__CHANGES_COUNT, children: [editorStore.globalBulkServiceRegistrationState.bulkServiceRegistrationStates.filter((serviceState) => serviceState.isSelected).length, ' ', "/ ", services.length] })] }), _jsx(PanelContent, { children: serviceItems() }), editorStore.globalBulkServiceRegistrationState.failingView && (_jsx(ServiceFailViewer, { globalBulkServiceRegistrationState: editorStore.globalBulkServiceRegistrationState, failure: editorStore.globalBulkServiceRegistrationState.failingView }))] }) })] }));
});
//# sourceMappingURL=RegisterService.js.map