@iobroker/json-config 8.4.8 → 8.4.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. package/README.md +3 -0
  2. package/build/JsonConfig.js +7 -7
  3. package/build/JsonConfig.js.map +1 -1
  4. package/build/JsonConfigComponent/ConfigAccordion.js +9 -9
  5. package/build/JsonConfigComponent/ConfigAccordion.js.map +1 -1
  6. package/build/JsonConfigComponent/ConfigAlive.js +2 -2
  7. package/build/JsonConfigComponent/ConfigAlive.js.map +1 -1
  8. package/build/JsonConfigComponent/ConfigAutocompleteSendTo.js +1 -1
  9. package/build/JsonConfigComponent/ConfigAutocompleteSendTo.js.map +1 -1
  10. package/build/JsonConfigComponent/ConfigCRON.js +1 -1
  11. package/build/JsonConfigComponent/ConfigCRON.js.map +1 -1
  12. package/build/JsonConfigComponent/ConfigCertCollection.js +2 -2
  13. package/build/JsonConfigComponent/ConfigCertCollection.js.map +1 -1
  14. package/build/JsonConfigComponent/ConfigCertificates.js +6 -6
  15. package/build/JsonConfigComponent/ConfigCertificates.js.map +1 -1
  16. package/build/JsonConfigComponent/ConfigCheckDocker.js +4 -4
  17. package/build/JsonConfigComponent/ConfigCheckDocker.js.map +1 -1
  18. package/build/JsonConfigComponent/ConfigCheckLicense.js +31 -31
  19. package/build/JsonConfigComponent/ConfigCheckLicense.js.map +1 -1
  20. package/build/JsonConfigComponent/ConfigCheckbox.js +1 -1
  21. package/build/JsonConfigComponent/ConfigCheckbox.js.map +1 -1
  22. package/build/JsonConfigComponent/ConfigChip.js +1 -1
  23. package/build/JsonConfigComponent/ConfigChip.js.map +1 -1
  24. package/build/JsonConfigComponent/ConfigCoordinates.js +7 -7
  25. package/build/JsonConfigComponent/ConfigCoordinates.js.map +1 -1
  26. package/build/JsonConfigComponent/ConfigCredentialSelect.js +11 -11
  27. package/build/JsonConfigComponent/ConfigCredentialSelect.js.map +1 -1
  28. package/build/JsonConfigComponent/ConfigFileSelector.js +6 -6
  29. package/build/JsonConfigComponent/ConfigFileSelector.js.map +1 -1
  30. package/build/JsonConfigComponent/ConfigGeneric.js +6 -6
  31. package/build/JsonConfigComponent/ConfigGeneric.js.map +1 -1
  32. package/build/JsonConfigComponent/ConfigIFrameSendTo.js +1 -1
  33. package/build/JsonConfigComponent/ConfigIFrameSendTo.js.map +1 -1
  34. package/build/JsonConfigComponent/ConfigIP.js +2 -2
  35. package/build/JsonConfigComponent/ConfigIP.js.map +1 -1
  36. package/build/JsonConfigComponent/ConfigImageSendTo.js +2 -2
  37. package/build/JsonConfigComponent/ConfigImageSendTo.js.map +1 -1
  38. package/build/JsonConfigComponent/ConfigJsonEditor.js +2 -2
  39. package/build/JsonConfigComponent/ConfigJsonEditor.js.map +1 -1
  40. package/build/JsonConfigComponent/ConfigLanguage.js +2 -2
  41. package/build/JsonConfigComponent/ConfigLanguage.js.map +1 -1
  42. package/build/JsonConfigComponent/ConfigLicense.js +3 -3
  43. package/build/JsonConfigComponent/ConfigLicense.js.map +1 -1
  44. package/build/JsonConfigComponent/ConfigNumber.js +5 -5
  45. package/build/JsonConfigComponent/ConfigNumber.js.map +1 -1
  46. package/build/JsonConfigComponent/ConfigOAuth2.js +9 -9
  47. package/build/JsonConfigComponent/ConfigOAuth2.js.map +1 -1
  48. package/build/JsonConfigComponent/ConfigPassword.js +4 -4
  49. package/build/JsonConfigComponent/ConfigPassword.js.map +1 -1
  50. package/build/JsonConfigComponent/ConfigPattern.js +1 -1
  51. package/build/JsonConfigComponent/ConfigPattern.js.map +1 -1
  52. package/build/JsonConfigComponent/ConfigPort.js +7 -7
  53. package/build/JsonConfigComponent/ConfigPort.js.map +1 -1
  54. package/build/JsonConfigComponent/ConfigQrCodeSendTo.js +3 -3
  55. package/build/JsonConfigComponent/ConfigQrCodeSendTo.js.map +1 -1
  56. package/build/JsonConfigComponent/ConfigSelectSendTo.js +2 -2
  57. package/build/JsonConfigComponent/ConfigSelectSendTo.js.map +1 -1
  58. package/build/JsonConfigComponent/ConfigSendto.js +10 -10
  59. package/build/JsonConfigComponent/ConfigSendto.js.map +1 -1
  60. package/build/JsonConfigComponent/ConfigSetState.js +2 -2
  61. package/build/JsonConfigComponent/ConfigSetState.js.map +1 -1
  62. package/build/JsonConfigComponent/ConfigState.js +1 -1
  63. package/build/JsonConfigComponent/ConfigState.js.map +1 -1
  64. package/build/JsonConfigComponent/ConfigStaticImage.js +2 -2
  65. package/build/JsonConfigComponent/ConfigStaticImage.js.map +1 -1
  66. package/build/JsonConfigComponent/ConfigStaticInfo.js +1 -1
  67. package/build/JsonConfigComponent/ConfigStaticInfo.js.map +1 -1
  68. package/build/JsonConfigComponent/ConfigTable.js +33 -33
  69. package/build/JsonConfigComponent/ConfigTable.js.map +1 -1
  70. package/build/JsonConfigComponent/ConfigText.js +3 -3
  71. package/build/JsonConfigComponent/ConfigText.js.map +1 -1
  72. package/build/JsonConfigComponent/ConfigTextSendTo.js +2 -2
  73. package/build/JsonConfigComponent/ConfigTextSendTo.js.map +1 -1
  74. package/build/JsonConfigComponent/ConfigUUID.js +2 -2
  75. package/build/JsonConfigComponent/ConfigUUID.js.map +1 -1
  76. package/build/JsonConfigComponent/ConfigYamlEditor.js +2 -2
  77. package/build/JsonConfigComponent/ConfigYamlEditor.js.map +1 -1
  78. package/build/JsonConfigComponent/i18n/de.json +116 -0
  79. package/build/JsonConfigComponent/i18n/en.json +136 -0
  80. package/build/JsonConfigComponent/i18n/es.json +116 -0
  81. package/build/JsonConfigComponent/i18n/fr.json +116 -0
  82. package/build/JsonConfigComponent/i18n/it.json +116 -0
  83. package/build/JsonConfigComponent/i18n/nl.json +116 -0
  84. package/build/JsonConfigComponent/i18n/pl.json +116 -0
  85. package/build/JsonConfigComponent/i18n/pt.json +116 -0
  86. package/build/JsonConfigComponent/i18n/ru.json +116 -0
  87. package/build/JsonConfigComponent/i18n/uk.json +116 -0
  88. package/build/JsonConfigComponent/i18n/zh-cn.json +116 -0
  89. package/build/JsonConfigComponent/index.d.ts +1 -0
  90. package/build/JsonConfigComponent/index.js +28 -0
  91. package/build/JsonConfigComponent/index.js.map +1 -1
  92. package/build/JsonConfigComponent/wrapper/Components/CustomModal.js +3 -3
  93. package/build/JsonConfigComponent/wrapper/Components/CustomModal.js.map +1 -1
  94. package/package.json +13 -9
@@ -53,10 +53,10 @@ class ConfigCheckLicense extends ConfigGeneric {
53
53
  let content = this.state._error;
54
54
  if (this.state.allLicenses) {
55
55
  content = [React.createElement("div", { key: "error" }, content)];
56
- content.push(React.createElement(Button, { key: "button", variant: "contained", onClick: () => window.open('https://iobroker.net/www/account/licenses', '_blank') }, I18n.t('iobroker.net')));
56
+ content.push(React.createElement(Button, { key: "button", variant: "contained", onClick: () => window.open('https://iobroker.net/www/account/licenses', '_blank') }, "iobroker.net"));
57
57
  if (!this.state.allLicenses.length) {
58
- content.push(React.createElement("div", { key: "text1" }, I18n.t('ra_No one license found in license manager')));
59
- content.push(React.createElement("div", { key: "text2" }, I18n.t('ra_Please create license')));
58
+ content.push(React.createElement("div", { key: "text1" }, I18n.t('jc_No one license found in license manager')));
59
+ content.push(React.createElement("div", { key: "text2" }, I18n.t('jc_Please create license')));
60
60
  }
61
61
  else {
62
62
  // license.id,
@@ -69,11 +69,11 @@ class ConfigCheckLicense extends ConfigGeneric {
69
69
  React.createElement(Table, { size: "small" },
70
70
  React.createElement(TableHead, null,
71
71
  React.createElement(TableRow, null,
72
- React.createElement(TableCell, null, I18n.t('ra_Product')),
73
- React.createElement(TableCell, null, I18n.t('ra_Version')),
72
+ React.createElement(TableCell, null, I18n.t('jc_Product')),
73
+ React.createElement(TableCell, null, I18n.t('jc_Version')),
74
74
  React.createElement(TableCell, null, "UUID"),
75
- React.createElement(TableCell, null, I18n.t('ra_ValidTill')),
76
- React.createElement(TableCell, null, I18n.t('ra_Commercial')),
75
+ React.createElement(TableCell, null, I18n.t('jc_ValidTill')),
76
+ React.createElement(TableCell, null, I18n.t('jc_Commercial')),
77
77
  React.createElement(TableCell, null, "ID"))),
78
78
  React.createElement(TableBody, null, this.state.allLicenses.map(license => (React.createElement(TableRow, { key: license.id },
79
79
  React.createElement(TableCell, { sx: license.validName ? null : styles.errorText }, license.license.product),
@@ -92,11 +92,11 @@ class ConfigCheckLicense extends ConfigGeneric {
92
92
  }
93
93
  }
94
94
  return (React.createElement(Dialog, { open: !0, maxWidth: "xl", fullWidth: this.props.fullWidth !== undefined ? this.props.fullWidth : true, onClick: () => this.setState({ _error: '', allLicenses: null }) },
95
- React.createElement(DialogTitle, null, I18n.t('ra_Error')),
95
+ React.createElement(DialogTitle, null, I18n.t('jc_Error')),
96
96
  React.createElement(DialogContent, null,
97
97
  React.createElement(DialogContentText, null, content)),
98
98
  React.createElement(DialogActions, null,
99
- React.createElement(Button, { variant: "contained", onClick: () => this.setState({ _error: '', allLicenses: null }), color: "primary", autoFocus: true, startIcon: React.createElement(IconCheck, null) }, I18n.t('ra_Ok')))));
99
+ React.createElement(Button, { variant: "contained", onClick: () => this.setState({ _error: '', allLicenses: null }), color: "primary", autoFocus: true, startIcon: React.createElement(IconCheck, null) }, I18n.t('jc_Ok')))));
100
100
  }
101
101
  return null;
102
102
  }
@@ -141,18 +141,18 @@ class ConfigCheckLicense extends ConfigGeneric {
141
141
  });
142
142
  pre.push(React.createElement("div", { key: "checked" },
143
143
  React.createElement("div", { style: styles.licLabel },
144
- I18n.t('ra_Checked'),
144
+ I18n.t('jc_Checked'),
145
145
  ":"),
146
- this.state.licenseOfflineCheck ? I18n.t('ra_locally') : I18n.t('ra_via internet')));
146
+ this.state.licenseOfflineCheck ? I18n.t('jc_locally') : I18n.t('jc_via internet')));
147
147
  return (React.createElement(Dialog, { open: !0, onClose: () => this.setState({ showLicenseData: null }) },
148
148
  React.createElement(DialogTitle, null,
149
- React.createElement(Box, { component: "span", sx: this.state.result ? styles.okTitle : styles.errorTitle }, I18n.t('ra_License %s', this.state.result ? 'OK' : 'INVALID'))),
149
+ React.createElement(Box, { component: "span", sx: this.state.result ? styles.okTitle : styles.errorTitle }, I18n.t('jc_License %s', this.state.result ? 'OK' : 'INVALID'))),
150
150
  React.createElement(DialogContent, null,
151
151
  this.state.showLinkToProfile ? (React.createElement(Button, { variant: "contained", onClick: () => window.open('https://iobroker.net/www/account/licenses', '_blank') }, "https://iobroker.net")) : null,
152
152
  this.state._error ? (React.createElement(Box, { component: "div", sx: styles.errorText }, this.state._error)) : null,
153
153
  pre),
154
154
  React.createElement(DialogActions, null,
155
- React.createElement(Button, { onClick: () => this.setState({ showLicenseData: null, _error: '' }), color: "primary", variant: "contained" }, I18n.t('ra_Close')))));
155
+ React.createElement(Button, { onClick: () => this.setState({ showLicenseData: null, _error: '' }), color: "primary", variant: "contained" }, I18n.t('jc_Close')))));
156
156
  }
157
157
  return null;
158
158
  }
@@ -294,7 +294,7 @@ class ConfigCheckLicense extends ConfigGeneric {
294
294
  if (data?.error) {
295
295
  try {
296
296
  const data_ = ConfigCheckLicense.parseJwt(license);
297
- const _error = I18n.t(`ra_${data_.error || data.error || 'Unknown error'}`).replace(/^ra_/, '');
297
+ const _error = I18n.t(`jc_${data_.error || data.error || 'Unknown error'}`).replace(/^jc_/, '');
298
298
  return this.setState({
299
299
  _error,
300
300
  licenseOfflineCheck: false,
@@ -322,7 +322,7 @@ class ConfigCheckLicense extends ConfigGeneric {
322
322
  validTill !== '0000-00-00 00:00:00' &&
323
323
  new Date(validTill).getTime() < Date.now()) {
324
324
  return this.setState({
325
- _error: I18n.t('ra_License expired on %s', new Date(validTill).toLocaleString()),
325
+ _error: I18n.t('jc_License expired on %s', new Date(validTill).toLocaleString()),
326
326
  licenseOfflineCheck: false,
327
327
  showLicenseData,
328
328
  result: false,
@@ -334,7 +334,7 @@ class ConfigCheckLicense extends ConfigGeneric {
334
334
  // check UUID
335
335
  if (uuid && !data.uuid && adapterName === 'vis-2') {
336
336
  return this.setState({
337
- _error: I18n.t('ra_License must be converted', data.uuid),
337
+ _error: I18n.t('jc_License must be converted', data.uuid),
338
338
  showLinkToProfile: true,
339
339
  licenseOfflineCheck: false,
340
340
  showLicenseData,
@@ -344,7 +344,7 @@ class ConfigCheckLicense extends ConfigGeneric {
344
344
  }
345
345
  if (uuid && data.uuid && data.uuid !== uuid) {
346
346
  return this.setState({
347
- _error: I18n.t('ra_Serial number (UUID) "%s" in license is for other device.', data.uuid),
347
+ _error: I18n.t('jc_Serial number (UUID) "%s" in license is for other device.', data.uuid),
348
348
  licenseOfflineCheck: false,
349
349
  showLicenseData,
350
350
  result: false,
@@ -353,7 +353,7 @@ class ConfigCheckLicense extends ConfigGeneric {
353
353
  }
354
354
  if (!ConfigCheckLicense.isVersionValid(version, data.version, data.invoice, adapterName)) {
355
355
  return this.setState({
356
- _error: I18n.t('ra_License is for version %s, but required version is %s', data.version, this.props.schema.version),
356
+ _error: I18n.t('jc_License is for version %s, but required version is %s', data.version, this.props.schema.version),
357
357
  licenseOfflineCheck: false,
358
358
  showLicenseData,
359
359
  result: false,
@@ -368,19 +368,19 @@ class ConfigCheckLicense extends ConfigGeneric {
368
368
  });
369
369
  }
370
370
  return this.setState({
371
- _error: I18n.t('ra_License for other product "%s"', data.name),
371
+ _error: I18n.t('jc_License for other product "%s"', data.name),
372
372
  licenseOfflineCheck: false,
373
373
  showLicenseData,
374
374
  result: false,
375
375
  running: false,
376
376
  });
377
377
  }
378
- throw new Error('ra_Invalid answer from server');
378
+ throw new Error('jc_Invalid answer from server');
379
379
  }
380
380
  }
381
381
  catch (error) {
382
382
  if (error?.response?.status === 404) {
383
- return this.setState({ _error: I18n.t('ra_License does not exist'), result: false, running: false });
383
+ return this.setState({ _error: I18n.t('jc_License does not exist'), result: false, running: false });
384
384
  }
385
385
  // check offline
386
386
  try {
@@ -390,7 +390,7 @@ class ConfigCheckLicense extends ConfigGeneric {
390
390
  data.valid_till !== '0000-00-00 00:00:00' &&
391
391
  new Date(data.valid_till).getTime() < Date.now()) {
392
392
  return this.setState({
393
- _error: I18n.t('ra_License expired on %s', new Date(data.valid_till).toLocaleString()),
393
+ _error: I18n.t('jc_License expired on %s', new Date(data.valid_till).toLocaleString()),
394
394
  showLicenseData: data,
395
395
  licenseOfflineCheck: true,
396
396
  running: false,
@@ -401,7 +401,7 @@ class ConfigCheckLicense extends ConfigGeneric {
401
401
  // check UUID
402
402
  if (uuid && data.uuid && data.uuid !== uuid) {
403
403
  return this.setState({
404
- _error: I18n.t('ra_Serial number (UUID) "%s" in license is for other device.', data.uuid),
404
+ _error: I18n.t('jc_Serial number (UUID) "%s" in license is for other device.', data.uuid),
405
405
  showLicenseData: data,
406
406
  licenseOfflineCheck: true,
407
407
  result: false,
@@ -410,7 +410,7 @@ class ConfigCheckLicense extends ConfigGeneric {
410
410
  }
411
411
  if (!ConfigCheckLicense.isVersionValid(version, data.version, data.invoice, adapterName)) {
412
412
  return this.setState({
413
- _error: I18n.t('ra_License is for version %s, but required version is %s', data.version, this.props.schema.version),
413
+ _error: I18n.t('jc_License is for version %s, but required version is %s', data.version, this.props.schema.version),
414
414
  licenseOfflineCheck: true,
415
415
  showLicenseData: data,
416
416
  result: false,
@@ -425,7 +425,7 @@ class ConfigCheckLicense extends ConfigGeneric {
425
425
  });
426
426
  }
427
427
  return this.setState({
428
- _error: I18n.t('ra_License for other product "%s"', data.name),
428
+ _error: I18n.t('jc_License for other product "%s"', data.name),
429
429
  licenseOfflineCheck: true,
430
430
  showLicenseData: data,
431
431
  result: false,
@@ -434,7 +434,7 @@ class ConfigCheckLicense extends ConfigGeneric {
434
434
  }
435
435
  catch {
436
436
  return this.setState({
437
- _error: I18n.t('ra_Cannot decode license'),
437
+ _error: I18n.t('jc_Cannot decode license'),
438
438
  result: false,
439
439
  licenseOfflineCheck: true,
440
440
  running: false,
@@ -446,7 +446,7 @@ class ConfigCheckLicense extends ConfigGeneric {
446
446
  if (!this.state.askForUpdate) {
447
447
  return null;
448
448
  }
449
- return (React.createElement(DialogConfirm, { text: I18n.t('ra_License not found in license manager. Do you want to read licenses from iobroker.net?'), ok: I18n.t('ra_Yes'), onClose: async (isYes) => {
449
+ return (React.createElement(DialogConfirm, { text: I18n.t('jc_License not found in license manager. Do you want to read licenses from iobroker.net?'), ok: I18n.t('jc_Yes'), onClose: async (isYes) => {
450
450
  if (isYes) {
451
451
  this.setState({ askForUpdate: false });
452
452
  try {
@@ -454,7 +454,7 @@ class ConfigCheckLicense extends ConfigGeneric {
454
454
  await this.props.oContext.socket.updateLicenses(null, null);
455
455
  }
456
456
  catch (e) {
457
- window.alert(I18n.t('ra_Cannot read licenses: %s', e));
457
+ window.alert(I18n.t('jc_Cannot read licenses: %s', e));
458
458
  return;
459
459
  }
460
460
  await this._onClick(true);
@@ -490,7 +490,7 @@ class ConfigCheckLicense extends ConfigGeneric {
490
490
  }
491
491
  else if (this.props.data.useLicenseManager) {
492
492
  this.setState({
493
- _error: I18n.t('ra_Suitable license not found in license manager'),
493
+ _error: I18n.t('jc_Suitable license not found in license manager'),
494
494
  result: false,
495
495
  running: false,
496
496
  allLicenses: licenses,
@@ -499,7 +499,7 @@ class ConfigCheckLicense extends ConfigGeneric {
499
499
  else {
500
500
  // this case could not happen
501
501
  this.setState({
502
- _error: I18n.t('ra_Please enter the license'),
502
+ _error: I18n.t('jc_Please enter the license'),
503
503
  result: false,
504
504
  running: false,
505
505
  });
@@ -509,7 +509,7 @@ class ConfigCheckLicense extends ConfigGeneric {
509
509
  return (React.createElement("div", { style: styles.fullWidth },
510
510
  React.createElement(Button, { variant: this.props.schema.variant || 'outlined', color: this.props.schema.color || 'primary', style: styles.fullWidth, disabled: (!this.props.data.license && !this.props.data.useLicenseManager) || this.state.running, startIcon: React.createElement(IconSend, null), onClick: () => this._onClick() },
511
511
  this.state.running ? (React.createElement(CircularProgress, { size: 20, style: { marginRight: 8 } })) : null,
512
- this.getText(this.props.schema.label || 'ra_Check license', this.props.schema.noTranslation)),
512
+ this.getText(this.props.schema.label || 'jc_Check license', this.props.schema.noTranslation)),
513
513
  this.renderMessageDialog(),
514
514
  this.renderErrorDialog(),
515
515
  this.renderAskForUpdate()));
@@ -1 +1 @@
1
- {"version":3,"file":"ConfigCheckLicense.js","sourceRoot":"./src/","sources":["JsonConfigComponent/ConfigCheckLicense.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { type JSX } from 'react';\n\nimport {\n Button,\n CircularProgress,\n Dialog,\n DialogContent,\n DialogActions,\n DialogTitle,\n Table,\n TableHead,\n TableCell,\n TableRow,\n TableBody,\n DialogContentText,\n TableContainer,\n Box,\n} from '@mui/material';\n\nimport { Check as IconCheck, Send as IconSend } from '@mui/icons-material';\n\nimport { DialogConfirm, I18n, type IobTheme } from '@iobroker/adapter-react-v5';\n\nimport type { ConfigItemCheckLicense } from '../types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\nconst styles: Record<string, any> = {\n fullWidth: {\n width: '100%',\n },\n icon: {\n width: 24,\n height: 24,\n marginRight: 4,\n },\n licLabel: {\n fontWeight: 'bold',\n minWidth: 100,\n marginRight: 10,\n textTransform: 'capitalize',\n display: 'inline-block',\n },\n licValue: {\n fontWeight: 'normal',\n },\n errorTitle: (theme: IobTheme): React.CSSProperties => ({\n color: theme.palette.mode === 'dark' ? '#e39191' : '#b62020',\n }),\n okTitle: (theme: IobTheme): React.CSSProperties => ({\n color: theme.palette.mode === 'dark' ? '#6fd56f' : '#007c00',\n }),\n errorText: (theme: IobTheme): any => ({\n color: theme.palette.mode === 'dark' ? '#e39191' : '#b62020',\n mb: '30px',\n }),\n};\n\nexport interface License {\n id: string;\n product: string;\n time: number;\n uuid: string;\n validTill: string;\n version: string;\n usedBy: string;\n invoice: string;\n json: string;\n}\n\ninterface LicenseResult {\n id: string;\n validName: boolean;\n validUuid: boolean;\n validVersion: boolean;\n validTill: boolean;\n license: License;\n used?: boolean;\n}\n\ninterface ConfigCheckLicenseProps extends ConfigGenericProps {\n schema: ConfigItemCheckLicense;\n fullWidth?: boolean;\n}\n\ninterface ConfigCheckLicenseState extends ConfigGenericState {\n showLicenseData: null | Record<string, any>;\n _error: string;\n result: null | boolean;\n running: boolean;\n foundSuitableLicense: boolean;\n licenseOfflineCheck: boolean;\n showLinkToProfile: boolean;\n allLicenses: null | LicenseResult[];\n askForUpdate: boolean;\n}\n\nclass ConfigCheckLicense extends ConfigGeneric<ConfigCheckLicenseProps, ConfigCheckLicenseState> {\n async componentDidMount(): Promise<void> {\n await super.componentDidMount();\n this.setState({\n _error: '',\n running: false,\n showLicenseData: null,\n foundSuitableLicense: false,\n licenseOfflineCheck: false,\n result: null,\n allLicenses: null,\n askForUpdate: false,\n showLinkToProfile: false,\n });\n }\n\n renderErrorDialog(): JSX.Element | null {\n if (this.state._error && !this.state.showLicenseData) {\n let content: string | JSX.Element[] = this.state._error;\n if (this.state.allLicenses) {\n content = [<div key=\"error\">{content}</div>];\n content.push(\n <Button\n key=\"button\"\n variant=\"contained\"\n onClick={() => window.open('https://iobroker.net/www/account/licenses', '_blank')}\n >\n {I18n.t('iobroker.net')}\n </Button>,\n );\n if (!this.state.allLicenses.length) {\n content.push(<div key=\"text1\">{I18n.t('ra_No one license found in license manager')}</div>);\n content.push(<div key=\"text2\">{I18n.t('ra_Please create license')}</div>);\n } else {\n // license.id,\n // validName,\n // validUuid,\n // validTill,\n // validVersion,\n // license,\n content.push(\n <TableContainer key=\"table\">\n <Table size=\"small\">\n <TableHead>\n <TableRow>\n <TableCell>{I18n.t('ra_Product')}</TableCell>\n <TableCell>{I18n.t('ra_Version')}</TableCell>\n <TableCell>UUID</TableCell>\n <TableCell>{I18n.t('ra_ValidTill')}</TableCell>\n <TableCell>{I18n.t('ra_Commercial')}</TableCell>\n <TableCell>ID</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {this.state.allLicenses.map(license => (\n <TableRow key={license.id}>\n <TableCell sx={license.validName ? null : styles.errorText}>\n {license.license.product}\n </TableCell>\n <TableCell sx={license.validVersion ? null : styles.errorText}>\n {license.license.version}\n </TableCell>\n <TableCell sx={license.validUuid ? null : styles.errorText}>\n {license.license.uuid || '--'}\n </TableCell>\n <TableCell sx={license.validTill ? null : styles.errorText}>\n {license.license.validTill &&\n license.license.validTill !== '0000-00-00 00:00:00'\n ? new Date(license.license.validTill).toLocaleDateString()\n : '--'}\n </TableCell>\n <TableCell>\n {license.license.invoice !== 'free'\n ? license.license.invoice === 'MANUALLY_CREATED'\n ? '✓'\n : license.license.invoice\n : '-'}\n </TableCell>\n <TableCell>{license.id}</TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </TableContainer>,\n );\n }\n }\n\n return (\n <Dialog\n open={!0}\n maxWidth=\"xl\"\n fullWidth={this.props.fullWidth !== undefined ? this.props.fullWidth : true}\n onClick={() => this.setState({ _error: '', allLicenses: null })}\n >\n <DialogTitle>{I18n.t('ra_Error')}</DialogTitle>\n <DialogContent>\n <DialogContentText>{content}</DialogContentText>\n </DialogContent>\n <DialogActions>\n <Button\n variant=\"contained\"\n onClick={() => this.setState({ _error: '', allLicenses: null })}\n color=\"primary\"\n autoFocus\n startIcon={<IconCheck />}\n >\n {I18n.t('ra_Ok')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n\n return null;\n }\n\n renderMessageDialog(): JSX.Element | null {\n if (this.state.showLicenseData) {\n const pre = [];\n const data = this.state.showLicenseData;\n Object.keys(data).forEach(key => {\n if (data[key] === null || data[key] === undefined) {\n return;\n }\n if (typeof data[key] === 'object') {\n const obj = data[key];\n Object.keys(obj).forEach(key1 => {\n if (obj[key1] !== null && obj[key1] !== undefined) {\n if (typeof obj[key1] === 'object') {\n pre.push(\n <div key={key1}>\n <div style={styles.licLabel}>{key1}:</div>\n {JSON.stringify(obj[key1], null, 2)}\n </div>,\n );\n } else {\n pre.push(\n <div key={key1}>\n <div style={styles.licLabel}>\n {key} -{key1}:\n </div>\n {obj[key1].toString()}\n </div>,\n );\n }\n }\n });\n } else {\n pre.push(\n <div key={key}>\n <div style={styles.licLabel}>{key.replace(/_/g, ' ')}:</div>\n {data[key].toString()}\n </div>,\n );\n }\n });\n pre.push(\n <div key=\"checked\">\n <div style={styles.licLabel}>{I18n.t('ra_Checked')}:</div>\n {this.state.licenseOfflineCheck ? I18n.t('ra_locally') : I18n.t('ra_via internet')}\n </div>,\n );\n\n return (\n <Dialog\n open={!0}\n onClose={() => this.setState({ showLicenseData: null })}\n >\n <DialogTitle>\n <Box\n component=\"span\"\n sx={this.state.result ? styles.okTitle : styles.errorTitle}\n >\n {I18n.t('ra_License %s', this.state.result ? 'OK' : 'INVALID')}\n </Box>\n </DialogTitle>\n <DialogContent>\n {this.state.showLinkToProfile ? (\n <Button\n variant=\"contained\"\n onClick={() => window.open('https://iobroker.net/www/account/licenses', '_blank')}\n >\n https://iobroker.net\n </Button>\n ) : null}\n {this.state._error ? (\n <Box\n component=\"div\"\n sx={styles.errorText}\n >\n {this.state._error}\n </Box>\n ) : null}\n {pre}\n </DialogContent>\n <DialogActions>\n <Button\n onClick={() => this.setState({ showLicenseData: null, _error: '' })}\n color=\"primary\"\n variant=\"contained\"\n >\n {I18n.t('ra_Close')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n return null;\n }\n\n static parseJwt(token: string): {\n exp: number;\n iat: number;\n name: string;\n email: string;\n uuid: string;\n version: string;\n invoice: string;\n /** @deprecated use validTill */\n valid_till: string;\n validTill: string;\n [key: string]: string | number;\n } | null {\n const base64Url = token.split('.')[1];\n const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');\n const jsonPayload = decodeURIComponent(\n atob(base64)\n .split('')\n .map(c => `%${`00${c.charCodeAt(0).toString(16)}`.slice(-2)}`)\n .join(''),\n );\n try {\n return JSON.parse(jsonPayload);\n } catch {\n return null;\n }\n }\n\n static isVersionValid(version: string, rule: string, invoice: string, adapterName: string): boolean {\n if (!rule || !version) {\n return true;\n }\n let result = true;\n const [major] = version.split('.');\n if (rule.startsWith('>=')) {\n result = parseInt(major, 10) >= parseInt(rule.substring(2, 10));\n } else if (rule.startsWith('<=')) {\n result = parseInt(major, 10) <= parseInt(rule.substring(2, 10));\n } else if (rule.startsWith('>')) {\n result = parseInt(major, 10) > parseInt(rule.substring(1, 10));\n } else if (rule.startsWith('<')) {\n result = parseInt(major, 10) < parseInt(rule.substring(1, 10));\n } else if (rule.startsWith('=')) {\n result = parseInt(major, 10) === parseInt(rule.substring(1, 10));\n } else if (rule.startsWith('==')) {\n result = parseInt(major, 10) === parseInt(rule.substring(2, 10));\n } else if (rule.startsWith('===')) {\n result = parseInt(major, 10) === parseInt(rule.substring(3, 10));\n }\n\n if (!result && invoice && adapterName) {\n // all commercial licenses are valid for all versions\n if (invoice !== 'free') {\n return true;\n }\n }\n\n return true;\n }\n\n async findInLicenseManager(adapterName: string): Promise<LicenseResult[]> {\n // read if the license manager is supported\n const licenses = await this.getCachedObject('system.licenses');\n const errors: LicenseResult[] = [];\n if (licenses?.native?.licenses?.length) {\n // enable license manager\n let useLicense: License | null = null;\n const now = Date.now();\n\n let uuid: string;\n if (this.props.schema.uuid) {\n const uuidObj = await this.getCachedObject('system.meta.uuid');\n uuid = uuidObj?.native?.uuid;\n }\n let version: string;\n if (this.props.schema.version) {\n const aObj = await this.getCachedObject(`system.adapter.${adapterName}`);\n version = aObj?.common?.version;\n }\n\n // find license for vis\n licenses.native.licenses.forEach((license: License) => {\n const validTill =\n !license.validTill ||\n license.validTill === '0000-00-00 00:00:00' ||\n new Date(license.validTill).getTime() > now;\n const parts = (license.product || '').split('.');\n const validName = parts[1] === adapterName || (adapterName === 'vis-2' && parts[1] === 'vis');\n const validUuid = !uuid || !license.uuid || license.uuid === uuid;\n const validVersion = ConfigCheckLicense.isVersionValid(\n version,\n license.version,\n license.invoice,\n adapterName,\n );\n // commercial license has priority over free license\n if (\n (!useLicense || license.invoice !== 'free') &&\n validTill &&\n validName &&\n validUuid &&\n validVersion\n ) {\n useLicense = license;\n }\n errors.push({\n id: license.id,\n validName,\n validUuid,\n validVersion,\n validTill,\n license,\n });\n });\n\n if (useLicense) {\n errors.find(e => e.id === useLicense.id).used = true;\n }\n }\n\n return errors;\n }\n\n async checkLicense(license: string, adapterName: string): Promise<void> {\n let uuid;\n if (this.props.schema.uuid) {\n const uuidObj = await this.getCachedObject('system.meta.uuid');\n uuid = uuidObj?.native?.uuid;\n }\n let version;\n if (this.props.schema.version) {\n const aObj = await this.getCachedObject(`system.adapter.${adapterName}`);\n version = aObj?.common?.version;\n }\n\n const controller = new AbortController();\n let timeout = setTimeout(() => {\n timeout = null;\n controller.abort();\n }, 5000);\n\n try {\n const response = await window.fetch('https://iobroker.net/api/v1/public/cert/', {\n method: 'POST',\n body: JSON.stringify({ json: license, uuid }),\n headers: {\n 'Content-Type': 'text/plain',\n },\n signal: controller.signal,\n });\n if (timeout) {\n clearTimeout(timeout);\n }\n const dataStr = await response.text();\n let data: {\n error?: string;\n validTill?: string;\n /** @deprecated use validTill */\n valid_till?: string;\n name?: string;\n version?: string;\n uuid?: string;\n invoice?: string;\n };\n try {\n data = JSON.parse(dataStr);\n } catch {\n // ignore\n }\n\n if (data?.error) {\n try {\n const data_ = ConfigCheckLicense.parseJwt(license);\n const _error = I18n.t(`ra_${data_.error || data.error || 'Unknown error'}`).replace(/^ra_/, '');\n\n return this.setState({\n _error,\n licenseOfflineCheck: false,\n showLicenseData: data_,\n result: false,\n running: false,\n });\n } catch {\n console.log('Cannot parse license');\n return this.setState({ _error: data.error, result: false, running: false });\n }\n } else {\n let showLicenseData = null;\n try {\n showLicenseData = ConfigCheckLicense.parseJwt(license);\n } catch {\n // ignore\n }\n if (data) {\n const validTill = data.validTill || data.valid_till;\n if (\n validTill &&\n validTill !== '0000-00-00 00:00:00' &&\n new Date(validTill).getTime() < Date.now()\n ) {\n return this.setState({\n _error: I18n.t('ra_License expired on %s', new Date(validTill).toLocaleString()),\n licenseOfflineCheck: false,\n showLicenseData,\n result: false,\n running: false,\n });\n }\n const parts = (data.name || '').split('.');\n if (parts[1] === adapterName || (parts[1] === 'vis' && adapterName === 'vis-2')) {\n // check UUID\n if (uuid && !data.uuid && adapterName === 'vis-2') {\n return this.setState({\n _error: I18n.t('ra_License must be converted', data.uuid),\n showLinkToProfile: true,\n licenseOfflineCheck: false,\n showLicenseData,\n result: false,\n running: false,\n });\n }\n\n if (uuid && data.uuid && data.uuid !== uuid) {\n return this.setState({\n _error: I18n.t(\n 'ra_Serial number (UUID) \"%s\" in license is for other device.',\n data.uuid,\n ),\n licenseOfflineCheck: false,\n showLicenseData,\n result: false,\n running: false,\n });\n }\n\n if (!ConfigCheckLicense.isVersionValid(version, data.version, data.invoice, adapterName)) {\n return this.setState({\n _error: I18n.t(\n 'ra_License is for version %s, but required version is %s',\n data.version,\n this.props.schema.version,\n ),\n licenseOfflineCheck: false,\n showLicenseData,\n result: false,\n running: false,\n });\n }\n\n return this.setState({\n licenseOfflineCheck: false,\n showLicenseData,\n result: true,\n running: false,\n });\n }\n return this.setState({\n _error: I18n.t('ra_License for other product \"%s\"', data.name),\n licenseOfflineCheck: false,\n showLicenseData,\n result: false,\n running: false,\n });\n }\n throw new Error('ra_Invalid answer from server');\n }\n } catch (error) {\n if (error?.response?.status === 404) {\n return this.setState({ _error: I18n.t('ra_License does not exist'), result: false, running: false });\n }\n // check offline\n try {\n const data = ConfigCheckLicense.parseJwt(license);\n const parts = (data.name || '').split('.');\n\n if (\n data.valid_till &&\n data.valid_till !== '0000-00-00 00:00:00' &&\n new Date(data.valid_till).getTime() < Date.now()\n ) {\n return this.setState({\n _error: I18n.t('ra_License expired on %s', new Date(data.valid_till).toLocaleString()),\n showLicenseData: data,\n licenseOfflineCheck: true,\n running: false,\n result: false,\n });\n }\n if (parts[1] === adapterName) {\n // check UUID\n if (uuid && data.uuid && data.uuid !== uuid) {\n return this.setState({\n _error: I18n.t('ra_Serial number (UUID) \"%s\" in license is for other device.', data.uuid),\n showLicenseData: data,\n licenseOfflineCheck: true,\n result: false,\n running: false,\n });\n }\n\n if (!ConfigCheckLicense.isVersionValid(version, data.version, data.invoice, adapterName)) {\n return this.setState({\n _error: I18n.t(\n 'ra_License is for version %s, but required version is %s',\n data.version,\n this.props.schema.version,\n ),\n licenseOfflineCheck: true,\n showLicenseData: data,\n result: false,\n running: false,\n });\n }\n\n return this.setState({\n running: false,\n result: true,\n licenseOfflineCheck: true,\n showLicenseData: data,\n });\n }\n return this.setState({\n _error: I18n.t('ra_License for other product \"%s\"', data.name),\n licenseOfflineCheck: true,\n showLicenseData: data,\n result: false,\n running: false,\n });\n } catch {\n return this.setState({\n _error: I18n.t('ra_Cannot decode license'),\n result: false,\n licenseOfflineCheck: true,\n running: false,\n });\n }\n }\n }\n\n renderAskForUpdate(): JSX.Element | null {\n if (!this.state.askForUpdate) {\n return null;\n }\n return (\n <DialogConfirm\n text={I18n.t(\n 'ra_License not found in license manager. Do you want to read licenses from iobroker.net?',\n )}\n ok={I18n.t('ra_Yes')}\n onClose={async isYes => {\n if (isYes) {\n this.setState({ askForUpdate: false });\n try {\n // updateLicense is available only in AdminConnection\n await this.props.oContext.socket.updateLicenses(null, null);\n } catch (e) {\n window.alert(I18n.t('ra_Cannot read licenses: %s', e));\n return;\n }\n await this._onClick(true);\n } else {\n this.setState({ askForUpdate: false, running: false });\n }\n }}\n />\n );\n }\n\n async _onClick(secondRun?: boolean): Promise<void> {\n const adapterName = this.props.oContext.adapterName === 'vis-2' ? 'vis' : this.props.oContext.adapterName;\n this.setState({ running: true });\n let license;\n let licenses;\n if (this.props.data.useLicenseManager) {\n licenses = await this.findInLicenseManager(adapterName);\n license = licenses.find(li => li.used);\n if (license) {\n license = license.license.json;\n }\n if (!license && !secondRun) {\n // no suitable license found in the license manager\n // should we read all licenses again?\n this.setState({ askForUpdate: true });\n return;\n }\n } else {\n license = this.props.data.license;\n }\n if (license) {\n await this.checkLicense(license, adapterName);\n } else if (this.props.data.useLicenseManager) {\n this.setState({\n _error: I18n.t('ra_Suitable license not found in license manager'),\n result: false,\n running: false,\n allLicenses: licenses,\n });\n } else {\n // this case could not happen\n this.setState({\n _error: I18n.t('ra_Please enter the license'),\n result: false,\n running: false,\n });\n }\n }\n\n renderItem(/* error, disabled, defaultValue */): JSX.Element {\n return (\n <div style={styles.fullWidth}>\n <Button\n variant={this.props.schema.variant || 'outlined'}\n color={this.props.schema.color || 'primary'}\n style={styles.fullWidth}\n disabled={(!this.props.data.license && !this.props.data.useLicenseManager) || this.state.running}\n startIcon={<IconSend />}\n onClick={() => this._onClick()}\n >\n {this.state.running ? (\n <CircularProgress\n size={20}\n style={{ marginRight: 8 }}\n />\n ) : null}\n {this.getText(this.props.schema.label || 'ra_Check license', this.props.schema.noTranslation)}\n </Button>\n {this.renderMessageDialog()}\n {this.renderErrorDialog()}\n {this.renderAskForUpdate()}\n </div>\n );\n }\n}\n\nexport default ConfigCheckLicense;\n"]}
1
+ {"version":3,"file":"ConfigCheckLicense.js","sourceRoot":"./src/","sources":["JsonConfigComponent/ConfigCheckLicense.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { type JSX } from 'react';\n\nimport {\n Button,\n CircularProgress,\n Dialog,\n DialogContent,\n DialogActions,\n DialogTitle,\n Table,\n TableHead,\n TableCell,\n TableRow,\n TableBody,\n DialogContentText,\n TableContainer,\n Box,\n} from '@mui/material';\n\nimport { Check as IconCheck, Send as IconSend } from '@mui/icons-material';\n\nimport { DialogConfirm, I18n, type IobTheme } from '@iobroker/adapter-react-v5';\n\nimport type { ConfigItemCheckLicense } from '../types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\nconst styles: Record<string, any> = {\n fullWidth: {\n width: '100%',\n },\n icon: {\n width: 24,\n height: 24,\n marginRight: 4,\n },\n licLabel: {\n fontWeight: 'bold',\n minWidth: 100,\n marginRight: 10,\n textTransform: 'capitalize',\n display: 'inline-block',\n },\n licValue: {\n fontWeight: 'normal',\n },\n errorTitle: (theme: IobTheme): React.CSSProperties => ({\n color: theme.palette.mode === 'dark' ? '#e39191' : '#b62020',\n }),\n okTitle: (theme: IobTheme): React.CSSProperties => ({\n color: theme.palette.mode === 'dark' ? '#6fd56f' : '#007c00',\n }),\n errorText: (theme: IobTheme): any => ({\n color: theme.palette.mode === 'dark' ? '#e39191' : '#b62020',\n mb: '30px',\n }),\n};\n\nexport interface License {\n id: string;\n product: string;\n time: number;\n uuid: string;\n validTill: string;\n version: string;\n usedBy: string;\n invoice: string;\n json: string;\n}\n\ninterface LicenseResult {\n id: string;\n validName: boolean;\n validUuid: boolean;\n validVersion: boolean;\n validTill: boolean;\n license: License;\n used?: boolean;\n}\n\ninterface ConfigCheckLicenseProps extends ConfigGenericProps {\n schema: ConfigItemCheckLicense;\n fullWidth?: boolean;\n}\n\ninterface ConfigCheckLicenseState extends ConfigGenericState {\n showLicenseData: null | Record<string, any>;\n _error: string;\n result: null | boolean;\n running: boolean;\n foundSuitableLicense: boolean;\n licenseOfflineCheck: boolean;\n showLinkToProfile: boolean;\n allLicenses: null | LicenseResult[];\n askForUpdate: boolean;\n}\n\nclass ConfigCheckLicense extends ConfigGeneric<ConfigCheckLicenseProps, ConfigCheckLicenseState> {\n async componentDidMount(): Promise<void> {\n await super.componentDidMount();\n this.setState({\n _error: '',\n running: false,\n showLicenseData: null,\n foundSuitableLicense: false,\n licenseOfflineCheck: false,\n result: null,\n allLicenses: null,\n askForUpdate: false,\n showLinkToProfile: false,\n });\n }\n\n renderErrorDialog(): JSX.Element | null {\n if (this.state._error && !this.state.showLicenseData) {\n let content: string | JSX.Element[] = this.state._error;\n if (this.state.allLicenses) {\n content = [<div key=\"error\">{content}</div>];\n content.push(\n <Button\n key=\"button\"\n variant=\"contained\"\n onClick={() => window.open('https://iobroker.net/www/account/licenses', '_blank')}\n >\n iobroker.net\n </Button>,\n );\n if (!this.state.allLicenses.length) {\n content.push(<div key=\"text1\">{I18n.t('jc_No one license found in license manager')}</div>);\n content.push(<div key=\"text2\">{I18n.t('jc_Please create license')}</div>);\n } else {\n // license.id,\n // validName,\n // validUuid,\n // validTill,\n // validVersion,\n // license,\n content.push(\n <TableContainer key=\"table\">\n <Table size=\"small\">\n <TableHead>\n <TableRow>\n <TableCell>{I18n.t('jc_Product')}</TableCell>\n <TableCell>{I18n.t('jc_Version')}</TableCell>\n <TableCell>UUID</TableCell>\n <TableCell>{I18n.t('jc_ValidTill')}</TableCell>\n <TableCell>{I18n.t('jc_Commercial')}</TableCell>\n <TableCell>ID</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {this.state.allLicenses.map(license => (\n <TableRow key={license.id}>\n <TableCell sx={license.validName ? null : styles.errorText}>\n {license.license.product}\n </TableCell>\n <TableCell sx={license.validVersion ? null : styles.errorText}>\n {license.license.version}\n </TableCell>\n <TableCell sx={license.validUuid ? null : styles.errorText}>\n {license.license.uuid || '--'}\n </TableCell>\n <TableCell sx={license.validTill ? null : styles.errorText}>\n {license.license.validTill &&\n license.license.validTill !== '0000-00-00 00:00:00'\n ? new Date(license.license.validTill).toLocaleDateString()\n : '--'}\n </TableCell>\n <TableCell>\n {license.license.invoice !== 'free'\n ? license.license.invoice === 'MANUALLY_CREATED'\n ? '✓'\n : license.license.invoice\n : '-'}\n </TableCell>\n <TableCell>{license.id}</TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </TableContainer>,\n );\n }\n }\n\n return (\n <Dialog\n open={!0}\n maxWidth=\"xl\"\n fullWidth={this.props.fullWidth !== undefined ? this.props.fullWidth : true}\n onClick={() => this.setState({ _error: '', allLicenses: null })}\n >\n <DialogTitle>{I18n.t('jc_Error')}</DialogTitle>\n <DialogContent>\n <DialogContentText>{content}</DialogContentText>\n </DialogContent>\n <DialogActions>\n <Button\n variant=\"contained\"\n onClick={() => this.setState({ _error: '', allLicenses: null })}\n color=\"primary\"\n autoFocus\n startIcon={<IconCheck />}\n >\n {I18n.t('jc_Ok')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n\n return null;\n }\n\n renderMessageDialog(): JSX.Element | null {\n if (this.state.showLicenseData) {\n const pre = [];\n const data = this.state.showLicenseData;\n Object.keys(data).forEach(key => {\n if (data[key] === null || data[key] === undefined) {\n return;\n }\n if (typeof data[key] === 'object') {\n const obj = data[key];\n Object.keys(obj).forEach(key1 => {\n if (obj[key1] !== null && obj[key1] !== undefined) {\n if (typeof obj[key1] === 'object') {\n pre.push(\n <div key={key1}>\n <div style={styles.licLabel}>{key1}:</div>\n {JSON.stringify(obj[key1], null, 2)}\n </div>,\n );\n } else {\n pre.push(\n <div key={key1}>\n <div style={styles.licLabel}>\n {key} -{key1}:\n </div>\n {obj[key1].toString()}\n </div>,\n );\n }\n }\n });\n } else {\n pre.push(\n <div key={key}>\n <div style={styles.licLabel}>{key.replace(/_/g, ' ')}:</div>\n {data[key].toString()}\n </div>,\n );\n }\n });\n pre.push(\n <div key=\"checked\">\n <div style={styles.licLabel}>{I18n.t('jc_Checked')}:</div>\n {this.state.licenseOfflineCheck ? I18n.t('jc_locally') : I18n.t('jc_via internet')}\n </div>,\n );\n\n return (\n <Dialog\n open={!0}\n onClose={() => this.setState({ showLicenseData: null })}\n >\n <DialogTitle>\n <Box\n component=\"span\"\n sx={this.state.result ? styles.okTitle : styles.errorTitle}\n >\n {I18n.t('jc_License %s', this.state.result ? 'OK' : 'INVALID')}\n </Box>\n </DialogTitle>\n <DialogContent>\n {this.state.showLinkToProfile ? (\n <Button\n variant=\"contained\"\n onClick={() => window.open('https://iobroker.net/www/account/licenses', '_blank')}\n >\n https://iobroker.net\n </Button>\n ) : null}\n {this.state._error ? (\n <Box\n component=\"div\"\n sx={styles.errorText}\n >\n {this.state._error}\n </Box>\n ) : null}\n {pre}\n </DialogContent>\n <DialogActions>\n <Button\n onClick={() => this.setState({ showLicenseData: null, _error: '' })}\n color=\"primary\"\n variant=\"contained\"\n >\n {I18n.t('jc_Close')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n return null;\n }\n\n static parseJwt(token: string): {\n exp: number;\n iat: number;\n name: string;\n email: string;\n uuid: string;\n version: string;\n invoice: string;\n /** @deprecated use validTill */\n valid_till: string;\n validTill: string;\n [key: string]: string | number;\n } | null {\n const base64Url = token.split('.')[1];\n const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');\n const jsonPayload = decodeURIComponent(\n atob(base64)\n .split('')\n .map(c => `%${`00${c.charCodeAt(0).toString(16)}`.slice(-2)}`)\n .join(''),\n );\n try {\n return JSON.parse(jsonPayload);\n } catch {\n return null;\n }\n }\n\n static isVersionValid(version: string, rule: string, invoice: string, adapterName: string): boolean {\n if (!rule || !version) {\n return true;\n }\n let result = true;\n const [major] = version.split('.');\n if (rule.startsWith('>=')) {\n result = parseInt(major, 10) >= parseInt(rule.substring(2, 10));\n } else if (rule.startsWith('<=')) {\n result = parseInt(major, 10) <= parseInt(rule.substring(2, 10));\n } else if (rule.startsWith('>')) {\n result = parseInt(major, 10) > parseInt(rule.substring(1, 10));\n } else if (rule.startsWith('<')) {\n result = parseInt(major, 10) < parseInt(rule.substring(1, 10));\n } else if (rule.startsWith('=')) {\n result = parseInt(major, 10) === parseInt(rule.substring(1, 10));\n } else if (rule.startsWith('==')) {\n result = parseInt(major, 10) === parseInt(rule.substring(2, 10));\n } else if (rule.startsWith('===')) {\n result = parseInt(major, 10) === parseInt(rule.substring(3, 10));\n }\n\n if (!result && invoice && adapterName) {\n // all commercial licenses are valid for all versions\n if (invoice !== 'free') {\n return true;\n }\n }\n\n return true;\n }\n\n async findInLicenseManager(adapterName: string): Promise<LicenseResult[]> {\n // read if the license manager is supported\n const licenses = await this.getCachedObject('system.licenses');\n const errors: LicenseResult[] = [];\n if (licenses?.native?.licenses?.length) {\n // enable license manager\n let useLicense: License | null = null;\n const now = Date.now();\n\n let uuid: string;\n if (this.props.schema.uuid) {\n const uuidObj = await this.getCachedObject('system.meta.uuid');\n uuid = uuidObj?.native?.uuid;\n }\n let version: string;\n if (this.props.schema.version) {\n const aObj = await this.getCachedObject(`system.adapter.${adapterName}`);\n version = aObj?.common?.version;\n }\n\n // find license for vis\n licenses.native.licenses.forEach((license: License) => {\n const validTill =\n !license.validTill ||\n license.validTill === '0000-00-00 00:00:00' ||\n new Date(license.validTill).getTime() > now;\n const parts = (license.product || '').split('.');\n const validName = parts[1] === adapterName || (adapterName === 'vis-2' && parts[1] === 'vis');\n const validUuid = !uuid || !license.uuid || license.uuid === uuid;\n const validVersion = ConfigCheckLicense.isVersionValid(\n version,\n license.version,\n license.invoice,\n adapterName,\n );\n // commercial license has priority over free license\n if (\n (!useLicense || license.invoice !== 'free') &&\n validTill &&\n validName &&\n validUuid &&\n validVersion\n ) {\n useLicense = license;\n }\n errors.push({\n id: license.id,\n validName,\n validUuid,\n validVersion,\n validTill,\n license,\n });\n });\n\n if (useLicense) {\n errors.find(e => e.id === useLicense.id).used = true;\n }\n }\n\n return errors;\n }\n\n async checkLicense(license: string, adapterName: string): Promise<void> {\n let uuid;\n if (this.props.schema.uuid) {\n const uuidObj = await this.getCachedObject('system.meta.uuid');\n uuid = uuidObj?.native?.uuid;\n }\n let version;\n if (this.props.schema.version) {\n const aObj = await this.getCachedObject(`system.adapter.${adapterName}`);\n version = aObj?.common?.version;\n }\n\n const controller = new AbortController();\n let timeout = setTimeout(() => {\n timeout = null;\n controller.abort();\n }, 5000);\n\n try {\n const response = await window.fetch('https://iobroker.net/api/v1/public/cert/', {\n method: 'POST',\n body: JSON.stringify({ json: license, uuid }),\n headers: {\n 'Content-Type': 'text/plain',\n },\n signal: controller.signal,\n });\n if (timeout) {\n clearTimeout(timeout);\n }\n const dataStr = await response.text();\n let data: {\n error?: string;\n validTill?: string;\n /** @deprecated use validTill */\n valid_till?: string;\n name?: string;\n version?: string;\n uuid?: string;\n invoice?: string;\n };\n try {\n data = JSON.parse(dataStr);\n } catch {\n // ignore\n }\n\n if (data?.error) {\n try {\n const data_ = ConfigCheckLicense.parseJwt(license);\n const _error = I18n.t(`jc_${data_.error || data.error || 'Unknown error'}`).replace(/^jc_/, '');\n\n return this.setState({\n _error,\n licenseOfflineCheck: false,\n showLicenseData: data_,\n result: false,\n running: false,\n });\n } catch {\n console.log('Cannot parse license');\n return this.setState({ _error: data.error, result: false, running: false });\n }\n } else {\n let showLicenseData = null;\n try {\n showLicenseData = ConfigCheckLicense.parseJwt(license);\n } catch {\n // ignore\n }\n if (data) {\n const validTill = data.validTill || data.valid_till;\n if (\n validTill &&\n validTill !== '0000-00-00 00:00:00' &&\n new Date(validTill).getTime() < Date.now()\n ) {\n return this.setState({\n _error: I18n.t('jc_License expired on %s', new Date(validTill).toLocaleString()),\n licenseOfflineCheck: false,\n showLicenseData,\n result: false,\n running: false,\n });\n }\n const parts = (data.name || '').split('.');\n if (parts[1] === adapterName || (parts[1] === 'vis' && adapterName === 'vis-2')) {\n // check UUID\n if (uuid && !data.uuid && adapterName === 'vis-2') {\n return this.setState({\n _error: I18n.t('jc_License must be converted', data.uuid),\n showLinkToProfile: true,\n licenseOfflineCheck: false,\n showLicenseData,\n result: false,\n running: false,\n });\n }\n\n if (uuid && data.uuid && data.uuid !== uuid) {\n return this.setState({\n _error: I18n.t(\n 'jc_Serial number (UUID) \"%s\" in license is for other device.',\n data.uuid,\n ),\n licenseOfflineCheck: false,\n showLicenseData,\n result: false,\n running: false,\n });\n }\n\n if (!ConfigCheckLicense.isVersionValid(version, data.version, data.invoice, adapterName)) {\n return this.setState({\n _error: I18n.t(\n 'jc_License is for version %s, but required version is %s',\n data.version,\n this.props.schema.version,\n ),\n licenseOfflineCheck: false,\n showLicenseData,\n result: false,\n running: false,\n });\n }\n\n return this.setState({\n licenseOfflineCheck: false,\n showLicenseData,\n result: true,\n running: false,\n });\n }\n return this.setState({\n _error: I18n.t('jc_License for other product \"%s\"', data.name),\n licenseOfflineCheck: false,\n showLicenseData,\n result: false,\n running: false,\n });\n }\n throw new Error('jc_Invalid answer from server');\n }\n } catch (error) {\n if (error?.response?.status === 404) {\n return this.setState({ _error: I18n.t('jc_License does not exist'), result: false, running: false });\n }\n // check offline\n try {\n const data = ConfigCheckLicense.parseJwt(license);\n const parts = (data.name || '').split('.');\n\n if (\n data.valid_till &&\n data.valid_till !== '0000-00-00 00:00:00' &&\n new Date(data.valid_till).getTime() < Date.now()\n ) {\n return this.setState({\n _error: I18n.t('jc_License expired on %s', new Date(data.valid_till).toLocaleString()),\n showLicenseData: data,\n licenseOfflineCheck: true,\n running: false,\n result: false,\n });\n }\n if (parts[1] === adapterName) {\n // check UUID\n if (uuid && data.uuid && data.uuid !== uuid) {\n return this.setState({\n _error: I18n.t('jc_Serial number (UUID) \"%s\" in license is for other device.', data.uuid),\n showLicenseData: data,\n licenseOfflineCheck: true,\n result: false,\n running: false,\n });\n }\n\n if (!ConfigCheckLicense.isVersionValid(version, data.version, data.invoice, adapterName)) {\n return this.setState({\n _error: I18n.t(\n 'jc_License is for version %s, but required version is %s',\n data.version,\n this.props.schema.version,\n ),\n licenseOfflineCheck: true,\n showLicenseData: data,\n result: false,\n running: false,\n });\n }\n\n return this.setState({\n running: false,\n result: true,\n licenseOfflineCheck: true,\n showLicenseData: data,\n });\n }\n return this.setState({\n _error: I18n.t('jc_License for other product \"%s\"', data.name),\n licenseOfflineCheck: true,\n showLicenseData: data,\n result: false,\n running: false,\n });\n } catch {\n return this.setState({\n _error: I18n.t('jc_Cannot decode license'),\n result: false,\n licenseOfflineCheck: true,\n running: false,\n });\n }\n }\n }\n\n renderAskForUpdate(): JSX.Element | null {\n if (!this.state.askForUpdate) {\n return null;\n }\n return (\n <DialogConfirm\n text={I18n.t(\n 'jc_License not found in license manager. Do you want to read licenses from iobroker.net?',\n )}\n ok={I18n.t('jc_Yes')}\n onClose={async isYes => {\n if (isYes) {\n this.setState({ askForUpdate: false });\n try {\n // updateLicense is available only in AdminConnection\n await this.props.oContext.socket.updateLicenses(null, null);\n } catch (e) {\n window.alert(I18n.t('jc_Cannot read licenses: %s', e));\n return;\n }\n await this._onClick(true);\n } else {\n this.setState({ askForUpdate: false, running: false });\n }\n }}\n />\n );\n }\n\n async _onClick(secondRun?: boolean): Promise<void> {\n const adapterName = this.props.oContext.adapterName === 'vis-2' ? 'vis' : this.props.oContext.adapterName;\n this.setState({ running: true });\n let license;\n let licenses;\n if (this.props.data.useLicenseManager) {\n licenses = await this.findInLicenseManager(adapterName);\n license = licenses.find(li => li.used);\n if (license) {\n license = license.license.json;\n }\n if (!license && !secondRun) {\n // no suitable license found in the license manager\n // should we read all licenses again?\n this.setState({ askForUpdate: true });\n return;\n }\n } else {\n license = this.props.data.license;\n }\n if (license) {\n await this.checkLicense(license, adapterName);\n } else if (this.props.data.useLicenseManager) {\n this.setState({\n _error: I18n.t('jc_Suitable license not found in license manager'),\n result: false,\n running: false,\n allLicenses: licenses,\n });\n } else {\n // this case could not happen\n this.setState({\n _error: I18n.t('jc_Please enter the license'),\n result: false,\n running: false,\n });\n }\n }\n\n renderItem(/* error, disabled, defaultValue */): JSX.Element {\n return (\n <div style={styles.fullWidth}>\n <Button\n variant={this.props.schema.variant || 'outlined'}\n color={this.props.schema.color || 'primary'}\n style={styles.fullWidth}\n disabled={(!this.props.data.license && !this.props.data.useLicenseManager) || this.state.running}\n startIcon={<IconSend />}\n onClick={() => this._onClick()}\n >\n {this.state.running ? (\n <CircularProgress\n size={20}\n style={{ marginRight: 8 }}\n />\n ) : null}\n {this.getText(this.props.schema.label || 'jc_Check license', this.props.schema.noTranslation)}\n </Button>\n {this.renderMessageDialog()}\n {this.renderErrorDialog()}\n {this.renderAskForUpdate()}\n </div>\n );\n }\n}\n\nexport default ConfigCheckLicense;\n"]}
@@ -31,7 +31,7 @@ class ConfigCheckbox extends ConfigGeneric {
31
31
  React.createElement(FormHelperText, { style: { color: 'red' } }, error
32
32
  ? this.props.schema.validatorErrorText
33
33
  ? I18n.t(this.props.schema.validatorErrorText)
34
- : I18n.t('ra_Error')
34
+ : I18n.t('jc_Error')
35
35
  : null),
36
36
  this.props.schema.help ? (React.createElement(FormHelperText, null, this.renderHelp(this.props.schema.help, this.props.schema.helpLink, this.props.schema.noTranslation))) : null));
37
37
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ConfigCheckbox.js","sourceRoot":"./src/","sources":["JsonConfigComponent/ConfigCheckbox.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { type JSX } from 'react';\n\nimport { FormControlLabel, Checkbox, FormHelperText, FormControl } from '@mui/material';\n\nimport { I18n } from '@iobroker/adapter-react-v5';\n\nimport type { ConfigItemCheckbox } from '../types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\ninterface ConfigCheckboxProps extends ConfigGenericProps {\n schema: ConfigItemCheckbox;\n}\n\nclass ConfigCheckbox extends ConfigGeneric<ConfigCheckboxProps, ConfigGenericState> {\n renderItem(error: unknown, disabled: boolean): JSX.Element {\n const value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n const isIndeterminate = Array.isArray(value);\n\n return (\n <FormControl\n style={{ width: '100%' }}\n variant=\"standard\"\n >\n <FormControlLabel\n onClick={e => {\n e.preventDefault();\n e.stopPropagation();\n\n if (!disabled) {\n const mayByPromise = this.onChange(this.props.attr, !value);\n if (mayByPromise instanceof Promise) {\n void mayByPromise.catch(e => console.error(`Cannot set value: ${e}`));\n }\n }\n }}\n control={\n <Checkbox\n indeterminate={isIndeterminate}\n checked={!!value}\n onChange={e => {\n let mayBePromise: void | Promise<void>;\n if (isIndeterminate) {\n mayBePromise = this.onChange(this.props.attr, true);\n } else {\n mayBePromise = this.onChange(this.props.attr, e.target.checked);\n }\n if (mayBePromise instanceof Promise) {\n void mayBePromise.catch(e => console.error(`Cannot set value: ${e}`));\n }\n }}\n disabled={disabled || this.props.schema.readOnly}\n />\n }\n label={this.getText(this.props.schema.label)}\n />\n <FormHelperText style={{ color: 'red' }}>\n {error\n ? this.props.schema.validatorErrorText\n ? I18n.t(this.props.schema.validatorErrorText)\n : I18n.t('ra_Error')\n : null}\n </FormHelperText>\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 ConfigCheckbox;\n"]}
1
+ {"version":3,"file":"ConfigCheckbox.js","sourceRoot":"./src/","sources":["JsonConfigComponent/ConfigCheckbox.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { type JSX } from 'react';\n\nimport { FormControlLabel, Checkbox, FormHelperText, FormControl } from '@mui/material';\n\nimport { I18n } from '@iobroker/adapter-react-v5';\n\nimport type { ConfigItemCheckbox } from '../types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\ninterface ConfigCheckboxProps extends ConfigGenericProps {\n schema: ConfigItemCheckbox;\n}\n\nclass ConfigCheckbox extends ConfigGeneric<ConfigCheckboxProps, ConfigGenericState> {\n renderItem(error: unknown, disabled: boolean): JSX.Element {\n const value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n const isIndeterminate = Array.isArray(value);\n\n return (\n <FormControl\n style={{ width: '100%' }}\n variant=\"standard\"\n >\n <FormControlLabel\n onClick={e => {\n e.preventDefault();\n e.stopPropagation();\n\n if (!disabled) {\n const mayByPromise = this.onChange(this.props.attr, !value);\n if (mayByPromise instanceof Promise) {\n void mayByPromise.catch(e => console.error(`Cannot set value: ${e}`));\n }\n }\n }}\n control={\n <Checkbox\n indeterminate={isIndeterminate}\n checked={!!value}\n onChange={e => {\n let mayBePromise: void | Promise<void>;\n if (isIndeterminate) {\n mayBePromise = this.onChange(this.props.attr, true);\n } else {\n mayBePromise = this.onChange(this.props.attr, e.target.checked);\n }\n if (mayBePromise instanceof Promise) {\n void mayBePromise.catch(e => console.error(`Cannot set value: ${e}`));\n }\n }}\n disabled={disabled || this.props.schema.readOnly}\n />\n }\n label={this.getText(this.props.schema.label)}\n />\n <FormHelperText style={{ color: 'red' }}>\n {error\n ? this.props.schema.validatorErrorText\n ? I18n.t(this.props.schema.validatorErrorText)\n : I18n.t('jc_Error')\n : null}\n </FormHelperText>\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 ConfigCheckbox;\n"]}
@@ -54,7 +54,7 @@ class ConfigChip extends ConfigGeneric {
54
54
  }
55
55
  });
56
56
  } }),
57
- React.createElement(FormHelperText, null, I18n.t('ra_Press ENTER Key to add new item')),
57
+ React.createElement(FormHelperText, null, I18n.t('jc_Press ENTER Key to add new item')),
58
58
  this.props.schema.help ? (React.createElement(FormHelperText, null, this.renderHelp(this.props.schema.help, this.props.schema.helpLink, this.props.schema.noTranslation))) : null));
59
59
  }
60
60
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ConfigChip.js","sourceRoot":"./src/","sources":["JsonConfigComponent/ConfigChip.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { type JSX } from 'react';\n\nimport { FormHelperText, FormControl } from '@mui/material';\n\nimport type { ConfigItemChip } from '../types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\nimport ChipInput from './ChipInput';\nimport { I18n } from '@iobroker/adapter-react-v5';\n\ninterface ConfigChipProps extends ConfigGenericProps {\n schema: ConfigItemChip;\n}\n\nclass ConfigChip extends ConfigGeneric<ConfigChipProps, ConfigGenericState> {\n async componentDidMount(): Promise<void> {\n await super.componentDidMount();\n const { data, attr } = this.props;\n const value = ConfigGeneric.getValue(data, attr);\n if (this.props.schema.delimiter && typeof value === 'string') {\n const parts = value\n .split(this.props.schema.delimiter)\n .map(a => a.trim())\n .filter(a => a);\n this.setState({ value: parts });\n } else {\n this.setState({ value: value || [] });\n }\n }\n\n renderItem(error: string, disabled: boolean): JSX.Element | null {\n const { attr, schema } = this.props;\n const { value } = this.state;\n return (\n <FormControl\n fullWidth\n variant=\"standard\"\n >\n <ChipInput\n value={value}\n disabled={!!disabled}\n label={this.getText(schema.label)}\n error={!!error}\n onAdd={chip => {\n const newValue = JSON.parse(JSON.stringify(value));\n newValue.push(chip);\n this.setState({ value: newValue }, () => {\n let mayBePromise: void | Promise<void>;\n if (this.props.schema.delimiter) {\n mayBePromise = this.onChange(attr, newValue.join(`${this.props.schema.delimiter} `));\n } else {\n mayBePromise = this.onChange(attr, newValue);\n }\n if (mayBePromise instanceof Promise) {\n mayBePromise.catch(e => console.error(e));\n }\n });\n }}\n theme={this.props.oContext.theme}\n onDelete={(_chip, index) => {\n const newValue = JSON.parse(JSON.stringify(value));\n newValue.splice(index, 1);\n this.setState({ value: newValue }, () => {\n let mayBePromise: void | Promise<void>;\n if (this.props.schema.delimiter) {\n mayBePromise = this.onChange(attr, newValue.join(`${this.props.schema.delimiter} `));\n } else {\n mayBePromise = this.onChange(attr, newValue);\n }\n if (mayBePromise instanceof Promise) {\n mayBePromise.catch(e => console.error(e));\n }\n });\n }}\n />\n <FormHelperText>{I18n.t('ra_Press ENTER Key to add new item')}</FormHelperText>\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 ConfigChip;\n"]}
1
+ {"version":3,"file":"ConfigChip.js","sourceRoot":"./src/","sources":["JsonConfigComponent/ConfigChip.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAExC,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAG5D,OAAO,aAAmE,MAAM,iBAAiB,CAAC;AAClG,OAAO,SAAS,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,4BAA4B,CAAC;AAMlD,MAAM,UAAW,SAAQ,aAAkD;IACvE,KAAK,CAAC,iBAAiB;QACnB,MAAM,KAAK,CAAC,iBAAiB,EAAE,CAAC;QAChC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;QAClC,MAAM,KAAK,GAAG,aAAa,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACjD,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC3D,MAAM,KAAK,GAAG,KAAK;iBACd,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC;iBAClC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;iBAClB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACpB,IAAI,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QACpC,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,EAAE,CAAC,CAAC;QAC1C,CAAC;IACL,CAAC;IAED,UAAU,CAAC,KAAa,EAAE,QAAiB;QACvC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;QACpC,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;QAC7B,OAAO,CACH,oBAAC,WAAW,IACR,SAAS,QACT,OAAO,EAAC,UAAU;YAElB,oBAAC,SAAS,IACN,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,CAAC,CAAC,QAAQ,EACpB,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EACjC,KAAK,EAAE,CAAC,CAAC,KAAK,EACd,KAAK,EAAE,IAAI,CAAC,EAAE;oBACV,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;oBACnD,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACpB,IAAI,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,GAAG,EAAE;wBACpC,IAAI,YAAkC,CAAC;wBACvC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;4BAC9B,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;wBACzF,CAAC;6BAAM,CAAC;4BACJ,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;wBACjD,CAAC;wBACD,IAAI,YAAY,YAAY,OAAO,EAAE,CAAC;4BAClC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;wBAC9C,CAAC;oBACL,CAAC,CAAC,CAAC;gBACP,CAAC,EACD,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,EAChC,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;oBACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;oBACnD,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;oBAC1B,IAAI,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,GAAG,EAAE;wBACpC,IAAI,YAAkC,CAAC;wBACvC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;4BAC9B,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;wBACzF,CAAC;6BAAM,CAAC;4BACJ,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;wBACjD,CAAC;wBACD,IAAI,YAAY,YAAY,OAAO,EAAE,CAAC;4BAClC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;wBAC9C,CAAC;oBACL,CAAC,CAAC,CAAC;gBACP,CAAC,GACH;YACF,oBAAC,cAAc,QAAE,IAAI,CAAC,CAAC,CAAC,oCAAoC,CAAC,CAAkB;YAC9E,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CACtB,oBAAC,cAAc,QACV,IAAI,CAAC,UAAU,CACZ,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EACtB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,EAC1B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,CAClC,CACY,CACpB,CAAC,CAAC,CAAC,IAAI,CACE,CACjB,CAAC;IACN,CAAC;CACJ;AAED,eAAe,UAAU,CAAC","sourcesContent":["import React, { type JSX } from 'react';\n\nimport { FormHelperText, FormControl } from '@mui/material';\n\nimport type { ConfigItemChip } from '../types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\nimport ChipInput from './ChipInput';\nimport { I18n } from '@iobroker/adapter-react-v5';\n\ninterface ConfigChipProps extends ConfigGenericProps {\n schema: ConfigItemChip;\n}\n\nclass ConfigChip extends ConfigGeneric<ConfigChipProps, ConfigGenericState> {\n async componentDidMount(): Promise<void> {\n await super.componentDidMount();\n const { data, attr } = this.props;\n const value = ConfigGeneric.getValue(data, attr);\n if (this.props.schema.delimiter && typeof value === 'string') {\n const parts = value\n .split(this.props.schema.delimiter)\n .map(a => a.trim())\n .filter(a => a);\n this.setState({ value: parts });\n } else {\n this.setState({ value: value || [] });\n }\n }\n\n renderItem(error: string, disabled: boolean): JSX.Element | null {\n const { attr, schema } = this.props;\n const { value } = this.state;\n return (\n <FormControl\n fullWidth\n variant=\"standard\"\n >\n <ChipInput\n value={value}\n disabled={!!disabled}\n label={this.getText(schema.label)}\n error={!!error}\n onAdd={chip => {\n const newValue = JSON.parse(JSON.stringify(value));\n newValue.push(chip);\n this.setState({ value: newValue }, () => {\n let mayBePromise: void | Promise<void>;\n if (this.props.schema.delimiter) {\n mayBePromise = this.onChange(attr, newValue.join(`${this.props.schema.delimiter} `));\n } else {\n mayBePromise = this.onChange(attr, newValue);\n }\n if (mayBePromise instanceof Promise) {\n mayBePromise.catch(e => console.error(e));\n }\n });\n }}\n theme={this.props.oContext.theme}\n onDelete={(_chip, index) => {\n const newValue = JSON.parse(JSON.stringify(value));\n newValue.splice(index, 1);\n this.setState({ value: newValue }, () => {\n let mayBePromise: void | Promise<void>;\n if (this.props.schema.delimiter) {\n mayBePromise = this.onChange(attr, newValue.join(`${this.props.schema.delimiter} `));\n } else {\n mayBePromise = this.onChange(attr, newValue);\n }\n if (mayBePromise instanceof Promise) {\n mayBePromise.catch(e => console.error(e));\n }\n });\n }}\n />\n <FormHelperText>{I18n.t('jc_Press ENTER Key to add new item')}</FormHelperText>\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 ConfigChip;\n"]}