@abtnode/webapp 1.6.21 → 1.6.22

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.
Files changed (36) hide show
  1. package/README.md +8 -0
  2. package/blocklet.js +9 -9
  3. package/blocklet.yml +1 -1
  4. package/build/asset-manifest.json +20 -20
  5. package/build/index.html +1 -1
  6. package/build/{precache-manifest.bb40ca7060118e6294a11143b5925873.js → precache-manifest.1307cc8850971081e70fdec51fd865a3.js} +18 -18
  7. package/build/service-worker.js +1 -1
  8. package/build/static/js/16.29ff8823.chunk.js +2 -0
  9. package/build/static/js/16.29ff8823.chunk.js.map +1 -0
  10. package/build/static/js/19.792be34a.chunk.js +2 -0
  11. package/build/static/js/19.792be34a.chunk.js.map +1 -0
  12. package/build/static/js/24.34e707e0.chunk.js +2 -0
  13. package/build/static/js/24.34e707e0.chunk.js.map +1 -0
  14. package/build/static/js/{7.8da1bf38.chunk.js → 7.5c8e7c53.chunk.js} +3 -3
  15. package/build/static/js/{7.8da1bf38.chunk.js.LICENSE.txt → 7.5c8e7c53.chunk.js.LICENSE.txt} +0 -0
  16. package/build/static/js/7.5c8e7c53.chunk.js.map +1 -0
  17. package/build/static/js/9.6f93f882.chunk.js +3 -0
  18. package/build/static/js/{9.48cc9dac.chunk.js.LICENSE.txt → 9.6f93f882.chunk.js.LICENSE.txt} +0 -0
  19. package/build/static/js/9.6f93f882.chunk.js.map +1 -0
  20. package/build/static/js/main.0aaea1be.chunk.js +2 -0
  21. package/build/static/js/main.0aaea1be.chunk.js.map +1 -0
  22. package/build/static/js/runtime-main.5d59c7da.js +2 -0
  23. package/build/static/js/{runtime-main.f51e8093.js.map → runtime-main.5d59c7da.js.map} +1 -1
  24. package/package.json +1 -1
  25. package/build/static/js/16.317138b4.chunk.js +0 -2
  26. package/build/static/js/16.317138b4.chunk.js.map +0 -1
  27. package/build/static/js/19.d154b681.chunk.js +0 -2
  28. package/build/static/js/19.d154b681.chunk.js.map +0 -1
  29. package/build/static/js/24.a5f785c7.chunk.js +0 -2
  30. package/build/static/js/24.a5f785c7.chunk.js.map +0 -1
  31. package/build/static/js/7.8da1bf38.chunk.js.map +0 -1
  32. package/build/static/js/9.48cc9dac.chunk.js +0 -3
  33. package/build/static/js/9.48cc9dac.chunk.js.map +0 -1
  34. package/build/static/js/main.7a635cb3.chunk.js +0 -2
  35. package/build/static/js/main.7a635cb3.chunk.js.map +0 -1
  36. package/build/static/js/runtime-main.f51e8093.js +0 -2
@@ -1 +0,0 @@
1
- {"version":3,"sources":["components/blocklet/status.js","components/dot.js","components/tag.js","components/blocklet/avatar.js","components/blocklet/icons.js","../../mocks/lib/jspdf.js","../../../node_modules/@material-ui/icons/PlayArrow.js","../../../node_modules/@material-ui/icons/Stop.js","../../../node_modules/@material-ui/icons/Replay.js","../../../node_modules/@material-ui/icons/Autorenew.js","../../../node_modules/@material-ui/icons/Settings.js","../../../node_modules/@material-ui/icons/Receipt.js","../../../node_modules/@material-ui/icons/Group.js","../../../node_modules/lodash/upperCase.js","components/blocklet/service-tags.js","components/blocklet/interface.js","pages/debug/index.js","components/table-icons.js","components/table.js"],"names":["colors","BlockletStatus","status","variant","source","rest","t","useContext","LocaleContext","colorMap","added","waiting","downloading","downloaded","installing","installed","starting","running","stopping","stopped","error","upgrading","restarting","corrupted","deleting","inProgress","isInProgress","statusTxt","title","color","ReTag","type","size","style","marginRight","defaultProps","styled","Tag","success","Dot","div","props","children","borderRadius","border","BlockletAvatar","blocklet","node","useNodeContext","logoUrl","joinURL","prefix","deployedFrom","info","blockletRegistry","getDeployedFrom","meta","logo","formatRegistryLogoPath","did","window","env","apiPrefix","imgEle","src","onError","ev","target","alt","name","width","Object","assign","backgroundColor","height","Start","Stop","Restart","Reload","Remove","Config","Log","Group","module","exports","_interopRequireDefault","require","_interopRequireWildcard","defineProperty","value","default","React","_default","createElement","d","upperCase","createCompounder","result","word","index","toUpperCase","useStyles","makeStyles","tooltip","maxWidth","ServiceTags","classes","Array","isArray","services","map","x","replace","content","config","entries","join","String","filter","sort","a","b","aKey","bKey","localeCompare","Tooltip","interactive","paddingRight","key","Flex","flexShrink","textAlign","margin","cursor","fill","BlockletInterface","siteMap","locale","url","getBlockletUrl","Container","href","className","interfaces","find","BLOCKLET_INTERFACE_TYPE_WEB","BlockletList","api","nodeInfo","useState","blocklets","setBlocklets","setSiteMap","loading","setLoading","setError","mode","routing","version","useEffect","timer","getData","doBatchQuery","getBlocklets","input","getRoutingSites","snapshotHash","then","data","generateSites","Promise","all","sites","site","ensureDomainAliases","domainAliases","location","hostname","port","defaultDomain","nodePort","setTimeout","catch","err","clearInterval","newBlocklets","includes","unshift","newSiteMap","rules","adminPath","length","rows","icons","blockletIcons","tableIcons","options","emptyRowsWhenPaging","actionsColumnIndex","tableLayout","paging","search","header","showTitle","localization","body","emptyDataSourceMessage","columns","field","render","component","sorting","Main","Header","formatError","main","Add","Check","Delete","Edit","Clear","DetailPanel","NextPage","Filter","FirstPage","LastPage","PreviousPage","Search","ResetSearch","SortArrow","Export","ThirdStateCheck","ViewColumn","TableStyle"],"mappings":"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","file":"static/js/19.d154b681.chunk.js","sourcesContent":["import React, { useContext } from 'react';\nimport PropTypes from 'prop-types';\nimport styled from 'styled-components';\n\nimport Spinner from '@arcblock/ux/lib/Spinner';\nimport Tooltip from '@material-ui/core/Tooltip';\n\nimport { LocaleContext } from '@arcblock/ux/lib/Locale/context';\n\nimport Dot from '../dot';\nimport Tag from '../tag';\nimport { isInProgress } from '../../libs/util';\n\nconst colors = {\n yellow: '#FFCF71',\n grey: '#888888',\n};\n\nexport default function BlockletStatus({ status, variant, source, ...rest }) {\n const { t } = useContext(LocaleContext);\n\n const map = {\n added: 'primary',\n waiting: 'warning',\n downloading: 'warning',\n downloaded: 'primary',\n installing: 'warning',\n installed: 'primary',\n starting: 'warning',\n running: 'success',\n stopping: 'warning',\n stopped: 'reverse',\n error: 'error',\n upgrading: 'warning',\n restarting: 'warning',\n corrupted: 'error',\n deleting: 'warning',\n };\n\n const colorMap = {\n added: colors.grey,\n waiting: colors.yellow,\n downloading: colors.yellow,\n downloaded: colors.grey,\n installing: colors.yellow,\n installed: colors.grey,\n starting: colors.yellow,\n running: 'success',\n stopping: colors.yellow,\n stopped: colors.grey,\n error: 'error',\n upgrading: colors.yellow,\n restarting: colors.yellow,\n corrupted: 'error',\n deleting: colors.yellow,\n };\n\n const inProgress = isInProgress(status);\n\n const statusTxt = t(`blocklet.status.${source === 'custom' && status === 'installed' ? 'created' : status}`);\n\n if (variant === 'dot') {\n return (\n <Tooltip title={t('blocklet.statusTip', { status: statusTxt })}>\n <Dot color={colorMap[status]} {...rest} />\n </Tooltip>\n );\n }\n\n return (\n <ReTag type={map[status]} {...rest}>\n {inProgress && <Spinner size={[12, 6]} color=\"inherit\" style={{ marginRight: 5 }} />}\n {statusTxt}\n </ReTag>\n );\n}\n\nBlockletStatus.propTypes = {\n status: PropTypes.string.isRequired,\n variant: PropTypes.oneOf(['dot', 'tag']),\n source: PropTypes.string,\n};\n\nBlockletStatus.defaultProps = {\n variant: 'tag',\n source: '',\n};\n\nconst ReTag = styled(Tag)`\n border-radius: 5px;\n border: 1px solid #ccc;\n`;\n","import styled from 'styled-components';\n\nconst color = {\n success: '#3ab39d',\n error: '#D0021B',\n};\n\nconst defaultSize = '10px';\n\nconst Dot = styled.div`\n display: inline-block;\n width: ${props => props.size || defaultSize};\n height: ${props => props.size || defaultSize};\n background: ${props => color[props.color] || props.color || color.success};\n border-radius: 100%;\n`;\n\nexport default Dot;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport OriTag from '@arcblock/ux/lib/Tag';\n\nexport default function Tag({ children, ...rest }) {\n return (\n <OriTag style={{ borderRadius: 5, border: '1px solid #ccc' }} {...rest}>\n {children}\n </OriTag>\n );\n}\n\nTag.propTypes = {\n children: PropTypes.any.isRequired,\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport joinURL from 'url-join';\n\nimport Avatar from '@material-ui/core/Avatar';\nimport DiDAvatar from '@arcblock/did-connect/lib/Avatar';\n\nimport { useNodeContext } from '../../contexts/node';\nimport { formatRegistryLogoPath } from '../../libs/util';\n\nconst getDeployedFrom = (blocklet, node) => {\n let { deployedFrom } = blocklet;\n if (!deployedFrom && blocklet.source === 'registry') {\n deployedFrom = node.info.blockletRegistry;\n }\n return deployedFrom;\n};\n\nexport default function BlockletAvatar({ blocklet, style, size, ...rest }) {\n const node = useNodeContext();\n let logoUrl = joinURL(node.prefix, 'blocklet.png');\n const { variant } = rest;\n\n const deployedFrom = getDeployedFrom(blocklet, node);\n\n if (blocklet.source === 'registry' && blocklet.meta.logo) {\n logoUrl = joinURL(deployedFrom, formatRegistryLogoPath(blocklet.meta.did, blocklet.meta.logo));\n } else {\n const prefix = window.env.apiPrefix || '/';\n logoUrl = joinURL(prefix, `/blocklet/logo/${blocklet.meta.did}`);\n }\n\n const setFallBackUrl = ev => {\n ev.target.src = `${node.prefix}/blocklet.png`;\n };\n\n let imgEle = <img src={logoUrl} onError={setFallBackUrl} alt={blocklet.meta.name} style={{ width: size }} />;\n\n if (!blocklet.meta.logo) {\n imgEle = <DiDAvatar did={blocklet.meta.did || ''} size={size} />;\n }\n\n return (\n <Avatar\n variant={variant || 'square'}\n style={Object.assign({ backgroundColor: 'transparent', width: size, height: size }, style)}\n {...rest}>\n {imgEle}\n </Avatar>\n );\n}\n\nBlockletAvatar.propTypes = {\n blocklet: PropTypes.object.isRequired,\n style: PropTypes.object,\n size: PropTypes.number,\n};\n\nBlockletAvatar.defaultProps = {\n style: {},\n size: 40,\n};\n","import Remove from '@material-ui/icons/Delete';\nimport Start from '@material-ui/icons/PlayArrow';\nimport Stop from '@material-ui/icons/Stop';\nimport Restart from '@material-ui/icons/Replay';\nimport Reload from '@material-ui/icons/Autorenew';\nimport Config from '@material-ui/icons/Settings';\nimport Log from '@material-ui/icons/Receipt';\nimport Group from '@material-ui/icons/Group';\n\nexport default {\n Start,\n Stop,\n Restart,\n Reload,\n Remove,\n Config,\n Log,\n Group,\n};\n","module.exports = {};\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/React.createElement(\"path\", {\n d: \"M8 5v14l11-7z\"\n}), 'PlayArrow');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/React.createElement(\"path\", {\n d: \"M6 6h12v12H6z\"\n}), 'Stop');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12 5V1L7 6l5 5V7c3.31 0 6 2.69 6 6s-2.69 6-6 6-6-2.69-6-6H4c0 4.42 3.58 8 8 8s8-3.58 8-8-3.58-8-8-8z\"\n}), 'Replay');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12 6v3l4-4-4-4v3c-4.42 0-8 3.58-8 8 0 1.57.46 3.03 1.24 4.26L6.7 14.8c-.45-.83-.7-1.79-.7-2.8 0-3.31 2.69-6 6-6zm6.76 1.74L17.3 9.2c.44.84.7 1.79.7 2.8 0 3.31-2.69 6-6 6v-3l-4 4 4 4v-3c4.42 0 8-3.58 8-8 0-1.57-.46-3.03-1.24-4.26z\"\n}), 'Autorenew');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/React.createElement(\"path\", {\n d: \"M19.14 12.94c.04-.3.06-.61.06-.94 0-.32-.02-.64-.07-.94l2.03-1.58c.18-.14.23-.41.12-.61l-1.92-3.32c-.12-.22-.37-.29-.59-.22l-2.39.96c-.5-.38-1.03-.7-1.62-.94l-.36-2.54c-.04-.24-.24-.41-.48-.41h-3.84c-.24 0-.43.17-.47.41l-.36 2.54c-.59.24-1.13.57-1.62.94l-2.39-.96c-.22-.08-.47 0-.59.22L2.74 8.87c-.12.21-.08.47.12.61l2.03 1.58c-.05.3-.09.63-.09.94s.02.64.07.94l-2.03 1.58c-.18.14-.23.41-.12.61l1.92 3.32c.12.22.37.29.59.22l2.39-.96c.5.38 1.03.7 1.62.94l.36 2.54c.05.24.24.41.48.41h3.84c.24 0 .44-.17.47-.41l.36-2.54c.59-.24 1.13-.56 1.62-.94l2.39.96c.22.08.47 0 .59-.22l1.92-3.32c.12-.22.07-.47-.12-.61l-2.01-1.58zM12 15.6c-1.98 0-3.6-1.62-3.6-3.6s1.62-3.6 3.6-3.6 3.6 1.62 3.6 3.6-1.62 3.6-3.6 3.6z\"\n}), 'Settings');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/React.createElement(\"path\", {\n d: \"M18 17H6v-2h12v2zm0-4H6v-2h12v2zm0-4H6V7h12v2zM3 22l1.5-1.5L6 22l1.5-1.5L9 22l1.5-1.5L12 22l1.5-1.5L15 22l1.5-1.5L18 22l1.5-1.5L21 22V2l-1.5 1.5L18 2l-1.5 1.5L15 2l-1.5 1.5L12 2l-1.5 1.5L9 2 7.5 3.5 6 2 4.5 3.5 3 2v20z\"\n}), 'Receipt');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16 11c1.66 0 2.99-1.34 2.99-3S17.66 5 16 5c-1.66 0-3 1.34-3 3s1.34 3 3 3zm-8 0c1.66 0 2.99-1.34 2.99-3S9.66 5 8 5C6.34 5 5 6.34 5 8s1.34 3 3 3zm0 2c-2.33 0-7 1.17-7 3.5V19h14v-2.5c0-2.33-4.67-3.5-7-3.5zm8 0c-.29 0-.62.02-.97.05 1.16.84 1.97 1.97 1.97 3.45V19h6v-2.5c0-2.33-4.67-3.5-7-3.5z\"\n}), 'Group');\n\nexports.default = _default;","var createCompounder = require('./_createCompounder');\n\n/**\n * Converts `string`, as space separated words, to upper case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the upper cased string.\n * @example\n *\n * _.upperCase('--foo-bar');\n * // => 'FOO BAR'\n *\n * _.upperCase('fooBar');\n * // => 'FOO BAR'\n *\n * _.upperCase('__foo_bar__');\n * // => 'FOO BAR'\n */\nvar upperCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + word.toUpperCase();\n});\n\nmodule.exports = upperCase;\n","import React from 'react';\nimport styled from 'styled-components';\nimport PropTypes from 'prop-types';\nimport upperCase from 'lodash/upperCase';\nimport { makeStyles } from '@material-ui/core/styles';\n\nimport Tooltip from '@material-ui/core/Tooltip';\nimport Tag from '@arcblock/ux/lib/Tag';\nimport DidLogo from '@arcblock/icons/lib/DidLogo';\n\nconst useStyles = makeStyles(() => ({\n tooltip: {\n maxWidth: 'none',\n },\n}));\n\nexport default function ServiceTags({ meta }) {\n const classes = useStyles();\n if (!meta || !Array.isArray(meta.services)) {\n return null;\n }\n\n return meta.services.map(x => {\n const name = upperCase(x.name.replace(/^@abtnode\\//, '').replace(/-service$/, ''));\n const formatValue = value => (Array.isArray(value) ? value.join(', ') : String(value));\n\n let content = [];\n if (x.config) {\n content = Object.entries(x.config)\n .map(d => {\n d[1] = formatValue(d[1]);\n return d;\n })\n .filter(d => d[1])\n .sort((a, b) => {\n const aKey = a[0] || '';\n const bKey = b[0] || '';\n\n return aKey.localeCompare(bKey);\n });\n }\n\n return (\n <Tooltip\n interactive\n classes={{ tooltip: classes.tooltip }}\n title={\n // eslint-disable-next-line react/jsx-wrap-multilines\n <div style={{ paddingRight: 20 }}>\n {content.map(([key, value]) => (\n <Flex>\n <div style={{ flexShrink: 0, width: 150, textAlign: 'right', marginRight: 10 }}>{`${key}:`}</div>\n <div>{value}</div>\n </Flex>\n ))}\n </div>\n }>\n <Tag style={{ margin: '0 4px', cursor: 'pointer' }} type=\"success\">\n {name === 'AUTH' && <DidLogo style={{ marginRight: 4, fill: 'rgb(91, 144, 37)' }} />}\n {name}\n </Tag>\n </Tooltip>\n );\n });\n}\n\nServiceTags.propTypes = {\n meta: PropTypes.object.isRequired,\n};\n\nconst Flex = styled.div`\n display: flex;\n margin: 4px 0;\n`;\n","import React, { useContext } from 'react';\nimport styled from 'styled-components';\nimport PropTypes from 'prop-types';\n\nimport ExternalLink from '@material-ui/core/Link';\nimport { LocaleContext } from '@arcblock/ux/lib/Locale/context';\n\nimport { BLOCKLET_INTERFACE_TYPE_WEB } from '@blocklet/meta/lib/constants';\n\nimport { getBlockletUrl } from '../../contexts/routing';\nimport ServiceTags from './service-tags';\n\nexport default function BlockletInterface({ blocklet, siteMap, ...props }) {\n const { t, locale } = useContext(LocaleContext);\n\n if (blocklet.status !== 'running') {\n return null;\n }\n\n const url = getBlockletUrl({ did: blocklet.meta.did, siteMap, locale });\n\n return (\n <Container {...props}>\n <Flex>\n <ExternalLink href={url} target=\"_blank\" className=\"blocklet-interface\">\n {t('common.open')}\n </ExternalLink>\n <ServiceTags meta={blocklet.meta.interfaces.find(x => x.type === BLOCKLET_INTERFACE_TYPE_WEB)} />\n </Flex>\n </Container>\n );\n}\n\nBlockletInterface.propTypes = {\n blocklet: PropTypes.object.isRequired,\n siteMap: PropTypes.object.isRequired,\n};\n\nconst Flex = styled.div`\n display: flex;\n margin: 4px 0;\n`;\n\nconst Container = styled.div`\n .blocklet-interface {\n display: flex;\n align-items: center;\n justify-content: flex-start;\n white-space: nowrap;\n\n img {\n margin-right: 4px;\n }\n }\n`;\n","import React, { useContext, useEffect, useState } from 'react';\nimport styled from 'styled-components';\n\nimport MaterialTable from 'material-table';\nimport Typography from '@material-ui/core/Typography';\nimport Spinner from '@arcblock/ux/lib/Spinner';\n\nimport Alert from '@arcblock/ux/lib/Alert';\nimport Tag from '@arcblock/ux/lib/Tag';\nimport { LocaleContext } from '@arcblock/ux/lib/Locale/context';\n\nimport { useNodeContext } from '../../contexts/node';\nimport { generateSites } from '../../contexts/routing';\nimport { formatError } from '../../libs/util';\nimport ensureDomainAliases from '../../libs/ensure-domain-aliases';\n\nimport tableIcons from '../../components/table-icons';\nimport blockletIcons from '../../components/blocklet/icons';\nimport BlockletAvatar from '../../components/blocklet/avatar';\nimport BlockletInterface from '../../components/blocklet/interface';\nimport BlockletStatus from '../../components/blocklet/status';\n\nimport TableStyle from '../../components/table';\n\nexport default function BlockletList() {\n const { api, info: nodeInfo } = useNodeContext();\n const [blocklets, setBlocklets] = useState([]);\n const [siteMap, setSiteMap] = useState([]);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState(null);\n const { t } = useContext(LocaleContext);\n\n const { mode, routing, version } = nodeInfo;\n\n useEffect(() => {\n if (mode === 'debug') {\n const interval = 5000;\n let timer = null;\n\n const getData = () => {\n api\n .doBatchQuery({\n getBlocklets: { input: {} },\n getRoutingSites: { input: { snapshotHash: '' } },\n })\n .then(async data => {\n setLoading(false);\n setError(null);\n\n // set blocklet data\n setBlocklets(data.getBlocklets.blocklets || []);\n\n // set routing data\n setSiteMap(\n generateSites({\n sites: await Promise.all(\n (data.getRoutingSites.sites || []).map(async site => {\n site.domainAliases = await ensureDomainAliases(site.domainAliases);\n return site;\n })\n ),\n defaultDomain: window.location.hostname,\n nodePort: nodeInfo.port,\n }).siteMap\n );\n\n timer = setTimeout(getData, interval);\n })\n .catch(err => {\n setLoading(false);\n setError(err);\n timer = setTimeout(getData, interval);\n });\n };\n setLoading(true);\n getData();\n\n return () => {\n clearInterval(timer);\n };\n }\n\n return () => {};\n }, [mode]); // eslint-disable-line\n\n const newBlocklets = (blocklets || []).filter(d => ['running', 'starting', 'stopping'].includes(d.status));\n\n // mock dashboard as a blocklet\n newBlocklets.unshift({\n meta: {\n name: 'Blocklet Server',\n did: nodeInfo.did,\n version,\n interfaces: [],\n },\n status: 'running',\n });\n\n const newSiteMap = { ...siteMap };\n newSiteMap[nodeInfo.did] = {\n domainAliases: [\n {\n value: window.location.hostname,\n },\n ],\n rules: [\n {\n name: routing.adminPath,\n },\n ],\n };\n\n let content = null;\n if (loading) {\n content = <Spinner />;\n } else if (newBlocklets.length > 0) {\n const rows = newBlocklets;\n content = (\n <TableStyle className=\"blocklet-list\">\n <MaterialTable\n data={rows}\n icons={{ ...blockletIcons, ...tableIcons }}\n options={{\n emptyRowsWhenPaging: false,\n actionsColumnIndex: -1,\n tableLayout: 'auto',\n paging: false,\n search: false,\n header: false,\n showTitle: false,\n }}\n localization={{\n body: {\n emptyDataSourceMessage: t('common.noData'),\n },\n }}\n columns={[\n {\n title: t('common.name'),\n field: 'meta.name',\n render: d => (\n <Typography component=\"strong\" variant=\"body1\" className=\"blocklet-name\">\n <BlockletAvatar blocklet={d} style={{ marginRight: 8 }} />\n {d.meta.title || d.meta.name}\n </Typography>\n ),\n },\n {\n title: t('common.version'),\n field: 'meta.version',\n render: d => <Tag>{d.meta.version}</Tag>,\n },\n {\n title: t('common.status'),\n field: 'status',\n render: d => <BlockletStatus key={d.meta.did} status={d.status} source={d.source} />,\n },\n {\n title: t('common.visit'),\n field: 'runtimeInfo.pid',\n sorting: false,\n render: d => <BlockletInterface blocklet={d} siteMap={newSiteMap} />,\n },\n ]}\n />\n </TableStyle>\n );\n }\n\n return (\n <Main>\n <Header>\n <h1>{t('debug.title')}</h1>\n </Header>\n\n {error && (\n <Alert type=\"error\" variant=\"icon\">\n {formatError(error)}\n </Alert>\n )}\n\n {content}\n </Main>\n );\n}\n\nconst Header = styled.header`\n font-family: 'Roboto';\n h1 {\n font-size: 24px;\n .primary {\n color: #00c2c4;\n }\n }\n`;\n\nconst Main = styled.main`\n box-sizing: border-fox;\n padding: 10px 10px 40px;\n max-width: 800px;\n margin: 0 auto;\n\n .blocklet-list {\n .blocklet-name {\n font-weight: bold;\n display: flex;\n align-items: center;\n }\n\n .blocklet-interface {\n display: flex;\n align-items: center;\n justify-content: flex-start;\n\n img {\n margin-right: 4px;\n }\n }\n\n .MuiToolbar-regular {\n min-height: 0;\n border-bottom: 1px solid #ddd;\n }\n\n .MuiToolbar-root {\n display: flex;\n }\n\n .MuiTableHead-root th {\n min-width: 100px;\n }\n }\n`;\n","import Add from '@material-ui/icons/Add';\nimport Check from '@material-ui/icons/Check';\nimport Delete from '@material-ui/icons/Delete';\nimport Clear from '@material-ui/icons/Clear';\nimport Export from '@material-ui/icons/SaveAlt';\nimport Edit from '@material-ui/icons/Edit';\nimport Filter from '@material-ui/icons/Filter';\nimport FirstPage from '@material-ui/icons/FirstPage';\nimport LastPage from '@material-ui/icons/LastPage';\nimport NextPage from '@material-ui/icons/ChevronRight';\nimport PreviousPage from '@material-ui/icons/ChevronLeft';\nimport Search from '@material-ui/icons/Search';\nimport SortArrow from '@material-ui/icons/ArrowDropDown';\nimport ThirdStateCheck from '@material-ui/icons/Remove';\nimport ViewColumn from '@material-ui/icons/ViewColumn';\n\nexport default {\n Add,\n Check,\n Delete,\n Edit,\n Clear,\n DetailPanel: NextPage,\n Filter,\n FirstPage,\n LastPage,\n NextPage,\n PreviousPage,\n Search,\n ResetSearch: Clear,\n SortArrow,\n Export,\n ThirdStateCheck,\n ViewColumn,\n};\n","import styled from 'styled-components';\n\nconst TableStyle = styled.div`\n .MuiPaper-root {\n box-shadow: none !important;\n border: none !important;\n border-radius: 0 !important;\n background: transparent;\n }\n .MuiToolbar-root {\n background: transparent;\n padding-left: 0;\n display: none;\n }\n\n .MuiTableHead-root th {\n min-width: 100px;\n background: transparent;\n }\n\n .MuiTable-root {\n overflow-y: hidden;\n }\n .MuiTableRow-root {\n border: none !important;\n }\n\n .MuiTableCell-root {\n padding-right: 16px;\n &:last-of-type {\n padding-right: 0;\n }\n }\n`;\n\nexport default TableStyle;\n"],"sourceRoot":""}
@@ -1,2 +0,0 @@
1
- (this["webpackJsonp@abtnode/webapp"]=this["webpackJsonp@abtnode/webapp"]||[]).push([[24],{1031:function(e,t,n){"use strict";n.d(t,"a",(function(){return u}));var a=n(13),r=n(0),o=n(30),c=n(1013),i=n.n(c),s=n(37),l=n(365),m=n(23);function u(e){var t=Object(l.a)(),n=Object(o.k)(),c=i()("sid:blocklet:purchase:".concat(e)),u=Object(a.a)(c,2),p=u[0],d=u[1],b=Object(r.useState)(!1),f=Object(a.a)(b,2),h=f[0],g=f[1],y=Object(r.useState)(null),w=Object(a.a)(y,2),v=w[0],k=w[1],x=function(){var e=new URL(window.location.href),t=e.pathname,a=e.searchParams,r=window.env&&window.env.apiPrefix?window.env.apiPrefix:"/";a.get("sid")&&(d(""),n.replace(t.replace(r,"/")))},E=!(!t.get("assetDid")||!p||t.get("sid")!==p);return Object(m.c)(s.BlockletEvents.purchaseChange,(function(t){t.did===e&&(k(t.session),["declined","confirmed","error"].includes(t.session.status)&&(g(!0),setTimeout(x,2e3)))})),Object(r.useEffect)((function(){v&&v.id!==p&&d(v.id)}),[v]),{hasCompleted:h,hasPurchased:E,session:v,setSession:k,doRedirect:x}}},1108:function(e,t,n){"use strict";var a=n(59),r=n(10),o=n.n(r),c=n(19),i=n(13),s=n(0),l=n.n(s),m=n(97),u=n.n(m),p=n(326),d=n(51),b=n.n(d),f=n(974),h=n.n(f),g=n(65),y=n(900),w=n(901),v=n(916),k=n(952),x=n(1147),E=n.n(x),j=n(1148),O=n.n(j),_=n(20),N=n(105),P=n.n(N),C=n(152),A=n.n(C),S=n(153),B=n.n(S),R=n(54),z=n(29),U=n(42),L=n(1031),M=Object(p.a)((function(){return{dialogAuth:{padding:"0 0 24px !important","& .auth-title":{textAlign:"center !important",marginBottom:"4px !important"},"& .auth-tip--scan":{textAlign:"center !important"}},iconRoot:{minWidth:48}}}));function T(e){var t=e.meta,n=e.mode,r=e.onCancel,m=e.installOpts,p=Object(_.useLocaleContext)(),d=p.t,f=p.locale,x=Object(z.c)(),j=x.info,N=x.api,C=Object(R.c)().api,S=M(),T=Object(s.useState)("both"!==n?n:""),D=Object(i.a)(T,2),F=D[0],W=D[1],V=Object(s.useState)("both"!==n?2:1),q=Object(i.a)(V,2),J=q[0],I=q[1],H=Object(L.a)(t.did),K=H.session,Y=H.setSession,G=H.hasCompleted,Q=H.doRedirect,X=Object(U.v)(j),Z=window.env&&window.env.apiPrefix?window.env.apiPrefix:"/",$=function(){var e=Object(c.a)(o.a.mark((function e(t){return o.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t!==F){e.next=2;break}return e.abrupt("return");case 2:W(t);case 3:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}(),ee=function(){var e=Object(c.a)(o.a.mark((function e(){var n,r,i;return o.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(F){e.next=2;break}return e.abrupt("return");case 2:if(2!==J){e.next=4;break}return e.abrupt("return");case 4:return n="component"===m.type?Object(a.a)(Object(a.a)({},m),{},{blockletDid:t.did,action:F}):{registryUrl:j.blockletRegistry,blockletDid:t.did,action:F},e.next=7,N.startSession({input:{data:JSON.stringify(n)}});case 7:r=e.sent,i=r.session,Y(i),I(2),"purchase"===F&&setTimeout(Object(c.a)(o.a.mark((function e(){var n,a,r,c,s,l;return o.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return(n=new URL(window.location.href)).searchParams.delete("assetDid"),n.searchParams.set("sid",i.id),n.searchParams.set("locale",f),n.searchParams.set("did",t.did),a=encodeURIComponent(n.href),(r=new URL(window.location.href)).pathname=u()(Z,"/api/did/verify-purchase/token"),r.searchParams.set("sid",i.id),r.searchParams.set("locale",f),r.searchParams.set("autoConnect","false"),e.next=13,C.get(r.href);case 13:c=e.sent,s=c.data,l=encodeURIComponent(s.url),window.location.href=u()(j.blockletRegistry,"/store/purchase/".concat(t.nftFactory,"?cb=").concat(a,"&nw=").concat(l));case 17:case"end":return e.stop()}}),e)}))),100);case 12:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}(),te=function(){Q(),r(),I(1)},ne=[{action:"purchase",title:d("store.purchase.purchase.title"),description:d("store.purchase.purchase.description")},{action:"verify",title:d("store.purchase.verify.title"),description:d("store.purchase.verify.description")}];return 2===J&&"verify"===F&&K?l.a.createElement(A.a,{popup:!0,open:!0,className:S.dialogAuth,action:"verify-purchase",checkFn:C.get,checkTimeout:6e5,socketUrl:C.socketUrl,webWalletUrl:X,extraParams:{locale:f,sid:K.id},onSuccess:function(){setTimeout(r,2e3)},onClose:te,showDownload:!1,locale:f,messages:{title:d("store.purchase.auth.title"),scan:d("store.purchase.auth.scan"),confirm:d("store.purchase.auth.confirm"),success:d("store.purchase.auth.success")}}):l.a.createElement(h.a,{title:d(F&&2===J?"store.purchase.".concat(F,".title"):"store.purchase.title"),disableBackdropClick:!0,disableEscapeKeyDown:!0,open:!0,fullWidth:!0,onClose:te},1===J&&l.a.createElement("div",{style:{marginBottom:16}},l.a.createElement(y.a,{className:S.tabPanel},ne.map((function(e){return l.a.createElement(w.a,{button:!0,key:e.action,selected:F===e.action,onClick:function(){return $(e.action)}},l.a.createElement(k.a,{className:S.iconRoot},"purchase"===e.action?l.a.createElement(E.a,{style:{color:"purchase"===F?B.a.primary.main:"#AAA",fontSize:32}}):l.a.createElement(O.a,{style:{color:"verify"===F?B.a.primary.main:"#AAA",fontSize:32}})),l.a.createElement(v.a,{primary:e.title,secondary:e.description}))}))),l.a.createElement(P.a,{rounded:!0,fullWidth:!0,disabled:!F,variant:"contained",color:"primary",style:{marginTop:16},onClick:ee},d("common.next"))),2===J&&"purchase"===F&&l.a.createElement("div",{style:{textAlign:"center"}},!G&&l.a.createElement(b.a,null),l.a.createElement(g.a,{component:"p"},function(){if(K){if("confirmed"===K.status)return d("store.purchase.confirmed");if("declined"===K.status)return d("store.purchase.declined");if("error"===K.status)return K.message}return d("store.purchase.waiting")}())))}T.defaultProps={installOpts:{type:"blocklet",rootDid:"",mountPoint:"",url:""}},t.a=Object(s.forwardRef)(T)},1275:function(e,t,n){"use strict";n.d(t,"a",(function(){return N}));var a=n(10),r=n.n(a),o=n(19),c=n(13),i=n(119),s=n(0),l=n.n(s),m=n(30),u=n(265),p=n(79),d=n(1274),b=n(51),f=n.n(b),h=n(65),g=n(105),y=n.n(g),w=n(20),v=n(1034),k=n(348),x=n(42),E=n(1031),j=n(344),O=n(1108),_=["meta","lastVersion","buttonText","registryUrl"];function N(e){var t=e.meta,n=e.lastVersion,a=e.buttonText,b=e.registryUrl,g=Object(i.a)(e,_),N=Object(p.c)().enqueueSnackbar,P=Object(w.useLocaleContext)().t,C=Object(m.k)(),A=Object(k.b)(),S=A.api,B=A.data.find((function(e){return e.meta.did===t.did}))||{},R=Object(s.useMemo)((function(){return!!B.status}),[B.status]),z=Object(s.useMemo)((function(){var e;return R?null===(e=B.meta)||void 0===e?void 0:e.version:null}),[R,B.meta]),U=!1===Object(u.isFreeBlocklet)(t),L=Object(s.useState)(!1),M=Object(c.a)(L,2),T=M[0],D=M[1],F=Object(E.a)(t.did).hasPurchased,W=Object(s.useState)(!1),V=Object(c.a)(W,2),q=V[0],J=V[1],I=Object(s.useMemo)((function(){return T?P(R?"blocklet.status.upgrading":U?"blocklet.status.purchasing":"blocklet.status.waiting"):Object(x.y)(B.status)?P("common.".concat(B.status)):""}),[T,B.status,R,P,U]),H=Object(s.useMemo)((function(){return!(!n||!z)&&!(!n||!Object(v.gt)(n,z))}),[n,z]),K=Object(s.useMemo)((function(){return H?a.upgrade:R?a.open:U?a.purchase:a.install}),[R,H,U,a]),Y=Object(s.useMemo)((function(){return!(R&&!H)}),[R,H]),G=function(){var e=Object(o.a)(r.a.mark((function e(n){var a;return r.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(n.preventDefault(),n.stopPropagation(),e.prev=2,D(!0),R||!U){e.next=7;break}return J(!0),e.abrupt("return");case 7:return a=R?"upgradeBlocklet":"installBlocklet",e.next=10,S[a]({input:{did:t.did,registryUrl:b}});case 10:e.next=16;break;case 12:e.prev=12,e.t0=e.catch(2),N(Object(x.e)(e.t0),{autoHideDuration:5e3,variant:"error"}),console.error("Blocklet installed failed",e.t0);case 16:return e.prev=16,D(!1),e.finish(16);case 19:case"end":return e.stop()}}),e,null,[[2,12,16,19]])})));return function(t){return e.apply(this,arguments)}}(),Q=function(e){var n=e.disabled;return l.a.createElement(y.a,Object.assign({key:t.did,onClick:G,size:"small",disabled:Boolean(I||n),variant:"contained",color:"primary","data-cy":"install-blocklet",rounded:!0},g),I?l.a.createElement(l.a.Fragment,null,l.a.createElement(f.a,{size:[16,10],style:{marginRight:3}}),I):K)};Q.defaultProps={disabled:!1};return l.a.createElement(l.a.Fragment,null,l.a.createElement(d.ActionButton,null,Y?l.a.createElement(j.a,{permission:"mutate_blocklet"},(function(e){return l.a.createElement(Q,{disabled:!e})})):l.a.createElement(y.a,{rounded:!0,className:"action-button",variant:"contained",color:"primary",size:"small",disabled:Boolean(I),"data-cy":"open-blocklet",onClick:function(e){var n;e.preventDefault(),e.stopPropagation(),C.push("/blocklets/".concat(t.did,"/").concat((n=B)&&(n.configs||[]).some((function(e){return e.required&&!e.value}))?"configuration":"overview"))}},I?l.a.createElement(l.a.Fragment,null,l.a.createElement(f.a,{size:[16,10],style:{marginRight:3}}),I):K),R&&U&&l.a.createElement(h.a,{component:"small",style:{fontSize:12,color:"#666",marginLeft:4}},P("blocklet.status.purchased"))),(F&&!R||q)&&l.a.createElement(O.a,{meta:t,mode:F?"purchase":"both",onCancel:function(){D(!1),J(!1)}}))}N.defaultProps={lastVersion:""}},1859:function(e,t,n){"use strict";n.r(t),n.d(t,"default",(function(){return Z}));var a,r=n(32),o=n(10),c=n.n(o),i=n(19),s=n(13),l=n(0),m=n.n(l),u=n(14),p=n(366),d=n.n(p),b=n(30),f=n(61),h=n(97),g=n.n(h),y=n(51),w=n.n(y),v=n(65),k=n(959),x=n(949),E=n(191),j=n.n(E),O=n(1623),_=n.n(O),N=n(346),P=n.n(N),C=n(265),A=n(20),S=(n(1624),n(1625),n(119)),B=n(550),R=n.n(B),z=["stats"];function U(e){var t=e.stats,n=Object(S.a)(e,z),a=Object(l.useContext)(A.LocaleContext).t;return t.downloads=t.downloads||0,m.a.createElement(L,Object.assign({component:"p"},n),m.a.createElement("span",{className:"blocklet__stat",title:a("blocklet.list.download")},m.a.createElement(R.a,{name:"arrow-to-bottom",size:14,className:"blocklet__stat__icon"}),t.downloads),!!t.star&&m.a.createElement("span",{className:"blocklet__stat",title:a("blocklet.list.star")},m.a.createElement(R.a,{name:"heart",size:14,className:"blocklet__stat__icon"}),t.star))}var L=Object(u.default)(v.a)(a||(a=Object(r.a)(["\n .blocklet__stat {\n margin-right: 16px;\n font-size: 14px;\n font-weight: 500;\n color: #999;\n &:last-child {\n // \u7406\u8bba\u4e0a\u9700\u8981\u8bbe\u7f6e\u62100\uff0c\u4f46\u89c6\u89c9\u6548\u679c\u4e0d\u662f\u5f88\u597d\uff0c\u52a0\u4e0a\u4e86\u4e00\u4e2a\u5c0f\u7684\u95f4\u8ddd\n margin-right: 5px;\n }\n\n .blocklet__stat__icon {\n margin-right: 4px;\n color: inherit !important;\n }\n }\n"]))),M=n(1626),T=n.n(M),D=n(5),F=n.n(D),W=n(89),V=n.n(W),q=n(1645),J=n.n(q);J.a.propTypes={children:F.a.node.isRequired};var I={pre:function(e){var t=e.children;if(!Array.isArray(V()(t,"[0].props.children")))return null;var n=t[0].props,a=n.className,r=Object(s.a)(n.children,1)[0],o=(a||"").split("-").pop();return r?m.a.createElement(J.a,{language:o||"shell",code:r}):null},alert:P.a,p:function(e){return m.a.createElement(v.a,Object.assign({variant:"body1"},e))},h2:function(e){return m.a.createElement(v.a,Object.assign({variant:"h3"},e))},h3:function(e){return m.a.createElement(v.a,Object.assign({variant:"h4"},e))},h4:function(e){return m.a.createElement(v.a,Object.assign({variant:"h5"},e))},h5:function(e){return m.a.createElement(v.a,Object.assign({variant:"h5"},e))},h6:function(e){return m.a.createElement(v.a,Object.assign({variant:"h6"},e))}};var H,K,Y=new T.a({createElement:function(e,t,n){var a=I&&e&&I[e]||e||"div";return m.a.createElement(a,t,n)}}).Compiler,G=n(1275),Q=n(29),X=n(42);function Z(){var e=Object(b.m)().did,t=Object(Q.c)(),n=t.api,a=t.info,r=Object(A.useLocaleContext)().t,o=Object(l.useState)([]),u=Object(s.a)(o,2),p=u[0],h=u[1],y=a.blockletRegistryList.find((function(e){return e.selected})),E=d()(Object(i.a)(c.a.mark((function t(){var r,o;return c.a.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,n.getBlockletMeta({input:{did:e,registryUrl:a.blockletRegistry}});case 2:return r=t.sent,o=r.meta,h(o.version),t.abrupt("return",o);case 6:case"end":return t.stop()}}),t)})))),O=function(){var e=Object(i.a)(c.a.mark((function e(t){var a,r,o,i;return c.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return a=t.action,r=t.version,o=t.blocklet,e.prev=1,i="install"===a?"installBlocklet":"upgradeBlocklet",e.next=5,n[i]({input:{did:o.did,version:r}});case 5:E.retry(),e.next=11;break;case 8:e.prev=8,e.t0=e.catch(1),console.error("Blocklet ".concat(a," failed"),e.t0);case 11:case"end":return e.stop()}}),e,null,[[1,8]])})));return function(t){return e.apply(this,arguments)}}(),N=null,S=Object(l.useMemo)((function(){return Object(X.f)(E.value)}),[E.value]);if(E.value){var B=E.value,R=B.name,z=B.version,L=B.keywords,M=B.htmlAst,T=B.stats,D=B.screenshots,F=void 0===D?[]:D,W=B.author,V=B.documentation,q=B.repository,J=B.community,I=B.support,H=B.title,K=B.lastPublishedAt,Z=B.color,$=void 0===Z?"primary":Z;M&&M.children&&Array.isArray(M.children)&&function e(t,n){t.forEach((function(t){t.tagName&&"img"===t.tagName&&t.properties&&t.properties.src&&!t.properties.src.startsWith("http")&&(t.properties.src=g()(n,"/".concat(t.properties.src)),t.properties.srcSet&&Array.isArray(t.properties.srcSet)&&(t.properties.srcSet=t.properties.srcSet.map((function(e){return e.startsWith("http")?e:g()(n,e)})))),t.children&&Array.isArray(t.children)&&t.children.length>0&&e(t.children,n)}))}(M.children,a.blockletRegistry);var ne=H||R;N=m.a.createElement(ee,{color:$},m.a.createElement("div",{className:"meta"},m.a.createElement(v.a,{component:"h2",variant:"h2",className:"title"},ne,m.a.createElement("span",{className:"payment"},m.a.createElement("span",{className:"payment__price"},Object(C.isFreeBlocklet)(E.value)?r("common.free"):S.map((function(e){return"".concat(e.value," ").concat(e.name)})).join(" + ")),m.a.createElement("span",{className:"payment__tip"},Object(C.isFreeBlocklet)(E.value)?"This blocklet is free to use":"You need to pay to use this blocklet"))),m.a.createElement(U,{stats:T,className:"blocklet__stats"}),m.a.createElement(v.a,{component:"p",className:"tags"},m.a.createElement(j.a,{className:"tag",type:"reverse"},"v",z),Array.isArray(L)&&L.length>0&&L.map((function(e){return m.a.createElement(j.a,{className:"tag",key:e},e)})))),m.a.createElement("div",{className:"markdown-body"},m.a.createElement(x.a,{container:!0,spacing:4},F.length>0?m.a.createElement(x.a,{item:!0,xs:12,md:8},m.a.createElement(_.a,{lazyLoad:!0,showNav:!1,showThumbnails:!0,showPlayButton:!1,showFullscreenButton:!1,showBullets:!0,items:F.map((function(t){return{original:g()(a.blockletRegistry,Object(X.j)(e,t)),thumbnail:g()(a.blockletRegistry,Object(X.j)(e,t))}}))})):m.a.createElement(x.a,{item:!0,xs:12,md:8},m.a.createElement(te,{component:"div",className:"content-wrapper post-content"},M?Y(M):r("store.detail.empty"))),m.a.createElement(x.a,{item:!0,xs:12,md:4},m.a.createElement(G.a,{meta:E.value,lastVersion:p,onSubmit:O,className:"action-button",buttonText:{purchase:r("store.detail.purchase",{name:ne}),open:r("store.detail.open",{name:ne}),install:r("store.detail.install",{name:ne}),upgrade:r("store.detail.upgrade",{name:ne})},registryUrl:y.url}),m.a.createElement(v.a,{component:"ul",className:"meta-info"},!!W&&m.a.createElement("li",{className:"meta-info__row"},m.a.createElement("span",{className:"info-row__key"},r("common.author")),m.a.createElement("span",{className:"info-row__value"},Object(X.h)(W))),!!q&&!!q.url&&m.a.createElement("li",{className:"meta-info__row"},m.a.createElement("span",{className:"info-row__key"},r("common.repository")),m.a.createElement("a",{href:Object(X.C)(q.url),target:"_blank",className:"info-row__value",title:q.type},Object(X.C)(q.url))),!!J&&m.a.createElement("li",{className:"meta-info__row"},m.a.createElement("span",{className:"info-row__key"},r("common.community")),m.a.createElement("a",{href:J,target:"_blank",className:"info-row__value"},J)),!!V&&m.a.createElement("li",{className:"meta-info__row"},m.a.createElement("span",{className:"info-row__key"},r("common.documentation")),m.a.createElement("a",{href:V,target:"_blank",className:"info-row__value"},V)),!!I&&m.a.createElement("li",{className:"meta-info__row"},m.a.createElement("span",{className:"info-row__key"},r("common.support")),m.a.createElement("a",{href:"mailto:".concat(I),target:"_blank",className:"info-row__value"},I)),K&&m.a.createElement("li",{className:"meta-info__row"},m.a.createElement("span",{className:"info-row__key"},r("common.lastPublishedAt")),m.a.createElement("span",{className:"info-row__value",title:Object(X.n)(K)},Object(X.l)(K)))))),F.length>0&&m.a.createElement(te,{component:"div",className:"content-wrapper post-content"},Y(M))))}else N=E.error?m.a.createElement(P.a,{type:"error",variant:"icon"},Object(X.e)(E.error)):m.a.createElement(w.a,null);return m.a.createElement("main",null,m.a.createElement(k.a,{separator:"\u203a","aria-label":"breadcrumb",className:"page-breadcrumb"},m.a.createElement(f.Link,{color:"secondary",to:"/store"},m.a.createElement(v.a,{color:"secondary"},r("common.store"))),m.a.createElement(v.a,{color:"textPrimary"},y.name),m.a.createElement(v.a,{color:"textPrimary"},r("common.detail"))),N)}var $="source-code-pro, Menlo, Monaco, Consolas, Courier New, monospace !important",ee=u.default.div(H||(H=Object(r.a)(["\n margin: 24px 0;\n\n .title {\n font-size: 40px;\n font-weight: bold;\n color: ",";\n margin-bottom: 10px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n @media (max-width: ","px) {\n flex-direction: column;\n justify-content: flex-start;\n align-items: flex-start;\n }\n }\n\n .payment {\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n @media (max-width: ","px) {\n margin-top: 16px;\n align-items: flex-start;\n }\n\n .payment__price {\n margin-bottom: 8px;\n color: ",";\n }\n\n .payment__tip {\n font-size: 14px;\n color: ",";\n font-weight: normal;\n }\n }\n\n .blocklet__stats {\n margin-bottom: 16px;\n }\n\n .tags {\n margin: 16px 0 48px;\n @media (max-width: ","px) {\n margin-bottom: 32px;\n }\n\n .tag {\n margin-right: 8px;\n text-transform: capitalize;\n &:last-of-type {\n margin-right: 0;\n }\n }\n }\n\n .action-button {\n width: 100%;\n padding: 8px 22px;\n border-radius: 0 !important;\n }\n\n .meta-info {\n list-style: none;\n padding: 0;\n margin: 24px 0;\n\n .meta-info__row {\n display: flex;\n line-height: 2;\n }\n\n .info-row__key {\n width: 130px;\n flex-shrink: 0;\n font-weight: 500;\n }\n .info-row__value {\n white-space: break-word;\n word-break: break-all;\n }\n }\n\n .sidebar-buttons {\n display: flex;\n justify-content: space-between;\n align-items: center;\n }\n\n .use-button {\n width: 100%;\n }\n\n .image-gallery {\n .image-gallery-thumbnail.active {\n border-color: ",";\n }\n .image-gallery-bullets .image-gallery-bullet {\n border-color: ",";\n box-shadow: none;\n }\n .image-gallery-bullets .image-gallery-bullet.active {\n background-color: ",";\n }\n .image-gallery-slide {\n .image-gallery-image {\n display: flex;\n justify-content: center;\n img {\n max-height: 600px !important;\n width: auto;\n margin: 0 auto;\n @media (max-width: ","px) {\n height: auto;\n max-height: auto;\n }\n }\n }\n }\n }\n\n .markdown-body .highlight pre,\n .markdown-body pre {\n background-color: #222;\n border-radius: 5px;\n }\n .markdown-body code {\n font-family: ",";\n }\n .markdown-body pre code {\n color: #fff;\n font-size: 14px;\n font-family: ",";\n }\n\n .markdown-body h1,\n .markdown-body h2,\n .markdown-body h3,\n .markdown-body h4,\n .markdown-body h5,\n .markdown-body h6 {\n font-weight: 600;\n line-height: 1.25;\n margin-bottom: 16px;\n margin-top: 24px;\n border-bottom: none;\n }\n\n .markdown-body .CodeMirror pre {\n background: #f6f8fa !important;\n }\n\n .markdown-body .anchor {\n display: none;\n }\n"])),(function(e){return e.theme.palette.text.primary}),(function(e){return e.theme.breakpoints.values.sm}),(function(e){return e.theme.breakpoints.values.sm}),(function(e){return e.theme.palette.primary.main}),(function(e){return e.theme.palette.text.primary}),(function(e){return e.theme.breakpoints.values.sm}),(function(e){return e.theme.palette.primary.main}),(function(e){return e.theme.palette.primary.main}),(function(e){return e.theme.palette.primary.main}),(function(e){return e.theme.breakpoints.values.sm}),$,$),te=Object(u.default)(v.a)(K||(K=Object(r.a)(["\n width: 100%;\n word-wrap: break-word;\n word-break: break-word;\n line-height: 1.5em;\n\n .alert-content {\n max-width: 100%;\n p:last-of-type {\n margin-bottom: 0;\n }\n }\n\n iframe {\n width: 100% !important;\n }\n\n a {\n color: ",";\n }\n"])),(function(e){return e.theme.palette.primary.main}))}}]);
2
- //# sourceMappingURL=24.a5f785c7.chunk.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["hooks/blocklet-purchase.js","components/blocklet/purchase.js","components/blocklet/install.js","components/blocklet/stats.js","components/code.js","components/render-ast.js","pages/store/detail.js"],"names":["useBlockletPurchase","did","query","useQuery","history","useHistory","useLocalStorage","sessionId","setSessionId","useState","hasCompleted","setCompleted","session","setSession","doRedirect","URL","window","location","href","pathname","searchParams","prefix","env","apiPrefix","get","replace","hasPurchased","useSubscription","BlockletEvents","purchaseChange","e","includes","status","setTimeout","useEffect","id","useStyles","makeStyles","dialogAuth","padding","textAlign","marginBottom","iconRoot","minWidth","BlockletPurchase","meta","mode","onCancel","installOpts","useLocaleContext","t","locale","useNodeContext","info","gql","api","useSessionContext","classes","action","setAction","step","setStep","webWalletUrl","getWebWalletUrl","onSelect","act","a","onNext","payload","type","blockletDid","registryUrl","blockletRegistry","startSession","input","data","JSON","stringify","initial","cb","delete","set","callback","encodeURIComponent","nw","joinURL","nextWorkflow","url","nftFactory","onClose","options","title","description","popup","open","className","checkFn","checkTimeout","socketUrl","extraParams","sid","onSuccess","showDownload","messages","scan","confirm","success","disableBackdropClick","disableEscapeKeyDown","fullWidth","style","tabPanel","map","x","button","key","selected","onClick","color","colors","primary","main","fontSize","secondary","rounded","disabled","variant","marginTop","component","message","getMessage","defaultProps","rootDid","mountPoint","forwardRef","InstallOrUpgrade","lastVersion","buttonText","rest","enqueueSnackbar","useSnackbar","useBlockletContext","state","find","d","installed","useMemo","installedVersion","version","requirePurchase","isFreeBlocklet","loading","setLoading","showPurchaseDialog","setShowPurchaseDialog","loadingText","isInstalling","needUpgrade","gt","btnTxt","upgrade","purchase","install","showInstallBtn","onAction","preventDefault","stopPropagation","fn","formatError","autoHideDuration","console","error","InstallButton","size","Boolean","data-cy","marginRight","permission","hasPermission","push","configs","some","required","value","marginLeft","Stats","stats","useContext","LocaleContext","downloads","Div","name","star","styled","Typography","CodeBlock","propTypes","children","PropTypes","node","isRequired","components","pre","Array","isArray","props","code","language","split","pop","alert","Alert","p","h2","h3","h4","h5","h6","RehypeReact","createElement","Tag","BlockletStoreDetail","useParams","setLastVersion","currentRegistry","blockletRegistryList","useAsyncRetry","getBlockletMeta","onSubmit","blocklet","retry","content","priceList","formatFactoryPrice","keywords","htmlAst","screenshots","author","documentation","repository","community","support","lastPublishedAt","changeImgSrc","forEach","child","tagName","properties","src","startsWith","srcSet","item","length","titleInfo","join","keyword","Grid","container","spacing","xs","md","lazyLoad","showNav","showThumbnails","showPlayButton","showFullscreenButton","showBullets","items","original","formatRegistryScreenshotPath","thumbnail","PostContent","renderAst","formatPerson","parseRegistryUrl","target","formatToDatetime","formatTimeFromNow","Breadcrumbs","separator","aria-label","to","codeFont","div","theme","palette","text","breakpoints","values","sm"],"mappings":"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","file":"static/js/24.a5f785c7.chunk.js","sourcesContent":["import { useState, useEffect } from 'react';\nimport { useHistory } from 'react-router-dom';\nimport useLocalStorage from 'react-use/lib/useLocalStorage';\n\nimport { BlockletEvents } from '@blocklet/meta/lib/constants';\n\nimport useQuery from './query';\nimport { useSubscription } from '../libs/ws';\n\nexport default function useBlockletPurchase(did) {\n const query = useQuery();\n const history = useHistory();\n const [sessionId, setSessionId] = useLocalStorage(`sid:blocklet:purchase:${did}`);\n const [hasCompleted, setCompleted] = useState(false);\n const [session, setSession] = useState(null);\n\n const doRedirect = () => {\n const { pathname, searchParams } = new URL(window.location.href);\n const prefix = window.env && window.env.apiPrefix ? window.env.apiPrefix : '/';\n if (searchParams.get('sid')) {\n setSessionId('');\n history.replace(pathname.replace(prefix, '/'));\n }\n };\n\n const hasPurchased = !!(query.get('assetDid') && sessionId && query.get('sid') === sessionId);\n\n useSubscription(BlockletEvents.purchaseChange, e => {\n if (e.did === did) {\n setSession(e.session);\n\n if (['declined', 'confirmed', 'error'].includes(e.session.status)) {\n setCompleted(true);\n setTimeout(doRedirect, 2000);\n }\n }\n });\n\n useEffect(() => {\n if (session && session.id !== sessionId) {\n setSessionId(session.id);\n }\n }, [session]); // eslint-disable-line\n\n return {\n hasCompleted,\n hasPurchased,\n session,\n setSession,\n doRedirect,\n };\n}\n","/* eslint-disable react/jsx-one-expression-per-line */\nimport React, { forwardRef, useState } from 'react';\nimport joinURL from 'url-join';\nimport PropTypes from 'prop-types';\n\nimport { makeStyles } from '@material-ui/core/styles';\n\nimport Spinner from '@arcblock/ux/lib/Spinner';\nimport Dialog from '@arcblock/ux/lib/Dialog';\nimport Typography from '@material-ui/core/Typography';\nimport List from '@material-ui/core/List';\nimport ListItem from '@material-ui/core/ListItem';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport ListItemIcon from '@material-ui/core/ListItemIcon';\n\nimport IconPurchase from '@material-ui/icons/ShoppingCart';\nimport IconVerify from '@material-ui/icons/VerifiedUser';\n\nimport { useLocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport Button from '@arcblock/ux/lib/Button';\nimport DidConnect from '@arcblock/did-connect/lib/Connect';\nimport colors from '@arcblock/ux/lib/Colors';\n\nimport { useSessionContext } from '../../contexts/session';\nimport { useNodeContext } from '../../contexts/node';\nimport { getWebWalletUrl } from '../../libs/util';\nimport useBlockletPurchase from '../../hooks/blocklet-purchase';\n\nconst useStyles = makeStyles(() => ({\n dialogAuth: {\n padding: '0 0 24px !important',\n '& .auth-title': {\n textAlign: 'center !important',\n marginBottom: '4px !important',\n },\n '& .auth-tip--scan': {\n textAlign: 'center !important',\n },\n },\n iconRoot: {\n minWidth: 48,\n },\n}));\n\nfunction BlockletPurchase({ meta, mode, onCancel, installOpts }) {\n const { t, locale } = useLocaleContext();\n const { info, api: gql } = useNodeContext();\n const { api } = useSessionContext();\n const classes = useStyles();\n const [action, setAction] = useState(mode !== 'both' ? mode : '');\n const [step, setStep] = useState(mode !== 'both' ? 2 : 1);\n const { session, setSession, hasCompleted, doRedirect } = useBlockletPurchase(meta.did);\n\n const webWalletUrl = getWebWalletUrl(info);\n const prefix = window.env && window.env.apiPrefix ? window.env.apiPrefix : '/';\n\n const onSelect = async act => {\n if (act === action) {\n return;\n }\n\n setAction(act);\n };\n\n const onNext = async () => {\n if (!action) {\n return;\n }\n if (step === 2) {\n return;\n }\n\n // Start a new session and persist session id to local storage\n let payload;\n if (installOpts.type === 'component') {\n payload = { ...installOpts, blockletDid: meta.did, action };\n } else {\n payload = { registryUrl: info.blockletRegistry, blockletDid: meta.did, action };\n }\n\n const { session: initial } = await gql.startSession({ input: { data: JSON.stringify(payload) } });\n setSession(initial);\n\n setStep(2);\n\n if (action === 'purchase') {\n setTimeout(async () => {\n const cb = new URL(window.location.href);\n cb.searchParams.delete('assetDid');\n cb.searchParams.set('sid', initial.id);\n cb.searchParams.set('locale', locale);\n cb.searchParams.set('did', meta.did);\n const callback = encodeURIComponent(cb.href);\n\n const nw = new URL(window.location.href);\n nw.pathname = joinURL(prefix, '/api/did/verify-purchase/token');\n nw.searchParams.set('sid', initial.id);\n nw.searchParams.set('locale', locale);\n nw.searchParams.set('autoConnect', 'false');\n const { data } = await api.get(nw.href);\n const nextWorkflow = encodeURIComponent(data.url);\n\n window.location.href = joinURL(\n info.blockletRegistry,\n `/store/purchase/${meta.nftFactory}?cb=${callback}&nw=${nextWorkflow}`\n );\n }, 100);\n }\n };\n\n const onClose = () => {\n doRedirect();\n onCancel();\n setStep(1);\n };\n\n const onVerifySuccess = () => {\n setTimeout(onCancel, 2000);\n };\n\n const options = [\n {\n action: 'purchase',\n title: t('store.purchase.purchase.title'),\n description: t('store.purchase.purchase.description'),\n },\n {\n action: 'verify',\n title: t('store.purchase.verify.title'),\n description: t('store.purchase.verify.description'),\n },\n ];\n\n const getMessage = () => {\n if (session) {\n if (session.status === 'confirmed') {\n return t('store.purchase.confirmed');\n }\n if (session.status === 'declined') {\n return t('store.purchase.declined');\n }\n if (session.status === 'error') {\n return session.message;\n }\n }\n\n return t('store.purchase.waiting');\n };\n\n if (step === 2 && action === 'verify' && session) {\n return (\n <DidConnect\n popup\n open\n className={classes.dialogAuth}\n action=\"verify-purchase\"\n checkFn={api.get}\n checkTimeout={10 * 60 * 1000}\n socketUrl={api.socketUrl}\n webWalletUrl={webWalletUrl}\n extraParams={{ locale, sid: session.id }}\n onSuccess={onVerifySuccess}\n onClose={onClose}\n showDownload={false}\n locale={locale}\n messages={{\n title: t('store.purchase.auth.title'),\n scan: t('store.purchase.auth.scan'),\n confirm: t('store.purchase.auth.confirm'),\n success: t('store.purchase.auth.success'),\n }}\n />\n );\n }\n\n return (\n <Dialog\n title={action && step === 2 ? t(`store.purchase.${action}.title`) : t('store.purchase.title')}\n disableBackdropClick\n disableEscapeKeyDown\n open\n fullWidth\n onClose={onClose}>\n {step === 1 && (\n <div style={{ marginBottom: 16 }}>\n <List className={classes.tabPanel}>\n {options.map(x => (\n <ListItem button key={x.action} selected={action === x.action} onClick={() => onSelect(x.action)}>\n <ListItemIcon className={classes.iconRoot}>\n {x.action === 'purchase' ? (\n <IconPurchase\n style={{ color: action === 'purchase' ? colors.primary.main : '#AAA', fontSize: 32 }}\n />\n ) : (\n <IconVerify style={{ color: action === 'verify' ? colors.primary.main : '#AAA', fontSize: 32 }} />\n )}\n </ListItemIcon>\n <ListItemText primary={x.title} secondary={x.description} />\n </ListItem>\n ))}\n </List>\n <Button\n rounded\n fullWidth\n disabled={!action}\n variant=\"contained\"\n color=\"primary\"\n style={{ marginTop: 16 }}\n onClick={onNext}>\n {t('common.next')}\n </Button>\n </div>\n )}\n {step === 2 && action === 'purchase' && (\n <div style={{ textAlign: 'center' }}>\n {!hasCompleted && <Spinner />}\n <Typography component=\"p\">{getMessage()}</Typography>\n </div>\n )}\n </Dialog>\n );\n}\n\nBlockletPurchase.propTypes = {\n meta: PropTypes.object.isRequired,\n mode: PropTypes.oneOf(['both', 'verify']).isRequired,\n onCancel: PropTypes.func.isRequired,\n installOpts: PropTypes.object,\n};\n\nBlockletPurchase.defaultProps = {\n installOpts: {\n // blocklet: install blocklet. component: install blocklet component\n type: 'blocklet',\n\n // component install params\n rootDid: '',\n mountPoint: '',\n url: '',\n },\n};\n\nexport default forwardRef(BlockletPurchase);\n","/* eslint-disable react/jsx-one-expression-per-line */\nimport React, { useState, useMemo } from 'react';\nimport PropTypes from 'prop-types';\nimport { useHistory } from 'react-router-dom';\nimport { isFreeBlocklet } from '@blocklet/meta/lib/util';\nimport { useSnackbar } from 'notistack';\nimport { ActionButton } from '@arcblock/ux/lib/Blocklet';\n\nimport Spinner from '@arcblock/ux/lib/Spinner';\nimport Typography from '@material-ui/core/Typography';\nimport Button from '@arcblock/ux/lib/Button';\nimport { useLocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport { gt } from 'semver';\n\nimport { useBlockletContext } from '../../contexts/blocklets';\nimport { isInstalling, formatError } from '../../libs/util';\nimport useBlockletPurchase from '../../hooks/blocklet-purchase';\nimport Permission from '../permission';\nimport PurchaseDialog from './purchase';\n\nexport default function InstallOrUpgrade({ meta, lastVersion, buttonText, registryUrl, ...rest }) {\n const { enqueueSnackbar } = useSnackbar();\n const { t } = useLocaleContext();\n const history = useHistory();\n\n const { api, data: installedBlocklets } = useBlockletContext();\n const state = installedBlocklets.find(d => d.meta.did === meta.did) || {};\n\n const installed = useMemo(() => !!state.status, [state.status]);\n const installedVersion = useMemo(() => (installed ? state.meta?.version : null), [installed, state.meta]);\n const requirePurchase = isFreeBlocklet(meta) === false;\n\n const [loading, setLoading] = useState(false);\n const { hasPurchased } = useBlockletPurchase(meta.did);\n const [showPurchaseDialog, setShowPurchaseDialog] = useState(false);\n\n const loadingText = useMemo(() => {\n if (loading) {\n if (installed) {\n return t('blocklet.status.upgrading');\n }\n if (requirePurchase) {\n return t('blocklet.status.purchasing');\n }\n return t('blocklet.status.waiting');\n }\n if (isInstalling(state.status)) return t(`common.${state.status}`);\n return '';\n }, [loading, state.status, installed, t, requirePurchase]);\n\n const needUpgrade = useMemo(() => {\n if (!lastVersion || !installedVersion) {\n return false;\n }\n\n if (lastVersion) {\n if (gt(lastVersion, installedVersion)) {\n return true;\n }\n }\n\n return false;\n }, [lastVersion, installedVersion]);\n\n const btnTxt = useMemo(() => {\n if (needUpgrade) return buttonText.upgrade;\n if (installed) return buttonText.open;\n if (requirePurchase) return buttonText.purchase;\n return buttonText.install;\n }, [installed, needUpgrade, requirePurchase, buttonText]);\n\n // only installed without upgrade show open button\n const showInstallBtn = useMemo(() => !(installed && !needUpgrade), [installed, needUpgrade]);\n\n const onAction = async e => {\n e.preventDefault();\n e.stopPropagation();\n\n try {\n setLoading(true);\n // The purchase dialog should only show on install\n if (!installed && requirePurchase) {\n setShowPurchaseDialog(true);\n return;\n }\n\n const fn = !installed ? 'installBlocklet' : 'upgradeBlocklet';\n await api[fn]({ input: { did: meta.did, registryUrl } });\n } catch (err) {\n enqueueSnackbar(formatError(err), { autoHideDuration: 5000, variant: 'error' });\n console.error('Blocklet installed failed', err);\n } finally {\n setLoading(false);\n }\n };\n\n const InstallButton = ({ disabled }) => (\n <Button\n key={meta.did}\n onClick={onAction}\n size=\"small\"\n disabled={Boolean(loadingText || disabled)}\n variant=\"contained\"\n color=\"primary\"\n data-cy=\"install-blocklet\"\n rounded\n {...rest}>\n {loadingText ? (\n <>\n <Spinner size={[16, 10]} style={{ marginRight: 3 }} />\n {loadingText}\n </>\n ) : (\n btnTxt\n )}\n </Button>\n );\n\n InstallButton.propTypes = {\n disabled: PropTypes.bool,\n };\n\n InstallButton.defaultProps = {\n disabled: false,\n };\n const getTab = d => {\n if (d) {\n return (d.configs || []).some(x => x.required && !x.value) ? 'configuration' : 'overview';\n }\n\n return 'overview';\n };\n\n const onGoDetail = e => {\n e.preventDefault();\n e.stopPropagation();\n history.push(`/blocklets/${meta.did}/${getTab(state)}`);\n };\n\n const onCancelPurchase = () => {\n setLoading(false);\n setShowPurchaseDialog(false);\n };\n\n return (\n <>\n <ActionButton>\n {showInstallBtn ? (\n <Permission permission=\"mutate_blocklet\">\n {hasPermission => <InstallButton disabled={!hasPermission} />}\n </Permission>\n ) : (\n <Button\n rounded\n className=\"action-button\"\n variant=\"contained\"\n color=\"primary\"\n size=\"small\"\n disabled={Boolean(loadingText)}\n data-cy=\"open-blocklet\"\n onClick={onGoDetail}>\n {loadingText ? (\n <>\n <Spinner size={[16, 10]} style={{ marginRight: 3 }} />\n {loadingText}\n </>\n ) : (\n btnTxt\n )}\n </Button>\n )}\n\n {installed && requirePurchase && (\n <Typography component=\"small\" style={{ fontSize: 12, color: '#666', marginLeft: 4 }}>\n {t('blocklet.status.purchased')}\n </Typography>\n )}\n </ActionButton>\n {((hasPurchased && !installed) || showPurchaseDialog) && (\n <PurchaseDialog meta={meta} mode={hasPurchased ? 'purchase' : 'both'} onCancel={onCancelPurchase} />\n )}\n </>\n );\n}\n\nInstallOrUpgrade.propTypes = {\n meta: PropTypes.object.isRequired,\n lastVersion: PropTypes.string,\n buttonText: PropTypes.shape({\n purchase: PropTypes.string.isRequired,\n open: PropTypes.string.isRequired,\n install: PropTypes.string.isRequired,\n upgrade: PropTypes.string.isRequired,\n }).isRequired,\n registryUrl: PropTypes.string.isRequired,\n};\n\nInstallOrUpgrade.defaultProps = {\n lastVersion: '',\n};\n","import React, { useContext } from 'react';\nimport styled from 'styled-components';\nimport PropTypes from 'prop-types';\n\nimport Typography from '@material-ui/core/Typography';\nimport Icon from '@arcblock/ux/lib/Icon';\nimport { LocaleContext } from '@arcblock/ux/lib/Locale/context';\n\nexport default function Stats({ stats, ...rest }) {\n const { t } = useContext(LocaleContext);\n stats.downloads = stats.downloads || 0;\n return (\n <Div component=\"p\" {...rest}>\n {\n <span className=\"blocklet__stat\" title={t('blocklet.list.download')}>\n <Icon name=\"arrow-to-bottom\" size={14} className=\"blocklet__stat__icon\" />\n {stats.downloads}\n </span>\n }\n {/* star 暂未开放 */}\n {!!stats.star && (\n <span className=\"blocklet__stat\" title={t('blocklet.list.star')}>\n <Icon name=\"heart\" size={14} className=\"blocklet__stat__icon\" />\n {stats.star}\n </span>\n )}\n </Div>\n );\n}\n\nStats.propTypes = {\n stats: PropTypes.object.isRequired,\n};\n\nconst Div = styled(Typography)`\n .blocklet__stat {\n margin-right: 16px;\n font-size: 14px;\n font-weight: 500;\n color: #999;\n &:last-child {\n // 理论上需要设置成0,但视觉效果不是很好,加上了一个小的间距\n margin-right: 5px;\n }\n\n .blocklet__stat__icon {\n margin-right: 4px;\n color: inherit !important;\n }\n }\n`;\n","/* eslint-disable react/prop-types */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport get from 'lodash/get';\n\nimport CodeBlock from '@arcblock/ux/lib/CodeBlock';\n\nexport default function CodeBlockWrapper({ children }) {\n if (!Array.isArray(get(children, '[0].props.children'))) {\n return null;\n }\n\n const {\n className,\n children: [code],\n } = children[0].props;\n const language = (className || '').split('-').pop();\n\n if (!code) {\n return null;\n }\n\n return <CodeBlock language={language || 'shell'} code={code} />;\n}\n\nCodeBlock.propTypes = {\n children: PropTypes.node.isRequired,\n};\n","/* eslint-disable operator-linebreak */\nimport React from 'react';\nimport RehypeReact from 'rehype-react';\n\nimport Typography from '@material-ui/core/Typography';\nimport Alert from '@arcblock/ux/lib/Alert';\n\nimport CodeBlock from './code';\n\nconst components = {\n pre: CodeBlock,\n alert: Alert,\n p: props => <Typography variant=\"body1\" {...props} />,\n h2: props => <Typography variant=\"h3\" {...props} />,\n h3: props => <Typography variant=\"h4\" {...props} />,\n h4: props => <Typography variant=\"h5\" {...props} />,\n h5: props => <Typography variant=\"h5\" {...props} />,\n h6: props => <Typography variant=\"h6\" {...props} />,\n};\n\nfunction createElement(component, props, children) {\n const Tag =\n (components && component && components[component]) || // Get component from map if present\n component || // Otherwise just the string\n 'div'; // Default to div\n\n // And return the formed component\n return <Tag {...props}>{children}</Tag>;\n}\n\nexport default new RehypeReact({ createElement }).Compiler;\n","/* eslint-disable operator-linebreak */\n/* eslint-disable react/jsx-one-expression-per-line */\n/* eslint-disable react/jsx-no-target-blank */\nimport React, { useMemo, useState } from 'react';\nimport styled from 'styled-components';\nimport useAsyncRetry from 'react-use/lib/useAsyncRetry';\nimport { useParams, Link } from 'react-router-dom';\nimport joinURL from 'url-join';\n\nimport Spinner from '@arcblock/ux/lib/Spinner';\nimport Typography from '@material-ui/core/Typography';\nimport Breadcrumbs from '@material-ui/core/Breadcrumbs';\nimport Grid from '@material-ui/core/Grid';\nimport Tag from '@arcblock/ux/lib/Tag';\nimport ImageGallery from 'react-image-gallery';\n\nimport Alert from '@arcblock/ux/lib/Alert';\nimport { isFreeBlocklet } from '@blocklet/meta/lib/util';\nimport { useLocaleContext } from '@arcblock/ux/lib/Locale/context';\n\nimport 'github-markdown-css/github-markdown.css';\nimport 'react-image-gallery/styles/css/image-gallery.css';\n\nimport Stats from '../../components/blocklet/stats';\nimport renderAst from '../../components/render-ast';\nimport InstallOrUpgrade from '../../components/blocklet/install';\n\nimport { useNodeContext } from '../../contexts/node';\nimport {\n formatError,\n formatFactoryPrice,\n formatPerson,\n formatRegistryScreenshotPath,\n formatTimeFromNow,\n formatToDatetime,\n parseRegistryUrl,\n} from '../../libs/util';\n\nconst changeImgSrc = (children, blockletRegistry) => {\n children.forEach(child => {\n if (\n child.tagName &&\n child.tagName === 'img' &&\n child.properties &&\n child.properties.src &&\n !child.properties.src.startsWith('http')\n ) {\n child.properties.src = joinURL(blockletRegistry, `/${child.properties.src}`);\n if (child.properties.srcSet && Array.isArray(child.properties.srcSet)) {\n child.properties.srcSet = child.properties.srcSet.map(item => {\n if (!item.startsWith('http')) {\n return joinURL(blockletRegistry, item);\n }\n return item;\n });\n }\n }\n if (child.children && Array.isArray(child.children) && child.children.length > 0) {\n changeImgSrc(child.children, blockletRegistry);\n }\n });\n};\n\nexport default function BlockletStoreDetail() {\n const { did } = useParams();\n const { api, info } = useNodeContext();\n const { t } = useLocaleContext();\n const [lastVersion, setLastVersion] = useState([]);\n\n const currentRegistry = info.blockletRegistryList.find(x => x.selected);\n\n const state = useAsyncRetry(async () => {\n const { meta } = await api.getBlockletMeta({ input: { did, registryUrl: info.blockletRegistry } });\n\n setLastVersion(meta.version);\n\n return meta;\n });\n\n const onSubmit = async ({ action, version, blocklet }) => {\n try {\n const fn = action === 'install' ? 'installBlocklet' : 'upgradeBlocklet';\n await api[fn]({ input: { did: blocklet.did, version } });\n state.retry();\n } catch (err) {\n console.error(`Blocklet ${action} failed`, err);\n }\n };\n\n let content = null;\n const priceList = useMemo(() => formatFactoryPrice(state.value), [state.value]);\n if (state.value) {\n const {\n name,\n version,\n keywords,\n htmlAst,\n stats,\n screenshots = [],\n author,\n documentation,\n repository,\n community,\n support,\n title,\n lastPublishedAt,\n color = 'primary',\n } = state.value;\n\n if (htmlAst && htmlAst.children && Array.isArray(htmlAst.children)) {\n changeImgSrc(htmlAst.children, info.blockletRegistry);\n }\n\n const titleInfo = title || name;\n content = (\n <Div color={color}>\n <div className=\"meta\">\n <Typography component=\"h2\" variant=\"h2\" className=\"title\">\n {titleInfo}\n <span className=\"payment\">\n <span className=\"payment__price\">\n {isFreeBlocklet(state.value)\n ? t('common.free')\n : priceList.map(item => `${item.value} ${item.name}`).join(' + ')}\n </span>\n <span className=\"payment__tip\">\n {isFreeBlocklet(state.value) ? 'This blocklet is free to use' : 'You need to pay to use this blocklet'}\n </span>\n </span>\n </Typography>\n <Stats stats={stats} className=\"blocklet__stats\" />\n <Typography component=\"p\" className=\"tags\">\n <Tag className=\"tag\" type=\"reverse\">\n v{version}\n </Tag>\n {Array.isArray(keywords) &&\n keywords.length > 0 &&\n keywords.map(keyword => (\n <Tag className=\"tag\" key={keyword}>\n {keyword}\n </Tag>\n ))}\n </Typography>\n </div>\n <div className=\"markdown-body\">\n <Grid container spacing={4}>\n {screenshots.length > 0 ? (\n <Grid item xs={12} md={8}>\n <ImageGallery\n lazyLoad\n showNav={false}\n showThumbnails\n showPlayButton={false}\n showFullscreenButton={false}\n showBullets\n items={screenshots.map(x => ({\n original: joinURL(info.blockletRegistry, formatRegistryScreenshotPath(did, x)),\n thumbnail: joinURL(info.blockletRegistry, formatRegistryScreenshotPath(did, x)),\n }))}\n />\n </Grid>\n ) : (\n <Grid item xs={12} md={8}>\n <PostContent component=\"div\" className=\"content-wrapper post-content\">\n {htmlAst ? renderAst(htmlAst) : t('store.detail.empty')}\n </PostContent>\n </Grid>\n )}\n <Grid item xs={12} md={4}>\n <InstallOrUpgrade\n meta={state.value}\n lastVersion={lastVersion}\n onSubmit={onSubmit}\n className=\"action-button\"\n buttonText={{\n purchase: t('store.detail.purchase', { name: titleInfo }),\n open: t('store.detail.open', { name: titleInfo }),\n install: t('store.detail.install', { name: titleInfo }),\n upgrade: t('store.detail.upgrade', { name: titleInfo }),\n }}\n registryUrl={currentRegistry.url}\n />\n <Typography component=\"ul\" className=\"meta-info\">\n {!!author && (\n <li className=\"meta-info__row\">\n <span className=\"info-row__key\">{t('common.author')}</span>\n <span className=\"info-row__value\">{formatPerson(author)}</span>\n </li>\n )}\n {!!repository && !!repository.url && (\n <li className=\"meta-info__row\">\n <span className=\"info-row__key\">{t('common.repository')}</span>\n <a\n href={parseRegistryUrl(repository.url)}\n target=\"_blank\"\n className=\"info-row__value\"\n title={repository.type}>\n {parseRegistryUrl(repository.url)}\n </a>\n </li>\n )}\n {!!community && (\n <li className=\"meta-info__row\">\n <span className=\"info-row__key\">{t('common.community')}</span>\n <a href={community} target=\"_blank\" className=\"info-row__value\">\n {community}\n </a>\n </li>\n )}\n {!!documentation && (\n <li className=\"meta-info__row\">\n <span className=\"info-row__key\">{t('common.documentation')}</span>\n <a href={documentation} target=\"_blank\" className=\"info-row__value\">\n {documentation}\n </a>\n </li>\n )}\n {!!support && (\n <li className=\"meta-info__row\">\n <span className=\"info-row__key\">{t('common.support')}</span>\n <a href={`mailto:${support}`} target=\"_blank\" className=\"info-row__value\">\n {support}\n </a>\n </li>\n )}\n {lastPublishedAt && (\n <li className=\"meta-info__row\">\n <span className=\"info-row__key\">{t('common.lastPublishedAt')}</span>\n <span className=\"info-row__value\" title={formatToDatetime(lastPublishedAt)}>\n {formatTimeFromNow(lastPublishedAt)}\n </span>\n </li>\n )}\n </Typography>\n </Grid>\n </Grid>\n {screenshots.length > 0 && (\n <PostContent component=\"div\" className=\"content-wrapper post-content\">\n {renderAst(htmlAst)}\n </PostContent>\n )}\n </div>\n </Div>\n );\n } else if (state.error) {\n content = (\n <Alert type=\"error\" variant=\"icon\">\n {formatError(state.error)}\n </Alert>\n );\n } else {\n content = <Spinner />;\n }\n\n return (\n <main>\n <Breadcrumbs separator=\"›\" aria-label=\"breadcrumb\" className=\"page-breadcrumb\">\n <Link color=\"secondary\" to=\"/store\">\n <Typography color=\"secondary\">{t('common.store')}</Typography>\n </Link>\n <Typography color=\"textPrimary\">{currentRegistry.name}</Typography>\n <Typography color=\"textPrimary\">{t('common.detail')}</Typography>\n </Breadcrumbs>\n {content}\n </main>\n );\n}\n\nconst codeFont = 'source-code-pro, Menlo, Monaco, Consolas, Courier New, monospace !important';\nconst Div = styled.div`\n margin: 24px 0;\n\n .title {\n font-size: 40px;\n font-weight: bold;\n color: ${props => props.theme.palette.text.primary};\n margin-bottom: 10px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n @media (max-width: ${props => props.theme.breakpoints.values.sm}px) {\n flex-direction: column;\n justify-content: flex-start;\n align-items: flex-start;\n }\n }\n\n .payment {\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n @media (max-width: ${props => props.theme.breakpoints.values.sm}px) {\n margin-top: 16px;\n align-items: flex-start;\n }\n\n .payment__price {\n margin-bottom: 8px;\n color: ${props => props.theme.palette.primary.main};\n }\n\n .payment__tip {\n font-size: 14px;\n color: ${props => props.theme.palette.text.primary};\n font-weight: normal;\n }\n }\n\n .blocklet__stats {\n margin-bottom: 16px;\n }\n\n .tags {\n margin: 16px 0 48px;\n @media (max-width: ${props => props.theme.breakpoints.values.sm}px) {\n margin-bottom: 32px;\n }\n\n .tag {\n margin-right: 8px;\n text-transform: capitalize;\n &:last-of-type {\n margin-right: 0;\n }\n }\n }\n\n .action-button {\n width: 100%;\n padding: 8px 22px;\n border-radius: 0 !important;\n }\n\n .meta-info {\n list-style: none;\n padding: 0;\n margin: 24px 0;\n\n .meta-info__row {\n display: flex;\n line-height: 2;\n }\n\n .info-row__key {\n width: 130px;\n flex-shrink: 0;\n font-weight: 500;\n }\n .info-row__value {\n white-space: break-word;\n word-break: break-all;\n }\n }\n\n .sidebar-buttons {\n display: flex;\n justify-content: space-between;\n align-items: center;\n }\n\n .use-button {\n width: 100%;\n }\n\n .image-gallery {\n .image-gallery-thumbnail.active {\n border-color: ${props => props.theme.palette.primary.main};\n }\n .image-gallery-bullets .image-gallery-bullet {\n border-color: ${props => props.theme.palette.primary.main};\n box-shadow: none;\n }\n .image-gallery-bullets .image-gallery-bullet.active {\n background-color: ${props => props.theme.palette.primary.main};\n }\n .image-gallery-slide {\n .image-gallery-image {\n display: flex;\n justify-content: center;\n img {\n max-height: 600px !important;\n width: auto;\n margin: 0 auto;\n @media (max-width: ${props => props.theme.breakpoints.values.sm}px) {\n height: auto;\n max-height: auto;\n }\n }\n }\n }\n }\n\n .markdown-body .highlight pre,\n .markdown-body pre {\n background-color: #222;\n border-radius: 5px;\n }\n .markdown-body code {\n font-family: ${codeFont};\n }\n .markdown-body pre code {\n color: #fff;\n font-size: 14px;\n font-family: ${codeFont};\n }\n\n .markdown-body h1,\n .markdown-body h2,\n .markdown-body h3,\n .markdown-body h4,\n .markdown-body h5,\n .markdown-body h6 {\n font-weight: 600;\n line-height: 1.25;\n margin-bottom: 16px;\n margin-top: 24px;\n border-bottom: none;\n }\n\n .markdown-body .CodeMirror pre {\n background: #f6f8fa !important;\n }\n\n .markdown-body .anchor {\n display: none;\n }\n`;\n\nconst PostContent = styled(Typography)`\n width: 100%;\n word-wrap: break-word;\n word-break: break-word;\n line-height: 1.5em;\n\n .alert-content {\n max-width: 100%;\n p:last-of-type {\n margin-bottom: 0;\n }\n }\n\n iframe {\n width: 100% !important;\n }\n\n a {\n color: ${props => props.theme.palette.primary.main};\n }\n`;\n"],"sourceRoot":""}