@gravity-ui/dashkit 9.0.0-beta.1 → 9.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/cjs/plugins/Text/Text.d.ts +1 -0
- package/build/cjs/plugins/Text/Text.js +1 -1
- package/build/cjs/plugins/Text/Text.js.map +1 -1
- package/build/esm/plugins/Text/Text.d.ts +1 -0
- package/build/esm/plugins/Text/Text.js +1 -1
- package/build/esm/plugins/Text/Text.js.map +1 -1
- package/package.json +2 -2
|
@@ -73,7 +73,7 @@ class PluginText extends react_1.default.PureComponent {
|
|
|
73
73
|
react_1.default.createElement("br", null)));
|
|
74
74
|
}
|
|
75
75
|
renderText() {
|
|
76
|
-
return (react_1.default.createElement("div", { className: b({ withMarkdown: this.withMarkdown }), [constants_1.PLUGIN_ROOT_ATTR_NAME]: 'text' }, this.withMarkdown ? (react_1.default.createElement("div", { className: "yfm" // className из стилей для markdown
|
|
76
|
+
return (react_1.default.createElement("div", { className: b({ withMarkdown: this.withMarkdown }), "data-qa": this.props.qa, [constants_1.PLUGIN_ROOT_ATTR_NAME]: 'text' }, this.withMarkdown ? (react_1.default.createElement("div", { className: "yfm" // className из стилей для markdown
|
|
77
77
|
, dangerouslySetInnerHTML: { __html: this.state.htmlText } })) : (this.state.text)));
|
|
78
78
|
}
|
|
79
79
|
async getMarkdown() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Text.js","sourceRoot":"../../../../src","sources":["plugins/Text/Text.tsx"],"names":[],"mappings":";;;;AAAA,0DAA0B;AAE1B,6CAAiD;AAEjD,8CAAgC;AAEhC,0CAAkC;AAClC,+CAAmD;AAEnD,sBAAqB;AAErB,yCAAyC;AACzC,qCAAqC;AAErC,MAAM,CAAC,GAAG,IAAA,OAAE,EAAC,qBAAqB,CAAC,CAAC;AAEpC,IAAK,UAIJ;AAJD,WAAK,UAAU;IACX,iCAAmB,CAAA;IACnB,iCAAmB,CAAA;IACnB,2BAAa,CAAA;AACjB,CAAC,EAJI,UAAU,KAAV,UAAU,QAId;
|
|
1
|
+
{"version":3,"file":"Text.js","sourceRoot":"../../../../src","sources":["plugins/Text/Text.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport {Button, Loader} from '@gravity-ui/uikit';\n\nimport {i18n} from '../../i18n';\nimport {Plugin, PluginWidgetProps} from '../../typings';\nimport {cn} from '../../utils/cn';\nimport {PLUGIN_ROOT_ATTR_NAME} from '../constants';\n\nimport './Text.scss';\n\n// need to set markdown styles separately\n// for instance can use yfm-transform\n\nconst b = cn('dashkit-plugin-text');\n\nenum LoadStatus {\n Pending = 'pending',\n Success = 'success',\n Fail = 'fail',\n}\n\nexport type PluginTextApiHandler = (data: {text: string}) => Promise<{result: string}>;\n\nexport interface PluginTextProps extends PluginWidgetProps {\n apiHandler?: PluginTextApiHandler;\n data: {\n text: string;\n } & PluginWidgetProps['data'];\n onBeforeRender: () => () => void;\n qa?: string;\n}\n\ninterface PluginTextState {\n htmlText: string;\n status: LoadStatus;\n needUpdate?: boolean;\n text?: string;\n}\n\nexport class PluginText extends React.PureComponent<PluginTextProps, PluginTextState> {\n static getDerivedStateFromProps(props: PluginTextProps, state: PluginTextState) {\n const {\n data: {text},\n } = props;\n const needUpdate = text !== state.text;\n return {\n text,\n needUpdate,\n };\n }\n\n state: PluginTextState = {\n htmlText: '',\n status: this.withMarkdown ? LoadStatus.Pending : LoadStatus.Success,\n };\n\n private _isUnmounted = false;\n\n componentDidMount() {\n this._isUnmounted = false;\n this.getMarkdown();\n }\n\n componentDidUpdate() {\n if (this.state.needUpdate) {\n this.getMarkdown();\n }\n }\n\n componentWillUnmount() {\n this._isUnmounted = true;\n }\n\n render() {\n switch (this.state.status) {\n case LoadStatus.Success:\n return this.renderText();\n case LoadStatus.Pending:\n return this.renderLoader();\n default:\n return this.renderError();\n }\n }\n\n private renderLoader() {\n return (\n <div className={b({loading: true})}>\n <div className={b('loader')}>\n <div className={b('loader-view')}>\n <Loader size=\"m\" />\n </div>\n </div>\n </div>\n );\n }\n\n private renderError() {\n return (\n <div className={b({error: true})}>\n <div className={b('error')}>{i18n('label_render-markdown-error')}</div>\n <br />\n <Button view=\"action\" size=\"m\" onClick={this.onRetryClick}>\n {i18n('button_retry')}\n </Button>\n <br />\n </div>\n );\n }\n\n private renderText() {\n return (\n <div\n className={b({withMarkdown: this.withMarkdown})}\n data-qa={this.props.qa}\n {...{[PLUGIN_ROOT_ATTR_NAME]: 'text'}}\n >\n {this.withMarkdown ? (\n <div\n className=\"yfm\" // className из стилей для markdown\n dangerouslySetInnerHTML={{__html: this.state.htmlText}}\n />\n ) : (\n this.state.text\n )}\n </div>\n );\n }\n\n private async getMarkdown() {\n if (typeof this.props.apiHandler !== 'function') {\n return;\n }\n this.setState({status: LoadStatus.Pending});\n\n const onLoadComplete = this.props.onBeforeLoad();\n\n try {\n let htmlText = '';\n if (this.state.text && this.state.text.trim()) {\n const loadedData = await this.props.apiHandler({text: this.state.text});\n htmlText = loadedData.result;\n }\n if (this._isUnmounted) {\n return;\n }\n this.setState({\n htmlText,\n status: LoadStatus.Success,\n });\n } catch (e) {\n if (this._isUnmounted) {\n return;\n }\n this.setState({status: LoadStatus.Fail});\n }\n onLoadComplete();\n }\n\n private onRetryClick = () => {\n this.getMarkdown();\n };\n\n get withMarkdown() {\n return typeof this.props.apiHandler === 'function';\n }\n}\n\ntype PluginDataProps = Omit<PluginTextProps, 'apiHandler'>;\n\nexport type PluginTextObjectSettings = {apiHandler?: PluginTextApiHandler};\n\nexport type PluginTextObject = Plugin<PluginDataProps> & {\n setSettings: (settings: PluginTextObjectSettings) => PluginTextObject;\n _apiHandler?: PluginTextApiHandler;\n};\n\nconst plugin: PluginTextObject = {\n type: 'text',\n defaultLayout: {w: 12, h: 6},\n setSettings(settings) {\n const {apiHandler} = settings;\n plugin._apiHandler = apiHandler;\n return plugin;\n },\n renderer(props, forwardedRef) {\n return <PluginText {...props} apiHandler={plugin._apiHandler} ref={forwardedRef} />;\n },\n};\n\nexport default plugin;\n"]}
|
|
@@ -69,7 +69,7 @@ export class PluginText extends React.PureComponent {
|
|
|
69
69
|
React.createElement("br", null)));
|
|
70
70
|
}
|
|
71
71
|
renderText() {
|
|
72
|
-
return (React.createElement("div", { className: b({ withMarkdown: this.withMarkdown }), [PLUGIN_ROOT_ATTR_NAME]: 'text' }, this.withMarkdown ? (React.createElement("div", { className: "yfm" // className из стилей для markdown
|
|
72
|
+
return (React.createElement("div", { className: b({ withMarkdown: this.withMarkdown }), "data-qa": this.props.qa, [PLUGIN_ROOT_ATTR_NAME]: 'text' }, this.withMarkdown ? (React.createElement("div", { className: "yfm" // className из стилей для markdown
|
|
73
73
|
, dangerouslySetInnerHTML: { __html: this.state.htmlText } })) : (this.state.text)));
|
|
74
74
|
}
|
|
75
75
|
async getMarkdown() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Text.js","sourceRoot":"../../../../src","sources":["plugins/Text/Text.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAC,MAAM,EAAE,MAAM,EAAC,MAAM,mBAAmB,CAAC;AAEjD,OAAO,EAAC,IAAI,EAAC,4BAAmB;AAEhC,OAAO,EAAC,EAAE,EAAC,0BAAuB;AAClC,OAAO,EAAC,qBAAqB,EAAC,wBAAqB;AAEnD,oBAAqB;AAErB,yCAAyC;AACzC,qCAAqC;AAErC,MAAM,CAAC,GAAG,EAAE,CAAC,qBAAqB,CAAC,CAAC;AAEpC,IAAK,UAIJ;AAJD,WAAK,UAAU;IACX,iCAAmB,CAAA;IACnB,iCAAmB,CAAA;IACnB,2BAAa,CAAA;AACjB,CAAC,EAJI,UAAU,KAAV,UAAU,QAId;
|
|
1
|
+
{"version":3,"file":"Text.js","sourceRoot":"../../../../src","sources":["plugins/Text/Text.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport {Button, Loader} from '@gravity-ui/uikit';\n\nimport {i18n} from '../../i18n';\nimport {Plugin, PluginWidgetProps} from '../../typings';\nimport {cn} from '../../utils/cn';\nimport {PLUGIN_ROOT_ATTR_NAME} from '../constants';\n\nimport './Text.scss';\n\n// need to set markdown styles separately\n// for instance can use yfm-transform\n\nconst b = cn('dashkit-plugin-text');\n\nenum LoadStatus {\n Pending = 'pending',\n Success = 'success',\n Fail = 'fail',\n}\n\nexport type PluginTextApiHandler = (data: {text: string}) => Promise<{result: string}>;\n\nexport interface PluginTextProps extends PluginWidgetProps {\n apiHandler?: PluginTextApiHandler;\n data: {\n text: string;\n } & PluginWidgetProps['data'];\n onBeforeRender: () => () => void;\n qa?: string;\n}\n\ninterface PluginTextState {\n htmlText: string;\n status: LoadStatus;\n needUpdate?: boolean;\n text?: string;\n}\n\nexport class PluginText extends React.PureComponent<PluginTextProps, PluginTextState> {\n static getDerivedStateFromProps(props: PluginTextProps, state: PluginTextState) {\n const {\n data: {text},\n } = props;\n const needUpdate = text !== state.text;\n return {\n text,\n needUpdate,\n };\n }\n\n state: PluginTextState = {\n htmlText: '',\n status: this.withMarkdown ? LoadStatus.Pending : LoadStatus.Success,\n };\n\n private _isUnmounted = false;\n\n componentDidMount() {\n this._isUnmounted = false;\n this.getMarkdown();\n }\n\n componentDidUpdate() {\n if (this.state.needUpdate) {\n this.getMarkdown();\n }\n }\n\n componentWillUnmount() {\n this._isUnmounted = true;\n }\n\n render() {\n switch (this.state.status) {\n case LoadStatus.Success:\n return this.renderText();\n case LoadStatus.Pending:\n return this.renderLoader();\n default:\n return this.renderError();\n }\n }\n\n private renderLoader() {\n return (\n <div className={b({loading: true})}>\n <div className={b('loader')}>\n <div className={b('loader-view')}>\n <Loader size=\"m\" />\n </div>\n </div>\n </div>\n );\n }\n\n private renderError() {\n return (\n <div className={b({error: true})}>\n <div className={b('error')}>{i18n('label_render-markdown-error')}</div>\n <br />\n <Button view=\"action\" size=\"m\" onClick={this.onRetryClick}>\n {i18n('button_retry')}\n </Button>\n <br />\n </div>\n );\n }\n\n private renderText() {\n return (\n <div\n className={b({withMarkdown: this.withMarkdown})}\n data-qa={this.props.qa}\n {...{[PLUGIN_ROOT_ATTR_NAME]: 'text'}}\n >\n {this.withMarkdown ? (\n <div\n className=\"yfm\" // className из стилей для markdown\n dangerouslySetInnerHTML={{__html: this.state.htmlText}}\n />\n ) : (\n this.state.text\n )}\n </div>\n );\n }\n\n private async getMarkdown() {\n if (typeof this.props.apiHandler !== 'function') {\n return;\n }\n this.setState({status: LoadStatus.Pending});\n\n const onLoadComplete = this.props.onBeforeLoad();\n\n try {\n let htmlText = '';\n if (this.state.text && this.state.text.trim()) {\n const loadedData = await this.props.apiHandler({text: this.state.text});\n htmlText = loadedData.result;\n }\n if (this._isUnmounted) {\n return;\n }\n this.setState({\n htmlText,\n status: LoadStatus.Success,\n });\n } catch (e) {\n if (this._isUnmounted) {\n return;\n }\n this.setState({status: LoadStatus.Fail});\n }\n onLoadComplete();\n }\n\n private onRetryClick = () => {\n this.getMarkdown();\n };\n\n get withMarkdown() {\n return typeof this.props.apiHandler === 'function';\n }\n}\n\ntype PluginDataProps = Omit<PluginTextProps, 'apiHandler'>;\n\nexport type PluginTextObjectSettings = {apiHandler?: PluginTextApiHandler};\n\nexport type PluginTextObject = Plugin<PluginDataProps> & {\n setSettings: (settings: PluginTextObjectSettings) => PluginTextObject;\n _apiHandler?: PluginTextApiHandler;\n};\n\nconst plugin: PluginTextObject = {\n type: 'text',\n defaultLayout: {w: 12, h: 6},\n setSettings(settings) {\n const {apiHandler} = settings;\n plugin._apiHandler = apiHandler;\n return plugin;\n },\n renderer(props, forwardedRef) {\n return <PluginText {...props} apiHandler={plugin._apiHandler} ref={forwardedRef} />;\n },\n};\n\nexport default plugin;\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gravity-ui/dashkit",
|
|
3
|
-
"version": "9.
|
|
3
|
+
"version": "9.1.0",
|
|
4
4
|
"description": "Library for rendering dashboard grid layout",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -69,7 +69,7 @@
|
|
|
69
69
|
},
|
|
70
70
|
"peerDependencies": {
|
|
71
71
|
"@gravity-ui/icons": "^2.13.0",
|
|
72
|
-
"@gravity-ui/uikit": "^7.
|
|
72
|
+
"@gravity-ui/uikit": "^7.0.0",
|
|
73
73
|
"react": "^16.8.0 || ^17 || ^18"
|
|
74
74
|
},
|
|
75
75
|
"devDependencies": {
|