@iobroker/json-config 8.4.14 → 8.5.3

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 (141) hide show
  1. package/README.md +7 -1
  2. package/build/JsonConfig.d.ts +3 -3
  3. package/build/JsonConfig.js +11 -7
  4. package/build/JsonConfig.js.map +1 -1
  5. package/build/JsonConfigComponent/ChipInput.js +3 -3
  6. package/build/JsonConfigComponent/ChipInput.js.map +1 -1
  7. package/build/JsonConfigComponent/ConfigAccordion.d.ts +1 -1
  8. package/build/JsonConfigComponent/ConfigAccordion.js +28 -18
  9. package/build/JsonConfigComponent/ConfigAccordion.js.map +1 -1
  10. package/build/JsonConfigComponent/ConfigAlive.js +8 -4
  11. package/build/JsonConfigComponent/ConfigAlive.js.map +1 -1
  12. package/build/JsonConfigComponent/ConfigAutocomplete.d.ts +2 -2
  13. package/build/JsonConfigComponent/ConfigAutocomplete.js +6 -6
  14. package/build/JsonConfigComponent/ConfigAutocomplete.js.map +1 -1
  15. package/build/JsonConfigComponent/ConfigAutocompleteSendTo.js +5 -5
  16. package/build/JsonConfigComponent/ConfigAutocompleteSendTo.js.map +1 -1
  17. package/build/JsonConfigComponent/ConfigCRON.d.ts +1 -0
  18. package/build/JsonConfigComponent/ConfigCRON.js.map +1 -1
  19. package/build/JsonConfigComponent/ConfigCertCollection.d.ts +1 -1
  20. package/build/JsonConfigComponent/ConfigCertCollection.js.map +1 -1
  21. package/build/JsonConfigComponent/ConfigCertificateSelect.d.ts +1 -0
  22. package/build/JsonConfigComponent/ConfigCertificateSelect.js.map +1 -1
  23. package/build/JsonConfigComponent/ConfigCertificates.d.ts +1 -1
  24. package/build/JsonConfigComponent/ConfigCertificates.js +1 -1
  25. package/build/JsonConfigComponent/ConfigCertificates.js.map +1 -1
  26. package/build/JsonConfigComponent/ConfigCheckDocker.js +4 -2
  27. package/build/JsonConfigComponent/ConfigCheckDocker.js.map +1 -1
  28. package/build/JsonConfigComponent/ConfigCheckLicense.d.ts +1 -1
  29. package/build/JsonConfigComponent/ConfigCheckLicense.js +14 -11
  30. package/build/JsonConfigComponent/ConfigCheckLicense.js.map +1 -1
  31. package/build/JsonConfigComponent/ConfigCheckbox.js +12 -10
  32. package/build/JsonConfigComponent/ConfigCheckbox.js.map +1 -1
  33. package/build/JsonConfigComponent/ConfigChip.js +22 -18
  34. package/build/JsonConfigComponent/ConfigChip.js.map +1 -1
  35. package/build/JsonConfigComponent/ConfigColor.js +5 -8
  36. package/build/JsonConfigComponent/ConfigColor.js.map +1 -1
  37. package/build/JsonConfigComponent/ConfigCoordinates.js +1 -1
  38. package/build/JsonConfigComponent/ConfigCoordinates.js.map +1 -1
  39. package/build/JsonConfigComponent/ConfigCredentialSelect.d.ts +2 -0
  40. package/build/JsonConfigComponent/ConfigCredentialSelect.js +85 -9
  41. package/build/JsonConfigComponent/ConfigCredentialSelect.js.map +1 -1
  42. package/build/JsonConfigComponent/ConfigCustom.d.ts +1 -1
  43. package/build/JsonConfigComponent/ConfigCustom.js +1 -1
  44. package/build/JsonConfigComponent/ConfigCustom.js.map +1 -1
  45. package/build/JsonConfigComponent/ConfigDatePicker.js +4 -2
  46. package/build/JsonConfigComponent/ConfigDatePicker.js.map +1 -1
  47. package/build/JsonConfigComponent/ConfigFile.js +4 -2
  48. package/build/JsonConfigComponent/ConfigFile.js.map +1 -1
  49. package/build/JsonConfigComponent/ConfigFileSelector.d.ts +3 -2
  50. package/build/JsonConfigComponent/ConfigFileSelector.js +10 -8
  51. package/build/JsonConfigComponent/ConfigFileSelector.js.map +1 -1
  52. package/build/JsonConfigComponent/ConfigFunc.js +1 -1
  53. package/build/JsonConfigComponent/ConfigFunc.js.map +1 -1
  54. package/build/JsonConfigComponent/ConfigGeneric.d.ts +16 -13
  55. package/build/JsonConfigComponent/ConfigGeneric.js +68 -46
  56. package/build/JsonConfigComponent/ConfigGeneric.js.map +1 -1
  57. package/build/JsonConfigComponent/ConfigIFrameSendTo.d.ts +1 -1
  58. package/build/JsonConfigComponent/ConfigIFrameSendTo.js +1 -3
  59. package/build/JsonConfigComponent/ConfigIFrameSendTo.js.map +1 -1
  60. package/build/JsonConfigComponent/ConfigIP.js +4 -1
  61. package/build/JsonConfigComponent/ConfigIP.js.map +1 -1
  62. package/build/JsonConfigComponent/ConfigImageSendTo.d.ts +1 -1
  63. package/build/JsonConfigComponent/ConfigImageSendTo.js +1 -3
  64. package/build/JsonConfigComponent/ConfigImageSendTo.js.map +1 -1
  65. package/build/JsonConfigComponent/ConfigImageUpload.js +26 -22
  66. package/build/JsonConfigComponent/ConfigImageUpload.js.map +1 -1
  67. package/build/JsonConfigComponent/ConfigInstanceSelect.d.ts +1 -1
  68. package/build/JsonConfigComponent/ConfigInstanceSelect.js +5 -5
  69. package/build/JsonConfigComponent/ConfigInstanceSelect.js.map +1 -1
  70. package/build/JsonConfigComponent/ConfigInterface.js +16 -12
  71. package/build/JsonConfigComponent/ConfigInterface.js.map +1 -1
  72. package/build/JsonConfigComponent/ConfigJsonEditor.js +1 -1
  73. package/build/JsonConfigComponent/ConfigJsonEditor.js.map +1 -1
  74. package/build/JsonConfigComponent/ConfigLanguage.js +7 -9
  75. package/build/JsonConfigComponent/ConfigLanguage.js.map +1 -1
  76. package/build/JsonConfigComponent/ConfigLicense.js +5 -3
  77. package/build/JsonConfigComponent/ConfigLicense.js.map +1 -1
  78. package/build/JsonConfigComponent/ConfigNumber.js +7 -5
  79. package/build/JsonConfigComponent/ConfigNumber.js.map +1 -1
  80. package/build/JsonConfigComponent/ConfigOAuth2.js +2 -2
  81. package/build/JsonConfigComponent/ConfigOAuth2.js.map +1 -1
  82. package/build/JsonConfigComponent/ConfigObjectId.d.ts +2 -2
  83. package/build/JsonConfigComponent/ConfigObjectId.js +12 -10
  84. package/build/JsonConfigComponent/ConfigObjectId.js.map +1 -1
  85. package/build/JsonConfigComponent/ConfigPanel.d.ts +1 -1
  86. package/build/JsonConfigComponent/ConfigPanel.js +5 -4
  87. package/build/JsonConfigComponent/ConfigPanel.js.map +1 -1
  88. package/build/JsonConfigComponent/ConfigPassword.d.ts +1 -1
  89. package/build/JsonConfigComponent/ConfigPassword.js.map +1 -1
  90. package/build/JsonConfigComponent/ConfigQrCodeSendTo.js +1 -3
  91. package/build/JsonConfigComponent/ConfigQrCodeSendTo.js.map +1 -1
  92. package/build/JsonConfigComponent/ConfigRoom.d.ts +1 -1
  93. package/build/JsonConfigComponent/ConfigRoom.js.map +1 -1
  94. package/build/JsonConfigComponent/ConfigSelect.d.ts +1 -1
  95. package/build/JsonConfigComponent/ConfigSelect.js +4 -4
  96. package/build/JsonConfigComponent/ConfigSelect.js.map +1 -1
  97. package/build/JsonConfigComponent/ConfigSelectSendTo.d.ts +1 -1
  98. package/build/JsonConfigComponent/ConfigSelectSendTo.js +14 -16
  99. package/build/JsonConfigComponent/ConfigSelectSendTo.js.map +1 -1
  100. package/build/JsonConfigComponent/ConfigSendto.d.ts +1 -1
  101. package/build/JsonConfigComponent/ConfigSendto.js +6 -5
  102. package/build/JsonConfigComponent/ConfigSendto.js.map +1 -1
  103. package/build/JsonConfigComponent/ConfigSetState.js +4 -1
  104. package/build/JsonConfigComponent/ConfigSetState.js.map +1 -1
  105. package/build/JsonConfigComponent/ConfigState.d.ts +1 -1
  106. package/build/JsonConfigComponent/ConfigState.js +33 -22
  107. package/build/JsonConfigComponent/ConfigState.js.map +1 -1
  108. package/build/JsonConfigComponent/ConfigStaticImage.js +1 -1
  109. package/build/JsonConfigComponent/ConfigStaticImage.js.map +1 -1
  110. package/build/JsonConfigComponent/ConfigStaticInfo.js +2 -2
  111. package/build/JsonConfigComponent/ConfigStaticInfo.js.map +1 -1
  112. package/build/JsonConfigComponent/ConfigStaticText.js +2 -2
  113. package/build/JsonConfigComponent/ConfigStaticText.js.map +1 -1
  114. package/build/JsonConfigComponent/ConfigTable.d.ts +4 -4
  115. package/build/JsonConfigComponent/ConfigTable.js +80 -75
  116. package/build/JsonConfigComponent/ConfigTable.js.map +1 -1
  117. package/build/JsonConfigComponent/ConfigTabs.d.ts +7 -7
  118. package/build/JsonConfigComponent/ConfigTabs.js +61 -57
  119. package/build/JsonConfigComponent/ConfigTabs.js.map +1 -1
  120. package/build/JsonConfigComponent/ConfigText.js +6 -6
  121. package/build/JsonConfigComponent/ConfigText.js.map +1 -1
  122. package/build/JsonConfigComponent/ConfigTextSendTo.d.ts +1 -1
  123. package/build/JsonConfigComponent/ConfigTextSendTo.js +1 -1
  124. package/build/JsonConfigComponent/ConfigTextSendTo.js.map +1 -1
  125. package/build/JsonConfigComponent/ConfigTimePicker.js +2 -5
  126. package/build/JsonConfigComponent/ConfigTimePicker.js.map +1 -1
  127. package/build/JsonConfigComponent/ConfigUUID.js +1 -1
  128. package/build/JsonConfigComponent/ConfigUUID.js.map +1 -1
  129. package/build/JsonConfigComponent/ConfigUser.js +2 -2
  130. package/build/JsonConfigComponent/ConfigUser.js.map +1 -1
  131. package/build/JsonConfigComponent/ConfigYamlEditor.js +2 -2
  132. package/build/JsonConfigComponent/ConfigYamlEditor.js.map +1 -1
  133. package/build/JsonConfigComponent/Icons.d.ts +1 -1
  134. package/build/JsonConfigComponent/Icons.js.map +1 -1
  135. package/build/JsonConfigComponent/index.d.ts +4 -4
  136. package/build/JsonConfigComponent/index.js +21 -16
  137. package/build/JsonConfigComponent/index.js.map +1 -1
  138. package/build/JsonConfigComponent/wrapper/Components/CustomModal.d.ts +2 -3
  139. package/build/JsonConfigComponent/wrapper/Components/CustomModal.js +2 -7
  140. package/build/JsonConfigComponent/wrapper/Components/CustomModal.js.map +1 -1
  141. package/package.json +3 -2
@@ -1 +1 @@
1
- {"version":3,"file":"ConfigTextSendTo.js","sourceRoot":"./src/","sources":["JsonConfigComponent/ConfigTextSendTo.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { type JSX } from 'react';\n\nimport { TextField, IconButton } from '@mui/material';\n\nimport { I18n, Icon, IconCopy, Utils } from '@iobroker/adapter-react-v5';\n\nimport type { ConfigItemSendTo } from '../types';\nimport getIconByName from './Icons';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\nconst styles: Record<string, React.CSSProperties> = {\n fullWidth: {\n width: '100%',\n },\n};\n\ninterface ConfigTextSendToProps extends ConfigGenericProps {\n schema: ConfigItemSendTo;\n}\n\ninterface ConfigTextSendToState extends ConfigGenericState {\n text?: string;\n style?: React.CSSProperties;\n icon?: string;\n iconStyle?: React.CSSProperties;\n}\n\ninterface Response {\n text: string;\n style?: React.CSSProperties;\n icon?: string;\n iconStyle?: React.CSSProperties;\n}\n\nclass ConfigTextSendTo extends ConfigGeneric<ConfigTextSendToProps, ConfigTextSendToState> {\n private initialized = false;\n\n private localContext: string | undefined;\n\n async askInstance(): Promise<void> {\n if (this.props.alive) {\n let data: Record<string, any> | undefined = this.props.schema.data;\n if (data === undefined && this.props.schema.jsonData) {\n const dataStr: string = await this.getPatternAsync(this.props.schema.jsonData, null, true);\n try {\n data = JSON.parse(dataStr);\n } catch {\n console.error(`Cannot parse json data: ${dataStr}`);\n }\n }\n\n data ??= null;\n const instance = await this.getPatternAsync(\n this.props.schema.instance || `${this.props.oContext.adapterName}.${this.props.oContext.instance}`,\n );\n // Check that instance is alive\n if (instance !== `${this.props.oContext.adapterName}.${this.props.oContext.instance}`) {\n const alive = await this.props.oContext.socket.getState(`system.adapter.${instance}.alive`);\n if (!alive?.val) {\n window.alert(I18n.t('jc_Instance %s is not alive', instance));\n return;\n }\n }\n void this.props.oContext.socket\n .sendTo(instance, this.props.schema.command || 'send', data)\n .then(result => {\n if (typeof result === 'object') {\n const _data: Response = result;\n this.setState({\n text: _data.text || '',\n style: _data.style,\n icon: _data.icon,\n iconStyle: _data.iconStyle,\n });\n } else if (typeof result === 'string') {\n this.setState({ text: result || '' });\n }\n })\n .catch(e => console.error(`Cannot send command: ${e}`));\n }\n }\n\n getLocalContext(): string {\n const localContext: Record<string, any> = {};\n if (Array.isArray(this.props.schema.alsoDependsOn)) {\n this.props.schema.alsoDependsOn.forEach(\n attr => (localContext[attr] = ConfigGeneric.getValue(this.props.data, attr)),\n );\n }\n return JSON.stringify(localContext);\n }\n\n renderItem(/* error, disabled, defaultValue */): JSX.Element {\n if (this.props.alive) {\n const localContext = this.getLocalContext();\n if (localContext !== this.localContext || !this.initialized) {\n this.localContext = localContext;\n setTimeout(() => this.askInstance(), this.initialized ? 300 : 50);\n this.initialized = true;\n }\n }\n\n if (this.state.text === undefined) {\n return null;\n }\n\n let icon: JSX.Element | null = null;\n if (this.state.icon) {\n icon = getIconByName(this.state.icon, {\n marginRight: this.state.text ? 8 : undefined,\n ...(this.state.iconStyle || undefined),\n });\n if (!icon) {\n icon = (\n <Icon\n src={this.state.icon}\n style={{ marginRight: this.state.text ? 8 : undefined, ...(this.state.iconStyle || undefined) }}\n />\n );\n }\n }\n\n if (this.props.schema.container === 'text') {\n return (\n <TextField\n variant=\"standard\"\n fullWidth\n slotProps={{\n input: {\n endAdornment: this.props.schema.copyToClipboard ? (\n <IconButton\n tabIndex={-1}\n size=\"small\"\n onClick={() => {\n Utils.copyToClipboard(this.state.text);\n window.alert(I18n.t('jc_Copied'));\n }}\n >\n <IconCopy />\n </IconButton>\n ) : undefined,\n },\n }}\n value={this.state.text}\n label={this.getText(this.props.schema.label)}\n helperText={this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n )}\n />\n );\n }\n return (\n <div style={{ ...styles.fullWidth, ...(this.state.style || undefined) }}>\n {icon}\n {this.props.schema.container === 'html' ? (\n <span dangerouslySetInnerHTML={{ __html: this.state.text || '' }} />\n ) : (\n this.state.text\n )}\n </div>\n );\n }\n}\n\nexport default ConfigTextSendTo;\n"]}
1
+ {"version":3,"file":"ConfigTextSendTo.js","sourceRoot":"./src/","sources":["JsonConfigComponent/ConfigTextSendTo.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAExC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEtD,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AAGzE,OAAO,aAAa,MAAM,SAAS,CAAC;AACpC,OAAO,aAAmE,MAAM,iBAAiB,CAAC;AAElG,MAAM,MAAM,GAAwC;IAChD,SAAS,EAAE;QACP,KAAK,EAAE,MAAM;KAChB;CACJ,CAAC;AAoBF,MAAM,gBAAiB,SAAQ,aAA2D;IAC9E,WAAW,GAAG,KAAK,CAAC;IAEpB,YAAY,CAAqB;IAEzC,KAAK,CAAC,WAAW;QACb,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACnB,IAAI,IAAI,GAA2C,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;YAC1E,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACnD,MAAM,OAAO,GAAW,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;gBAC3F,IAAI,CAAC;oBACD,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBAC/B,CAAC;gBAAC,MAAM,CAAC;oBACL,OAAO,CAAC,KAAK,CAAC,2BAA2B,OAAO,EAAE,CAAC,CAAC;gBACxD,CAAC;YACL,CAAC;YAED,IAAI,KAAK,IAAI,CAAC;YACd,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,CACvC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,EAAE,CACrG,CAAC;YACF,+BAA+B;YAC/B,IAAI,QAAQ,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC;gBACpF,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,QAAQ,QAAQ,CAAC,CAAC;gBAC5F,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC;oBACd,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,6BAA6B,EAAE,QAAQ,CAAC,CAAC,CAAC;oBAC9D,OAAO;gBACX,CAAC;YACL,CAAC;YACD,KAAK,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM;iBAC1B,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,EAAE,IAAI,CAAC;iBAC3D,IAAI,CAAC,MAAM,CAAC,EAAE;gBACX,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;oBAC7B,MAAM,KAAK,GAAa,MAAM,CAAC;oBAC/B,IAAI,CAAC,QAAQ,CAAC;wBACV,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,EAAE;wBACtB,KAAK,EAAE,KAAK,CAAC,KAAK;wBAClB,IAAI,EAAE,KAAK,CAAC,IAAI;wBAChB,SAAS,EAAE,KAAK,CAAC,SAAS;qBAC7B,CAAC,CAAC;gBACP,CAAC;qBAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;oBACpC,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,IAAI,EAAE,EAAE,CAAC,CAAC;gBAC1C,CAAC;YACL,CAAC,CAAC;iBACD,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,wBAAwB,CAAC,EAAE,CAAC,CAAC,CAAC;QAChE,CAAC;IACL,CAAC;IAED,eAAe;QACX,MAAM,YAAY,GAAwB,EAAE,CAAC;QAC7C,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC;YACjD,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CACnC,IAAI,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAC/E,CAAC;QACN,CAAC;QACD,OAAO,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;IACxC,CAAC;IAED,UAAU,EAAC,mCAAmC;QAC1C,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACnB,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;YAC5C,IAAI,YAAY,KAAK,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;gBAC1D,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;gBACjC,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBAClE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;YAC5B,CAAC;QACL,CAAC;QAED,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAChC,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,IAAI,IAAI,GAAuB,IAAI,CAAC;QACpC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;YAClB,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;gBAClC,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;gBAC5C,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,SAAS,CAAC;aACzC,CAAC,CAAC;YACH,IAAI,CAAC,IAAI,EAAE,CAAC;gBACR,IAAI,GAAG,CACH,oBAAC,IAAI,IACD,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EACpB,KAAK,EAAE,EAAE,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,SAAS,CAAC,EAAE,GACjG,CACL,CAAC;YACN,CAAC;QACL,CAAC;QAED,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,KAAK,MAAM,EAAE,CAAC;YACzC,OAAO,CACH,oBAAC,SAAS,IACN,OAAO,EAAC,UAAU,EAClB,SAAS,QACT,SAAS,EAAE;oBACP,KAAK,EAAE;wBACH,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,CAC9C,oBAAC,UAAU,IACP,QAAQ,EAAE,CAAC,CAAC,EACZ,IAAI,EAAC,OAAO,EACZ,OAAO,EAAE,GAAG,EAAE;gCACV,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;gCAC7C,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;4BACtC,CAAC;4BAED,oBAAC,QAAQ,OAAG,CACH,CAChB,CAAC,CAAC,CAAC,SAAS;qBAChB;iBACJ,EACD,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EACtB,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EAC5C,UAAU,EAAE,IAAI,CAAC,UAAU,CACvB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EACtB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,EAC1B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,CAClC,GACH,CACL,CAAC;QACN,CAAC;QACD,OAAO,CACH,6BAAK,KAAK,EAAE,EAAE,GAAG,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,SAAS,CAAC,EAAE;YAClE,IAAI;YACJ,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,KAAK,MAAM,CAAC,CAAC,CAAC,CACtC,8BAAM,uBAAuB,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,EAAE,GAAI,CACvE,CAAC,CAAC,CAAC,CACA,IAAI,CAAC,KAAK,CAAC,IAAI,CAClB,CACC,CACT,CAAC;IACN,CAAC;CACJ;AAED,eAAe,gBAAgB,CAAC","sourcesContent":["import React, { type JSX } from 'react';\n\nimport { TextField, IconButton } from '@mui/material';\n\nimport { I18n, Icon, IconCopy, Utils } from '@iobroker/adapter-react-v5';\n\nimport type { ConfigItemSendTo } from '../types';\nimport getIconByName from './Icons';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\nconst styles: Record<string, React.CSSProperties> = {\n fullWidth: {\n width: '100%',\n },\n};\n\ninterface ConfigTextSendToProps extends ConfigGenericProps {\n schema: ConfigItemSendTo;\n}\n\ninterface ConfigTextSendToState extends ConfigGenericState {\n text?: string;\n style?: React.CSSProperties;\n icon?: string;\n iconStyle?: React.CSSProperties;\n}\n\ninterface Response {\n text: string;\n style?: React.CSSProperties;\n icon?: string;\n iconStyle?: React.CSSProperties;\n}\n\nclass ConfigTextSendTo extends ConfigGeneric<ConfigTextSendToProps, ConfigTextSendToState> {\n private initialized = false;\n\n private localContext: string | undefined;\n\n async askInstance(): Promise<void> {\n if (this.props.alive) {\n let data: Record<string, any> | null | undefined = this.props.schema.data;\n if (data === undefined && this.props.schema.jsonData) {\n const dataStr: string = await this.getPatternAsync(this.props.schema.jsonData, null, true);\n try {\n data = JSON.parse(dataStr);\n } catch {\n console.error(`Cannot parse json data: ${dataStr}`);\n }\n }\n\n data ??= null;\n const instance = await this.getPatternAsync(\n this.props.schema.instance || `${this.props.oContext.adapterName}.${this.props.oContext.instance}`,\n );\n // Check that instance is alive\n if (instance !== `${this.props.oContext.adapterName}.${this.props.oContext.instance}`) {\n const alive = await this.props.oContext.socket.getState(`system.adapter.${instance}.alive`);\n if (!alive?.val) {\n window.alert(I18n.t('jc_Instance %s is not alive', instance));\n return;\n }\n }\n void this.props.oContext.socket\n .sendTo(instance, this.props.schema.command || 'send', data)\n .then(result => {\n if (typeof result === 'object') {\n const _data: Response = result;\n this.setState({\n text: _data.text || '',\n style: _data.style,\n icon: _data.icon,\n iconStyle: _data.iconStyle,\n });\n } else if (typeof result === 'string') {\n this.setState({ text: result || '' });\n }\n })\n .catch(e => console.error(`Cannot send command: ${e}`));\n }\n }\n\n getLocalContext(): string {\n const localContext: Record<string, any> = {};\n if (Array.isArray(this.props.schema.alsoDependsOn)) {\n this.props.schema.alsoDependsOn.forEach(\n attr => (localContext[attr] = ConfigGeneric.getValue(this.props.data, attr)),\n );\n }\n return JSON.stringify(localContext);\n }\n\n renderItem(/* error, disabled, defaultValue */): JSX.Element | null {\n if (this.props.alive) {\n const localContext = this.getLocalContext();\n if (localContext !== this.localContext || !this.initialized) {\n this.localContext = localContext;\n setTimeout(() => this.askInstance(), this.initialized ? 300 : 50);\n this.initialized = true;\n }\n }\n\n if (this.state.text === undefined) {\n return null;\n }\n\n let icon: JSX.Element | null = null;\n if (this.state.icon) {\n icon = getIconByName(this.state.icon, {\n marginRight: this.state.text ? 8 : undefined,\n ...(this.state.iconStyle || undefined),\n });\n if (!icon) {\n icon = (\n <Icon\n src={this.state.icon}\n style={{ marginRight: this.state.text ? 8 : undefined, ...(this.state.iconStyle || undefined) }}\n />\n );\n }\n }\n\n if (this.props.schema.container === 'text') {\n return (\n <TextField\n variant=\"standard\"\n fullWidth\n slotProps={{\n input: {\n endAdornment: this.props.schema.copyToClipboard ? (\n <IconButton\n tabIndex={-1}\n size=\"small\"\n onClick={() => {\n Utils.copyToClipboard(this.state.text || '');\n window.alert(I18n.t('jc_Copied'));\n }}\n >\n <IconCopy />\n </IconButton>\n ) : undefined,\n },\n }}\n value={this.state.text}\n label={this.getText(this.props.schema.label)}\n helperText={this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n )}\n />\n );\n }\n return (\n <div style={{ ...styles.fullWidth, ...(this.state.style || undefined) }}>\n {icon}\n {this.props.schema.container === 'html' ? (\n <span dangerouslySetInnerHTML={{ __html: this.state.text || '' }} />\n ) : (\n this.state.text\n )}\n </div>\n );\n }\n}\n\nexport default ConfigTextSendTo;\n"]}
@@ -29,11 +29,8 @@ export default class ConfigTimePicker extends ConfigGeneric {
29
29
  },
30
30
  }), ampm: this.props.oContext.systemConfig.dateFormat.includes('/'), timeSteps: this.props.schema.timeSteps || this.props.schema.timesteps || { hours: 1, minutes: 5, seconds: 5 }, format: this.props.schema.format || 'HH:mm:ss', disabled: !!disabled, value: value, onChange: (newValue) => {
31
31
  let strValue;
32
- strValue =
33
- newValue instanceof Date
34
- ? newValue.toTimeString().split(' ')[0]
35
- : newValue.toTimeString();
36
- if (shortFormat) {
32
+ strValue = newValue instanceof Date ? newValue.toTimeString().split(' ')[0] : '';
33
+ if (shortFormat && strValue) {
37
34
  strValue = strValue.split(':').slice(0, 2).join(':');
38
35
  }
39
36
  this.setState({ value: strValue }, () => this.onChange(this.props.attr, this.state.value));
@@ -1 +1 @@
1
- {"version":3,"file":"ConfigTimePicker.js","sourceRoot":"./src/","sources":["JsonConfigComponent/ConfigTimePicker.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { type JSX } from 'react';\n\nimport { TimePicker } from '@mui/x-date-pickers';\n\nimport type { ConfigItemTimePicker } from '../types';\nimport ConfigGeneric, { type ConfigGenericProps } from './ConfigGeneric';\n\ninterface ConfigTimePickerProps extends ConfigGenericProps {\n schema: ConfigItemTimePicker;\n dialogName?: string;\n}\n\nexport default class ConfigTimePicker extends ConfigGeneric<ConfigTimePickerProps> {\n async componentDidMount(): Promise<void> {\n await super.componentDidMount();\n const value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n this.setState({ value });\n }\n\n renderItem(_error: unknown, disabled: boolean): JSX.Element {\n // the format could be 'HH:mm:ss' or 'HH:mm'\n const shortFormat = this.props.schema.returnFormat !== 'HH:mm:ss';\n\n const value: never = new Date(Date.parse(`Thu, 01 Jan 1970 ${this.state.value || '00:00:00'}`)) as never;\n\n return (\n <TimePicker\n sx={theme => ({\n width: '100%',\n borderBottom: `1px solid ${theme.palette.text.primary}`,\n '& fieldset': {\n display: 'none',\n },\n '& input': {\n padding: `${theme.spacing(1.5)} 0 4px 0`,\n },\n '& .MuiInputAdornment-root': {\n marginLeft: 0,\n marginTop: 1, // it is already in spaces\n },\n '& label': {\n transform: 'translate(0px, -9px) scale(0.75)',\n },\n })}\n ampm={this.props.oContext.systemConfig.dateFormat.includes('/')}\n timeSteps={\n this.props.schema.timeSteps || this.props.schema.timesteps || { hours: 1, minutes: 5, seconds: 5 }\n }\n format={this.props.schema.format || 'HH:mm:ss'}\n disabled={!!disabled}\n value={value}\n onChange={(newValue: Date) => {\n let strValue: string;\n strValue =\n (newValue as any) instanceof Date\n ? newValue.toTimeString().split(' ')[0]\n : newValue.toTimeString();\n if (shortFormat) {\n strValue = strValue.split(':').slice(0, 2).join(':');\n }\n\n this.setState({ value: strValue }, () => this.onChange(this.props.attr, this.state.value));\n }}\n views={this.props.schema.views || ['hours', 'minutes', 'seconds']}\n label={this.getText(this.props.schema.label)}\n />\n );\n }\n}\n"]}
1
+ {"version":3,"file":"ConfigTimePicker.js","sourceRoot":"./src/","sources":["JsonConfigComponent/ConfigTimePicker.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { type JSX } from 'react';\n\nimport { TimePicker } from '@mui/x-date-pickers';\n\nimport type { ConfigItemTimePicker } from '../types';\nimport ConfigGeneric, { type ConfigGenericProps } from './ConfigGeneric';\n\ninterface ConfigTimePickerProps extends ConfigGenericProps {\n schema: ConfigItemTimePicker;\n dialogName?: string;\n}\n\nexport default class ConfigTimePicker extends ConfigGeneric<ConfigTimePickerProps> {\n async componentDidMount(): Promise<void> {\n await super.componentDidMount();\n const value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n this.setState({ value });\n }\n\n renderItem(_error: unknown, disabled: boolean): JSX.Element {\n // the format could be 'HH:mm:ss' or 'HH:mm'\n const shortFormat = this.props.schema.returnFormat !== 'HH:mm:ss';\n\n const value: never = new Date(Date.parse(`Thu, 01 Jan 1970 ${this.state.value || '00:00:00'}`)) as never;\n\n return (\n <TimePicker\n sx={theme => ({\n width: '100%',\n borderBottom: `1px solid ${theme.palette.text.primary}`,\n '& fieldset': {\n display: 'none',\n },\n '& input': {\n padding: `${theme.spacing(1.5)} 0 4px 0`,\n },\n '& .MuiInputAdornment-root': {\n marginLeft: 0,\n marginTop: 1, // it is already in spaces\n },\n '& label': {\n transform: 'translate(0px, -9px) scale(0.75)',\n },\n })}\n ampm={this.props.oContext.systemConfig.dateFormat.includes('/')}\n timeSteps={\n this.props.schema.timeSteps || this.props.schema.timesteps || { hours: 1, minutes: 5, seconds: 5 }\n }\n format={this.props.schema.format || 'HH:mm:ss'}\n disabled={!!disabled}\n value={value}\n onChange={(newValue: Date | null) => {\n let strValue: string;\n strValue = newValue instanceof Date ? newValue.toTimeString().split(' ')[0] : '';\n if (shortFormat && strValue) {\n strValue = strValue.split(':').slice(0, 2).join(':');\n }\n\n this.setState({ value: strValue }, () => this.onChange(this.props.attr, this.state.value));\n }}\n views={this.props.schema.views || ['hours', 'minutes', 'seconds']}\n label={this.getText(this.props.schema.label)}\n />\n );\n }\n}\n"]}
@@ -14,7 +14,7 @@ export default class ConfigUUID extends ConfigGeneric {
14
14
  htmlInput: { readOnly: true },
15
15
  input: {
16
16
  endAdornment: (React.createElement(IconButton, { tabIndex: -1, onClick: () => {
17
- Utils.copyToClipboard(this.state.uuid);
17
+ Utils.copyToClipboard(this.state.uuid || '');
18
18
  window.alert(I18n.t('jc_Copied %s', this.state.uuid));
19
19
  } },
20
20
  React.createElement(IconCopy, null))),
@@ -1 +1 @@
1
- {"version":3,"file":"ConfigUUID.js","sourceRoot":"./src/","sources":["JsonConfigComponent/ConfigUUID.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAExC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEtD,OAAO,EAAE,WAAW,IAAI,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAE9D,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,4BAA4B,CAAC;AAGzD,OAAO,aAAmE,MAAM,iBAAiB,CAAC;AAUlG,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,aAA+C;IACnF,KAAK,CAAC,iBAAiB;QACnB,MAAM,KAAK,CAAC,iBAAiB,EAAE,CAAC;QAEhC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,kBAAkB,CAAC,CAAC;QAC/D,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,IAAI,SAAS,EAAE,CAAC,CAAC;IAChE,CAAC;IAED,UAAU,CAAC,KAAc,EAAE,QAAiB;QACxC,OAAO,CACH,oBAAC,SAAS,IACN,OAAO,EAAC,UAAU,EAClB,SAAS,QACT,KAAK,EAAE,CAAC,CAAC,KAAK,EACd,QAAQ,EAAE,CAAC,CAAC,QAAQ,EACpB,SAAS,EAAE;gBACP,SAAS,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAC7B,KAAK,EAAE;oBACH,YAAY,EAAE,CACV,oBAAC,UAAU,IACP,QAAQ,EAAE,CAAC,CAAC,EACZ,OAAO,EAAE,GAAG,EAAE;4BACV,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;4BACvC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;wBAC1D,CAAC;wBAED,oBAAC,QAAQ,OAAG,CACH,CAChB;iBACJ;aACJ,EACD,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,EAC5B,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,yBAAyB,CAAC,EACjF,UAAU,EAAE,IAAI,CAAC,UAAU,CACvB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EACtB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,EAC1B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,CAClC,GACH,CACL,CAAC;IACN,CAAC;CACJ","sourcesContent":["import React, { type JSX } from 'react';\n\nimport { TextField, IconButton } from '@mui/material';\n\nimport { ContentCopy as IconCopy } from '@mui/icons-material';\n\nimport { Utils, I18n } from '@iobroker/adapter-react-v5';\n\nimport type { ConfigItemUUID } from '../types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\ninterface ConfigUUIDProps extends ConfigGenericProps {\n schema: ConfigItemUUID;\n}\n\ninterface ConfigUUIDState extends ConfigGenericState {\n uuid?: string;\n}\n\nexport default class ConfigUUID extends ConfigGeneric<ConfigUUIDProps, ConfigUUIDState> {\n async componentDidMount(): Promise<void> {\n await super.componentDidMount();\n\n const uuidObj = await this.getCachedObject('system.meta.uuid');\n this.setState({ uuid: uuidObj?.native?.uuid || 'unknown' });\n }\n\n renderItem(error: unknown, disabled: boolean): JSX.Element {\n return (\n <TextField\n variant=\"standard\"\n fullWidth\n error={!!error}\n disabled={!!disabled}\n slotProps={{\n htmlInput: { readOnly: true },\n input: {\n endAdornment: (\n <IconButton\n tabIndex={-1}\n onClick={() => {\n Utils.copyToClipboard(this.state.uuid);\n window.alert(I18n.t('jc_Copied %s', this.state.uuid));\n }}\n >\n <IconCopy />\n </IconButton>\n ),\n },\n }}\n value={this.state.uuid || ''}\n label={this.getText(this.props.schema.label) || I18n.t('jc_Serial number (UUID)')}\n helperText={this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n )}\n />\n );\n }\n}\n"]}
1
+ {"version":3,"file":"ConfigUUID.js","sourceRoot":"./src/","sources":["JsonConfigComponent/ConfigUUID.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAExC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEtD,OAAO,EAAE,WAAW,IAAI,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAE9D,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,4BAA4B,CAAC;AAGzD,OAAO,aAAmE,MAAM,iBAAiB,CAAC;AAUlG,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,aAA+C;IACnF,KAAK,CAAC,iBAAiB;QACnB,MAAM,KAAK,CAAC,iBAAiB,EAAE,CAAC;QAEhC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,kBAAkB,CAAC,CAAC;QAC/D,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,IAAI,SAAS,EAAE,CAAC,CAAC;IAChE,CAAC;IAED,UAAU,CAAC,KAAc,EAAE,QAAiB;QACxC,OAAO,CACH,oBAAC,SAAS,IACN,OAAO,EAAC,UAAU,EAClB,SAAS,QACT,KAAK,EAAE,CAAC,CAAC,KAAK,EACd,QAAQ,EAAE,CAAC,CAAC,QAAQ,EACpB,SAAS,EAAE;gBACP,SAAS,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAC7B,KAAK,EAAE;oBACH,YAAY,EAAE,CACV,oBAAC,UAAU,IACP,QAAQ,EAAE,CAAC,CAAC,EACZ,OAAO,EAAE,GAAG,EAAE;4BACV,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;4BAC7C,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;wBAC1D,CAAC;wBAED,oBAAC,QAAQ,OAAG,CACH,CAChB;iBACJ;aACJ,EACD,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,EAC5B,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,yBAAyB,CAAC,EACjF,UAAU,EAAE,IAAI,CAAC,UAAU,CACvB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EACtB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,EAC1B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,CAClC,GACH,CACL,CAAC;IACN,CAAC;CACJ","sourcesContent":["import React, { type JSX } from 'react';\n\nimport { TextField, IconButton } from '@mui/material';\n\nimport { ContentCopy as IconCopy } from '@mui/icons-material';\n\nimport { Utils, I18n } from '@iobroker/adapter-react-v5';\n\nimport type { ConfigItemUUID } from '../types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\ninterface ConfigUUIDProps extends ConfigGenericProps {\n schema: ConfigItemUUID;\n}\n\ninterface ConfigUUIDState extends ConfigGenericState {\n uuid?: string;\n}\n\nexport default class ConfigUUID extends ConfigGeneric<ConfigUUIDProps, ConfigUUIDState> {\n async componentDidMount(): Promise<void> {\n await super.componentDidMount();\n\n const uuidObj = await this.getCachedObject('system.meta.uuid');\n this.setState({ uuid: uuidObj?.native?.uuid || 'unknown' });\n }\n\n renderItem(error: unknown, disabled: boolean): JSX.Element {\n return (\n <TextField\n variant=\"standard\"\n fullWidth\n error={!!error}\n disabled={!!disabled}\n slotProps={{\n htmlInput: { readOnly: true },\n input: {\n endAdornment: (\n <IconButton\n tabIndex={-1}\n onClick={() => {\n Utils.copyToClipboard(this.state.uuid || '');\n window.alert(I18n.t('jc_Copied %s', this.state.uuid));\n }}\n >\n <IconCopy />\n </IconButton>\n ),\n },\n }}\n value={this.state.uuid || ''}\n label={this.getText(this.props.schema.label) || I18n.t('jc_Serial number (UUID)')}\n helperText={this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n )}\n />\n );\n }\n}\n"]}
@@ -39,11 +39,11 @@ class ConfigUser extends ConfigGeneric {
39
39
  const value = ConfigGeneric.getValue(this.props.data, this.props.attr);
40
40
  return (React.createElement(FormControl, { variant: "standard", fullWidth: true },
41
41
  this.state.users && this.props.schema.label ? (React.createElement(InputLabel, null, this.getText(this.props.schema.label))) : null,
42
- !this.state.users ? (React.createElement(TextField, { variant: "standard", error: !!error, disabled: !!disabled, value: value, onChange: e => this.onChange(this.props.attr, e.target.value), label: this.getText(this.props.schema.label) })) : (React.createElement(Select, { variant: "standard", error: !!error, disabled: !!disabled, value: value, renderValue: val => (React.createElement("span", null,
42
+ !this.state.users ? (React.createElement(TextField, { variant: "standard", error: !!error, disabled: !!disabled, value: value, onChange: e => this.props.attr && this.onChange(this.props.attr, e.target.value), label: this.getText(this.props.schema.label) })) : (React.createElement(Select, { variant: "standard", error: !!error, disabled: !!disabled, value: value, renderValue: val => (React.createElement("span", null,
43
43
  this.state.users && this.state.users[val]?.icon ? (React.createElement(Icon, { src: this.state.users && this.state.users[val]?.icon, style: styles.icon })) : null,
44
44
  (this.state.users && this.state.users[val]?.name) || val || '')), style: {
45
45
  color: (this.state.users && this.state.users[value]?.color) || undefined,
46
- backgroundColor: Utils.getInvertedColor(this.state.users && this.state.users[value]?.color, this.props.oContext.themeType),
46
+ backgroundColor: Utils.getInvertedColor(this.state.users?.[value]?.color, this.props.oContext.themeType),
47
47
  }, onChange: e => this.onChange(this.props.attr, e.target.value) }, this.state.users &&
48
48
  Object.keys(this.state.users).map(id => (React.createElement(MenuItem, { style: {
49
49
  color: this.state.users[id].color || undefined,
@@ -1 +1 @@
1
- {"version":3,"file":"ConfigUser.js","sourceRoot":"./src/","sources":["JsonConfigComponent/ConfigUser.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { type JSX } from 'react';\n\nimport { InputLabel, TextField, MenuItem, FormHelperText, FormControl, Select } from '@mui/material';\n\nimport { Icon, Utils, I18n } from '@iobroker/adapter-react-v5';\n\nimport type { ConfigItemUser } from '../types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\nconst styles: Record<string, React.CSSProperties> = {\n icon: {\n width: 16,\n height: 16,\n marginRight: 8,\n },\n};\n\ninterface ConfigUserProps extends ConfigGenericProps {\n schema: ConfigItemUser;\n}\n\ninterface ConfigUserState extends ConfigGenericState {\n users: Record<string, { color?: string; icon?: string; name: string }>;\n}\n\nclass ConfigUser extends ConfigGeneric<ConfigUserProps, ConfigUserState> {\n async componentDidMount(): Promise<void> {\n await super.componentDidMount();\n this.props.oContext.socket\n .getUsers()\n .then(users => {\n const _users: Record<string, { color?: string; icon?: string; name: string }> = {};\n const lang = I18n.getLanguage();\n\n if (this.props.schema.short) {\n users.forEach(\n user =>\n (_users[user._id] = {\n color: user.common?.color,\n icon: user.common?.icon,\n name: Utils.getObjectNameFromObj(user, lang),\n }),\n );\n } else {\n users.forEach(\n user =>\n (_users[user._id.replace(/^system\\.user\\./, '')] = {\n color: user.common?.color,\n icon: user.common?.icon,\n name: Utils.getObjectNameFromObj(user, lang),\n }),\n );\n }\n\n this.setState({ users: _users });\n })\n .catch(e => console.error(`Cannot get users: ${e}`));\n }\n\n renderItem(error: string, disabled: boolean /* , defaultValue */): JSX.Element {\n const value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n\n return (\n <FormControl\n variant=\"standard\"\n fullWidth\n >\n {this.state.users && this.props.schema.label ? (\n <InputLabel>{this.getText(this.props.schema.label)}</InputLabel>\n ) : null}\n {!this.state.users ? (\n <TextField\n variant=\"standard\"\n error={!!error}\n disabled={!!disabled}\n value={value}\n onChange={e => this.onChange(this.props.attr, e.target.value)}\n label={this.getText(this.props.schema.label)}\n />\n ) : (\n <Select\n variant=\"standard\"\n error={!!error}\n disabled={!!disabled}\n value={value}\n renderValue={val => (\n <span>\n {this.state.users && this.state.users[val]?.icon ? (\n <Icon\n src={this.state.users && this.state.users[val]?.icon}\n style={styles.icon}\n />\n ) : null}\n {(this.state.users && this.state.users[val]?.name) || val || ''}\n </span>\n )}\n style={{\n color: (this.state.users && this.state.users[value]?.color) || undefined,\n backgroundColor: Utils.getInvertedColor(\n this.state.users && this.state.users[value]?.color,\n this.props.oContext.themeType,\n ),\n }}\n onChange={e => this.onChange(this.props.attr, e.target.value)}\n >\n {this.state.users &&\n Object.keys(this.state.users).map(id => (\n <MenuItem\n style={{\n color: this.state.users[id].color || undefined,\n backgroundColor: Utils.getInvertedColor(\n this.state.users[id].color,\n this.props.oContext.themeType,\n ),\n }}\n key={id}\n value={id}\n >\n {this.state.users[id].icon ? (\n <Icon\n src={this.state.users[id].icon}\n style={styles.icon}\n />\n ) : null}\n {this.state.users[id].name}\n </MenuItem>\n ))}\n </Select>\n )}\n {this.props.schema.help ? (\n <FormHelperText>\n {this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n )}\n </FormHelperText>\n ) : null}\n </FormControl>\n );\n }\n}\n\nexport default ConfigUser;\n"]}
1
+ {"version":3,"file":"ConfigUser.js","sourceRoot":"./src/","sources":["JsonConfigComponent/ConfigUser.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { type JSX } from 'react';\n\nimport { InputLabel, TextField, MenuItem, FormHelperText, FormControl, Select } from '@mui/material';\n\nimport { Icon, Utils, I18n } from '@iobroker/adapter-react-v5';\n\nimport type { ConfigItemUser } from '../types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\nconst styles: Record<string, React.CSSProperties> = {\n icon: {\n width: 16,\n height: 16,\n marginRight: 8,\n },\n};\n\ninterface ConfigUserProps extends ConfigGenericProps {\n schema: ConfigItemUser;\n}\n\ninterface ConfigUserState extends ConfigGenericState {\n users: Record<string, { color?: string; icon?: string; name: string }>;\n}\n\nclass ConfigUser extends ConfigGeneric<ConfigUserProps, ConfigUserState> {\n async componentDidMount(): Promise<void> {\n await super.componentDidMount();\n this.props.oContext.socket\n .getUsers()\n .then(users => {\n const _users: Record<string, { color?: string; icon?: string; name: string }> = {};\n const lang = I18n.getLanguage();\n\n if (this.props.schema.short) {\n users.forEach(\n user =>\n (_users[user._id] = {\n color: user.common?.color,\n icon: user.common?.icon,\n name: Utils.getObjectNameFromObj(user, lang),\n }),\n );\n } else {\n users.forEach(\n user =>\n (_users[user._id.replace(/^system\\.user\\./, '')] = {\n color: user.common?.color,\n icon: user.common?.icon,\n name: Utils.getObjectNameFromObj(user, lang),\n }),\n );\n }\n\n this.setState({ users: _users });\n })\n .catch(e => console.error(`Cannot get users: ${e}`));\n }\n\n renderItem(error: string, disabled: boolean /* , defaultValue */): JSX.Element {\n const value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n\n return (\n <FormControl\n variant=\"standard\"\n fullWidth\n >\n {this.state.users && this.props.schema.label ? (\n <InputLabel>{this.getText(this.props.schema.label)}</InputLabel>\n ) : null}\n {!this.state.users ? (\n <TextField\n variant=\"standard\"\n error={!!error}\n disabled={!!disabled}\n value={value}\n onChange={e => this.props.attr && this.onChange(this.props.attr, e.target.value)}\n label={this.getText(this.props.schema.label)}\n />\n ) : (\n <Select\n variant=\"standard\"\n error={!!error}\n disabled={!!disabled}\n value={value}\n renderValue={val => (\n <span>\n {this.state.users && this.state.users[val]?.icon ? (\n <Icon\n src={this.state.users && this.state.users[val]?.icon}\n style={styles.icon}\n />\n ) : null}\n {(this.state.users && this.state.users[val]?.name) || val || ''}\n </span>\n )}\n style={{\n color: (this.state.users && this.state.users[value]?.color) || undefined,\n backgroundColor: Utils.getInvertedColor(\n this.state.users?.[value]?.color,\n this.props.oContext.themeType,\n ),\n }}\n onChange={e => this.onChange(this.props.attr, e.target.value)}\n >\n {this.state.users &&\n Object.keys(this.state.users).map(id => (\n <MenuItem\n style={{\n color: this.state.users[id].color || undefined,\n backgroundColor: Utils.getInvertedColor(\n this.state.users[id].color,\n this.props.oContext.themeType,\n ),\n }}\n key={id}\n value={id}\n >\n {this.state.users[id].icon ? (\n <Icon\n src={this.state.users[id].icon}\n style={styles.icon}\n />\n ) : null}\n {this.state.users[id].name}\n </MenuItem>\n ))}\n </Select>\n )}\n {this.props.schema.help ? (\n <FormHelperText>\n {this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n )}\n </FormHelperText>\n ) : null}\n </FormControl>\n );\n }\n}\n\nexport default ConfigUser;\n"]}
@@ -31,7 +31,7 @@ export default class ConfigYamlEditor extends ConfigGeneric {
31
31
  validateYaml(value) {
32
32
  let yamlError = false;
33
33
  if (this.props.schema.validateYaml !== false) {
34
- if (value || !this.props.schema.allowEmpty) {
34
+ if (typeof value === 'string' && (value || !this.props.schema.allowEmpty)) {
35
35
  try {
36
36
  parse(value);
37
37
  }
@@ -62,7 +62,7 @@ export default class ConfigYamlEditor extends ConfigGeneric {
62
62
  }
63
63
  }, onApply: isReadOnly
64
64
  ? undefined
65
- : () => this.setState({ showSelectId: false }, () => this.onChange(attr, value)) },
65
+ : () => this.setState({ showSelectId: false }, () => attr && this.onChange(attr, value)) },
66
66
  React.createElement("div", { style: {
67
67
  ...styles.wrapper,
68
68
  border: this.state.yamlError ? '2px solid red' : '2px solid transparent',
@@ -1 +1 @@
1
- {"version":3,"file":"ConfigYamlEditor.js","sourceRoot":"./src/","sources":["JsonConfigComponent/ConfigYamlEditor.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { type JSX } from 'react';\nimport { parse } from 'yaml';\n\nimport { FormHelperText, FormControl, Button } from '@mui/material';\n\nimport { I18n } from '@iobroker/adapter-react-v5';\nimport type { ConfigItemYamlEditor } from '../types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\nimport CustomModal from './wrapper/Components/CustomModal';\nimport Editor from './wrapper/Components/Editor';\n\nconst styles: Record<string, React.CSSProperties> = {\n fullWidth: {\n width: '100%',\n },\n flex: {\n display: 'flex',\n },\n button: {\n height: 48,\n minWidth: 48,\n },\n wrapper: {\n width: 'calc(100vw - 40px)',\n height: 'calc(100vh - 188px)',\n },\n};\n\ninterface ConfigYamlEditorProps extends ConfigGenericProps {\n schema: ConfigItemYamlEditor;\n}\n\ninterface ConfigYamlEditorState extends ConfigGenericState {\n initialized?: boolean;\n showSelectId?: boolean;\n yamlError?: boolean;\n}\n\nexport default class ConfigYamlEditor extends ConfigGeneric<ConfigYamlEditorProps, ConfigYamlEditorState> {\n async componentDidMount(): Promise<void> {\n await super.componentDidMount();\n const { data, attr } = this.props;\n const value: string = ConfigGeneric.getValue(data, attr) || '';\n this.setState({ value, initialized: true, yamlError: this.validateYaml(value) });\n }\n\n validateYaml(value: string | null | undefined): boolean {\n let yamlError = false;\n if (this.props.schema.validateYaml !== false) {\n if (value || !this.props.schema.allowEmpty) {\n try {\n parse(value);\n } catch (err: unknown) {\n console.log('Error in YAML', err);\n yamlError = true;\n }\n }\n }\n\n return yamlError;\n }\n\n renderItem(_error: string, disabled: boolean /* , defaultValue */): JSX.Element | null {\n if (!this.state.initialized) {\n return null;\n }\n\n const { schema, data, attr } = this.props;\n const { value, showSelectId } = this.state;\n const isReadOnly = schema.readOnly === true || disabled;\n\n return (\n <FormControl\n fullWidth\n variant=\"standard\"\n >\n <div style={styles.flex}>\n <Button\n color=\"grey\"\n style={styles.button}\n size=\"small\"\n variant=\"outlined\"\n onClick={() => this.setState({ showSelectId: true })}\n >\n {I18n.t('jc_YAML editor')}\n </Button>\n </div>\n {showSelectId ? (\n <CustomModal\n title={this.getText(schema.label)}\n overflowHidden\n applyDisabled={(this.state.yamlError && this.props.schema.doNotApplyWithError) || isReadOnly}\n onClose={() => {\n if (isReadOnly) {\n this.setState({ showSelectId: false });\n } else {\n this.setState({ showSelectId: false, value: ConfigGeneric.getValue(data, attr) || '' });\n }\n }}\n onApply={\n isReadOnly\n ? undefined\n : () => this.setState({ showSelectId: false }, () => this.onChange(attr, value))\n }\n >\n <div\n style={{\n ...styles.wrapper,\n border: this.state.yamlError ? '2px solid red' : '2px solid transparent',\n }}\n >\n <Editor\n mode=\"yaml\"\n value={typeof value === 'object' ? JSON.stringify(value) : value}\n onChange={\n isReadOnly\n ? undefined\n : newValue =>\n this.setState({\n value: newValue,\n yamlError: this.validateYaml(newValue),\n })\n }\n name=\"ConfigYamlEditor\"\n themeType={this.props.oContext.themeType}\n />\n </div>\n </CustomModal>\n ) : null}\n {schema.help || this.state.yamlError ? (\n <FormHelperText>\n {this.state.yamlError\n ? I18n.t('jc_Invalid YAML')\n : this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n )}\n </FormHelperText>\n ) : null}\n </FormControl>\n );\n }\n}\n"]}
1
+ {"version":3,"file":"ConfigYamlEditor.js","sourceRoot":"./src/","sources":["JsonConfigComponent/ConfigYamlEditor.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { type JSX } from 'react';\nimport { parse } from 'yaml';\n\nimport { FormHelperText, FormControl, Button } from '@mui/material';\n\nimport { I18n } from '@iobroker/adapter-react-v5';\nimport type { ConfigItemYamlEditor } from '../types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\nimport CustomModal from './wrapper/Components/CustomModal';\nimport Editor from './wrapper/Components/Editor';\n\nconst styles: Record<string, React.CSSProperties> = {\n fullWidth: {\n width: '100%',\n },\n flex: {\n display: 'flex',\n },\n button: {\n height: 48,\n minWidth: 48,\n },\n wrapper: {\n width: 'calc(100vw - 40px)',\n height: 'calc(100vh - 188px)',\n },\n};\n\ninterface ConfigYamlEditorProps extends ConfigGenericProps {\n schema: ConfigItemYamlEditor;\n}\n\ninterface ConfigYamlEditorState extends ConfigGenericState {\n initialized?: boolean;\n showSelectId?: boolean;\n yamlError?: boolean;\n}\n\nexport default class ConfigYamlEditor extends ConfigGeneric<ConfigYamlEditorProps, ConfigYamlEditorState> {\n async componentDidMount(): Promise<void> {\n await super.componentDidMount();\n const { data, attr } = this.props;\n const value: string = ConfigGeneric.getValue(data, attr) || '';\n this.setState({ value, initialized: true, yamlError: this.validateYaml(value) });\n }\n\n validateYaml(value: string | null | undefined): boolean {\n let yamlError = false;\n if (this.props.schema.validateYaml !== false) {\n if (typeof value === 'string' && (value || !this.props.schema.allowEmpty)) {\n try {\n parse(value);\n } catch (err: unknown) {\n console.log('Error in YAML', err);\n yamlError = true;\n }\n }\n }\n\n return yamlError;\n }\n\n renderItem(_error: string, disabled: boolean /* , defaultValue */): JSX.Element | null {\n if (!this.state.initialized) {\n return null;\n }\n\n const { schema, data, attr } = this.props;\n const { value, showSelectId } = this.state;\n const isReadOnly = schema.readOnly === true || disabled;\n\n return (\n <FormControl\n fullWidth\n variant=\"standard\"\n >\n <div style={styles.flex}>\n <Button\n color=\"grey\"\n style={styles.button}\n size=\"small\"\n variant=\"outlined\"\n onClick={() => this.setState({ showSelectId: true })}\n >\n {I18n.t('jc_YAML editor')}\n </Button>\n </div>\n {showSelectId ? (\n <CustomModal\n title={this.getText(schema.label)}\n overflowHidden\n applyDisabled={(this.state.yamlError && this.props.schema.doNotApplyWithError) || isReadOnly}\n onClose={() => {\n if (isReadOnly) {\n this.setState({ showSelectId: false });\n } else {\n this.setState({ showSelectId: false, value: ConfigGeneric.getValue(data, attr) || '' });\n }\n }}\n onApply={\n isReadOnly\n ? undefined\n : () => this.setState({ showSelectId: false }, () => attr && this.onChange(attr, value))\n }\n >\n <div\n style={{\n ...styles.wrapper,\n border: this.state.yamlError ? '2px solid red' : '2px solid transparent',\n }}\n >\n <Editor\n mode=\"yaml\"\n value={typeof value === 'object' ? JSON.stringify(value) : value}\n onChange={\n isReadOnly\n ? undefined\n : newValue =>\n this.setState({\n value: newValue,\n yamlError: this.validateYaml(newValue),\n })\n }\n name=\"ConfigYamlEditor\"\n themeType={this.props.oContext.themeType}\n />\n </div>\n </CustomModal>\n ) : null}\n {schema.help || this.state.yamlError ? (\n <FormHelperText>\n {this.state.yamlError\n ? I18n.t('jc_Invalid YAML')\n : this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n )}\n </FormHelperText>\n ) : null}\n </FormControl>\n );\n }\n}\n"]}
@@ -1,2 +1,2 @@
1
1
  import React, { type JSX } from 'react';
2
- export default function getIconByName(name: string, style?: React.CSSProperties): JSX.Element | null;
2
+ export default function getIconByName(name: string | undefined, style?: React.CSSProperties): JSX.Element | null;
@@ -1 +1 @@
1
- {"version":3,"file":"Icons.js","sourceRoot":"./src/","sources":["JsonConfigComponent/Icons.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAExC,OAAO,EACH,GAAG,EACH,MAAM,EACN,IAAI,EACJ,OAAO,EACP,MAAM,EACN,IAAI,EACJ,OAAO,EACP,UAAU,EACV,OAAO,EACP,IAAI,IAAI,QAAQ,EAChB,iBAAiB,EACjB,SAAS,EACT,IAAI,EACJ,WAAW,EACX,UAAU,EACV,KAAK,EACL,SAAS,EACT,KAAK,EACL,WAAW,EACX,cAAc,EACd,QAAQ,EACR,KAAK,EACL,MAAM,EACN,MAAM,GACT,MAAM,qBAAqB,CAAC;AAE7B,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,IAAY,EAAE,KAA2B;IAC3E,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACvC,OAAO,oBAAC,IAAI,IAAC,KAAK,EAAE,KAAK,GAAI,CAAC;IAClC,CAAC;IACD,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACpB,OAAO,oBAAC,MAAM,IAAC,KAAK,EAAE,KAAK,GAAI,CAAC;IACpC,CAAC;IACD,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACrB,OAAO,oBAAC,OAAO,IAAC,KAAK,EAAE,KAAK,GAAI,CAAC;IACrC,CAAC;IACD,IAAI,IAAI,KAAK,WAAW,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;QAC3D,OAAO,oBAAC,GAAG,IAAC,KAAK,EAAE,KAAK,GAAI,CAAC;IACjC,CAAC;IACD,IAAI,IAAI,KAAK,UAAU,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC3C,OAAO,oBAAC,MAAM,IAAC,KAAK,EAAE,KAAK,GAAI,CAAC;IACpC,CAAC;IACD,IAAI,IAAI,KAAK,cAAc,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC/C,OAAO,oBAAC,OAAO,IAAC,KAAK,EAAE,KAAK,GAAI,CAAC;IACrC,CAAC;IACD,IAAI,IAAI,KAAK,YAAY,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QAC3C,OAAO,oBAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,GAAI,CAAC;IACtC,CAAC;IACD,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;QACtB,OAAO,oBAAC,iBAAiB,IAAC,KAAK,EAAE,KAAK,GAAI,CAAC;IAC/C,CAAC;IACD,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QAClB,OAAO,oBAAC,SAAS,IAAC,KAAK,EAAE,KAAK,GAAI,CAAC;IACvC,CAAC;IACD,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QAClB,OAAO,oBAAC,IAAI,IAAC,KAAK,EAAE,KAAK,GAAI,CAAC;IAClC,CAAC;IACD,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QACnB,OAAO,oBAAC,KAAK,IAAC,KAAK,EAAE,KAAK,GAAI,CAAC;IACnC,CAAC;IACD,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QACxC,OAAO,oBAAC,WAAW,IAAC,KAAK,EAAE,KAAK,GAAI,CAAC;IACzC,CAAC;IACD,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;QAC3C,OAAO,oBAAC,UAAU,IAAC,KAAK,EAAE,KAAK,GAAI,CAAC;IACxC,CAAC;IACD,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QACtC,OAAO,oBAAC,SAAS,IAAC,KAAK,EAAE,KAAK,GAAI,CAAC;IACvC,CAAC;IACD,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;QACvB,OAAO,oBAAC,WAAW,IAAC,KAAK,EAAE,KAAK,GAAI,CAAC;IACzC,CAAC;IACD,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACpB,OAAO,oBAAC,cAAc,IAAC,KAAK,EAAE,KAAK,GAAI,CAAC;IAC5C,CAAC;IACD,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACpB,OAAO,oBAAC,KAAK,IAAC,KAAK,EAAE,KAAK,GAAI,CAAC;IACnC,CAAC;IACD,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;QACtB,OAAO,oBAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,GAAI,CAAC;IACtC,CAAC;IACD,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QACvC,OAAO,oBAAC,KAAK,IAAC,KAAK,EAAE,KAAK,GAAI,CAAC;IACnC,CAAC;IACD,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QAClB,OAAO,oBAAC,MAAM,IAAC,KAAK,EAAE,KAAK,GAAI,CAAC;IACpC,CAAC;IACD,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACpB,OAAO,oBAAC,MAAM,IAAC,KAAK,EAAE,KAAK,GAAI,CAAC;IACpC,CAAC;IACD,IAAI,IAAI,KAAK,YAAY,EAAE,CAAC;QACxB,OAAO,oBAAC,IAAI,IAAC,KAAK,EAAE,KAAK,GAAI,CAAC;IAClC,CAAC;IACD,IAAI,IAAI,KAAK,eAAe,EAAE,CAAC;QAC3B,OAAO,oBAAC,OAAO,IAAC,KAAK,EAAE,KAAK,GAAI,CAAC;IACrC,CAAC;IACD,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACrB,OAAO,oBAAC,UAAU,IAAC,KAAK,EAAE,KAAK,GAAI,CAAC;IACxC,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC","sourcesContent":["import React, { type JSX } from 'react';\n\nimport {\n Add,\n Delete,\n Edit,\n Refresh,\n Search,\n Wifi,\n WifiOff,\n Visibility,\n LinkOff,\n Link as LinkIcon,\n NotListedLocation,\n PlayArrow,\n Stop,\n FastForward,\n FastRewind,\n Pause,\n Lightbulb,\n Power,\n Fluorescent,\n WbIncandescent,\n Settings,\n Group,\n Person,\n QrCode,\n} from '@mui/icons-material';\n\nexport default function getIconByName(name: string, style?: React.CSSProperties): JSX.Element | null {\n if (name === 'edit' || name === 'rename') {\n return <Edit style={style} />;\n }\n if (name === 'delete') {\n return <Delete style={style} />;\n }\n if (name === 'refresh') {\n return <Refresh style={style} />;\n }\n if (name === 'newDevice' || name === 'new' || name === 'add') {\n return <Add style={style} />;\n }\n if (name === 'discover' || name === 'search') {\n return <Search style={style} />;\n }\n if (name === 'unpairDevice' || name === 'unpair') {\n return <LinkOff style={style} />;\n }\n if (name === 'pairDevice' || name === 'pair') {\n return <LinkIcon style={style} />;\n }\n if (name === 'identify') {\n return <NotListedLocation style={style} />;\n }\n if (name === 'play') {\n return <PlayArrow style={style} />;\n }\n if (name === 'stop') {\n return <Stop style={style} />;\n }\n if (name === 'pause') {\n return <Pause style={style} />;\n }\n if (name === 'forward' || name === 'next') {\n return <FastForward style={style} />;\n }\n if (name === 'rewind' || name === 'previous') {\n return <FastRewind style={style} />;\n }\n if (name === 'lamp' || name === 'light') {\n return <Lightbulb style={style} />;\n }\n if (name === 'backlight') {\n return <Fluorescent style={style} />;\n }\n if (name === 'dimmer') {\n return <WbIncandescent style={style} />;\n }\n if (name === 'socket') {\n return <Power style={style} />;\n }\n if (name === 'settings') {\n return <Settings style={style} />;\n }\n if (name === 'users' || name === 'group') {\n return <Group style={style} />;\n }\n if (name === 'user') {\n return <Person style={style} />;\n }\n if (name === 'qrcode') {\n return <QrCode style={style} />;\n }\n if (name === 'connection') {\n return <Wifi style={style} />;\n }\n if (name === 'no-connection') {\n return <WifiOff style={style} />;\n }\n if (name === 'visible') {\n return <Visibility style={style} />;\n }\n return null;\n}\n"]}
1
+ {"version":3,"file":"Icons.js","sourceRoot":"./src/","sources":["JsonConfigComponent/Icons.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { type JSX } from 'react';\n\nimport {\n Add,\n Delete,\n Edit,\n Refresh,\n Search,\n Wifi,\n WifiOff,\n Visibility,\n LinkOff,\n Link as LinkIcon,\n NotListedLocation,\n PlayArrow,\n Stop,\n FastForward,\n FastRewind,\n Pause,\n Lightbulb,\n Power,\n Fluorescent,\n WbIncandescent,\n Settings,\n Group,\n Person,\n QrCode,\n} from '@mui/icons-material';\n\nexport default function getIconByName(name: string | undefined, style?: React.CSSProperties): JSX.Element | null {\n if (name === 'edit' || name === 'rename') {\n return <Edit style={style} />;\n }\n if (name === 'delete') {\n return <Delete style={style} />;\n }\n if (name === 'refresh') {\n return <Refresh style={style} />;\n }\n if (name === 'newDevice' || name === 'new' || name === 'add') {\n return <Add style={style} />;\n }\n if (name === 'discover' || name === 'search') {\n return <Search style={style} />;\n }\n if (name === 'unpairDevice' || name === 'unpair') {\n return <LinkOff style={style} />;\n }\n if (name === 'pairDevice' || name === 'pair') {\n return <LinkIcon style={style} />;\n }\n if (name === 'identify') {\n return <NotListedLocation style={style} />;\n }\n if (name === 'play') {\n return <PlayArrow style={style} />;\n }\n if (name === 'stop') {\n return <Stop style={style} />;\n }\n if (name === 'pause') {\n return <Pause style={style} />;\n }\n if (name === 'forward' || name === 'next') {\n return <FastForward style={style} />;\n }\n if (name === 'rewind' || name === 'previous') {\n return <FastRewind style={style} />;\n }\n if (name === 'lamp' || name === 'light') {\n return <Lightbulb style={style} />;\n }\n if (name === 'backlight') {\n return <Fluorescent style={style} />;\n }\n if (name === 'dimmer') {\n return <WbIncandescent style={style} />;\n }\n if (name === 'socket') {\n return <Power style={style} />;\n }\n if (name === 'settings') {\n return <Settings style={style} />;\n }\n if (name === 'users' || name === 'group') {\n return <Group style={style} />;\n }\n if (name === 'user') {\n return <Person style={style} />;\n }\n if (name === 'qrcode') {\n return <QrCode style={style} />;\n }\n if (name === 'connection') {\n return <Wifi style={style} />;\n }\n if (name === 'no-connection') {\n return <WifiOff style={style} />;\n }\n if (name === 'visible') {\n return <Visibility style={style} />;\n }\n return null;\n}\n"]}
@@ -17,7 +17,7 @@ interface JsonConfigComponentProps {
17
17
  data: Record<string, any>;
18
18
  updateData?: number;
19
19
  onError: (error: boolean) => void;
20
- onChange?: (data: Record<string, any>, changed: boolean, saveConfig: boolean) => void;
20
+ onChange?: (data: Record<string, any> | null, changed: boolean | undefined, saveConfig: boolean) => void;
21
21
  /** Backend request to refresh data */
22
22
  onBackEndCommand?: (command?: BackEndCommand) => void;
23
23
  custom?: boolean;
@@ -56,12 +56,12 @@ export declare class JsonConfigComponent extends Component<JsonConfigComponentPr
56
56
  static i18nInitialized: boolean;
57
57
  constructor(props: JsonConfigComponentProps);
58
58
  static getDerivedStateFromProps(props: JsonConfigComponentProps, state: JsonConfigComponentState): Partial<JsonConfigComponentState> | null;
59
- static loadI18n(socket: AdminConnection, i18n: boolean | string | Record<string, Record<ioBroker.Languages, string>>, adapterName: string): Promise<string>;
59
+ static loadI18n(socket: AdminConnection, i18n: boolean | string | Record<string, Record<ioBroker.Languages, string>> | undefined, adapterName: string): Promise<string>;
60
60
  onCommandRunning: (commandRunning: boolean) => void;
61
61
  readData(): Promise<void>;
62
62
  onAlive: (_id: string, state?: ioBroker.State | null) => void;
63
- onChange: (attrOrData: string | Record<string, any>, value: any, cb?: () => void, saveConfig?: boolean) => void;
64
- onError: (attr: string, error?: string) => void;
63
+ onChange: (attrOrData: string | Record<string, any> | undefined, value: any, cb?: () => void, saveConfig?: boolean) => void;
64
+ onError: (attr?: string, error?: string) => void;
65
65
  flatten(schema: Record<string, any>, _list?: Record<string, any>): Record<string, any>;
66
66
  buildDependencies(schema: ConfigItemTabs | ConfigItemPanel): void;
67
67
  getCachedObject: (id: string) => Promise<ioBroker.Object | null>;
@@ -138,7 +138,10 @@ export class JsonConfigComponent extends Component {
138
138
  systemConfig = ((await this.getCachedObject('system.config')) || undefined);
139
139
  }
140
140
  const state = await this.props.socket.getState(`system.adapter.${this.props.adapterName}.${this.props.instance}.alive`);
141
- this.setState({ systemConfig: systemConfig.common, alive: !!(state && state.val) }, () => {
141
+ this.setState({
142
+ systemConfig: systemConfig?.common || {},
143
+ alive: !!state?.val,
144
+ }, () => {
142
145
  this.updateContext(true);
143
146
  if (!this.props.custom) {
144
147
  void this.props.socket.subscribeState(`system.adapter.${this.props.adapterName}.${this.props.instance}.alive`, this.onAlive);
@@ -156,40 +159,39 @@ export class JsonConfigComponent extends Component {
156
159
  };
157
160
  onChange = (attrOrData, value, cb, saveConfig) => {
158
161
  if (this.props.onValueChange) {
159
- this.props.onValueChange(attrOrData, value, saveConfig);
160
- if (cb) {
161
- cb();
162
- }
162
+ this.props.onValueChange(attrOrData, value, !!saveConfig);
163
+ cb?.();
163
164
  }
164
165
  else if (attrOrData && this.props.onChange) {
165
166
  const newState = {
166
167
  changed: JSON.stringify(attrOrData) !== this.state.originalData,
167
168
  };
168
169
  this.setState(newState, () => {
169
- this.props.onChange(attrOrData, newState.changed, saveConfig);
170
- if (cb) {
171
- cb();
172
- }
170
+ this.props.onChange?.(attrOrData, !!newState.changed, !!saveConfig);
171
+ cb?.();
173
172
  });
174
173
  }
175
174
  else if (saveConfig) {
176
- this.props.onChange(null, null, saveConfig);
175
+ this.props.onChange?.(null, undefined, saveConfig);
177
176
  }
178
177
  };
179
178
  onError = (attr, error) => {
180
179
  this.errorCached = this.errorCached || JSON.parse(JSON.stringify(this.state.errors));
181
180
  const errors = this.errorCached;
182
- if (error) {
183
- errors[attr] = error;
184
- }
185
- else {
186
- delete errors[attr];
181
+ if (errors && attr) {
182
+ if (error) {
183
+ errors[attr] = error;
184
+ }
185
+ else {
186
+ delete errors[attr];
187
+ }
187
188
  }
188
189
  if (this.errorTimeout) {
189
190
  clearTimeout(this.errorTimeout);
191
+ this.errorTimeout = null;
190
192
  }
191
193
  if (JSON.stringify(errors) !== JSON.stringify(this.state.errors)) {
192
- this.errorTimeout = setTimeout(() => this.setState({ errors: this.errorCached }, () => {
194
+ this.errorTimeout = setTimeout(() => this.setState({ errors: this.errorCached || {} }, () => {
193
195
  this.errorTimeout = null;
194
196
  this.errorCached = null;
195
197
  this.props.onError(!!Object.keys(this.state.errors).length);
@@ -338,6 +340,9 @@ export class JsonConfigComponent extends Component {
338
340
  }
339
341
  }
340
342
  renderItem(item) {
343
+ if (!this.oContext) {
344
+ return null;
345
+ }
341
346
  if (item.type === 'tabs') {
342
347
  return (React.createElement(ConfigTabs, { withoutSaveButtons: this.props.withoutSaveButtons, oContext: this.oContext, alive: this.state.alive, changed: this.state.changed, commandRunning: this.state.commandRunning, common: this.props.common, custom: this.props.custom, customObj: this.props.customObj, data: this.props.data, onChange: this.onChange, onError: (attr, error) => this.onError(attr, error), originalData: JSON.parse(this.state.originalData), root: true, schema: item, expertMode: this.props.expertMode, themeName: this.props.themeName, customComponents: this.props.customComponents }));
343
348
  }