UNPKG

@finos/legend-application-studio

Version:
109 lines 9.18 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 { useState } from 'react'; import { BlankPanelContent, BundleIcon, ChevronDownIcon, ChevronRightIcon, CopyIcon, Dialog, InfoCircleIcon, Modal, ModalBody, ModalHeader, ModalHeaderActions, ModalTitle, PluginIcon, TimesIcon, TreeView, } from '@finos/legend-art'; import { addUniqueEntry, isNonNullable, PresetInfo, } from '@finos/legend-shared'; import { useLegendStudioApplicationStore } from './LegendStudioFrameworkProvider.js'; class AppExtensionInfoTreeNodeData { id; label; isSelected; isOpen; childrenIds; info; constructor(id, label, info) { this.id = id; this.label = label; this.info = info; } } const buildAppExtensionInfoTreeData = (pluginManagerInfo) => { const rootIds = []; const nodes = new Map(); // NOTE: the returned plugin manager extension info is already sorted // so we don't need to do that anymore pluginManagerInfo.presets.forEach((preset) => { const node = new AppExtensionInfoTreeNodeData(preset.signature, preset.name, preset); addUniqueEntry(rootIds, node.id); nodes.set(node.id, node); if (preset.plugins.length) { node.childrenIds = []; preset.plugins.forEach((plugin) => { const childNode = new AppExtensionInfoTreeNodeData(plugin.signature, plugin.name, plugin); addUniqueEntry(node.childrenIds, childNode.id); nodes.set(childNode.id, childNode); }); } }); pluginManagerInfo.plugins.forEach((plugin) => { const node = new AppExtensionInfoTreeNodeData(plugin.signature, plugin.name, plugin); addUniqueEntry(rootIds, node.id); nodes.set(node.id, node); }); return { rootIds, nodes }; }; const AppExtensionInfoTreeNodeContainer = (props) => { const { node, level, stepPaddingInRem, onNodeSelect } = props; const isExpandable = Boolean(node.childrenIds?.length); const nodeTypeIcon = node.info instanceof PresetInfo ? _jsx(BundleIcon, {}) : _jsx(PluginIcon, {}); const selectNode = () => onNodeSelect?.(node); const nodeExpandIcon = isExpandable ? (node.isOpen ? (_jsx(ChevronDownIcon, {})) : (_jsx(ChevronRightIcon, {}))) : (_jsx("div", {})); return (_jsxs("div", { className: "tree-view__node__container", onClick: selectNode, style: { paddingLeft: `${(level - 1) * (stepPaddingInRem ?? 2)}rem`, display: 'flex', }, children: [_jsxs("div", { className: "app__info__extensions__tree__node__icon", children: [_jsx("div", { className: "app__info__extensions__tree__node__icon__expand", children: nodeExpandIcon }), _jsx("div", { className: "app__info__extensions__tree__node__icon__type", children: nodeTypeIcon })] }), _jsxs("div", { className: "tree-view__node__label app__info__extensions__tree__node__label", children: [_jsx("div", { className: "app__info__extensions__tree__node__label__title", children: node.label }), _jsx("div", { className: "app__info__extensions__tree__node__label__version", children: _jsx("div", { className: "app__info__extensions__tree__node__label__version__label", children: node.info.version }) })] })] })); }; export const LegendStudioAppInfo = (props) => { const { open, closeModal } = props; const applicationStore = useLegendStudioApplicationStore(); const config = applicationStore.config; const copyInfo = () => { applicationStore.clipboardService .copyTextToClipboard([ `Environment: ${config.env}`, `Version: ${config.appVersion}`, `Revision: ${config.appVersionCommitId}`, `Build Time: ${config.appVersionBuildTime}`, `SDLC Server: ${config.sdlcServerUrl}`, `Engine Server: ${config.engineServerUrl}`, `Depot Server: ${config.depotServerUrl}`, ] .filter(isNonNullable) .join('\n')) .then(() => applicationStore.notificationService.notifySuccess('Copied application info to clipboard')) .catch(applicationStore.alertUnhandledError); }; const [appExtensionInfoTreeData, setAppExtensionInfoTreeData] = useState(buildAppExtensionInfoTreeData(applicationStore.pluginManager.getInfo())); const onAppExtensionInfoTreeNodeSelect = (node) => { if (node.childrenIds?.length) { node.isOpen = !node.isOpen; } setAppExtensionInfoTreeData({ ...appExtensionInfoTreeData }); }; const getAppExtensionInfoTreeChildNodes = (node) => node.childrenIds ?.map((id) => appExtensionInfoTreeData.nodes.get(id)) .filter(isNonNullable) ?? []; const isAppExtensionInfoEmpty = !appExtensionInfoTreeData.nodes.size; const goToReleaseLog = () => { applicationStore.releaseNotesService.setReleaseLog(true); closeModal(); }; return (_jsx(Dialog, { onClose: closeModal, open: open, children: _jsxs(Modal, { darkMode: !applicationStore.layoutService.TEMPORARY__isLightColorThemeEnabled, className: "modal--scrollable app__info", children: [_jsxs(ModalHeader, { children: [_jsx(ModalTitle, { icon: _jsx(InfoCircleIcon, {}), title: "About" }), _jsxs(ModalHeaderActions, { children: [_jsx("button", { className: "modal__header__action", tabIndex: -1, onClick: copyInfo, title: "Copy application info", children: _jsx(CopyIcon, {}) }), _jsx("button", { className: "modal__header__action", tabIndex: -1, onClick: closeModal, children: _jsx(TimesIcon, {}) })] })] }), _jsxs(ModalBody, { children: [_jsxs("div", { className: "app__info__entry", children: [_jsx("div", { className: "app__info__entry__title", children: "Environment:" }), _jsx("div", { className: "app__info__entry__value", children: config.env })] }), _jsxs("div", { className: "app__info__entry", children: [_jsx("div", { className: "app__info__entry__title", children: "Version:" }), _jsx("div", { className: "app__info__entry__value", children: config.appVersion })] }), _jsxs("div", { className: "app__info__entry", children: [_jsx("div", { className: "app__info__entry__title", children: "Revision:" }), _jsx("div", { className: "app__info__entry__value", children: config.appVersionCommitId })] }), _jsxs("div", { className: "app__info__entry", children: [_jsx("div", { className: "app__info__entry__title", children: "Build Time:" }), _jsx("div", { className: "app__info__entry__value", children: config.appVersionBuildTime })] }), _jsx("div", { className: "app__info__entry", children: _jsx("div", { onClick: goToReleaseLog, className: "app__info__entry__value app__info__entry__value__action", children: "Details of Released Versions" }) }), _jsxs("div", { className: "app__info__group", children: [_jsxs("div", { className: "app__info__entry", children: [_jsx("div", { className: "app__info__entry__title", children: "SDLC Server:" }), _jsx("div", { className: "app__info__entry__value", children: _jsx("a", { href: config.sdlcServerUrl, target: "_blank", rel: "noopener noreferrer", children: config.sdlcServerUrl }) })] }), _jsxs("div", { className: "app__info__entry", children: [_jsx("div", { className: "app__info__entry__title", children: "Engine Server:" }), _jsx("div", { className: "app__info__entry__value", children: _jsx("a", { href: config.engineServerUrl, target: "_blank", rel: "noopener noreferrer", children: config.engineServerUrl }) })] }), _jsxs("div", { className: "app__info__entry", children: [_jsx("div", { className: "app__info__entry__title", children: "Depot Server:" }), _jsx("div", { className: "app__info__entry__value", children: _jsx("a", { href: config.depotServerUrl, target: "_blank", rel: "noopener noreferrer", children: config.depotServerUrl }) })] })] }), _jsxs("div", { className: "app__info__extensions", children: [_jsx("div", { className: "app__info__extensions__header", children: _jsx("div", { className: "app__info__extensions__header__title", children: "EXTENSIONS" }) }), _jsxs("div", { className: "app__info__extensions__content", children: [isAppExtensionInfoEmpty && (_jsx(BlankPanelContent, { children: "no extensions available" })), !isAppExtensionInfoEmpty && (_jsx(TreeView, { components: { TreeNodeContainer: AppExtensionInfoTreeNodeContainer, }, treeData: appExtensionInfoTreeData, getChildNodes: getAppExtensionInfoTreeChildNodes, onNodeSelect: onAppExtensionInfoTreeNodeSelect, innerProps: {} }))] })] })] })] }) })); }; //# sourceMappingURL=LegendStudioAppInfo.js.map