@iobroker/dm-gui-components 9.1.2 → 9.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/build/Communication.js +4 -2
- package/build/Communication.js.map +1 -1
- package/build/DeviceCard.d.ts +3 -1
- package/build/DeviceCard.js +5 -1
- package/build/DeviceCard.js.map +1 -1
- package/build/DeviceList.d.ts +8 -0
- package/build/DeviceList.js +58 -16
- package/build/DeviceList.js.map +1 -1
- package/build/Utils.js +1 -1
- package/build/Utils.js.map +1 -1
- package/build/i18n/de.json +1 -0
- package/build/i18n/en.json +1 -0
- package/build/i18n/es.json +1 -0
- package/build/i18n/fr.json +1 -0
- package/build/i18n/it.json +1 -0
- package/build/i18n/nl.json +1 -0
- package/build/i18n/pl.json +1 -0
- package/build/i18n/pt.json +1 -0
- package/build/i18n/ru.json +1 -0
- package/build/i18n/uk.json +1 -0
- package/build/i18n/zh-cn.json +1 -0
- package/package.json +3 -3
package/build/DeviceList.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DeviceList.js","sourceRoot":"./src/","sources":["DeviceList.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { type JSX } from 'react';\nimport {\n IconButton,\n InputAdornment,\n TextField,\n Toolbar,\n Tooltip,\n LinearProgress,\n Select,\n MenuItem,\n Box,\n Card,\n CardActionArea,\n CardContent,\n Typography,\n} from '@mui/material';\n\nimport {\n ArrowBack,\n Clear,\n QuestionMark,\n Refresh,\n FilterAlt,\n FilterAltOff,\n SystemUpdateAlt,\n BatteryAlert,\n} from '@mui/icons-material';\n\nimport { I18n, DeviceTypeIcon, Icon, InfoBox } from '@iobroker/adapter-react-v5';\nimport type { DeviceId, DeviceInfo, DeviceStatus, InstanceDetails } from './protocol/api';\n\nimport DeviceCard, { DeviceCardSkeleton, type DeviceFilterField } from './DeviceCard';\nimport { getTranslation } from './Utils';\nimport Communication, { type CommunicationProps, type CommunicationState } from './Communication';\nimport InstanceActionButton from './InstanceActionButton';\n\nimport de from './i18n/de.json';\nimport en from './i18n/en.json';\nimport ru from './i18n/ru.json';\nimport pt from './i18n/pt.json';\nimport nl from './i18n/nl.json';\nimport fr from './i18n/fr.json';\nimport it from './i18n/it.json';\nimport es from './i18n/es.json';\nimport pl from './i18n/pl.json';\nimport uk from './i18n/uk.json';\nimport zhCn from './i18n/zh-cn.json';\n\n/** Returns true if any of the device status objects carries a battery value */\nfunction hasBatteryStatus(status?: DeviceStatus | DeviceStatus[]): boolean {\n if (!status || typeof status === 'string') {\n return false;\n }\n const list = Array.isArray(status) ? status : [status];\n return list.some(entry => typeof entry !== 'string' && entry.battery !== undefined);\n}\n\ninterface DeviceListProps extends CommunicationProps {\n /** Instance to upload images to, like `adapterName.X` */\n uploadImagesToInstance?: string;\n /** Filter devices with this string */\n filter?: string;\n /** If this component is used in GUI with own toolbar. `false` if this list is used with multiple instances and true if only with one (in this case, it will monitor alive itself */\n embedded?: boolean;\n /** If embedded, this text is shown in the toolbar */\n title?: string;\n /** Style of a component that displays all devices */\n style?: React.CSSProperties;\n /** Use small cards for devices */\n smallCards?: boolean;\n /** To trigger the reload of devices, just change this variable */\n triggerLoad?: number;\n}\n\ninterface DeviceListState extends CommunicationState {\n devices: DeviceInfo[];\n totalDevices?: number;\n filter: string;\n filterText: string;\n instanceInfo: InstanceDetails | null;\n loading: boolean | null;\n alive: boolean | null;\n triggerLoad: number;\n groupKey: string;\n dmInstances: { [instanceName: string]: { title: string; icon: string; instance: number } } | null;\n apiVersionError: boolean;\n /** Show only devices that have an available update */\n onlyUpdatable: boolean;\n /** Show only devices that have a battery problem */\n onlyBatteryProblem: boolean;\n /** Device field the text filter applies to */\n filterField: DeviceFilterField;\n}\n\n/**\n * Device List Component\n */\nexport default class DeviceList extends Communication<DeviceListProps, DeviceListState> {\n static i18nInitialized = false;\n\n private lastInstance: string;\n\n private lastAliveSubscribe = '';\n\n private lastTriggerLoad = 0;\n\n private filterTimeout: ReturnType<typeof setTimeout> | null = null;\n\n private readonly language: ioBroker.Languages = I18n.getLanguage();\n\n constructor(props: DeviceListProps) {\n super(props);\n\n if (!DeviceList.i18nInitialized) {\n DeviceList.i18nInitialized = true;\n I18n.extendTranslations({\n en,\n de,\n ru,\n pt,\n nl,\n fr,\n it,\n es,\n pl,\n uk,\n 'zh-cn': zhCn,\n });\n }\n\n this.state = {\n ...this.state,\n devices: [],\n filter: '',\n filterText: '',\n instanceInfo: null,\n loading: null,\n alive: null,\n groupKey: '',\n dmInstances: null,\n apiVersionError: false,\n onlyUpdatable: window.localStorage.getItem('dm_onlyUpdatable') === 'true',\n onlyBatteryProblem: window.localStorage.getItem('dm_onlyBatteryProblem') === 'true',\n filterField: (window.localStorage.getItem('dm_filterField') as DeviceFilterField) || 'name',\n };\n\n if (this.props.selectedInstance === undefined) {\n // Start with the root page that shows all instances as cards\n this.state = { ...this.state, selectedInstance: '' };\n }\n\n this.lastInstance = this.state.selectedInstance;\n this.lastTriggerLoad = this.props.triggerLoad || 0;\n }\n\n setStateAsync(state: Partial<DeviceListState>): Promise<void> {\n return new Promise<void>(resolve => this.setState(state as DeviceListState, resolve));\n }\n\n private async loadAdapters(): Promise<void> {\n await this.props.socket.waitForFirstConnection();\n\n console.log('Loading adapters...');\n const res = await this.props.socket.getObjectViewSystem('instance', 'system.adapter.', 'system.adapter.\\u9999');\n const dmInstances: { [instanceName: string]: { title: string; icon: string; instance: number } } = {};\n for (const id in res) {\n if (!res[id].common.supportedMessages?.deviceManager) {\n continue;\n }\n\n const instanceName = id.substring('system.adapter.'.length);\n try {\n // Check if the instance is alive by getting the state alive\n const alive = await this.props.socket.getState(`system.adapter.${instanceName}.alive`);\n if (!alive?.val) {\n continue;\n }\n\n const instance = parseInt(instanceName.split('.').pop() || '0') || 0;\n const common = res[id].common;\n const adapterName = instanceName.split('.')[0];\n dmInstances[instanceName] = {\n title: common.titleLang ? this.getText(common.titleLang) : common.title || adapterName,\n icon: common.icon ? `./adapter/${adapterName}/${common.icon}` : common.extIcon || '',\n instance,\n };\n } catch (error) {\n console.error(error);\n }\n }\n\n if (Object.keys(dmInstances).length === 1) {\n // With only one instance, select it directly and do not show the root page\n const selectedInstance = Object.keys(dmInstances)[0];\n await this.setStateAsync({\n dmInstances,\n selectedInstance: selectedInstance,\n groupKey: window.localStorage.getItem(`dm_group_${selectedInstance}`) || '',\n });\n } else {\n await this.setStateAsync({ dmInstances });\n }\n }\n\n private selectInstance(instanceId: string): void {\n window.localStorage.setItem('dmSelectedInstance', instanceId);\n this.setState({\n selectedInstance: instanceId,\n groupKey: window.localStorage.getItem(`dm_group_${instanceId}`) || '',\n });\n }\n\n private backToInstancesList(): void {\n window.localStorage.removeItem('dmSelectedInstance');\n this.setState({\n selectedInstance: '',\n devices: [],\n totalDevices: undefined,\n instanceInfo: null,\n alive: null,\n groupKey: '',\n filter: '',\n filterText: '',\n apiVersionError: false,\n });\n }\n\n private refreshInstanceList(): void {\n this.setState({ dmInstances: null }, () => this.loadAdapters().catch(console.error));\n }\n\n async componentDidMount(): Promise<void> {\n let alive = false;\n // If an instance selector must be shown\n if (this.props.selectedInstance === undefined) {\n // show instance selector\n await this.loadAdapters();\n }\n\n if (this.state.alive === null && this.state.selectedInstance) {\n try {\n // check if the instance is alive\n const stateAlive = await this.props.socket.getState(\n `system.adapter.${this.state.selectedInstance}.alive`,\n );\n if (stateAlive?.val) {\n alive = true;\n }\n } catch (error) {\n console.error(error);\n }\n this.lastAliveSubscribe = this.state.selectedInstance;\n this.setState({ alive }, () =>\n this.props.socket.subscribeState(\n `system.adapter.${this.state.selectedInstance}.alive`,\n this.aliveHandler,\n ),\n );\n } else if (this.state.alive !== null) {\n alive = this.state.alive;\n }\n\n if (alive) {\n try {\n await this.loadAllData();\n } catch (error) {\n console.error(error);\n }\n }\n }\n\n componentWillUnmount(): void {\n if (this.state.selectedInstance) {\n this.props.socket.unsubscribeState(\n `system.adapter.${this.state.selectedInstance}.alive`,\n this.aliveHandler,\n );\n }\n }\n\n aliveHandler: ioBroker.StateChangeHandler = (id: string, state: ioBroker.State | null | undefined): void => {\n if (this.state.selectedInstance && id === `system.adapter.${this.state.selectedInstance}.alive`) {\n const alive = !!state?.val;\n if (alive !== this.state.alive) {\n this.setState({ alive }, () => {\n if (alive) {\n this.componentDidMount().catch(console.error);\n }\n });\n }\n }\n };\n\n override async loadAllData(): Promise<void> {\n await this.loadInstanceInfos();\n this.loadDeviceList();\n }\n\n override async loadInstanceInfos(): Promise<InstanceDetails> {\n const instanceInfo = await super.loadInstanceInfos();\n return new Promise<InstanceDetails>(resolve =>\n this.setState(\n { instanceInfo, apiVersionError: !['v1', 'v2', 'v3'].includes(instanceInfo.apiVersion) },\n () => resolve(instanceInfo),\n ),\n );\n }\n\n /**\n * Load devices\n */\n override loadDeviceList(): void {\n this.setState({ loading: true }, async () => {\n console.log(`Loading devices for ${this.state.selectedInstance}...`);\n let alive = this.state.alive;\n\n if (this.state.selectedInstance !== this.lastAliveSubscribe) {\n if (this.lastAliveSubscribe) {\n // unsubscribe from the old instance\n this.props.socket.unsubscribeState(\n `system.adapter.${this.lastAliveSubscribe}.alive`,\n this.aliveHandler,\n );\n }\n\n this.lastAliveSubscribe = this.state.selectedInstance;\n\n if (this.state.selectedInstance) {\n try {\n // check if the instance is alive\n const stateAlive = await this.props.socket.getState(\n `system.adapter.${this.state.selectedInstance}.alive`,\n );\n if (stateAlive?.val) {\n alive = true;\n }\n } catch (error) {\n console.error(error);\n }\n await this.props.socket.subscribeState(\n `system.adapter.${this.state.selectedInstance}.alive`,\n this.aliveHandler,\n );\n } else {\n alive = false;\n }\n }\n\n let devices: DeviceInfo[] = [];\n try {\n this.setState({ devices, loading: !!alive, alive });\n if (alive) {\n await this.loadDevices((batch, total) => {\n devices = devices.concat(batch);\n this.setState({ devices, loading: true, totalDevices: total });\n console.log(`Loaded ${devices.length} of ${total} devices...`);\n });\n }\n } catch (error) {\n console.error(error);\n devices = [];\n }\n\n this.setState({ devices, loading: false, totalDevices: devices.length });\n console.log(`Loaded ${devices.length} devices for ${this.state.selectedInstance}`);\n });\n }\n\n override updateDevice(update: DeviceInfo): void {\n const updateId = JSON.stringify(update.id);\n this.setState({ devices: this.state.devices.map(d => (JSON.stringify(d.id) === updateId ? update : d)) });\n }\n\n override deleteDevice(deviceId: DeviceId): void {\n const deleteId = JSON.stringify(deviceId);\n const devices = this.state.devices.filter(d => JSON.stringify(d.id) !== deleteId);\n const totalDevices =\n this.state.totalDevices && devices.length < this.state.devices.length\n ? this.state.totalDevices - 1\n : undefined;\n this.setState({ devices, totalDevices });\n }\n\n getText(text: ioBroker.StringOrTranslated): string {\n if (typeof text === 'object') {\n return text[this.language] || text.en;\n }\n\n return text;\n }\n\n handleFilterChange(filter: string): void {\n this.setState({ filterText: filter });\n if (this.filterTimeout) {\n clearTimeout(this.filterTimeout);\n }\n this.filterTimeout = setTimeout(() => {\n this.filterTimeout = null;\n this.setState({ filter });\n }, 250);\n }\n\n renderGroups(\n groups: { name: string; value: string; count: number; icon?: React.JSX.Element | string | null }[] | undefined,\n ): React.JSX.Element | null {\n if (!groups?.length) {\n return null;\n }\n\n return (\n <Select\n style={{ minWidth: 120, marginRight: 8, marginTop: 12.5 }}\n variant=\"standard\"\n value={this.state.groupKey || '_'}\n renderValue={value => {\n if (value === '_') {\n value = '';\n }\n const g = groups.find(g => g.value === value);\n return (\n <div style={{ display: 'flex', alignItems: 'center', gap: 8 }}>\n {g?.icon || <div style={{ width: 24 }} />}\n {g?.name || value}\n </div>\n );\n }}\n onChange={e => {\n if (e.target.value) {\n window.localStorage.setItem(`dm_group_${this.state.selectedInstance}`, e.target.value);\n } else {\n window.localStorage.removeItem(`dm_group_${this.state.selectedInstance}`);\n }\n this.setState({ groupKey: e.target.value === '_' ? '' : e.target.value });\n }}\n >\n {groups.map(g => (\n <MenuItem\n value={g.value || '_'}\n key={g.value || '_'}\n style={{ display: 'flex', alignItems: 'center', gap: 8 }}\n >\n {g.icon || <div style={{ width: 24 }} />}\n {g.name}\n </MenuItem>\n ))}\n </Select>\n );\n }\n\n renderInstanceCards(): React.JSX.Element[] {\n if (!this.state.dmInstances) {\n return [\n <LinearProgress\n key=\"loadingInstances\"\n style={{ width: '100%' }}\n />,\n ];\n }\n\n const instanceIds = Object.keys(this.state.dmInstances);\n if (!instanceIds.length) {\n return [\n <div\n style={{ padding: 25 }}\n key=\"noInstances\"\n >\n <span>{getTranslation('noInstancesFoundText')}</span>\n </div>,\n ];\n }\n\n const backgroundColor = this.props.theme.palette.mode === 'dark' ? '#0b0b0b' : '#d5d5d5';\n\n if (this.props.smallCards) {\n return instanceIds.map(id => {\n const info = this.state.dmInstances![id];\n return (\n <Card\n key={id}\n sx={{ width: 200, margin: '5px', backgroundColor }}\n >\n <CardActionArea\n onClick={() => this.selectInstance(id)}\n style={{ height: '100%' }}\n >\n <CardContent\n style={{\n height: '100%',\n display: 'flex',\n alignItems: 'center',\n gap: 8,\n padding: 8,\n }}\n >\n {info.icon ? (\n <Icon\n src={info.icon}\n style={{ width: 32, height: 32, flexShrink: 0 }}\n />\n ) : (\n <QuestionMark style={{ width: 32, height: 32, flexShrink: 0 }} />\n )}\n <div style={{ overflow: 'hidden' }}>\n <Typography\n variant=\"body1\"\n noWrap\n style={{ fontSize: 14, fontWeight: 'bold' }}\n >\n {id}\n </Typography>\n {info.title ? (\n <Typography\n variant=\"caption\"\n color=\"textSecondary\"\n noWrap\n component=\"div\"\n >\n {info.title}\n </Typography>\n ) : null}\n </div>\n </CardContent>\n </CardActionArea>\n </Card>\n );\n });\n }\n\n return instanceIds.map(id => {\n const info = this.state.dmInstances![id];\n return (\n <Card\n key={id}\n sx={{ width: 240, margin: '10px', backgroundColor }}\n >\n <CardActionArea\n onClick={() => this.selectInstance(id)}\n style={{ height: '100%' }}\n >\n <CardContent\n style={{\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n gap: 8,\n }}\n >\n {info.icon ? (\n <Icon\n src={info.icon}\n style={{ width: 64, height: 64 }}\n />\n ) : (\n <QuestionMark style={{ width: 64, height: 64 }} />\n )}\n <Typography\n variant=\"h6\"\n style={{ textAlign: 'center', wordBreak: 'break-all' }}\n >\n {id}\n </Typography>\n {info.title ? (\n <Typography\n variant=\"body2\"\n color=\"textSecondary\"\n style={{ textAlign: 'center' }}\n >\n {info.title}\n </Typography>\n ) : null}\n </CardContent>\n </CardActionArea>\n </Card>\n );\n });\n }\n\n /** The selected filter field, falling back to `name` if the stored field is not present on any current device */\n private getEffectiveFilterField(): DeviceFilterField {\n const field = this.state.filterField;\n if (field !== 'name' && this.state.devices.some(device => device[field] !== undefined)) {\n return field;\n }\n return 'name';\n }\n\n renderFilterFields(): React.JSX.Element | null {\n const fields: { value: DeviceFilterField; label: string }[] = [\n { value: 'name', label: getTranslation('name') },\n ];\n if (this.state.devices.some(device => device.identifier !== undefined)) {\n fields.push({\n value: 'identifier',\n label: this.getText(this.state.instanceInfo?.identifierLabel ?? 'ID'),\n });\n }\n if (this.state.devices.some(device => device.manufacturer !== undefined)) {\n fields.push({ value: 'manufacturer', label: getTranslation('manufacturer') });\n }\n if (this.state.devices.some(device => device.model !== undefined)) {\n fields.push({ value: 'model', label: getTranslation('model') });\n }\n\n // Only show the field selector when there is more than just the name to choose from\n if (fields.length < 2) {\n return null;\n }\n\n const current = this.getEffectiveFilterField();\n\n return (\n <Select\n variant=\"standard\"\n style={{ width: 130, flexShrink: 0 }}\n value={current}\n onChange={e => {\n const filterField = e.target.value as DeviceFilterField;\n this.setState({ filterField });\n window.localStorage.setItem('dm_filterField', filterField);\n }}\n >\n {fields.map(field => (\n <MenuItem\n value={field.value}\n key={field.value}\n >\n {field.label}\n </MenuItem>\n ))}\n </Select>\n );\n }\n\n // eslint-disable-next-line class-methods-use-this\n renderRootInfo(): React.JSX.Element {\n return (\n <InfoBox\n key=\"rootInfo\"\n type=\"info\"\n closeable\n storeId=\"dm_rootInfoClosed\"\n style={{ width: 'calc(100% - 20px)', margin: '0 10px 8px 10px' }}\n >\n {getTranslation('rootInfoText')}\n </InfoBox>\n );\n }\n\n renderContent(): JSX.Element | JSX.Element[] | null {\n const emptyStyle: React.CSSProperties = {\n padding: 25,\n };\n\n if ((this.props.triggerLoad || 0) !== this.lastTriggerLoad) {\n this.lastTriggerLoad = this.props.triggerLoad || 0;\n setTimeout(() => this.loadDeviceList(), 50);\n }\n\n // if instance changed\n if (this.lastInstance !== this.state.selectedInstance) {\n this.lastInstance = this.state.selectedInstance;\n setTimeout(async (): Promise<void> => {\n if (this.state.selectedInstance) {\n try {\n await this.loadAllData();\n } catch (error) {\n console.error(error);\n }\n } else {\n this.loadDeviceList();\n }\n }, 50);\n }\n if (this.props.selectedInstance && this.props.selectedInstance !== this.state.selectedInstance) {\n setTimeout(() => this.setState({ selectedInstance: this.props.selectedInstance! }), 50);\n }\n const deviceGroups: { name: string; value: string; count: number; icon?: React.JSX.Element | string | null }[] =\n [];\n const showRootPage =\n !this.props.embedded && this.props.selectedInstance === undefined && !this.state.selectedInstance;\n\n let list: React.JSX.Element[] | undefined;\n if (showRootPage) {\n list = this.renderInstanceCards();\n list.unshift(this.renderRootInfo());\n } else if (!this.props.embedded && !this.state.alive) {\n list = [\n <div\n style={emptyStyle}\n key=\"notAlive\"\n >\n <span>{getTranslation('instanceNotAlive')}</span>\n </div>,\n ];\n } else if (!this.state.devices.length && this.state.selectedInstance && !this.state.loading) {\n list = [\n <div\n style={emptyStyle}\n key=\"notFound\"\n >\n <span>{getTranslation('noDevicesFoundText')}</span>\n </div>,\n ];\n } else {\n // build a device types list\n let filteredDevices = this.state.devices;\n if (!this.state.loading && !this.props.embedded && filteredDevices.find(device => device.group)) {\n deviceGroups.push({\n name: I18n.t('All'),\n value: '',\n count: filteredDevices.length,\n icon: <FilterAltOff />,\n });\n filteredDevices.forEach(device => {\n if (device.group) {\n const type = deviceGroups.find(t => t.value === device.group?.key);\n if (type) {\n type.count++;\n } else {\n const icon = device.group.icon ? <DeviceTypeIcon src={device.group.icon} /> : null;\n\n deviceGroups.push({\n name: this.getText(device.group.name || device.group.key),\n value: device.group.key,\n count: 1,\n icon,\n });\n }\n }\n });\n const unknown = filteredDevices.filter(device => !device.group);\n if (unknown.length) {\n deviceGroups.push({\n name: I18n.t('Unknown'),\n value: '?',\n count: unknown.length,\n icon: <QuestionMark />,\n });\n }\n\n if (this.state.groupKey) {\n // filter out all devices belonging to this group\n if (this.state.groupKey === '?') {\n filteredDevices = filteredDevices.filter(device => !device.group?.key);\n } else {\n filteredDevices = filteredDevices.filter(device => device.group?.key === this.state.groupKey);\n }\n }\n }\n\n if (this.state.selectedInstance) {\n list = filteredDevices.map(device => (\n <DeviceCard\n key={JSON.stringify(device.id)}\n smallCards={this.props.smallCards ?? this.state.instanceInfo?.smallCards}\n filter={this.props.embedded ? this.props.filter : this.state.filter}\n alive={!!this.state.alive}\n id={device.id}\n identifierLabel={this.state.instanceInfo?.identifierLabel ?? 'ID'}\n device={device}\n instanceId={this.state.selectedInstance}\n uploadImagesToInstance={this.props.uploadImagesToInstance}\n deviceHandler={this.deviceHandler}\n controlHandler={this.controlHandler}\n controlStateHandler={this.controlStateHandler}\n socket={this.props.socket}\n themeName={this.props.themeName}\n themeType={this.props.themeType}\n theme={this.props.theme}\n isFloatComma={this.props.isFloatComma}\n dateFormat={this.props.dateFormat}\n onlyUpdatable={this.state.onlyUpdatable}\n onlyBatteryProblem={this.state.onlyBatteryProblem}\n filterField={this.props.embedded ? undefined : this.getEffectiveFilterField()}\n />\n ));\n if (this.state.loading) {\n const skeletons = (this.state.totalDevices ?? list.length + 1) - list.length;\n for (let i = 0; i < skeletons; i++) {\n list.push(\n <DeviceCardSkeleton\n key={`skeleton-${i}`}\n smallCards={this.props.smallCards ?? this.state.instanceInfo?.smallCards}\n theme={this.props.theme}\n />,\n );\n }\n } else if (this.state.devices.length > 0) {\n list.push(\n <Box\n key=\"filtered\"\n sx={{\n padding: '25px',\n '&:not(:first-child)': {\n display: 'none',\n },\n }}\n >\n <span>{getTranslation('allDevicesFilteredOut')}</span>\n </Box>,\n );\n }\n } else {\n list = [\n <div\n style={emptyStyle}\n key=\"selectInstance\"\n >\n <span>{getTranslation('selectInstanceText')}</span>\n </div>,\n ];\n }\n }\n\n if (this.props.embedded) {\n return (\n <>\n {this.state.loading ? <LinearProgress style={{ width: '100%' }} /> : null}\n {this.state.apiVersionError ? <div>{I18n.t('apiVersionError')}</div> : list}\n </>\n );\n }\n\n return (\n <div style={{ width: '100%', height: '100%', overflow: 'hidden' }}>\n <Toolbar\n variant=\"dense\"\n style={{ backgroundColor: '#777', display: 'flex' }}\n >\n {this.props.title}\n {this.props.selectedInstance === undefined &&\n this.state.dmInstances &&\n this.state.selectedInstance ? (\n <div style={{ display: 'flex', alignItems: 'center', gap: 8 }}>\n {Object.keys(this.state.dmInstances).length > 1 ? (\n <Tooltip\n title={getTranslation('backToInstancesList')}\n slotProps={{ popper: { sx: { pointerEvents: 'none' } } }}\n >\n <IconButton\n onClick={() => this.backToInstancesList()}\n size=\"small\"\n >\n <ArrowBack />\n </IconButton>\n </Tooltip>\n ) : null}\n {this.state.dmInstances[this.state.selectedInstance]?.icon ? (\n <Icon\n src={this.state.dmInstances[this.state.selectedInstance].icon}\n style={{ width: 24, height: 24 }}\n />\n ) : null}\n <span style={{ marginRight: 8 }}>{this.state.selectedInstance}</span>\n </div>\n ) : null}\n {this.props.selectedInstance === undefined && !this.state.selectedInstance ? (\n <Tooltip\n title={getTranslation('refreshInstanceList')}\n slotProps={{ popper: { sx: { pointerEvents: 'none' } } }}\n >\n <span>\n <IconButton\n onClick={() => this.refreshInstanceList()}\n disabled={!this.state.dmInstances}\n size=\"small\"\n >\n <Refresh />\n </IconButton>\n </span>\n </Tooltip>\n ) : null}\n {this.state.selectedInstance ? (\n <Tooltip\n title={getTranslation('refreshTooltip')}\n slotProps={{ popper: { sx: { pointerEvents: 'none' } } }}\n >\n <span>\n <IconButton\n onClick={() => this.loadAllData()}\n disabled={!this.state.alive || this.state.apiVersionError}\n size=\"small\"\n >\n <Refresh />\n </IconButton>\n </span>\n </Tooltip>\n ) : null}\n {!this.state.apiVersionError && this.state.alive && this.state.instanceInfo?.actions?.length ? (\n <div style={{ marginLeft: 20 }}>\n {this.state.instanceInfo.actions.map(action => (\n <InstanceActionButton\n key={action.id}\n action={action}\n instanceHandler={this.instanceHandler}\n />\n ))}\n </div>\n ) : null}\n\n <div style={{ flexGrow: 1 }} />\n\n {!this.state.apiVersionError && this.renderGroups(deviceGroups)}\n {!this.state.apiVersionError &&\n this.state.alive &&\n this.state.devices.some(device => device.update) ? (\n <Tooltip\n title={getTranslation('onlyUpdatableTooltip')}\n slotProps={{ popper: { sx: { pointerEvents: 'none' } } }}\n >\n <IconButton\n color={this.state.onlyUpdatable ? 'primary' : 'default'}\n onClick={() => {\n const onlyUpdatable = !this.state.onlyUpdatable;\n this.setState({ onlyUpdatable });\n window.localStorage.setItem('dm_onlyUpdatable', onlyUpdatable ? 'true' : 'false');\n }}\n size=\"small\"\n >\n <SystemUpdateAlt />\n </IconButton>\n </Tooltip>\n ) : null}\n {!this.state.apiVersionError &&\n this.state.alive &&\n this.state.devices.some(device => hasBatteryStatus(device.status)) ? (\n <Tooltip\n title={getTranslation('onlyBatteryProblemTooltip')}\n slotProps={{ popper: { sx: { pointerEvents: 'none' } } }}\n >\n <IconButton\n color={this.state.onlyBatteryProblem ? 'primary' : 'default'}\n onClick={() => {\n const onlyBatteryProblem = !this.state.onlyBatteryProblem;\n this.setState({ onlyBatteryProblem });\n window.localStorage.setItem(\n 'dm_onlyBatteryProblem',\n onlyBatteryProblem ? 'true' : 'false',\n );\n }}\n size=\"small\"\n >\n <BatteryAlert />\n </IconButton>\n </Tooltip>\n ) : null}\n {!this.state.apiVersionError && this.state.alive ? (\n <div style={{ display: 'flex', alignItems: 'center', gap: 8 }}>\n <FilterAlt style={{ color: '#fff' }} />\n {this.renderFilterFields()}\n <TextField\n variant=\"standard\"\n style={{ width: 200 }}\n size=\"small\"\n placeholder={getTranslation('filterLabelText')}\n onChange={e => this.handleFilterChange(e.target.value)}\n value={this.state.filterText}\n autoComplete=\"off\"\n slotProps={{\n input: {\n autoComplete: 'new-password',\n endAdornment: this.state.filterText ? (\n <InputAdornment position=\"end\">\n <IconButton\n tabIndex={-1}\n onClick={() => this.handleFilterChange('')}\n edge=\"end\"\n >\n <Clear />\n </IconButton>\n </InputAdornment>\n ) : null,\n },\n htmlInput: {\n autoComplete: 'off',\n },\n }}\n />\n </div>\n ) : null}\n <Typography\n style={{\n marginLeft: 16,\n fontWeight: 'bold',\n whiteSpace: 'nowrap',\n color: '#fff',\n }}\n >\n Config-Manager\n </Typography>\n </Toolbar>\n <div\n style={{\n width: '100%',\n height: 'calc(100% - 56px)',\n marginTop: 8,\n overflow: 'auto',\n display: 'flex',\n flexWrap: 'wrap',\n alignItems: 'stretch',\n alignContent: 'flex-start',\n ...this.props.style,\n }}\n >\n {this.state.loading ? <LinearProgress style={{ width: '100%' }} /> : null}\n {this.state.apiVersionError ? <div>{I18n.t('apiVersionError')}</div> : list}\n </div>\n </div>\n );\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"DeviceList.js","sourceRoot":"./src/","sources":["DeviceList.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { type JSX } from 'react';\nimport {\n IconButton,\n InputAdornment,\n TextField,\n Toolbar,\n Tooltip,\n LinearProgress,\n Select,\n MenuItem,\n Box,\n Card,\n CardActionArea,\n CardContent,\n Typography,\n} from '@mui/material';\n\nimport {\n ArrowBack,\n Clear,\n QuestionMark,\n Refresh,\n FilterAlt,\n FilterAltOff,\n SystemUpdateAlt,\n BatteryAlert,\n} from '@mui/icons-material';\n\nimport { I18n, DeviceTypeIcon, Icon, InfoBox } from '@iobroker/adapter-react-v5';\nimport type { DeviceId, DeviceInfo, DeviceStatus, InstanceDetails } from './protocol/api';\n\nimport DeviceCard, { DeviceCardSkeleton, type DeviceFilterField } from './DeviceCard';\nimport { getTranslation } from './Utils';\nimport Communication, { type CommunicationProps, type CommunicationState } from './Communication';\nimport InstanceActionButton from './InstanceActionButton';\n\nimport de from './i18n/de.json';\nimport en from './i18n/en.json';\nimport ru from './i18n/ru.json';\nimport pt from './i18n/pt.json';\nimport nl from './i18n/nl.json';\nimport fr from './i18n/fr.json';\nimport it from './i18n/it.json';\nimport es from './i18n/es.json';\nimport pl from './i18n/pl.json';\nimport uk from './i18n/uk.json';\nimport zhCn from './i18n/zh-cn.json';\n\n/** Returns true if any of the device status objects carries a battery value */\nfunction hasBatteryStatus(status?: DeviceStatus | DeviceStatus[]): boolean {\n if (!status || typeof status === 'string') {\n return false;\n }\n const list = Array.isArray(status) ? status : [status];\n return list.some(entry => typeof entry !== 'string' && entry.battery !== undefined);\n}\n\ninterface DeviceListProps extends CommunicationProps {\n /** Instance to upload images to, like `adapterName.X` */\n uploadImagesToInstance?: string;\n /** Filter devices with this string */\n filter?: string;\n /** If this component is used in GUI with own toolbar. `false` if this list is used with multiple instances and true if only with one (in this case, it will monitor alive itself */\n embedded?: boolean;\n /** If embedded, this text is shown in the toolbar */\n title?: string;\n /** Style of a component that displays all devices */\n style?: React.CSSProperties;\n /** Use small cards for devices */\n smallCards?: boolean;\n /** To trigger the reload of devices, just change this variable */\n triggerLoad?: number;\n}\n\ninterface DeviceListState extends CommunicationState {\n devices: DeviceInfo[];\n totalDevices?: number;\n filter: string;\n filterText: string;\n instanceInfo: InstanceDetails | null;\n loading: boolean | null;\n alive: boolean | null;\n triggerLoad: number;\n groupKey: string;\n dmInstances: { [instanceName: string]: { title: string; icon: string; instance: number } } | null;\n apiVersionError: boolean;\n /** Show only devices that have an available update */\n onlyUpdatable: boolean;\n /** Show only devices that have a battery problem */\n onlyBatteryProblem: boolean;\n /** Device field the text filter applies to */\n filterField: DeviceFilterField;\n /** Distinct resolved model values across the loaded devices (for the model filter dropdown) */\n modelOptions: string[];\n}\n\n/**\n * Device List Component\n */\nexport default class DeviceList extends Communication<DeviceListProps, DeviceListState> {\n static i18nInitialized = false;\n\n private lastInstance: string;\n\n private lastAliveSubscribe = '';\n\n private lastTriggerLoad = 0;\n\n private filterTimeout: ReturnType<typeof setTimeout> | null = null;\n\n /** Resolved model value per device (stringified id -> model), reported by the cards to build the model dropdown */\n private readonly modelValues = new Map<string, string>();\n\n private readonly language: ioBroker.Languages = I18n.getLanguage();\n\n constructor(props: DeviceListProps) {\n super(props);\n\n if (!DeviceList.i18nInitialized) {\n DeviceList.i18nInitialized = true;\n I18n.extendTranslations({\n en,\n de,\n ru,\n pt,\n nl,\n fr,\n it,\n es,\n pl,\n uk,\n 'zh-cn': zhCn,\n });\n }\n\n this.state = {\n ...this.state,\n devices: [],\n filter: '',\n filterText: '',\n instanceInfo: null,\n loading: null,\n alive: null,\n groupKey: '',\n dmInstances: null,\n apiVersionError: false,\n onlyUpdatable: window.localStorage.getItem('dm_onlyUpdatable') === 'true',\n onlyBatteryProblem: window.localStorage.getItem('dm_onlyBatteryProblem') === 'true',\n filterField: (window.localStorage.getItem('dm_filterField') as DeviceFilterField) || 'name',\n modelOptions: [],\n };\n\n if (this.props.selectedInstance === undefined) {\n // Start with the root page that shows all instances as cards\n this.state = { ...this.state, selectedInstance: '' };\n }\n\n this.lastInstance = this.state.selectedInstance;\n this.lastTriggerLoad = this.props.triggerLoad || 0;\n }\n\n setStateAsync(state: Partial<DeviceListState>): Promise<void> {\n return new Promise<void>(resolve => this.setState(state as DeviceListState, resolve));\n }\n\n private async loadAdapters(): Promise<void> {\n await this.props.socket.waitForFirstConnection();\n\n console.log('Loading adapters...');\n const res = await this.props.socket.getObjectViewSystem('instance', 'system.adapter.', 'system.adapter.\\u9999');\n const dmInstances: { [instanceName: string]: { title: string; icon: string; instance: number } } = {};\n for (const id in res) {\n if (!res[id].common.supportedMessages?.deviceManager) {\n continue;\n }\n\n const instanceName = id.substring('system.adapter.'.length);\n try {\n // Check if the instance is alive by getting the state alive\n const alive = await this.props.socket.getState(`system.adapter.${instanceName}.alive`);\n if (!alive?.val) {\n continue;\n }\n\n const instance = parseInt(instanceName.split('.').pop() || '0') || 0;\n const common = res[id].common;\n const adapterName = instanceName.split('.')[0];\n dmInstances[instanceName] = {\n title: common.titleLang ? this.getText(common.titleLang) : common.title || adapterName,\n icon: common.icon ? `./adapter/${adapterName}/${common.icon}` : common.extIcon || '',\n instance,\n };\n } catch (error) {\n console.error(error);\n }\n }\n\n if (Object.keys(dmInstances).length === 1) {\n // With only one instance, select it directly and do not show the root page\n const selectedInstance = Object.keys(dmInstances)[0];\n await this.setStateAsync({\n dmInstances,\n selectedInstance: selectedInstance,\n groupKey: window.localStorage.getItem(`dm_group_${selectedInstance}`) || '',\n });\n } else {\n await this.setStateAsync({ dmInstances });\n }\n }\n\n private selectInstance(instanceId: string): void {\n window.localStorage.setItem('dmSelectedInstance', instanceId);\n this.setState({\n selectedInstance: instanceId,\n groupKey: window.localStorage.getItem(`dm_group_${instanceId}`) || '',\n });\n }\n\n private backToInstancesList(): void {\n window.localStorage.removeItem('dmSelectedInstance');\n this.setState({\n selectedInstance: '',\n devices: [],\n totalDevices: undefined,\n instanceInfo: null,\n alive: null,\n groupKey: '',\n filter: '',\n filterText: '',\n apiVersionError: false,\n });\n }\n\n private refreshInstanceList(): void {\n this.setState({ dmInstances: null }, () => this.loadAdapters().catch(console.error));\n }\n\n async componentDidMount(): Promise<void> {\n let alive = false;\n // If an instance selector must be shown\n if (this.props.selectedInstance === undefined) {\n // show instance selector\n await this.loadAdapters();\n }\n\n if (this.state.alive === null && this.state.selectedInstance) {\n try {\n // check if the instance is alive\n const stateAlive = await this.props.socket.getState(\n `system.adapter.${this.state.selectedInstance}.alive`,\n );\n if (stateAlive?.val) {\n alive = true;\n }\n } catch (error) {\n console.error(error);\n }\n this.lastAliveSubscribe = this.state.selectedInstance;\n this.setState({ alive }, () =>\n this.props.socket.subscribeState(\n `system.adapter.${this.state.selectedInstance}.alive`,\n this.aliveHandler,\n ),\n );\n } else if (this.state.alive !== null) {\n alive = this.state.alive;\n }\n\n if (alive) {\n try {\n await this.loadAllData();\n } catch (error) {\n console.error(error);\n }\n }\n }\n\n componentWillUnmount(): void {\n if (this.state.selectedInstance) {\n this.props.socket.unsubscribeState(\n `system.adapter.${this.state.selectedInstance}.alive`,\n this.aliveHandler,\n );\n }\n }\n\n aliveHandler: ioBroker.StateChangeHandler = (id: string, state: ioBroker.State | null | undefined): void => {\n if (this.state.selectedInstance && id === `system.adapter.${this.state.selectedInstance}.alive`) {\n const alive = !!state?.val;\n if (alive !== this.state.alive) {\n this.setState({ alive }, () => {\n if (alive) {\n this.componentDidMount().catch(console.error);\n }\n });\n }\n }\n };\n\n override async loadAllData(): Promise<void> {\n await this.loadInstanceInfos();\n this.loadDeviceList();\n }\n\n override async loadInstanceInfos(): Promise<InstanceDetails> {\n const instanceInfo = await super.loadInstanceInfos();\n return new Promise<InstanceDetails>(resolve =>\n this.setState(\n { instanceInfo, apiVersionError: !['v1', 'v2', 'v3'].includes(instanceInfo.apiVersion) },\n () => resolve(instanceInfo),\n ),\n );\n }\n\n /**\n * Load devices\n */\n override loadDeviceList(): void {\n this.setState({ loading: true }, async () => {\n console.log(`Loading devices for ${this.state.selectedInstance}...`);\n let alive = this.state.alive;\n\n if (this.state.selectedInstance !== this.lastAliveSubscribe) {\n if (this.lastAliveSubscribe) {\n // unsubscribe from the old instance\n this.props.socket.unsubscribeState(\n `system.adapter.${this.lastAliveSubscribe}.alive`,\n this.aliveHandler,\n );\n }\n\n this.lastAliveSubscribe = this.state.selectedInstance;\n\n if (this.state.selectedInstance) {\n try {\n // check if the instance is alive\n const stateAlive = await this.props.socket.getState(\n `system.adapter.${this.state.selectedInstance}.alive`,\n );\n if (stateAlive?.val) {\n alive = true;\n }\n } catch (error) {\n console.error(error);\n }\n await this.props.socket.subscribeState(\n `system.adapter.${this.state.selectedInstance}.alive`,\n this.aliveHandler,\n );\n } else {\n alive = false;\n }\n }\n\n let devices: DeviceInfo[] = [];\n try {\n this.setState({ devices, loading: !!alive, alive });\n if (alive) {\n await this.loadDevices((batch, total) => {\n devices = devices.concat(batch);\n this.setState({ devices, loading: true, totalDevices: total });\n console.log(`Loaded ${devices.length} of ${total} devices...`);\n });\n }\n } catch (error) {\n console.error(error);\n devices = [];\n }\n\n this.setState({ devices, loading: false, totalDevices: devices.length });\n console.log(`Loaded ${devices.length} devices for ${this.state.selectedInstance}`);\n });\n }\n\n override updateDevice(update: DeviceInfo): void {\n const updateId = JSON.stringify(update.id);\n this.setState({ devices: this.state.devices.map(d => (JSON.stringify(d.id) === updateId ? update : d)) });\n }\n\n override deleteDevice(deviceId: DeviceId): void {\n const deleteId = JSON.stringify(deviceId);\n const devices = this.state.devices.filter(d => JSON.stringify(d.id) !== deleteId);\n const totalDevices =\n this.state.totalDevices && devices.length < this.state.devices.length\n ? this.state.totalDevices - 1\n : undefined;\n this.setState({ devices, totalDevices });\n }\n\n getText(text: ioBroker.StringOrTranslated): string {\n if (typeof text === 'object') {\n return text[this.language] || text.en;\n }\n\n return text;\n }\n\n handleFilterChange(filter: string): void {\n this.setState({ filterText: filter });\n if (this.filterTimeout) {\n clearTimeout(this.filterTimeout);\n }\n this.filterTimeout = setTimeout(() => {\n this.filterTimeout = null;\n this.setState({ filter });\n }, 250);\n }\n\n renderGroups(\n groups: { name: string; value: string; count: number; icon?: React.JSX.Element | string | null }[] | undefined,\n ): React.JSX.Element | null {\n if (!groups?.length) {\n return null;\n }\n\n return (\n <Select\n style={{ minWidth: 120, marginRight: 8, flexShrink: 0 }}\n variant=\"standard\"\n value={this.state.groupKey || '_'}\n renderValue={value => {\n if (value === '_') {\n value = '';\n }\n const g = groups.find(g => g.value === value);\n return (\n <div style={{ display: 'flex', alignItems: 'center', gap: 8 }}>\n {g?.icon || <div style={{ width: 24 }} />}\n {g?.name || value}\n </div>\n );\n }}\n onChange={e => {\n if (e.target.value) {\n window.localStorage.setItem(`dm_group_${this.state.selectedInstance}`, e.target.value);\n } else {\n window.localStorage.removeItem(`dm_group_${this.state.selectedInstance}`);\n }\n this.setState({ groupKey: e.target.value === '_' ? '' : e.target.value });\n }}\n >\n {groups.map(g => (\n <MenuItem\n value={g.value || '_'}\n key={g.value || '_'}\n style={{ display: 'flex', alignItems: 'center', gap: 8 }}\n >\n {g.icon || <div style={{ width: 24 }} />}\n {g.name}\n </MenuItem>\n ))}\n </Select>\n );\n }\n\n renderInstanceCards(): React.JSX.Element[] {\n if (!this.state.dmInstances) {\n return [\n <LinearProgress\n key=\"loadingInstances\"\n style={{ width: '100%' }}\n />,\n ];\n }\n\n const instanceIds = Object.keys(this.state.dmInstances);\n if (!instanceIds.length) {\n return [\n <div\n style={{ padding: 25 }}\n key=\"noInstances\"\n >\n <span>{getTranslation('noInstancesFoundText')}</span>\n </div>,\n ];\n }\n\n const backgroundColor = this.props.theme.palette.mode === 'dark' ? '#0b0b0b' : '#d5d5d5';\n\n if (this.props.smallCards) {\n return instanceIds.map(id => {\n const info = this.state.dmInstances![id];\n return (\n <Card\n key={id}\n sx={{ width: 200, margin: '5px', backgroundColor }}\n >\n <CardActionArea\n onClick={() => this.selectInstance(id)}\n style={{ height: '100%' }}\n >\n <CardContent\n style={{\n height: '100%',\n display: 'flex',\n alignItems: 'center',\n gap: 8,\n padding: 8,\n }}\n >\n {info.icon ? (\n <Icon\n src={info.icon}\n style={{ width: 32, height: 32, flexShrink: 0 }}\n />\n ) : (\n <QuestionMark style={{ width: 32, height: 32, flexShrink: 0 }} />\n )}\n <div style={{ overflow: 'hidden' }}>\n <Typography\n variant=\"body1\"\n noWrap\n style={{ fontSize: 14, fontWeight: 'bold' }}\n >\n {id}\n </Typography>\n {info.title ? (\n <Typography\n variant=\"caption\"\n color=\"textSecondary\"\n noWrap\n component=\"div\"\n >\n {info.title}\n </Typography>\n ) : null}\n </div>\n </CardContent>\n </CardActionArea>\n </Card>\n );\n });\n }\n\n return instanceIds.map(id => {\n const info = this.state.dmInstances![id];\n return (\n <Card\n key={id}\n sx={{ width: 240, margin: '10px', backgroundColor }}\n >\n <CardActionArea\n onClick={() => this.selectInstance(id)}\n style={{ height: '100%' }}\n >\n <CardContent\n style={{\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n gap: 8,\n }}\n >\n {info.icon ? (\n <Icon\n src={info.icon}\n style={{ width: 64, height: 64 }}\n />\n ) : (\n <QuestionMark style={{ width: 64, height: 64 }} />\n )}\n <Typography\n variant=\"h6\"\n style={{ textAlign: 'center', wordBreak: 'break-all' }}\n >\n {id}\n </Typography>\n {info.title ? (\n <Typography\n variant=\"body2\"\n color=\"textSecondary\"\n style={{ textAlign: 'center' }}\n >\n {info.title}\n </Typography>\n ) : null}\n </CardContent>\n </CardActionArea>\n </Card>\n );\n });\n }\n\n /** Collects the resolved model values reported by the cards and keeps the distinct, sorted list in state */\n private reportModel = (deviceId: DeviceId, model: string | undefined): void => {\n const key = JSON.stringify(deviceId);\n if (model) {\n if (this.modelValues.get(key) === model) {\n return;\n }\n this.modelValues.set(key, model);\n } else if (this.modelValues.has(key)) {\n this.modelValues.delete(key);\n } else {\n return;\n }\n const modelOptions = Array.from(new Set(this.modelValues.values())).sort();\n if (\n modelOptions.length !== this.state.modelOptions.length ||\n modelOptions.some((model, i) => model !== this.state.modelOptions[i])\n ) {\n this.setState({ modelOptions });\n }\n };\n\n /** The selected filter field, falling back to `name` if the stored field is not present on any current device */\n private getEffectiveFilterField(): DeviceFilterField {\n const field = this.state.filterField;\n if (field !== 'name' && this.state.devices.some(device => device[field] !== undefined)) {\n return field;\n }\n return 'name';\n }\n\n renderFilterFields(): React.JSX.Element | null {\n const fields: { value: DeviceFilterField; label: string }[] = [\n { value: 'name', label: getTranslation('name') },\n ];\n if (this.state.devices.some(device => device.identifier !== undefined)) {\n fields.push({\n value: 'identifier',\n label: this.getText(this.state.instanceInfo?.identifierLabel ?? 'ID'),\n });\n }\n if (this.state.devices.some(device => device.manufacturer !== undefined)) {\n fields.push({ value: 'manufacturer', label: getTranslation('manufacturer') });\n }\n if (this.state.devices.some(device => device.model !== undefined)) {\n fields.push({ value: 'model', label: getTranslation('model') });\n }\n\n // Only show the field selector when there is more than just the name to choose from\n if (fields.length < 2) {\n return null;\n }\n\n const current = this.getEffectiveFilterField();\n\n return (\n <Select\n variant=\"standard\"\n style={{ width: 130, flexShrink: 0 }}\n value={current}\n onChange={e => {\n const filterField = e.target.value as DeviceFilterField;\n this.setState({ filterField });\n window.localStorage.setItem('dm_filterField', filterField);\n // reset the current filter value when switching the field\n this.handleFilterChange('');\n }}\n >\n {fields.map(field => (\n <MenuItem\n value={field.value}\n key={field.value}\n >\n {field.label}\n </MenuItem>\n ))}\n </Select>\n );\n }\n\n /** The filter value input: a model dropdown for the `model` field, a free-text field otherwise */\n renderFilterValue(): React.JSX.Element {\n if (this.getEffectiveFilterField() === 'model') {\n const value = this.state.modelOptions.includes(this.state.filterText) ? this.state.filterText : '';\n return (\n <Select\n variant=\"standard\"\n style={{ width: 200 }}\n displayEmpty\n value={value}\n onChange={e => this.handleFilterChange(e.target.value)}\n >\n <MenuItem value=\"\">\n <em>{getTranslation('allModels')}</em>\n </MenuItem>\n {this.state.modelOptions.map(model => (\n <MenuItem\n value={model}\n key={model}\n >\n {model}\n </MenuItem>\n ))}\n </Select>\n );\n }\n\n return (\n <TextField\n variant=\"standard\"\n style={{ width: 200 }}\n size=\"small\"\n placeholder={getTranslation('filterLabelText')}\n onChange={e => this.handleFilterChange(e.target.value)}\n value={this.state.filterText}\n autoComplete=\"off\"\n slotProps={{\n input: {\n autoComplete: 'new-password',\n endAdornment: this.state.filterText ? (\n <InputAdornment position=\"end\">\n <IconButton\n tabIndex={-1}\n onClick={() => this.handleFilterChange('')}\n edge=\"end\"\n >\n <Clear />\n </IconButton>\n </InputAdornment>\n ) : null,\n },\n htmlInput: {\n autoComplete: 'off',\n },\n }}\n />\n );\n }\n\n renderRootInfo(): React.JSX.Element {\n // The root ThemeProvider (Communication.render) already supplies the correct theme context. The explicit color\n // is a safety net, so older InfoBox versions (whose Typography has no own color) stay readable in dark mode.\n return (\n <InfoBox\n key=\"rootInfo\"\n type=\"info\"\n closeable\n storeId=\"dm_rootInfoClosed\"\n style={{\n width: 'calc(100% - 20px)',\n margin: '0 10px 8px 10px',\n color: this.props.theme.palette.text.primary,\n }}\n >\n {I18n.t('rootInfoText')}\n </InfoBox>\n );\n }\n\n renderContent(): JSX.Element | JSX.Element[] | null {\n const emptyStyle: React.CSSProperties = {\n padding: 25,\n };\n\n if ((this.props.triggerLoad || 0) !== this.lastTriggerLoad) {\n this.lastTriggerLoad = this.props.triggerLoad || 0;\n setTimeout(() => this.loadDeviceList(), 50);\n }\n\n // if instance changed\n if (this.lastInstance !== this.state.selectedInstance) {\n this.lastInstance = this.state.selectedInstance;\n setTimeout(async (): Promise<void> => {\n if (this.state.selectedInstance) {\n try {\n await this.loadAllData();\n } catch (error) {\n console.error(error);\n }\n } else {\n this.loadDeviceList();\n }\n }, 50);\n }\n if (this.props.selectedInstance && this.props.selectedInstance !== this.state.selectedInstance) {\n setTimeout(() => this.setState({ selectedInstance: this.props.selectedInstance! }), 50);\n }\n const deviceGroups: { name: string; value: string; count: number; icon?: React.JSX.Element | string | null }[] =\n [];\n const showRootPage =\n !this.props.embedded && this.props.selectedInstance === undefined && !this.state.selectedInstance;\n\n let list: React.JSX.Element[] | undefined;\n if (showRootPage) {\n list = this.renderInstanceCards();\n list.unshift(this.renderRootInfo());\n } else if (!this.props.embedded && !this.state.alive) {\n list = [\n <div\n style={emptyStyle}\n key=\"notAlive\"\n >\n <span>{getTranslation('instanceNotAlive')}</span>\n </div>,\n ];\n } else if (!this.state.devices.length && this.state.selectedInstance && !this.state.loading) {\n list = [\n <div\n style={emptyStyle}\n key=\"notFound\"\n >\n <span>{getTranslation('noDevicesFoundText')}</span>\n </div>,\n ];\n } else {\n // build a device types list\n let filteredDevices = this.state.devices;\n if (!this.state.loading && !this.props.embedded && filteredDevices.find(device => device.group)) {\n deviceGroups.push({\n name: I18n.t('All'),\n value: '',\n count: filteredDevices.length,\n icon: <FilterAltOff />,\n });\n filteredDevices.forEach(device => {\n if (device.group) {\n const type = deviceGroups.find(t => t.value === device.group?.key);\n if (type) {\n type.count++;\n } else {\n const icon = device.group.icon ? <DeviceTypeIcon src={device.group.icon} /> : null;\n\n deviceGroups.push({\n name: this.getText(device.group.name || device.group.key),\n value: device.group.key,\n count: 1,\n icon,\n });\n }\n }\n });\n const unknown = filteredDevices.filter(device => !device.group);\n if (unknown.length) {\n deviceGroups.push({\n name: I18n.t('Unknown'),\n value: '?',\n count: unknown.length,\n icon: <QuestionMark />,\n });\n }\n\n if (this.state.groupKey && this.state.groupKey !== '_') {\n // filter out all devices belonging to this group\n if (this.state.groupKey === '?') {\n filteredDevices = filteredDevices.filter(device => !device.group?.key);\n } else {\n filteredDevices = filteredDevices.filter(device => device.group?.key === this.state.groupKey);\n }\n }\n }\n\n if (this.state.selectedInstance) {\n list = filteredDevices.map(device => (\n <DeviceCard\n key={JSON.stringify(device.id)}\n smallCards={this.props.smallCards ?? this.state.instanceInfo?.smallCards}\n filter={this.props.embedded ? this.props.filter : this.state.filter}\n alive={!!this.state.alive}\n id={device.id}\n identifierLabel={this.state.instanceInfo?.identifierLabel ?? 'ID'}\n device={device}\n instanceId={this.state.selectedInstance}\n uploadImagesToInstance={this.props.uploadImagesToInstance}\n deviceHandler={this.deviceHandler}\n controlHandler={this.controlHandler}\n controlStateHandler={this.controlStateHandler}\n socket={this.props.socket}\n themeName={this.props.themeName}\n themeType={this.props.themeType}\n theme={this.props.theme}\n isFloatComma={this.props.isFloatComma}\n dateFormat={this.props.dateFormat}\n onlyUpdatable={this.state.onlyUpdatable}\n onlyBatteryProblem={this.state.onlyBatteryProblem}\n filterField={this.props.embedded ? undefined : this.getEffectiveFilterField()}\n onModel={this.reportModel}\n />\n ));\n if (this.state.loading) {\n const skeletons = (this.state.totalDevices ?? list.length + 1) - list.length;\n for (let i = 0; i < skeletons; i++) {\n list.push(\n <DeviceCardSkeleton\n key={`skeleton-${i}`}\n smallCards={this.props.smallCards ?? this.state.instanceInfo?.smallCards}\n theme={this.props.theme}\n />,\n );\n }\n } else if (this.state.devices.length > 0) {\n list.push(\n <Box\n key=\"filtered\"\n sx={{\n padding: '25px',\n '&:not(:first-child)': {\n display: 'none',\n },\n }}\n >\n <span>{getTranslation('allDevicesFilteredOut')}</span>\n </Box>,\n );\n }\n } else {\n list = [\n <div\n style={emptyStyle}\n key=\"selectInstance\"\n >\n <span>{getTranslation('selectInstanceText')}</span>\n </div>,\n ];\n }\n }\n\n if (this.props.embedded) {\n return (\n <>\n {this.state.loading ? <LinearProgress style={{ width: '100%' }} /> : null}\n {this.state.apiVersionError ? <div>{I18n.t('apiVersionError')}</div> : list}\n </>\n );\n }\n\n return (\n <div style={{ width: '100%', height: '100%', overflow: 'hidden' }}>\n <Toolbar\n variant=\"dense\"\n style={{ backgroundColor: '#777', display: 'flex' }}\n >\n {this.props.title}\n {this.props.selectedInstance === undefined &&\n this.state.dmInstances &&\n this.state.selectedInstance ? (\n <div style={{ display: 'flex', alignItems: 'center', gap: 8 }}>\n {Object.keys(this.state.dmInstances).length > 1 ? (\n <Tooltip\n title={getTranslation('backToInstancesList')}\n slotProps={{ popper: { sx: { pointerEvents: 'none' } } }}\n >\n <IconButton\n onClick={() => this.backToInstancesList()}\n size=\"small\"\n >\n <ArrowBack />\n </IconButton>\n </Tooltip>\n ) : null}\n {this.state.dmInstances[this.state.selectedInstance]?.icon ? (\n <Icon\n src={this.state.dmInstances[this.state.selectedInstance].icon}\n style={{ width: 24, height: 24 }}\n />\n ) : null}\n <span style={{ marginRight: 8 }}>{this.state.selectedInstance}</span>\n </div>\n ) : null}\n {this.props.selectedInstance === undefined && !this.state.selectedInstance ? (\n <Tooltip\n title={getTranslation('refreshInstanceList')}\n slotProps={{ popper: { sx: { pointerEvents: 'none' } } }}\n >\n <span>\n <IconButton\n onClick={() => this.refreshInstanceList()}\n disabled={!this.state.dmInstances}\n size=\"small\"\n >\n <Refresh />\n </IconButton>\n </span>\n </Tooltip>\n ) : null}\n {this.state.selectedInstance ? (\n <Tooltip\n title={getTranslation('refreshTooltip')}\n slotProps={{ popper: { sx: { pointerEvents: 'none' } } }}\n >\n <span>\n <IconButton\n onClick={() => this.loadAllData()}\n disabled={!this.state.alive || this.state.apiVersionError}\n size=\"small\"\n >\n <Refresh />\n </IconButton>\n </span>\n </Tooltip>\n ) : null}\n {!this.state.apiVersionError && this.state.alive && this.state.instanceInfo?.actions?.length ? (\n <div style={{ marginLeft: 20 }}>\n {this.state.instanceInfo.actions.map(action => (\n <InstanceActionButton\n key={action.id}\n action={action}\n instanceHandler={this.instanceHandler}\n />\n ))}\n </div>\n ) : null}\n\n <div style={{ flexGrow: 1 }} />\n\n {!this.state.apiVersionError && this.renderGroups(deviceGroups)}\n {!this.state.apiVersionError &&\n this.state.alive &&\n this.state.devices.some(device => device.update) ? (\n <Tooltip\n title={getTranslation('onlyUpdatableTooltip')}\n slotProps={{ popper: { sx: { pointerEvents: 'none' } } }}\n >\n <IconButton\n color={this.state.onlyUpdatable ? 'primary' : 'default'}\n onClick={() => {\n const onlyUpdatable = !this.state.onlyUpdatable;\n this.setState({ onlyUpdatable });\n window.localStorage.setItem('dm_onlyUpdatable', onlyUpdatable ? 'true' : 'false');\n }}\n size=\"small\"\n >\n <SystemUpdateAlt />\n </IconButton>\n </Tooltip>\n ) : null}\n {!this.state.apiVersionError &&\n this.state.alive &&\n this.state.devices.some(device => hasBatteryStatus(device.status)) ? (\n <Tooltip\n title={getTranslation('onlyBatteryProblemTooltip')}\n slotProps={{ popper: { sx: { pointerEvents: 'none' } } }}\n >\n <IconButton\n color={this.state.onlyBatteryProblem ? 'primary' : 'default'}\n onClick={() => {\n const onlyBatteryProblem = !this.state.onlyBatteryProblem;\n this.setState({ onlyBatteryProblem });\n window.localStorage.setItem(\n 'dm_onlyBatteryProblem',\n onlyBatteryProblem ? 'true' : 'false',\n );\n }}\n size=\"small\"\n >\n <BatteryAlert />\n </IconButton>\n </Tooltip>\n ) : null}\n {!this.state.apiVersionError && this.state.alive ? (\n <div style={{ display: 'flex', alignItems: 'center', gap: 8 }}>\n <FilterAlt style={{ color: '#fff' }} />\n {this.renderFilterFields()}\n {this.renderFilterValue()}\n </div>\n ) : null}\n <Typography\n style={{\n marginLeft: 16,\n fontWeight: 'bold',\n whiteSpace: 'nowrap',\n color: '#fff',\n }}\n >\n Config-Manager\n </Typography>\n </Toolbar>\n <div\n style={{\n width: '100%',\n height: 'calc(100% - 56px)',\n marginTop: 8,\n overflow: 'auto',\n display: 'flex',\n flexWrap: 'wrap',\n alignItems: 'stretch',\n alignContent: 'flex-start',\n ...this.props.style,\n }}\n >\n {this.state.loading ? <LinearProgress style={{ width: '100%' }} /> : null}\n {this.state.apiVersionError ? <div>{I18n.t('apiVersionError')}</div> : list}\n </div>\n </div>\n );\n }\n}\n"]}
|
package/build/Utils.js
CHANGED
|
@@ -244,7 +244,7 @@ let language;
|
|
|
244
244
|
export function getTranslation(
|
|
245
245
|
/** Text to translate */
|
|
246
246
|
text, noTranslation) {
|
|
247
|
-
language
|
|
247
|
+
language ||= I18n.getLanguage();
|
|
248
248
|
if (typeof text === 'object') {
|
|
249
249
|
return text[language] || text.en;
|
|
250
250
|
}
|
package/build/Utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Utils.js","sourceRoot":"./src/","sources":["Utils.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport type { ActionBase, ControlBase } from './protocol/api';\nimport {\n Add,\n Article,\n Bluetooth,\n BluetoothDisabled,\n Delete,\n Edit,\n FastForward,\n FastRewind,\n Fluorescent,\n Group,\n Info,\n Lightbulb,\n Link as LinkIcon,\n LinkOff,\n NotListedLocation,\n Pause,\n Person,\n PlayArrow,\n Power,\n QrCode,\n QuestionMark,\n Refresh,\n Search,\n Settings,\n Stop,\n Visibility,\n Upgrade,\n WbIncandescent,\n Wifi,\n WifiOff,\n Launch,\n} from '@mui/icons-material';\n\nimport { I18n, Icon } from '@iobroker/adapter-react-v5';\n\n/**\n * Get Icon by font-awesome name. Do not use these names, use names from getIconByName\n *\n * @param icon font-awesome icon name\n * Only following font-awesome icons are supported:\n * - fa-trash-can, fa-trash\n * - fa-pen\n * - fa-redo-alt\n * - fa-plus\n * - fa-qrcode, qrcode\n * - fa-wifi\n * - fa-wifi-slash\n * - fa-bluetooth\n * - fa-bluetooth-slash\n * - fa-eye\n * - fa-search\n * - fa-unlink\n * - fa-link\n * - fa-search-location\n * - fa-play\n * - fa-stop\n * - fa-pause\n * @param color color of the icon\n */\nfunction getFaIcon(icon: string, color?: string): React.JSX.Element | null {\n const iconStyle = icon\n .split(' ')\n .map(s => s.trim())\n .filter(s => s !== 'fa-solid');\n\n if (iconStyle.includes('fa-trash-can') || iconStyle.includes('fa-trash')) {\n return <Delete style={{ color }} />;\n }\n if (iconStyle.includes('fa-pen')) {\n return <Edit style={{ color }} />;\n }\n if (iconStyle.includes('fa-redo-alt')) {\n return <Refresh style={{ color }} />;\n }\n if (iconStyle.includes('fa-plus')) {\n return <Add style={{ color }} />;\n }\n if (iconStyle.includes('fa-qrcode') || iconStyle.includes('qrcode')) {\n return <QrCode style={{ color }} />;\n }\n if (iconStyle.includes('fa-wifi')) {\n return <Wifi style={{ color }} />;\n }\n if (iconStyle.includes('fa-wifi-slash')) {\n return <WifiOff style={{ color }} />;\n }\n if (iconStyle.includes('fa-bluetooth')) {\n return <Bluetooth style={{ color }} />;\n }\n if (iconStyle.includes('fa-bluetooth-slash')) {\n return <BluetoothDisabled style={{ color }} />;\n }\n if (iconStyle.includes('fa-eye')) {\n return <Visibility style={{ color }} />;\n }\n if (iconStyle.includes('fa-search')) {\n return <Search style={{ color }} />;\n }\n if (iconStyle.includes('fa-unlink')) {\n return <LinkOff style={{ color }} />;\n }\n if (iconStyle.includes('fa-link')) {\n return <LinkIcon style={{ color }} />;\n }\n if (iconStyle.includes('fa-search-location')) {\n return <NotListedLocation style={{ color }} />;\n }\n if (iconStyle.includes('fa-play')) {\n return <PlayArrow style={{ color }} />;\n }\n if (iconStyle.includes('fa-stop')) {\n return <Stop style={{ color }} />;\n }\n if (iconStyle.includes('fa-pause')) {\n return <Pause style={{ color }} />;\n }\n return <QuestionMark style={{ color }} />;\n}\n\n/**\n * Get Icon by name or by action\n *\n * @param name action name\n * possible action or icon names are\n * - edit, rename\n * - delete\n * - refresh\n * - newDevice, new, add\n * - discover, search\n * - unpairDevice, unpair\n * - pairDevice, pair\n * - identify\n * - play\n * - stop\n * - pause\n * - forward, next\n * - rewind, previous\n * - lamp, light\n * - backlight\n * - dimmer\n * - socket\n * - settings\n * - users, group\n * - user\n * - qrcode\n * - identify\n * - info\n * - lines\n * @param altName icon name\n * @param color color of the icon\n */\nfunction getIconByName(name: string, altName?: string, color?: string): React.JSX.Element | null {\n if (name === 'edit' || name === 'rename' || altName === 'edit' || altName === 'rename') {\n return <Edit style={{ color }} />;\n }\n if (name === 'delete' || altName === 'delete') {\n return <Delete style={{ color }} />;\n }\n if (name === 'refresh' || altName === 'refresh') {\n return <Refresh style={{ color }} />;\n }\n if (\n name === 'newDevice' ||\n name === 'new' ||\n name === 'add' ||\n altName === 'newDevice' ||\n altName === 'new' ||\n altName === 'add'\n ) {\n return <Add style={{ color }} />;\n }\n if (name === 'discover' || name === 'search' || altName === 'discover' || altName === 'search') {\n return <Search style={{ color }} />;\n }\n if (name === 'unpairDevice' || name === 'unpair' || altName === 'unpairDevice' || altName === 'unpair') {\n return <LinkOff style={{ color }} />;\n }\n if (name === 'pairDevice' || name === 'pair' || altName === 'pairDevice' || altName === 'pair') {\n return <LinkIcon style={{ color }} />;\n }\n if (name === 'identify' || altName === 'identify') {\n return <NotListedLocation style={{ color }} />;\n }\n if (name === 'play' || altName === 'play') {\n return <PlayArrow style={{ color }} />;\n }\n if (name === 'stop' || altName === 'stop') {\n return <Stop style={{ color }} />;\n }\n if (name === 'pause' || altName === 'pause') {\n return <Pause style={{ color }} />;\n }\n if (name === 'forward' || name === 'next' || altName === 'forward' || altName === 'next') {\n return <FastForward style={{ color }} />;\n }\n if (name === 'rewind' || name === 'previous' || altName === 'rewind' || altName === 'previous') {\n return <FastRewind style={{ color }} />;\n }\n if (name === 'lamp' || name === 'light' || altName === 'lamp' || altName === 'light') {\n return <Lightbulb style={{ color }} />;\n }\n if (name === 'backlight' || altName === 'backlight') {\n return <Fluorescent style={{ color }} />;\n }\n if (name === 'dimmer' || altName === 'dimmer') {\n return <WbIncandescent style={{ color }} />;\n }\n if (name === 'socket' || altName === 'socket') {\n return <Power style={{ color }} />;\n }\n if (name === 'settings' || altName === 'settings') {\n return <Settings style={{ color }} />;\n }\n if (name === 'users' || name === 'group' || altName === 'users' || altName === 'group') {\n return <Group style={{ color }} />;\n }\n if (name === 'user' || altName === 'user') {\n return <Person style={{ color }} />;\n }\n if (name === 'update' || altName === 'update') {\n return <Upgrade style={{ color }} />;\n }\n if (name === 'qrcode' || altName === 'qrcode') {\n return <QrCode style={{ color }} />;\n }\n if (name === 'info' || altName === 'info') {\n return <Info style={{ color }} />;\n }\n if (name === 'lines' || altName === 'lines') {\n return <Article style={{ color }} />;\n }\n if (name === 'web' || altName === 'web') {\n return <Launch style={{ color }} />;\n }\n return <QuestionMark style={{ color }} />;\n}\n\nexport function renderControlIcon(\n action: ControlBase,\n colors?: { primary: string; secondary: string },\n value?: string | number | boolean | null,\n noDefaultIcon?: boolean,\n): React.JSX.Element | null {\n if (!action) {\n return null;\n }\n\n let color = (value && action.colorOn) || action.color || (action.state ? 'primary' : 'inherit');\n\n if (colors) {\n if (color === 'primary') {\n color = colors.primary;\n } else if (color === 'secondary') {\n color = colors.secondary;\n }\n }\n\n if (action.icon?.startsWith('fa-') || action.icon?.startsWith('fas')) {\n return getFaIcon(action.icon, color);\n }\n if (value && action.iconOn?.startsWith('data:image')) {\n return (\n <Icon\n src={action.iconOn}\n style={{ color }}\n />\n );\n }\n if (action.icon?.startsWith('data:image')) {\n return (\n <Icon\n src={action.icon}\n style={{ color }}\n />\n );\n }\n if (!noDefaultIcon) {\n return getIconByName(action.id, action.icon, color);\n }\n return null;\n}\n\nexport function renderActionIcon(action: ActionBase): React.JSX.Element | null {\n if (!action) {\n return null;\n }\n\n if (action.icon?.startsWith('fa-') || action.icon?.startsWith('fas')) {\n return getFaIcon(action.icon, action.color);\n }\n if (action.icon?.startsWith('data:image')) {\n return (\n <Icon\n src={action.icon}\n style={{ color: action.color }}\n />\n );\n }\n return getIconByName(action.id, action.icon, action.color);\n}\n\nlet language: ioBroker.Languages;\n\n/**\n * Get Translation\n */\nexport function getTranslation(\n /** Text to translate */\n text: ioBroker.StringOrTranslated,\n noTranslation?: boolean,\n): string {\n language = language || I18n.getLanguage();\n\n if (typeof text === 'object') {\n return text[language] || text.en;\n }\n\n return noTranslation ? text : I18n.t(text);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"Utils.js","sourceRoot":"./src/","sources":["Utils.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport type { ActionBase, ControlBase } from './protocol/api';\nimport {\n Add,\n Article,\n Bluetooth,\n BluetoothDisabled,\n Delete,\n Edit,\n FastForward,\n FastRewind,\n Fluorescent,\n Group,\n Info,\n Lightbulb,\n Link as LinkIcon,\n LinkOff,\n NotListedLocation,\n Pause,\n Person,\n PlayArrow,\n Power,\n QrCode,\n QuestionMark,\n Refresh,\n Search,\n Settings,\n Stop,\n Visibility,\n Upgrade,\n WbIncandescent,\n Wifi,\n WifiOff,\n Launch,\n} from '@mui/icons-material';\n\nimport { I18n, Icon } from '@iobroker/adapter-react-v5';\n\n/**\n * Get Icon by font-awesome name. Do not use these names, use names from getIconByName\n *\n * @param icon font-awesome icon name\n * Only following font-awesome icons are supported:\n * - fa-trash-can, fa-trash\n * - fa-pen\n * - fa-redo-alt\n * - fa-plus\n * - fa-qrcode, qrcode\n * - fa-wifi\n * - fa-wifi-slash\n * - fa-bluetooth\n * - fa-bluetooth-slash\n * - fa-eye\n * - fa-search\n * - fa-unlink\n * - fa-link\n * - fa-search-location\n * - fa-play\n * - fa-stop\n * - fa-pause\n * @param color color of the icon\n */\nfunction getFaIcon(icon: string, color?: string): React.JSX.Element | null {\n const iconStyle = icon\n .split(' ')\n .map(s => s.trim())\n .filter(s => s !== 'fa-solid');\n\n if (iconStyle.includes('fa-trash-can') || iconStyle.includes('fa-trash')) {\n return <Delete style={{ color }} />;\n }\n if (iconStyle.includes('fa-pen')) {\n return <Edit style={{ color }} />;\n }\n if (iconStyle.includes('fa-redo-alt')) {\n return <Refresh style={{ color }} />;\n }\n if (iconStyle.includes('fa-plus')) {\n return <Add style={{ color }} />;\n }\n if (iconStyle.includes('fa-qrcode') || iconStyle.includes('qrcode')) {\n return <QrCode style={{ color }} />;\n }\n if (iconStyle.includes('fa-wifi')) {\n return <Wifi style={{ color }} />;\n }\n if (iconStyle.includes('fa-wifi-slash')) {\n return <WifiOff style={{ color }} />;\n }\n if (iconStyle.includes('fa-bluetooth')) {\n return <Bluetooth style={{ color }} />;\n }\n if (iconStyle.includes('fa-bluetooth-slash')) {\n return <BluetoothDisabled style={{ color }} />;\n }\n if (iconStyle.includes('fa-eye')) {\n return <Visibility style={{ color }} />;\n }\n if (iconStyle.includes('fa-search')) {\n return <Search style={{ color }} />;\n }\n if (iconStyle.includes('fa-unlink')) {\n return <LinkOff style={{ color }} />;\n }\n if (iconStyle.includes('fa-link')) {\n return <LinkIcon style={{ color }} />;\n }\n if (iconStyle.includes('fa-search-location')) {\n return <NotListedLocation style={{ color }} />;\n }\n if (iconStyle.includes('fa-play')) {\n return <PlayArrow style={{ color }} />;\n }\n if (iconStyle.includes('fa-stop')) {\n return <Stop style={{ color }} />;\n }\n if (iconStyle.includes('fa-pause')) {\n return <Pause style={{ color }} />;\n }\n return <QuestionMark style={{ color }} />;\n}\n\n/**\n * Get Icon by name or by action\n *\n * @param name action name\n * possible action or icon names are\n * - edit, rename\n * - delete\n * - refresh\n * - newDevice, new, add\n * - discover, search\n * - unpairDevice, unpair\n * - pairDevice, pair\n * - identify\n * - play\n * - stop\n * - pause\n * - forward, next\n * - rewind, previous\n * - lamp, light\n * - backlight\n * - dimmer\n * - socket\n * - settings\n * - users, group\n * - user\n * - qrcode\n * - identify\n * - info\n * - lines\n * @param altName icon name\n * @param color color of the icon\n */\nfunction getIconByName(name: string, altName?: string, color?: string): React.JSX.Element | null {\n if (name === 'edit' || name === 'rename' || altName === 'edit' || altName === 'rename') {\n return <Edit style={{ color }} />;\n }\n if (name === 'delete' || altName === 'delete') {\n return <Delete style={{ color }} />;\n }\n if (name === 'refresh' || altName === 'refresh') {\n return <Refresh style={{ color }} />;\n }\n if (\n name === 'newDevice' ||\n name === 'new' ||\n name === 'add' ||\n altName === 'newDevice' ||\n altName === 'new' ||\n altName === 'add'\n ) {\n return <Add style={{ color }} />;\n }\n if (name === 'discover' || name === 'search' || altName === 'discover' || altName === 'search') {\n return <Search style={{ color }} />;\n }\n if (name === 'unpairDevice' || name === 'unpair' || altName === 'unpairDevice' || altName === 'unpair') {\n return <LinkOff style={{ color }} />;\n }\n if (name === 'pairDevice' || name === 'pair' || altName === 'pairDevice' || altName === 'pair') {\n return <LinkIcon style={{ color }} />;\n }\n if (name === 'identify' || altName === 'identify') {\n return <NotListedLocation style={{ color }} />;\n }\n if (name === 'play' || altName === 'play') {\n return <PlayArrow style={{ color }} />;\n }\n if (name === 'stop' || altName === 'stop') {\n return <Stop style={{ color }} />;\n }\n if (name === 'pause' || altName === 'pause') {\n return <Pause style={{ color }} />;\n }\n if (name === 'forward' || name === 'next' || altName === 'forward' || altName === 'next') {\n return <FastForward style={{ color }} />;\n }\n if (name === 'rewind' || name === 'previous' || altName === 'rewind' || altName === 'previous') {\n return <FastRewind style={{ color }} />;\n }\n if (name === 'lamp' || name === 'light' || altName === 'lamp' || altName === 'light') {\n return <Lightbulb style={{ color }} />;\n }\n if (name === 'backlight' || altName === 'backlight') {\n return <Fluorescent style={{ color }} />;\n }\n if (name === 'dimmer' || altName === 'dimmer') {\n return <WbIncandescent style={{ color }} />;\n }\n if (name === 'socket' || altName === 'socket') {\n return <Power style={{ color }} />;\n }\n if (name === 'settings' || altName === 'settings') {\n return <Settings style={{ color }} />;\n }\n if (name === 'users' || name === 'group' || altName === 'users' || altName === 'group') {\n return <Group style={{ color }} />;\n }\n if (name === 'user' || altName === 'user') {\n return <Person style={{ color }} />;\n }\n if (name === 'update' || altName === 'update') {\n return <Upgrade style={{ color }} />;\n }\n if (name === 'qrcode' || altName === 'qrcode') {\n return <QrCode style={{ color }} />;\n }\n if (name === 'info' || altName === 'info') {\n return <Info style={{ color }} />;\n }\n if (name === 'lines' || altName === 'lines') {\n return <Article style={{ color }} />;\n }\n if (name === 'web' || altName === 'web') {\n return <Launch style={{ color }} />;\n }\n return <QuestionMark style={{ color }} />;\n}\n\nexport function renderControlIcon(\n action: ControlBase,\n colors?: { primary: string; secondary: string },\n value?: string | number | boolean | null,\n noDefaultIcon?: boolean,\n): React.JSX.Element | null {\n if (!action) {\n return null;\n }\n\n let color = (value && action.colorOn) || action.color || (action.state ? 'primary' : 'inherit');\n\n if (colors) {\n if (color === 'primary') {\n color = colors.primary;\n } else if (color === 'secondary') {\n color = colors.secondary;\n }\n }\n\n if (action.icon?.startsWith('fa-') || action.icon?.startsWith('fas')) {\n return getFaIcon(action.icon, color);\n }\n if (value && action.iconOn?.startsWith('data:image')) {\n return (\n <Icon\n src={action.iconOn}\n style={{ color }}\n />\n );\n }\n if (action.icon?.startsWith('data:image')) {\n return (\n <Icon\n src={action.icon}\n style={{ color }}\n />\n );\n }\n if (!noDefaultIcon) {\n return getIconByName(action.id, action.icon, color);\n }\n return null;\n}\n\nexport function renderActionIcon(action: ActionBase): React.JSX.Element | null {\n if (!action) {\n return null;\n }\n\n if (action.icon?.startsWith('fa-') || action.icon?.startsWith('fas')) {\n return getFaIcon(action.icon, action.color);\n }\n if (action.icon?.startsWith('data:image')) {\n return (\n <Icon\n src={action.icon}\n style={{ color: action.color }}\n />\n );\n }\n return getIconByName(action.id, action.icon, action.color);\n}\n\nlet language: ioBroker.Languages;\n\n/**\n * Get Translation\n */\nexport function getTranslation(\n /** Text to translate */\n text: ioBroker.StringOrTranslated,\n noTranslation?: boolean,\n): string {\n language ||= I18n.getLanguage();\n\n if (typeof text === 'object') {\n return text[language] || text.en;\n }\n\n return noTranslation ? text : I18n.t(text);\n}\n"]}
|
package/build/i18n/de.json
CHANGED
package/build/i18n/en.json
CHANGED
package/build/i18n/es.json
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"allDevicesFilteredOut": "Todos los dispositivos filtrados",
|
|
3
|
+
"allModels": "Todos los modelos",
|
|
3
4
|
"apiVersionError": "El backend es más reciente que la interfaz gráfica de usuario. Por favor, actualice el administrador.",
|
|
4
5
|
"backToInstancesList": "Volver a la lista de instancias",
|
|
5
6
|
"batteryTooltip": "Batería",
|
package/build/i18n/fr.json
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"allDevicesFilteredOut": "Tous les appareils filtrés",
|
|
3
|
+
"allModels": "Tous les modèles",
|
|
3
4
|
"apiVersionError": "L'interface d'administration est plus récente que l'interface graphique. Veuillez mettre à jour l'interface d'administration.",
|
|
4
5
|
"backToInstancesList": "Retour à la liste des instances",
|
|
5
6
|
"batteryTooltip": "Batterie",
|
package/build/i18n/it.json
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"allDevicesFilteredOut": "Tutti i dispositivi sono stati filtrati",
|
|
3
|
+
"allModels": "Tutti i modelli",
|
|
3
4
|
"apiVersionError": "Il backend è più recente come GUI. Aggiorna l'amministratore.",
|
|
4
5
|
"backToInstancesList": "Torna all'elenco delle istanze",
|
|
5
6
|
"batteryTooltip": "Batteria",
|
package/build/i18n/nl.json
CHANGED
package/build/i18n/pl.json
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"allDevicesFilteredOut": "Wszystkie urządzenia zostały odfiltrowane",
|
|
3
|
+
"allModels": "Wszystkie modele",
|
|
3
4
|
"apiVersionError": "Zaplecze jest nowsze i ma interfejs graficzny. Proszę zaktualizować administratora.",
|
|
4
5
|
"backToInstancesList": "Powrót do listy instancji",
|
|
5
6
|
"batteryTooltip": "Bateria",
|
package/build/i18n/pt.json
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"allDevicesFilteredOut": "Todos os dispositivos foram filtrados",
|
|
3
|
+
"allModels": "Todos os modelos",
|
|
3
4
|
"apiVersionError": "O backend é mais recente que a GUI. Por favor, atualize o painel de administração.",
|
|
4
5
|
"backToInstancesList": "Voltar à lista de instâncias",
|
|
5
6
|
"batteryTooltip": "Bateria",
|
package/build/i18n/ru.json
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"allDevicesFilteredOut": "Все устройства отфильтрованы",
|
|
3
|
+
"allModels": "Все модели",
|
|
3
4
|
"apiVersionError": "Бэкенд обновлен и теперь имеет графический интерфейс. Пожалуйста, обновите админку.",
|
|
4
5
|
"backToInstancesList": "Назад к списку экземпляров",
|
|
5
6
|
"batteryTooltip": "Батарея",
|
package/build/i18n/uk.json
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"allDevicesFilteredOut": "Усі пристрої відфільтровано",
|
|
3
|
+
"allModels": "Всі моделі",
|
|
3
4
|
"apiVersionError": "Бекенд новіший, як графічний інтерфейс. Будь ласка, оновіть адміністратора",
|
|
4
5
|
"backToInstancesList": "Назад до списку екземплярів",
|
|
5
6
|
"batteryTooltip": "Батарея",
|
package/build/i18n/zh-cn.json
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@iobroker/dm-gui-components",
|
|
3
|
-
"version": "9.1.
|
|
3
|
+
"version": "9.1.4",
|
|
4
4
|
"description": "ReactJS components to develop admin interface for ioBroker device manager.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Jey Cee",
|
|
@@ -52,8 +52,8 @@
|
|
|
52
52
|
},
|
|
53
53
|
"homepage": "https://github.com/ioBroker/dm-gui-components#readme",
|
|
54
54
|
"dependencies": {
|
|
55
|
-
"@iobroker/adapter-react-v5": "^8.2.
|
|
56
|
-
"@iobroker/json-config": "^8.4.
|
|
55
|
+
"@iobroker/adapter-react-v5": "^8.2.12",
|
|
56
|
+
"@iobroker/json-config": "^8.4.10"
|
|
57
57
|
},
|
|
58
58
|
"devDependencies": {
|
|
59
59
|
"@alcalzone/release-script": "^5.2.1",
|