iobroker.admin 7.4.7 → 7.4.9

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 (59) hide show
  1. package/README.md +10 -9
  2. package/adminWww/asset-manifest.json +27 -27
  3. package/adminWww/index.html +1 -1
  4. package/adminWww/static/js/1892.3c30ecff.chunk.js.map +1 -1
  5. package/adminWww/static/js/{288.12201160.chunk.js → 288.18e82468.chunk.js} +2 -2
  6. package/adminWww/static/js/288.18e82468.chunk.js.map +1 -0
  7. package/adminWww/static/js/3363.a4c36649.chunk.js.map +1 -1
  8. package/adminWww/static/js/3834.d81ffc60.chunk.js +2 -0
  9. package/adminWww/static/js/3834.d81ffc60.chunk.js.map +1 -0
  10. package/adminWww/static/js/4289.a5fc8b2e.chunk.js +2 -0
  11. package/adminWww/static/js/4289.a5fc8b2e.chunk.js.map +1 -0
  12. package/adminWww/static/js/471.8a82d825.chunk.js.map +1 -1
  13. package/adminWww/static/js/4720.6112531a.chunk.js +2 -0
  14. package/adminWww/static/js/4720.6112531a.chunk.js.map +1 -0
  15. package/adminWww/static/js/5687.d7fa0a4e.chunk.js +2 -0
  16. package/adminWww/static/js/5687.d7fa0a4e.chunk.js.map +1 -0
  17. package/adminWww/static/js/{6361.48a28196.chunk.js → 6361.ec86271d.chunk.js} +2 -2
  18. package/adminWww/static/js/6361.ec86271d.chunk.js.map +1 -0
  19. package/adminWww/static/js/6603.ee9b0df5.chunk.js +3 -0
  20. package/adminWww/static/js/6603.ee9b0df5.chunk.js.map +1 -0
  21. package/adminWww/static/js/6853.6655ed69.chunk.js +2 -0
  22. package/adminWww/static/js/6853.6655ed69.chunk.js.map +1 -0
  23. package/adminWww/static/js/{7137.7b5ca6b5.chunk.js → 7137.c988b7e1.chunk.js} +2 -2
  24. package/adminWww/static/js/7137.c988b7e1.chunk.js.map +1 -0
  25. package/adminWww/static/js/{7424.223daaa3.chunk.js → 7424.5cf79afc.chunk.js} +2 -2
  26. package/adminWww/static/js/7424.5cf79afc.chunk.js.map +1 -0
  27. package/adminWww/static/js/{8144.ae502bba.chunk.js → 8144.5989b02c.chunk.js} +3 -3
  28. package/adminWww/static/js/8144.5989b02c.chunk.js.map +1 -0
  29. package/adminWww/static/js/8387.2cb15163.chunk.js.map +1 -1
  30. package/adminWww/static/js/9823.8a42dea5.chunk.js +3 -0
  31. package/adminWww/static/js/9823.8a42dea5.chunk.js.map +1 -0
  32. package/adminWww/static/js/{main.d26a969d.js → main.dbb63dc9.js} +2 -2
  33. package/adminWww/static/js/{main.d26a969d.js.map → main.dbb63dc9.js.map} +1 -1
  34. package/build-backend/main.js +6 -1
  35. package/build-backend/main.js.map +1 -1
  36. package/io-package.json +27 -27
  37. package/package.json +4 -4
  38. package/adminWww/static/js/288.12201160.chunk.js.map +0 -1
  39. package/adminWww/static/js/3834.2e04eb51.chunk.js +0 -2
  40. package/adminWww/static/js/3834.2e04eb51.chunk.js.map +0 -1
  41. package/adminWww/static/js/4289.e9a5790f.chunk.js +0 -2
  42. package/adminWww/static/js/4289.e9a5790f.chunk.js.map +0 -1
  43. package/adminWww/static/js/4720.72b71322.chunk.js +0 -2
  44. package/adminWww/static/js/4720.72b71322.chunk.js.map +0 -1
  45. package/adminWww/static/js/5687.c249e41f.chunk.js +0 -2
  46. package/adminWww/static/js/5687.c249e41f.chunk.js.map +0 -1
  47. package/adminWww/static/js/6361.48a28196.chunk.js.map +0 -1
  48. package/adminWww/static/js/6603.614b4df4.chunk.js +0 -3
  49. package/adminWww/static/js/6603.614b4df4.chunk.js.map +0 -1
  50. package/adminWww/static/js/6853.cfc24286.chunk.js +0 -2
  51. package/adminWww/static/js/6853.cfc24286.chunk.js.map +0 -1
  52. package/adminWww/static/js/7137.7b5ca6b5.chunk.js.map +0 -1
  53. package/adminWww/static/js/7424.223daaa3.chunk.js.map +0 -1
  54. package/adminWww/static/js/8144.ae502bba.chunk.js.map +0 -1
  55. package/adminWww/static/js/9823.f3f5cd8c.chunk.js +0 -3
  56. package/adminWww/static/js/9823.f3f5cd8c.chunk.js.map +0 -1
  57. /package/adminWww/static/js/{6603.614b4df4.chunk.js.LICENSE.txt → 6603.ee9b0df5.chunk.js.LICENSE.txt} +0 -0
  58. /package/adminWww/static/js/{8144.ae502bba.chunk.js.LICENSE.txt → 8144.5989b02c.chunk.js.LICENSE.txt} +0 -0
  59. /package/adminWww/static/js/{9823.f3f5cd8c.chunk.js.LICENSE.txt → 9823.8a42dea5.chunk.js.LICENSE.txt} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"static/js/4289.a5fc8b2e.chunk.js","mappings":"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","sources":["assets/sentry.svg","components/CustomSelectButton.tsx","helpers/MaterialDynamicIcon.tsx","components/Adapters/AdaptersUpdater.tsx","dialogs/AdaptersUpdaterDialog.tsx","Workers/HostAdapterWorker.tsx","dialogs/GitHubInstallDialog.tsx","dialogs/AddInstanceDialog.tsx","components/Adapters/Utils.ts","components/Adapters/AdapterInstallDialog.tsx","components/Adapters/AdapterCategoryRow.tsx","dialogs/RatingDialog.tsx","dialogs/AdapterDeletionDialog.tsx","dialogs/AutoUpgradeConfigDialog.tsx","components/Adapters/AdapterGeneric.tsx","components/Adapters/AdapterTile.tsx","components/Adapters/AdapterRow.tsx","components/Adapters/AdaptersList.tsx","dialogs/AdminUpdater.tsx","tabs/Adapters.tsx"],"sourcesContent":["var _path;\nconst _excluded = [\"title\", \"titleId\"];\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nfunction _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var s = Object.getOwnPropertySymbols(e); for (r = 0; r < s.length; r++) o = s[r], t.includes(o) || {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }\nfunction _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (e.includes(n)) continue; t[n] = r[n]; } return t; }\nimport * as React from \"react\";\nfunction SvgSentry(_ref, svgRef) {\n let {\n title,\n titleId\n } = _ref,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 256 230\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M251.22 187.856c5.785 10.045 6.345 20.608 1.538 28.958-4.8 8.357-14.192 13.143-25.768 13.143h-21.816c.259-4.068.431-8.17.431-12.302 0-4.628-.215-9.198-.531-13.754l14.35-.014c3.528 0 6.38-2.867 6.38-6.403a6.46 6.46 0 0 0-.768-3.053l-91.46-158.97a6.349 6.349 0 0 0-5.54-3.24 6.374 6.374 0 0 0-5.461 3.09l-14.522 25.243c44.134 33.27 73.804 84.813 77.864 143.333.316 4.548.531 9.119.531 13.753 0 4.132-.172 8.228-.424 12.302h-71.246c.388-4.053.611-8.148.611-12.302 0-4.649-.273-9.233-.776-13.753-3.52-32.206-19.286-60.748-42.503-80.89l-10.003 17.376c17.54 16.325 29.512 38.558 32.767 63.514.59 4.505.92 9.09.92 13.753 0 4.154-.273 8.264-.74 12.302H29.01c-11.576 0-20.968-4.793-25.768-13.15-4.807-8.35-4.247-18.905 1.538-28.958l13.56-23.238a79.42 79.42 0 0 1 20.715 16.052l-8.083 13.768a6.523 6.523 0 0 0-.77 3.054 6.383 6.383 0 0 0 6.382 6.395l32.033.015c-2.687-15.356-9.772-29.21-19.918-40.183-5.979-6.445-12.963-11.9-20.738-16.074l35.77-62.15a151.427 151.427 0 0 1 21.564 14.624c30.827 25.013 51.644 61.955 55.416 103.776h19.172c-3.91-48.892-28.477-92.006-64.937-120.548a171.205 171.205 0 0 0-21.672-14.457l30.532-53.045C109.583 5.77 118.42 0 128.036 0c9.607 0 18.438 5.77 24.223 15.823l98.961 172.033z\",\n fill: \"#FB2D26\"\n })));\n}\nconst ForwardRef = /*#__PURE__*/React.forwardRef(SvgSentry);\nexport default __webpack_public_path__ + \"static/media/sentry.e732e10c5c1ceed0955b2fec6dab33f8.svg\";\nexport { ForwardRef as ReactComponent };","import React, { useState, type JSX } from 'react';\n\nimport { Button, Menu, MenuItem, Tooltip } from '@mui/material';\n\nimport type { Translate } from '@iobroker/adapter-react-v5';\nimport MaterialDynamicIcon from '../helpers/MaterialDynamicIcon';\n\nconst styles: Record<string, React.CSSProperties> = {\n button: {\n marginLeft: 10,\n marginRight: 10,\n },\n icon: {\n marginRight: 5,\n },\n};\n\ninterface CustomSelectButtonProps {\n arrayItem: { name: string | number }[];\n title?: string;\n onClick: (name: string | number) => void;\n value: string | number;\n contained?: boolean;\n buttonIcon?: JSX.Element;\n icons?: boolean;\n t: Translate;\n translateSuffix?: string;\n noTranslation?: boolean;\n}\n\nfunction CustomSelectButton({\n arrayItem,\n title,\n onClick,\n value,\n contained,\n buttonIcon,\n icons,\n t,\n translateSuffix,\n noTranslation,\n}: CustomSelectButtonProps): JSX.Element {\n const [anchorEl, setAnchorEl] = useState(null);\n translateSuffix = translateSuffix || '';\n\n return (\n <>\n <Tooltip\n title={title || ''}\n slotProps={{ popper: { sx: { pointerEvents: 'none' } } }}\n >\n <Button\n style={styles.button}\n variant={contained ? 'contained' : 'outlined'}\n color=\"primary\"\n onClick={e => setAnchorEl(e.currentTarget)}\n >\n {buttonIcon ||\n (icons && (\n <MaterialDynamicIcon\n iconName={value as string}\n style={styles.icon}\n />\n ))}\n {typeof value === 'number' ? value : noTranslation ? value : t(value + translateSuffix)}\n </Button>\n </Tooltip>\n <Menu\n anchorEl={anchorEl}\n keepMounted\n open={Boolean(anchorEl)}\n onClose={() => setAnchorEl(null)}\n >\n {arrayItem.map(({ name }, idx) => (\n <MenuItem\n key={name}\n selected={value ? name === value : value === 0 ? name === value : idx === 0}\n disabled={value ? name === value : value === 0 ? name === value : idx === 0}\n className={`tag-card-${name}`}\n style={{ placeContent: 'space-between' }}\n value={name}\n onClick={() => {\n onClick(name);\n setAnchorEl(null);\n }}\n >\n {icons && (\n <MaterialDynamicIcon\n iconName={name as string}\n style={styles.icon}\n />\n )}\n {typeof name === 'number' ? name : noTranslation ? name : t(name + translateSuffix)}\n </MenuItem>\n ))}\n </Menu>\n </>\n );\n}\n\nexport default CustomSelectButton;\n","import React, { useState, useEffect, type JSX } from 'react';\nimport {\n AllInclusive,\n Message,\n WifiTethering,\n Apps,\n VpnKey,\n NotificationsActive,\n SystemUpdateAlt,\n EmojiSymbols,\n PermMedia,\n SettingsEthernet,\n Storage,\n Visibility,\n SettingsBrightness,\n DateRange,\n BatteryChargingFull,\n FilterVintage,\n LocationOn,\n Phonelink,\n Favorite,\n House,\n Apartment,\n EmojiObjects,\n DialerSip,\n PhonelinkSetup,\n AirportShuttle,\n BubbleChart,\n Widgets,\n Brightness6,\n LinearScale,\n Help,\n type SvgIconComponent,\n} from '@mui/icons-material';\n\nconst ICON_CACHE: Record<string, Promise<ioBroker.AdapterObject>> = {};\n\nconst objIcon: Record<string, SvgIconComponent> = {\n All: AllInclusive,\n messaging: Message,\n communication: WifiTethering,\n general: Apps,\n logic: VpnKey,\n alarm: NotificationsActive,\n 'iot-systems': SystemUpdateAlt,\n 'misc-data': EmojiSymbols,\n multimedia: PermMedia,\n network: SettingsEthernet,\n storage: Storage,\n visualization: Visibility,\n 'climate-control': SettingsBrightness,\n 'date-and-time': DateRange,\n energy: BatteryChargingFull,\n garden: FilterVintage,\n geoposition: LocationOn,\n hardware: Phonelink,\n health: Favorite,\n household: House,\n infrastructure: Apartment,\n lighting: EmojiObjects,\n protocols: DialerSip,\n utility: PhonelinkSetup,\n vehicle: AirportShuttle,\n 'visualization-icons': BubbleChart,\n 'visualization-widgets': Widgets,\n weather: Brightness6,\n metering: LinearScale,\n};\n\ninterface MaterialDynamicIconProps {\n iconName?: string;\n className?: string;\n style?: React.CSSProperties;\n adapter?: string;\n socket?: any;\n onClick?: (e: React.MouseEvent) => void;\n}\n\nfunction MaterialDynamicIcon({\n iconName,\n className,\n adapter,\n socket,\n onClick,\n style,\n}: MaterialDynamicIconProps): JSX.Element {\n const [url, setUrl] = useState('');\n\n useEffect(() => {\n if (adapter && socket) {\n if (!(ICON_CACHE[adapter] instanceof Promise)) {\n ICON_CACHE[adapter] = socket.getObject(`system.adapter.${adapter}`);\n }\n void ICON_CACHE[adapter].then(\n obj => obj?.common?.icon && setUrl(`../../adapter/${adapter}/${obj.common.icon}`),\n );\n }\n }, [adapter, socket]);\n\n if (adapter) {\n return (\n <img\n onClick={e => onClick && onClick(e)}\n src={url || ''}\n className={className}\n style={style}\n alt=\"\"\n />\n );\n }\n const Element = objIcon[iconName] || Help;\n\n return (\n <Element\n className={className}\n style={style}\n onClick={(e: React.MouseEvent) => onClick && onClick(e)}\n />\n );\n}\n\nexport default MaterialDynamicIcon;\n","import React, { Component, type JSX } from 'react';\nimport semver from 'semver';\n\nimport {\n List,\n ListItem,\n ListItemIcon,\n ListItemText,\n Checkbox,\n Avatar,\n Button,\n CircularProgress,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n Grid2,\n IconButton,\n Typography,\n Box,\n} from '@mui/material';\n\nimport { Close as CloseIcon, Language as LanguageIcon, Info as InfoIcon } from '@mui/icons-material';\n\nimport { I18n, type IobTheme, Utils } from '@iobroker/adapter-react-v5';\n\nimport type { AdapterRatingInfo, InstalledInfo } from '@/components/Adapters/AdapterInstallDialog';\nimport { checkCondition } from '@/dialogs/AdapterUpdateDialog';\nimport type { RepoAdapterObject, RepoInfo } from '@/components/Adapters/Utils';\n\ninterface GetNewsResultEntry {\n version: string;\n news: string;\n}\n\nconst styles: Record<string, any> = {\n smallAvatar: {\n width: 24,\n height: 24,\n },\n listItem: (theme: IobTheme) => ({\n mb: '2px',\n background: theme.palette.background,\n '@media screen and (max-width: 400px)': {\n pl: '2px',\n },\n }),\n toVersion: (theme: IobTheme) => ({\n color: theme.palette.mode === 'dark' ? '#00dc00' : '#008100',\n fontWeight: 'bold',\n ml: '4px',\n }),\n updateDone: {\n background: '#5ef05e80',\n opacity: 0.7,\n },\n minWidthCss: {\n '@media screen and (max-width: 400px)': {\n minWidth: 32,\n },\n },\n wrapperButton: {},\n typography: {\n paddingRight: 30,\n },\n versions: {\n minWidth: 110,\n display: 'inline-block',\n },\n closeButton: (theme: IobTheme) => ({\n position: 'absolute',\n right: 8,\n top: 8,\n color: theme.palette.grey[500],\n }),\n languageButton: {\n position: 'absolute',\n right: 52 + 8,\n top: 8,\n },\n languageButtonActive: (theme: IobTheme) => ({\n color: theme.palette.primary.main,\n }),\n versionHeader: (theme: IobTheme) => ({\n background: '#4dabf5',\n borderRadius: '3px',\n pl: '10px',\n fontWeight: 'bold',\n color: theme.palette.mode === 'dark' ? 'black' : 'white',\n }),\n repoStableVersionText: (theme: IobTheme) => ({\n color: theme.palette.mode === 'dark' ? '#8dff7a' : '#2b9800',\n fontWeight: 'bold',\n marginLeft: '4px',\n }),\n repoLatestVersionText: (theme: IobTheme) => ({\n color: theme.palette.mode === 'dark' ? '#a3fcff' : '#005498',\n fontWeight: 'bold',\n marginLeft: '4px',\n }),\n};\n\ninterface AdaptersUpdaterProps {\n inProcess: boolean;\n lang: ioBroker.Languages;\n /** if a process has been stopped, e.g., due to an error */\n stopped: boolean;\n repository: Record<string, RepoAdapterObject & { rating?: AdapterRatingInfo }>;\n installed: InstalledInfo;\n onUpdateSelected: (adapters: string[], adapters2?: string[]) => void;\n selected: string[];\n current: string;\n updated: string[];\n finished: boolean;\n noTranslation: boolean;\n toggleTranslation: () => void;\n theme: IobTheme;\n}\n\ninterface AdaptersUpdaterState {\n showNews: null | Record<string, any>;\n}\n\ninterface UpdateAvailableCheckOptions {\n /** The installed version */\n oldVersion: string;\n /** The repo version or new version */\n newVersion: string;\n /** Adapter name */\n name: string;\n}\n\nclass AdaptersUpdater extends Component<AdaptersUpdaterProps, AdaptersUpdaterState> {\n private readonly updateAvailable: string[];\n\n /** Key adapterName, value: version */\n private readonly initialVersions: Record<string, string>;\n\n private readonly currentRef: React.RefObject<HTMLLIElement>;\n\n private current: string;\n\n constructor(props: AdaptersUpdaterProps) {\n super(props);\n\n this.updateAvailable = this.detectUpdates();\n this.initialVersions = {};\n this.updateAvailable.forEach(\n adapter => (this.initialVersions[adapter] = this.props.installed[adapter].version),\n );\n\n this.state = {\n showNews: null,\n };\n\n this.currentRef = React.createRef();\n this.current = props.current;\n\n this.props.onUpdateSelected([...this.updateAvailable], this.updateAvailable);\n }\n\n static isUpdateAvailable(options: UpdateAvailableCheckOptions): boolean {\n const { oldVersion, newVersion, name } = options;\n\n try {\n return semver.gt(newVersion, oldVersion);\n } catch {\n console.warn(`Cannot compare \"${newVersion}\" and \"${oldVersion}\" of adapter ${name}`);\n return false;\n }\n }\n\n /**\n * Get a list of available adapter updates\n * Admin and controller are filtered out,\n * and all adapters that have messages for this update are filtered out too\n */\n detectUpdates(): string[] {\n const updateAvailable: string[] = [];\n\n Object.keys(this.props.repository).forEach(adapter => {\n const _installed = this.props.installed[adapter];\n // ignore js-controller in this dialog\n if (adapter === 'js-controller' || adapter === 'admin') {\n return;\n }\n if (\n _installed &&\n this.props.repository[adapter].version &&\n _installed.ignoreVersion !== this.props.repository[adapter].version &&\n AdaptersUpdater.isUpdateAvailable({\n oldVersion: _installed.version,\n newVersion: this.props.repository[adapter].version,\n name: adapter,\n })\n ) {\n if (\n !checkCondition(\n this.props.repository[adapter].messages,\n _installed.version,\n this.props.repository[adapter].version,\n )\n ) {\n updateAvailable.push(adapter);\n } else {\n console.log(\n `Adapter ${adapter} is filtered out from update all functionality, because it has messages which need to be read before update`,\n );\n }\n }\n });\n\n updateAvailable.sort();\n\n return updateAvailable;\n }\n\n getNews(adapter: string): GetNewsResultEntry[] {\n const adapterObj = this.props.repository[adapter];\n const installed = this.props.installed[adapter];\n const news: GetNewsResultEntry[] = [];\n\n if (installed && adapterObj?.news) {\n Object.keys(adapterObj.news).forEach(version => {\n try {\n if (semver.gt(version, installed.version)) {\n news.push({\n version,\n news: this.props.noTranslation\n ? adapterObj.news[version].en\n : adapterObj.news[version][this.props.lang] || adapterObj.news[version].en,\n });\n }\n } catch {\n // ignore it\n console.warn(`Cannot compare \"${version}\" and \"${installed.version}\"`);\n }\n });\n }\n\n return news;\n }\n\n renderOneAdapter(adapter: string): JSX.Element | null {\n const checked = this.props.selected.includes(adapter);\n if ((this.props.finished || this.props.inProcess) && !checked) {\n return null;\n }\n if (!this.props.installed[adapter]) {\n // during installation, this adapter was uninstalled\n return null;\n }\n const image = `.${this.props.installed[adapter].localIcon}`;\n\n return (\n <ListItem\n key={adapter}\n dense\n sx={{\n '&.MuiListItem-root': Utils.getStyle(\n this.props.theme,\n styles.listItem,\n this.props.updated.includes(adapter) && styles.updateDone,\n ),\n }}\n ref={this.props.current === adapter ? this.currentRef : null}\n secondaryAction={\n !this.props.finished && !this.props.inProcess ? (\n <Checkbox\n edge=\"end\"\n checked={checked}\n tabIndex={-1}\n disableRipple\n disabled={this.props.inProcess}\n onClick={() => {\n const selected = [...this.props.selected];\n const pos = selected.indexOf(adapter);\n if (pos !== -1) {\n selected.splice(pos, 1);\n } else {\n selected.push(adapter);\n selected.sort();\n }\n this.props.onUpdateSelected(selected);\n }}\n />\n ) : (\n this.props.current === adapter &&\n !this.props.stopped &&\n !this.props.finished && <CircularProgress />\n )\n }\n >\n <ListItemIcon sx={styles.minWidthCss}>\n <Avatar\n variant=\"square\"\n alt={adapter}\n src={image}\n style={styles.smallAvatar}\n />\n </ListItemIcon>\n <ListItemText\n primary={adapter}\n title={this.getNews(adapter)\n .map(item => `${item.version}: ${item.news}`)\n .join('\\n')}\n secondary={\n <span>\n <div style={styles.versions}>\n {this.initialVersions[adapter]} →\n <Box\n component=\"span\"\n sx={styles.toVersion}\n >\n {this.props.repository[adapter].version}\n </Box>\n </div>\n <IconButton\n title={I18n.t('Show change log')}\n onClick={() =>\n this.setState({\n showNews: {\n adapter,\n version: this.props.repository[adapter].version,\n fromVersion: this.initialVersions[adapter],\n },\n })\n }\n size=\"small\"\n >\n <InfoIcon />\n </IconButton>\n </span>\n }\n />\n </ListItem>\n );\n }\n\n getReactNews(adapter: string, fromVersion: string): JSX.Element[] {\n const adapterObj = this.props.repository[adapter];\n const installed = this.props.installed[adapter];\n fromVersion = fromVersion || installed.version;\n const result: JSX.Element[] = [];\n\n let stableVersion: string;\n let latestVersion: string;\n const repoInfo: RepoInfo = this.props.repository._repoInfo as unknown as RepoInfo;\n if (repoInfo?.stable) {\n stableVersion = this.props.repository[adapter]?.version;\n latestVersion = this.props.repository[adapter]?.latestVersion;\n } else {\n stableVersion = this.props.repository[adapter]?.stable;\n latestVersion = this.props.repository[adapter]?.version;\n }\n\n if (installed && adapterObj?.news) {\n Object.keys(adapterObj.news).forEach(version => {\n try {\n if (semver.gt(version, fromVersion) && adapterObj.news[version]) {\n const newsText: string = this.props.noTranslation\n ? adapterObj.news[version].en || ''\n : adapterObj.news[version][this.props.lang] || adapterObj.news[version].en || '';\n\n const news = newsText\n .split('\\n')\n .map(line =>\n line\n .trim()\n .replace(/^\\*\\s?/, '')\n .replace(/<!--[^>]*->/g, '')\n .replace(/<! -[^>]*->/g, '')\n .trim(),\n )\n .filter(line => !!line);\n\n result.push(\n <Grid2 key={version}>\n <Typography sx={styles.versionHeader}>\n {version}\n {latestVersion === version ? (\n <Box\n component=\"span\"\n sx={styles.repoLatestVersionText}\n >\n (latest)\n </Box>\n ) : null}\n {stableVersion === version ? (\n <Box\n component=\"span\"\n sx={styles.repoStableVersionText}\n >{`(${I18n.t('stable')})`}</Box>\n ) : null}\n </Typography>\n {news.map((value, index) => (\n <Typography\n key={`${version}-${index}`}\n component=\"div\"\n variant=\"body2\"\n >\n {`• ${value}`}\n </Typography>\n ))}\n </Grid2>,\n );\n }\n } catch {\n // ignore it\n console.warn(`Cannot compare \"${version}\" and \"${fromVersion}\"`);\n }\n });\n }\n\n return result;\n }\n\n renderShowNews(): JSX.Element | null {\n if (this.state.showNews) {\n const news = this.getReactNews(this.state.showNews.adapter, this.state.showNews.fromVersion);\n\n const closeButton = Utils.getStyle(this.props.theme, styles.closeButton);\n\n const languageButtonActive = Utils.getStyle(this.props.theme, styles.languageButtonActive);\n\n return (\n <Dialog\n onClose={() => this.setState({ showNews: null })}\n open={!0}\n >\n <DialogTitle>\n <Typography\n component=\"h2\"\n variant=\"h6\"\n sx={{ '&.MuiTypography-root': styles.typography }}\n >\n <div style={{ width: 'calc(100% - 60px)' }}>\n {I18n.t('Update \"%s\" to v%s', this.state.showNews.adapter, this.state.showNews.version)}\n </div>\n <IconButton\n size=\"large\"\n style={closeButton}\n onClick={() => this.setState({ showNews: null })}\n >\n <CloseIcon />\n </IconButton>\n {I18n.getLanguage() !== 'en' && this.props.toggleTranslation ? (\n <IconButton\n size=\"large\"\n style={{\n ...styles.languageButton,\n ...(this.props.noTranslation ? languageButtonActive : undefined),\n }}\n onClick={this.props.toggleTranslation}\n title={I18n.t('Disable/Enable translation')}\n >\n <LanguageIcon />\n </IconButton>\n ) : null}\n </Typography>\n </DialogTitle>\n <DialogContent dividers>\n <Grid2\n container\n direction=\"column\"\n spacing={2}\n wrap=\"nowrap\"\n >\n {news.length ? (\n <Grid2>\n <Typography\n variant=\"h6\"\n gutterBottom\n >\n {I18n.t('Change log')}\n </Typography>\n <Grid2\n container\n spacing={2}\n direction=\"column\"\n wrap=\"nowrap\"\n >\n {news}\n </Grid2>\n </Grid2>\n ) : (\n I18n.t('No change log available')\n )}\n </Grid2>\n </DialogContent>\n <DialogActions style={styles.wrapperButton}>\n <Button\n variant=\"contained\"\n onClick={() => this.setState({ showNews: null })}\n color=\"grey\"\n startIcon={<CloseIcon />}\n >\n {I18n.t('Close')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n return null;\n }\n\n render(): JSX.Element {\n if (this.current !== this.props.current) {\n this.current = this.props.current;\n setTimeout(() => this.currentRef.current?.scrollIntoView(), 200);\n }\n\n return (\n <List style={styles.root}>\n {this.updateAvailable.map(adapter => this.renderOneAdapter(adapter))}\n {this.renderShowNews()}\n </List>\n );\n }\n}\n\nexport default AdaptersUpdater;\n","import React, { Component, type JSX } from 'react';\n\nimport {\n DialogActions,\n Checkbox,\n DialogTitle,\n Button,\n Dialog,\n Grid2,\n FormControlLabel,\n Toolbar,\n IconButton,\n Tooltip,\n DialogContent,\n} from '@mui/material';\n\nimport {\n Check as CheckIcon,\n Close as CloseIcon,\n Cancel as CancelIcon,\n Language as LanguageIcon,\n} from '@mui/icons-material';\n\nimport { type AdminConnection, I18n, Utils, type IobTheme, type Translate } from '@iobroker/adapter-react-v5';\n\nimport type { AdapterRatingInfo, InstalledInfo } from '@/components/Adapters/AdapterInstallDialog';\nimport type { RepoAdapterObject } from '@/components/Adapters/Utils';\nimport AdaptersUpdater from '../components/Adapters/AdaptersUpdater';\nimport Command from '../components/Command';\n\nconst styles: Record<string, any> = {\n dialogRoot: {\n height: 'calc(100% - 64px)',\n },\n wrapperHead: {\n justifyContent: 'space-between',\n display: 'flex',\n },\n checkbox: {\n marginRight: 10,\n },\n appBar: (theme: IobTheme) => ({\n flexWrap: 'wrap',\n position: 'sticky',\n bottom: -10,\n pl: 1,\n background: theme.name === 'blue' ? '#5d6467' : theme.name === 'dark' ? '#5b5b5b' : '#FFF',\n }),\n container: {\n overflow: 'hidden',\n height: 'calc(100% - 48px)',\n '@media screen and (max-width: 602px)': {\n height: 'auto',\n },\n },\n content: {\n '@media screen and (max-width: 500px)': {\n p: 1,\n },\n },\n languageButton: {\n position: 'absolute',\n right: 73,\n top: 11,\n },\n languageButtonActive: (theme: IobTheme) => ({\n color: theme.palette.primary.main,\n }),\n};\n\ninterface AdaptersUpdaterDialogProps {\n currentHost: string;\n lang: ioBroker.Languages;\n t: Translate;\n socket: AdminConnection;\n onClose: (updated: boolean) => void;\n repository: Record<string, RepoAdapterObject & { rating?: AdapterRatingInfo }>;\n installed: InstalledInfo;\n onSetCommandRunning: (running: boolean) => void;\n noTranslation?: boolean;\n toggleTranslation?: () => void;\n theme: IobTheme;\n}\n\ninterface AdaptersUpdaterDialogState {\n selected: string[];\n inProcess: boolean;\n finished: boolean;\n current: string;\n updated: string[];\n stopped: boolean;\n debug: boolean;\n stopOnError: boolean;\n closeOnFinished: boolean;\n currentVersion: string;\n}\n\nclass AdaptersUpdaterDialog extends Component<AdaptersUpdaterDialogProps, AdaptersUpdaterDialogState> {\n updateAvailable: string[] = [];\n\n onAdapterFinished: () => void;\n\n processList: { adapter: string; version: string }[];\n\n constructor(props: AdaptersUpdaterDialogProps) {\n super(props);\n\n this.state = {\n selected: [],\n inProcess: false,\n finished: false,\n current: '',\n updated: [],\n /** If an upgrade process has been stopped, e.g., due to an error */\n stopped: false,\n debug:\n (((window as any)._localStorage as Storage) || window.localStorage).getItem(\n 'AdaptersUpdaterDialog.debug',\n ) === 'true',\n stopOnError:\n (((window as any)._localStorage as Storage) || window.localStorage).getItem(\n 'AdaptersUpdaterDialog.stopOnError',\n ) !== 'false',\n closeOnFinished:\n (((window as any)._localStorage as Storage) || window.localStorage).getItem(\n 'AdaptersUpdaterDialog.closeOnFinished',\n ) === 'true',\n currentVersion: '',\n };\n\n this.updateAvailable = [];\n }\n\n updateAdapter(adapter: string, version: string, cb: () => void): void {\n this.onAdapterFinished = cb;\n this.setState({ current: adapter, currentVersion: version });\n }\n\n onStartUpdate(): void {\n this.setState({ inProcess: true }, () => {\n this.props.onSetCommandRunning(true);\n this.processList = [...this.state.selected].map(adapter => ({\n adapter,\n version: this.props.repository[adapter]?.version,\n }));\n\n this.updateAdapters(() => {\n this.setState({ inProcess: false, finished: true }, () => {\n this.props.onSetCommandRunning(false);\n if (this.state.closeOnFinished) {\n this.props.onClose(!!this.state.updated.length);\n } else {\n // update adapters and so on\n }\n });\n });\n });\n }\n\n updateAdapters(cb: () => void): void {\n if (!this.processList || !this.processList.length || this.state.stopped) {\n if (cb) {\n cb();\n }\n } else {\n const { adapter, version } = this.processList.shift();\n\n this.updateAdapter(adapter, version, () => {\n const updated = [...this.state.updated];\n updated.push(adapter);\n this.setState({ updated }, () => setTimeout(() => this.updateAdapters(cb), 200));\n });\n }\n }\n\n render(): JSX.Element {\n const languageButtonActive = this.props.noTranslation\n ? Utils.getStyle(this.props.theme, styles.languageButtonActive)\n : undefined;\n\n return (\n <Dialog\n open={!0}\n maxWidth=\"lg\"\n fullWidth={!!this.state.current}\n onClose={() => this.props.onClose(!!this.state.updated.length)}\n aria-labelledby=\"update-dialog-title\"\n aria-describedby=\"update-dialog-description\"\n sx={{ '& .MuiPaper-root': styles.dialogRoot }}\n scroll=\"paper\"\n >\n <DialogTitle id=\"update-dialog-title\">\n <div style={styles.wrapperHead}>\n {this.props.t('Update %s adapter(s)', this.state.selected.length)}\n {!this.state.finished && !this.state.inProcess && (\n <Tooltip\n title={this.props.t('Select/Unselect all')}\n slotProps={{ popper: { sx: { pointerEvents: 'none' } } }}\n >\n <Checkbox\n checked={this.state.selected.length === this.updateAvailable.length}\n style={styles.checkbox}\n tabIndex={-1}\n indeterminate={\n this.state.selected.length !== this.updateAvailable.length &&\n this.state.selected.length !== 0\n }\n disableRipple\n onClick={() => {\n let selected: string[] = [];\n if (this.state.selected.length !== this.updateAvailable.length) {\n selected = [...this.updateAvailable];\n }\n this.setState({ selected });\n }}\n />\n </Tooltip>\n )}\n {I18n.getLanguage() !== 'en' && this.props.toggleTranslation ? (\n <IconButton\n size=\"large\"\n style={{ ...styles.languageButton, ...languageButtonActive }}\n onClick={() => this.props.toggleTranslation()}\n title={I18n.t('Disable/Enable translation')}\n >\n <LanguageIcon />\n </IconButton>\n ) : null}\n </div>\n </DialogTitle>\n <DialogContent\n sx={{ '&.MuiDialogContent-root': styles.content }}\n style={{ height: '100%' }}\n >\n <Grid2\n container\n direction=\"row\"\n sx={styles.container}\n >\n <Grid2 style={{ height: '100%', overflow: 'hidden', width: this.state.current ? 250 : '100%' }}>\n <div style={{ height: '100%', overflow: 'auto' }}>\n <AdaptersUpdater\n finished={this.state.finished}\n inProcess={this.state.inProcess}\n selected={this.state.selected}\n current={this.state.current}\n stopped={this.state.stopped}\n updated={this.state.updated}\n lang={this.props.lang}\n installed={this.props.installed}\n repository={this.props.repository}\n noTranslation={this.props.noTranslation}\n toggleTranslation={this.props.toggleTranslation}\n onUpdateSelected={(selected: string[], updateAvailable: string[]) => {\n if (updateAvailable) {\n this.updateAvailable = updateAvailable;\n }\n this.setState({ selected });\n }}\n theme={this.props.theme}\n />\n </div>\n </Grid2>\n {!!this.state.current && (\n <Grid2\n style={{\n height: '100%',\n overflow: 'hidden',\n width: 'calc(100% - 260px)',\n minWidth: 240,\n }}\n >\n <Command\n noSpacing\n key={this.state.current}\n ready\n host={this.props.currentHost}\n socket={this.props.socket}\n t={this.props.t}\n cmd={`upgrade ${this.state.current}@${this.state.currentVersion}${this.state.debug ? ' --debug' : ''}`}\n onFinished={() => this.onAdapterFinished()}\n errorFunc={() => {\n if (this.state.stopOnError) {\n this.setState({ stopped: true, finished: true });\n this.onAdapterFinished = null;\n this.props.onSetCommandRunning(false);\n } else {\n this.onAdapterFinished();\n }\n }}\n />\n </Grid2>\n )}\n </Grid2>\n <Toolbar\n variant=\"dense\"\n disableGutters\n sx={styles.appBar}\n >\n <FormControlLabel\n control={\n <Checkbox\n disabled={this.state.finished}\n checked={this.state.stopOnError}\n onChange={() => {\n (((window as any)._localStorage as Storage) || window.localStorage).setItem(\n 'AdaptersUpdaterDialog.stopOnError',\n this.state.stopOnError ? 'false' : 'true',\n );\n this.setState({ stopOnError: !this.state.stopOnError });\n }}\n />\n }\n label={this.props.t('Stop on error')}\n />\n <FormControlLabel\n control={\n <Checkbox\n disabled={this.state.finished}\n checked={this.state.closeOnFinished}\n onChange={() => {\n (((window as any)._localStorage as Storage) || window.localStorage).setItem(\n 'AdaptersUpdaterDialog.closeOnFinished',\n this.state.closeOnFinished ? 'false' : 'true',\n );\n this.setState({ closeOnFinished: !this.state.closeOnFinished });\n }}\n />\n }\n label={this.props.t('Close on finished')}\n />\n <FormControlLabel\n control={\n <Checkbox\n disabled={this.state.finished || this.state.inProcess}\n checked={this.state.debug}\n onChange={() => {\n (((window as any)._localStorage as Storage) || window.localStorage).setItem(\n 'AdaptersUpdaterDialog.debug',\n this.state.debug ? 'false' : 'true',\n );\n this.setState({ debug: !this.state.debug });\n }}\n />\n }\n label={this.props.t('Debug info')}\n />\n </Toolbar>\n </DialogContent>\n <DialogActions>\n <Button\n id=\"adapters-update-dialog-update\"\n variant=\"contained\"\n disabled={\n this.state.stopped ||\n this.state.inProcess ||\n this.state.finished ||\n !this.state.selected.length\n }\n onClick={() => this.onStartUpdate()}\n color=\"primary\"\n autoFocus\n startIcon={<CheckIcon />}\n >\n {this.props.t('Update')}\n </Button>\n <Button\n id=\"adapters-update-dialog-cancel\"\n variant=\"contained\"\n disabled={!this.state.inProcess}\n color=\"grey\"\n startIcon={<CancelIcon />}\n onClick={() => {\n this.setState({ stopped: true, finished: true });\n this.props.onSetCommandRunning(false);\n }}\n >\n {this.props.t('Cancel')}\n </Button>\n <Button\n id=\"adapters-update-dialog-close\"\n variant=\"contained\"\n onClick={() => this.props.onClose(!!this.state.updated.length)}\n disabled={this.state.inProcess && !this.state.stopped}\n color={this.state.stopped ? 'error' : 'grey'}\n startIcon={<CloseIcon />}\n >\n {this.props.t('Close')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n}\n\nexport default AdaptersUpdaterDialog;\n","import { type AdminConnection } from '@iobroker/adapter-react-v5';\nimport { GenericWorker, type EventType, type GenericEvent } from './GenericWorker';\n\nexport type HostAdapterEventType = EventType;\n\nexport type HostAdapterEvent = GenericEvent<'adapter'>;\n\nexport class HostAdapterWorker extends GenericWorker<'adapter'> {\n private readonly host: string;\n private readonly prefix: string;\n\n constructor(socket: AdminConnection, host: string) {\n super(socket, `${host}.adapter`, 'adapter');\n this.prefix = `${host}.adapter.`;\n this.host = host;\n }\n\n getObject(adapterName: string): ioBroker.AdapterObject | null {\n if (!this.objects) {\n return null;\n }\n return this.objects[this.prefix + adapterName] || null;\n }\n\n getHost(): string {\n return this.host;\n }\n}\n","import React, { type JSX } from 'react';\n\nimport {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n Paper,\n AppBar,\n Box,\n Checkbox,\n FormControlLabel,\n IconButton,\n InputAdornment,\n Tab,\n Tabs,\n TextField,\n Autocomplete,\n} from '@mui/material';\n\nimport { FaGithub as GithubIcon } from 'react-icons/fa';\nimport {\n Language as UrlIcon,\n Sms as SmsIcon,\n Close as CloseIcon,\n Check as CheckIcon,\n Delete,\n} from '@mui/icons-material';\n\nimport { I18n, Icon, type IobTheme } from '@iobroker/adapter-react-v5';\n\nimport type { RepoAdapterObject } from '@/components/Adapters/Utils';\nimport type { AdapterRatingInfo, InstalledInfo } from '@/components/Adapters/AdapterInstallDialog';\n\nimport npmIcon from '../assets/npm.png';\n\nfunction a11yProps(name: string): { id: string; 'aria-controls': string } {\n return {\n id: `github-install-dialog-tab-${name}`,\n 'aria-controls': `github-install-dialog-panel-${name}`,\n };\n}\n\nconst styles: Record<string, any> = {\n root: (theme: IobTheme) => ({\n backgroundColor: theme.palette.background.paper,\n width: '100%',\n height: '100%',\n }),\n paper: {\n maxWidth: 1000,\n },\n tabPaper: {\n padding: 16,\n },\n title: (theme: IobTheme) => ({\n mt: '10px',\n p: 1,\n ml: 1,\n fontSize: 18,\n color: theme.palette.primary.main,\n }),\n warningText: {\n color: '#f53939',\n },\n noteText: {\n marginTop: 16,\n },\n errorTextNoGit: {\n fontSize: 13,\n color: '#ff1616',\n },\n listIcon: {\n width: 24,\n height: 24,\n },\n listIconWithMargin: {\n width: 24,\n height: 24,\n marginRight: 8,\n },\n tabSelected: (theme: IobTheme) => ({\n color: theme.palette.mode === 'dark' ? theme.palette.secondary.contrastText : '#222 !important',\n }),\n};\n\n// some older browsers do not have `flat`\nfunction arrayFlat(arr: (string[] | string)[]): string[] {\n const result: string[] = [];\n for (let i = 0; i < arr.length; i++) {\n if (typeof arr[i] === 'object') {\n (arr[i] as string[]).forEach((item: string) => result.push(item));\n } else {\n result.push(arr[i] as string);\n }\n }\n return result;\n}\n\ninterface GitHubInstallDialogProps {\n categories: {\n name: string;\n translation: string;\n count: number;\n installed: number;\n adapters: string[];\n }[];\n repository: Record<string, RepoAdapterObject & { rating?: AdapterRatingInfo }>;\n installed: InstalledInfo;\n onClose: () => void;\n t: typeof I18n.t;\n /** Method to install adapter */\n installFromUrl: (adapter: string, debug: boolean, customUrl: boolean) => Promise<void>;\n /** Upload the adapter */\n upload: (adapter: string) => void;\n}\n\ninterface AutoCompleteValue {\n value: string;\n nogit: boolean;\n name: string;\n icon: string;\n title: string;\n}\n\ninterface GitHubInstallDialogState {\n autoCompleteValue: AutoCompleteValue | null;\n /** If debug output is desired */\n debug: boolean;\n /** The selected url */\n url: string;\n /** Name of the current tab */\n currentTab: string;\n /** History of custom commands */\n customHistory: string[];\n}\n\nconst MAX_HISTORY_LENGTH = 10;\n\nclass GitHubInstallDialog extends React.Component<GitHubInstallDialogProps, GitHubInstallDialogState> {\n constructor(props: GitHubInstallDialogProps) {\n super(props);\n\n let customHistory = [];\n const customHistoryStr = ((window as any)._localstorage || window.localStorage).getItem('App.npmHistory');\n if (customHistoryStr) {\n try {\n customHistory = JSON.parse(customHistoryStr);\n } catch {\n // ignore\n }\n }\n this.state = {\n autoCompleteValue:\n ((window as any)._localstorage || window.localStorage).getItem('App.autocomplete') || null,\n debug: ((window as any)._localstorage || window.localStorage).getItem('App.gitDebug') === 'true',\n url: ((window as any)._localstorage || window.localStorage).getItem('App.userUrl') || '',\n currentTab: ((window as any)._localstorage || window.localStorage).getItem('App.gitTab') || 'npm',\n customHistory,\n };\n }\n\n renderNpm(): JSX.Element | null {\n return this.state.currentTab === 'npm' ? (\n <Paper\n style={styles.tabPaper}\n id=\"github-install-dialog-panel-npm\"\n >\n <div style={{ display: 'flex', alignItems: 'center' }}>\n <FormControlLabel\n control={\n <Checkbox\n checked={this.state.debug}\n onChange={e => {\n ((window as any)._localstorage || window.localStorage).setItem(\n 'App.gitDebug',\n e.target.checked ? 'true' : 'false',\n );\n this.setState({ debug: e.target.checked });\n }}\n />\n }\n label={this.props.t('Debug outputs')}\n />\n </div>\n <div style={{ display: 'flex', alignItems: 'flex-end' }}>\n <SmsIcon style={{ marginRight: 10 }} />\n <Autocomplete\n fullWidth\n value={this.state.autoCompleteValue}\n onChange={(_, newValue) => {\n ((window as any)._localstorage || window.localStorage).setItem(\n 'App.autocomplete',\n newValue,\n );\n this.setState({ autoCompleteValue: newValue });\n }}\n options={this.getList()}\n getOptionLabel={option => option?.name ?? ''}\n renderInput={params => {\n const _params = { ...params };\n _params.InputProps = _params.InputProps || ({} as any);\n _params.InputProps.startAdornment = (\n <InputAdornment position=\"start\">\n <Icon\n src={this.state.autoCompleteValue?.icon || ''}\n style={styles.listIcon}\n />\n </InputAdornment>\n );\n\n return (\n <TextField\n variant=\"standard\"\n {...params}\n label={I18n.t('Select adapter')}\n />\n );\n }}\n renderOption={(props, option) => (\n <Box\n component=\"li\"\n sx={{ '& > img': { mr: 2, flexShrink: 0 } }}\n {...props}\n >\n <Icon\n src={option?.icon || ''}\n style={styles.listIconWithMargin}\n />\n {option?.name ?? ''}\n </Box>\n )}\n />\n </div>\n <div\n style={{\n fontSize: 24,\n fontWeight: 'bold',\n marginTop: 40,\n }}\n >\n {this.props.t('Warning!')}\n </div>\n <div style={styles.warningText}>{this.props.t('npm_warning', 'NPM', 'NPM')}</div>\n <div style={styles.noteText}>{this.props.t('github_note')}</div>\n </Paper>\n ) : null;\n }\n\n renderGitHub(): JSX.Element | null {\n return this.state.currentTab === 'GitHub' ? (\n <Paper\n style={styles.tabPaper}\n id=\"github-install-dialog-panel-github\"\n >\n <div style={{ display: 'flex', alignItems: 'center' }}>\n <FormControlLabel\n control={\n <Checkbox\n checked={this.state.debug}\n onChange={e => {\n ((window as any)._localstorage || window.localStorage).setItem(\n 'App.gitDebug',\n e.target.checked ? 'true' : 'false',\n );\n this.setState({ debug: e.target.checked });\n }}\n />\n }\n label={this.props.t('Debug outputs')}\n />\n </div>\n <div style={{ display: 'flex', alignItems: 'flex-end' }}>\n <SmsIcon style={{ marginRight: 10 }} />\n <Autocomplete\n fullWidth\n value={this.state.autoCompleteValue}\n getOptionDisabled={option => !!option?.nogit}\n renderOption={(props, option) => (\n <Box\n component=\"li\"\n sx={{ '& > img': { mr: 2, flexShrink: 0 } }}\n {...props}\n >\n <Icon\n src={option?.icon || ''}\n style={styles.listIconWithMargin}\n />\n {option?.name ?? ''}\n {option?.nogit && (\n <div style={styles.errorTextNoGit}>\n {I18n.t(\n 'This adapter cannot be installed from git as must be built before installation.',\n )}\n </div>\n )}\n </Box>\n )}\n onChange={(_, newValue) => {\n ((window as any)._localstorage || window.localStorage).setItem(\n 'App.autocomplete',\n newValue,\n );\n this.setState({ autoCompleteValue: newValue });\n }}\n options={this.getList()}\n getOptionLabel={option => option?.name ?? ''}\n renderInput={params => {\n const _params = { ...params };\n _params.InputProps = _params.InputProps || ({} as any);\n _params.InputProps.startAdornment = (\n <InputAdornment position=\"start\">\n <Icon\n src={this.state.autoCompleteValue?.icon || ''}\n style={styles.listIconWithMargin}\n />\n </InputAdornment>\n );\n\n return (\n <TextField\n variant=\"standard\"\n {...params}\n label={I18n.t('Select adapter')}\n />\n );\n }}\n />\n </div>\n <div\n style={{\n fontSize: 24,\n fontWeight: 'bold',\n marginTop: 40,\n }}\n >\n {this.props.t('Warning!')}\n </div>\n <div style={styles.warningText}>{this.props.t('github_warning', 'GitHub', 'GitHub')}</div>\n <div style={styles.noteText}>{this.props.t('github_note')}</div>\n </Paper>\n ) : null;\n }\n\n renderCustom(): JSX.Element | null {\n return this.state.currentTab === 'URL' ? (\n <Paper\n style={styles.tabPaper}\n id=\"github-install-dialog-panel-custom\"\n >\n <div style={{ display: 'flex', alignItems: 'center' }}>\n <FormControlLabel\n control={\n <Checkbox\n checked={this.state.debug}\n onChange={e => {\n ((window as any)._localstorage || window.localStorage).setItem(\n 'App.gitDebug',\n e.target.checked ? 'true' : 'false',\n );\n this.setState({ debug: e.target.checked });\n }}\n />\n }\n label={this.props.t('Debug outputs')}\n />\n </div>\n <div style={{ display: 'flex', alignItems: 'center' }}>\n <Autocomplete\n fullWidth\n value={this.state.url || ''}\n onInputChange={(_, newValue) => {\n ((window as any)._localstorage || window.localStorage).setItem(\n 'App.userUrl',\n newValue || '',\n );\n this.setState({ url: newValue });\n }}\n onChange={(_, newValue) => {\n ((window as any)._localstorage || window.localStorage).setItem(\n 'App.userUrl',\n newValue || '',\n );\n this.setState({ url: newValue });\n }}\n renderOption={(props, option) => (\n <Box\n component=\"li\"\n {...props}\n style={{ display: 'flex', alignItems: 'left' }}\n >\n {option}\n <div style={{ flexGrow: 1 }} />\n <IconButton\n size=\"small\"\n onClick={e => {\n e.stopPropagation();\n const customHistory = this.state.customHistory.filter(it => it !== option);\n ((window as any)._localstorage || window.localStorage).setItem(\n 'App.npmHistory',\n JSON.stringify(customHistory),\n );\n this.setState({ customHistory });\n }}\n >\n <Delete />\n </IconButton>\n </Box>\n )}\n freeSolo\n options={this.state.customHistory}\n renderInput={params => (\n <TextField\n variant=\"standard\"\n {...params}\n onKeyUp={event => {\n if (event.key === 'Enter' && this.state.url) {\n const customHistory = [...this.state.customHistory];\n customHistory.unshift(this.state.url);\n if (customHistory.length > MAX_HISTORY_LENGTH) {\n customHistory.pop();\n }\n ((window as any)._localstorage || window.localStorage).setItem(\n 'App.npmHistory',\n JSON.stringify(customHistory),\n );\n\n if (!this.state.url.includes('.')) {\n void this.props.installFromUrl(\n `iobroker.${this.state.url}`,\n this.state.debug,\n true,\n );\n } else {\n void this.props.installFromUrl(this.state.url, this.state.debug, true);\n }\n this.setState({ autoCompleteValue: null, url: '' });\n this.props.onClose();\n }\n }}\n helperText={this.props.t('URL or file path')}\n label={this.props.t('URL')}\n />\n )}\n />\n </div>\n <div\n style={{\n fontSize: 24,\n fontWeight: 'bold',\n marginTop: 40,\n }}\n >\n {this.props.t('Warning!')}\n </div>\n <div style={styles.warningText}>{this.props.t('github_warning', 'URL', 'URL')}</div>\n <div style={styles.noteText}>{this.props.t('github_note')}</div>\n </Paper>\n ) : null;\n }\n\n getList(): ({ value: string; name: string; icon: string; nogit: boolean; title: string } | null)[] {\n const adaptersArrays: string[][] = this.props.categories.map(category => category.adapters);\n const adapters: string[] = arrayFlat(adaptersArrays);\n adapters.sort();\n\n return adapters\n .map((el, i) => {\n if (i && adapters[i - 1] === el) {\n return null;\n }\n const adapter = this.props.repository[el];\n if (!adapter?.controller) {\n // @ts-expect-error meta / readme\n const parts = (adapter.extIcon || adapter.meta || adapter.readme || '').toString().split('/');\n\n let name: ioBroker.StringOrTranslated = adapter?.name;\n if (!name) {\n name = adapter.titleLang;\n if (name && typeof name === 'object') {\n name = name[I18n.getLanguage()] || name.en;\n } else {\n name = adapter.title || el;\n }\n }\n\n const item = {\n value: `${el}/${parts[3]}`,\n name: `${name} [${parts[3]}]`,\n icon: adapter.extIcon || adapter.icon,\n nogit: !!adapter.nogit,\n title: el,\n };\n\n // If installed, take the icon from local web server\n if (this.props.installed[name] && name !== 'admin') {\n item.icon = `/adapter/${el}/${adapter.icon.split('/admin/').pop()}`;\n }\n\n return item;\n }\n return null;\n })\n .filter(it => it)\n .sort((a: any, b: any) => (a.name < b.name ? -1 : a.name > b.name ? 1 : 0));\n }\n\n render(): JSX.Element {\n const closeInit = (): void => this.setState({ autoCompleteValue: null, url: '' });\n\n return (\n <Dialog\n onClose={() => this.props.onClose()}\n open={!0}\n sx={{ '& .MuiDialog-paper': styles.paper }}\n >\n <DialogContent dividers>\n <Box\n component=\"div\"\n sx={styles.root}\n >\n <AppBar\n position=\"static\"\n color=\"default\"\n >\n <Tabs\n value={this.state.currentTab}\n onChange={(_e, newTab) => {\n ((window as any)._localstorage || window.localStorage).setItem(\n 'App.gitTab',\n newTab,\n );\n this.setState({ currentTab: newTab });\n }}\n variant=\"fullWidth\"\n indicatorColor=\"secondary\"\n >\n <Tab\n label={this.props.t('From npm')}\n wrapped\n sx={{ '&.Mui-selected': styles.tabSelected }}\n icon={\n <img\n src={npmIcon}\n alt=\"npm\"\n width={24}\n height={24}\n />\n }\n {...a11yProps('npm')}\n value=\"npm\"\n />\n <Tab\n label={this.props.t('From github')}\n wrapped\n sx={{ '&.Mui-selected': styles.tabSelected }}\n icon={\n <GithubIcon\n style={{ width: 24, height: 24 }}\n width={24}\n height={24}\n />\n }\n {...a11yProps('github')}\n value=\"GitHub\"\n />\n <Tab\n label={this.props.t('Custom')}\n wrapped\n sx={{ '&.Mui-selected': styles.tabSelected }}\n icon={\n <UrlIcon\n width={24}\n height={24}\n />\n }\n {...a11yProps('custom')}\n value=\"URL\"\n />\n </Tabs>\n </AppBar>\n <Box\n component=\"div\"\n sx={styles.title}\n >\n {this.props.t('Install or update the adapter from %s', this.state.currentTab || 'npm')}\n </Box>\n {this.renderNpm()}\n {this.renderGitHub()}\n {this.renderCustom()}\n </Box>\n </DialogContent>\n <DialogActions>\n <Button\n id=\"github-install-dialog-ok\"\n variant=\"contained\"\n disabled={\n ((this.state.currentTab === 'GitHub' || this.state.currentTab === 'npm') &&\n !this.state.autoCompleteValue?.value) ||\n (this.state.currentTab === 'URL' && !this.state.url)\n }\n autoFocus\n onClick={async () => {\n if (this.state.currentTab === 'GitHub') {\n const parts = (this.state.autoCompleteValue?.value || '').split('/');\n const _url = `${parts[1]}/ioBroker.${parts[0]}`;\n void this.props.installFromUrl(_url, this.state.debug, true);\n } else if (this.state.currentTab === 'URL') {\n const customHistory = [...this.state.customHistory];\n customHistory.unshift(this.state.url);\n if (customHistory.length > MAX_HISTORY_LENGTH) {\n customHistory.pop();\n }\n ((window as any)._localstorage || window.localStorage).setItem(\n 'App.npmHistory',\n JSON.stringify(customHistory),\n );\n\n if (!this.state.url.includes('.')) {\n void this.props.installFromUrl(\n `iobroker.${this.state.url}`,\n this.state.debug,\n true,\n );\n } else {\n void this.props.installFromUrl(this.state.url, this.state.debug, true);\n }\n } else if (this.state.currentTab === 'npm') {\n const fullAdapterName = (this.state.autoCompleteValue?.value || '').split('/')[0];\n const adapterName = fullAdapterName.includes('.')\n ? fullAdapterName.split('.')[1]\n : fullAdapterName;\n\n try {\n await this.props.installFromUrl(\n `iobroker.${adapterName}@latest`,\n this.state.debug,\n true,\n );\n // on npm installations we want to perform an additional upload\n this.props.upload(adapterName);\n } catch (e) {\n console.error(`Installation from url failed: ${e.message}`);\n }\n }\n this.props.onClose();\n closeInit();\n }}\n color=\"primary\"\n startIcon={<CheckIcon />}\n >\n {this.props.t('Install')}\n </Button>\n <Button\n id=\"github-install-dialog-close\"\n variant=\"contained\"\n onClick={() => {\n this.props.onClose();\n closeInit();\n }}\n color=\"grey\"\n startIcon={<CloseIcon />}\n >\n {this.props.t('Close')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n}\n\nexport default GitHubInstallDialog;\n","import React, { Component, type JSX } from 'react';\n\nimport {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n FormControl,\n Grid2,\n IconButton,\n InputLabel,\n MenuItem,\n Select,\n Typography,\n type SelectChangeEvent,\n Box,\n} from '@mui/material';\nimport { Close as CloseIcon, Add as AddIcon, Public as IconWeb, Language as LanguageIcon } from '@mui/icons-material';\n\nimport { type AdminConnection, I18n, Utils, type IobTheme, type Translate } from '@iobroker/adapter-react-v5';\n\nimport type { HostsWorker } from '@/Workers/HostsWorker';\nimport type { InstancesWorker } from '@/Workers/InstancesWorker';\nimport { checkCondition, type CompactInstanceInfo, type Message } from '@/dialogs/AdapterUpdateDialog';\nimport HostSelectors from '@/components/HostSelectors';\n\nconst styles: Record<string, any> = {\n formControl: {\n marginTop: 24,\n width: 100,\n },\n closeButton: (theme: IobTheme) => ({\n position: 'absolute',\n right: 8,\n top: 8,\n color: theme.palette.grey[500],\n }),\n languageButton: {\n position: 'absolute',\n right: 52 + 8,\n top: 8,\n },\n languageButtonActive: (theme: IobTheme) => ({\n color: theme.palette.primary.main,\n }),\n paper: {\n // minWidth: 600\n },\n typography: {\n pr: '30px',\n },\n messageText: {},\n messageColor_warn: {\n color: '#cb7642',\n },\n messageColor_error: {\n color: '#f5614d',\n },\n messageColor_info: {\n color: '#5abd29',\n },\n messageTitle_warn: (theme: IobTheme) => ({\n background: '#cb7642',\n borderRadius: '3px',\n pl: '10px',\n fontWeight: 'bold',\n color: theme.palette.mode === 'dark' ? 'black' : 'white',\n }),\n messageTitle_error: (theme: IobTheme) => ({\n background: '#f5614d',\n borderRadius: '3px',\n pl: '10px',\n fontWeight: 'bold',\n color: theme.palette.mode === 'dark' ? 'black' : 'white',\n }),\n messageTitle_info: (theme: IobTheme) => ({\n background: '#5abd29',\n borderRadius: '3px',\n pl: '10px',\n fontWeight: 'bold',\n color: theme.palette.mode === 'dark' ? 'black' : 'white',\n }),\n deps: (theme: IobTheme) => ({\n m: '10px',\n fontSize: 16,\n color: theme.palette.mode === 'dark' ? '#e70000' : '#840101',\n }),\n};\n\nexport interface AdapterDependencies {\n name: string;\n version: string | null;\n installed: boolean;\n installedVersion: string;\n rightVersion: boolean;\n}\n\ninterface AddInstanceDialogProps {\n adapter: string;\n instancesWorker: InstancesWorker;\n socket: AdminConnection;\n currentHost: string;\n currentInstance: string;\n t: Translate;\n onClose: (result: boolean) => void;\n onHostChange: (host: string) => void;\n onInstanceChange: (event: SelectChangeEvent<string>) => void;\n instances: Record<string, CompactInstanceInfo>;\n adapterObject: ioBroker.AdapterCommon;\n dependencies: AdapterDependencies[];\n hostsWorker: InstanceType<typeof HostsWorker>;\n noTranslation: boolean;\n toggleTranslation: () => void;\n expertMode: boolean;\n theme: IobTheme;\n}\n\ninterface AddInstanceDialogState {\n instanceNumbers: string[];\n}\n\nclass AddInstanceDialog extends Component<AddInstanceDialogProps, AddInstanceDialogState> {\n private readonly t: Translate;\n\n private readonly messages: Message[] | null = null;\n\n private readonly lang: string;\n\n constructor(props: AddInstanceDialogProps) {\n super(props);\n this.state = {\n instanceNumbers: [],\n };\n this.t = props.t;\n this.lang = I18n.getLanguage();\n\n this.messages = checkCondition(\n props.adapterObject.messages,\n null,\n props.adapterObject.version,\n props.instances,\n );\n }\n\n componentDidMount(): void {\n void this.props.instancesWorker.getObjects().then((instances: Record<string, ioBroker.InstanceObject>) => {\n const instanceNumbers = Object.keys(instances)\n .filter(id => instances[id]?.common?.name === this.props.adapter)\n .map(id => id.substring(id.lastIndexOf('.') + 1));\n\n this.setState({ instanceNumbers });\n });\n }\n\n getAvailableInstances(): JSX.Element[] {\n const result = [];\n result.push(\n <MenuItem\n value=\"auto\"\n key=\"auto\"\n >\n {this.t('auto')}\n </MenuItem>,\n );\n\n for (let i = 0; i <= 100; i++) {\n if (!this.state.instanceNumbers.includes(i.toString())) {\n result.push(\n <MenuItem\n value={i.toString()}\n key={i}\n >\n {i}\n </MenuItem>,\n );\n }\n if (result.length > 11) {\n break;\n }\n }\n\n return result;\n }\n\n checkDependencies(dependencies = this.props.dependencies): string | JSX.Element[] {\n if (!dependencies) {\n return '';\n }\n const array = [];\n for (const adapter of dependencies) {\n if (!adapter.installedVersion) {\n array.push(this.props.t('No version of %s', adapter.name, adapter.name));\n } else if (!adapter.rightVersion) {\n array.push(\n `${this.props.t('Invalid version of %s. Required %s. Current ', adapter.name, adapter.version)}${adapter.installedVersion}`,\n );\n }\n }\n return array.length ? array.map(el => <div key={el}>{el}</div>) : '';\n }\n\n getText(text: string | { [lang: string]: string }, noTranslation?: boolean): string {\n if (text && typeof text === 'object') {\n if (noTranslation) {\n return text.en;\n }\n return text[this.lang] || text.en;\n }\n return typeof text === 'object' ? '' : text;\n }\n\n renderOneMessage(message: Message, index: number): JSX.Element {\n return (\n <Grid2 key={index}>\n <Typography sx={styles[`messageTitle_${message.level || 'warn'}`]}>\n {this.getText(message.title, this.props.noTranslation) || ''}\n </Typography>\n <Typography\n component=\"div\"\n variant=\"body2\"\n style={styles.messageText}\n >\n {this.getText(message.text, this.props.noTranslation) || ''}\n </Typography>\n {message.link ? (\n <Button\n onClick={() => {\n const w = window.open(message.link, '_blank');\n w.focus();\n }}\n startIcon={<IconWeb />}\n variant=\"contained\"\n color=\"grey\"\n >\n {this.getText(message.linkText, this.props.noTranslation) || this.props.t('More info')}\n </Button>\n ) : null}\n </Grid2>\n );\n }\n\n renderMessages(): JSX.Element | null {\n if (this.messages) {\n return (\n <Grid2\n container\n spacing={2}\n direction=\"column\"\n wrap=\"nowrap\"\n sx={{ marginBottom: 1 }}\n >\n {this.messages.map((message, i) => this.renderOneMessage(message, i))}\n </Grid2>\n );\n }\n return null;\n }\n\n render(): JSX.Element {\n const checkDeps = this.checkDependencies();\n\n return (\n <Dialog\n onClose={() => {}}\n open={!0}\n sx={{ '& .MuiDialog-paper': styles.paper }}\n >\n <DialogTitle>\n <Typography\n component=\"h2\"\n variant=\"h6\"\n sx={{ '&.MuiTypography-root': styles.typography }}\n >\n {this.t('You are going to add new instance:')} {this.props.adapter}\n <IconButton\n size=\"large\"\n sx={styles.closeButton}\n onClick={() => this.props.onClose(false)}\n >\n <CloseIcon />\n </IconButton>\n {this.messages && this.lang !== 'en' && this.props.toggleTranslation ? (\n <IconButton\n size=\"large\"\n style={Utils.getStyle(\n this.props.theme,\n styles.languageButton,\n this.props.noTranslation && styles.languageButtonActive,\n )}\n onClick={this.props.toggleTranslation}\n title={I18n.t('Disable/Enable translation')}\n >\n <LanguageIcon />\n </IconButton>\n ) : null}\n </Typography>\n </DialogTitle>\n <DialogContent dividers>\n {this.renderMessages()}\n {!checkDeps && this.props.expertMode ? (\n <Grid2\n container\n direction=\"column\"\n >\n <HostSelectors\n tooltip={this.t('Select host to add the instance')}\n expertMode\n socket={this.props.socket}\n hostsWorker={this.props.hostsWorker}\n currentHost={this.props.currentHost}\n setCurrentHost={(hostName, hostId) =>\n this.props.onHostChange(hostId.replace(/^system\\.host\\./, ''))\n }\n />\n <FormControl\n variant=\"standard\"\n style={styles.formControl}\n >\n <InputLabel id=\"instance-label\">{this.t('Instance')}</InputLabel>\n <Select\n variant=\"standard\"\n labelId=\"instance-label\"\n value={this.props.currentInstance}\n onChange={this.props.onInstanceChange}\n >\n {this.getAvailableInstances()}\n </Select>\n </FormControl>\n </Grid2>\n ) : null}\n <Box\n component=\"div\"\n sx={styles.deps}\n >\n {checkDeps}\n </Box>\n </DialogContent>\n <DialogActions>\n <Button\n id=\"instance-add-dialog-ok\"\n variant=\"contained\"\n autoFocus\n disabled={!!checkDeps}\n onClick={() => this.props.onClose(true)}\n color=\"primary\"\n startIcon={<AddIcon />}\n >\n {this.t('Add')}\n </Button>\n <Button\n id=\"instance-add-dialog-cancel\"\n variant=\"contained\"\n onClick={() => this.props.onClose(false)}\n color=\"grey\"\n startIcon={<CloseIcon />}\n >\n {this.t('Close')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n}\n\nexport default AddInstanceDialog;\n","export interface RepoInfo {\n stable?: boolean;\n name?: ioBroker.Translated;\n repoTime: string;\n recommendedVersions?: {\n nodeJsAccepted: number[];\n nodeJsRecommended: number;\n npmRecommended: number;\n };\n}\n\nexport interface RepoAdapterObject extends ioBroker.AdapterCommon {\n versionDate: string;\n controller?: boolean;\n stat?: number;\n node?: string;\n allowAdapterInstall?: boolean;\n allowAdapterUpdate?: boolean;\n allowAdapterDelete?: boolean;\n allowAdapterReadme?: boolean;\n allowAdapterRating?: boolean;\n stable?: string;\n latestVersion?: string;\n}\n\nexport function extractUrlLink(adapterRepo: RepoAdapterObject): string {\n if (!adapterRepo) {\n return '';\n }\n let url =\n adapterRepo.licenseInformation?.link ||\n // @ts-expect-error licenseUrl is deprecated\n adapterRepo.licenseUrl;\n\n if (!url || !url.includes('/LICENSE') || !url.includes('raw.githubusercontent.com')) {\n url = adapterRepo.extIcon;\n if (!url) {\n url = adapterRepo.readme;\n if (!url) {\n console.error(`No extIcon for ${adapterRepo.name || JSON.stringify(adapterRepo)}`);\n return '';\n }\n url = url.replace('github.com', 'raw.githubusercontent.com').replace('/blob/', '/');\n if (url.includes('/main')) {\n url = `${url.split('/main')[0]}/main/LICENSE`;\n } else if (url.includes('/master')) {\n url = `${url.split('/master')[0]}/master/LICENSE`;\n }\n }\n if (url.includes('/main')) {\n url = `${url.split('/main')[0]}/main/LICENSE`;\n } else if (url.includes('/master')) {\n url = `${url.split('/master')[0]}/master/LICENSE`;\n } else {\n return '';\n }\n }\n\n return url;\n}\n","import React, { Component, type JSX } from 'react';\nimport semver from 'semver';\n\nimport { type Translate, type AdminConnection, type ThemeType, type IobTheme, I18n } from '@iobroker/adapter-react-v5';\n\nimport { checkCondition, type CompactInstanceInfo } from '@/dialogs/AdapterUpdateDialog';\n\nimport AddInstanceDialog, { type AdapterDependencies } from '@/dialogs/AddInstanceDialog';\nimport LicenseDialog from '@/dialogs/LicenseDialog';\n// import type { AdapterInformation } from '@iobroker/js-controller-common-db/build/esm/lib/common/tools';\nimport type { InstancesWorker } from '@/Workers/InstancesWorker';\nimport type { HostsWorker } from '@/Workers/HostsWorker';\nimport type { RatingDialogRepository } from '@/dialogs/RatingDialog';\nimport type { HostAdapterWorker } from '@/Workers/HostAdapterWorker';\nimport { extractUrlLink, type RepoAdapterObject } from './Utils';\n\n// TODO: Placed here from @iobroker/js-controller-common-db/build/esm/lib/common/tools\ninterface Multilingual {\n en: string;\n de?: string;\n ru?: string;\n pt?: string;\n nl?: string;\n fr?: string;\n it?: string;\n es?: string;\n pl?: string;\n uk?: string;\n 'zh-cn'?: string;\n}\n\n// TODO: Placed here from @iobroker/js-controller-common-db/build/esm/lib/common/tools\nexport interface AdapterInformation {\n /** this flag is only true for the js-controller */\n controller: boolean;\n /** adapter version */\n version: string;\n /** path to icon of the adapter */\n icon: string;\n /** path to local icon of the adapter */\n localIcon?: string;\n /** title of the adapter */\n title: string;\n /** title of the adapter in multiple languages */\n titleLang: Multilingual;\n /** description of the adapter in multiple languages */\n desc: Multilingual;\n /** platform of the adapter */\n platform: 'Javascript/Node.js';\n /** keywords of the adapter */\n keywords: string[];\n /** path to readme file */\n readme: string;\n /** The installed adapter version, not existing on controller */\n runningVersion?: string;\n /** type of the adapter */\n type: string;\n /** license of the adapter */\n license: string;\n /** url to license information */\n licenseUrl?: string;\n}\n\nexport type AdapterRating = {\n rating?: { r: number; c: number };\n [version: string]: { r: number; c: number };\n};\nexport type AdapterRatingInfo = AdapterRating & { title: string };\n\nexport type AdapterInformationEx = AdapterInformation & {\n installedFrom?: string;\n enabled: number;\n count: number;\n ignoreVersion?: string;\n};\nexport type InstalledInfo = { [adapterName: string]: AdapterInformationEx } & {\n hosts?: { [hostName: string]: ioBroker.HostCommon & { host: string; runningVersion: string } };\n};\n\nexport type AdaptersContext = {\n expertMode: boolean;\n t: Translate;\n /** current selected host */\n socket: AdminConnection;\n removeUpdateAvailable: (adapterName: string) => void;\n toggleTranslation: () => void;\n rightDependenciesFunc: (adapterName: string) => boolean;\n lang: ioBroker.Languages;\n uuid: string;\n themeType: ThemeType;\n theme: IobTheme;\n onUpdating: (isUpdating: boolean) => void;\n /** Information about ALL KNOWN adapters in the ioBroker infrastructure. Repo */\n repository: Record<string, RepoAdapterObject & { rating?: AdapterRatingInfo }>;\n /** Information about all installed adapters on this host */\n installed: InstalledInfo;\n /** Information about all installed adapters on all hosts */\n installedGlobal: InstalledInfo;\n /** very compact information about instances */\n compactInstances: Record<string, CompactInstanceInfo>;\n /** Information about installed adapters */\n adapters: Record<string, ioBroker.AdapterObject>;\n nodeJsVersion: string;\n currentHost: string;\n /** The host ID of the admin adapter, like system.host.test */\n adminHost: string;\n adminInstance: string;\n /** Current selected host */\n instancesWorker: InstancesWorker;\n hostsWorker: HostsWorker;\n executeCommand: (cmd: string, host?: string, callback?: (exitCode: number) => void) => void;\n /** node.js version of current host */\n categories: {\n name: string;\n translation: string;\n count: number;\n installed: number;\n adapters: string[];\n }[];\n descHidden: boolean;\n sortPopularFirst: boolean;\n sortRecentlyUpdated: boolean;\n isTileView: boolean;\n updateRating: (adapter: string, rating: RatingDialogRepository) => void;\n setAdminUpgradeTo: (version: string) => void;\n hostAdapterWorker: HostAdapterWorker;\n};\n\nexport interface AdapterInstallDialogProps {\n noTranslation: boolean;\n}\n\nexport interface AdapterInstallDialogState {\n showLicenseDialog: {\n url: string;\n licenseType: string;\n upload?: boolean;\n adapterName: string;\n } | null;\n addInstanceHostName: string;\n addInstanceId: string;\n addInstanceDialog: string;\n showDialog: boolean;\n}\n\nexport default abstract class AdapterInstallDialog<\n TProps extends AdapterInstallDialogProps,\n TState extends AdapterInstallDialogState,\n> extends Component<TProps, TState> {\n protected constructor(props: TProps) {\n super(props);\n\n this.state = {\n showDialog: false,\n showLicenseDialog: null,\n addInstanceHostName: '',\n addInstanceId: 'auto',\n addInstanceDialog: '',\n } as TState;\n }\n\n renderLicenseDialog(context: AdaptersContext): JSX.Element | null {\n if (!this.state.showLicenseDialog) {\n return null;\n }\n\n return (\n <LicenseDialog\n licenseType={this.state.showLicenseDialog.licenseType}\n url={this.state.showLicenseDialog.url}\n onClose={result => {\n const showLicenseDialog = result ? this.state.showLicenseDialog : null;\n this.setState({ showLicenseDialog: null, showDialog: false }, () => {\n if (showLicenseDialog) {\n if (showLicenseDialog.upload) {\n AdapterInstallDialog.upload(showLicenseDialog.adapterName, context);\n } else {\n this.addInstance({ adapterName: showLicenseDialog.adapterName, context }).catch(e =>\n window.alert(`Cannot add instance: ${e}`),\n );\n }\n }\n });\n }}\n />\n );\n }\n\n async addInstance(options: {\n adapterName: string;\n // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n instance?: 'auto' | string;\n debug?: boolean;\n customUrl?: boolean;\n context: AdaptersContext;\n }): Promise<void> {\n if (!options.customUrl) {\n const adapterObject = options.context.repository[options.adapterName];\n\n const messages = checkCondition(\n adapterObject.messages,\n null,\n adapterObject.version,\n options.context.compactInstances,\n );\n\n if (!options.instance && (options.context.expertMode || messages)) {\n this.setState({\n addInstanceDialog: options.adapterName,\n showDialog: true,\n addInstanceHostName: options.context.currentHost.replace(/^system\\.host\\./, ''),\n addInstanceId: options.instance || 'auto',\n });\n return;\n }\n\n if (options.instance) {\n const instances = await options.context.instancesWorker.getObjects();\n // if the instance already exists\n if (instances && instances[`system.adapter.${options.adapterName}.${options.instance}`]) {\n window.alert(\n options.context.t('Instance %s already exists', `${options.adapterName}.${options.instance}`),\n );\n return;\n }\n }\n }\n\n const host = (this.state.addInstanceHostName || options.context.currentHost).replace(/^system\\.host\\./, '');\n\n try {\n await new Promise<void>((resolve, reject) => {\n options.context.executeCommand(\n `${options.customUrl ? 'url' : 'add'} ${options.adapterName} ${options.instance ? `${options.instance} ` : ''}--host ${host} ${\n options.debug || options.context.expertMode ? '--debug' : ''\n }`,\n host,\n exitCode =>\n !exitCode ? resolve() : reject(new Error(`The process returned an exit code of ${exitCode}`)),\n );\n });\n } catch (e) {\n window.alert(`${I18n.t('Cannot install')}: ${e}`);\n }\n }\n\n static getDependencies(adapterName: string, context: AdaptersContext): AdapterDependencies[] {\n const adapter = context.repository[adapterName];\n const result: AdapterDependencies[] = [];\n\n if (adapter) {\n if (adapter.dependencies && !Array.isArray(adapter.dependencies)) {\n adapter.dependencies = [adapter.dependencies];\n }\n\n if (adapter.globalDependencies && !Array.isArray(adapter.globalDependencies)) {\n adapter.globalDependencies = [adapter.globalDependencies];\n }\n\n const nodeVersion = adapter.node;\n\n if (adapter.dependencies?.length) {\n for (const dependency of adapter.dependencies) {\n const entry: AdapterDependencies = {\n name: '',\n version: null,\n installed: false,\n installedVersion: null,\n rightVersion: false,\n };\n\n const checkVersion = typeof dependency !== 'string';\n const keys = Object.keys(dependency);\n entry.name = !checkVersion ? dependency : keys ? keys[0] : null;\n entry.version = checkVersion ? dependency[entry.name] : null;\n\n if (result && entry.name) {\n const installed = context.installed[entry.name];\n\n entry.installed = !!installed;\n entry.installedVersion = installed ? installed.version : null;\n try {\n entry.rightVersion = installed\n ? checkVersion\n ? semver.satisfies(installed.version, entry.version, { includePrerelease: true })\n : true\n : false;\n } catch {\n entry.rightVersion = true;\n }\n }\n\n result.push(entry);\n }\n }\n\n if (adapter.globalDependencies?.length) {\n for (const dependency of adapter.globalDependencies) {\n const entry: AdapterDependencies = {\n name: '',\n version: null,\n installed: false,\n installedVersion: null,\n rightVersion: false,\n };\n\n const checkVersion = typeof dependency !== 'string';\n const keys = Object.keys(dependency);\n entry.name = !checkVersion ? dependency : keys ? keys[0] : null;\n entry.version = checkVersion ? dependency[entry.name] : null;\n\n if (result && entry.name) {\n const installed = context.installedGlobal[entry.name];\n\n entry.installed = !!installed;\n entry.installedVersion = installed ? installed.version : null;\n try {\n entry.rightVersion = installed\n ? checkVersion\n ? semver.satisfies(installed.version, entry.version, { includePrerelease: true })\n : true\n : false;\n } catch {\n entry.rightVersion = true;\n }\n }\n\n result.push(entry);\n }\n }\n\n if (nodeVersion) {\n const entry: AdapterDependencies = {\n name: 'node',\n version: nodeVersion,\n installed: true,\n installedVersion: context.nodeJsVersion,\n rightVersion: false,\n };\n\n try {\n entry.rightVersion = semver.satisfies(context.nodeJsVersion, nodeVersion);\n } catch {\n entry.rightVersion = true;\n }\n\n result.push(entry);\n }\n }\n\n return result;\n }\n\n renderAddInstanceDialog(context: AdaptersContext): JSX.Element | null {\n if (!this.state.addInstanceDialog) {\n return null;\n }\n\n return (\n <AddInstanceDialog\n adapter={this.state.addInstanceDialog}\n socket={context.socket}\n hostsWorker={context.hostsWorker}\n instancesWorker={context.instancesWorker}\n dependencies={AdapterInstallDialog.getDependencies(this.state.addInstanceDialog, context)}\n currentHost={`system.host.${this.state.addInstanceHostName}`}\n currentInstance={this.state.addInstanceId}\n t={context.t}\n onClose={(result: boolean) => {\n const addInstanceDialog = result ? this.state.addInstanceDialog : '';\n const addInstanceId = result ? this.state.addInstanceId : '';\n this.setState(\n {\n addInstanceDialog: '',\n addInstanceId: 'auto',\n showDialog: false,\n },\n () => {\n if (addInstanceDialog) {\n try {\n void this.addInstance({\n adapterName: addInstanceDialog,\n instance: addInstanceId,\n context,\n });\n } catch (e) {\n window.alert(`Cannot add instance: ${e}`);\n }\n }\n },\n );\n }}\n onHostChange={hostName =>\n this.setState({ addInstanceHostName: hostName.replace(/^system\\.host\\./, '') })\n }\n onInstanceChange={event => this.setState({ addInstanceId: event.target.value.toString() })}\n adapterObject={context.repository[this.state.addInstanceDialog]}\n instances={context.compactInstances}\n toggleTranslation={context.toggleTranslation}\n noTranslation={this.props.noTranslation}\n expertMode={context.expertMode}\n theme={context.theme}\n />\n );\n }\n\n static upload(adapterName: string, context: AdaptersContext): void {\n context.executeCommand(`upload ${adapterName}${context.expertMode ? ' --debug' : ''}`);\n }\n\n // eslint-disable-next-line react/no-unused-class-component-methods\n onAddInstance(adapterName: string, context: AdaptersContext): void {\n const adapter = context.repository[adapterName];\n const url = extractUrlLink(adapter);\n const licenseType = adapter.licenseInformation?.license || adapter.license;\n\n if (licenseType === 'MIT') {\n this.addInstance({ adapterName, context }).catch(e => window.alert(`Cannot add instance: ${e}`));\n } else {\n this.setState({ showLicenseDialog: { url, adapterName, licenseType }, showDialog: true });\n }\n }\n\n // eslint-disable-next-line react/no-unused-class-component-methods\n renderDialogs(context: AdaptersContext): JSX.Element | null {\n if (!this.state.showDialog) {\n return null;\n }\n\n return (\n <>\n {this.renderAddInstanceDialog(context)}\n {this.renderLicenseDialog(context)}\n </>\n );\n }\n}\n","import React, { type JSX } from 'react';\n\nimport { Grid2 as Grid, IconButton, TableCell, TableRow, Typography } from '@mui/material';\n\nimport { blue, green } from '@mui/material/colors';\n\nimport { ChevronRight as ChevronRightIcon, ExpandMore as ExpandMoreIcon } from '@mui/icons-material';\n\nimport { type Translate } from '@iobroker/adapter-react-v5';\n\nimport MaterialDynamicIcon from '../../helpers/MaterialDynamicIcon';\n\nconst styles: Record<string, React.CSSProperties> = {\n name: {\n flexWrap: 'nowrap',\n width: 300,\n marginTop: 0,\n },\n nameDiv: {\n display: 'flex',\n alignItems: 'center',\n },\n categoryName: {\n fontWeight: 'bold',\n cursor: 'pointer',\n },\n green: {\n color: green[500],\n },\n blue: {\n color: blue[700],\n },\n category: {\n backgroundColor: 'background.default',\n },\n marginRight5: {\n marginRight: 5,\n },\n};\n\ninterface AdapterCategoryRowProps {\n descHidden: boolean;\n categoryName: string;\n expanded: boolean;\n installedCount: number;\n /** Translated name */\n name: string;\n /** If category is toggled */\n onToggle: () => void;\n /** Number of adapters in category */\n count: number;\n t: Translate;\n}\n\nfunction AdapterCategoryRow(props: AdapterCategoryRowProps): JSX.Element {\n const { installedCount, name, categoryName } = props;\n\n return (\n <TableRow\n hover={false}\n sx={styles.category}\n >\n <TableCell>\n <Grid\n container\n spacing={1}\n alignItems=\"center\"\n style={styles.name}\n >\n <Grid component=\"div\">\n <IconButton\n size=\"small\"\n onClick={props.onToggle}\n >\n {props.expanded ? <ExpandMoreIcon /> : <ChevronRightIcon />}\n </IconButton>\n </Grid>\n </Grid>\n </TableCell>\n <TableCell onClick={props.onToggle}>\n <div style={{ ...styles.nameDiv, ...styles.categoryName }}>\n <MaterialDynamicIcon\n iconName={categoryName}\n style={styles.marginRight5}\n />\n {name}\n </div>\n </TableCell>\n <TableCell colSpan={props.descHidden ? 5 : 6}>\n <Typography\n component=\"span\"\n variant=\"body2\"\n style={styles.green}\n >\n {installedCount}\n </Typography>\n {` ${props.t('of')} `}\n <Typography\n component=\"span\"\n variant=\"body2\"\n style={styles.blue}\n >\n {props.count}\n </Typography>\n {` ${props.t('Adapters from this Group installed')}`}\n </TableCell>\n </TableRow>\n );\n}\n\nexport default AdapterCategoryRow;\n","import React, { Component, type JSX } from 'react';\n\nimport {\n Dialog,\n DialogContent,\n DialogActions,\n DialogTitle,\n Rating,\n Button,\n IconButton,\n InputAdornment,\n TextField,\n List,\n ListItem,\n ListItemText,\n ListItemAvatar,\n InputLabel,\n MenuItem,\n FormControl,\n Select,\n Typography,\n Box,\n} from '@mui/material';\n\nimport { HowToVote as VoteIcon, Close as CloseIcon, Info as InfoIcon } from '@mui/icons-material';\n\nimport type { IobTheme, Translate } from '@iobroker/adapter-react-v5';\n\nconst styles: Record<string, any> = {\n rating: {\n marginBottom: 20,\n },\n listRating: {\n marginRight: 8,\n },\n listTime: {\n opacity: 0.5,\n fontStyle: 'italic',\n },\n list: {\n // maxHeight: 200,\n },\n listOwn: (theme: IobTheme) => ({\n backgroundColor:\n theme.name === 'colored' || theme.name === 'light' ? '#16516e2e' : theme.palette.secondary.dark,\n }),\n listTitle: (theme: IobTheme) => ({\n backgroundColor: theme.palette.primary.dark,\n pt: '4px',\n pb: '4px',\n mb: '4px',\n color: '#ffffff',\n textAlign: 'center',\n }),\n languageFilter: {\n width: 300,\n },\n ratingTextControl: {\n width: 'calc(100% - 138px)',\n marginRight: 8,\n },\n ratingLanguageControl: {\n width: 130,\n },\n noComments: {\n width: '100%',\n textAlign: 'center',\n marginTop: 16,\n },\n commentCount: {\n marginTop: 2,\n marginLeft: 8,\n opacity: 0.8,\n fontSize: 10,\n float: 'right',\n },\n infoText: {\n textAlign: 'left',\n fontSize: '14px',\n },\n infoTextContainer: {\n display: 'flex',\n paddingBottom: '10px',\n alignItems: 'center',\n gap: '10px',\n },\n};\n\nconst LANGUAGES = [\n {\n id: 'en',\n title: 'English',\n },\n {\n id: 'de',\n title: 'Deutsch',\n },\n {\n id: 'ru',\n title: 'русский',\n },\n {\n id: 'pt',\n title: 'Portugues',\n },\n {\n id: 'nl',\n title: 'Nederlands',\n },\n {\n id: 'fr',\n title: 'français',\n },\n {\n id: 'it',\n title: 'Italiano',\n },\n {\n id: 'es',\n title: 'Espanol',\n },\n {\n id: 'pl',\n title: 'Polski',\n },\n {\n id: 'uk',\n title: 'Українська',\n },\n {\n id: 'zh-cn',\n title: '简体中文',\n },\n];\n// {\n// \"adapter\": \"history\",\n// \"rating\": {\n// \"r\": 3.5,\n// \"c\": 20\n// },\n// \"3.0.1\": {\n// \"r\": 3.8,\n// \"c\": 5\n// }\n// }\nexport interface RatingDialogRepository {\n rating: {\n r: number;\n ts: number;\n };\n [version: string]: {\n r: number;\n ts: number;\n };\n}\n\ninterface RatingDialogVotings {\n rating?: Record<string, { r: number; ts: number }>;\n comments?: Array<{ comment: string; lang: string; rating: number; ts: number; uuid: string; version: string }>;\n}\n\ninterface RatingDialogProps {\n t: Translate;\n lang: string;\n uuid: string;\n version: string;\n currentRating: { rating?: { r: number; c: number }; title: string };\n adapter: string;\n onClose: (update?: RatingDialogRepository) => void;\n}\n\ninterface RatingDialogState {\n ratingNumber: number;\n ratingComment: string;\n votings: RatingDialogVotings;\n ratingLang: string;\n filterLang: string;\n commentsByLanguage: Record<string, number>;\n}\n\nclass RatingDialog extends Component<RatingDialogProps, RatingDialogState> {\n constructor(props: RatingDialogProps) {\n super(props);\n\n this.state = {\n ratingNumber: 0,\n ratingComment: '',\n votings: null,\n ratingLang: this.props.lang,\n filterLang:\n (((window as any)._localStorage as Storage) || window.localStorage).getItem('app.commentLang') ||\n this.props.lang,\n commentsByLanguage: {},\n };\n }\n\n componentDidMount(): void {\n void fetch(`https://rating.iobroker.net/adapter/${this.props.adapter}?uuid=${this.props.uuid}`)\n .then(res => res.json())\n .then((votings: RatingDialogVotings) => {\n votings = votings || {};\n votings.rating = votings.rating || {};\n const versions = Object.keys(votings.rating);\n versions.sort((a, b) =>\n votings.rating[a].ts > votings.rating[b].ts\n ? -1\n : votings.rating[a].ts < votings.rating[b].ts\n ? 1\n : 0,\n );\n const commentsByLanguage: Record<string, number> = {};\n\n if (votings.comments) {\n votings.comments.sort((a, b) => (a.ts > b.ts ? -1 : a.ts < b.ts ? 1 : 0));\n\n votings.comments.forEach(comment => {\n commentsByLanguage[comment.lang] = commentsByLanguage[comment.lang] || 0;\n commentsByLanguage[comment.lang]++;\n });\n }\n\n if (versions.length) {\n const item = votings.rating[versions[0]];\n this.setState({ votings, ratingNumber: item ? item.r : 0, commentsByLanguage });\n } else {\n this.setState({ votings, commentsByLanguage });\n }\n });\n }\n\n setAdapterRating(\n adapter: string,\n version: string,\n rating: number,\n comment: string,\n lang: string,\n ): Promise<RatingDialogRepository | null> {\n return fetch('https://rating.iobroker.net/vote', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n redirect: 'follow',\n body: JSON.stringify({\n uuid: this.props.uuid,\n adapter,\n version,\n rating,\n comment,\n lang,\n }),\n })\n .then(res => res.json())\n .then((update: RatingDialogRepository & { adapter: string }) => {\n window.alert(`${this.props.t('Vote:')} ${adapter}@${version}=${rating}`);\n delete update.adapter;\n return update;\n })\n .catch((e: unknown): null => {\n window.alert(`Cannot vote: ${e as Error}`);\n return null;\n });\n }\n\n /**\n * Renders the info text component, which explains the rating section\n */\n renderInfoText(): JSX.Element {\n return (\n <div style={styles.infoTextContainer}>\n <InfoIcon />\n <Typography style={styles.infoText}>{this.props.t('use GitHub for issues')}</Typography>\n </div>\n );\n }\n\n renderComments(): JSX.Element {\n if (this.state.votings?.comments && this.state.votings.comments.length) {\n const found = this.state.votings.comments.find(\n comment =>\n !(this.state.filterLang && this.state.filterLang !== '_' && comment.lang !== this.state.filterLang),\n );\n\n return (\n <div style={{ width: '100%', textAlign: 'left' }}>\n <Box\n component=\"h3\"\n sx={styles.listTitle}\n >\n {this.props.t('Comments')}\n </Box>\n <FormControl\n variant=\"standard\"\n style={styles.languageFilter}\n >\n <InputLabel>{this.props.t('Show comments in language')}</InputLabel>\n <Select\n variant=\"standard\"\n value={this.state.filterLang}\n onChange={e => {\n (((window as any)._localStorage as Storage) || window.localStorage).setItem(\n 'app.commentLang',\n e.target.value,\n );\n this.setState({ filterLang: e.target.value });\n }}\n >\n <MenuItem value=\"_\">\n {this.props.t('All')}{' '}\n <span style={styles.commentCount}>{this.state.votings.comments.length}</span>\n </MenuItem>\n {LANGUAGES.map(item => (\n <MenuItem\n key={item.id}\n value={item.id}\n >\n {item.title}{' '}\n {this.state.commentsByLanguage[item.id] ? (\n <span style={styles.commentCount}>\n {this.state.commentsByLanguage[item.id]}\n </span>\n ) : null}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n <List\n style={styles.list}\n dense\n disablePadding\n >\n {found &&\n this.state.votings.comments.map((comment, i) => {\n if (\n this.state.filterLang &&\n this.state.filterLang !== '_' &&\n comment.lang !== this.state.filterLang\n ) {\n return null;\n }\n return comment ? (\n <ListItem\n key={i}\n title={comment.uuid ? this.props.t('Your comment') : ''}\n sx={{ '&.MuiListItem-root': comment.uuid ? styles.listOwn : undefined }}\n dense\n >\n <ListItemAvatar style={styles.listRating}>\n <Rating\n readOnly\n defaultValue={comment.rating}\n size=\"small\"\n />\n </ListItemAvatar>\n <ListItemText\n primary={comment.comment}\n secondary={`${new Date(comment.ts).toLocaleString()} / v${comment.version}`}\n sx={{ '& .MuiListItemText-secondary': styles.listTime }}\n />\n </ListItem>\n ) : null;\n })}\n {!found && (\n <div style={styles.noComments}>{this.props.t('No comments in selected language')}</div>\n )}\n </List>\n </div>\n );\n }\n return null;\n }\n\n render(): JSX.Element {\n let item: { r: number; ts: number };\n let versions: string[];\n if (this.state.votings) {\n const votings = this.state.votings.rating;\n versions = Object.keys(votings);\n versions.sort((a, b) => (votings[a].ts > votings[b].ts ? -1 : votings[a].ts < votings[b].ts ? 1 : 0));\n if (versions.length) {\n item = votings[versions[0]];\n }\n }\n\n return (\n <Dialog\n open={!0}\n onClose={() => this.props.onClose()}\n >\n <DialogTitle>{`${this.props.t('Review')} ${this.props.adapter}${this.props.version ? `@${this.props.version}` : ''}`}</DialogTitle>\n <DialogContent\n style={{ textAlign: 'center' }}\n title={this.props.currentRating?.title || ''}\n >\n {this.renderInfoText()}\n <Rating\n style={styles.rating}\n name={this.props.adapter}\n value={this.props.version ? this.state.ratingNumber : this.props.currentRating?.rating?.r}\n size=\"large\"\n readOnly={!this.props.version}\n onChange={(_event, newValue) => this.setState({ ratingNumber: newValue })}\n />\n {this.props.version ? (\n <div style={{ width: '100%', textAlign: 'left' }}>\n <TextField\n variant=\"standard\"\n style={styles.ratingTextControl}\n value={this.state.ratingComment}\n label={this.props.t('Comment to version')}\n helperText={this.props.t('Max length %s characters', 200)}\n onChange={e => this.setState({ ratingComment: e.target.value })}\n slotProps={{\n input: {\n endAdornment: this.state.ratingComment ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() => this.setState({ ratingComment: '' })}\n >\n <CloseIcon />\n </IconButton>\n </InputAdornment>\n ) : null,\n },\n htmlInput: {\n maxLength: 200,\n },\n }}\n />\n <FormControl\n variant=\"standard\"\n style={styles.ratingLanguageControl}\n >\n <InputLabel>{this.props.t('Language')}</InputLabel>\n <Select\n variant=\"standard\"\n value={this.state.ratingLang}\n onChange={e => this.setState({ ratingLang: e.target.value })}\n >\n {LANGUAGES.map(it => (\n <MenuItem\n key={it.id}\n value={it.id}\n >\n {it.title}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n </div>\n ) : null}\n {this.props.version ? (\n <div style={{ paddingTop: 20, paddingBottom: 16 }}>\n {this.props.t(\n 'Rate how good this version of the adapter works on your system. You can vote for every new version.',\n )}\n </div>\n ) : null}\n\n {versions && item ? (\n <div>\n {this.props.t(\n 'You voted for %s on %s',\n versions[0],\n new Date(item.ts).toLocaleDateString(),\n )}\n </div>\n ) : null}\n {this.renderComments()}\n </DialogContent>\n <DialogActions>\n {this.props.version && (\n <Button\n variant=\"contained\"\n autoFocus\n color=\"primary\"\n disabled={!this.state.ratingNumber || this.state.votings === null}\n onClick={() => {\n if (this.state.ratingNumber !== item?.r || this.state.ratingComment) {\n void this.setAdapterRating(\n this.props.adapter,\n this.props.version,\n this.state.ratingNumber,\n this.state.ratingComment,\n this.state.ratingLang,\n ).then(update => this.props.onClose(update));\n } else {\n this.props.onClose();\n }\n }}\n startIcon={<VoteIcon />}\n >\n {this.props.t('Rate')}\n </Button>\n )}\n <Button\n autoFocus={!this.props.version}\n variant=\"contained\"\n onClick={() => this.props.onClose()}\n color=\"grey\"\n startIcon={<CloseIcon />}\n >\n {this.props.t('Close')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n}\n\nexport default RatingDialog;\n","import React, { Component, type JSX } from 'react';\n\nimport {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n IconButton,\n Typography,\n FormControlLabel,\n Checkbox,\n} from '@mui/material';\n\nimport { Close as CloseIcon, Check as CheckIcon } from '@mui/icons-material';\n\nimport type { AdminConnection, IobTheme, Translate } from '@iobroker/adapter-react-v5';\n\nconst styles: Record<string, any> = {\n formControl: {\n marginTop: 24,\n },\n closeButton: (theme: IobTheme) => ({\n position: 'absolute',\n right: 8,\n top: 8,\n color: theme.palette.grey[500],\n }),\n typography: {\n paddingRight: 30,\n },\n};\n\ninterface AdapterDeletionDialogProps {\n adapter: string;\n socket: AdminConnection;\n t: Translate;\n onClose: () => void;\n onClick: (deleteCustom: boolean) => void;\n}\n\ninterface AdapterDeletionDialogState {\n deleteCustom: boolean;\n deleteCustomSupported: boolean;\n}\n\nclass AdapterDeletionDialog extends Component<AdapterDeletionDialogProps, AdapterDeletionDialogState> {\n private readonly t: Translate;\n\n constructor(props: AdapterDeletionDialogProps) {\n super(props);\n\n this.state = {\n deleteCustom: false,\n deleteCustomSupported: false,\n };\n this.t = props.t;\n }\n\n componentDidMount(): void {\n void this.props.socket.checkFeatureSupported('DEL_INSTANCE_CUSTOM').then(deleteCustomSupported => {\n if (deleteCustomSupported) {\n return this.props.socket.getObject(`system.adapter.${this.props.adapter}`).then(obj => {\n if (obj?.common) {\n if (obj.common.supportCustoms) {\n this.setState({ deleteCustomSupported: obj.common.supportCustoms });\n }\n } else {\n this.setState({ deleteCustomSupported: true });\n }\n });\n }\n });\n }\n\n render(): JSX.Element {\n return (\n <Dialog\n onClose={this.props.onClose}\n open={!0}\n >\n <DialogTitle>\n <Typography\n component=\"h2\"\n variant=\"h6\"\n sx={{ '&.MuiTypography-root': styles.typography }}\n >\n {this.t('Please confirm')}\n <IconButton\n size=\"large\"\n sx={styles.closeButton}\n onClick={this.props.onClose}\n >\n <CloseIcon />\n </IconButton>\n </Typography>\n </DialogTitle>\n <DialogContent dividers>\n <Typography gutterBottom>\n {this.t('Are you sure you want to delete adapter %s?', this.props.adapter)}\n </Typography>\n {this.state.deleteCustomSupported && (\n <FormControlLabel\n control={\n <Checkbox\n checked={this.state.deleteCustom}\n onChange={e => this.setState({ deleteCustom: e.target.checked })}\n />\n }\n label={this.t('Delete all custom object settings of this adapter too')}\n />\n )}\n </DialogContent>\n <DialogActions>\n <Button\n id=\"adapter-delete-dialog-ok\"\n variant=\"contained\"\n autoFocus\n onClick={() => {\n this.props.onClick(this.state.deleteCustom);\n this.props.onClose();\n }}\n color=\"primary\"\n startIcon={<CheckIcon />}\n >\n {this.t('Ok')}\n </Button>\n <Button\n id=\"adapter-delete-dialog-cancel\"\n variant=\"contained\"\n autoFocus\n onClick={() => this.props.onClose()}\n color=\"grey\"\n startIcon={<CloseIcon />}\n >\n {this.t('Close')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n}\n\nexport default AdapterDeletionDialog;\n","import React from 'react';\nimport { Button, Dialog, DialogActions, DialogContent, DialogTitle, MenuItem, Select, Typography } from '@mui/material';\n\nimport {\n Close as CloseIcon,\n HorizontalRule,\n KeyboardDoubleArrowUp,\n North,\n VerticalAlignTop,\n Save,\n} from '@mui/icons-material';\n\nimport { type AdminConnection, I18n } from '@iobroker/adapter-react-v5';\nimport { InfoBox } from '@foxriver76/iob-component-lib';\nimport IsVisible from '@/components/IsVisible';\nimport { AUTO_UPGRADE_OPTIONS_MAPPING, AUTO_UPGRADE_SETTINGS } from '@/helpers/utils';\n\nexport const ICONS: Record<string, React.JSX.Element> = {\n none: <HorizontalRule />,\n patch: <KeyboardDoubleArrowUp style={{ color: 'green' }} />,\n minor: <North style={{ color: 'orange' }} />,\n major: <VerticalAlignTop style={{ color: 'red' }} />,\n};\n\ninterface AutoUpgradeConfigDialogProps {\n /** Called when user closes dialog */\n onClose: () => void;\n /** The socket connection */\n socket: AdminConnection;\n /** The host id of the host to upgrade node.js on */\n hostId: string;\n /** Name of the adapter */\n adapter: string;\n}\n\ninterface AutoUpgradeConfigDialogState {\n /** Auto upgrade policy which is currently saved */\n currentSavedPolicy: ioBroker.AutoUpgradePolicy;\n /** The current configured auto upgrade policy */\n policy: ioBroker.AutoUpgradePolicy;\n /** The repositories the config apply for */\n repositories: string[];\n /** If the feature is supported */\n supported: boolean;\n}\n\nexport default class AutoUpgradeConfigDialog extends React.Component<\n AutoUpgradeConfigDialogProps,\n AutoUpgradeConfigDialogState\n> {\n constructor(props: AutoUpgradeConfigDialogProps) {\n super(props);\n\n this.state = {\n currentSavedPolicy: 'none',\n policy: 'none',\n repositories: [],\n supported: true,\n };\n }\n\n /**\n * Lifecycle hook called if component is mounted\n */\n async componentDidMount(): Promise<void> {\n await this.getConfiguredRepositories();\n await this.getCurrentAutoUpgradeSetting();\n }\n\n async getConfiguredRepositories(): Promise<void> {\n const sysConfig = await this.props.socket.getObject('system.config');\n\n if (!sysConfig?.common?.adapterAutoUpgrade) {\n return;\n }\n\n const activeRepos = Object.entries(sysConfig.common.adapterAutoUpgrade.repositories)\n .filter(([, active]) => active)\n .map(([repoName]) => repoName);\n\n this.setState({ repositories: activeRepos });\n }\n\n /**\n * Get id of the adapter object\n */\n private getAdapterId(): string {\n return `${this.props.hostId}.adapter.${this.props.adapter}`;\n }\n\n /**\n * Get the current auto upgrade setting\n */\n async getCurrentAutoUpgradeSetting(): Promise<void> {\n const obj = (await this.props.socket.getObject(this.getAdapterId())) as ioBroker.AdapterObject;\n\n if (!obj) {\n console.error('no adapter object existing');\n this.setState({ supported: false });\n return;\n }\n\n this.setState({\n policy: obj.common.automaticUpgrade || 'none',\n currentSavedPolicy: obj.common.automaticUpgrade || 'none',\n });\n }\n\n /**\n * Save the current setting to the adapter object\n */\n async save(): Promise<void> {\n const obj = (await this.props.socket.getObject(this.getAdapterId())) as ioBroker.AdapterObject;\n\n if (!obj) {\n console.error('no adapter object existing');\n this.setState({ supported: false });\n return;\n }\n\n obj.common.automaticUpgrade = this.state.policy;\n await this.props.socket.setObject(this.getAdapterId(), obj);\n this.setState({ currentSavedPolicy: this.state.policy }, () => this.props.onClose());\n }\n\n /**\n * Render the element\n */\n render(): React.JSX.Element {\n return (\n <Dialog\n open={!0}\n maxWidth=\"md\"\n fullWidth\n >\n <DialogTitle>{I18n.t('Auto upgrade policy for %s', this.props.adapter)}</DialogTitle>\n <DialogContent style={{ padding: '0 20px', overflow: 'hidden' }}>\n <IsVisible value={!this.state.supported}>\n <Typography>\n {I18n.t('This feature is supported up from js-controller Kiera (Version 6)!')}\n </Typography>\n </IsVisible>\n <IsVisible value={this.state.supported}>\n <Typography>\n {I18n.t('Allow only the following upgrades to be performed automatically:')}\n </Typography>\n <Select\n variant=\"standard\"\n style={{\n marginTop: 20,\n minWidth: 150,\n marginBottom: 8,\n }}\n value={this.state.policy}\n onChange={e => this.setState({ policy: e.target.value as ioBroker.AutoUpgradePolicy })}\n >\n {AUTO_UPGRADE_SETTINGS.map(option => (\n <MenuItem\n key={option}\n value={option}\n >\n <div style={{ display: 'flex', gap: 8 }}>\n {ICONS[option]}\n {AUTO_UPGRADE_OPTIONS_MAPPING[option]}\n </div>\n </MenuItem>\n ))}\n </Select>\n <IsVisible value={this.state.repositories.includes('beta') && this.state.policy !== 'none'}>\n <InfoBox type=\"warning\">{I18n.t('repo_update_hint')}</InfoBox>\n </IsVisible>\n <IsVisible value={this.state.policy === 'major'}>\n <InfoBox type=\"warning\">\n {I18n.t(\n 'The current selected configuration will allow to automatically pull in incompatible changes of this adapter!',\n )}\n </InfoBox>\n </IsVisible>\n </IsVisible>\n </DialogContent>\n <DialogActions>\n <Button\n disabled={this.state.currentSavedPolicy === this.state.policy}\n color=\"primary\"\n variant=\"contained\"\n startIcon={<Save />}\n onClick={() => this.save()}\n >\n {I18n.t('Save')}\n </Button>\n <Button\n variant=\"contained\"\n onClick={() => this.props.onClose()}\n color=\"grey\"\n startIcon={<CloseIcon />}\n >\n {I18n.t('Close')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n}\n","import React, { type JSX } from 'react';\nimport semver from 'semver';\n\nimport { amber, green, red } from '@mui/material/colors';\n\nimport {\n CardMedia,\n IconButton,\n Tooltip,\n Typography,\n Rating,\n Grid2,\n Link,\n TextField,\n InputAdornment,\n Button,\n Card,\n CardContent,\n Box,\n} from '@mui/material';\n\nimport {\n Refresh as RefreshIcon,\n Add as AddIcon,\n Help as HelpIcon,\n KeyboardArrowUp,\n Cloud as CloudIcon,\n CloudOff as CloudOffIcon,\n ArrowUpward as ArrowUpwardIcon,\n ArrowDownward as ArrowDownwardIcon,\n Remove as RemoveIcon,\n GitHub as GitHubIcon,\n MonetizationOn,\n Close as CloseIcon,\n Link as LinkIcon,\n Publish as PublishIcon,\n DeleteForever as DeleteForeverIcon,\n AddToPhotos as AddToPhotosIcon,\n Build as BuildIcon,\n} from '@mui/icons-material';\n\nimport { type IobTheme, Utils } from '@iobroker/adapter-react-v5';\n\nimport AdapterUpdateDialog from '@/dialogs/AdapterUpdateDialog';\nimport CustomModal from '@/components/CustomModal';\nimport RatingDialog, { type RatingDialogRepository } from '@/dialogs/RatingDialog';\nimport AdapterDeletionDialog from '@/dialogs/AdapterDeletionDialog';\nimport AdminUtils from '@/helpers/AdminUtils';\nimport AdapterInstallDialog, {\n type AdapterInstallDialogState,\n type AdapterRating,\n type AdapterRatingInfo,\n type AdapterInstallDialogProps,\n type AdaptersContext,\n} from '@/components/Adapters/AdapterInstallDialog';\nimport AutoUpgradeConfigDialog, { ICONS } from '@/dialogs/AutoUpgradeConfigDialog';\n\nimport IsVisible from '../IsVisible';\nimport { extractUrlLink, type RepoInfo } from './Utils';\nimport sentryIcon from '../../assets/sentry.svg';\n\nexport const genericStyles: Record<string, any> = {\n hidden: {\n display: 'none',\n },\n buttonUpdate: {\n border: '1px solid',\n padding: '0px 7px',\n borderRadius: 5,\n display: 'flex',\n alignItems: 'center',\n cursor: 'pointer',\n transition: 'background 0.5s',\n '&:hover': {\n background: '#00800026',\n },\n },\n\n buttonUpdateIcon: {\n height: 20,\n width: 20,\n marginRight: 10,\n },\n\n classPoll: {\n color: 'orange',\n },\n classPush: {\n color: 'green',\n },\n classAssumption: {\n color: 'red',\n transform: 'rotate(90deg)',\n },\n marginLeft5: {\n marginLeft: 5,\n },\n ratingSet: {\n cursor: 'pointer',\n },\n sentry: {\n width: 21,\n height: 21,\n objectFit: 'fill',\n marginTop: 3,\n filter: 'invert(0%) sepia(90%) saturate(1267%) hue-rotate(-260deg) brightness(99%) contrast(97%)',\n },\n tooltip: {\n pointerEvents: 'none',\n },\n wrongDependencies: {\n color: red[700],\n },\n updateAvailable: {\n color: green[700],\n },\n currentVersion: (theme: IobTheme) => ({\n cursor: 'pointer',\n mb: '6px',\n mr: '8px',\n mt: '4px',\n '&:hover': {\n background: theme.palette.primary.dark,\n },\n }),\n header: (theme: IobTheme) => ({\n fontWeight: 'bold',\n background: theme.palette.secondary.main,\n p: '10px',\n }),\n modalDialog: {\n height: 'calc(100% - 64px)',\n overflowY: 'hidden',\n },\n currentVersionText: (theme: IobTheme) => ({\n color: theme.palette.mode === 'dark' ? '#a3ffa3' : '#009800',\n fontWeight: 'bold',\n marginLeft: '4px',\n }),\n repoStableVersionText: (theme: IobTheme) => ({\n color: theme.palette.mode === 'dark' ? '#8dff7a' : '#2b9800',\n fontWeight: 'bold',\n marginLeft: '4px',\n }),\n repoLatestVersionText: (theme: IobTheme) => ({\n color: theme.palette.mode === 'dark' ? '#a3fcff' : '#005498',\n fontWeight: 'bold',\n marginLeft: '4px',\n }),\n rating: {},\n containerVersion: {},\n containerSpecificVersion: {},\n versionWarn: {\n color: amber[500],\n },\n cardContentFlexBetween: {},\n cardContentFlex: {},\n};\n\nexport type Ratings = { [adapterName: string]: AdapterRating } & { uuid: string };\n\nexport type AdapterCacheEntry = {\n title: string;\n desc: string;\n image: string;\n connectionType: string;\n updateAvailable: boolean;\n rightDependencies: boolean;\n rightOs: boolean;\n sentry: boolean;\n daysAgo: number;\n stat: number;\n daysAgoText: string;\n};\n\nexport interface AdapterGenericProps extends AdapterInstallDialogProps {\n /** adapter name id without 'system.adapter.' */\n adapterName: string;\n /** Same information for every adapter */\n context: AdaptersContext;\n cached: AdapterCacheEntry;\n commandRunning: boolean;\n noTranslation: boolean;\n}\n\nexport interface AdapterGenericState extends AdapterInstallDialogState {\n autoUpgradeDialogOpen: boolean;\n showUpdateDialog: boolean;\n adapterDeletionDialog: boolean;\n adapterInstallSpecificVersion: string;\n showInstallVersion: boolean;\n showSetRating: {\n version: string;\n rating: AdapterRatingInfo;\n } | null;\n}\n\nexport interface ImageProps {\n alt: string;\n style: React.CSSProperties;\n [other: string]: any;\n}\n\nexport default abstract class AdapterGeneric<\n TProps extends AdapterGenericProps,\n TState extends AdapterGenericState,\n> extends AdapterInstallDialog<TProps, TState> {\n protected installedVersion: string = '';\n\n protected abstract styles: Record<string, any>;\n\n public constructor(props: TProps) {\n super(props);\n\n Object.assign(this.state, {\n autoUpgradeDialogOpen: false,\n showUpdateDialog: false,\n adapterDeletionDialog: false,\n adapterInstallSpecificVersion: '',\n showInstallVersion: false,\n showSetRating: null,\n } as TState);\n }\n\n static renderImage(imageProps: ImageProps): JSX.Element {\n const { style, alt, ...other } = imageProps;\n\n const img = style.backgroundImage.substring(5, style.backgroundImage.length - 2);\n\n return (\n <img\n {...other}\n alt={alt}\n src={img}\n onError={e => {\n if (e.target) {\n (e.target as HTMLImageElement).onerror = null;\n (e.target as HTMLImageElement).src = './img/no-image.png';\n }\n }}\n />\n );\n }\n\n renderAddInstanceButton(): JSX.Element {\n const allowAdapterInstall = this.props.context.repository[this.props.adapterName]\n ? this.props.context.repository[this.props.adapterName].allowAdapterInstall\n : true;\n\n return (\n <IsVisible value={allowAdapterInstall}>\n <Tooltip\n title={this.props.context.t('Add instance')}\n slotProps={{ popper: { sx: this.styles.tooltip } }}\n >\n <IconButton\n size=\"small\"\n disabled={this.props.commandRunning}\n style={!this.props.cached.rightOs ? this.styles.hidden : undefined}\n onClick={\n this.props.cached.rightOs\n ? () => this.onAddInstance(this.props.adapterName, this.props.context)\n : undefined\n }\n >\n <AddIcon />\n </IconButton>\n </Tooltip>\n </IsVisible>\n );\n }\n\n renderAutoUpgradeButton(): JSX.Element | null {\n const adapterObj = this.props.context.hostAdapterWorker.getObject(this.props.adapterName);\n if (!adapterObj) {\n return <div style={{ width: 34, height: 34, display: 'inline-block' }} />;\n }\n\n // 'none' | 'patch' | 'minor' | 'major'\n const autoUpgrade: ioBroker.AutoUpgradePolicy = adapterObj.common?.automaticUpgrade;\n\n return (\n <Tooltip\n title={this.props.context.t('Automatic Upgrade Policy') + (autoUpgrade ? `: ${autoUpgrade}` : '')}\n slotProps={{ popper: { sx: this.styles.tooltip } }}\n >\n <IconButton\n size=\"small\"\n onClick={() => this.setState({ autoUpgradeDialogOpen: true, showDialog: true })}\n >\n {!autoUpgrade || autoUpgrade === 'none' ? <KeyboardArrowUp /> : ICONS[autoUpgrade]}\n </IconButton>\n </Tooltip>\n );\n }\n\n renderReadmeButton(): JSX.Element {\n const allowAdapterReadme = this.props.context.repository[this.props.adapterName]\n ? this.props.context.repository[this.props.adapterName].allowAdapterReadme\n : true;\n\n return (\n <IsVisible value={allowAdapterReadme}>\n <Tooltip\n title={this.props.context.t('Readme')}\n slotProps={{ popper: { sx: this.styles.tooltip } }}\n >\n <IconButton\n size=\"small\"\n onClick={() => this.openInfoDialog()}\n >\n <HelpIcon />\n </IconButton>\n </Tooltip>\n </IsVisible>\n );\n }\n\n renderRating(): JSX.Element | null {\n const allowAdapterRating = this.props.context.repository[this.props.adapterName]\n ? this.props.context.repository[this.props.adapterName].allowAdapterRating\n : true;\n\n if (\n this.props.context.isTileView &&\n (this.props.context.sortPopularFirst || this.props.context.sortRecentlyUpdated)\n ) {\n return null;\n }\n\n const stat = this.props.context.repository[this.props.adapterName].stat;\n if (!stat || allowAdapterRating === false) {\n return null;\n }\n\n return (\n <div\n onClick={() =>\n this.setState({\n showSetRating: {\n version: this.installedVersion,\n rating: this.props.context.repository[this.props.adapterName].rating,\n },\n showDialog: true,\n })\n }\n style={{ ...this.styles.rating, ...this.styles.ratingSet }}\n title={this.props.context.repository[this.props.adapterName].rating?.title}\n >\n <Rating\n name={this.props.adapterName}\n precision={0.5}\n size=\"small\"\n readOnly\n value={this.props.context.repository[this.props.adapterName].rating?.rating?.r || 0}\n />\n </div>\n );\n }\n\n renderConnectionType(): JSX.Element {\n const connectionType = this.props.context.repository[this.props.adapterName]?.connectionType;\n return connectionType === 'cloud' ? (\n <Tooltip\n title={this.props.context.t('Adapter requires the specific cloud access for these devices/service')}\n slotProps={{ popper: { sx: this.styles.tooltip } }}\n >\n <CloudIcon />\n </Tooltip>\n ) : connectionType === 'local' ? (\n <Tooltip\n title={this.props.context.t('Adapter does not use the cloud for these devices/service')}\n slotProps={{ popper: { sx: this.styles.tooltip } }}\n >\n <CloudOffIcon />\n </Tooltip>\n ) : null;\n }\n\n renderDataSource(): JSX.Element | null {\n const dataSource = this.props.context.repository[this.props.adapterName]?.dataSource;\n return dataSource ? (\n <div style={this.styles.marginLeft5}>\n {dataSource === 'poll' ? (\n <Tooltip\n title={this.props.context.t('The device or service will be periodically asked')}\n slotProps={{ popper: { sx: this.styles.tooltip } }}\n >\n <ArrowUpwardIcon style={this.styles.classPoll} />\n </Tooltip>\n ) : dataSource === 'push' ? (\n <Tooltip\n title={this.props.context.t('The device or service delivers the new state actively')}\n slotProps={{ popper: { sx: this.styles.tooltip } }}\n >\n <ArrowDownwardIcon style={this.styles.classPush} />\n </Tooltip>\n ) : dataSource === 'assumption' ? (\n <Tooltip\n slotProps={{ popper: { sx: this.styles.tooltip } }}\n title={this.props.context.t(\n 'Adapter cannot request the exactly device status and the status will be guessed on the last sent command',\n )}\n >\n <RemoveIcon style={this.styles.classAssumption} />\n </Tooltip>\n ) : null}\n </div>\n ) : null;\n }\n\n renderLicenseInfo(): JSX.Element {\n const adapter = this.props.context.repository[this.props.adapterName];\n const link = extractUrlLink(adapter);\n\n return adapter.licenseInformation?.type ? (\n <Link\n href={link}\n target=\"_blank\"\n rel=\"noopener\"\n sx={(theme: IobTheme) => ({\n color: theme.palette.mode === 'dark' ? 'white' : 'black',\n '&:hover': { color: theme.palette.mode === 'dark' ? 'white' : 'black' },\n })}\n >\n {adapter.licenseInformation?.type === 'paid' ? (\n <Tooltip\n title={this.props.context.t('The adapter requires a paid license.')}\n slotProps={{ popper: { sx: this.styles.tooltip } }}\n >\n <MonetizationOn />\n </Tooltip>\n ) : adapter.licenseInformation?.type === 'commercial' ? (\n <Tooltip\n slotProps={{ popper: { sx: this.styles.tooltip } }}\n title={this.props.context.t('The adapter requires a paid license for commercial use.')}\n >\n <MonetizationOn opacity={0.5} />\n </Tooltip>\n ) : adapter.licenseInformation?.type === 'limited' ? (\n <Tooltip\n slotProps={{ popper: { sx: this.styles.tooltip } }}\n title={this.props.context.t('The adapter has a limited functionality without a paid license.')}\n >\n <MonetizationOn opacity={0.5} />\n </Tooltip>\n ) : null}\n </Link>\n ) : null;\n }\n\n renderSentryInfo(): JSX.Element | null {\n const sentry = this.props.context.repository[this.props.adapterName]?.plugins?.sentry;\n\n return sentry ? (\n <div style={this.styles.marginLeft5}>\n <Tooltip\n title=\"sentry\"\n slotProps={{ popper: { sx: this.styles.tooltip } }}\n >\n <CardMedia\n style={this.styles.sentry}\n component=\"img\"\n image={sentryIcon}\n />\n </Tooltip>\n </div>\n ) : null;\n }\n\n renderVersion(): JSX.Element {\n const allowAdapterUpdate = this.props.context.repository[this.props.adapterName]\n ? this.props.context.repository[this.props.adapterName].allowAdapterUpdate\n : true;\n\n return !this.props.commandRunning && this.props.cached.updateAvailable && allowAdapterUpdate !== false ? (\n <Tooltip\n title={this.props.context.t('Update')}\n slotProps={{ popper: { sx: this.styles.tooltip } }}\n >\n <div\n onClick={() => this.setState({ showUpdateDialog: true, showDialog: true })}\n style={{\n ...this.styles.buttonUpdate,\n ...(this.props.cached.rightDependencies ? this.styles.updateAvailable : undefined),\n }}\n >\n <IconButton\n style={this.styles.buttonUpdateIcon}\n size=\"small\"\n >\n <RefreshIcon />\n </IconButton>\n {this.props.context.repository[this.props.adapterName].version}\n </div>\n </Tooltip>\n ) : (\n <span style={this.props.cached.rightDependencies ? undefined : this.styles.wrongDependencies}>\n {this.props.context.repository[this.props.adapterName].version}\n </span>\n );\n }\n\n renderInstalledVersion(isRow?: boolean): JSX.Element | null {\n const installed = this.props.context.installed[this.props.adapterName];\n const installedFrom = installed?.installedFrom;\n const { adapterName } = this.props;\n\n if (isRow) {\n const enabledCount = installed?.enabled;\n const installedCount = installed?.count;\n\n return (\n <Grid2\n container\n wrap=\"nowrap\"\n alignItems=\"center\"\n spacing={1}\n >\n {this.installedVersion ? (\n <Grid2>\n {this.installedVersion +\n (installedCount\n ? ` (${installedCount}${installedCount !== enabledCount ? '~' : ''})`\n : '')}\n </Grid2>\n ) : null}\n {installedFrom && !installedFrom.startsWith(`iobroker.${adapterName}@`) && (\n <Grid2 container>\n <Tooltip\n title={this.props.context.t('Non-NPM-Version: ') + installedFrom}\n slotProps={{ popper: { sx: this.styles.tooltip } }}\n >\n <GitHubIcon\n fontSize=\"small\"\n style={this.styles.versionWarn}\n />\n </Tooltip>\n </Grid2>\n )}\n </Grid2>\n );\n }\n\n return this.installedVersion ? (\n <Typography\n component=\"span\"\n style={this.styles.cardContentFlexBetween}\n >\n <div>{this.props.context.t('Installed version')}:</div>\n <div style={this.styles.cardContentFlex}>\n {installedFrom && !installedFrom.startsWith(`iobroker.${adapterName}@`) && (\n <Tooltip\n title={this.props.context.t('Non-NPM-Version: ') + installedFrom}\n slotProps={{ popper: { sx: this.styles.tooltip } }}\n >\n <GitHubIcon\n fontSize=\"small\"\n style={this.styles.versionWarn}\n />\n </Tooltip>\n )}\n {this.installedVersion}\n </div>\n </Typography>\n ) : null;\n }\n\n renderUploadButton(): JSX.Element | null {\n return this.props.context.expertMode && this.installedVersion ? (\n <Tooltip\n title={this.props.context.t('Upload')}\n slotProps={{ popper: { sx: this.styles.tooltip } }}\n >\n <IconButton\n size=\"small\"\n disabled={this.props.commandRunning}\n onClick={() => this.onUpload()}\n >\n <PublishIcon />\n </IconButton>\n </Tooltip>\n ) : null;\n }\n\n renderDeleteButton(): JSX.Element {\n const allowAdapterDelete = this.props.context.repository[this.props.adapterName]\n ? this.props.context.repository[this.props.adapterName].allowAdapterDelete\n : true;\n\n return (\n <IsVisible value={!!this.installedVersion && allowAdapterDelete}>\n <Tooltip\n title={this.props.context.t('Delete adapter')}\n slotProps={{ popper: { sx: this.styles.tooltip } }}\n >\n <IconButton\n size=\"small\"\n disabled={this.props.commandRunning}\n onClick={() => this.setState({ adapterDeletionDialog: true, showDialog: true })}\n >\n <DeleteForeverIcon />\n </IconButton>\n </Tooltip>\n </IsVisible>\n );\n }\n\n renderInstallSpecificVersionButton(): JSX.Element | null {\n const allowAdapterUpdate = this.props.context.repository[this.props.adapterName]\n ? this.props.context.repository[this.props.adapterName].allowAdapterUpdate\n : true;\n\n return (\n this.props.context.expertMode &&\n allowAdapterUpdate !== false &&\n this.installedVersion && (\n <Tooltip\n title={this.props.context.t('Install a specific version')}\n slotProps={{ popper: { sx: this.styles.tooltip } }}\n >\n <IconButton\n disabled={this.props.commandRunning}\n size=\"small\"\n onClick={() => this.setState({ showInstallVersion: true, showDialog: true })}\n >\n <AddToPhotosIcon />\n </IconButton>\n </Tooltip>\n )\n );\n }\n\n renderRebuildButton(): JSX.Element | null {\n if (!this.props.context.expertMode || !this.installedVersion) {\n return null;\n }\n return (\n <Tooltip title={this.props.context.t('Rebuild')}>\n <IconButton\n size=\"small\"\n disabled={this.props.commandRunning}\n onClick={() => this.rebuild()}\n >\n <BuildIcon />\n </IconButton>\n </Tooltip>\n );\n }\n\n renderAutoUpdateDialog(): JSX.Element | null {\n if (!this.state.autoUpgradeDialogOpen) {\n return null;\n }\n return (\n <AutoUpgradeConfigDialog\n onClose={() => this.setState({ autoUpgradeDialogOpen: false, showDialog: false })}\n adapter={this.props.adapterName}\n hostId={this.props.context.adminHost}\n socket={this.props.context.socket}\n />\n );\n }\n\n renderUpdateAdapterDialog(): JSX.Element | null {\n if (!this.state.showUpdateDialog) {\n return null;\n }\n\n this.installedVersion = this.props.context.installed[this.props.adapterName]?.version;\n\n return (\n <AdapterUpdateDialog\n adapter={this.props.adapterName}\n adapterObject={this.props.context.repository[this.props.adapterName]}\n t={this.props.context.t}\n dependencies={AdapterInstallDialog.getDependencies(this.props.adapterName, this.props.context)}\n rightDependencies={this.props.context.rightDependenciesFunc(this.props.adapterName)}\n news={this.getNews()}\n toggleTranslation={this.props.context.toggleTranslation}\n noTranslation={this.props.noTranslation}\n installedVersion={this.installedVersion}\n onUpdate={version =>\n this.setState({ showUpdateDialog: false, showDialog: false }, () => this.update(version))\n }\n isStable={(this.props.context.repository._repoInfo as unknown as RepoInfo).stable}\n onIgnore={ignoreVersion =>\n this.setState({ showUpdateDialog: false, showDialog: false }, () =>\n this.props.context.socket\n .getObject(`system.adapter.${this.props.adapterName}`)\n .then(\n (\n obj:\n | ioBroker.AdapterObject\n | ioBroker.StateObject\n | ioBroker.InstanceObject\n | null\n | undefined,\n ): void => {\n if (obj?.common) {\n (obj.common as ioBroker.AdapterCommon).ignoreVersion = ignoreVersion;\n this.props.context.socket\n .setObject(obj._id, obj)\n .catch((error: unknown): void =>\n window.alert(`Cannot write object: ${error as Error}`),\n );\n } else {\n window.alert(`Adapter \"${this.props.adapterName}\" does not exist!`);\n }\n },\n )\n .then(() => this.props.context.removeUpdateAvailable(this.props.adapterName)),\n )\n }\n onClose={() => this.setState({ showUpdateDialog: false, showDialog: false })}\n instances={this.props.context.compactInstances}\n theme={this.props.context.theme}\n />\n );\n }\n\n static formatNews(news: string): JSX.Element[] {\n const lines = (news || '')\n .toString()\n .split('\\n')\n .map(line =>\n line.trim().replace(/^\\*+/, '').replace(/^-/, '').replace(/\\*+$/, '').replace(/\\r/g, '').trim(),\n )\n .filter(line => line);\n\n return lines.map((line, index) => (\n <div\n style={{}}\n key={index}\n >\n <span>- </span>\n {line}\n </div>\n ));\n }\n\n renderAdapterInstallVersion(): JSX.Element | null {\n if (!this.state.showInstallVersion) {\n return null;\n }\n let stableVersion: string;\n let latestVersion: string;\n const repoInfo: RepoInfo = this.props.context.repository._repoInfo as unknown as RepoInfo;\n if (repoInfo?.stable) {\n stableVersion = this.props.context.repository[this.props.adapterName]?.version;\n latestVersion = this.props.context.repository[this.props.adapterName]?.latestVersion;\n } else {\n stableVersion = this.props.context.repository[this.props.adapterName]?.stable;\n latestVersion = this.props.context.repository[this.props.adapterName]?.version;\n }\n\n return (\n <CustomModal\n title={this.props.context.t('Please select specific version of %s', this.props.adapterName)}\n applyButton={false}\n onClose={() =>\n this.setState({\n showInstallVersion: false,\n adapterInstallSpecificVersion: '',\n showDialog: false,\n })\n }\n theme={this.props.context.theme}\n toggleTranslation={this.props.context.toggleTranslation}\n noTranslation={this.props.noTranslation}\n >\n <div style={{ height: '100%', overflowY: 'hidden' }}>\n <div style={this.styles.containerSpecificVersion}>\n <div style={{ display: 'flex', alignItems: 'center', gap: 8 }}>\n <TextField\n variant=\"standard\"\n style={{ flexGrow: 1 }}\n label={this.props.context.t('Enter version manually')}\n value={this.state.adapterInstallSpecificVersion}\n onChange={event => this.setState({ adapterInstallSpecificVersion: event.target.value })}\n slotProps={{\n input: {\n endAdornment: this.state.adapterInstallSpecificVersion ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() => this.setState({ adapterInstallSpecificVersion: '' })}\n >\n <CloseIcon />\n </IconButton>\n </InputAdornment>\n ) : null,\n },\n }}\n />\n <Button\n color=\"primary\"\n variant=\"contained\"\n size=\"small\"\n disabled={!this.state.adapterInstallSpecificVersion}\n onClick={() => {\n if (this.state.adapterInstallSpecificVersion) {\n void this.update(this.state.adapterInstallSpecificVersion);\n this.setState({\n showInstallVersion: false,\n adapterInstallSpecificVersion: '',\n showDialog: false,\n });\n }\n }}\n >\n {this.props.context.t('Install')}\n </Button>\n </div>\n <Tooltip\n title={this.props.context.t('npmjs.com')}\n slotProps={{ popper: { sx: this.styles.tooltip } }}\n >\n <IconButton\n size=\"small\"\n onClick={() => {\n window\n .open(\n `https://www.npmjs.com/package/iobroker.${this.props.adapterName}?activeTab=versions`,\n this.props.adapterName,\n )\n .focus();\n }}\n >\n <LinkIcon />\n </IconButton>\n </Tooltip>\n </div>\n <Box\n component=\"div\"\n sx={this.styles.header}\n >\n {this.props.context.t('Or select from the list')}\n </Box>\n <div style={{ ...this.styles.containerVersion, height: 'calc(100% - 122px)', overflowY: 'auto' }}>\n {this.getNews(true).map(({ version, news }) => (\n <Card\n variant=\"outlined\"\n key={version}\n sx={this.styles.currentVersion}\n onClick={() => {\n void this.update(version);\n this.setState({ showInstallVersion: false, showDialog: false });\n }}\n >\n <CardContent>\n <Typography\n sx={Utils.getStyle(\n this.props.context.theme,\n this.installedVersion === version && this.styles.currentVersionText,\n { fontSize: 16, fontWeight: 'bold' },\n )}\n color=\"text.secondary\"\n gutterBottom\n >\n {version}\n {this.installedVersion === version ? (\n <Box\n component=\"span\"\n sx={this.styles.currentVersionText}\n >{`(${this.props.context.t('current')})`}</Box>\n ) : null}\n {latestVersion === version ? (\n <Box\n component=\"span\"\n sx={this.styles.repoLatestVersionText}\n >\n (latest)\n </Box>\n ) : null}\n {stableVersion === version ? (\n <Box\n component=\"span\"\n sx={this.styles.repoStableVersionText}\n >{`(${this.props.context.t('stable')})`}</Box>\n ) : null}\n </Typography>\n <Typography\n variant=\"body2\"\n style={{ opacity: 0.7 }}\n >\n {AdapterGeneric.formatNews(news)}\n </Typography>\n </CardContent>\n </Card>\n ))}\n </div>\n </div>\n </CustomModal>\n );\n }\n\n renderSetRatingDialog(): JSX.Element | null {\n if (!this.state.showSetRating) {\n return null;\n }\n return (\n <RatingDialog\n t={this.props.context.t}\n lang={this.props.context.lang}\n version={this.state.showSetRating.version}\n adapter={this.props.adapterName}\n currentRating={this.state.showSetRating.rating}\n onClose={(update: RatingDialogRepository) => {\n if (update) {\n this.props.context.updateRating(this.props.adapterName, update);\n }\n this.setState({ showSetRating: null, showDialog: false });\n }}\n uuid={this.props.context.uuid}\n />\n );\n }\n\n renderAdapterDeletionDialog(): JSX.Element | null {\n if (!this.state.adapterDeletionDialog) {\n return null;\n }\n return (\n <AdapterDeletionDialog\n adapter={this.props.adapterName}\n socket={this.props.context.socket}\n t={this.props.context.t}\n onClick={deleteCustom => this.delete(deleteCustom)}\n onClose={() => this.setState({ adapterDeletionDialog: false, showDialog: false })}\n />\n );\n }\n\n /**\n * Open adapter readme or docs\n */\n openInfoDialog(): void {\n const adapter = this.props.context.repository[this.props.adapterName];\n const lang = adapter.docs?.[this.props.context.lang] ? this.props.context.lang : 'en';\n\n window.open(AdminUtils.getDocsLinkForAdapter({ lang, adapterName: this.props.adapterName }), 'help');\n }\n\n getNews(all = false): { version: string; news: string }[] {\n const adapter = this.props.context.repository[this.props.adapterName];\n const installed = this.props.context.installed[this.props.adapterName];\n const news: { version: string; news: string }[] = [];\n\n if (installed && adapter?.news) {\n Object.keys(adapter.news).forEach(version => {\n try {\n if (semver.gt(version, installed.version) || all) {\n let text: string;\n if (typeof adapter.news[version] === 'object') {\n text = this.props.noTranslation\n ? adapter.news[version].en\n : adapter.news[version][this.props.context.lang] || adapter.news[version].en;\n } else {\n text = adapter.news[version] as any as string;\n }\n\n news.push({\n version,\n news: text,\n });\n }\n } catch {\n // ignore it\n console.warn(\n `[ADAPTERS] Cannot compare \"${version}\" and \"${installed.version}\" (${this.props.adapterName})`,\n );\n }\n });\n }\n\n return news;\n }\n\n onUpload(): void {\n const adapter = this.props.context.repository[this.props.adapterName];\n const url = extractUrlLink(adapter);\n const licenseType = adapter.licenseInformation?.license || adapter.license;\n\n if (licenseType !== 'MIT') {\n this.setState({\n showLicenseDialog: {\n url,\n upload: true,\n adapterName: this.props.adapterName,\n licenseType,\n },\n showDialog: true,\n });\n } else {\n AdapterInstallDialog.upload(this.props.adapterName, this.props.context);\n }\n }\n\n delete(deleteCustom?: boolean): void {\n this.props.context.executeCommand(\n `del ${this.props.adapterName}${deleteCustom ? ' --custom' : ''}${this.props.context.expertMode ? ' --debug' : ''}`,\n );\n }\n\n async update(version: string): Promise<void> {\n if (\n this.props.adapterName === 'admin' &&\n this.props.context.adminHost === this.props.context.currentHost &&\n (await this.props.context.socket.checkFeatureSupported('ADAPTER_WEBSERVER_UPGRADE'))\n ) {\n this.props.context.setAdminUpgradeTo(version);\n return;\n }\n\n this.props.context.executeCommand(\n `upgrade ${this.props.adapterName}@${version}${this.props.context.expertMode ? ' --debug' : ''}`,\n );\n }\n\n rebuild(): void {\n this.props.context.executeCommand(\n `rebuild ${this.props.adapterName}${this.props.context.expertMode ? ' --debug' : ''}`,\n );\n }\n\n renderDialogs(): JSX.Element | null {\n if (!this.state.showDialog) {\n return null;\n }\n\n return (\n <>\n {this.renderAddInstanceDialog(this.props.context)}\n {this.renderLicenseDialog(this.props.context)}\n {this.renderUpdateAdapterDialog()}\n {this.renderAdapterInstallVersion()}\n {this.renderSetRatingDialog()}\n {this.renderAdapterDeletionDialog()}\n {this.renderAutoUpdateDialog()}\n </>\n );\n }\n}\n","import React, { type JSX } from 'react';\n\nimport { Box, Card, CardContent, CardMedia, Fab, Tooltip, Typography } from '@mui/material';\n\nimport { MoreVert as MoreVertIcon } from '@mui/icons-material';\nimport { amber } from '@mui/material/colors';\n\nimport { type IobTheme, Utils } from '@iobroker/adapter-react-v5';\n\nimport IsVisible from '../IsVisible';\nimport AdapterGeneric, {\n type AdapterGenericProps,\n type AdapterGenericState,\n type ImageProps,\n genericStyles,\n} from './AdapterGeneric';\n\nconst boxShadow = '0 2px 2px 0 rgba(0, 0, 0, .14),0 3px 1px -2px rgba(0, 0, 0, .12),0 1px 5px 0 rgba(0, 0, 0, .2)';\nconst boxShadowHover = '0 8px 17px 0 rgba(0, 0, 0, .2),0 6px 20px 0 rgba(0, 0, 0, .19)';\n\nconst styles: Record<string, any> = {\n ...genericStyles,\n type: {\n color: 'tile',\n },\n root: (theme: IobTheme) => ({\n position: 'relative',\n m: '10px',\n width: 300,\n minHeight: 200,\n background: theme.palette.background.default,\n boxShadow,\n display: 'flex',\n flexDirection: 'column',\n transition: 'box-shadow 0.5s',\n '&:hover': {\n boxShadow: boxShadowHover,\n },\n }),\n imageBlock: (theme: IobTheme) => ({\n background: theme.palette.mode === 'dark' ? '#848484' : '#c0c0c0',\n minHeight: 60,\n display: 'flex',\n padding: '0 10px 0 10px',\n position: 'relative',\n justifyContent: 'space-between',\n color: '#000',\n }),\n img: {\n width: 45,\n height: 45,\n margin: 'auto 0',\n position: 'relative',\n '&:after': {\n content: '\"\"',\n position: 'absolute',\n zIndex: 2,\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n background: 'url(\"img/no-image.png\") 100% 100% no-repeat',\n backgroundSize: 'cover',\n backgroundColor: '#fff',\n },\n },\n installed: {\n background: '#77c7ff8c',\n },\n update: {\n background: '#10ff006b',\n },\n fab: {\n position: 'absolute',\n bottom: -20,\n width: 40,\n height: 40,\n right: 20,\n },\n greenText: (theme: IobTheme) => ({\n color: theme.palette.success.dark,\n }),\n collapse: {\n height: '100%',\n backgroundColor: 'silver',\n position: 'absolute',\n width: '100%',\n zIndex: 3,\n marginTop: 'auto',\n bottom: 0,\n // transition: 'height 0.3s',\n justifyContent: 'space-between',\n display: 'flex',\n flexDirection: 'column',\n },\n close: {\n width: 20,\n height: 20,\n opacity: 0.9,\n cursor: 'pointer',\n position: 'relative',\n marginLeft: 'auto',\n mb: '10px',\n transition: 'all 0.6s ease',\n '&:hover': {\n transform: 'rotate(90deg)',\n },\n '&:before': {\n position: 'absolute',\n left: 9,\n content: '\"\"',\n height: 20,\n width: 3,\n backgroundColor: 'rgba(0, 0, 0, 0.54)',\n transform: 'rotate(45deg)',\n },\n '&:after': {\n position: 'absolute',\n left: 9,\n content: '\"\"',\n height: 20,\n width: 3,\n backgroundColor: 'rgba(0, 0, 0, 0.54)',\n transform: 'rotate(-45deg)',\n },\n },\n footerBlock: (theme: IobTheme) => ({\n background: theme.palette.background.default,\n p: '10px',\n display: 'flex',\n justifyContent: 'space-between',\n }),\n versionDate: {\n alignSelf: 'center',\n },\n adapter: (theme: IobTheme) => ({\n width: '100%',\n fontWeight: 'bold',\n fontSize: 16,\n verticalAlign: 'middle',\n pl: 1,\n pt: 2,\n color: theme.palette.mode === 'dark' ? '#333' : '#333',\n }),\n adapterWithAgo: {\n width: 'calc(100% - 145px)',\n },\n description: (theme: IobTheme) => ({\n color: theme.palette.mode === 'dark' ? '#222' : 'inherit',\n }),\n\n cardContent: {\n overflow: 'auto',\n },\n cardContentDiv: {\n position: 'sticky',\n right: 0,\n top: 0,\n background: 'silver',\n },\n cardContentFlex: {\n display: 'flex',\n },\n cardContentFlexBetween: {\n display: 'flex',\n justifyContent: 'space-between',\n },\n cardContent2: {\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'space-between',\n },\n cardMargin10: {\n marginTop: 10,\n },\n availableVersion: {\n display: 'flex',\n justifyContent: 'space-between',\n },\n curdContentFlexCenter: {\n display: 'flex',\n alignItems: 'center',\n },\n\n versionWarn: {\n color: amber[500],\n marginRight: 5,\n },\n rating: {\n marginTop: 20,\n },\n};\n\ninterface AdapterTileState extends AdapterGenericState {\n openCollapse: boolean;\n}\n\nclass AdapterTile extends AdapterGeneric<AdapterGenericProps, AdapterTileState> {\n protected styles: Record<string, any> = styles;\n\n constructor(props: AdapterGenericProps) {\n super(props);\n\n Object.assign(this.state, {\n openCollapse: false,\n });\n }\n\n renderInfoCard(): JSX.Element {\n return (\n <div style={this.styles.collapse}>\n <CardContent style={this.styles.cardContent}>\n <div style={this.styles.cardContentDiv}>\n <Box\n component=\"div\"\n sx={this.styles.close}\n onClick={() => this.setState({ openCollapse: !this.state.openCollapse })}\n />\n </div>\n <Typography\n gutterBottom\n component=\"span\"\n variant=\"body2\"\n sx={this.styles.description}\n >\n {this.props.cached.desc}\n </Typography>\n </CardContent>\n <Box\n component=\"div\"\n sx={this.styles.footerBlock}\n >\n {this.renderAddInstanceButton()}\n <div style={this.styles.cardContentFlex}>\n {this.renderAutoUpgradeButton()}\n {this.renderReadmeButton()}\n {this.renderUploadButton()}\n {this.renderDeleteButton()}\n {this.renderInstallSpecificVersionButton()}\n </div>\n </Box>\n </div>\n );\n }\n\n renderCardMedia(): JSX.Element {\n const available = this.props.context.repository[this.props.adapterName];\n const availableVersion = available?.version;\n\n return (\n <Box\n component=\"div\"\n sx={Utils.getStyle(\n this.props.context.theme,\n this.styles.imageBlock,\n this.installedVersion && this.styles.installed,\n this.installedVersion &&\n availableVersion &&\n this.installedVersion !== availableVersion &&\n this.props.cached.updateAvailable &&\n this.styles.update,\n )}\n >\n <CardMedia\n sx={this.styles.img}\n component={(props: ImageProps) => AdapterGeneric.renderImage(props)}\n src={this.props.cached.image || 'img/no-image.png'}\n image={this.props.cached.image || 'img/no-image.png'}\n />\n <Box\n component=\"div\"\n sx={Utils.getStyle(\n this.props.context.theme,\n this.styles.adapter,\n (available.stat || this.props.context.sortRecentlyUpdated) && this.styles.adapterWithAgo,\n )}\n >\n {this.props.adapterName}\n </Box>\n {this.props.context.sortPopularFirst ? (\n <div style={this.styles.versionDate}>{available.stat}</div>\n ) : null}\n {this.props.context.sortRecentlyUpdated ? (\n <div style={this.styles.versionDate}>{this.props.cached.daysAgoText}</div>\n ) : null}\n {!this.props.context.sortPopularFirst && !this.props.context.sortRecentlyUpdated\n ? this.renderRating()\n : null}\n {!this.state.openCollapse ? (\n <Tooltip\n title={this.props.context.t('Info')}\n slotProps={{ popper: { sx: { pointerEvents: 'none' } } }}\n >\n <Fab\n onClick={() => this.setState({ openCollapse: !this.state.openCollapse })}\n style={this.styles.fab}\n color=\"primary\"\n aria-label=\"add\"\n >\n <MoreVertIcon />\n </Fab>\n </Tooltip>\n ) : null}\n </Box>\n );\n }\n\n renderCardContent(): JSX.Element {\n const allowAdapterUpdate = this.props.context.repository[this.props.adapterName]\n ? this.props.context.repository[this.props.adapterName].allowAdapterUpdate\n : true;\n const installed = this.props.context.installed[this.props.adapterName];\n\n return (\n <CardContent style={this.styles.cardContent2}>\n <Typography\n gutterBottom\n variant=\"h5\"\n component=\"h5\"\n >\n {this.props.cached.title}\n </Typography>\n <div style={this.styles.cardContentFlex}>\n {this.renderConnectionType()}\n {this.renderDataSource()}\n <div>{this.renderLicenseInfo()}</div>\n {this.renderSentryInfo()}\n </div>\n <div style={this.styles.cardMargin10}>\n {installed?.count ? (\n <Typography\n component=\"span\"\n style={this.styles.cardContentFlexBetween}\n >\n <div>{this.props.context.t('Installed instances')}:</div>\n <div>{installed.count}</div>\n </Typography>\n ) : null}\n <IsVisible value={allowAdapterUpdate}>\n <Typography\n component=\"span\"\n style={this.styles.availableVersion}\n >\n <div>{this.props.context.t('Available version:')}</div>\n <Box\n component=\"div\"\n sx={Utils.getStyle(\n this.props.context.theme,\n this.props.cached.updateAvailable && this.styles.greenText,\n this.styles.curdContentFlexCenter,\n )}\n >\n {this.renderVersion()}\n </Box>\n </Typography>\n </IsVisible>\n {this.renderInstalledVersion()}\n </div>\n </CardContent>\n );\n }\n\n render(): JSX.Element {\n this.installedVersion = this.props.context.installed[this.props.adapterName]?.version;\n\n return (\n <Card sx={this.styles.root}>\n {this.state.openCollapse ? this.renderInfoCard() : null}\n {this.renderCardMedia()}\n {this.renderCardContent()}\n {this.renderDialogs()}\n </Card>\n );\n }\n}\n\nexport default AdapterTile;\n","import React, { type JSX } from 'react';\n\nimport { Avatar, Grid2, TableCell, TableRow, Tooltip } from '@mui/material';\n\nimport AdapterGeneric, {\n type AdapterGenericProps,\n type AdapterGenericState,\n genericStyles,\n} from '@/components/Adapters/AdapterGeneric';\n\nconst styles: Record<string, any> = {\n ...genericStyles,\n type: {\n color: 'line',\n },\n smallAvatar: {\n width: 32,\n height: 32,\n marginLeft: 4,\n },\n paddingNone: {\n padding: '0 !important',\n },\n name: {\n flexWrap: 'nowrap',\n width: 300,\n marginTop: 0,\n },\n flex: {\n display: 'flex',\n },\n nameCell: {\n paddingTop: '0 !important',\n paddingBottom: '0 !important',\n },\n};\n\nclass AdapterRow extends AdapterGeneric<AdapterGenericProps, AdapterGenericState> {\n protected styles: Record<string, any> = styles;\n\n render(): JSX.Element {\n const adapter = this.props.context.repository[this.props.adapterName];\n\n const allowAdapterRating = adapter ? adapter.allowAdapterRating : true;\n\n this.installedVersion = this.props.context.installed[this.props.adapterName]?.version;\n\n return (\n <TableRow hover>\n <TableCell />\n <TableCell>\n <Grid2\n container\n spacing={1}\n alignItems=\"center\"\n style={this.styles.name}\n >\n <Tooltip\n title={this.props.adapterName}\n slotProps={{ popper: { sx: this.styles.tooltip } }}\n >\n <Grid2 style={this.styles.paddingNone}>\n <Avatar\n variant=\"square\"\n alt={this.props.cached.title}\n src={this.props.cached.image}\n style={this.styles.smallAvatar}\n />\n </Grid2>\n </Tooltip>\n {allowAdapterRating !== false ? (\n <Grid2 style={this.styles.nameCell}>\n <div>{this.props.cached.title}</div>\n {this.renderRating()}\n </Grid2>\n ) : (\n <Grid2>{this.props.cached.title}</Grid2>\n )}\n </Grid2>\n </TableCell>\n {!this.props.context.descHidden && (\n <TableCell\n title={this.props.cached.desc}\n style={{ width: 20, wordWrap: 'break-word' }}\n >\n {this.props.cached.desc}\n </TableCell>\n )}\n <TableCell>\n <div style={this.styles.flex}>\n {this.renderConnectionType() || <div style={{ marginLeft: 5, width: 24, height: 24 }} />}\n {this.renderDataSource() || <div style={{ width: 24, height: 24 }} />}\n {this.renderSentryInfo() || <div style={{ width: 24, height: 24 }} />}\n {this.renderLicenseInfo()}\n </div>\n </TableCell>\n <TableCell>{this.renderInstalledVersion(true)}</TableCell>\n <TableCell>\n <Grid2\n container\n alignItems=\"center\"\n >\n {this.renderVersion()}\n </Grid2>\n </TableCell>\n <TableCell style={{ fontSize: 'smaller' }}>\n {adapter?.licenseInformation?.license || adapter?.license}\n </TableCell>\n <TableCell>\n {this.renderAddInstanceButton()}\n {this.renderAutoUpgradeButton()}\n {this.renderReadmeButton()}\n {this.renderUploadButton()}\n {this.renderDeleteButton()}\n {this.renderInstallSpecificVersionButton()}\n {this.renderRebuildButton()}\n </TableCell>\n {this.renderDialogs()}\n </TableRow>\n );\n }\n}\n\nexport default AdapterRow;\n","import React, { Component, Fragment, type JSX } from 'react';\n\nimport {\n Box,\n Button,\n LinearProgress,\n Table,\n TableBody,\n TableCell,\n TableContainer,\n TableHead,\n TableRow,\n Tooltip,\n Typography,\n} from '@mui/material';\n\nimport { Update as UpdateIcon } from '@mui/icons-material';\n\nimport { TabContent } from '@iobroker/adapter-react-v5';\n\nimport type { AdaptersContext } from '@/components/Adapters/AdapterInstallDialog';\nimport AdapterCategoryRow from '@/components/Adapters/AdapterCategoryRow';\nimport AdapterTile from '@/components/Adapters/AdapterTile';\nimport AdapterRow from '@/components/Adapters/AdapterRow';\nimport type { AdapterCacheEntry } from '@/components/Adapters/AdapterGeneric';\nimport { InfoBox } from '@foxriver76/iob-component-lib';\n\nconst BUTTONS_WIDTH = 34 * 7 + 8;\nexport const WIDTHS: Record<string, number> = {\n emptyBlock: 50,\n name: 300,\n connectionType: 120,\n installed: 120,\n available: 120,\n update: 40,\n license: 80,\n install: BUTTONS_WIDTH,\n};\n\nexport const SUM = Object.keys(WIDTHS).reduce((s, i) => s + WIDTHS[i], 0);\n\nconst styles: Record<string, any> = {\n container: {\n height: '100%',\n width: '100%',\n },\n containerNotFullHeight: {\n height: 'calc(100% - 50px)',\n },\n containerFullHeight: {\n height: '100%',\n },\n table: {\n width: '100%',\n tableLayout: 'fixed',\n minWidth: 960,\n '& td': {\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n pt: '2px',\n pb: '2px',\n pr: '4px',\n pl: '4px',\n },\n '& th': {\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n pt: '2px',\n pb: '2px',\n pr: '4px',\n pl: '4px',\n },\n },\n name: {\n flexWrap: 'nowrap',\n width: WIDTHS.name,\n },\n emptyBlock: {\n flexWrap: 'nowrap',\n width: WIDTHS.emptyBlock,\n },\n description: {\n width: `calc(100% - ${SUM + 2}px)`,\n },\n connectionType: {\n width: WIDTHS.connectionType,\n },\n installed: {\n width: WIDTHS.installed,\n },\n available: {\n width: WIDTHS.available,\n paddingRight: 6,\n },\n update: {\n width: WIDTHS.update,\n padding: 0,\n },\n license: {\n width: WIDTHS.license,\n },\n install: {\n width: WIDTHS.install,\n },\n viewModeDiv: {\n display: 'flex',\n flexFlow: 'wrap',\n overflow: 'auto',\n justifyContent: 'center',\n },\n};\n\ninterface AdaptersListProps {\n stableRepo: boolean;\n repoName: string;\n context: AdaptersContext;\n systemConfig: ioBroker.SystemConfigObject;\n tableViewMode: boolean;\n listOfVisibleAdapter: string[] | null;\n categoriesExpanded: Record<string, boolean>;\n oneListView: boolean;\n cachedAdapters: { [adapterName: string]: AdapterCacheEntry } | null;\n categories: {\n name: string;\n translation: string;\n count: number;\n installed: number;\n adapters: string[];\n }[];\n toggleCategory: (category: string) => void;\n clearAllFilters: (onlyUpdate?: boolean) => void;\n update: boolean;\n descWidth: number;\n sortByName: boolean;\n sortPopularFirst: boolean;\n sortRecentlyUpdated: boolean;\n commandRunning: boolean;\n updateListFilter: boolean;\n /** Filter as string */\n searchFilter: string;\n /** Filter: show only installed */\n installedListFilter: number;\n noTranslation: boolean;\n}\n\ninterface AdaptersListState {\n descWidth: number;\n repoName: string;\n systemConfig: boolean;\n tableViewMode: boolean;\n oneListView: boolean;\n categoriesExpanded: string;\n cachedAdapters: number;\n listOfVisibleAdapter: string;\n update: boolean;\n sortByName: boolean;\n sortPopularFirst: boolean;\n sortRecentlyUpdated: boolean;\n renderCounter: number;\n expertMode: boolean;\n commandRunning: boolean;\n noTranslation: boolean;\n}\n\nclass AdaptersList extends Component<AdaptersListProps, AdaptersListState> {\n private lastRenderCounter: number = -1;\n\n constructor(props: AdaptersListProps) {\n super(props);\n\n this.state = {\n descWidth: props.descWidth,\n repoName: props.repoName,\n systemConfig: !!props.systemConfig,\n tableViewMode: props.tableViewMode,\n oneListView: props.oneListView,\n categoriesExpanded: JSON.stringify(props.categoriesExpanded),\n cachedAdapters: props.cachedAdapters ? Object.keys(props.cachedAdapters).length : 0,\n update: props.update,\n sortByName: props.sortByName,\n sortPopularFirst: props.sortPopularFirst,\n sortRecentlyUpdated: props.sortRecentlyUpdated,\n renderCounter: 0,\n listOfVisibleAdapter: JSON.stringify(props.listOfVisibleAdapter),\n expertMode: props.context.expertMode,\n commandRunning: props.commandRunning,\n noTranslation: props.noTranslation,\n };\n }\n\n getRow(adapterName: string, context: AdaptersContext): JSX.Element | null {\n const cached = this.props.cachedAdapters[adapterName];\n if (cached) {\n return (\n <AdapterRow\n context={context}\n key={`adapter-${adapterName}`}\n adapterName={adapterName}\n cached={cached}\n commandRunning={this.state.commandRunning}\n noTranslation={this.state.noTranslation}\n />\n );\n }\n return null;\n }\n\n getRows(context: AdaptersContext): JSX.Element | JSX.Element[] | null {\n if (!this.props.listOfVisibleAdapter) {\n return (\n <TableRow>\n <TableCell colSpan={8}>\n <LinearProgress />\n </TableCell>\n </TableRow>\n );\n }\n\n let count = 0;\n\n let rows: JSX.Element[] = [];\n\n if (this.props.oneListView) {\n for (let i = 0; i < this.props.listOfVisibleAdapter.length; i++) {\n const adapterName = this.props.listOfVisibleAdapter[i];\n\n if (rows.length > 50 && !this.props.context.installed[adapterName]?.version) {\n continue;\n }\n rows.push(this.getRow(adapterName, context));\n }\n count = rows.length;\n\n if (count && this.props.listOfVisibleAdapter.length > rows.length) {\n const rest = this.props.listOfVisibleAdapter.length - rows.length;\n const text =\n rest === 1\n ? this.props.context.t('Filter adapters to see others. There is %s more', 1)\n : this.props.context.t('Filter adapters to see others. There are %s more', rest);\n\n rows.push(\n <TableRow key=\"more\">\n <TableCell\n colSpan={8}\n style={{ fontSize: 20, padding: 20, textAlign: 'center' }}\n >\n {text}\n </TableCell>\n </TableRow>,\n );\n }\n } else {\n rows = this.props.categories.map(category => {\n const showCategory = category.adapters.find(adapterName =>\n this.props.listOfVisibleAdapter.includes(adapterName),\n );\n if (!showCategory) {\n return null;\n }\n const categoryName = category.name;\n const expanded = this.props.categoriesExpanded[categoryName];\n count++;\n\n return (\n <Fragment key={`category-${categoryName} ${category.adapters.length}`}>\n <AdapterCategoryRow\n key={`category-${categoryName}${1}`}\n categoryName={categoryName}\n count={category.count}\n expanded={expanded}\n installedCount={category.installed}\n name={category.translation}\n descHidden={context.descHidden}\n onToggle={() => this.props.toggleCategory(categoryName)}\n t={this.props.context.t}\n />\n\n {expanded &&\n category.adapters.map(adapterName => {\n const item = this.getRow(adapterName, context);\n if (item) {\n count++;\n }\n return item;\n })}\n </Fragment>\n );\n });\n }\n\n if (!count) {\n return !this.props.update ? (\n <tr>\n <td\n colSpan={8}\n style={{ textAlign: 'center' }}\n >\n {this.props.searchFilter || this.props.installedListFilter ? (\n <Button\n variant=\"outlined\"\n title={this.props.context.t('Click to clear all filters')}\n onClick={() => this.props.clearAllFilters()}\n >\n {this.props.context.t('all items are filtered out')}\n </Button>\n ) : null}\n {this.props.updateListFilter && (this.props.searchFilter || this.props.installedListFilter) ? (\n <br />\n ) : null}\n {this.props.updateListFilter ? (\n <Button\n style={{ marginTop: 16 }}\n variant=\"outlined\"\n onClick={() => this.props.clearAllFilters(true)}\n startIcon={<UpdateIcon />}\n >\n {this.props.context.t('Remove filter for updatable adapters')}\n </Button>\n ) : null}\n </td>\n </tr>\n ) : null;\n }\n\n return rows;\n }\n\n getTiles(context: AdaptersContext): JSX.Element | JSX.Element[] {\n if (!this.props.listOfVisibleAdapter) {\n return <LinearProgress />;\n }\n\n if (!this.props.listOfVisibleAdapter.length) {\n return !this.props.update ? (\n <div\n style={{\n width: '100%',\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n alignItems: 'center',\n gap: 16,\n }}\n >\n {this.props.searchFilter || this.props.installedListFilter ? (\n <Tooltip\n title={this.props.context.t('Click to clear all filters')}\n slotProps={{ popper: { sx: { pointerEvents: 'none' } } }}\n >\n <Button\n variant=\"outlined\"\n onClick={() => this.props.clearAllFilters()}\n >\n {this.props.context.t('all items are filtered out')}\n </Button>\n </Tooltip>\n ) : null}\n {this.props.updateListFilter ? (\n <Button\n variant=\"outlined\"\n onClick={() => this.props.clearAllFilters(true)}\n startIcon={<UpdateIcon />}\n >\n {this.props.context.t('Remove filter for updatable adapters')}\n </Button>\n ) : null}\n </div>\n ) : null;\n }\n const items: JSX.Element[] = [];\n\n for (let i = 0; i < this.props.listOfVisibleAdapter.length; i++) {\n const adapterName = this.props.listOfVisibleAdapter[i];\n const cached = this.props.cachedAdapters[adapterName];\n\n if (items.length > 50 && !this.props.context.installed[adapterName]?.version) {\n continue;\n }\n items.push(\n <AdapterTile\n key={`adapter-${adapterName}`}\n context={context}\n adapterName={adapterName}\n cached={cached}\n commandRunning={this.state.commandRunning}\n noTranslation={this.state.noTranslation}\n />,\n );\n }\n if (this.props.listOfVisibleAdapter.length > items.length) {\n items.push(\n <div\n key=\"newLine\"\n style={{\n flexBasis: '100%',\n height: 0,\n }}\n />,\n );\n items.push(\n <div\n key=\"more\"\n style={{ fontSize: 20, margin: 20 }}\n >\n {this.props.context.t(\n 'Filter adapters to see others. There is %s more',\n this.props.listOfVisibleAdapter.length - items.length,\n )}\n </div>,\n );\n }\n\n return items;\n }\n\n renderTileView(stableRepo: boolean, repoName: string, context: AdaptersContext): JSX.Element {\n return (\n <>\n {!stableRepo ? (\n <Box sx={{ marginX: 2, marginTop: 1, width: 'calc(100% - 32px)' }}>\n <InfoBox type={'warning'}>{this.props.context.t('Active repo is \"%s\"', repoName)}</InfoBox>\n </Box>\n ) : null}\n <div style={styles.viewModeDiv}>{this.getTiles(context)}</div>\n </>\n );\n }\n\n renderTableView(stableRepo: boolean, repoName: string, context: AdaptersContext): JSX.Element {\n return (\n <TabContent>\n {!stableRepo ? (\n <Box sx={{ marginX: 2, marginTop: 1, width: 'calc(100% - 32px)' }}>\n <InfoBox type={'warning'}>{this.props.context.t('Active repo is \"%s\"', repoName)}</InfoBox>\n </Box>\n ) : null}\n <TableContainer\n style={{\n ...styles.container,\n ...(!stableRepo ? styles.containerNotFullHeight : styles.containerFullHeight),\n }}\n >\n <Table\n stickyHeader\n size=\"small\"\n sx={styles.table}\n >\n <TableHead>\n <TableRow>\n <TableCell style={styles.emptyBlock}></TableCell>\n <TableCell style={styles.name}>\n <Typography>{this.props.context.t('Name')}</Typography>\n </TableCell>\n {!context.descHidden && (\n <TableCell style={{ ...styles.description, width: this.props.descWidth }}>\n <Typography>{this.props.context.t('Description')}</Typography>\n </TableCell>\n )}\n <TableCell style={styles.connectionType} />\n <TableCell style={styles.installed}>\n <Typography>{this.props.context.t('Installed')}</Typography>\n </TableCell>\n <TableCell style={styles.available}>\n <Typography>{this.props.context.t('Available')}</Typography>\n </TableCell>\n <TableCell style={styles.license}>\n <Typography>{this.props.context.t('License')}</Typography>\n </TableCell>\n <TableCell\n style={{\n ...styles.install,\n width: this.state.expertMode ? BUTTONS_WIDTH : BUTTONS_WIDTH - 34 * 2,\n }}\n >\n <Typography>{this.props.context.t('Install')}</Typography>\n </TableCell>\n </TableRow>\n </TableHead>\n <TableBody>{this.getRows(context)}</TableBody>\n </Table>\n </TableContainer>\n </TabContent>\n );\n }\n\n static getDerivedStateFromProps(\n props: AdaptersListProps,\n state: AdaptersListState,\n ): Partial<AdaptersListState> | null {\n let changed = false;\n // rewrite only if view mode changed, count of adapters in the list\n if (props.descWidth !== state.descWidth) {\n console.log('Render because of descWidth');\n changed = true;\n }\n if (props.repoName !== state.repoName) {\n console.log('Render because of repoName');\n changed = true;\n }\n if (!!props.systemConfig !== state.systemConfig) {\n console.log('Render because of systemConfig');\n changed = true;\n }\n if (props.tableViewMode !== state.tableViewMode) {\n console.log('Render because of tableViewMode');\n changed = true;\n }\n if (props.oneListView !== state.oneListView) {\n console.log('Render because of oneListView');\n changed = true;\n }\n const categoriesExpanded = JSON.stringify(props.categoriesExpanded);\n if (categoriesExpanded !== state.categoriesExpanded) {\n console.log('Render because of categoriesExpanded');\n changed = true;\n }\n const cachedAdapters = props.cachedAdapters ? Object.keys(props.cachedAdapters).length : 0;\n if (cachedAdapters !== state.cachedAdapters) {\n console.log(`Render because of cachedAdapters ${cachedAdapters} <> ${state.cachedAdapters}`);\n changed = true;\n }\n if (props.update !== state.update) {\n console.log('Render because of update');\n changed = true;\n }\n if (props.sortByName !== state.sortByName) {\n console.log('Render because of sortByName');\n changed = true;\n }\n if (props.sortPopularFirst !== state.sortPopularFirst) {\n console.log('Render because of sortPopularFirst');\n changed = true;\n }\n if (props.sortRecentlyUpdated !== state.sortRecentlyUpdated) {\n console.log('Render because of sortRecentlyUpdated');\n changed = true;\n }\n if (props.context.expertMode !== state.expertMode) {\n console.log('Render because of expertMode');\n changed = true;\n }\n const listOfVisibleAdapter = JSON.stringify(props.listOfVisibleAdapter);\n if (listOfVisibleAdapter !== state.listOfVisibleAdapter) {\n console.log('Render because of listOfVisibleAdapter');\n changed = true;\n }\n if (props.commandRunning !== state.commandRunning) {\n console.log('Render because of commandRunning');\n changed = true;\n }\n if (props.noTranslation !== state.noTranslation) {\n console.log('Render because of commandRunning');\n changed = true;\n }\n if (changed) {\n return {\n descWidth: props.descWidth,\n repoName: props.repoName,\n systemConfig: !!props.systemConfig,\n tableViewMode: props.tableViewMode,\n oneListView: props.oneListView,\n categoriesExpanded,\n cachedAdapters,\n update: props.update,\n sortByName: props.sortByName,\n sortPopularFirst: props.sortPopularFirst,\n sortRecentlyUpdated: props.sortRecentlyUpdated,\n listOfVisibleAdapter,\n renderCounter: state.renderCounter + 1,\n expertMode: props.context.expertMode,\n commandRunning: props.commandRunning,\n noTranslation: props.noTranslation,\n };\n }\n\n return null;\n }\n\n shouldComponentUpdate(_nextProps: Readonly<AdaptersListProps>, nextState: Readonly<AdaptersListState>): boolean {\n if (this.lastRenderCounter !== nextState.renderCounter) {\n this.lastRenderCounter = nextState.renderCounter;\n return true;\n }\n\n return false;\n }\n\n render(): JSX.Element {\n if (!this.props.systemConfig?.common?.activeRepo) {\n return <LinearProgress />;\n }\n\n if (this.props.tableViewMode) {\n return this.renderTableView(this.props.stableRepo, this.props.repoName, this.props.context);\n }\n return this.renderTileView(this.props.stableRepo, this.props.repoName, this.props.context);\n }\n}\n\nexport default AdaptersList;\n","import React, { Component, type JSX } from 'react';\n\nimport {\n Button,\n CircularProgress,\n LinearProgress,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n} from '@mui/material';\n\nimport { Close as CloseIcon, Refresh as ReloadIcon } from '@mui/icons-material';\n\nimport { I18n, type AdminConnection, type ThemeType } from '@iobroker/adapter-react-v5';\n\ninterface WebserverParameters {\n useHttps: boolean;\n port: number;\n certPrivateName?: string;\n certPublicName?: string;\n}\n\ninterface ServerResponse {\n running: boolean;\n stderr: string[];\n stdout: string[];\n success?: boolean;\n}\n\ninterface AdminUpdaterProps {\n socket: AdminConnection;\n host: string;\n onClose: () => void;\n version: string;\n adminInstance: string;\n onUpdating: (updating: boolean) => void;\n themeType: ThemeType;\n currentAdminVersion: string;\n}\n\ninterface AdminUpdaterState {\n response: ServerResponse | null;\n error: string | null;\n starting: boolean;\n upAgain: boolean;\n}\n\nclass AdminUpdater extends Component<AdminUpdaterProps, AdminUpdaterState> {\n private updating: boolean;\n\n private interval: ReturnType<typeof setInterval>;\n\n private startTimeout: ReturnType<typeof setTimeout>;\n\n private readonly textareaRef: React.RefObject<HTMLTextAreaElement>;\n\n private readonly link: string;\n\n private oldVersion?: string;\n\n constructor(props: AdminUpdaterProps) {\n super(props);\n\n this.state = {\n response: null,\n error: null,\n /** if upgrade is just starting, we ignore errors in the beginning */\n starting: true,\n /** if admin is up again after upgrade */\n upAgain: false,\n };\n\n this.updating = false;\n\n this.textareaRef = React.createRef();\n\n this.link = `${window.location.protocol}//${window.location.host}/`;\n }\n\n setUpdating(updating: boolean): void {\n if (this.updating !== updating) {\n this.updating = updating;\n this.props.onUpdating(updating);\n }\n }\n\n /**\n * Get the webserver configuration of the current admin instance\n */\n async getWebserverParams(): Promise<WebserverParameters> {\n const obj = await this.props.socket.getObject(`system.adapter.${this.props.adminInstance}`);\n\n return {\n useHttps: obj.native.secure,\n port: obj.native.port,\n certPrivateName: obj.native.certPrivate,\n certPublicName: obj.native.certPublic,\n };\n }\n\n async componentDidMount(): Promise<void> {\n const { certPrivateName, certPublicName, port, useHttps } = await this.getWebserverParams();\n\n // remember the current version\n this.oldVersion = this.props.currentAdminVersion;\n\n await this.props.socket.upgradeAdapterWithWebserver(this.props.host, {\n version: this.props.version,\n adapterName: 'admin',\n port,\n useHttps,\n certPublicName,\n certPrivateName,\n });\n\n this.setUpdating(true);\n this.interval = setInterval(() => this.checkStatus(), 1_000); // poll every second\n\n this.startTimeout = setTimeout(() => {\n this.startTimeout = null;\n this.setState({ starting: false });\n }, 10_000); // give 10 seconds to controller to start update\n }\n\n componentWillUnmount(): void {\n if (this.interval) {\n clearInterval(this.interval);\n this.interval = null;\n }\n\n if (this.startTimeout) {\n clearTimeout(this.startTimeout);\n this.startTimeout = null;\n }\n }\n\n async checkVersion(): Promise<boolean> {\n // Maybe the update already happened. Check the version of the admin\n try {\n const res = await fetch('./version');\n const version = await res.text();\n // if it looks like version \"x.xx.xxx-beta1\" and not equal to the old version\n if (version && version.length < 20 && version !== this.oldVersion) {\n // admin updated\n if (this.interval) {\n clearInterval(this.interval);\n this.interval = null;\n }\n this.setState(\n {\n response: {\n running: false,\n success: true,\n stderr: [],\n stdout: [I18n.t('Version updated to %s', version)],\n },\n upAgain: true,\n error: null,\n },\n () => this.setUpdating(false),\n );\n return true;\n }\n\n // if web server is up, and it sends us the old version number => no error\n return version === this.oldVersion;\n } catch {\n return false;\n }\n }\n\n async checkStatus(): Promise<void> {\n console.log(`Request update status from: ${this.link}`);\n try {\n const res = await fetch(this.link);\n\n // Just for logging purposes\n const plainBody = await res.text();\n console.log(`Received status: ${plainBody}`);\n\n if (plainBody.startsWith('{') && plainBody.endsWith('}')) {\n try {\n const response: ServerResponse = JSON.parse(plainBody) as ServerResponse;\n // sometimes stderr has only one empty string in it\n if (response?.stderr) {\n response.stderr = response.stderr.filter(line => line.trim());\n }\n if (response && !response.running && response.success && response.stdout) {\n response.stdout.push('');\n response.stdout.push('---------------------------------------------------');\n response.stdout.push(I18n.t('%s was successfully updated to %s', 'admin', this.props.version));\n } else if (response?.stdout) {\n response.stdout.unshift('');\n response.stdout.unshift('---------------------------------------------------');\n response.stdout.unshift(I18n.t('updating %s to %s...', 'admin', this.props.version));\n }\n this.setState({ response, error: null }, (): void => {\n if (response && !response.running) {\n if (this.interval) {\n clearInterval(this.interval);\n this.interval = null;\n }\n this.waitForAdapterStart();\n } else if (response?.running) {\n this.setUpdating(true);\n }\n\n // scroll down\n if (this.textareaRef.current) {\n setTimeout(\n () => (this.textareaRef.current.scrollTop = this.textareaRef.current.scrollHeight),\n 100,\n );\n }\n });\n } catch (e) {\n console.error(`Cannot parse response: ${e}`);\n this.setState({ error: plainBody }, () => this.setUpdating(false));\n }\n } else if (!(await this.checkVersion())) {\n // Maybe the update already happened. Check the version of the admin\n console.error(`Response is not JSON: ${plainBody}`);\n }\n } catch (e) {\n if (!this.state.starting) {\n // after 10 seconds, show error\n this.setState({ error: e.toString() }, () => this.setUpdating(false));\n }\n }\n }\n\n /**\n * Wait until admin is up again\n */\n waitForAdapterStart(): void {\n this.interval = setInterval(async () => {\n try {\n await fetch(this.link);\n clearInterval(this.interval);\n this.interval = null;\n this.setState({ upAgain: true });\n } catch {\n // ignore, it will throw until admin is reachable\n }\n }, 1_000);\n }\n\n render(): JSX.Element {\n return (\n <Dialog\n onClose={(e, reason) => {\n if (reason !== 'escapeKeyDown' && reason !== 'backdropClick') {\n this.props.onClose();\n }\n }}\n open={!0}\n maxWidth=\"lg\"\n fullWidth\n >\n <DialogTitle>{I18n.t('Updating %s...', 'admin')}</DialogTitle>\n <DialogContent style={{ height: 400, padding: '0 20px', overflow: 'hidden' }}>\n {(!this.state.response || this.state.response.running) && !this.state.error ? (\n <LinearProgress />\n ) : null}\n {this.state.response || this.state.error ? (\n <textarea\n ref={this.textareaRef}\n style={{\n width: '100%',\n height: '100%',\n resize: 'none',\n background: this.props.themeType === 'dark' ? '#000' : '#fff',\n color: this.props.themeType === 'dark' ? '#EEE' : '#111',\n boxSizing: 'border-box',\n fontFamily:\n 'Consolas,Monaco,Lucida Console,Liberation Mono,DejaVu Sans Mono,Bitstream Vera Sans Mono,Courier New, monospace',\n border: this.state.response?.success\n ? '2px solid green'\n : this.state.error ||\n (this.state.response &&\n !this.state.response.running &&\n !this.state.response.success)\n ? '2px solid red'\n : undefined,\n }}\n value={\n this.state.error\n ? this.state.error\n : this.state.response.stderr && this.state.response.stderr.length\n ? this.state.response.stderr.join('\\n')\n : this.state.response.stdout.join('\\n')\n }\n readOnly\n />\n ) : null}\n </DialogContent>\n <DialogActions>\n <Button\n // loading={this.state.response?.success && !this.state.upAgain}\n variant=\"contained\"\n disabled={this.state.starting || (!this.state.error && !this.state.upAgain)}\n onClick={() => {\n if (this.state.response?.success) {\n window.location.reload();\n }\n this.props.onClose();\n }}\n color={this.state.response?.success ? 'primary' : 'grey'}\n startIcon={this.state.response?.success ? <ReloadIcon /> : <CloseIcon />}\n >\n {this.state.response?.success && !this.state.upAgain ? (\n <CircularProgress />\n ) : this.state.response?.success ? (\n I18n.t('Reload')\n ) : (\n I18n.t('Close')\n )}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n}\n\nexport default AdminUpdater;\n","import React, { createRef, type JSX } from 'react';\nimport semver from 'semver';\n\nimport {\n Grid2,\n Button,\n IconButton,\n LinearProgress,\n TextField,\n Tooltip,\n InputAdornment,\n DialogTitle,\n DialogContent,\n DialogActions,\n Dialog,\n Box,\n} from '@mui/material';\n\nimport {\n Folder as FolderIcon,\n FolderOpen as FolderOpenIcon,\n Refresh as RefreshIcon,\n List as ListIcon,\n ViewList as ViewListIcon,\n ViewModule as ViewModuleIcon,\n Update as UpdateIcon,\n Star as StarIcon,\n Close as CloseIcon,\n} from '@mui/icons-material';\nimport { FaGithub as GithubIcon } from 'react-icons/fa';\n\nimport CustomSelectButton from '@/components/CustomSelectButton';\nimport AdaptersUpdaterDialog from '@/dialogs/AdaptersUpdaterDialog';\nimport SlowConnectionWarningDialog, { SlowConnectionWarningDialogClass } from '@/dialogs/SlowConnectionWarningDialog';\nimport IsVisible from '@/components/IsVisible';\nimport AdminUtils from '@/helpers/AdminUtils';\nimport {\n TabHeader,\n type AdminConnection,\n type IobTheme,\n type ThemeType,\n type Translate,\n TabContainer,\n Utils,\n} from '@iobroker/adapter-react-v5';\nimport type { AdaptersWorker, AdapterEvent } from '@/Workers/AdaptersWorker';\nimport type { InstancesWorker, InstanceEvent } from '@/Workers/InstancesWorker';\nimport { HostAdapterWorker, type HostAdapterEvent } from '@/Workers/HostAdapterWorker';\nimport type { CompactInstanceInfo } from '@/dialogs/AdapterUpdateDialog';\nimport type { RepoAdapterObject } from '@/components/Adapters/Utils';\n\nimport type { Ratings, AdapterCacheEntry } from '@/components/Adapters/AdapterGeneric';\nimport type { HostsWorker } from '@/Workers/HostsWorker';\nimport GitHubInstallDialog from '@/dialogs/GitHubInstallDialog';\nimport AdapterInstallDialog, {\n type AdapterRatingInfo,\n type InstalledInfo,\n type AdaptersContext,\n type AdapterInstallDialogState, AdapterInstallDialogProps,\n} from '@/components/Adapters/AdapterInstallDialog';\nimport AdaptersList, { SUM } from '@/components/Adapters/AdaptersList';\nimport type { AdminGuiConfig } from '@/types';\nimport type { RatingDialogRepository } from '@/dialogs/RatingDialog';\nimport AdminUpdater from '@/dialogs/AdminUpdater';\n\ntype DockerInformation =\n | {\n /** If it is a Docker installation */\n isDocker: boolean;\n /** If it is the official Docker image */\n isOfficial: true;\n /** Semver string for official Docker image */\n officialVersion: string;\n }\n | {\n /** If it is a Docker installation */\n isDocker: boolean;\n /** If it is the official Docker image */\n isOfficial: false;\n };\ntype Platform =\n | 'aix'\n | 'android'\n | 'darwin'\n | 'freebsd'\n | 'haiku'\n | 'linux'\n | 'openbsd'\n | 'sunos'\n | 'win32'\n | 'cygwin'\n | 'netbsd';\n\ntype HostInfo = {\n /** Converted OS for human readability */\n Platform: Platform | 'docker' | 'Windows' | 'OSX';\n /** The underlying OS */\n os: Platform;\n /** Information about the docker installation */\n dockerInformation?: DockerInformation;\n /** Host architecture */\n Architecture: string;\n /** Number of CPUs */\n CPUs: number | null;\n /** CPU speed */\n Speed: number | null;\n /** CPU model */\n Model: string | null;\n /** Total RAM of host */\n RAM: number;\n /** System uptime in seconds */\n 'System uptime': number;\n /** Node.JS version */\n 'Node.js': string;\n /** Current time to compare to local time */\n time: number;\n /** Timezone offset to compare to local time */\n timeOffset: number;\n /** Number of available adapters */\n 'adapters count': number;\n /** NPM version */\n NPM: string;\n};\n\nexport type CompactSystemRepository = {\n _id: string;\n common: {\n name: string;\n dontDelete: boolean;\n };\n native: {\n repositories: Record<string, ioBroker.RepositoryInformation>;\n };\n};\n\nconst styles: Record<string, any> = {\n grow: {\n flexGrow: 1,\n },\n updateAllButton: (theme: IobTheme) => ({\n position: 'relative',\n '& .admin-update-second-icon': {\n position: 'absolute',\n top: 15,\n left: 15,\n opacity: 0.4,\n color: theme.palette.mode === 'dark' ? '#aad5ff' : '#007fff',\n },\n }),\n counters: {\n mr: '10px',\n minWidth: 120,\n display: 'flex',\n '& div': {\n ml: '3px',\n },\n },\n infoAdapters: (theme: IobTheme) => ({\n fontSize: 10,\n color: theme.palette.mode === 'dark' ? '#9c9c9c' : '#333',\n cursor: 'pointer',\n }),\n greenText: {\n color: '#00a005d1',\n },\n tooltip: {\n pointerEvents: 'none',\n },\n};\n\nconst FILTERS: { name: string; notByList?: boolean }[] = [\n { name: 'Description A-Z' },\n { name: 'Name A-Z' },\n { name: 'Popular first', notByList: true },\n { name: 'Recently updated', notByList: true },\n];\n\ninterface AdaptersProps extends AdapterInstallDialogProps {\n t: Translate;\n /** The host ID of the admin adapter, like system.host.test */\n adminHost: string;\n adminInstance: string;\n socket: AdminConnection;\n systemConfig: ioBroker.SystemConfigObject;\n lang: ioBroker.Languages;\n themeType: ThemeType;\n theme: IobTheme;\n /** Called when admin updates itself */\n onUpdating: (isUpdating: boolean) => void;\n ready: boolean;\n /** Current selected host */\n currentHost: string;\n forceUpdateAdapters: number;\n triggerUpdate: number;\n /** Like admin.0 */\n adminGuiConfig: AdminGuiConfig;\n adaptersWorker: AdaptersWorker;\n instancesWorker: InstancesWorker;\n hostsWorker: HostsWorker;\n expertMode: boolean;\n executeCommand: (cmd: string, host?: string, callback?: (exitCode: number) => void) => void;\n commandRunning: boolean;\n onSetCommandRunning: (commandRunning: boolean) => void;\n toggleTranslation: () => void;\n menuOpened: boolean;\n menuClosed: boolean;\n currentAdminVersion: string;\n}\n\ninterface AdaptersState extends AdapterInstallDialogState {\n lastUpdate: number;\n repository: Record<string, RepoAdapterObject & { rating?: AdapterRatingInfo }>;\n installed: InstalledInfo;\n installedGlobal: InstalledInfo;\n adapters: Record<string, ioBroker.AdapterObject>;\n compactInstances: Record<string, CompactInstanceInfo> | null;\n categories: {\n name: string;\n translation: string;\n count: number;\n installed: number;\n adapters: string[];\n }[];\n hostData: (HostInfo & { 'Active instances': number; location: string; Uptime: number }) | null;\n compactRepositories: CompactSystemRepository | null;\n hostOs: string;\n nodeJsVersion: string;\n init: boolean;\n update: boolean;\n filterConnectionType: boolean;\n search: string;\n oneListView: boolean;\n tableViewMode: boolean;\n updateList: boolean;\n installedList: number;\n categoriesTiles: string;\n filterTiles: string;\n gitHubInstallDialog: boolean;\n updateAvailable: string[];\n filteredList: {\n [adapterName: string]: { exact: boolean; type: 'name' | 'desc' | 'title' | 'keywords'; start?: boolean };\n } | null;\n showUpdater: boolean;\n descWidth: number;\n showStatistics: boolean;\n readTimeoutMs: number;\n showSlowConnectionWarning: boolean;\n currentHost: string;\n forceUpdateAdapters: number;\n triggerUpdate: number;\n ratings: Ratings | null;\n categoriesExpanded: { [categoryName: string]: boolean };\n adminUpgradeTo: string;\n}\n\nclass Adapters extends AdapterInstallDialog<AdaptersProps, AdaptersState> {\n private readonly inputRef: React.RefObject<HTMLInputElement>;\n\n private readonly countRef: React.RefObject<HTMLDivElement>;\n\n private readonly t: Translate;\n\n private readonly wordCache: Record<string, string> = {};\n\n private cache: {\n listOfVisibleAdapter: string[] | null;\n adapters: { [adapterName: string]: AdapterCacheEntry } | null;\n } = { listOfVisibleAdapter: null, adapters: null };\n\n private listOfVisibleAdapterLength: number = 0;\n\n private allAdapters: number = 0;\n\n private installedAdapters: number = 0;\n\n private recentUpdatedAdapters: number = 0;\n\n private uuid: string = '';\n\n private buildCacheTimer: ReturnType<typeof setTimeout> | null = null;\n\n private updateTimeout: ReturnType<typeof setTimeout> | null = null;\n\n private typingTimer: ReturnType<typeof setTimeout> | null = null;\n\n private hostsTimer: ReturnType<typeof setTimeout> | null = null;\n\n private onHostAdapterTimer: ReturnType<typeof setTimeout> | null = null;\n\n private tempAdapters: Record<string, any> | null = null;\n\n private tempInstalled: InstalledInfo | null = null;\n\n private tempInstances: Record<string, CompactInstanceInfo> | null = null;\n\n private hostAdapterWorker: HostAdapterWorker | null = null;\n\n constructor(props: AdaptersProps) {\n super(props);\n\n Object.assign(this.state, {\n lastUpdate: 0,\n repository: {},\n /** Adapters installed on the same host, without object changes installed just contains io-package information, not enriched information like installedFrom */\n installed: {},\n /** This contains the adapters installed on same and other hosts */\n installedGlobal: {},\n adapters: {},\n compactInstances: {},\n categories: [],\n hostData: null,\n compactRepositories: null,\n hostOs: '',\n nodeJsVersion: '',\n init: false,\n update: false,\n filterConnectionType: false,\n search: (((window as any)._localStorage as Storage) || window.localStorage).getItem('Adapter.search') || '',\n oneListView: false,\n tableViewMode: false,\n updateList: false,\n installedList: 0,\n categoriesTiles: 'All',\n filterTiles: 'Description A-Z',\n gitHubInstallDialog: false,\n updateAvailable: [],\n filteredList: null,\n showUpdater: false,\n descWidth: 300,\n showStatistics: false,\n readTimeoutMs: SlowConnectionWarningDialogClass.getReadTimeoutMs(),\n showSlowConnectionWarning: false,\n currentHost: props.currentHost,\n forceUpdateAdapters: props.forceUpdateAdapters,\n triggerUpdate: props.triggerUpdate,\n ratings: null,\n categoriesExpanded: {},\n adminUpgradeTo: '',\n } as AdaptersState);\n\n this.inputRef = createRef();\n this.countRef = createRef();\n\n this.t = this.translate;\n }\n\n translate = (word: string, arg1?: string | boolean | number, arg2?: string | boolean | number): string => {\n if (arg1 !== undefined) {\n return this.props.t(word, arg1, arg2);\n }\n\n if (!this.wordCache[word]) {\n this.wordCache[word] = this.props.t(word);\n }\n\n return this.wordCache[word];\n };\n\n renderSlowConnectionWarning(): JSX.Element | null {\n if (!this.state.showSlowConnectionWarning) {\n return null;\n }\n return (\n <SlowConnectionWarningDialog\n readTimeoutMs={this.state.readTimeoutMs}\n t={this.t}\n onClose={readTimeoutMs => {\n if (readTimeoutMs) {\n this.setState({ showSlowConnectionWarning: false, readTimeoutMs }, () => this.updateAll());\n } else {\n this.setState({ showSlowConnectionWarning: false });\n }\n }}\n />\n );\n }\n\n async componentDidMount(): Promise<void> {\n if (this.props.ready) {\n this.hostAdapterWorker = new HostAdapterWorker(this.props.socket, this.props.currentHost);\n this.hostAdapterWorker.registerHandler(this.onHostAdapterChanged);\n // wait till data is loaded\n await this.hostAdapterWorker.getObjects();\n await this.updateAll();\n if (this.state.search) {\n this.filterAdapters();\n }\n this.props.adaptersWorker.registerHandler(this.onAdaptersChanged);\n this.props.instancesWorker.registerHandler(this.onAdaptersChanged);\n }\n }\n\n async updateAll(update?: boolean, bigUpdate?: boolean, indicateUpdate?: boolean): Promise<void> {\n await this.getAdapters(update, bigUpdate, indicateUpdate);\n await this.getAdaptersInfo(update, indicateUpdate);\n }\n\n componentDidUpdate(): void {\n const descWidth = this.getDescWidth();\n if (this.state.descWidth !== descWidth) {\n this.setState({ descWidth });\n }\n if (this.countRef.current) {\n this.countRef.current.innerHTML = this.listOfVisibleAdapterLength.toString();\n }\n }\n\n componentWillUnmount(): void {\n if (this.updateTimeout) {\n clearTimeout(this.updateTimeout);\n this.updateTimeout = null;\n }\n\n if (this.buildCacheTimer) {\n clearTimeout(this.buildCacheTimer);\n this.buildCacheTimer = null;\n }\n\n if (this.typingTimer) {\n clearTimeout(this.typingTimer);\n this.typingTimer = null;\n }\n\n if (this.hostsTimer) {\n clearTimeout(this.hostsTimer);\n this.hostsTimer = null;\n }\n\n if (this.onHostAdapterTimer) {\n clearTimeout(this.onHostAdapterTimer);\n this.onHostAdapterTimer = null;\n }\n\n this.props.adaptersWorker.unregisterHandler(this.onAdaptersChanged);\n this.props.instancesWorker.unregisterHandler(this.onAdaptersChanged);\n this.hostAdapterWorker.destroy();\n this.hostAdapterWorker = null;\n }\n\n onAdaptersChanged = (events: (AdapterEvent | InstanceEvent)[]): void => {\n this.tempAdapters = this.tempAdapters || JSON.parse(JSON.stringify(this.state.adapters || {}));\n this.tempInstalled = this.tempInstalled || JSON.parse(JSON.stringify(this.state.installed || {}));\n this.tempInstances = this.tempInstances || JSON.parse(JSON.stringify(this.state.compactInstances || {}));\n\n events.forEach(event => {\n // detect if adapter or instance\n const isInstance = !!event.id.match(/\\.\\d+$/);\n if (isInstance) {\n if (event.type === 'deleted' || !event.obj) {\n delete this.tempInstances[event.id];\n } else {\n this.tempInstances[event.id] = {\n enabled: event.obj.common.enabled,\n icon: event.obj.common.icon,\n name: event.obj.common.name,\n adminTab: event.obj.common.adminTab,\n version: event.obj.common.version,\n };\n }\n } else if (event.type === 'deleted' || !event.obj) {\n // extract name from id\n const p = event.id.split('.');\n\n // remove from installed\n delete this.tempInstalled[p[2]];\n delete this.tempAdapters[event.id];\n } else {\n const name = event.obj.common.name;\n if (this.tempInstalled[name]) {\n // Update attributes\n Object.keys(this.tempInstalled[name]).forEach(attr => {\n if ((event.obj.common as Record<string, any>)[attr] !== undefined && attr !== 'installedFrom') {\n (this.tempInstalled[name] as Record<string, any>)[attr] = (\n event.obj.common as Record<string, any>\n )[attr];\n }\n });\n } else {\n // new\n this.tempInstalled[event.id.split('.').pop()] = JSON.parse(JSON.stringify(event.obj.common));\n }\n this.tempAdapters[event.id] = event.obj;\n }\n });\n\n if (this.updateTimeout) {\n clearTimeout(this.updateTimeout);\n }\n this.updateTimeout = setTimeout(() => {\n this.updateTimeout = null;\n const adapters = this.tempAdapters;\n this.tempAdapters = null;\n const installed = this.tempInstalled;\n this.tempInstalled = null;\n const compactInstances = this.tempInstances;\n this.tempInstances = null;\n\n this.analyseInstalled({\n adapters,\n installedLocal: installed,\n cb: () => this.calculateInfo(compactInstances),\n });\n }, 300);\n };\n\n /**\n * Enriches information of the installed adapters with those of the repository and sets them to the state\n */\n analyseInstalled(options: {\n adapters: Record<string, ioBroker.AdapterObject>;\n installedLocal: InstalledInfo;\n installedGlobal?: InstalledInfo;\n repository?: Record<string, RepoAdapterObject>;\n cb?: () => void;\n }): void {\n let { adapters, repository } = options;\n\n const { cb, installedLocal } = options;\n let { installedGlobal } = options;\n\n adapters = adapters || this.state.adapters;\n const installed = installedLocal || this.state.installed;\n installedGlobal = installedGlobal || this.state.installedGlobal;\n repository = repository || this.state.repository;\n\n const updateAvailable: string[] = [];\n\n Object.keys(installed).forEach(adapterName => {\n if (installed[adapterName]) {\n const version = installed[adapterName].version;\n const repositoryEntry = repository[adapterName];\n\n if (\n repositoryEntry &&\n repositoryEntry.version !== version &&\n AdminUtils.updateAvailable(version, repositoryEntry.version) &&\n !updateAvailable.includes(adapterName)\n ) {\n updateAvailable.push(adapterName);\n }\n }\n });\n\n this.cache.listOfVisibleAdapter = null;\n\n this.setState(\n {\n adapters,\n updateAvailable,\n installed,\n repository,\n installedGlobal,\n },\n () => cb && cb(),\n );\n }\n\n /**\n * Get the installed adapters, for current host and other hosts\n */\n async getInstalled(update?: boolean): Promise<{\n installedLocal: InstalledInfo;\n installedGlobal: InstalledInfo;\n }> {\n /** Installed adapters on the same host */\n let installedLocal: InstalledInfo;\n /** Installed adapters on any hosts */\n let installedGlobal: InstalledInfo = {};\n\n const hosts = await this.props.socket.getHosts(update);\n\n for (const host of hosts) {\n try {\n const alive = await this.props.socket.getState(`${host._id}.alive`);\n if (alive?.val) {\n const res = await this.props.socket.getInstalled(host._id, update, this.state.readTimeoutMs);\n\n if (host._id === this.state.currentHost) {\n installedLocal = res;\n }\n // TODO: handle cases where different versions of adapters are installed on different hosts\n installedGlobal = { ...installedGlobal, ...res };\n }\n } catch (e) {\n window.alert(`Cannot getInstalled from \"${host._id}\" (timeout ${this.state.readTimeoutMs}ms): ${e}`);\n if (e.toString().includes('timeout')) {\n this.setState({ showSlowConnectionWarning: true });\n }\n }\n }\n\n return { installedLocal, installedGlobal };\n }\n\n async getAdapters(update?: boolean, bigUpdate?: boolean, indicateUpdate?: boolean): Promise<void> {\n console.log('[ADAPTERS] getAdapters');\n\n const currentHost = this.state.currentHost;\n update = update || this.props.adaptersWorker.isForceUpdate();\n\n if (!this.state.update && (update || indicateUpdate)) {\n this.setState({ update: true });\n }\n\n let adapters: Record<string, ioBroker.AdapterObject>;\n\n try {\n adapters = (await this.props.adaptersWorker.getObjects(update)) || {};\n } catch (e) {\n window.alert(`Cannot getAdapters: ${e}`);\n }\n\n const { installedLocal, installedGlobal } = await this.getInstalled(update);\n\n let repository: Record<string, RepoAdapterObject>;\n try {\n repository = await this.props.socket.getRepository(\n currentHost,\n { repo: this.props.systemConfig.common.activeRepo, update: bigUpdate || indicateUpdate },\n update,\n this.state.readTimeoutMs,\n );\n } catch (e) {\n window.alert(`Cannot getRepository: ${e}`);\n if (e.toString().includes('timeout')) {\n this.setState({ showSlowConnectionWarning: true });\n }\n }\n\n return this.analyseInstalled({\n adapters,\n installedLocal,\n repository,\n installedGlobal,\n });\n }\n\n getWordVotes(votes: number): string {\n if (votes === 1) {\n return this.t('vote');\n }\n if (votes >= 2 && votes <= 4) {\n return this.t('votes2');\n }\n if (votes >= 5 && votes <= 20) {\n return this.t('votes');\n }\n const v = votes % 10;\n if (v === 1) {\n return this.t('vote21');\n }\n if (v >= 2 && v <= 4) {\n return this.t('votes2');\n }\n return this.t('votes');\n }\n\n static getAdapterTitle(\n /** adapter name */\n adapterName: string,\n adapters: Record<string, ioBroker.AdapterCommon | AdapterCacheEntry>,\n lang: ioBroker.Languages,\n ): string {\n if (!adapters[adapterName]) {\n return adapterName;\n }\n const titleObj: ioBroker.StringOrTranslated =\n (adapters[adapterName] as ioBroker.AdapterCommon).titleLang || adapters[adapterName].title;\n let title: string;\n if (typeof titleObj === 'object') {\n title = titleObj[lang] || titleObj.en;\n } else {\n title = titleObj;\n }\n title = ((title || '').toString() || '').replace('ioBroker Visualisation - ', '');\n return title.toLowerCase();\n }\n\n static sortAdapters(\n list: string[],\n lang: ioBroker.Languages,\n installed: InstalledInfo,\n adapters: Record<string, RepoAdapterObject | AdapterCacheEntry>,\n sortByName: boolean,\n sortPopularFirst?: boolean,\n sortRecentlyUpdated?: boolean,\n filteredList?: {\n [adapterName: string]: { exact: boolean; type: 'name' | 'desc' | 'title' | 'keywords'; start?: boolean };\n } | null,\n ): void {\n const titles: { [adapterName: string]: string } = {};\n list.sort((a, b) => {\n if (sortPopularFirst) {\n if (adapters[b].stat === adapters[a].stat) {\n titles[a] = titles[a] || Adapters.getAdapterTitle(a, adapters, lang);\n titles[b] = titles[b] || Adapters.getAdapterTitle(b, adapters, lang);\n\n return titles[a] > titles[b] ? 1 : titles[a] < titles[b] ? -1 : 0;\n }\n return adapters[b].stat - adapters[a].stat;\n }\n if (sortRecentlyUpdated) {\n if (!adapters[a]) {\n return -1;\n }\n if (!adapters[b]) {\n return 1;\n }\n if ((adapters[a] as AdapterCacheEntry).daysAgo === (adapters[b] as AdapterCacheEntry).daysAgo) {\n titles[a] = titles[a] || Adapters.getAdapterTitle(a, adapters, lang);\n titles[b] = titles[b] || Adapters.getAdapterTitle(b, adapters, lang);\n\n return titles[a] > titles[b] ? 1 : titles[a] < titles[b] ? -1 : 0;\n }\n return (adapters[a] as AdapterCacheEntry).daysAgo - (adapters[b] as AdapterCacheEntry).daysAgo;\n }\n\n if (filteredList) {\n if (filteredList[a].exact && !filteredList[b].exact) {\n return -1;\n }\n if (!filteredList[a].exact && filteredList[b].exact) {\n return 1;\n }\n }\n\n if (installed[a] && installed[b]) {\n if (sortByName) {\n return a > b ? 1 : a < b ? -1 : 0;\n }\n titles[a] = titles[a] || Adapters.getAdapterTitle(a, adapters, lang);\n titles[b] = titles[b] || Adapters.getAdapterTitle(b, adapters, lang);\n\n return titles[a] > titles[b] ? 1 : titles[a] < titles[b] ? -1 : 0;\n }\n if (installed[a]) {\n return -1;\n }\n if (installed[b]) {\n return 1;\n }\n\n if (sortByName) {\n return a > b ? 1 : a < b ? -1 : 0;\n }\n // sort by real language name and not by adapter name\n titles[a] = titles[a] || Adapters.getAdapterTitle(a, adapters, lang);\n titles[b] = titles[b] || Adapters.getAdapterTitle(b, adapters, lang);\n\n return titles[a] > titles[b] ? 1 : titles[a] < titles[b] ? -1 : 0;\n });\n }\n\n calculateInfo(\n compactInstances: Record<string, CompactInstanceInfo>,\n ratings?: Ratings | null,\n hostData?: (HostInfo & { 'Active instances': number; location: string; Uptime: number }) | null,\n compactRepositories?: CompactSystemRepository | null,\n ): Promise<void> {\n hostData = hostData || this.state.hostData;\n ratings = ratings || this.state.ratings;\n compactInstances = compactInstances || this.state.compactInstances;\n if (!compactRepositories?._id) {\n compactRepositories = this.state.compactRepositories;\n }\n\n const adapters = this.state.adapters;\n\n const installed: InstalledInfo = JSON.parse(JSON.stringify(this.state.installed));\n const repository: Record<string, RepoAdapterObject> = JSON.parse(JSON.stringify(this.state.repository));\n\n const nodeJsVersion = (hostData?.['Node.js'] || '').replace('v', '');\n const hostOs = hostData?.os || '';\n\n const categories: {\n [categoryType: string]: {\n name: string;\n translation: string;\n count: number;\n installed: number;\n adapters: string[];\n };\n } = {};\n const categoriesSorted: {\n name: string;\n translation: string;\n count: number;\n installed: number;\n adapters: string[];\n }[] = [];\n let categoriesExpanded: { [categoryName: string]: boolean } = {};\n try {\n categoriesExpanded =\n JSON.parse(\n (((window as any)._localStorage as Storage) || window.localStorage).getItem(\n 'Adapters.expandedCategories',\n ),\n ) || {};\n } catch {\n // ignore\n }\n\n Object.keys(installed).forEach(adapterName => {\n const adapter = installed[adapterName];\n if (adapters[adapterName]?.common?.ignoreVersion) {\n adapter.ignoreVersion = adapters[adapterName].common.ignoreVersion;\n }\n\n if (!adapter.controller && adapterName !== 'hosts') {\n if (!repository[adapterName]) {\n repository[adapterName] = JSON.parse(JSON.stringify(adapter));\n repository[adapterName].version = '';\n }\n }\n adapter.count = 0;\n adapter.enabled = 0;\n });\n\n Object.keys(compactInstances).forEach(id => {\n const adapterName = compactInstances[id].name;\n if (installed[adapterName]) {\n installed[adapterName].count++;\n }\n });\n\n const now = Date.now();\n this.recentUpdatedAdapters = 0;\n this.installedAdapters = 0;\n\n Object.keys(repository).forEach(adapterName => {\n if (adapterName === 'hosts') {\n return;\n }\n if (adapterName.startsWith('_')) {\n return;\n }\n const adapter: RepoAdapterObject & { rating?: AdapterRatingInfo } = repository[adapterName];\n if (adapter.keywords) {\n adapter.keywords = adapter.keywords.map(word => word.toLowerCase());\n }\n const _installed = installed[adapterName];\n\n adapter.rating = ratings?.[adapterName] as AdapterRatingInfo;\n\n if (adapter.rating?.rating) {\n adapter.rating.title = [\n `${this.t('Total rating:')} ${adapter.rating.rating.r} (${\n adapter.rating.rating.c\n } ${this.getWordVotes(adapter.rating.rating.c)})`,\n _installed && _installed.version && adapter.rating[_installed.version]\n ? `${this.t('Rating for')} v${_installed.version}: ${adapter.rating[_installed.version].r} (${\n adapter.rating[_installed.version].c\n } ${this.getWordVotes(adapter.rating.rating.c)})`\n : '',\n ]\n .filter(i => i)\n .join('\\n');\n } else {\n adapter.rating = { title: this.t('No rating or too few data') } as AdapterRatingInfo;\n }\n\n if (!adapter.controller) {\n const type: string = adapter.type;\n const installedInGroup = installed[adapterName];\n\n const daysAgo = Math.round((now - new Date(adapter.versionDate).getTime()) / 86400000);\n\n if (daysAgo <= 31) {\n this.recentUpdatedAdapters++;\n }\n if (installed[adapterName]) {\n this.installedAdapters++;\n }\n\n if (!categories[type]) {\n categories[type] = {\n name: type,\n translation: this.t(`${type}_group`),\n count: 1,\n installed: installedInGroup ? 1 : 0,\n adapters: [adapterName],\n };\n } else {\n categories[type].count++;\n categories[type].adapters.push(adapterName);\n if (installedInGroup) {\n categories[type].installed++;\n }\n }\n }\n });\n\n Object.keys(categories)\n .sort((a, b) => {\n if (a === 'general' && b !== 'general') {\n return -1;\n }\n if (a !== 'general' && b === 'general') {\n return 1;\n }\n if (categories[a].translation > categories[b].translation) {\n return 1;\n }\n if (categories[a].translation < categories[b].translation) {\n return -1;\n }\n return 0;\n })\n .forEach(categoryType => categoriesSorted.push(categories[categoryType]));\n\n // const _titles = {};\n const sortByName = this.state.filterTiles === 'Name A-Z';\n\n Object.keys(categories).forEach(type =>\n Adapters.sortAdapters(categories[type].adapters, this.props.lang, installed, repository, sortByName),\n );\n\n let installedList = 0;\n try {\n installedList = JSON.parse(\n (((window as any)._localStorage as Storage) || window.localStorage).getItem('Adapters.installedList'),\n );\n // @ts-expect-error back compatibility\n if (installedList === false) {\n installedList = 0;\n }\n } catch {\n // ignore\n }\n const oneListView =\n (((window as any)._localStorage as Storage) || window.localStorage).getItem('Adapters.list') === 'true';\n const tableViewMode =\n (((window as any)._localStorage as Storage) || window.localStorage).getItem('Adapters.viewMode') === 'true';\n const updateList =\n (((window as any)._localStorage as Storage) || window.localStorage).getItem('Adapters.updateList') ===\n 'true';\n const categoriesTiles =\n (((window as any)._localStorage as Storage) || window.localStorage).getItem('Adapters.categoriesTiles') ||\n 'All';\n let filterTiles =\n (((window as any)._localStorage as Storage) || window.localStorage).getItem('Adapters.filterTiles') ||\n 'Description A-Z';\n if (filterTiles === 'A-Z') {\n filterTiles = 'Description A-Z';\n }\n this.allAdapters = Object.keys(repository).length - 1;\n\n this.cache.listOfVisibleAdapter = null;\n\n return new Promise<void>(resolve => {\n this.setState(\n {\n repository,\n installed,\n ratings,\n filterTiles,\n categoriesTiles,\n compactRepositories,\n installedList,\n compactInstances,\n updateList,\n tableViewMode,\n oneListView,\n lastUpdate: Date.now(),\n hostData,\n hostOs,\n nodeJsVersion,\n categories: categoriesSorted,\n categoriesExpanded,\n init: true,\n update: false,\n },\n () => resolve(),\n );\n });\n }\n\n async getAdaptersInfo(update?: boolean, indicateUpdate?: boolean): Promise<void> {\n if (!this.state.currentHost) {\n return;\n }\n\n // Do not update too often\n if (Date.now() - this.state.lastUpdate > 1_000) {\n console.log('[ADAPTERS] getAdaptersInfo');\n\n const currentHost = this.state.currentHost;\n\n let ratings: Ratings | null;\n try {\n if (!this.state.update || indicateUpdate) {\n await new Promise<void>(resolve => {\n this.setState({ update: true }, () => resolve());\n });\n }\n const hostData: HostInfo & { 'Active instances': number; location: string; Uptime: number } =\n await this.props.socket\n .getHostInfo(currentHost, update, this.state.readTimeoutMs)\n .catch((e: unknown): void => {\n window.alert(`Cannot getHostInfo for \"${currentHost}\": ${e as Error}`);\n if ((e as Error).toString().includes('timeout')) {\n this.setState({ showSlowConnectionWarning: true });\n }\n });\n\n if (this.props.adminGuiConfig.admin.adapters?.allowAdapterRating !== false) {\n try {\n ratings = (await this.props.socket.getRatings(update)) as unknown as Ratings;\n } catch (e) {\n window.alert(`Cannot read ratings: ${e}`);\n }\n this.uuid = ratings?.uuid || null;\n } else {\n ratings = null;\n }\n\n const compactInstances = await this.props.socket\n .getCompactInstances(update)\n .catch((e: unknown): Record<string, CompactInstanceInfo> => {\n window.alert(`Cannot read countsOfInstances: ${e as Error}`);\n return {};\n });\n\n const compactRepositoriesEx = await this.props.socket\n .getCompactSystemRepositories(update)\n .catch((e: unknown): Record<string, CompactSystemRepository> => {\n window.alert(`Cannot read getCompactSystemRepositories: ${e as Error}`);\n return {};\n });\n const compactRepositories: CompactSystemRepository = compactRepositoriesEx as CompactSystemRepository;\n\n await this.calculateInfo(compactInstances || {}, ratings, hostData, compactRepositories);\n } catch (error) {\n window.alert(`Cannot get adapters info: ${error}`);\n }\n }\n }\n\n toggleCategory(category: string): void {\n this.setState(oldState => {\n const categoriesExpanded = oldState.categoriesExpanded;\n categoriesExpanded[category] = !categoriesExpanded[category];\n\n (((window as any)._localStorage as Storage) || window.localStorage).setItem(\n 'Adapters.expandedCategories',\n JSON.stringify(categoriesExpanded),\n );\n\n return { categoriesExpanded };\n });\n }\n\n rightDependencies = (adapterName: string): boolean => {\n const adapter = this.state.repository[adapterName];\n let result = true;\n\n if (adapter) {\n const dependencies = adapter.dependencies;\n const nodeVersion = adapter.node;\n\n if (dependencies) {\n if (dependencies instanceof Array) {\n dependencies.forEach(dependency => {\n const checkVersion = typeof dependency !== 'string';\n const keys = Object.keys(dependency);\n const name = !checkVersion ? dependency : keys ? keys[0] : null;\n\n if (result && name) {\n const installed = this.state.installed[name];\n\n try {\n result = installed\n ? checkVersion\n ? semver.satisfies(installed.version, dependency[name], {\n includePrerelease: true,\n })\n : true\n : false;\n } catch {\n result = true;\n }\n }\n });\n } else if (typeof dependencies === 'object') {\n // back compatibility\n const _deps: { [_adapterName: string]: string } = dependencies as any as {\n [_adapterName: string]: string;\n };\n Object.keys(_deps).forEach(_adapterName => {\n if (_adapterName && _deps[_adapterName] !== undefined && result) {\n const installed = this.state.installed[_adapterName];\n const checkVersion = typeof _deps[_adapterName] === 'string';\n try {\n result = installed\n ? checkVersion\n ? semver.satisfies(installed.version, _deps[_adapterName], {\n includePrerelease: true,\n })\n : true\n : false;\n } catch {\n result = true;\n }\n }\n });\n } else {\n console.error(\n `[ADAPTERS] Invalid dependencies for ${adapterName}: ${JSON.stringify(dependencies)}`,\n );\n }\n }\n\n if (result && nodeVersion) {\n try {\n result = semver.satisfies(this.state.nodeJsVersion, nodeVersion);\n } catch {\n result = true;\n }\n }\n }\n\n return result;\n };\n\n rightOs(adapterName: string): boolean {\n const adapter = this.state.repository[adapterName];\n\n if (adapter?.os) {\n if (Array.isArray(adapter.os)) {\n return !!adapter.os.find(hostOs => this.state.hostOs === hostOs);\n }\n return this.state.hostOs === adapter.os;\n }\n\n return true;\n }\n\n handleFilterChange(event: React.ChangeEvent<HTMLInputElement>): void {\n if (this.typingTimer) {\n clearTimeout(this.typingTimer);\n }\n\n this.typingTimer = setTimeout(\n value => {\n (((window as any)._localStorage as Storage) || window.localStorage).setItem(\n 'Adapter.search',\n value || '',\n );\n this.typingTimer = null;\n this.filterAdapters(value);\n },\n 300,\n event.target.value,\n );\n }\n\n // toggleConnectionTypeFilter() {\n // this.setState({ filterConnectionType: !this.state.filterConnectionType });\n // }\n\n expandAll(): void {\n this.setState(oldState => {\n const categories = oldState.categories;\n const categoriesExpanded = oldState.categoriesExpanded;\n\n categories.forEach(category => (categoriesExpanded[category.name] = true));\n\n (((window as any)._localStorage as Storage) || window.localStorage).setItem(\n 'Adapters.expandedCategories',\n JSON.stringify(categoriesExpanded),\n );\n\n return { categoriesExpanded };\n });\n }\n\n collapseAll(): void {\n const categoriesExpanded = {};\n\n (((window as any)._localStorage as Storage) || window.localStorage).setItem(\n 'Adapters.expandedCategories',\n JSON.stringify(categoriesExpanded),\n );\n\n this.setState({ categoriesExpanded });\n }\n\n listTable(): void {\n const oneListView = !this.state.oneListView;\n if (oneListView) {\n this.expandAll();\n }\n (((window as any)._localStorage as Storage) || window.localStorage).setItem(\n 'Adapters.list',\n oneListView ? 'true' : 'false',\n );\n this.setState({ oneListView });\n }\n\n changeViewMode(): void {\n this.cache.listOfVisibleAdapter = null;\n const tableViewMode = !this.state.tableViewMode;\n\n // By the list view, the filterTiles can be only 'Description A-Z' or 'Name A-Z'\n let filterTiles = this.state.filterTiles;\n if (tableViewMode && filterTiles !== 'Description A-Z' && filterTiles !== 'Name A-Z') {\n filterTiles = 'Description A-Z';\n (((window as any)._localStorage as Storage) || window.localStorage).setItem(\n 'Adapters.filterTiles',\n filterTiles,\n );\n }\n\n (((window as any)._localStorage as Storage) || window.localStorage).setItem(\n 'Adapters.viewMode',\n tableViewMode ? 'true' : 'false',\n );\n this.setState({ tableViewMode, filterTiles });\n }\n\n changeUpdateList(): void {\n this.cache.listOfVisibleAdapter = null;\n const updateList = !this.state.updateList;\n (((window as any)._localStorage as Storage) || window.localStorage).setItem(\n 'Adapters.updateList',\n updateList ? 'true' : 'false',\n );\n this.setState({ updateList });\n }\n\n changeInstalledList(onlyInstalled?: boolean): void {\n this.cache.listOfVisibleAdapter = null;\n let installedList = !this.state.installedList ? 1 : this.state.installedList < 2 ? 2 : 0;\n if (!installedList && onlyInstalled) {\n installedList = 1;\n }\n (((window as any)._localStorage as Storage) || window.localStorage).setItem(\n 'Adapters.installedList',\n JSON.stringify(installedList),\n );\n this.setState({ installedList });\n }\n\n changeFilterTiles(filterTiles: string): void {\n this.cache.listOfVisibleAdapter = null; // rebuild cache\n (((window as any)._localStorage as Storage) || window.localStorage).setItem(\n 'Adapters.filterTiles',\n filterTiles,\n );\n this.setState({ filterTiles });\n }\n\n changeCategoriesTiles(categoriesTiles: string): void {\n this.cache.listOfVisibleAdapter = null;\n (((window as any)._localStorage as Storage) || window.localStorage).setItem(\n 'Adapters.categoriesTiles',\n categoriesTiles,\n );\n this.setState({ categoriesTiles });\n }\n\n filterAdapters(search?: string): void {\n search = search === undefined ? this.state.search : search;\n search = (search || '').toLowerCase().trim();\n let filteredList: {\n [adapterName: string]: { exact: boolean; type: 'name' | 'desc' | 'title' | 'keywords'; start?: boolean };\n } = {};\n if (search) {\n this.state.categories.forEach(category =>\n category.adapters.forEach(name => {\n const adapter = this.state.repository[name];\n if (!adapter) {\n return;\n }\n let title: string | undefined;\n let desc: string | undefined;\n const titleM = adapter.titleLang || adapter.title;\n if (typeof titleM === 'object') {\n title = titleM[this.props.lang] || titleM.en;\n } else {\n title = titleM;\n }\n title = ((title || '').toString() || '').replace('ioBroker Visualisation - ', '');\n if (adapter.desc) {\n if (typeof adapter.desc === 'string') {\n desc = adapter.desc;\n } else {\n desc = adapter.desc[this.props.lang] || adapter.desc.en || '';\n }\n } else {\n desc = '';\n }\n\n if (name.includes(search)) {\n filteredList[name] = { exact: name === search, type: 'name', start: name.startsWith(search) };\n } else if (title && typeof title === 'string' && title.toLowerCase().includes(search)) {\n filteredList[name] = { exact: false, type: 'title' };\n } else if (desc && typeof desc === 'string' && desc.toLowerCase().includes(search)) {\n filteredList[name] = { exact: false, type: 'desc' };\n } else if (adapter.keywords?.find(value => value.includes(search))) {\n filteredList[name] = { exact: false, type: 'keywords' };\n }\n }),\n );\n } else {\n filteredList = null;\n }\n\n this.setState({ filteredList, search }, () => {\n this.cache.listOfVisibleAdapter = null;\n this.forceUpdate();\n });\n }\n\n onHostAdapterChanged = (_events: HostAdapterEvent[]): void => {\n // redraw\n this.onHostAdapterTimer && clearTimeout(this.onHostAdapterTimer);\n this.onHostAdapterTimer = setTimeout(() => {\n this.onHostAdapterTimer = null;\n this.cache.listOfVisibleAdapter = null;\n this.forceUpdate();\n }, 200);\n };\n\n clearAllFilters(onlyUpdate?: boolean): void {\n if (onlyUpdate) {\n (((window as any)._localStorage as Storage) || window.localStorage).removeItem('Adapters.updateList');\n this.setState(\n {\n updateList: false,\n },\n () => this.filterAdapters(),\n );\n } else {\n (((window as any)._localStorage as Storage) || window.localStorage).removeItem('Adapter.search');\n (((window as any)._localStorage as Storage) || window.localStorage).removeItem('Adapters.installedList');\n (((window as any)._localStorage as Storage) || window.localStorage).removeItem('Adapters.updateList');\n if (this.inputRef.current) {\n this.inputRef.current.value = '';\n }\n this.setState(\n {\n filteredList: null,\n updateList: false,\n filterConnectionType: false,\n installedList: 0,\n search: '',\n },\n () => this.filterAdapters(),\n );\n }\n }\n\n getContext(descHidden: boolean): AdaptersContext {\n return {\n expertMode: this.props.expertMode,\n t: this.t,\n socket: this.props.socket,\n removeUpdateAvailable: (adapterName: string) => {\n const updateAvailable = [...this.state.updateAvailable];\n const pos = updateAvailable.indexOf(adapterName);\n if (pos !== -1) {\n updateAvailable.splice(pos, 1);\n this.setState({ updateAvailable });\n }\n },\n toggleTranslation: this.props.toggleTranslation,\n rightDependenciesFunc: this.rightDependencies,\n lang: this.props.lang,\n uuid: this.uuid,\n themeType: this.props.themeType,\n theme: this.props.theme,\n onUpdating: this.props.onUpdating,\n /** Information about ALL KNOWN adapters in the ioBroker infrastructure. Repo */\n repository: this.state.repository,\n /** Information about all installed adapters on this host */\n installed: this.state.installed,\n /** Information about all installed adapters on all hosts */\n installedGlobal: this.state.installedGlobal,\n /** very compact information about instances */\n compactInstances: this.state.compactInstances || {},\n /** Information about installed adapters */\n adapters: this.state.adapters,\n nodeJsVersion: this.state.nodeJsVersion,\n currentHost: this.state.currentHost,\n /** The host ID of the admin adapter, like system.host.test */\n adminHost: this.props.adminHost,\n adminInstance: this.props.adminInstance,\n /** Current selected host */\n instancesWorker: this.props.instancesWorker,\n hostsWorker: this.props.hostsWorker,\n executeCommand: this.props.executeCommand,\n /** node.js version of current host */\n categories: this.state.categories,\n descHidden,\n sortPopularFirst: !this.state.tableViewMode && this.state.filterTiles === 'Popular first',\n sortRecentlyUpdated: !this.state.tableViewMode && this.state.filterTiles === 'Recently updated',\n isTileView: !this.state.tableViewMode,\n updateRating: (adapter: string, rating: RatingDialogRepository) => {\n const repository = JSON.parse(JSON.stringify(this.state.repository));\n Object.assign(repository[adapter].rating, rating);\n this.setState({ repository });\n },\n setAdminUpgradeTo: this.setAdminUpgradeTo,\n hostAdapterWorker: this.hostAdapterWorker,\n } as AdaptersContext;\n }\n\n setAdminUpgradeTo = (version: string): void => this.setState({ adminUpgradeTo: version });\n\n buildCache(context: AdaptersContext): void {\n this.cache.listOfVisibleAdapter = [];\n this.cache.adapters = {};\n const now = Date.now();\n const textDaysAgo0 = this.t('0 %d days ago');\n const textDaysAgo1 = this.t('1 %d days ago');\n const textDaysAgo2 = this.t('2 %d days ago');\n const textDaysAgo = this.t('5 %d days ago');\n\n // get all visible adapters\n this.state.categories\n .filter(\n cat =>\n this.state.tableViewMode ||\n !this.state.categoriesTiles ||\n this.state.categoriesTiles === 'All' ||\n cat.name === this.state.categoriesTiles,\n )\n .forEach(category =>\n category.adapters.forEach(adapterName => {\n const adapter = this.state.repository[adapterName];\n\n if (adapter && !adapter.controller) {\n const connectionType = adapter.connectionType ? adapter.connectionType : '-';\n const updateAvailable = this.state.updateAvailable.includes(adapterName);\n const installed = this.state.installed[adapterName];\n\n let show: boolean = !this.state.filteredList || !!this.state.filteredList[adapterName];\n if (show && this.state.filterConnectionType) {\n show = connectionType === 'local';\n }\n if (show && this.state.updateList) {\n show = updateAvailable;\n }\n if (show && this.state.installedList) {\n show =\n this.state.installedList < 2\n ? !!(installed && installed.version)\n : !!(installed && installed.version && !installed.count);\n }\n if (show) {\n this.cache.listOfVisibleAdapter.push(adapterName);\n const daysAgo10 = Math.round((now - new Date(adapter.versionDate).getTime()) / 8640000);\n const daysAgo = Math.round(daysAgo10 / 10);\n\n const titleObj = adapter.titleLang || adapter.title;\n let title: string;\n if (titleObj && typeof titleObj === 'object') {\n title = titleObj[this.props.lang] || titleObj.en;\n } else {\n title = (titleObj as string) || adapterName;\n }\n title = ((title || '').toString() || '').replace('ioBroker Visualisation - ', '');\n\n let desc;\n if (adapter.desc) {\n if (typeof adapter.desc === 'string') {\n desc = adapter.desc;\n } else {\n desc = adapter.desc[this.props.lang] || adapter.desc.en || '';\n }\n } else {\n desc = '';\n }\n\n const _daysAgo10 = daysAgo % 100 <= 10 || daysAgo % 100 >= 20 ? daysAgo % 10 : 5;\n\n this.cache.adapters[adapterName] = {\n title,\n desc,\n image:\n installed && this.state.adapters[`system.adapter.${adapterName}`]\n ? `.${installed.localIcon}`\n : adapter.extIcon,\n connectionType: adapter.connectionType ? adapter.connectionType : '-',\n updateAvailable: this.state.updateAvailable.includes(adapterName),\n rightDependencies: this.rightDependencies(adapterName),\n rightOs: this.rightOs(adapterName),\n sentry: !!adapter.plugins?.sentry,\n daysAgo: daysAgo10,\n stat: adapter.stat || 0,\n daysAgoText:\n daysAgo || daysAgo === 0\n ? daysAgo === 0\n ? textDaysAgo0\n : _daysAgo10 === 1\n ? textDaysAgo1.replace('%d', daysAgo.toString())\n : _daysAgo10 === 2 || _daysAgo10 === 3 || _daysAgo10 === 4\n ? textDaysAgo2.replace('%d', daysAgo.toString())\n : textDaysAgo.replace('%d', daysAgo.toString())\n : '',\n };\n }\n }\n }),\n );\n\n this.listOfVisibleAdapterLength = this.cache.listOfVisibleAdapter.length;\n\n const sortByName = this.state.filterTiles === 'Name A-Z';\n\n if (this.state.tableViewMode) {\n this.state.categories.forEach(category =>\n Adapters.sortAdapters(\n category.adapters,\n this.props.lang,\n this.state.installed,\n this.cache.adapters,\n sortByName,\n ),\n );\n }\n\n Adapters.sortAdapters(\n this.cache.listOfVisibleAdapter,\n this.props.lang,\n this.state.installed,\n this.cache.adapters,\n sortByName,\n context.sortPopularFirst,\n context.sortRecentlyUpdated,\n this.state.filteredList,\n );\n\n console.log(`[ADAPTERS] ${new Date().toISOString()} Update cache!`);\n this.forceUpdate();\n }\n\n getUpdater(): JSX.Element | null {\n if (!this.state.showUpdater) {\n return null;\n }\n return (\n <AdaptersUpdaterDialog\n theme={this.props.theme}\n onSetCommandRunning={commandRunning => this.props.onSetCommandRunning(commandRunning)}\n t={this.props.t}\n currentHost={this.state.currentHost}\n lang={this.props.lang}\n installed={this.state.installed}\n repository={this.state.repository}\n toggleTranslation={this.props.toggleTranslation}\n noTranslation={this.props.noTranslation}\n onClose={reload => this.setState({ showUpdater: false }, () => reload && this.updateAll(true, false))}\n socket={this.props.socket}\n />\n );\n }\n\n getDescWidth(): number {\n if (this.props.menuOpened) {\n return document.body.scrollWidth - SUM - 180 + 13;\n }\n if (this.props.menuClosed) {\n return document.body.scrollWidth - SUM;\n }\n // if (this.props.menuCompact) {\n return document.body.scrollWidth - SUM - 50 + 13;\n }\n\n getStatistics(): JSX.Element | null {\n if (this.state.showStatistics) {\n return (\n <Dialog\n open={!0}\n onClose={() => this.setState({ showStatistics: false })}\n >\n <DialogTitle>{this.t('Statistics')}</DialogTitle>\n <DialogContent style={{ fontSize: 16 }}>\n <Box\n component=\"div\"\n sx={styles.counters}\n >\n {this.t('Total adapters')}:{' '}\n <span style={{ paddingLeft: 6, fontWeight: 'bold' }}>{this.allAdapters}</span>\n </Box>\n <Box\n component=\"div\"\n sx={styles.counters}\n >\n {this.t('Installed adapters')}:{' '}\n <span style={{ paddingLeft: 6, fontWeight: 'bold' }}>{this.installedAdapters}</span>\n </Box>\n <Box\n component=\"div\"\n sx={styles.counters}\n >\n {this.t('Last month updated adapters')}:{' '}\n <span style={{ paddingLeft: 6, fontWeight: 'bold' }}>{this.recentUpdatedAdapters}</span>\n </Box>\n </DialogContent>\n <DialogActions>\n <Button\n variant=\"contained\"\n onClick={() => this.setState({ showStatistics: false })}\n color=\"primary\"\n autoFocus\n startIcon={<CloseIcon />}\n >\n {this.props.t('Close')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n return null;\n }\n\n renderGitHubInstallDialog(context: AdaptersContext): JSX.Element | null {\n if (!this.state.gitHubInstallDialog) {\n return null;\n }\n\n return (\n <GitHubInstallDialog\n t={this.t}\n categories={this.state.categories}\n installed={this.state.installedGlobal}\n upload={adapterName =>\n this.props.executeCommand(`upload ${adapterName}${this.props.expertMode ? ' --debug' : ''}`)\n }\n installFromUrl={(adapterName, debug, customUrl) =>\n this.addInstance({\n adapterName,\n debug,\n customUrl,\n context,\n })\n }\n repository={this.state.repository}\n onClose={() => {\n this.setState({ gitHubInstallDialog: false });\n }}\n />\n );\n }\n\n renderHeader(): JSX.Element {\n let updateAllButtonAvailable =\n !this.props.commandRunning &&\n !!this.props.ready &&\n !!this.state.updateList &&\n this.state.updateAvailable.length > 1;\n\n // it is not possible to update admin in bulk\n if (\n updateAllButtonAvailable &&\n this.state.updateAvailable.length === 2 &&\n this.state.updateAvailable.includes('admin')\n ) {\n updateAllButtonAvailable = false;\n }\n\n return (\n <TabHeader>\n <Tooltip\n title={this.t('Change view mode')}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <IconButton\n size=\"large\"\n onClick={() => this.changeViewMode()}\n >\n {this.state.tableViewMode ? <ViewModuleIcon /> : <ViewListIcon />}\n </IconButton>\n </Tooltip>\n <Tooltip\n title={this.t('Check adapter for updates')}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <IconButton\n size=\"large\"\n onClick={() => this.updateAll(true, true)}\n >\n <RefreshIcon />\n </IconButton>\n </Tooltip>\n {this.state.tableViewMode && !this.state.oneListView && (\n <Tooltip\n title={this.t('expand all')}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <IconButton\n size=\"large\"\n onClick={() => this.expandAll()}\n >\n <FolderOpenIcon />\n </IconButton>\n </Tooltip>\n )}\n {this.state.tableViewMode && !this.state.oneListView && (\n <Tooltip\n title={this.t('collapse all')}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <IconButton\n size=\"large\"\n onClick={() => this.collapseAll()}\n >\n <FolderIcon />\n </IconButton>\n </Tooltip>\n )}\n {this.state.tableViewMode && (\n <Tooltip\n title={this.t('list')}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <IconButton\n size=\"large\"\n onClick={() => this.listTable()}\n >\n <ListIcon color={this.state.oneListView ? 'primary' : 'inherit'} />\n </IconButton>\n </Tooltip>\n )}\n\n {/* <Tooltip title={this.t('Filter local connection type')} slotProps={{ popper: { sx: styles.tooltip } }}>\n <IconButton size=\"large\" onClick={() => this.toggleConnectionTypeFilter()}>\n <CloudOffIcon color={this.state.filterConnectionType ? 'primary' : 'inherit'} />\n </IconButton>\n </Tooltip> */}\n {this.state.updateList ? (\n <IconButton\n size=\"large\"\n onClick={() => this.changeInstalledList(true)}\n >\n <StarIcon\n color=\"primary\"\n style={{ opacity: 0.3, color: this.state.installedList === 2 ? 'red' : undefined }}\n />\n </IconButton>\n ) : (\n <Tooltip\n slotProps={{ popper: { sx: styles.tooltip } }}\n title={this.t(\n !this.state.installedList\n ? 'Show only installed'\n : this.state.installedList === 1\n ? 'Showed only installed adapters'\n : 'Showed only installed adapters without instance.',\n )}\n >\n <IconButton\n size=\"large\"\n onClick={() => this.changeInstalledList()}\n >\n <StarIcon\n style={this.state.installedList === 2 ? { color: 'red' } : null}\n color={this.state.installedList === 1 ? 'primary' : 'inherit'}\n />\n </IconButton>\n </Tooltip>\n )}\n <IsVisible\n config={this.props.adminGuiConfig.admin}\n name=\"admin.adapters.filterUpdates\"\n >\n <Tooltip\n title={this.t('Filter adapter with updates')}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <IconButton\n size=\"large\"\n onClick={() => this.changeUpdateList()}\n >\n <UpdateIcon color={this.state.updateList ? 'primary' : 'inherit'} />\n </IconButton>\n </Tooltip>\n </IsVisible>\n {updateAllButtonAvailable && (\n <Tooltip\n title={this.t('Update all adapters')}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <IconButton\n size=\"large\"\n onClick={() => this.setState({ showUpdater: true })}\n sx={styles.updateAllButton}\n >\n <UpdateIcon />\n <UpdateIcon className=\"admin-update-second-icon\" />\n </IconButton>\n </Tooltip>\n )}\n\n {this.props.expertMode && this.props.adminGuiConfig.admin?.adapters.gitHubInstall !== false && (\n <Tooltip\n title={this.t('Install from custom URL')}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <IconButton\n size=\"large\"\n onClick={() => this.setState({ gitHubInstallDialog: true })}\n >\n <GithubIcon />\n </IconButton>\n </Tooltip>\n )}\n <div style={styles.grow} />\n <TextField\n variant=\"standard\"\n inputRef={this.inputRef}\n label={this.t('Filter by name')}\n defaultValue={this.state.search}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => this.handleFilterChange(event)}\n slotProps={{\n input: {\n endAdornment: this.state.search ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() => {\n (\n ((window as any)._localStorage as Storage) || window.localStorage\n ).removeItem('Adapter.search');\n this.inputRef.current.value = '';\n this.setState({ search: '' }, () => this.filterAdapters());\n }}\n >\n <CloseIcon />\n </IconButton>\n </InputAdornment>\n ) : null,\n },\n }}\n />\n\n {!this.state.tableViewMode && (\n <CustomSelectButton\n t={this.t}\n icons\n contained={this.state.categoriesTiles !== 'All'}\n translateSuffix=\"_group\"\n arrayItem={[{ name: 'All' }, ...this.state.categories]}\n onClick={value => this.changeCategoriesTiles(value as string)}\n value={this.state.categoriesTiles}\n />\n )}\n <CustomSelectButton\n t={this.t}\n arrayItem={this.state.tableViewMode ? FILTERS.filter(item => !item.notByList) : FILTERS}\n onClick={value => this.changeFilterTiles(value as string)}\n value={this.state.filterTiles}\n />\n <div style={styles.grow} />\n <IsVisible\n config={this.props.adminGuiConfig.admin}\n name=\"admin.adapters.statistics\"\n >\n <Box\n component=\"div\"\n sx={Utils.getStyle(this.props.theme, styles.infoAdapters, {\n display: { sm: 'none', md: 'inline-block' },\n })}\n onClick={() => this.setState({ showStatistics: true })}\n >\n <Box\n component=\"div\"\n sx={{ ...styles.counters, ...styles.greenText }}\n >\n {this.t('Selected adapters')}\n <div ref={this.countRef} />\n </Box>\n <Box\n component=\"div\"\n sx={styles.counters}\n >\n {this.t('Total adapters')}:<div>{this.allAdapters}</div>\n </Box>\n <Box\n component=\"div\"\n sx={styles.counters}\n >\n {this.t('Installed adapters')}:<div>{this.installedAdapters}</div>\n </Box>\n <Box\n component=\"div\"\n sx={styles.counters}\n >\n {this.t('Last month updated adapters')}:<div>{this.recentUpdatedAdapters}</div>\n </Box>\n </Box>\n </IsVisible>\n </TabHeader>\n );\n }\n\n /**\n * Perform the Admin Upgrade via Webserver\n * This allows showing UI progress even admin is down\n */\n renderWebserverUpgrade(): JSX.Element | null {\n if (!this.state.adminUpgradeTo) {\n return null;\n }\n\n return (\n <AdminUpdater\n socket={this.props.socket}\n themeType={this.props.themeType}\n host={this.props.adminHost}\n onClose={() => {\n console.log('Close dialog');\n this.setState({ adminUpgradeTo: '', showDialog: false });\n }}\n version={this.state.adminUpgradeTo}\n adminInstance={this.props.adminInstance}\n onUpdating={isUpdating => {\n this.props.onUpdating(isUpdating);\n }}\n currentAdminVersion={this.props.currentAdminVersion}\n />\n );\n }\n\n render(): JSX.Element {\n if (!this.state.init) {\n return <LinearProgress />;\n }\n\n // update adapters because the repository could be changed\n if (this.state.triggerUpdate !== this.props.triggerUpdate) {\n setTimeout(() => {\n this.setState({ triggerUpdate: this.props.triggerUpdate }, () => this.updateAll(true));\n }, 100);\n }\n\n // if the current host changed\n if (\n this.props.currentHost !== this.state.currentHost ||\n this.props.forceUpdateAdapters !== this.state.forceUpdateAdapters\n ) {\n this.hostsTimer =\n this.hostsTimer ||\n setTimeout(() => {\n this.hostsTimer = null;\n this.setState(\n {\n currentHost: this.props.currentHost,\n forceUpdateAdapters: this.props.forceUpdateAdapters,\n },\n async () => {\n if (this.hostAdapterWorker.getHost() !== this.props.currentHost) {\n this.hostAdapterWorker.destroy();\n this.hostAdapterWorker = new HostAdapterWorker(\n this.props.socket,\n this.props.currentHost,\n );\n this.hostAdapterWorker.registerHandler(this.onHostAdapterChanged);\n await this.hostAdapterWorker.getObjects();\n }\n await this.updateAll(false, false, true);\n },\n );\n }, 200);\n }\n\n // fast check if active repo is stable\n let stableRepo = Utils.isStableRepository(this.props.systemConfig.common.activeRepo);\n\n // if repositories are available\n const repositories: Record<string, ioBroker.RepositoryInformation> =\n this.state.compactRepositories?.native?.repositories;\n if (repositories) {\n // new style with multiple active repositories\n if (this.props.systemConfig.common.activeRepo) {\n if (Array.isArray(this.props.systemConfig.common.activeRepo)) {\n // if any active repo is not stable, show warning\n stableRepo = this.props.systemConfig.common.activeRepo.every(\n repo => repo.toLowerCase().startsWith('stable') || repositories[repo]?.json?._repoInfo?.stable,\n );\n } else if (typeof this.props.systemConfig.common.activeRepo === 'string') {\n // if active repo is not stable, show warning\n stableRepo =\n // @ts-expect-error deprecated, but could still come\n this.props.systemConfig.common.activeRepo.toLowerCase().startsWith('stable') ||\n repositories[this.props.systemConfig.common.activeRepo]?.json?._repoInfo?.stable;\n }\n }\n }\n\n let repoName: string;\n if (!stableRepo) {\n repoName = Array.isArray(this.props.systemConfig.common.activeRepo)\n ? this.props.systemConfig.common.activeRepo.join(', ')\n : this.props.systemConfig.common.activeRepo;\n\n // old style with just one active repository\n if (typeof this.props.systemConfig.common.activeRepo === 'string') {\n const repoInfo =\n repositories && repositories[this.props.systemConfig.common.activeRepo]?.json?._repoInfo;\n\n if (repoInfo?.name) {\n if (repoInfo.name && typeof repoInfo.name === 'object') {\n repoName = repoInfo.name[this.props.lang] || repoInfo.name.en;\n } else {\n // @ts-expect-error deprecated\n repoName = repoInfo.name as string;\n }\n }\n } else if (\n // new style with multiple active repositories\n this.props.systemConfig.common.activeRepo &&\n typeof this.props.systemConfig.common.activeRepo !== 'string'\n ) {\n repoName = this.props.systemConfig.common.activeRepo\n .map(repo => {\n const repoInfo = repositories && repositories[repo]?.json?._repoInfo;\n if (repoInfo?.name) {\n if (repoInfo.name && typeof repoInfo.name === 'object') {\n return repoInfo.name[this.props.lang] || repoInfo.name.en;\n }\n // @ts-expect-error deprecated\n return repoInfo.name as string;\n }\n return repo;\n })\n .join(', ');\n }\n }\n\n const context = this.getContext(this.state.descWidth < 50);\n\n if (!this.cache.listOfVisibleAdapter) {\n this.buildCacheTimer =\n this.buildCacheTimer ||\n setTimeout(() => {\n this.buildCacheTimer = null;\n this.buildCache(context);\n }, 0);\n }\n\n return (\n <TabContainer>\n {this.state.update && (\n <Grid2>\n <LinearProgress />\n </Grid2>\n )}\n\n {this.renderHeader()}\n\n <AdaptersList\n stableRepo={stableRepo}\n repoName={repoName}\n context={context}\n noTranslation={this.props.noTranslation}\n systemConfig={this.props.systemConfig}\n tableViewMode={this.state.tableViewMode}\n oneListView={this.state.oneListView}\n update={this.state.update}\n updateListFilter={this.state.updateList}\n searchFilter={this.state.search}\n installedListFilter={this.state.installedList}\n cachedAdapters={this.cache.adapters}\n categories={this.state.categories}\n categoriesExpanded={this.state.categoriesExpanded}\n listOfVisibleAdapter={this.cache.listOfVisibleAdapter}\n toggleCategory={category => this.toggleCategory(category)}\n clearAllFilters={(onlyUpdate?: boolean) => this.clearAllFilters(onlyUpdate)}\n descWidth={this.state.descWidth}\n sortByName={this.state.filterTiles === 'Name A-Z'}\n sortPopularFirst={context.sortPopularFirst}\n sortRecentlyUpdated={context.sortRecentlyUpdated}\n commandRunning={this.props.commandRunning}\n />\n\n {this.getUpdater()}\n {this.getStatistics()}\n {this.renderSlowConnectionWarning()}\n {this.renderGitHubInstallDialog(context)}\n {this.renderWebserverUpgrade()}\n {this.renderDialogs(context)}\n </TabContainer>\n );\n }\n}\n\nexport default Adapters;\n"],"names":["styles","button","marginLeft","marginRight","icon","_ref","arrayItem","title","onClick","value","contained","buttonIcon","icons","t","translateSuffix","noTranslation","anchorEl","setAnchorEl","useState","_jsxs","_Fragment","children","_jsx","Tooltip","slotProps","popper","sx","pointerEvents","Button","style","variant","color","e","currentTarget","MaterialDynamicIcon","iconName","Menu","keepMounted","open","Boolean","onClose","map","_ref2","idx","name","MenuItem","selected","disabled","className","concat","placeContent","ICON_CACHE","objIcon","All","AllInclusive","messaging","Message","communication","WifiTethering","general","Apps","logic","VpnKey","alarm","NotificationsActive","SystemUpdateAlt","EmojiSymbols","multimedia","PermMedia","network","SettingsEthernet","storage","Storage","visualization","Visibility","SettingsBrightness","DateRange","energy","BatteryChargingFull","garden","FilterVintage","geoposition","LocationOn","hardware","Phonelink","health","Favorite","household","House","infrastructure","Apartment","lighting","EmojiObjects","protocols","DialerSip","utility","PhonelinkSetup","vehicle","AirportShuttle","BubbleChart","Widgets","weather","Brightness6","metering","LinearScale","adapter","socket","url","setUrl","useEffect","Promise","getObject","then","obj","_obj$common","common","src","alt","Element","Help","smallAvatar","width","height","listItem","theme","mb","background","palette","pl","toVersion","mode","fontWeight","ml","updateDone","opacity","minWidthCss","minWidth","wrapperButton","typography","paddingRight","versions","display","closeButton","position","right","top","grey","languageButton","languageButtonActive","primary","main","versionHeader","borderRadius","repoStableVersionText","repoLatestVersionText","AdaptersUpdater","Component","constructor","props","super","updateAvailable","initialVersions","currentRef","current","this","detectUpdates","forEach","installed","version","state","showNews","React","onUpdateSelected","isUpdateAvailable","options","oldVersion","newVersion","semver","_unused","console","warn","Object","keys","repository","_installed","ignoreVersion","checkCondition","messages","log","push","sort","getNews","adapterObj","news","en","lang","_unused2","renderOneAdapter","checked","includes","finished","inProcess","image","localIcon","ListItem","dense","Utils","getStyle","updated","ref","secondaryAction","stopped","CircularProgress","Checkbox","edge","tabIndex","disableRipple","pos","indexOf","splice","ListItemIcon","Avatar","ListItemText","item","join","secondary","Box","component","IconButton","I18n","setState","fromVersion","size","InfoIcon","getReactNews","result","stableVersion","latestVersion","repoInfo","_repoInfo","_this$props$repositor","_this$props$repositor2","_this$props$repositor3","_this$props$repositor4","stable","split","line","trim","replace","filter","Grid2","Typography","index","_unused3","renderShowNews","Dialog","DialogTitle","CloseIcon","getLanguage","toggleTranslation","_objectSpread","undefined","LanguageIcon","DialogContent","dividers","container","direction","spacing","wrap","length","gutterBottom","DialogActions","startIcon","render","setTimeout","_this$currentRef$curr","scrollIntoView","List","root","dialogRoot","wrapperHead","justifyContent","checkbox","appBar","flexWrap","bottom","overflow","content","p","AdaptersUpdaterDialog","onAdapterFinished","processList","debug","window","_localStorage","localStorage","getItem","stopOnError","closeOnFinished","currentVersion","updateAdapter","cb","onStartUpdate","onSetCommandRunning","updateAdapters","shift","maxWidth","fullWidth","scroll","id","indeterminate","Command","noSpacing","ready","host","currentHost","cmd","onFinished","errorFunc","Toolbar","disableGutters","FormControlLabel","control","onChange","setItem","label","autoFocus","CheckIcon","CancelIcon","HostAdapterWorker","GenericWorker","prefix","adapterName","objects","getHost","a11yProps","backgroundColor","paper","tabPaper","padding","mt","fontSize","warningText","noteText","marginTop","errorTextNoGit","listIcon","listIconWithMargin","tabSelected","contrastText","GitHubInstallDialog","customHistory","customHistoryStr","_localstorage","JSON","parse","autoCompleteValue","currentTab","renderNpm","Paper","alignItems","target","SmsIcon","Autocomplete","_","newValue","getList","getOptionLabel","option","_option$name","renderInput","params","_this$state$autoCompl","_params","InputProps","startAdornment","InputAdornment","Icon","TextField","renderOption","_option$name2","mr","flexShrink","renderGitHub","getOptionDisabled","nogit","_option$name3","_option$name4","_this$state$autoCompl2","renderCustom","onInputChange","flexGrow","stopPropagation","it","stringify","Delete","freeSolo","onKeyUp","event","key","unshift","pop","installFromUrl","helperText","adapters","arr","i","arrayFlat","categories","category","el","controller","parts","extIcon","meta","readme","toString","titleLang","a","b","_this$state$autoCompl3","closeInit","AppBar","Tabs","_e","newTab","indicatorColor","Tab","wrapped","GithubIcon","UrlIcon","async","_this$state$autoCompl4","_url","_this$state$autoCompl5","fullAdapterName","upload","error","message","formControl","pr","messageText","messageColor_warn","messageColor_error","messageColor_info","messageTitle_warn","messageTitle_error","messageTitle_info","deps","m","AddInstanceDialog","instanceNumbers","adapterObject","instances","componentDidMount","instancesWorker","getObjects","_instances$id","_instances$id$common","substring","lastIndexOf","getAvailableInstances","checkDependencies","dependencies","arguments","array","installedVersion","rightVersion","getText","text","renderOneMessage","level","link","focus","IconWeb","linkText","renderMessages","marginBottom","checkDeps","expertMode","HostSelectors","tooltip","hostsWorker","setCurrentHost","hostName","hostId","onHostChange","FormControl","InputLabel","Select","labelId","currentInstance","onInstanceChange","AddIcon","extractUrlLink","adapterRepo","_adapterRepo$licenseI","licenseInformation","licenseUrl","AdapterInstallDialog","showDialog","showLicenseDialog","addInstanceHostName","addInstanceId","addInstanceDialog","renderLicenseDialog","context","LicenseDialog","licenseType","addInstance","catch","alert","customUrl","compactInstances","instance","resolve","reject","executeCommand","exitCode","Error","getDependencies","_adapter$dependencies","_adapter$globalDepend","Array","isArray","globalDependencies","nodeVersion","node","dependency","entry","checkVersion","includePrerelease","installedGlobal","nodeJsVersion","renderAddInstanceDialog","onAddInstance","_adapter$licenseInfor","license","renderDialogs","nameDiv","categoryName","cursor","green","blue","marginRight5","installedCount","TableRow","hover","TableCell","Grid","onToggle","expanded","ExpandMoreIcon","ChevronRightIcon","colSpan","descHidden","count","rating","listRating","listTime","fontStyle","list","listOwn","dark","listTitle","pt","pb","textAlign","languageFilter","ratingTextControl","ratingLanguageControl","noComments","commentCount","float","infoText","infoTextContainer","paddingBottom","gap","LANGUAGES","RatingDialog","ratingNumber","ratingComment","votings","ratingLang","filterLang","commentsByLanguage","fetch","uuid","res","json","ts","comments","comment","r","setAdapterRating","method","headers","redirect","body","update","renderInfoText","renderComments","_this$state$votings","found","find","disablePadding","ListItemAvatar","Rating","readOnly","defaultValue","Date","toLocaleString","_this$props$currentRa","_this$props$currentRa2","_this$props$currentRa3","currentRating","_event","input","endAdornment","htmlInput","maxLength","paddingTop","toLocaleDateString","_item","VoteIcon","AdapterDeletionDialog","deleteCustom","deleteCustomSupported","checkFeatureSupported","supportCustoms","ICONS","none","HorizontalRule","patch","KeyboardDoubleArrowUp","minor","North","major","VerticalAlignTop","AutoUpgradeConfigDialog","currentSavedPolicy","policy","repositories","supported","getConfiguredRepositories","getCurrentAutoUpgradeSetting","_sysConfig$common","sysConfig","adapterAutoUpgrade","activeRepos","entries","active","repoName","getAdapterId","automaticUpgrade","save","setObject","IsVisible","AUTO_UPGRADE_SETTINGS","AUTO_UPGRADE_OPTIONS_MAPPING","InfoBox","type","Save","genericStyles","hidden","buttonUpdate","border","transition","buttonUpdateIcon","classPoll","classPush","classAssumption","transform","marginLeft5","ratingSet","sentry","objectFit","wrongDependencies","red","header","modalDialog","overflowY","currentVersionText","containerVersion","containerSpecificVersion","versionWarn","amber","cardContentFlexBetween","cardContentFlex","AdapterGeneric","assign","autoUpgradeDialogOpen","showUpdateDialog","adapterDeletionDialog","adapterInstallSpecificVersion","showInstallVersion","showSetRating","renderImage","imageProps","other","_objectWithoutProperties","_excluded","img","backgroundImage","onError","onerror","renderAddInstanceButton","allowAdapterInstall","commandRunning","cached","rightOs","renderAutoUpgradeButton","_adapterObj$common","hostAdapterWorker","autoUpgrade","KeyboardArrowUp","renderReadmeButton","allowAdapterReadme","openInfoDialog","HelpIcon","renderRating","_this$props$context$r","_this$props$context$r2","_this$props$context$r3","allowAdapterRating","isTileView","sortPopularFirst","sortRecentlyUpdated","stat","precision","renderConnectionType","_this$props$context$r4","connectionType","CloudIcon","CloudOffIcon","renderDataSource","_this$props$context$r5","dataSource","ArrowUpwardIcon","ArrowDownwardIcon","RemoveIcon","renderLicenseInfo","_adapter$licenseInfor2","_adapter$licenseInfor3","_adapter$licenseInfor4","Link","href","rel","MonetizationOn","renderSentryInfo","_this$props$context$r6","_this$props$context$r7","plugins","CardMedia","sentryIcon","renderVersion","allowAdapterUpdate","rightDependencies","RefreshIcon","renderInstalledVersion","isRow","installedFrom","enabledCount","enabled","startsWith","GitHubIcon","renderUploadButton","onUpload","PublishIcon","renderDeleteButton","allowAdapterDelete","DeleteForeverIcon","renderInstallSpecificVersionButton","AddToPhotosIcon","renderRebuildButton","rebuild","BuildIcon","renderAutoUpdateDialog","adminHost","renderUpdateAdapterDialog","_this$props$context$i","AdapterUpdateDialog","rightDependenciesFunc","onUpdate","isStable","onIgnore","_id","removeUpdateAvailable","formatNews","renderAdapterInstallVersion","_this$props$context$r8","_this$props$context$r9","_this$props$context$r10","_this$props$context$r11","CustomModal","applyButton","LinkIcon","Card","CardContent","renderSetRatingDialog","updateRating","renderAdapterDeletionDialog","delete","_adapter$docs","docs","AdminUtils","getDocsLinkForAdapter","all","_adapter$licenseInfor5","setAdminUpgradeTo","minHeight","default","boxShadow","flexDirection","imageBlock","margin","zIndex","left","backgroundSize","fab","greenText","success","collapse","close","footerBlock","versionDate","alignSelf","verticalAlign","adapterWithAgo","description","cardContent","cardContentDiv","cardContent2","cardMargin10","availableVersion","curdContentFlexCenter","openCollapse","renderInfoCard","desc","renderCardMedia","available","daysAgoText","Fab","MoreVertIcon","renderCardContent","paddingNone","flex","nameCell","wordWrap","WIDTHS","emptyBlock","install","SUM","reduce","s","containerNotFullHeight","containerFullHeight","table","tableLayout","whiteSpace","textOverflow","viewModeDiv","flexFlow","AdaptersList","lastRenderCounter","descWidth","systemConfig","tableViewMode","oneListView","categoriesExpanded","cachedAdapters","sortByName","renderCounter","listOfVisibleAdapter","getRow","AdapterRow","getRows","LinearProgress","rows","rest","Fragment","AdapterCategoryRow","translation","toggleCategory","searchFilter","installedListFilter","clearAllFilters","updateListFilter","UpdateIcon","getTiles","items","_this$props$context$i2","AdapterTile","flexBasis","renderTileView","stableRepo","marginX","renderTableView","TabContent","TableContainer","Table","stickyHeader","TableHead","BUTTONS_WIDTH","TableBody","getDerivedStateFromProps","changed","shouldComponentUpdate","_nextProps","nextState","_this$props$systemCon","_this$props$systemCon2","activeRepo","AdminUpdater","updating","interval","startTimeout","textareaRef","response","starting","upAgain","location","protocol","setUpdating","onUpdating","getWebserverParams","adminInstance","useHttps","native","secure","port","certPrivateName","certPrivate","certPublicName","certPublic","currentAdminVersion","upgradeAdapterWithWebserver","setInterval","checkStatus","componentWillUnmount","clearInterval","clearTimeout","running","stderr","stdout","plainBody","endsWith","waitForAdapterStart","scrollTop","scrollHeight","_this$state$response","_this$state$response3","_this$state$response4","_this$state$response5","_this$state$response6","reason","resize","themeType","boxSizing","fontFamily","_this$state$response2","reload","ReloadIcon","grow","updateAllButton","counters","infoAdapters","FILTERS","notByList","Adapters","inputRef","countRef","wordCache","cache","listOfVisibleAdapterLength","allAdapters","installedAdapters","recentUpdatedAdapters","buildCacheTimer","updateTimeout","typingTimer","hostsTimer","onHostAdapterTimer","tempAdapters","tempInstalled","tempInstances","translate","word","arg1","arg2","onAdaptersChanged","events","match","adminTab","attr","analyseInstalled","installedLocal","calculateInfo","_deps","_adapterName","onHostAdapterChanged","_events","forceUpdate","adminUpgradeTo","lastUpdate","hostData","compactRepositories","hostOs","init","filterConnectionType","search","updateList","installedList","categoriesTiles","filterTiles","gitHubInstallDialog","filteredList","showUpdater","showStatistics","readTimeoutMs","SlowConnectionWarningDialogClass","getReadTimeoutMs","showSlowConnectionWarning","forceUpdateAdapters","triggerUpdate","ratings","createRef","renderSlowConnectionWarning","SlowConnectionWarningDialog","updateAll","registerHandler","filterAdapters","adaptersWorker","bigUpdate","indicateUpdate","getAdapters","getAdaptersInfo","componentDidUpdate","getDescWidth","innerHTML","unregisterHandler","destroy","repositoryEntry","getInstalled","hosts","getHosts","alive","getState","val","isForceUpdate","getRepository","repo","getWordVotes","votes","v","getAdapterTitle","titleObj","toLowerCase","sortAdapters","titles","daysAgo","exact","_compactRepositories","_hostData","_hostData2","os","categoriesSorted","_unused4","_adapters$adapterName","_adapters$adapterName2","now","_ratings","_adapter$rating","keywords","c","installedInGroup","Math","round","getTime","categoryType","_unused5","_this$props$adminGuiC","getHostInfo","adminGuiConfig","admin","_ratings2","getRatings","getCompactInstances","getCompactSystemRepositories","oldState","handleFilterChange","expandAll","collapseAll","listTable","changeViewMode","changeUpdateList","changeInstalledList","onlyInstalled","changeFilterTiles","changeCategoriesTiles","_adapter$keywords","titleM","start","onlyUpdate","removeItem","getContext","buildCache","textDaysAgo0","textDaysAgo1","textDaysAgo2","textDaysAgo","cat","show","_adapter$plugins","daysAgo10","_daysAgo10","toISOString","getUpdater","menuOpened","document","scrollWidth","menuClosed","getStatistics","paddingLeft","renderGitHubInstallDialog","renderHeader","_this$props$adminGuiC2","updateAllButtonAvailable","TabHeader","ViewModuleIcon","ViewListIcon","FolderOpenIcon","FolderIcon","ListIcon","StarIcon","config","gitHubInstall","CustomSelectButton","sm","md","renderWebserverUpgrade","isUpdating","_this$state$compactRe","_this$state$compactRe2","isStableRepository","every","_repositories$repo","_repositories$repo$js","_repositories$repo$js2","_repositories$this$pr","_repositories$this$pr2","_repositories$this$pr3","_repositories$this$pr4","_repositories$this$pr5","_repositories$repo2","_repositories$repo2$j","TabContainer"],"sourceRoot":""}