@iobroker/dm-gui-components 8.0.8 → 9.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/README.md +6 -0
  2. package/build/Communication.d.ts +12 -38
  3. package/build/Communication.js +91 -69
  4. package/build/Communication.js.map +1 -1
  5. package/build/DeviceActionButton.d.ts +3 -3
  6. package/build/DeviceActionButton.js +2 -2
  7. package/build/DeviceActionButton.js.map +1 -1
  8. package/build/DeviceCard.d.ts +28 -9
  9. package/build/DeviceCard.js +161 -63
  10. package/build/DeviceCard.js.map +1 -1
  11. package/build/DeviceControl.d.ts +5 -5
  12. package/build/DeviceControl.js.map +1 -1
  13. package/build/DeviceImageUpload.d.ts +2 -1
  14. package/build/DeviceImageUpload.js +1 -1
  15. package/build/DeviceImageUpload.js.map +1 -1
  16. package/build/DeviceList.d.ts +6 -7
  17. package/build/DeviceList.js +102 -91
  18. package/build/DeviceList.js.map +1 -1
  19. package/build/DeviceStatus.d.ts +7 -4
  20. package/build/DeviceStatus.js +37 -30
  21. package/build/DeviceStatus.js.map +1 -1
  22. package/build/InstanceActionButton.d.ts +1 -1
  23. package/build/InstanceActionButton.js.map +1 -1
  24. package/build/StateOrObjectHandler.d.ts +10 -0
  25. package/build/StateOrObjectHandler.js +141 -0
  26. package/build/StateOrObjectHandler.js.map +1 -0
  27. package/build/TooltipButton.d.ts +1 -0
  28. package/build/TooltipButton.js +4 -3
  29. package/build/TooltipButton.js.map +1 -1
  30. package/build/Utils.d.ts +1 -2
  31. package/build/Utils.js.map +1 -1
  32. package/build/hooks.d.ts +3 -0
  33. package/build/hooks.js +10 -0
  34. package/build/hooks.js.map +1 -0
  35. package/build/i18n/de.json +2 -0
  36. package/build/i18n/en.json +2 -0
  37. package/build/i18n/es.json +2 -0
  38. package/build/i18n/fr.json +2 -0
  39. package/build/i18n/it.json +2 -0
  40. package/build/i18n/nl.json +2 -0
  41. package/build/i18n/pl.json +2 -0
  42. package/build/i18n/pt.json +2 -0
  43. package/build/i18n/ru.json +2 -0
  44. package/build/i18n/uk.json +2 -0
  45. package/build/i18n/zh-cn.json +2 -0
  46. package/build/protocol/DmProtocolBase.d.ts +29 -0
  47. package/build/protocol/DmProtocolBase.js +12 -0
  48. package/build/protocol/DmProtocolBase.js.map +1 -0
  49. package/build/protocol/DmProtocolV1.d.ts +12 -0
  50. package/build/protocol/DmProtocolV1.js +22 -0
  51. package/build/protocol/DmProtocolV1.js.map +1 -0
  52. package/build/protocol/DmProtocolV2.d.ts +5 -0
  53. package/build/protocol/DmProtocolV2.js +11 -0
  54. package/build/protocol/DmProtocolV2.js.map +1 -0
  55. package/build/protocol/DmProtocolV3.d.ts +12 -0
  56. package/build/protocol/DmProtocolV3.js +28 -0
  57. package/build/protocol/DmProtocolV3.js.map +1 -0
  58. package/build/protocol/UnknownDmProtocol.d.ts +13 -0
  59. package/build/protocol/UnknownDmProtocol.js +20 -0
  60. package/build/protocol/UnknownDmProtocol.js.map +1 -0
  61. package/build/protocol/api.d.ts +2 -0
  62. package/build/protocol/api.js +2 -0
  63. package/build/protocol/api.js.map +1 -0
  64. package/package.json +8 -8
@@ -1 +1 @@
1
- {"version":3,"file":"Communication.js","sourceRoot":"./src/","sources":["Communication.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { Component } from 'react';\n\nimport {\n Backdrop,\n Box,\n Button,\n Checkbox,\n CircularProgress,\n Dialog,\n DialogActions,\n DialogContent,\n DialogContentText,\n DialogTitle,\n FormControl,\n FormControlLabel,\n Grid2,\n IconButton,\n Input,\n InputAdornment,\n InputLabel,\n LinearProgress,\n MenuItem,\n Select,\n Slider,\n Snackbar,\n TextField,\n Typography,\n} from '@mui/material';\n\nimport { Close, Check, ContentCopy } from '@mui/icons-material';\n\nimport {\n type Connection,\n type AdminConnection,\n type ThemeName,\n type ThemeType,\n type IobTheme,\n I18n,\n Icon,\n Utils,\n} from '@iobroker/adapter-react-v5';\nimport type {\n ActionBase,\n ControlBase,\n ControlState,\n DeviceInfo,\n DeviceRefresh,\n InstanceDetails,\n JsonFormSchema,\n ActionButton,\n} from '@iobroker/dm-utils';\nimport type { ConfigItemPanel, ConfigItemTabs } from '@iobroker/json-config';\n\nimport { getTranslation } from './Utils';\nimport JsonConfig from './JsonConfig';\n\ndeclare module '@mui/material/Button' {\n interface ButtonPropsColorOverrides {\n grey: true;\n }\n}\n\nexport type CommunicationProps = {\n /** Socket connection */\n socket: Connection;\n /** Instance to communicate with device-manager backend, like `adapterName.X` */\n selectedInstance?: string; // adapterName.X\n registerHandler?: (handler: null | ((command: string) => void)) => void;\n themeName: ThemeName;\n themeType: ThemeType;\n theme: IobTheme;\n isFloatComma: boolean;\n dateFormat: string;\n};\n\ninterface CommunicationForm {\n title?: ioBroker.StringOrTranslated | null | undefined;\n label?: ioBroker.StringOrTranslated | null | undefined; // same as title\n noTranslation?: boolean; // Do not translate title/label\n schema: JsonFormSchema;\n data?: Record<string, any>;\n buttons?: (ActionButton | 'apply' | 'cancel' | 'close')[];\n maxWidth?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n /** Minimal width of the dialog */\n minWidth?: number;\n /** Always allow the apply button. Even when nothing was changed */\n ignoreApplyDisabled?: boolean;\n}\n\ninterface CommunicationFormInState extends CommunicationForm {\n handleClose?: (data?: Record<string, any>) => void;\n originalData: string;\n changed: boolean;\n}\n\ninterface InputAction extends ActionBase {\n /** If it is a device action */\n deviceId?: string;\n /** Optional refresh function to execute */\n refresh?: () => void;\n}\n\nexport type CommunicationState = {\n showSpinner: boolean;\n showToast: string | null;\n message: {\n message: string;\n handleClose: () => void;\n } | null;\n confirm: {\n message: string;\n handleClose: (confirmation?: boolean) => void;\n } | null;\n form: CommunicationFormInState | null;\n progress:\n | {\n open: boolean;\n indeterminate: boolean;\n }\n | {\n open: boolean;\n progress: number;\n }\n | null;\n showConfirmation: InputAction | null;\n showInput: InputAction | null;\n inputValue: string | boolean | number | null;\n};\n\ninterface DmResponse {\n /* Type of message */\n type: 'message' | 'confirm' | 'progress' | 'result' | 'form';\n /* Origin */\n origin: string;\n}\n\ninterface DmControlResponse extends DmResponse {\n result: {\n error?: {\n code: number;\n message: string;\n };\n state?: ioBroker.State;\n deviceId: string;\n controlId: string;\n };\n}\n\ninterface Message {\n actionId?: string;\n deviceId?: string;\n value?: unknown;\n origin?: string;\n confirm?: boolean;\n data?: any;\n /** Inform backend, how long the frontend will wait for an answer */\n timeout?: number;\n}\n\ninterface DmActionResponse extends DmResponse {\n result: {\n refresh?: DeviceRefresh;\n error?: {\n code: number;\n message: string;\n };\n };\n message?: string;\n confirm?: string;\n form?: CommunicationForm;\n progress?:\n | {\n open: boolean;\n indeterminate: boolean;\n }\n | {\n open: boolean;\n progress: number;\n };\n}\n\n/**\n * Device List Component\n */\nclass Communication<P extends CommunicationProps, S extends CommunicationState> extends Component<P, S> {\n private responseTimeout: ReturnType<typeof setTimeout> | null = null;\n\n // eslint-disable-next-line react/no-unused-class-component-methods\n instanceHandler: (action: ActionBase) => () => void;\n\n // eslint-disable-next-line react/no-unused-class-component-methods\n deviceHandler: (deviceId: string, action: ActionBase, refresh: () => void) => () => void;\n\n // eslint-disable-next-line react/no-unused-class-component-methods\n controlHandler: (\n deviceId: string,\n control: ControlBase,\n state: ControlState,\n ) => () => Promise<ioBroker.State | null>;\n\n // eslint-disable-next-line react/no-unused-class-component-methods\n controlStateHandler: (deviceId: string, control: ControlBase) => () => Promise<ioBroker.State | null>;\n\n constructor(props: P) {\n super(props);\n\n this.state = {\n showSpinner: false,\n showToast: null,\n message: null,\n confirm: null,\n form: null,\n progress: null,\n showConfirmation: null,\n showInput: null,\n inputValue: null,\n } as S;\n\n // eslint-disable-next-line react/no-unused-class-component-methods\n this.instanceHandler = action => () => {\n if (action.confirmation) {\n this.setState({ showConfirmation: action });\n return;\n }\n if (action.inputBefore) {\n this.setState({ showInput: action });\n return;\n }\n\n this.sendActionToInstance('dm:instanceAction', { actionId: action.id, timeout: action.timeout });\n };\n\n // eslint-disable-next-line react/no-unused-class-component-methods\n this.deviceHandler = (deviceId, action, refresh) => () => {\n if (action.confirmation) {\n this.setState({ showConfirmation: { ...action, deviceId, refresh } });\n return;\n }\n if (action.inputBefore) {\n this.setState({\n showInput: { ...action, deviceId, refresh },\n inputValue: action.inputBefore.defaultValue || '',\n });\n return;\n }\n\n this.sendActionToInstance(\n 'dm:deviceAction',\n { deviceId, actionId: action.id, timeout: action.timeout },\n refresh,\n );\n };\n\n // eslint-disable-next-line react/no-unused-class-component-methods\n this.controlHandler = (deviceId, control, state) => () =>\n this.sendControlToInstance('dm:deviceControl', { deviceId, controlId: control.id, state });\n\n // eslint-disable-next-line react/no-unused-class-component-methods\n this.controlStateHandler = (deviceId, control) => () =>\n this.sendControlToInstance('dm:deviceControlState', { deviceId, controlId: control.id });\n\n this.props.registerHandler?.(() => this.loadData());\n }\n\n componentWillUnmount(): void {\n if (this.responseTimeout) {\n clearTimeout(this.responseTimeout);\n this.responseTimeout = null;\n }\n }\n\n // eslint-disable-next-line class-methods-use-this\n loadData(): void {\n console.error('loadData not implemented');\n }\n\n sendActionToInstance = (command: `dm:${string}`, messageToSend: Message, refresh?: () => void): void => {\n const send = async (): Promise<void> => {\n this.setState({ showSpinner: true });\n\n if (!this.props.selectedInstance) {\n throw new Error('No instance selected');\n }\n\n this.responseTimeout = setTimeout(() => {\n this.setState({ showSpinner: false });\n window.alert(I18n.t('ra_No response from the backend'));\n }, messageToSend.timeout || 5000);\n\n const response: DmActionResponse = await this.props.socket.sendTo(\n this.props.selectedInstance,\n command,\n messageToSend,\n );\n\n if (this.responseTimeout) {\n clearTimeout(this.responseTimeout);\n this.responseTimeout = null;\n }\n\n const type: string = response.type;\n console.log(`Response: ${response.type}`);\n switch (type) {\n case 'message':\n console.log(`Message received: ${response.message}`);\n if (response.message) {\n this.setState({\n message: {\n message: response.message,\n handleClose: () =>\n this.setState({ message: null }, () =>\n this.sendActionToInstance(\n 'dm:actionProgress',\n { origin: response.origin },\n refresh,\n ),\n ),\n },\n showSpinner: false,\n });\n }\n break;\n\n case 'confirm':\n console.log(`Confirm received: ${response.confirm}`);\n if (response.confirm) {\n this.setState({\n confirm: {\n message: response.confirm,\n handleClose: (confirm?: boolean) =>\n this.setState({ confirm: null }, () =>\n this.sendActionToInstance(\n 'dm:actionProgress',\n {\n origin: response.origin,\n confirm,\n },\n refresh,\n ),\n ),\n },\n showSpinner: false,\n });\n }\n break;\n\n case 'form':\n console.log('Form received');\n if (response.form) {\n const data: Record<string, any> | undefined = response.form.data;\n const originalData: Record<string, any> = {};\n if (data) {\n Object.keys(data).forEach(key => {\n if (data[key] !== undefined) {\n originalData[key] = data[key];\n }\n });\n }\n response.form.data = JSON.parse(JSON.stringify(originalData)) as Record<string, any>;\n\n this.setState({\n form: {\n ...response.form,\n changed: false,\n originalData: JSON.stringify(originalData),\n handleClose: (data: any) =>\n this.setState({ form: null }, () => {\n console.log(`Form ${JSON.stringify(data)}`);\n this.sendActionToInstance(\n 'dm:actionProgress',\n {\n origin: response.origin,\n data,\n },\n refresh,\n );\n }),\n },\n showSpinner: false,\n });\n }\n break;\n\n case 'progress':\n if (response.progress) {\n if (this.state.progress) {\n const progress = { ...this.state.progress, ...response.progress };\n this.setState({ progress, showSpinner: false });\n } else {\n this.setState({ progress: response.progress, showSpinner: false });\n }\n }\n this.sendActionToInstance('dm:actionProgress', { origin: response.origin }, refresh);\n break;\n\n case 'result':\n console.log('Response content', response.result);\n if (response.result.refresh) {\n if (response.result.refresh === true) {\n console.log('Refreshing all');\n this.loadData();\n } else if (response.result.refresh === 'instance') {\n console.log(`Refreshing instance infos: ${this.props.selectedInstance}`);\n } else if (response.result.refresh === 'device') {\n if (!refresh) {\n console.log('No refresh function provided to refresh \"device\"');\n } else {\n console.log(`Refreshing device infos: ${this.props.selectedInstance}`);\n refresh();\n }\n } else {\n console.log('Not refreshing anything');\n }\n }\n if (response.result.error) {\n console.error(`Error: ${response.result.error.message}`);\n this.setState({ showToast: response.result.error.message, showSpinner: false });\n } else {\n this.setState({ showSpinner: false });\n }\n break;\n\n default:\n console.log(`Unknown response type: ${type}`);\n this.setState({ showSpinner: false });\n break;\n }\n };\n\n void send().catch(console.error);\n };\n\n sendControlToInstance = async (\n command: string,\n messageToSend: { deviceId: string; controlId: string; state?: ControlState },\n ): Promise<null | ioBroker.State> => {\n if (!this.props.selectedInstance) {\n throw new Error('No instance selected');\n }\n const response: DmControlResponse = await this.props.socket.sendTo(\n this.props.selectedInstance,\n command,\n messageToSend,\n );\n const type = response.type;\n console.log(`Response: ${response.type}`);\n if (response.type === 'result') {\n console.log('Response content', response.result);\n if (response.result.error) {\n console.error(`Error: ${response.result.error.message}`);\n this.setState({ showToast: response.result.error.message });\n } else if (response.result.state !== undefined) {\n return response.result.state;\n }\n } else {\n console.warn('Unexpected response type', type);\n }\n\n return null;\n };\n\n // eslint-disable-next-line react/no-unused-class-component-methods\n loadDevices(): Promise<DeviceInfo[]> {\n if (!this.props.selectedInstance) {\n throw new Error('No instance selected');\n }\n return this.props.socket.sendTo(this.props.selectedInstance, 'dm:listDevices');\n }\n\n // eslint-disable-next-line react/no-unused-class-component-methods\n loadInstanceInfos(): Promise<InstanceDetails> {\n if (!this.props.selectedInstance) {\n throw new Error('No instance selected');\n }\n return this.props.socket.sendTo(this.props.selectedInstance, 'dm:instanceInfo');\n }\n\n renderMessageDialog(): React.JSX.Element | null {\n if (!this.state.message) {\n return null;\n }\n\n return (\n <Dialog\n open={!0}\n onClose={() => this.state.message?.handleClose()}\n hideBackdrop\n aria-describedby=\"message-dialog-description\"\n >\n <DialogContent>\n <DialogContentText id=\"message-dialog-description\">{this.state.message?.message}</DialogContentText>\n </DialogContent>\n <DialogActions>\n <Button\n color=\"primary\"\n onClick={() => this.state.message?.handleClose()}\n variant=\"contained\"\n autoFocus\n >\n {getTranslation('okButtonText')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n\n renderConfirmDialog(): React.JSX.Element | null {\n if (!this.state.confirm) {\n return null;\n }\n\n return (\n <Dialog\n open={!0}\n onClose={() => this.state.confirm?.handleClose()}\n hideBackdrop\n aria-describedby=\"confirm-dialog-description\"\n >\n <DialogContent>\n <DialogContentText id=\"confirm-dialog-description\">\n {getTranslation(this.state.confirm?.message)}\n </DialogContentText>\n </DialogContent>\n <DialogActions>\n <Button\n variant=\"contained\"\n color=\"primary\"\n onClick={() => this.state.confirm?.handleClose(true)}\n autoFocus\n >\n {getTranslation('yesButtonText')}\n </Button>\n <Button\n variant=\"contained\"\n color=\"grey\"\n onClick={() => this.state.confirm?.handleClose(false)}\n autoFocus\n >\n {getTranslation('noButtonText')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n\n renderSnackbar(): React.JSX.Element {\n return (\n <Snackbar\n open={!!this.state.showToast}\n autoHideDuration={6_000}\n onClose={() => this.setState({ showToast: null })}\n message={this.state.showToast}\n />\n );\n }\n\n getOkButton(button?: ActionButton | 'apply' | 'cancel' | 'close'): React.JSX.Element {\n if (typeof button === 'string') {\n button = undefined;\n }\n\n // TODO: detect if any input fields are present and if no one, do not disable the button\n\n return (\n <Button\n key=\"apply\"\n disabled={!this.state.form?.changed && !this.state.form?.ignoreApplyDisabled}\n variant={button?.variant || 'contained'}\n color={\n button?.color === 'primary' ? 'primary' : button?.color === 'secondary' ? 'secondary' : 'primary'\n }\n style={{\n backgroundColor:\n button?.color && button?.color !== 'primary' && button?.color !== 'secondary'\n ? button?.color\n : undefined,\n ...(button?.style || undefined),\n }}\n onClick={() => this.state.form?.handleClose && this.state.form.handleClose(this.state.form?.data)}\n startIcon={button?.icon ? <Icon src={button?.icon} /> : undefined}\n >\n {getTranslation(button?.label || 'okButtonText', button?.noTranslation)}\n </Button>\n );\n }\n\n getCancelButton(button?: ActionButton | 'apply' | 'cancel' | 'close'): React.JSX.Element {\n let isClose = false;\n if (typeof button === 'string') {\n isClose = button === 'close';\n button = undefined;\n }\n return (\n <Button\n key=\"cancel\"\n variant={button?.variant || 'contained'}\n color={button?.color === 'primary' ? 'primary' : button?.color === 'secondary' ? 'secondary' : 'grey'}\n style={{\n backgroundColor:\n button?.color && button?.color !== 'primary' && button?.color !== 'secondary'\n ? button?.color\n : undefined,\n ...(button?.style || undefined),\n }}\n onClick={() => this.state.form?.handleClose && this.state.form.handleClose()}\n startIcon={isClose ? <Close /> : button?.icon ? <Icon src={button?.icon} /> : undefined}\n >\n {getTranslation(button?.label || 'cancelButtonText', button?.noTranslation)}\n </Button>\n );\n }\n\n renderFormDialog(): React.JSX.Element | null {\n if (!this.state.form?.schema) {\n return null;\n }\n if (!this.props.selectedInstance) {\n throw new Error('No instance selected');\n }\n let buttons: React.JSX.Element[];\n if (this.state.form.buttons) {\n buttons = [];\n this.state.form.buttons.forEach((button: ActionButton | 'apply' | 'cancel' | 'close'): void => {\n if (typeof button === 'object' && button.type === 'copyToClipboard') {\n buttons.push(\n <Button\n key=\"copyToClipboard\"\n variant={button.variant || 'outlined'}\n color={\n button.color === 'primary'\n ? 'primary'\n : button.color === 'secondary'\n ? 'secondary'\n : undefined\n }\n style={{\n backgroundColor:\n button.color && button.color !== 'primary' && button.color !== 'secondary'\n ? button.color\n : undefined,\n ...(button.style || undefined),\n }}\n onClick={() => {\n if (button.copyToClipboardAttr && this.state.form!.data) {\n const val = this.state.form!.data[button.copyToClipboardAttr];\n if (typeof val === 'string') {\n Utils.copyToClipboard(val);\n } else {\n Utils.copyToClipboard(JSON.stringify(val, null, 2));\n }\n window.alert(I18n.t('copied'));\n } else if (this.state.form?.data) {\n Utils.copyToClipboard(JSON.stringify(this.state.form.data, null, 2));\n window.alert(I18n.t('copied'));\n } else {\n window.alert(I18n.t('nothingToCopy'));\n }\n }}\n startIcon={button?.icon ? <Icon src={button?.icon} /> : <ContentCopy />}\n >\n {getTranslation(button?.label || 'ctcButtonText', button?.noTranslation)}\n </Button>,\n );\n } else if (button === 'apply' || (button as ActionButton).type === 'apply') {\n buttons.push(this.getOkButton(button));\n } else {\n buttons.push(this.getCancelButton(button));\n }\n });\n } else {\n buttons = [this.getOkButton(), this.getCancelButton()];\n }\n\n return (\n <Dialog\n open={!0}\n onClose={() => this.state.form!.handleClose?.()}\n hideBackdrop\n fullWidth\n sx={{\n '& .MuiDialog-paper': {\n minWidth: this.state.form.minWidth || undefined,\n },\n }}\n maxWidth={this.state.form.maxWidth || 'md'}\n >\n {this.state.form?.title ? (\n <DialogTitle>\n {getTranslation(\n this.state.form?.label || this.state.form?.title,\n this.state.form.noTranslation,\n )}\n </DialogTitle>\n ) : null}\n <DialogContent>\n <JsonConfig\n instanceId={this.props.selectedInstance}\n schema={this.state.form.schema as ConfigItemPanel | ConfigItemTabs}\n data={this.state.form.data || {}}\n socket={this.props.socket as AdminConnection}\n onChange={(data: Record<string, any>) => {\n console.log('handleFormChange', { data });\n const form: CommunicationFormInState = {\n ...(this.state.form as CommunicationFormInState),\n };\n if (form) {\n form.data = data;\n form.changed = JSON.stringify(data) !== form.originalData;\n this.setState({ form });\n }\n }}\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 />\n </DialogContent>\n <DialogActions>{buttons}</DialogActions>\n </Dialog>\n );\n }\n\n renderProgressDialog(): React.JSX.Element | null {\n if (!this.state.progress?.open) {\n return null;\n }\n return (\n <Dialog\n open={!0}\n onClose={() => {}}\n hideBackdrop\n >\n {(\n this.state.progress as {\n open: boolean;\n indeterminate: boolean;\n }\n ).indeterminate ? (\n <LinearProgress variant=\"indeterminate\" />\n ) : (\n <LinearProgress\n variant=\"determinate\"\n value={\n (\n this.state.progress as {\n open: boolean;\n progress: number;\n }\n ).progress || 0\n }\n />\n )}\n </Dialog>\n );\n }\n\n // eslint-disable-next-line class-methods-use-this\n renderContent(): React.JSX.Element | React.JSX.Element[] | null {\n return null;\n }\n\n renderSpinner(): React.JSX.Element | null {\n if (!this.state.showSpinner) {\n return null;\n }\n return (\n <Backdrop\n style={{ zIndex: 1000 }}\n open={!0}\n >\n <CircularProgress />\n </Backdrop>\n );\n }\n\n renderConfirmationDialog(): React.JSX.Element | null {\n if (!this.state.showConfirmation) {\n return null;\n }\n return (\n <Dialog\n open={!0}\n onClose={() => this.setState({ showConfirmation: null })}\n >\n <DialogTitle>\n {getTranslation(\n this.state.showConfirmation.confirmation === true\n ? getTranslation('areYouSureText')\n : getTranslation(this.state.showConfirmation.confirmation as ioBroker.StringOrTranslated),\n )}\n </DialogTitle>\n <DialogActions>\n <Button\n variant=\"contained\"\n color=\"primary\"\n onClick={() => {\n if (!this.state.showConfirmation) {\n return;\n }\n\n const showConfirmation = this.state.showConfirmation;\n this.setState({ showConfirmation: null }, () => {\n if (showConfirmation.deviceId) {\n this.sendActionToInstance(\n 'dm:deviceAction',\n {\n actionId: showConfirmation.id,\n deviceId: showConfirmation.deviceId,\n timeout: showConfirmation.timeout,\n },\n showConfirmation.refresh,\n );\n } else {\n this.sendActionToInstance('dm:instanceAction', {\n actionId: showConfirmation.id,\n timeout: showConfirmation.timeout,\n });\n }\n });\n }}\n autoFocus\n startIcon={<Check />}\n >\n {getTranslation('yesButtonText')}\n </Button>\n <Button\n variant=\"contained\"\n color=\"grey\"\n onClick={() => this.setState({ showConfirmation: null })}\n startIcon={<Close />}\n >\n {getTranslation('cancelButtonText')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n\n onShowInputOk(): void {\n if (!this.state.showInput) {\n return;\n }\n\n const showInput = this.state.showInput;\n this.setState({ showInput: null }, () => {\n if (showInput.deviceId) {\n this.sendActionToInstance(\n 'dm:deviceAction',\n {\n actionId: showInput.id,\n deviceId: showInput.deviceId,\n timeout: showInput.timeout,\n value:\n showInput.inputBefore?.type === 'checkbox'\n ? !!this.state.inputValue\n : showInput.inputBefore?.type === 'number'\n ? parseFloat(this.state.inputValue as string) || 0\n : this.state.inputValue,\n },\n showInput.refresh,\n );\n } else {\n this.sendActionToInstance('dm:instanceAction', {\n actionId: showInput.id,\n timeout: showInput.timeout,\n value:\n showInput.inputBefore?.type === 'checkbox'\n ? !!this.state.inputValue\n : showInput.inputBefore?.type === 'number'\n ? parseFloat(this.state.inputValue as string) || 0\n : this.state.inputValue,\n });\n }\n });\n }\n\n renderInputDialog(): React.JSX.Element | null {\n if (!this.state.showInput || !this.state.showInput.inputBefore) {\n return null;\n }\n let okDisabled = false;\n if (!this.state.showInput.inputBefore.allowEmptyValue && this.state.showInput.inputBefore.type !== 'checkbox') {\n if (\n this.state.showInput.inputBefore.type === 'number' ||\n this.state.showInput.inputBefore.type === 'slider'\n ) {\n okDisabled =\n this.state.inputValue === '' ||\n this.state.inputValue === null ||\n !window.isFinite(this.state.inputValue as number);\n } else {\n okDisabled = !this.state.inputValue;\n }\n }\n\n return (\n <Dialog\n open={!0}\n onClose={() => this.setState({ showInput: null })}\n >\n <DialogTitle>{getTranslation('pleaseEnterValueText')}</DialogTitle>\n <DialogContent>\n {this.state.showInput.inputBefore.type === 'text' ||\n this.state.showInput.inputBefore.type === 'number' ||\n !this.state.showInput.inputBefore.type ? (\n <TextField\n autoFocus\n margin=\"dense\"\n label={getTranslation(this.state.showInput.inputBefore.label)}\n slotProps={{\n htmlInput:\n this.state.showInput.inputBefore.type === 'number'\n ? {\n min: this.state.showInput.inputBefore.min,\n max: this.state.showInput.inputBefore.max,\n step: this.state.showInput.inputBefore.step,\n }\n : undefined,\n input: {\n endAdornment: this.state.inputValue ? (\n <InputAdornment position=\"end\">\n <IconButton\n tabIndex={-1}\n size=\"small\"\n onClick={() => this.setState({ inputValue: '' })}\n >\n <Close />\n </IconButton>\n </InputAdornment>\n ) : null,\n },\n }}\n type={this.state.showInput.inputBefore.type === 'number' ? 'number' : 'text'}\n fullWidth\n value={this.state.inputValue}\n onChange={e => this.setState({ inputValue: e.target.value })}\n onKeyUp={(e: React.KeyboardEvent) => {\n if (e.key === 'Enter') {\n this.onShowInputOk();\n }\n }}\n />\n ) : null}\n {this.state.showInput.inputBefore.type === 'checkbox' ? (\n <FormControlLabel\n control={\n <Checkbox\n checked={!!this.state.inputValue}\n autoFocus\n onChange={e => this.setState({ inputValue: e.target.checked })}\n />\n }\n label={getTranslation(this.state.showInput.inputBefore.label)}\n />\n ) : null}\n {this.state.showInput.inputBefore.type === 'select' ? (\n <FormControl fullWidth>\n <InputLabel>{getTranslation(this.state.showInput.inputBefore.label)}</InputLabel>\n <Select\n variant=\"standard\"\n value={this.state.inputValue}\n onChange={e => this.setState({ inputValue: e.target.value })}\n >\n {this.state.showInput.inputBefore.options?.map(item => (\n <MenuItem\n key={item.value}\n value={item.value}\n >\n {getTranslation(item.label)}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n ) : null}\n {this.state.showInput.inputBefore.type === 'slider' ? (\n <Box sx={{ width: '100%' }}>\n <Typography gutterBottom>\n {getTranslation(this.state.showInput.inputBefore.label)}\n </Typography>\n <Grid2\n container\n spacing={2}\n alignItems=\"center\"\n >\n <Grid2>\n <Slider\n value={typeof this.state.inputValue === 'number' ? this.state.inputValue : 0}\n onChange={(_event: Event, newValue: number) =>\n this.setState({ inputValue: newValue })\n }\n />\n </Grid2>\n <Grid2>\n <Input\n value={this.state.inputValue}\n size=\"small\"\n onChange={e =>\n this.setState({\n inputValue: e.target.value === '' ? 0 : Number(e.target.value),\n })\n }\n onBlur={() => {\n if (!this.state.showInput) {\n return;\n }\n\n const min =\n this.state.showInput.inputBefore?.min === undefined\n ? 0\n : this.state.showInput.inputBefore.min;\n const max =\n this.state.showInput.inputBefore?.max === undefined\n ? 100\n : this.state.showInput.inputBefore.max;\n\n if ((this.state.inputValue as number) < min) {\n this.setState({ inputValue: min });\n } else if ((this.state.inputValue as number) > max) {\n this.setState({ inputValue: max });\n }\n }}\n inputProps={{\n step: this.state.showInput.inputBefore.step,\n min:\n this.state.showInput.inputBefore.min === undefined\n ? 0\n : this.state.showInput.inputBefore.min,\n max:\n this.state.showInput.inputBefore.max === undefined\n ? 100\n : this.state.showInput.inputBefore.max,\n type: 'number',\n }}\n />\n </Grid2>\n </Grid2>\n </Box>\n ) : null}\n </DialogContent>\n <DialogActions>\n <Button\n variant=\"contained\"\n disabled={okDisabled}\n color=\"primary\"\n onClick={() => this.onShowInputOk()}\n startIcon={<Check />}\n >\n {getTranslation('yesButtonText')}\n </Button>\n <Button\n variant=\"contained\"\n color=\"grey\"\n onClick={() => this.setState({ showInput: null })}\n startIcon={<Close />}\n >\n {getTranslation('cancelButtonText')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n\n render(): React.JSX.Element {\n return (\n <>\n {this.renderSnackbar()}\n {this.renderContent()}\n {this.renderConfirmDialog()}\n {this.renderMessageDialog()}\n {this.renderFormDialog()}\n {this.renderProgressDialog()}\n {this.renderConfirmationDialog()}\n {this.renderInputDialog()}\n {this.renderSpinner()}\n </>\n );\n }\n}\n\nexport default Communication;\n"]}
1
+ {"version":3,"file":"Communication.js","sourceRoot":"./src/","sources":["Communication.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n I18n,\n Icon,\n Utils,\n type AdminConnection,\n type Connection,\n type IobTheme,\n type ThemeName,\n type ThemeType,\n} from '@iobroker/adapter-react-v5';\nimport type { ConfigItemPanel, ConfigItemTabs } from '@iobroker/json-config';\nimport { Check, Close, ContentCopy } from '@mui/icons-material';\nimport {\n Backdrop,\n Box,\n Button,\n Checkbox,\n CircularProgress,\n Dialog,\n DialogActions,\n DialogContent,\n DialogContentText,\n DialogTitle,\n FormControl,\n FormControlLabel,\n Grid2,\n IconButton,\n Input,\n InputAdornment,\n InputLabel,\n LinearProgress,\n MenuItem,\n Select,\n Slider,\n Snackbar,\n TextField,\n Typography,\n} from '@mui/material';\nimport React, { Component } from 'react';\nimport JsonConfig from './JsonConfig';\nimport type {\n ActionBase,\n ActionButton,\n CommunicationForm,\n ControlBase,\n ControlState,\n InstanceDetails,\n ProgressUpdate,\n} from './protocol/api';\nimport type { CommandName, DmProtocolBase, LoadDevicesCallback, Message } from './protocol/DmProtocolBase';\nimport { DmProtocolV1 } from './protocol/DmProtocolV1';\nimport { DmProtocolV2 } from './protocol/DmProtocolV2';\nimport { DmProtocolV3 } from './protocol/DmProtocolV3';\nimport { UnknownDmProtocol } from './protocol/UnknownDmProtocol';\nimport { getTranslation } from './Utils';\n\ndeclare module '@mui/material/Button' {\n interface ButtonPropsColorOverrides {\n grey: true;\n }\n}\n\nexport type CommunicationProps = {\n /** Socket connection */\n socket: Connection;\n /** Instance to communicate with device-manager backend, like `adapterName.X` */\n selectedInstance?: string; // adapterName.X\n registerHandler?: (handler: null | ((command: string) => void)) => void;\n themeName: ThemeName;\n themeType: ThemeType;\n theme: IobTheme;\n isFloatComma: boolean;\n dateFormat: string;\n};\n\ninterface CommunicationFormInState extends CommunicationForm {\n handleClose?: (data?: Record<string, any>) => void;\n originalData: string;\n changed: boolean;\n}\n\ninterface InputAction extends ActionBase {\n /** If it is a device action */\n deviceId?: string;\n /** Optional refresh function to execute */\n refresh?: () => void;\n}\n\nexport type CommunicationState = {\n showSpinner: boolean;\n showToast: string | null;\n message: {\n message: string;\n handleClose: () => void;\n } | null;\n confirm: {\n message: string;\n handleClose: (confirmation?: boolean) => void;\n } | null;\n form: CommunicationFormInState | null;\n progress: ProgressUpdate | null;\n showConfirmation: InputAction | null;\n showInput: InputAction | null;\n inputValue: string | boolean | number | null;\n selectedInstance: string; // adapterName.X\n};\n\n/**\n * Communication Component\n */\nexport default class Communication<P extends CommunicationProps, S extends CommunicationState> extends Component<P, S> {\n private protocol: DmProtocolBase = new UnknownDmProtocol();\n private responseTimeout: ReturnType<typeof setTimeout> | null = null;\n\n // eslint-disable-next-line react/no-unused-class-component-methods\n instanceHandler: (action: ActionBase) => () => void;\n\n // eslint-disable-next-line react/no-unused-class-component-methods\n deviceHandler: (deviceId: string, action: ActionBase, refresh: () => void) => () => void;\n\n // eslint-disable-next-line react/no-unused-class-component-methods\n controlHandler: (\n deviceId: string,\n control: ControlBase,\n state: ControlState,\n ) => () => Promise<ioBroker.State | null>;\n\n // eslint-disable-next-line react/no-unused-class-component-methods\n controlStateHandler: (deviceId: string, control: ControlBase) => () => Promise<ioBroker.State | null>;\n\n constructor(props: P) {\n super(props);\n\n this.state = {\n showSpinner: false,\n showToast: null,\n message: null,\n confirm: null,\n form: null,\n progress: null,\n showConfirmation: null,\n showInput: null,\n inputValue: null,\n selectedInstance: this.props.selectedInstance ?? (window.localStorage.getItem('dmSelectedInstance') || ''),\n } as S;\n\n // eslint-disable-next-line react/no-unused-class-component-methods\n this.instanceHandler = action => () => {\n if (action.confirmation) {\n this.setState({ showConfirmation: action });\n return;\n }\n if (action.inputBefore) {\n this.setState({ showInput: action });\n return;\n }\n\n this.sendActionToInstance('dm:instanceAction', { actionId: action.id, timeout: action.timeout });\n };\n\n // eslint-disable-next-line react/no-unused-class-component-methods\n this.deviceHandler = (deviceId, action, refresh) => () => {\n if (action.confirmation) {\n this.setState({ showConfirmation: { ...action, deviceId, refresh } });\n return;\n }\n if (action.inputBefore) {\n this.setState({\n showInput: { ...action, deviceId, refresh },\n inputValue: action.inputBefore.defaultValue || '',\n });\n return;\n }\n\n this.sendActionToInstance(\n 'dm:deviceAction',\n { deviceId, actionId: action.id, timeout: action.timeout },\n refresh,\n );\n };\n\n // eslint-disable-next-line react/no-unused-class-component-methods\n this.controlHandler = (deviceId, control, state) => () =>\n this.sendControlToInstance('dm:deviceControl', { deviceId, controlId: control.id, state });\n\n // eslint-disable-next-line react/no-unused-class-component-methods\n this.controlStateHandler = (deviceId, control) => () =>\n this.sendControlToInstance('dm:deviceControlState', { deviceId, controlId: control.id });\n\n this.props.registerHandler?.(() => this.loadData());\n }\n\n componentWillUnmount(): void {\n if (this.responseTimeout) {\n clearTimeout(this.responseTimeout);\n this.responseTimeout = null;\n }\n }\n\n // eslint-disable-next-line class-methods-use-this\n loadData(): void {\n console.error('loadData not implemented');\n }\n\n sendActionToInstance = (command: CommandName, messageToSend: Message, refresh?: () => void): void => {\n const send = async (): Promise<void> => {\n this.setState({ showSpinner: true });\n\n this.responseTimeout = setTimeout(() => {\n this.setState({ showSpinner: false });\n window.alert(I18n.t('ra_No response from the backend'));\n }, messageToSend.timeout || 5000);\n\n const response = await this.protocol.sendAction(command, messageToSend);\n\n if (this.responseTimeout) {\n clearTimeout(this.responseTimeout);\n this.responseTimeout = null;\n }\n\n const type = response.type;\n console.log(`Response: ${type}`);\n switch (response.type) {\n case 'message': {\n const message = getTranslation(response.message);\n console.log(`Message received: ${message}`);\n if (message) {\n this.setState({\n message: {\n message,\n handleClose: () =>\n this.setState({ message: null }, () =>\n this.sendActionToInstance(\n 'dm:actionProgress',\n { origin: response.origin },\n refresh,\n ),\n ),\n },\n showSpinner: false,\n });\n }\n break;\n }\n\n case 'confirm': {\n const message = getTranslation(response.confirm);\n console.log(`Confirm received: ${message}`);\n if (message) {\n this.setState({\n confirm: {\n message: message,\n handleClose: (confirm?: boolean) =>\n this.setState({ confirm: null }, () =>\n this.sendActionToInstance(\n 'dm:actionProgress',\n {\n origin: response.origin,\n confirm,\n },\n refresh,\n ),\n ),\n },\n showSpinner: false,\n });\n }\n break;\n }\n\n case 'form':\n console.log('Form received');\n if (response.form) {\n const data: Record<string, any> | undefined = response.form.data;\n const originalData: Record<string, any> = {};\n if (data) {\n Object.keys(data).forEach(key => {\n if (data[key] !== undefined) {\n originalData[key] = data[key];\n }\n });\n }\n response.form.data = JSON.parse(JSON.stringify(originalData)) as Record<string, any>;\n\n this.setState({\n form: {\n ...response.form,\n changed: false,\n originalData: JSON.stringify(originalData),\n handleClose: (data: any) =>\n this.setState({ form: null }, () => {\n console.log(`Form ${JSON.stringify(data)}`);\n this.sendActionToInstance(\n 'dm:actionProgress',\n {\n origin: response.origin,\n data,\n },\n refresh,\n );\n }),\n },\n showSpinner: false,\n });\n }\n break;\n\n case 'progress':\n console.log('Progress received', response.progress);\n if (response.progress) {\n if (response.progress.open === false) {\n this.setState({ progress: null, showSpinner: false });\n } else if (this.state.progress) {\n const progress = { ...this.state.progress, ...response.progress };\n this.setState({ progress, showSpinner: false });\n } else {\n this.setState({ progress: response.progress, showSpinner: false });\n }\n }\n this.sendActionToInstance('dm:actionProgress', { origin: response.origin }, refresh);\n break;\n\n case 'result':\n console.log('Response content', response.result);\n if ('refresh' in response.result && response.result.refresh) {\n if (response.result.refresh === true || response.result.refresh === 'all') {\n console.log('Refreshing all');\n this.loadData();\n } else if (response.result.refresh === 'instance') {\n console.log(`Refreshing instance infos: ${this.state.selectedInstance}`);\n } else if (response.result.refresh === 'devices') {\n if (!refresh) {\n console.log('No refresh function provided to refresh \"devices\"');\n } else {\n console.log(`Refreshing device infos: ${this.state.selectedInstance}`);\n refresh();\n }\n } else {\n console.log('Not refreshing anything');\n }\n }\n if ('error' in response.result && response.result.error) {\n console.error(`Error: ${response.result.error.message}`);\n this.setState({ showToast: response.result.error.message, showSpinner: false });\n } else {\n this.setState({ showSpinner: false });\n }\n break;\n\n default:\n console.log(`Unknown response type: ${type}`);\n this.setState({ showSpinner: false });\n break;\n }\n };\n\n void send().catch(console.error);\n };\n\n sendControlToInstance = async (\n command: CommandName,\n messageToSend: { deviceId: string; controlId: string; state?: ControlState },\n ): Promise<null | ioBroker.State> => {\n const response = await this.protocol.sendControl(command, messageToSend);\n const type = response.type;\n console.log(`Response: ${response.type}`);\n if (response.type === 'result') {\n console.log('Response content', response.result);\n if ('error' in response.result) {\n console.error(`Error: ${response.result.error.message}`);\n this.setState({ showToast: response.result.error.message });\n } else if (response.result.state !== undefined) {\n return response.result.state;\n }\n } else {\n console.warn('Unexpected response type', type);\n }\n\n return null;\n };\n\n // eslint-disable-next-line react/no-unused-class-component-methods\n loadDevices(callback: LoadDevicesCallback): Promise<void> {\n return this.protocol.loadDevices(callback);\n }\n\n // eslint-disable-next-line react/no-unused-class-component-methods\n async loadInstanceInfos(): Promise<InstanceDetails> {\n if (!this.state.selectedInstance) {\n throw new Error('No instance selected');\n }\n const details = await this.props.socket.sendTo(this.state.selectedInstance, 'dm:instanceInfo');\n console.log('Instance details of', this.state.selectedInstance, details);\n if (details.apiVersion === 'v1') {\n this.protocol = new DmProtocolV1(this.state.selectedInstance, this.props.socket);\n } else if (details.apiVersion === 'v2') {\n this.protocol = new DmProtocolV2(this.state.selectedInstance, this.props.socket);\n } else if (details.apiVersion === 'v3') {\n this.protocol = new DmProtocolV3(this.state.selectedInstance, this.props.socket);\n } else {\n this.protocol = new UnknownDmProtocol();\n }\n\n return this.protocol.convertInstanceDetails(details);\n }\n\n renderMessageDialog(): React.JSX.Element | null {\n if (!this.state.message) {\n return null;\n }\n\n const message = this.state.message;\n return (\n <Dialog\n open={!0}\n onClose={() => message.handleClose()}\n hideBackdrop\n aria-describedby=\"message-dialog-description\"\n >\n <DialogContent>\n <DialogContentText id=\"message-dialog-description\">{message.message}</DialogContentText>\n </DialogContent>\n <DialogActions>\n <Button\n color=\"primary\"\n onClick={() => message.handleClose()}\n variant=\"contained\"\n autoFocus\n >\n {getTranslation('okButtonText')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n\n renderConfirmDialog(): React.JSX.Element | null {\n if (!this.state.confirm) {\n return null;\n }\n\n const confirm = this.state.confirm;\n return (\n <Dialog\n open={!0}\n onClose={() => confirm.handleClose()}\n hideBackdrop\n aria-describedby=\"confirm-dialog-description\"\n >\n <DialogContent>\n <DialogContentText id=\"confirm-dialog-description\">\n {getTranslation(confirm.message)}\n </DialogContentText>\n </DialogContent>\n <DialogActions>\n <Button\n variant=\"contained\"\n color=\"primary\"\n onClick={() => confirm.handleClose(true)}\n autoFocus\n >\n {getTranslation('yesButtonText')}\n </Button>\n <Button\n variant=\"contained\"\n color=\"grey\"\n onClick={() => confirm.handleClose(false)}\n autoFocus\n >\n {getTranslation('noButtonText')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n\n renderSnackbar(): React.JSX.Element {\n return (\n <Snackbar\n open={!!this.state.showToast}\n autoHideDuration={6_000}\n onClose={() => this.setState({ showToast: null })}\n message={this.state.showToast}\n />\n );\n }\n\n getOkButton(button?: ActionButton | 'apply' | 'cancel' | 'close'): React.JSX.Element {\n if (typeof button === 'string') {\n button = undefined;\n }\n\n // TODO: detect if any input fields are present and if no one, do not disable the button\n\n return (\n <Button\n key=\"apply\"\n disabled={!this.state.form?.changed && !this.state.form?.ignoreApplyDisabled}\n variant={button?.variant || 'contained'}\n color={\n button?.color === 'primary' ? 'primary' : button?.color === 'secondary' ? 'secondary' : 'primary'\n }\n style={{\n backgroundColor:\n button?.color && button?.color !== 'primary' && button?.color !== 'secondary'\n ? button?.color\n : undefined,\n ...(button?.style || undefined),\n }}\n onClick={() => this.state.form?.handleClose && this.state.form.handleClose(this.state.form?.data)}\n startIcon={button?.icon ? <Icon src={button?.icon} /> : undefined}\n >\n {getTranslation(button?.label || 'okButtonText', button?.noTranslation)}\n </Button>\n );\n }\n\n getCancelButton(button?: ActionButton | 'apply' | 'cancel' | 'close'): React.JSX.Element {\n let isClose = false;\n if (typeof button === 'string') {\n isClose = button === 'close';\n button = undefined;\n }\n return (\n <Button\n key=\"cancel\"\n variant={button?.variant || 'contained'}\n color={button?.color === 'primary' ? 'primary' : button?.color === 'secondary' ? 'secondary' : 'grey'}\n style={{\n backgroundColor:\n button?.color && button?.color !== 'primary' && button?.color !== 'secondary'\n ? button?.color\n : undefined,\n ...(button?.style || undefined),\n }}\n onClick={() => this.state.form?.handleClose && this.state.form.handleClose()}\n startIcon={isClose ? <Close /> : button?.icon ? <Icon src={button?.icon} /> : undefined}\n >\n {getTranslation(button?.label || 'cancelButtonText', button?.noTranslation)}\n </Button>\n );\n }\n\n renderFormDialog(): React.JSX.Element | null {\n if (!this.state.form?.schema) {\n return null;\n }\n if (!this.state.selectedInstance) {\n throw new Error('No instance selected');\n }\n\n const form = this.state.form;\n let buttons: React.JSX.Element[];\n if (form.buttons) {\n buttons = [];\n form.buttons.forEach((button: ActionButton | 'apply' | 'cancel' | 'close'): void => {\n if (typeof button === 'object' && button.type === 'copyToClipboard') {\n buttons.push(\n <Button\n key=\"copyToClipboard\"\n variant={button.variant || 'outlined'}\n color={\n button.color === 'primary'\n ? 'primary'\n : button.color === 'secondary'\n ? 'secondary'\n : undefined\n }\n style={{\n backgroundColor:\n button.color && button.color !== 'primary' && button.color !== 'secondary'\n ? button.color\n : undefined,\n ...(button.style || undefined),\n }}\n onClick={() => {\n if (button.copyToClipboardAttr && form.data) {\n const val = form.data[button.copyToClipboardAttr];\n if (typeof val === 'string') {\n Utils.copyToClipboard(val);\n } else {\n Utils.copyToClipboard(JSON.stringify(val, null, 2));\n }\n window.alert(I18n.t('copied'));\n } else if (form.data) {\n Utils.copyToClipboard(JSON.stringify(form.data, null, 2));\n window.alert(I18n.t('copied'));\n } else {\n window.alert(I18n.t('nothingToCopy'));\n }\n }}\n startIcon={button?.icon ? <Icon src={button?.icon} /> : <ContentCopy />}\n >\n {getTranslation(button?.label || 'ctcButtonText', button?.noTranslation)}\n </Button>,\n );\n } else if (button === 'apply' || (button as ActionButton).type === 'apply') {\n buttons.push(this.getOkButton(button));\n } else {\n buttons.push(this.getCancelButton(button));\n }\n });\n } else {\n buttons = [this.getOkButton(), this.getCancelButton()];\n }\n\n return (\n <Dialog\n onClose={() => form.handleClose?.()}\n hideBackdrop\n fullWidth\n open\n sx={{\n '& .MuiDialog-paper': {\n minWidth: form.minWidth || undefined,\n },\n }}\n maxWidth={form.maxWidth || 'md'}\n >\n {form.title ? (\n <DialogTitle>{getTranslation(form.label || form.title, form.noTranslation)}</DialogTitle>\n ) : null}\n <DialogContent>\n <JsonConfig\n instanceId={this.state.selectedInstance}\n schema={form.schema as ConfigItemPanel | ConfigItemTabs}\n data={form.data || {}}\n socket={this.props.socket as AdminConnection}\n onChange={(data: Record<string, any>) => {\n console.log('handleFormChange', { data });\n if (form) {\n form.data = data;\n form.changed = JSON.stringify(data) !== form.originalData;\n this.setState({ form });\n }\n }}\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 />\n </DialogContent>\n <DialogActions>{buttons}</DialogActions>\n </Dialog>\n );\n }\n\n renderProgressDialog(): React.JSX.Element | null {\n if (!this.state.progress) {\n return null;\n }\n return (\n <Dialog\n onClose={() => {}}\n hideBackdrop\n open\n >\n {this.state.progress.title && <DialogTitle>{getTranslation(this.state.progress.title)}</DialogTitle>}\n <DialogContent>\n {this.state.progress.label && (\n <DialogContentText>{getTranslation(this.state.progress.label)}</DialogContentText>\n )}\n <LinearProgress\n variant={this.state.progress.indeterminate ? 'indeterminate' : 'determinate'}\n value={this.state.progress.value}\n />\n </DialogContent>\n </Dialog>\n );\n }\n\n // eslint-disable-next-line class-methods-use-this\n renderContent(): React.JSX.Element | React.JSX.Element[] | null {\n return null;\n }\n\n renderSpinner(): React.JSX.Element | null {\n if (!this.state.showSpinner) {\n return null;\n }\n return (\n <Backdrop\n style={{ zIndex: 1000 }}\n open\n >\n <CircularProgress />\n </Backdrop>\n );\n }\n\n renderConfirmationDialog(): React.JSX.Element | null {\n if (!this.state.showConfirmation) {\n return null;\n }\n return (\n <Dialog\n onClose={() => this.setState({ showConfirmation: null })}\n open\n >\n <DialogTitle>\n {getTranslation(\n this.state.showConfirmation.confirmation === true\n ? getTranslation('areYouSureText')\n : getTranslation(this.state.showConfirmation.confirmation as ioBroker.StringOrTranslated),\n )}\n </DialogTitle>\n <DialogActions>\n <Button\n variant=\"contained\"\n color=\"primary\"\n onClick={() => {\n if (!this.state.showConfirmation) {\n return;\n }\n\n const showConfirmation = this.state.showConfirmation;\n this.setState({ showConfirmation: null }, () => {\n if (showConfirmation.deviceId) {\n this.sendActionToInstance(\n 'dm:deviceAction',\n {\n actionId: showConfirmation.id,\n deviceId: showConfirmation.deviceId,\n timeout: showConfirmation.timeout,\n },\n showConfirmation.refresh,\n );\n } else {\n this.sendActionToInstance('dm:instanceAction', {\n actionId: showConfirmation.id,\n timeout: showConfirmation.timeout,\n });\n }\n });\n }}\n autoFocus\n startIcon={<Check />}\n >\n {getTranslation('yesButtonText')}\n </Button>\n <Button\n variant=\"contained\"\n color=\"grey\"\n onClick={() => this.setState({ showConfirmation: null })}\n startIcon={<Close />}\n >\n {getTranslation('cancelButtonText')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n\n onShowInputOk(): void {\n if (!this.state.showInput) {\n return;\n }\n\n const showInput = this.state.showInput;\n this.setState({ showInput: null }, () => {\n if (showInput.deviceId) {\n this.sendActionToInstance(\n 'dm:deviceAction',\n {\n actionId: showInput.id,\n deviceId: showInput.deviceId,\n timeout: showInput.timeout,\n value:\n showInput.inputBefore?.type === 'checkbox'\n ? !!this.state.inputValue\n : showInput.inputBefore?.type === 'number'\n ? parseFloat(this.state.inputValue as string) || 0\n : this.state.inputValue,\n },\n showInput.refresh,\n );\n } else {\n this.sendActionToInstance('dm:instanceAction', {\n actionId: showInput.id,\n timeout: showInput.timeout,\n value:\n showInput.inputBefore?.type === 'checkbox'\n ? !!this.state.inputValue\n : showInput.inputBefore?.type === 'number'\n ? parseFloat(this.state.inputValue as string) || 0\n : this.state.inputValue,\n });\n }\n });\n }\n\n renderInputDialog(): React.JSX.Element | null {\n if (!this.state.showInput || !this.state.showInput.inputBefore) {\n return null;\n }\n let okDisabled = false;\n if (!this.state.showInput.inputBefore.allowEmptyValue && this.state.showInput.inputBefore.type !== 'checkbox') {\n if (\n this.state.showInput.inputBefore.type === 'number' ||\n this.state.showInput.inputBefore.type === 'slider'\n ) {\n okDisabled =\n this.state.inputValue === '' ||\n this.state.inputValue === null ||\n !window.isFinite(this.state.inputValue as number);\n } else {\n okDisabled = !this.state.inputValue;\n }\n }\n\n return (\n <Dialog\n onClose={() => this.setState({ showInput: null })}\n open\n >\n <DialogTitle>{getTranslation('pleaseEnterValueText')}</DialogTitle>\n <DialogContent>\n {this.state.showInput.inputBefore.type === 'text' ||\n this.state.showInput.inputBefore.type === 'number' ||\n !this.state.showInput.inputBefore.type ? (\n <TextField\n autoFocus\n margin=\"dense\"\n label={getTranslation(this.state.showInput.inputBefore.label)}\n slotProps={{\n htmlInput:\n this.state.showInput.inputBefore.type === 'number'\n ? {\n min: this.state.showInput.inputBefore.min,\n max: this.state.showInput.inputBefore.max,\n step: this.state.showInput.inputBefore.step,\n }\n : undefined,\n input: {\n endAdornment: this.state.inputValue ? (\n <InputAdornment position=\"end\">\n <IconButton\n tabIndex={-1}\n size=\"small\"\n onClick={() => this.setState({ inputValue: '' })}\n >\n <Close />\n </IconButton>\n </InputAdornment>\n ) : null,\n },\n }}\n type={this.state.showInput.inputBefore.type === 'number' ? 'number' : 'text'}\n fullWidth\n value={this.state.inputValue}\n onChange={e => this.setState({ inputValue: e.target.value })}\n onKeyUp={(e: React.KeyboardEvent) => {\n if (e.key === 'Enter') {\n this.onShowInputOk();\n }\n }}\n />\n ) : null}\n {this.state.showInput.inputBefore.type === 'checkbox' ? (\n <FormControlLabel\n control={\n <Checkbox\n checked={!!this.state.inputValue}\n autoFocus\n onChange={e => this.setState({ inputValue: e.target.checked })}\n />\n }\n label={getTranslation(this.state.showInput.inputBefore.label)}\n />\n ) : null}\n {this.state.showInput.inputBefore.type === 'select' ? (\n <FormControl fullWidth>\n <InputLabel>{getTranslation(this.state.showInput.inputBefore.label)}</InputLabel>\n <Select\n variant=\"standard\"\n value={this.state.inputValue}\n onChange={e => this.setState({ inputValue: e.target.value })}\n >\n {this.state.showInput.inputBefore.options?.map(item => (\n <MenuItem\n key={item.value}\n value={item.value}\n >\n {getTranslation(item.label)}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n ) : null}\n {this.state.showInput.inputBefore.type === 'slider' ? (\n <Box sx={{ width: '100%' }}>\n <Typography gutterBottom>\n {getTranslation(this.state.showInput.inputBefore.label)}\n </Typography>\n <Grid2\n container\n spacing={2}\n alignItems=\"center\"\n >\n <Grid2>\n <Slider\n value={typeof this.state.inputValue === 'number' ? this.state.inputValue : 0}\n onChange={(_event: Event, newValue: number) =>\n this.setState({ inputValue: newValue })\n }\n />\n </Grid2>\n <Grid2>\n <Input\n value={this.state.inputValue}\n size=\"small\"\n onChange={e =>\n this.setState({\n inputValue: e.target.value === '' ? 0 : Number(e.target.value),\n })\n }\n onBlur={() => {\n if (!this.state.showInput) {\n return;\n }\n\n const min =\n this.state.showInput.inputBefore?.min === undefined\n ? 0\n : this.state.showInput.inputBefore.min;\n const max =\n this.state.showInput.inputBefore?.max === undefined\n ? 100\n : this.state.showInput.inputBefore.max;\n\n if ((this.state.inputValue as number) < min) {\n this.setState({ inputValue: min });\n } else if ((this.state.inputValue as number) > max) {\n this.setState({ inputValue: max });\n }\n }}\n inputProps={{\n step: this.state.showInput.inputBefore.step,\n min:\n this.state.showInput.inputBefore.min === undefined\n ? 0\n : this.state.showInput.inputBefore.min,\n max:\n this.state.showInput.inputBefore.max === undefined\n ? 100\n : this.state.showInput.inputBefore.max,\n type: 'number',\n }}\n />\n </Grid2>\n </Grid2>\n </Box>\n ) : null}\n </DialogContent>\n <DialogActions>\n <Button\n variant=\"contained\"\n disabled={okDisabled}\n color=\"primary\"\n onClick={() => this.onShowInputOk()}\n startIcon={<Check />}\n >\n {getTranslation('yesButtonText')}\n </Button>\n <Button\n variant=\"contained\"\n color=\"grey\"\n onClick={() => this.setState({ showInput: null })}\n startIcon={<Close />}\n >\n {getTranslation('cancelButtonText')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n\n render(): React.JSX.Element {\n return (\n <>\n {this.renderSnackbar()}\n {this.renderContent()}\n {this.renderConfirmDialog()}\n {this.renderMessageDialog()}\n {this.renderFormDialog()}\n {this.renderProgressDialog()}\n {this.renderConfirmationDialog()}\n {this.renderInputDialog()}\n {this.renderSpinner()}\n </>\n );\n }\n}\n"]}
@@ -1,10 +1,10 @@
1
1
  import React from 'react';
2
- import type { ActionBase, DeviceAction } from '@iobroker/dm-utils';
2
+ import type { ActionBase, DeviceAction, DeviceId } from './protocol/api';
3
3
  interface DeviceActionButtonProps {
4
- deviceId: string;
4
+ deviceId: DeviceId;
5
5
  action: DeviceAction;
6
6
  refresh: () => void;
7
- deviceHandler: (deviceId: string, action: ActionBase, refresh: () => void) => () => void;
7
+ deviceHandler: (deviceId: DeviceId, action: ActionBase, refresh: () => void) => () => void;
8
8
  disabled?: boolean;
9
9
  }
10
10
  export default function DeviceActionButton(props: DeviceActionButtonProps): React.JSX.Element;
@@ -1,10 +1,10 @@
1
1
  import React from 'react';
2
2
  import TooltipButton from './TooltipButton';
3
- import { renderActionIcon, getTranslation } from './Utils';
3
+ import { getTranslation, renderActionIcon } from './Utils';
4
4
  export default function DeviceActionButton(props) {
5
5
  const { deviceId, action, refresh, deviceHandler, disabled } = props;
6
6
  const icon = renderActionIcon(action);
7
7
  const tooltip = getTranslation(action.description ?? '') || (icon ? null : action.id);
8
- return (React.createElement(TooltipButton, { tooltip: tooltip || undefined, disabled: disabled || action.disabled, Icon: icon, onClick: deviceHandler(deviceId, action, refresh) }));
8
+ return (React.createElement(TooltipButton, { tooltip: tooltip || undefined, disabled: disabled || action.disabled, Icon: icon, onClick: deviceHandler(deviceId, action, refresh), url: 'url' in action ? getTranslation(action.url) : undefined }));
9
9
  }
10
10
  //# sourceMappingURL=DeviceActionButton.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DeviceActionButton.js","sourceRoot":"./src/","sources":["DeviceActionButton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAU3D,MAAM,CAAC,OAAO,UAAU,kBAAkB,CAAC,KAA8B;IACrE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;IAErE,MAAM,IAAI,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAEtC,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,WAAW,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAEtF,OAAO,CACH,oBAAC,aAAa,IACV,OAAO,EAAE,OAAO,IAAI,SAAS,EAC7B,QAAQ,EAAE,QAAQ,IAAI,MAAM,CAAC,QAAQ,EACrC,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,GACnD,CACL,CAAC;AACN,CAAC","sourcesContent":["import React from 'react';\n\nimport type { ActionBase, DeviceAction } from '@iobroker/dm-utils';\nimport TooltipButton from './TooltipButton';\nimport { renderActionIcon, getTranslation } from './Utils';\n\ninterface DeviceActionButtonProps {\n deviceId: string;\n action: DeviceAction;\n refresh: () => void;\n deviceHandler: (deviceId: string, action: ActionBase, refresh: () => void) => () => void;\n disabled?: boolean;\n}\n\nexport default function DeviceActionButton(props: DeviceActionButtonProps): React.JSX.Element {\n const { deviceId, action, refresh, deviceHandler, disabled } = props;\n\n const icon = renderActionIcon(action);\n\n const tooltip = getTranslation(action.description ?? '') || (icon ? null : action.id);\n\n return (\n <TooltipButton\n tooltip={tooltip || undefined}\n disabled={disabled || action.disabled}\n Icon={icon}\n onClick={deviceHandler(deviceId, action, refresh)}\n />\n );\n}\n"]}
1
+ {"version":3,"file":"DeviceActionButton.js","sourceRoot":"./src/","sources":["DeviceActionButton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAU3D,MAAM,CAAC,OAAO,UAAU,kBAAkB,CAAC,KAA8B;IACrE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;IAErE,MAAM,IAAI,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAEtC,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,WAAW,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAEtF,OAAO,CACH,oBAAC,aAAa,IACV,OAAO,EAAE,OAAO,IAAI,SAAS,EAC7B,QAAQ,EAAE,QAAQ,IAAI,MAAM,CAAC,QAAQ,EACrC,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EACjD,GAAG,EAAE,KAAK,IAAI,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,GAC/D,CACL,CAAC;AACN,CAAC","sourcesContent":["import React from 'react';\nimport type { ActionBase, DeviceAction, DeviceId } from './protocol/api';\nimport TooltipButton from './TooltipButton';\nimport { getTranslation, renderActionIcon } from './Utils';\n\ninterface DeviceActionButtonProps {\n deviceId: DeviceId;\n action: DeviceAction;\n refresh: () => void;\n deviceHandler: (deviceId: DeviceId, action: ActionBase, refresh: () => void) => () => void;\n disabled?: boolean;\n}\n\nexport default function DeviceActionButton(props: DeviceActionButtonProps): React.JSX.Element {\n const { deviceId, action, refresh, deviceHandler, disabled } = props;\n\n const icon = renderActionIcon(action);\n\n const tooltip = getTranslation(action.description ?? '') || (icon ? null : action.id);\n\n return (\n <TooltipButton\n tooltip={tooltip || undefined}\n disabled={disabled || action.disabled}\n Icon={icon}\n onClick={deviceHandler(deviceId, action, refresh)}\n url={'url' in action ? getTranslation(action.url) : undefined}\n />\n );\n}\n"]}
@@ -1,16 +1,17 @@
1
+ import { type Connection, type IobTheme, type ThemeName, type ThemeType } from '@iobroker/adapter-react-v5';
1
2
  import React, { Component, type JSX } from 'react';
2
- import { type Connection, type ThemeName, type ThemeType, type IobTheme } from '@iobroker/adapter-react-v5';
3
- import { type DeviceDetails, type DeviceInfo, type ActionBase, type ControlBase, type ControlState } from '@iobroker/dm-utils';
3
+ import type { ActionBase, ControlBase, ControlState, DeviceDetails, DeviceInfo, DeviceId, ConfigConnectionType } from './protocol/api';
4
4
  interface DeviceCardProps {
5
- title?: string;
6
- id: string;
5
+ filter?: string;
6
+ id: DeviceId;
7
+ identifierLabel: ioBroker.StringOrTranslated;
7
8
  device: DeviceInfo;
8
9
  instanceId: string;
9
10
  socket: Connection;
10
11
  uploadImagesToInstance?: string;
11
- deviceHandler: (deviceId: string, action: ActionBase, refresh: () => void) => () => void;
12
- controlHandler: (deviceId: string, control: ControlBase, state: ControlState) => () => Promise<ioBroker.State | null>;
13
- controlStateHandler: (deviceId: string, control: ControlBase) => () => Promise<ioBroker.State | null>;
12
+ deviceHandler: (deviceId: DeviceId, action: ActionBase, refresh: () => void) => () => void;
13
+ controlHandler: (deviceId: DeviceId, control: ControlBase, state: ControlState) => () => Promise<ioBroker.State | null>;
14
+ controlStateHandler: (deviceId: DeviceId, control: ControlBase) => () => Promise<ioBroker.State | null>;
14
15
  smallCards?: boolean;
15
16
  alive: boolean;
16
17
  themeName: ThemeName;
@@ -23,16 +24,27 @@ interface DeviceCardState {
23
24
  open: boolean;
24
25
  details: DeviceDetails | null;
25
26
  data: Record<string, any>;
26
- icon: string | undefined;
27
27
  showControlDialog: boolean;
28
+ name?: string;
29
+ identifier?: string;
30
+ hasDetails?: boolean;
31
+ icon?: string;
32
+ backgroundColor?: string;
33
+ color?: string;
34
+ manufacturer?: string;
35
+ model?: string;
36
+ connectionType?: ConfigConnectionType;
37
+ enabled?: boolean;
28
38
  }
29
39
  /**
30
40
  * Device Card Component
31
41
  */
32
42
  export default class DeviceCard extends Component<DeviceCardProps, DeviceCardState> {
43
+ private readonly stateOrObjectHandler;
33
44
  constructor(props: DeviceCardProps);
34
45
  fetchIcon(): Promise<void>;
35
- componentDidMount(): void;
46
+ componentDidMount(): Promise<void>;
47
+ componentWillUnmount(): Promise<void>;
36
48
  /**
37
49
  * Load the device details
38
50
  */
@@ -54,4 +66,11 @@ export default class DeviceCard extends Component<DeviceCardProps, DeviceCardSta
54
66
  renderBig(): JSX.Element;
55
67
  render(): JSX.Element;
56
68
  }
69
+ type DeviceCardSkeletonProps = Pick<DeviceCardProps, 'smallCards' | 'theme'>;
70
+ export declare class DeviceCardSkeleton extends Component<DeviceCardSkeletonProps> {
71
+ render(): JSX.Element;
72
+ renderSmall(): JSX.Element;
73
+ renderBig(): JSX.Element;
74
+ getCardHeaderStyle(theme: IobTheme, maxWidth?: number): React.CSSProperties;
75
+ }
57
76
  export {};