UNPKG

@douyinfe/semi-ui

Version:

A modern, comprehensive, flexible design system and UI library. Connect DesignOps & DevOps. Quickly build beautiful React apps. Maintained by Douyin-fe team.

249 lines (248 loc) 11.3 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _react = _interopRequireDefault(require("react")); var _classnames = _interopRequireDefault(require("classnames")); var _baseComponent = _interopRequireDefault(require("../../_base/baseComponent")); var _propTypes = _interopRequireDefault(require("prop-types")); var _constants = require("@douyinfe/semi-foundation/lib/cjs/sidebar/constants"); var _index = require("../../index"); var _semiIcons = require("@douyinfe/semi-icons"); var _semiIllustrations = require("@douyinfe/semi-illustrations"); var _mcpCofContentFoundation = _interopRequireDefault(require("@douyinfe/semi-foundation/lib/cjs/sidebar/mcpCofContentFoundation")); var _localeConsumer = _interopRequireDefault(require("../../locale/localeConsumer")); var _utils = require("@douyinfe/semi-foundation/lib/cjs/sidebar/utils"); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } const prefixCls = _constants.cssClasses.MCP_CONFIGURE_CONTENT; class MCPConfigureContent extends _baseComponent.default { constructor(props) { var _a, _b, _c; super(props); this.renderContent = () => { const { showOptions, mode } = this.state; const { renderItem } = this.props; return /*#__PURE__*/_react.default.createElement("div", { className: `${prefixCls}-item-container` }, showOptions.map(option => { if (renderItem) { return renderItem({ custom: mode === _constants.strings.MCP_MODE.CUSTOM, option: option }); } return /*#__PURE__*/_react.default.createElement("div", { key: option.value, className: `${prefixCls}-item` }, typeof option.icon === 'string' ? /*#__PURE__*/_react.default.createElement("img", { src: option.icon, alt: option.label, className: `${prefixCls}-item-sign` }) : /*#__PURE__*/_react.default.createElement("div", { className: `${prefixCls}-item-sign` }, option.icon), /*#__PURE__*/_react.default.createElement("div", { className: `${prefixCls}-item-content` }, /*#__PURE__*/_react.default.createElement("div", { className: `${prefixCls}-item-content-label` }, option.label), /*#__PURE__*/_react.default.createElement("div", { className: `${prefixCls}-item-content-desc` }, option.desc)), option.configure && /*#__PURE__*/_react.default.createElement(_index.Button, { icon: /*#__PURE__*/_react.default.createElement(_semiIcons.IconSetting, null), className: `${prefixCls}-item-button ${prefixCls}-item-button-configure`, onClick: e => this.foundation.onConfigureButtonClick(e, option) }), mode === _constants.strings.MCP_MODE.CUSTOM && /*#__PURE__*/_react.default.createElement(_index.Button, { icon: /*#__PURE__*/_react.default.createElement(_semiIcons.IconEdit, null), className: `${prefixCls}-item-button ${prefixCls}-item-button-configure`, onClick: e => this.foundation.onEditButtonClick(e, option) }), this.renderStatusButton(option)); })); }; this.renderStatusButton = option => { const buttonNode = /*#__PURE__*/_react.default.createElement(_index.Button, { icon: option.active ? /*#__PURE__*/_react.default.createElement(_semiIcons.IconMinus, null) : /*#__PURE__*/_react.default.createElement(_semiIcons.IconPlus, null), theme: option.active ? 'light' : 'solid', type: 'primary', className: `${prefixCls}-item-button`, disabled: option.disabled, checked: option.active, onClick: () => this.foundation.handleStatusChange(option, !option.active) }); return option.disabled ? /*#__PURE__*/_react.default.createElement(_localeConsumer.default, { componentName: "Sidebar" }, locale => (/*#__PURE__*/_react.default.createElement(_index.Tooltip, { title: locale.defaultMcpInfo }, buttonNode))) : buttonNode; }; this.renderSearch = () => { const { placeholder, customOptions } = this.props; if (this.state.mode === _constants.strings.MCP_MODE.INNER) { return /*#__PURE__*/_react.default.createElement(_localeConsumer.default, { componentName: "Sidebar" }, locale => (/*#__PURE__*/_react.default.createElement(_index.Input, { prefix: /*#__PURE__*/_react.default.createElement(_semiIcons.IconSearch, null), value: this.state.inputValue, placeholder: placeholder !== null && placeholder !== void 0 ? placeholder : locale.searchPlaceholder, onChange: this.foundation.handleSearch, className: `${prefixCls}-search` }))); } else { if (customOptions === undefined || customOptions === null || Array.isArray(customOptions) && customOptions.length === 0) { return /*#__PURE__*/_react.default.createElement(_localeConsumer.default, { componentName: "Sidebar" }, locale => (/*#__PURE__*/_react.default.createElement(_index.Empty, { image: /*#__PURE__*/_react.default.createElement(_semiIllustrations.IllustrationNoContent, { style: { width: 150, height: 150 } }), darkModeImage: /*#__PURE__*/_react.default.createElement(_semiIllustrations.IllustrationNoContentDark, { style: { width: 150, height: 150 } }), description: locale.emptyCustomMcpInfo, className: `${prefixCls}-custom-empty` }, /*#__PURE__*/_react.default.createElement(_index.Button, { theme: 'solid', type: 'primary', icon: /*#__PURE__*/_react.default.createElement(_semiIcons.IconPlus, null), onClick: this.foundation.handleAddClick }, locale.newMcpAdd)))); } return /*#__PURE__*/_react.default.createElement("div", { className: `${prefixCls}-search ${prefixCls}-search-container` }, /*#__PURE__*/_react.default.createElement(_localeConsumer.default, { componentName: "Sidebar" }, locale => (/*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_index.Input, { prefix: /*#__PURE__*/_react.default.createElement(_semiIcons.IconSearch, null), value: this.state.inputValue, placeholder: placeholder !== null && placeholder !== void 0 ? placeholder : locale.searchPlaceholder, onChange: this.foundation.handleSearch }), /*#__PURE__*/_react.default.createElement(_index.Button, { theme: 'solid', type: 'primary', icon: /*#__PURE__*/_react.default.createElement(_semiIcons.IconPlus, null), onClick: this.foundation.handleAddClick }, locale.newMcpAdd))))); } }; this.state = { mode: _constants.strings.MCP_MODE.INNER, inputValue: '', showOptions: (_a = props.options) !== null && _a !== void 0 ? _a : [], cachedOptions: (_b = props.options) !== null && _b !== void 0 ? _b : [], cachedCustomOptions: (_c = props.customOptions) !== null && _c !== void 0 ? _c : [] }; this.foundation = new _mcpCofContentFoundation.default(this.adapter); } get adapter() { return Object.assign(Object.assign({}, super.adapter), { notifyConfigureClick: (e, option) => { var _a, _b; (_b = (_a = this.props).onConfigureClick) === null || _b === void 0 ? void 0 : _b.call(_a, e, option); }, notifyEditClick: (e, option) => { var _a, _b; (_b = (_a = this.props).onEditClick) === null || _b === void 0 ? void 0 : _b.call(_a, e, option); }, notifyStatusChange: (options, custom) => { var _a, _b; (_b = (_a = this.props).onStatusChange) === null || _b === void 0 ? void 0 : _b.call(_a, options, custom); }, notifyAddClick: e => { var _a, _b; (_b = (_a = this.props).onAddClick) === null || _b === void 0 ? void 0 : _b.call(_a, e); } }); } static getDerivedStateFromProps(nextProps, prevState) { const newState = {}; const { options = [], customOptions = [], filter } = nextProps; const { cachedOptions = [], cachedCustomOptions = [] } = prevState; if (options !== cachedOptions) { newState.cachedOptions = options; if (prevState.mode === _constants.strings.MCP_MODE.INNER) { if (!prevState.inputValue) { newState.showOptions = options; } else { newState.showOptions = (0, _utils.getFilterResult)(prevState.inputValue, options, filter); } } } if (customOptions !== cachedCustomOptions) { newState.cachedCustomOptions = customOptions; if (prevState.mode === _constants.strings.MCP_MODE.CUSTOM) { if (!prevState.inputValue) { newState.showOptions = customOptions; } else { newState.showOptions = (0, _utils.getFilterResult)(prevState.inputValue, customOptions, filter); } } } return newState; } render() { const { options = [], customOptions = [], className, style } = this.props; const activatedCount = options.filter(option => option.active).length + customOptions.filter(option => option.active).length; return /*#__PURE__*/_react.default.createElement("div", { className: (0, _classnames.default)(prefixCls, { [className]: className }), style: style }, /*#__PURE__*/_react.default.createElement(_localeConsumer.default, { componentName: "Sidebar" }, locale => (/*#__PURE__*/_react.default.createElement("div", { className: `${prefixCls}-header` }, /*#__PURE__*/_react.default.createElement(_index.RadioGroup, { type: 'button', value: this.state.mode, onChange: this.foundation.handleModeChange }, /*#__PURE__*/_react.default.createElement(_index.Radio, { value: _constants.strings.MCP_MODE.INNER }, "MCP Servers"), /*#__PURE__*/_react.default.createElement(_index.Radio, { value: _constants.strings.MCP_MODE.CUSTOM }, locale.newMcpAdd)), /*#__PURE__*/_react.default.createElement("span", { className: `${prefixCls}-header-count` }, locale.activeMCPNumber, " ", activatedCount, "/", options.length + customOptions.length)))), this.renderSearch(), this.renderContent()); } } MCPConfigureContent.propTypes = { className: _propTypes.default.string, options: _propTypes.default.array, customOptions: _propTypes.default.array, filter: _propTypes.default.func, placeholder: _propTypes.default.string, style: _propTypes.default.object, onStatusChange: _propTypes.default.func, onSearch: _propTypes.default.func, onAddClick: _propTypes.default.func, onConfigureClick: _propTypes.default.func, onEditClick: _propTypes.default.func, renderItem: _propTypes.default.func }; MCPConfigureContent.__SemiComponentName__ = "MCPConfigureContent"; MCPConfigureContent.defaultProps = {}; var _default = exports.default = MCPConfigureContent;