@iobroker/json-config 8.3.12 → 8.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -1
- package/build/JsonConfigComponent/ConfigAccordion.d.ts +2 -2
- package/build/JsonConfigComponent/ConfigAccordion.js +21 -19
- package/build/JsonConfigComponent/ConfigAccordion.js.map +1 -1
- package/build/JsonConfigComponent/ConfigAlive.d.ts +3 -1
- package/build/JsonConfigComponent/ConfigAlive.js +22 -10
- package/build/JsonConfigComponent/ConfigAlive.js.map +1 -1
- package/build/JsonConfigComponent/ConfigAutocomplete.d.ts +1 -1
- package/build/JsonConfigComponent/ConfigAutocomplete.js +2 -2
- package/build/JsonConfigComponent/ConfigAutocomplete.js.map +1 -1
- package/build/JsonConfigComponent/ConfigAutocompleteSendTo.d.ts +1 -1
- package/build/JsonConfigComponent/ConfigAutocompleteSendTo.js +3 -3
- package/build/JsonConfigComponent/ConfigAutocompleteSendTo.js.map +1 -1
- package/build/JsonConfigComponent/ConfigCRON.d.ts +1 -1
- package/build/JsonConfigComponent/ConfigCRON.js +2 -2
- package/build/JsonConfigComponent/ConfigCRON.js.map +1 -1
- package/build/JsonConfigComponent/ConfigCertCollection.js +2 -2
- package/build/JsonConfigComponent/ConfigCertCollection.js.map +1 -1
- package/build/JsonConfigComponent/ConfigCertificateSelect.js +1 -1
- package/build/JsonConfigComponent/ConfigCertificateSelect.js.map +1 -1
- package/build/JsonConfigComponent/ConfigCertificates.js +2 -2
- package/build/JsonConfigComponent/ConfigCertificates.js.map +1 -1
- package/build/JsonConfigComponent/ConfigCheckDocker.js +1 -1
- package/build/JsonConfigComponent/ConfigCheckDocker.js.map +1 -1
- package/build/JsonConfigComponent/ConfigCheckLicense.d.ts +1 -1
- package/build/JsonConfigComponent/ConfigCheckLicense.js +7 -7
- package/build/JsonConfigComponent/ConfigCheckLicense.js.map +1 -1
- package/build/JsonConfigComponent/ConfigChip.d.ts +1 -1
- package/build/JsonConfigComponent/ConfigChip.js +2 -2
- package/build/JsonConfigComponent/ConfigChip.js.map +1 -1
- package/build/JsonConfigComponent/ConfigCoordinates.d.ts +1 -1
- package/build/JsonConfigComponent/ConfigCoordinates.js +3 -3
- package/build/JsonConfigComponent/ConfigCoordinates.js.map +1 -1
- package/build/JsonConfigComponent/ConfigDatePicker.d.ts +1 -1
- package/build/JsonConfigComponent/ConfigDatePicker.js +2 -2
- package/build/JsonConfigComponent/ConfigDatePicker.js.map +1 -1
- package/build/JsonConfigComponent/ConfigFile.d.ts +1 -1
- package/build/JsonConfigComponent/ConfigFile.js +2 -2
- package/build/JsonConfigComponent/ConfigFile.js.map +1 -1
- package/build/JsonConfigComponent/ConfigFileSelector.d.ts +1 -1
- package/build/JsonConfigComponent/ConfigFileSelector.js +2 -2
- package/build/JsonConfigComponent/ConfigFileSelector.js.map +1 -1
- package/build/JsonConfigComponent/ConfigFunc.d.ts +1 -1
- package/build/JsonConfigComponent/ConfigFunc.js +2 -2
- package/build/JsonConfigComponent/ConfigFunc.js.map +1 -1
- package/build/JsonConfigComponent/ConfigGeneric.d.ts +22 -7
- package/build/JsonConfigComponent/ConfigGeneric.js +166 -52
- package/build/JsonConfigComponent/ConfigGeneric.js.map +1 -1
- package/build/JsonConfigComponent/ConfigIFrame.d.ts +1 -1
- package/build/JsonConfigComponent/ConfigIFrame.js +2 -2
- package/build/JsonConfigComponent/ConfigIFrame.js.map +1 -1
- package/build/JsonConfigComponent/ConfigIFrameSendTo.d.ts +2 -2
- package/build/JsonConfigComponent/ConfigIFrameSendTo.js +6 -6
- package/build/JsonConfigComponent/ConfigIFrameSendTo.js.map +1 -1
- package/build/JsonConfigComponent/ConfigIP.d.ts +1 -1
- package/build/JsonConfigComponent/ConfigIP.js +2 -2
- package/build/JsonConfigComponent/ConfigIP.js.map +1 -1
- package/build/JsonConfigComponent/ConfigImageSendTo.d.ts +2 -2
- package/build/JsonConfigComponent/ConfigImageSendTo.js +6 -6
- package/build/JsonConfigComponent/ConfigImageSendTo.js.map +1 -1
- package/build/JsonConfigComponent/ConfigImageUpload.d.ts +1 -1
- package/build/JsonConfigComponent/ConfigImageUpload.js +2 -2
- package/build/JsonConfigComponent/ConfigImageUpload.js.map +1 -1
- package/build/JsonConfigComponent/ConfigInstanceSelect.d.ts +1 -1
- package/build/JsonConfigComponent/ConfigInstanceSelect.js +2 -2
- package/build/JsonConfigComponent/ConfigInstanceSelect.js.map +1 -1
- package/build/JsonConfigComponent/ConfigInterface.d.ts +1 -1
- package/build/JsonConfigComponent/ConfigInterface.js +5 -5
- package/build/JsonConfigComponent/ConfigInterface.js.map +1 -1
- package/build/JsonConfigComponent/ConfigJsonEditor.d.ts +1 -1
- package/build/JsonConfigComponent/ConfigJsonEditor.js +2 -2
- package/build/JsonConfigComponent/ConfigJsonEditor.js.map +1 -1
- package/build/JsonConfigComponent/ConfigLanguage.d.ts +1 -1
- package/build/JsonConfigComponent/ConfigLanguage.js +2 -2
- package/build/JsonConfigComponent/ConfigLanguage.js.map +1 -1
- package/build/JsonConfigComponent/ConfigLicense.d.ts +1 -1
- package/build/JsonConfigComponent/ConfigLicense.js +2 -2
- package/build/JsonConfigComponent/ConfigLicense.js.map +1 -1
- package/build/JsonConfigComponent/ConfigNumber.d.ts +1 -1
- package/build/JsonConfigComponent/ConfigNumber.js +2 -2
- package/build/JsonConfigComponent/ConfigNumber.js.map +1 -1
- package/build/JsonConfigComponent/ConfigOAuth2.js +1 -1
- package/build/JsonConfigComponent/ConfigOAuth2.js.map +1 -1
- package/build/JsonConfigComponent/ConfigObjectId.d.ts +1 -1
- package/build/JsonConfigComponent/ConfigObjectId.js +3 -3
- package/build/JsonConfigComponent/ConfigObjectId.js.map +1 -1
- package/build/JsonConfigComponent/ConfigPanel.d.ts +1 -1
- package/build/JsonConfigComponent/ConfigPanel.js +11 -8
- package/build/JsonConfigComponent/ConfigPanel.js.map +1 -1
- package/build/JsonConfigComponent/ConfigPassword.d.ts +1 -1
- package/build/JsonConfigComponent/ConfigPassword.js +2 -2
- package/build/JsonConfigComponent/ConfigPassword.js.map +1 -1
- package/build/JsonConfigComponent/ConfigPattern.d.ts +8 -1
- package/build/JsonConfigComponent/ConfigPattern.js +29 -3
- package/build/JsonConfigComponent/ConfigPattern.js.map +1 -1
- package/build/JsonConfigComponent/ConfigPort.js +2 -2
- package/build/JsonConfigComponent/ConfigPort.js.map +1 -1
- package/build/JsonConfigComponent/ConfigQrCode.js +1 -1
- package/build/JsonConfigComponent/ConfigQrCode.js.map +1 -1
- package/build/JsonConfigComponent/ConfigQrCodeSendTo.d.ts +1 -1
- package/build/JsonConfigComponent/ConfigQrCodeSendTo.js +5 -5
- package/build/JsonConfigComponent/ConfigQrCodeSendTo.js.map +1 -1
- package/build/JsonConfigComponent/ConfigRoom.d.ts +1 -1
- package/build/JsonConfigComponent/ConfigRoom.js +2 -2
- package/build/JsonConfigComponent/ConfigRoom.js.map +1 -1
- package/build/JsonConfigComponent/ConfigSelect.d.ts +13 -11
- package/build/JsonConfigComponent/ConfigSelect.js +35 -29
- package/build/JsonConfigComponent/ConfigSelect.js.map +1 -1
- package/build/JsonConfigComponent/ConfigSelectSendTo.d.ts +16 -11
- package/build/JsonConfigComponent/ConfigSelectSendTo.js +26 -23
- package/build/JsonConfigComponent/ConfigSelectSendTo.js.map +1 -1
- package/build/JsonConfigComponent/ConfigSendto.d.ts +1 -1
- package/build/JsonConfigComponent/ConfigSendto.js +8 -8
- package/build/JsonConfigComponent/ConfigSendto.js.map +1 -1
- package/build/JsonConfigComponent/ConfigSetState.js +2 -2
- package/build/JsonConfigComponent/ConfigSetState.js.map +1 -1
- package/build/JsonConfigComponent/ConfigSlider.d.ts +1 -1
- package/build/JsonConfigComponent/ConfigSlider.js +2 -2
- package/build/JsonConfigComponent/ConfigSlider.js.map +1 -1
- package/build/JsonConfigComponent/ConfigState.d.ts +2 -1
- package/build/JsonConfigComponent/ConfigState.js +32 -26
- package/build/JsonConfigComponent/ConfigState.js.map +1 -1
- package/build/JsonConfigComponent/ConfigTable.d.ts +1 -1
- package/build/JsonConfigComponent/ConfigTable.js +21 -19
- package/build/JsonConfigComponent/ConfigTable.js.map +1 -1
- package/build/JsonConfigComponent/ConfigTabs.d.ts +6 -0
- package/build/JsonConfigComponent/ConfigTabs.js +57 -21
- package/build/JsonConfigComponent/ConfigTabs.js.map +1 -1
- package/build/JsonConfigComponent/ConfigText.d.ts +1 -1
- package/build/JsonConfigComponent/ConfigText.js +2 -2
- package/build/JsonConfigComponent/ConfigText.js.map +1 -1
- package/build/JsonConfigComponent/ConfigTextSendTo.d.ts +1 -1
- package/build/JsonConfigComponent/ConfigTextSendTo.js +3 -3
- package/build/JsonConfigComponent/ConfigTextSendTo.js.map +1 -1
- package/build/JsonConfigComponent/ConfigTimePicker.d.ts +1 -1
- package/build/JsonConfigComponent/ConfigTimePicker.js +2 -2
- package/build/JsonConfigComponent/ConfigTimePicker.js.map +1 -1
- package/build/JsonConfigComponent/ConfigTopic.d.ts +1 -1
- package/build/JsonConfigComponent/ConfigTopic.js +2 -2
- package/build/JsonConfigComponent/ConfigTopic.js.map +1 -1
- package/build/JsonConfigComponent/ConfigUUID.js +2 -2
- package/build/JsonConfigComponent/ConfigUUID.js.map +1 -1
- package/build/JsonConfigComponent/ConfigUser.d.ts +1 -1
- package/build/JsonConfigComponent/ConfigUser.js +2 -2
- package/build/JsonConfigComponent/ConfigUser.js.map +1 -1
- package/build/JsonConfigComponent/ConfigYamlEditor.d.ts +1 -1
- package/build/JsonConfigComponent/ConfigYamlEditor.js +2 -2
- package/build/JsonConfigComponent/ConfigYamlEditor.js.map +1 -1
- package/build/JsonConfigComponent/index.d.ts +2 -0
- package/build/JsonConfigComponent/index.js +16 -1
- package/build/JsonConfigComponent/index.js.map +1 -1
- package/build/types.d.ts +1 -0
- package/package.json +1 -1
|
@@ -12,9 +12,14 @@ interface ConfigTabsState extends ConfigGenericState {
|
|
|
12
12
|
openMenu: HTMLButtonElement | null;
|
|
13
13
|
initialBreakpoint?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';
|
|
14
14
|
tabErrors: Record<string, Record<string, string>>;
|
|
15
|
+
calculatedValuesTable: Record<string, {
|
|
16
|
+
hidden: boolean;
|
|
17
|
+
disabled: boolean;
|
|
18
|
+
}> | null;
|
|
15
19
|
}
|
|
16
20
|
declare class ConfigTabs extends ConfigGeneric<ConfigTabsProps, ConfigTabsState> {
|
|
17
21
|
private resizeTimeout;
|
|
22
|
+
private calculateTimeoutTable;
|
|
18
23
|
private readonly refDiv;
|
|
19
24
|
constructor(props: ConfigTabsProps);
|
|
20
25
|
onTabError: (attr: string, error?: string) => void;
|
|
@@ -24,6 +29,7 @@ declare class ConfigTabs extends ConfigGeneric<ConfigTabsProps, ConfigTabsState>
|
|
|
24
29
|
getCurrentBreakpoint(): 'xs' | 'sm' | 'md' | 'lg' | 'xl';
|
|
25
30
|
componentDidUpdate(): void;
|
|
26
31
|
onMenuChange(tab: string): void;
|
|
32
|
+
updateCalculatedValuesForTable(): void;
|
|
27
33
|
render(): JSX.Element;
|
|
28
34
|
}
|
|
29
35
|
export default ConfigTabs;
|
|
@@ -21,6 +21,7 @@ const styles = {
|
|
|
21
21
|
};
|
|
22
22
|
class ConfigTabs extends ConfigGeneric {
|
|
23
23
|
resizeTimeout = null;
|
|
24
|
+
calculateTimeoutTable = null;
|
|
24
25
|
refDiv;
|
|
25
26
|
constructor(props) {
|
|
26
27
|
super(props);
|
|
@@ -87,6 +88,10 @@ class ConfigTabs extends ConfigGeneric {
|
|
|
87
88
|
clearTimeout(this.resizeTimeout);
|
|
88
89
|
this.resizeTimeout = null;
|
|
89
90
|
}
|
|
91
|
+
if (this.calculateTimeoutTable) {
|
|
92
|
+
clearTimeout(this.calculateTimeoutTable);
|
|
93
|
+
this.calculateTimeoutTable = null;
|
|
94
|
+
}
|
|
90
95
|
window.removeEventListener('hashchange', this.onHashTabsChanged, false);
|
|
91
96
|
super.componentWillUnmount();
|
|
92
97
|
}
|
|
@@ -164,32 +169,63 @@ class ConfigTabs extends ConfigGeneric {
|
|
|
164
169
|
}
|
|
165
170
|
});
|
|
166
171
|
}
|
|
172
|
+
updateCalculatedValuesForTable() {
|
|
173
|
+
if (this.calculateTimeoutTable) {
|
|
174
|
+
clearTimeout(this.calculateTimeoutTable);
|
|
175
|
+
}
|
|
176
|
+
this.calculateTimeoutTable = setTimeout(async () => {
|
|
177
|
+
this.calculateTimeoutTable = null;
|
|
178
|
+
const items = this.props.schema.items;
|
|
179
|
+
const calculatedValuesTable = {};
|
|
180
|
+
for (const name in items) {
|
|
181
|
+
let disabled;
|
|
182
|
+
if (items[name].expertMode && !this.props.expertMode) {
|
|
183
|
+
calculatedValuesTable[name] = { hidden: true, disabled: false };
|
|
184
|
+
continue;
|
|
185
|
+
}
|
|
186
|
+
if (this.props.custom) {
|
|
187
|
+
const hidden = !!(await this.executeCustom(items[name].hidden, this.props.data, this.props.customObj, this.props.oContext.instanceObj, this.props.index, this.props.globalData));
|
|
188
|
+
if (hidden) {
|
|
189
|
+
calculatedValuesTable[name] = { hidden: true, disabled: false };
|
|
190
|
+
continue;
|
|
191
|
+
}
|
|
192
|
+
disabled = !!(await this.executeCustom(items[name].disabled, this.props.data, this.props.customObj, this.props.oContext.instanceObj, this.props.index, this.props.globalData));
|
|
193
|
+
calculatedValuesTable[name] = { hidden, disabled };
|
|
194
|
+
}
|
|
195
|
+
else {
|
|
196
|
+
const hidden = !!(await this.execute(items[name].hidden, false, this.props.data, this.props.index, this.props.globalData));
|
|
197
|
+
if (hidden) {
|
|
198
|
+
calculatedValuesTable[name] = { hidden: true, disabled: false };
|
|
199
|
+
continue;
|
|
200
|
+
}
|
|
201
|
+
disabled = !!(await this.execute(items[name].disabled, false, this.props.data, this.props.index, this.props.globalData));
|
|
202
|
+
calculatedValuesTable[name] = { hidden: false, disabled };
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
if (JSON.stringify(calculatedValuesTable) !== JSON.stringify(this.state.calculatedValuesTable)) {
|
|
206
|
+
this.setState({ calculatedValuesTable });
|
|
207
|
+
}
|
|
208
|
+
}, 50);
|
|
209
|
+
}
|
|
167
210
|
render() {
|
|
168
211
|
const items = this.props.schema.items;
|
|
169
212
|
let withIcons = false;
|
|
213
|
+
this.updateCalculatedValuesForTable();
|
|
214
|
+
if (!this.state.calculatedValuesTable) {
|
|
215
|
+
return null;
|
|
216
|
+
}
|
|
170
217
|
const elements = [];
|
|
171
|
-
Object.keys(items)
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
return;
|
|
175
|
-
}
|
|
176
|
-
if (this.props.custom) {
|
|
177
|
-
const hidden = this.executeCustom(items[name].hidden, this.props.data, this.props.customObj, this.props.oContext.instanceObj, this.props.index, this.props.globalData);
|
|
178
|
-
if (hidden) {
|
|
179
|
-
return;
|
|
180
|
-
}
|
|
181
|
-
disabled = this.executeCustom(items[name].disabled, this.props.data, this.props.customObj, this.props.oContext.instanceObj, this.props.index, this.props.globalData);
|
|
182
|
-
}
|
|
183
|
-
else {
|
|
184
|
-
const hidden = this.execute(items[name].hidden, false, this.props.data, this.props.index, this.props.globalData);
|
|
185
|
-
if (hidden) {
|
|
186
|
-
return;
|
|
187
|
-
}
|
|
188
|
-
disabled = this.execute(items[name].disabled, false, this.props.data, this.props.index, this.props.globalData);
|
|
189
|
-
}
|
|
218
|
+
Object.keys(items)
|
|
219
|
+
.filter(name => !this.state.calculatedValuesTable[name]?.hidden)
|
|
220
|
+
.map(name => {
|
|
190
221
|
const icon = this.getIcon(items[name].icon);
|
|
191
|
-
withIcons
|
|
192
|
-
elements.push({
|
|
222
|
+
withIcons ||= !!icon;
|
|
223
|
+
elements.push({
|
|
224
|
+
icon,
|
|
225
|
+
disabled: this.state.calculatedValuesTable[name]?.disabled,
|
|
226
|
+
label: this.getText(items[name].label),
|
|
227
|
+
name,
|
|
228
|
+
});
|
|
193
229
|
});
|
|
194
230
|
if (!elements.find(item => item.name === this.state.tab)) {
|
|
195
231
|
// Select the first tab if the current tab is not available
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConfigTabs.js","sourceRoot":"./src/","sources":["JsonConfigComponent/ConfigTabs.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { type JSX } from 'react';\n\nimport { Tabs, Tab, IconButton, Toolbar, Menu, MenuItem, ListItemIcon, Box } from '@mui/material';\nimport { Menu as MenuIcon, Error as ErrorIcon } from '@mui/icons-material';\n\nimport type { ConfigItemTabs } from '../types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\nimport ConfigPanel from './ConfigPanel';\n\nconst styles: Record<string, React.CSSProperties> = {\n tabs: {\n height: '100%',\n width: '100%',\n },\n panel: {\n width: '100%',\n display: 'block',\n },\n panelWithIcons: {\n height: 'calc(100% - 72px)',\n },\n panelWithoutIcons: {\n height: 'calc(100% - 48px)',\n },\n};\n\ninterface ConfigTabsProps extends ConfigGenericProps {\n schema: ConfigItemTabs;\n dialogName?: string;\n withoutSaveButtons?: boolean;\n}\n\ninterface ConfigTabsState extends ConfigGenericState {\n tab?: string;\n width: number;\n openMenu: HTMLButtonElement | null;\n initialBreakpoint?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n tabErrors: Record<string, Record<string, string>>; // tab -> attr -> error\n}\n\nclass ConfigTabs extends ConfigGeneric<ConfigTabsProps, ConfigTabsState> {\n private resizeTimeout: ReturnType<typeof setTimeout> | null = null;\n\n private readonly refDiv: React.RefObject<HTMLDivElement>;\n\n constructor(props: ConfigTabsProps) {\n super(props);\n let tab: string | undefined;\n\n if (this.props.root) {\n // read the path from hash\n // #tab-instances/config/system.adapter.ping.0/<TAB-NAME-OR-INDEX>\n const hash = (window.location.hash || '').replace(/^#/, '').split('/');\n if (hash.length >= 3 && hash[1] === 'config') {\n const tabS = hash[3];\n const tabN = parseInt(tabS, 10);\n if (tabS && tabN.toString() === tabS) {\n if (tabN >= 0 && tabN < Object.keys(this.props.schema.items).length) {\n tab = Object.keys(this.props.schema.items)[tabN];\n }\n } else if (tabS && Object.keys(this.props.schema.items).includes(tabS)) {\n tab = tabS;\n }\n\n // install on hash change handler\n window.addEventListener('hashchange', this.onHashTabsChanged, false);\n }\n }\n\n if (tab === undefined) {\n tab =\n (((window as any)._localStorage as Storage) || window.localStorage).getItem(\n `${this.props.dialogName || 'App'}.${this.props.oContext.adapterName}`,\n ) || Object.keys(this.props.schema.items)[0];\n if (!Object.keys(this.props.schema.items).includes(tab)) {\n tab = Object.keys(this.props.schema.items)[0];\n }\n }\n this.refDiv = React.createRef();\n\n Object.assign(this.state, { tab, width: 0, openMenu: null, tabErrors: {} });\n }\n\n onTabError = (attr: string, error?: string): void => {\n const currentTab = this.state.tab;\n if (!currentTab) {\n // Forward to parent if no current tab\n this.props.onError(attr, error);\n return;\n }\n\n const newTabErrors = { ...this.state.tabErrors };\n\n if (!newTabErrors[currentTab]) {\n newTabErrors[currentTab] = {};\n }\n\n if (!error) {\n delete newTabErrors[currentTab][attr];\n // Clean up empty tab error objects\n if (Object.keys(newTabErrors[currentTab]).length === 0) {\n delete newTabErrors[currentTab];\n }\n } else {\n newTabErrors[currentTab][attr] = error;\n }\n\n this.setState({ tabErrors: newTabErrors });\n\n // Also forward to parent\n this.props.onError(attr, error);\n };\n\n hasTabErrors = (tabName: string): boolean => {\n return !!(this.state.tabErrors[tabName] && Object.keys(this.state.tabErrors[tabName]).length > 0);\n };\n\n componentWillUnmount(): void {\n if (this.resizeTimeout) {\n clearTimeout(this.resizeTimeout);\n this.resizeTimeout = null;\n }\n window.removeEventListener('hashchange', this.onHashTabsChanged, false);\n super.componentWillUnmount();\n }\n\n onHashTabsChanged = (): void => {\n const hash = (window.location.hash || '').replace(/^#/, '').split('/');\n if (hash.length > 3 && hash[1] === 'config') {\n const tabS = hash[3];\n const tabN = parseInt(tabS, 10);\n let tab;\n if (tabN.toString() === tabS) {\n if (tabN >= 0 && tabN < Object.keys(this.props.schema.items).length) {\n tab = Object.keys(this.props.schema.items)[tabN];\n }\n } else if (Object.keys(this.props.schema.items).includes(tabS)) {\n tab = tabS;\n }\n if (tab !== undefined && tab !== this.state.tab) {\n (((window as any)._localStorage as Storage) || window.localStorage).setItem(\n `${this.props.dialogName || 'App'}.${this.props.oContext.adapterName}`,\n tab,\n );\n this.setState({ tab });\n }\n }\n };\n\n getCurrentBreakpoint(): 'xs' | 'sm' | 'md' | 'lg' | 'xl' {\n if (!this.state.width) {\n return 'md';\n }\n if (!this.state.initialBreakpoint) {\n let initialBreakpoint: 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n if (this.state.width < 600) {\n initialBreakpoint = 'xs';\n } else if (this.state.width < 900) {\n initialBreakpoint = 'sm';\n } else if (this.state.width < 1200) {\n initialBreakpoint = 'md';\n } else if (this.state.width < 1536) {\n initialBreakpoint = 'lg';\n } else {\n initialBreakpoint = 'xl';\n }\n // Remember initial breakpoint and do not change it anymore\n setTimeout(() => {\n this.setState({ initialBreakpoint });\n }, 50);\n\n return initialBreakpoint;\n }\n\n return this.state.initialBreakpoint;\n }\n\n componentDidUpdate(): void {\n if (\n !this.state.initialBreakpoint &&\n this.refDiv.current?.clientWidth &&\n this.refDiv.current.clientWidth !== this.state.width\n ) {\n if (this.resizeTimeout) {\n clearTimeout(this.resizeTimeout);\n }\n this.resizeTimeout = setTimeout(() => {\n this.resizeTimeout = null;\n this.setState({ width: this.refDiv.current?.clientWidth });\n }, 50);\n }\n }\n\n onMenuChange(tab: string): void {\n (((window as any)._localStorage as Storage) || window.localStorage).setItem(\n `${this.props.dialogName || 'App'}.${this.props.oContext.adapterName}`,\n tab,\n );\n this.setState({ tab }, () => {\n if (this.props.root) {\n const hash = (window.location.hash || '').split('/');\n if (hash.length >= 3 && hash[1] === 'config') {\n hash[3] = this.state.tab;\n window.location.hash = hash.join('/');\n }\n }\n });\n }\n\n render(): JSX.Element {\n const items = this.props.schema.items;\n let withIcons = false;\n const elements: { icon: React.JSX.Element | null; label: string; name: string; disabled: boolean }[] = [];\n\n Object.keys(items).map(name => {\n let disabled: boolean;\n if (items[name].expertMode && !this.props.expertMode) {\n return;\n }\n\n if (this.props.custom) {\n const hidden = this.executeCustom(\n items[name].hidden,\n this.props.data,\n this.props.customObj,\n this.props.oContext.instanceObj,\n this.props.index,\n this.props.globalData,\n );\n if (hidden) {\n return;\n }\n disabled = this.executeCustom(\n items[name].disabled,\n this.props.data,\n this.props.customObj,\n this.props.oContext.instanceObj,\n this.props.index,\n this.props.globalData,\n ) as boolean;\n } else {\n const hidden: boolean = this.execute(\n items[name].hidden,\n false,\n this.props.data,\n this.props.index,\n this.props.globalData,\n ) as boolean;\n if (hidden) {\n return;\n }\n disabled = this.execute(\n items[name].disabled,\n false,\n this.props.data,\n this.props.index,\n this.props.globalData,\n ) as boolean;\n }\n const icon = this.getIcon(items[name].icon);\n withIcons = withIcons || !!icon;\n elements.push({ icon, disabled, label: this.getText(items[name].label), name });\n });\n\n if (!elements.find(item => item.name === this.state.tab)) {\n // Select the first tab if the current tab is not available\n setTimeout(() => this.setState({ tab: elements[0].name }), 50);\n }\n\n const currentBreakpoint = this.getCurrentBreakpoint();\n let tabs: React.JSX.Element;\n if (currentBreakpoint === 'xs' && elements.length > 2) {\n tabs = (\n <Toolbar\n style={{\n top: 2,\n backgroundColor: this.props.oContext.themeType === 'dark' ? '#222' : '#DDD',\n }}\n variant=\"dense\"\n >\n <IconButton\n onClick={(event: React.MouseEvent<HTMLButtonElement>) =>\n this.setState({ openMenu: event.currentTarget })\n }\n >\n <MenuIcon />\n </IconButton>\n {this.state.openMenu ? (\n <Menu\n open={!0}\n anchorEl={this.state.openMenu}\n onClose={() => this.setState({ openMenu: null })}\n >\n {elements.map(el => {\n const hasErrors = this.hasTabErrors(el.name);\n return (\n <MenuItem\n disabled={el.disabled}\n key={el.name}\n onClick={() => {\n this.setState({ openMenu: null }, () => this.onMenuChange(el.name));\n }}\n selected={el.name === this.state.tab}\n sx={hasErrors ? { color: 'error.main' } : undefined}\n >\n {withIcons ? <ListItemIcon>{el.icon}</ListItemIcon> : null}\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5, width: '100%' }}>\n {el.label}\n {hasErrors && <ErrorIcon sx={{ fontSize: 16, color: 'error.main' }} />}\n </Box>\n </MenuItem>\n );\n })}\n </Menu>\n ) : null}\n </Toolbar>\n );\n } else {\n tabs = (\n <Tabs\n variant=\"scrollable\"\n scrollButtons=\"auto\"\n style={this.props.schema.tabsStyle}\n value={this.state.tab}\n onChange={(_e, tab: string): void => this.onMenuChange(tab)}\n >\n {elements.map(el => {\n const hasErrors = this.hasTabErrors(el.name);\n const label = hasErrors ? (\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5 }}>\n {el.label}\n <ErrorIcon sx={{ fontSize: 16, color: 'error.main' }} />\n </Box>\n ) : (\n el.label\n );\n\n return (\n <Tab\n id={el.name}\n wrapped\n disabled={el.disabled}\n key={el.name}\n value={el.name}\n iconPosition={this.props.schema.iconPosition || 'start'}\n icon={el.icon}\n label={label}\n sx={hasErrors ? { '& .MuiTab-wrapper': { color: 'error.main' } } : undefined}\n />\n );\n })}\n </Tabs>\n );\n }\n\n return (\n <div\n style={styles.tabs}\n ref={this.refDiv}\n >\n {tabs}\n <ConfigPanel\n oContext={this.props.oContext}\n withoutSaveButtons={this.props.withoutSaveButtons}\n isParentTab\n changed={this.props.changed}\n key={this.state.tab}\n expertMode={this.props.expertMode}\n index={1001}\n arrayIndex={this.props.arrayIndex}\n globalData={this.props.globalData}\n commandRunning={this.props.commandRunning}\n style={{\n ...styles.panel,\n ...(withIcons ? styles.panelWithIcons : styles.panelWithoutIcons),\n }}\n common={this.props.common}\n alive={this.props.alive}\n themeName={this.props.themeName}\n data={this.props.data}\n originalData={this.props.originalData}\n onChange={this.props.onChange}\n onError={this.onTabError}\n customObj={this.props.customObj}\n custom={this.props.custom}\n schema={items[this.state.tab]}\n table={this.props.table}\n withIcons={withIcons}\n customComponents={this.props.customComponents}\n />\n </div>\n );\n }\n}\n\nexport default ConfigTabs;\n"]}
|
|
1
|
+
{"version":3,"file":"ConfigTabs.js","sourceRoot":"./src/","sources":["JsonConfigComponent/ConfigTabs.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { type JSX } from 'react';\n\nimport { Tabs, Tab, IconButton, Toolbar, Menu, MenuItem, ListItemIcon, Box } from '@mui/material';\nimport { Menu as MenuIcon, Error as ErrorIcon } from '@mui/icons-material';\n\nimport type { ConfigItemTabs } from '../types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\nimport ConfigPanel from './ConfigPanel';\n\nconst styles: Record<string, React.CSSProperties> = {\n tabs: {\n height: '100%',\n width: '100%',\n },\n panel: {\n width: '100%',\n display: 'block',\n },\n panelWithIcons: {\n height: 'calc(100% - 72px)',\n },\n panelWithoutIcons: {\n height: 'calc(100% - 48px)',\n },\n};\n\ninterface ConfigTabsProps extends ConfigGenericProps {\n schema: ConfigItemTabs;\n dialogName?: string;\n withoutSaveButtons?: boolean;\n}\n\ninterface ConfigTabsState extends ConfigGenericState {\n tab?: string;\n width: number;\n openMenu: HTMLButtonElement | null;\n initialBreakpoint?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n tabErrors: Record<string, Record<string, string>>; // tab -> attr -> error\n calculatedValuesTable: Record<string, { hidden: boolean; disabled: boolean }> | null;\n}\n\nclass ConfigTabs extends ConfigGeneric<ConfigTabsProps, ConfigTabsState> {\n private resizeTimeout: ReturnType<typeof setTimeout> | null = null;\n private calculateTimeoutTable: ReturnType<typeof setTimeout> | null = null;\n\n private readonly refDiv: React.RefObject<HTMLDivElement>;\n\n constructor(props: ConfigTabsProps) {\n super(props);\n let tab: string | undefined;\n\n if (this.props.root) {\n // read the path from hash\n // #tab-instances/config/system.adapter.ping.0/<TAB-NAME-OR-INDEX>\n const hash = (window.location.hash || '').replace(/^#/, '').split('/');\n if (hash.length >= 3 && hash[1] === 'config') {\n const tabS = hash[3];\n const tabN = parseInt(tabS, 10);\n if (tabS && tabN.toString() === tabS) {\n if (tabN >= 0 && tabN < Object.keys(this.props.schema.items).length) {\n tab = Object.keys(this.props.schema.items)[tabN];\n }\n } else if (tabS && Object.keys(this.props.schema.items).includes(tabS)) {\n tab = tabS;\n }\n\n // install on hash change handler\n window.addEventListener('hashchange', this.onHashTabsChanged, false);\n }\n }\n\n if (tab === undefined) {\n tab =\n (((window as any)._localStorage as Storage) || window.localStorage).getItem(\n `${this.props.dialogName || 'App'}.${this.props.oContext.adapterName}`,\n ) || Object.keys(this.props.schema.items)[0];\n if (!Object.keys(this.props.schema.items).includes(tab)) {\n tab = Object.keys(this.props.schema.items)[0];\n }\n }\n this.refDiv = React.createRef();\n\n Object.assign(this.state, { tab, width: 0, openMenu: null, tabErrors: {} });\n }\n\n onTabError = (attr: string, error?: string): void => {\n const currentTab = this.state.tab;\n if (!currentTab) {\n // Forward to parent if no current tab\n this.props.onError(attr, error);\n return;\n }\n\n const newTabErrors = { ...this.state.tabErrors };\n\n if (!newTabErrors[currentTab]) {\n newTabErrors[currentTab] = {};\n }\n\n if (!error) {\n delete newTabErrors[currentTab][attr];\n // Clean up empty tab error objects\n if (Object.keys(newTabErrors[currentTab]).length === 0) {\n delete newTabErrors[currentTab];\n }\n } else {\n newTabErrors[currentTab][attr] = error;\n }\n\n this.setState({ tabErrors: newTabErrors });\n\n // Also forward to parent\n this.props.onError(attr, error);\n };\n\n hasTabErrors = (tabName: string): boolean => {\n return !!(this.state.tabErrors[tabName] && Object.keys(this.state.tabErrors[tabName]).length > 0);\n };\n\n componentWillUnmount(): void {\n if (this.resizeTimeout) {\n clearTimeout(this.resizeTimeout);\n this.resizeTimeout = null;\n }\n if (this.calculateTimeoutTable) {\n clearTimeout(this.calculateTimeoutTable);\n this.calculateTimeoutTable = null;\n }\n window.removeEventListener('hashchange', this.onHashTabsChanged, false);\n super.componentWillUnmount();\n }\n\n onHashTabsChanged = (): void => {\n const hash = (window.location.hash || '').replace(/^#/, '').split('/');\n if (hash.length > 3 && hash[1] === 'config') {\n const tabS = hash[3];\n const tabN = parseInt(tabS, 10);\n let tab;\n if (tabN.toString() === tabS) {\n if (tabN >= 0 && tabN < Object.keys(this.props.schema.items).length) {\n tab = Object.keys(this.props.schema.items)[tabN];\n }\n } else if (Object.keys(this.props.schema.items).includes(tabS)) {\n tab = tabS;\n }\n if (tab !== undefined && tab !== this.state.tab) {\n (((window as any)._localStorage as Storage) || window.localStorage).setItem(\n `${this.props.dialogName || 'App'}.${this.props.oContext.adapterName}`,\n tab,\n );\n this.setState({ tab });\n }\n }\n };\n\n getCurrentBreakpoint(): 'xs' | 'sm' | 'md' | 'lg' | 'xl' {\n if (!this.state.width) {\n return 'md';\n }\n if (!this.state.initialBreakpoint) {\n let initialBreakpoint: 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n if (this.state.width < 600) {\n initialBreakpoint = 'xs';\n } else if (this.state.width < 900) {\n initialBreakpoint = 'sm';\n } else if (this.state.width < 1200) {\n initialBreakpoint = 'md';\n } else if (this.state.width < 1536) {\n initialBreakpoint = 'lg';\n } else {\n initialBreakpoint = 'xl';\n }\n // Remember initial breakpoint and do not change it anymore\n setTimeout(() => {\n this.setState({ initialBreakpoint });\n }, 50);\n\n return initialBreakpoint;\n }\n\n return this.state.initialBreakpoint;\n }\n\n componentDidUpdate(): void {\n if (\n !this.state.initialBreakpoint &&\n this.refDiv.current?.clientWidth &&\n this.refDiv.current.clientWidth !== this.state.width\n ) {\n if (this.resizeTimeout) {\n clearTimeout(this.resizeTimeout);\n }\n this.resizeTimeout = setTimeout(() => {\n this.resizeTimeout = null;\n this.setState({ width: this.refDiv.current?.clientWidth });\n }, 50);\n }\n }\n\n onMenuChange(tab: string): void {\n (((window as any)._localStorage as Storage) || window.localStorage).setItem(\n `${this.props.dialogName || 'App'}.${this.props.oContext.adapterName}`,\n tab,\n );\n this.setState({ tab }, () => {\n if (this.props.root) {\n const hash = (window.location.hash || '').split('/');\n if (hash.length >= 3 && hash[1] === 'config') {\n hash[3] = this.state.tab;\n window.location.hash = hash.join('/');\n }\n }\n });\n }\n\n updateCalculatedValuesForTable(): void {\n if (this.calculateTimeoutTable) {\n clearTimeout(this.calculateTimeoutTable);\n }\n this.calculateTimeoutTable = setTimeout(async (): Promise<void> => {\n this.calculateTimeoutTable = null;\n const items = this.props.schema.items;\n const calculatedValuesTable: Record<string, { hidden: boolean; disabled: boolean }> = {};\n for (const name in items) {\n let disabled: boolean;\n if (items[name].expertMode && !this.props.expertMode) {\n calculatedValuesTable[name] = { hidden: true, disabled: false };\n continue;\n }\n\n if (this.props.custom) {\n const hidden = !!(await this.executeCustom(\n items[name].hidden,\n this.props.data,\n this.props.customObj,\n this.props.oContext.instanceObj,\n this.props.index,\n this.props.globalData,\n ));\n if (hidden) {\n calculatedValuesTable[name] = { hidden: true, disabled: false };\n continue;\n }\n disabled = !!(await this.executeCustom(\n items[name].disabled,\n this.props.data,\n this.props.customObj,\n this.props.oContext.instanceObj,\n this.props.index,\n this.props.globalData,\n ));\n calculatedValuesTable[name] = { hidden, disabled };\n } else {\n const hidden = !!(await this.execute(\n items[name].hidden,\n false,\n this.props.data,\n this.props.index,\n this.props.globalData,\n ));\n if (hidden) {\n calculatedValuesTable[name] = { hidden: true, disabled: false };\n continue;\n }\n disabled = !!(await this.execute(\n items[name].disabled,\n false,\n this.props.data,\n this.props.index,\n this.props.globalData,\n ));\n calculatedValuesTable[name] = { hidden: false, disabled };\n }\n }\n\n if (JSON.stringify(calculatedValuesTable) !== JSON.stringify(this.state.calculatedValuesTable)) {\n this.setState({ calculatedValuesTable });\n }\n }, 50);\n }\n\n render(): JSX.Element {\n const items = this.props.schema.items;\n let withIcons = false;\n\n this.updateCalculatedValuesForTable();\n if (!this.state.calculatedValuesTable) {\n return null;\n }\n const elements: { icon: React.JSX.Element | null; label: string; name: string; disabled: boolean }[] = [];\n\n Object.keys(items)\n .filter(name => !this.state.calculatedValuesTable[name]?.hidden)\n .map(name => {\n const icon = this.getIcon(items[name].icon);\n withIcons ||= !!icon;\n elements.push({\n icon,\n disabled: this.state.calculatedValuesTable[name]?.disabled,\n label: this.getText(items[name].label),\n name,\n });\n });\n\n if (!elements.find(item => item.name === this.state.tab)) {\n // Select the first tab if the current tab is not available\n setTimeout(() => this.setState({ tab: elements[0].name }), 50);\n }\n\n const currentBreakpoint = this.getCurrentBreakpoint();\n let tabs: React.JSX.Element;\n if (currentBreakpoint === 'xs' && elements.length > 2) {\n tabs = (\n <Toolbar\n style={{\n top: 2,\n backgroundColor: this.props.oContext.themeType === 'dark' ? '#222' : '#DDD',\n }}\n variant=\"dense\"\n >\n <IconButton\n onClick={(event: React.MouseEvent<HTMLButtonElement>) =>\n this.setState({ openMenu: event.currentTarget })\n }\n >\n <MenuIcon />\n </IconButton>\n {this.state.openMenu ? (\n <Menu\n open={!0}\n anchorEl={this.state.openMenu}\n onClose={() => this.setState({ openMenu: null })}\n >\n {elements.map(el => {\n const hasErrors = this.hasTabErrors(el.name);\n return (\n <MenuItem\n disabled={el.disabled}\n key={el.name}\n onClick={() => {\n this.setState({ openMenu: null }, () => this.onMenuChange(el.name));\n }}\n selected={el.name === this.state.tab}\n sx={hasErrors ? { color: 'error.main' } : undefined}\n >\n {withIcons ? <ListItemIcon>{el.icon}</ListItemIcon> : null}\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5, width: '100%' }}>\n {el.label}\n {hasErrors && <ErrorIcon sx={{ fontSize: 16, color: 'error.main' }} />}\n </Box>\n </MenuItem>\n );\n })}\n </Menu>\n ) : null}\n </Toolbar>\n );\n } else {\n tabs = (\n <Tabs\n variant=\"scrollable\"\n scrollButtons=\"auto\"\n style={this.props.schema.tabsStyle}\n value={this.state.tab}\n onChange={(_e, tab: string): void => this.onMenuChange(tab)}\n >\n {elements.map(el => {\n const hasErrors = this.hasTabErrors(el.name);\n const label = hasErrors ? (\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5 }}>\n {el.label}\n <ErrorIcon sx={{ fontSize: 16, color: 'error.main' }} />\n </Box>\n ) : (\n el.label\n );\n\n return (\n <Tab\n id={el.name}\n wrapped\n disabled={el.disabled}\n key={el.name}\n value={el.name}\n iconPosition={this.props.schema.iconPosition || 'start'}\n icon={el.icon}\n label={label}\n sx={hasErrors ? { '& .MuiTab-wrapper': { color: 'error.main' } } : undefined}\n />\n );\n })}\n </Tabs>\n );\n }\n\n return (\n <div\n style={styles.tabs}\n ref={this.refDiv}\n >\n {tabs}\n <ConfigPanel\n oContext={this.props.oContext}\n withoutSaveButtons={this.props.withoutSaveButtons}\n isParentTab\n changed={this.props.changed}\n key={this.state.tab}\n expertMode={this.props.expertMode}\n index={1001}\n arrayIndex={this.props.arrayIndex}\n globalData={this.props.globalData}\n commandRunning={this.props.commandRunning}\n style={{\n ...styles.panel,\n ...(withIcons ? styles.panelWithIcons : styles.panelWithoutIcons),\n }}\n common={this.props.common}\n alive={this.props.alive}\n themeName={this.props.themeName}\n data={this.props.data}\n originalData={this.props.originalData}\n onChange={this.props.onChange}\n onError={this.onTabError}\n customObj={this.props.customObj}\n custom={this.props.custom}\n schema={items[this.state.tab]}\n table={this.props.table}\n withIcons={withIcons}\n customComponents={this.props.customComponents}\n />\n </div>\n );\n }\n}\n\nexport default ConfigTabs;\n"]}
|
|
@@ -10,7 +10,7 @@ interface ConfigTextState extends ConfigGenericState {
|
|
|
10
10
|
}
|
|
11
11
|
declare class ConfigText extends ConfigGeneric<ConfigTextProps, ConfigTextState> {
|
|
12
12
|
private updateTimeout;
|
|
13
|
-
componentDidMount(): void
|
|
13
|
+
componentDidMount(): Promise<void>;
|
|
14
14
|
validateJson(value: string | null | undefined): boolean;
|
|
15
15
|
static getDerivedStateFromProps(props: ConfigTextProps, state: ConfigTextState): Partial<ConfigTextState> | null;
|
|
16
16
|
renderItem(error?: boolean, disabled?: boolean): JSX.Element;
|
|
@@ -24,8 +24,8 @@ const styles = {
|
|
|
24
24
|
};
|
|
25
25
|
class ConfigText extends ConfigGeneric {
|
|
26
26
|
updateTimeout = null;
|
|
27
|
-
componentDidMount() {
|
|
28
|
-
super.componentDidMount();
|
|
27
|
+
async componentDidMount() {
|
|
28
|
+
await super.componentDidMount();
|
|
29
29
|
let value = ConfigGeneric.getValue(this.props.data, this.props.attr);
|
|
30
30
|
if (Array.isArray(value) && this.props.oContext.multiEdit) {
|
|
31
31
|
value = ConfigGeneric.DIFFERENT_VALUE;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConfigText.js","sourceRoot":"./src/","sources":["JsonConfigComponent/ConfigText.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { type JSX } from 'react';\n\nimport { Autocomplete, TextField, TextareaAutosize, InputAdornment, IconButton } from '@mui/material';\n\nimport { Close as CloseIcon } from '@mui/icons-material';\n\nimport { I18n, IconCopy, Utils } from '@iobroker/adapter-react-v5';\n\nimport type { ConfigItemText } from '../types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\nconst styles: Record<string, React.CSSProperties> = {\n indeterminate: {\n opacity: 0.5,\n },\n label: {\n width: '100%',\n fontSize: 14,\n marginBottom: 2,\n },\n helper: {\n width: '100%',\n fontSize: 12,\n },\n error: {\n width: '100%',\n fontSize: 12,\n color: '#FF0000',\n },\n};\n\ninterface ConfigTextProps extends ConfigGenericProps {\n schema: ConfigItemText;\n}\n\ninterface ConfigTextState extends ConfigGenericState {\n oldValue?: string;\n jsonError?: boolean;\n}\n\nclass ConfigText extends ConfigGeneric<ConfigTextProps, ConfigTextState> {\n private updateTimeout: ReturnType<typeof setTimeout> | null = null;\n\n componentDidMount(): void {\n super.componentDidMount();\n let value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n\n if (Array.isArray(value) && this.props.oContext.multiEdit) {\n value = ConfigGeneric.DIFFERENT_VALUE;\n this.setState({ value, oldValue: value, jsonError: false });\n return;\n }\n\n this.setState({ value, oldValue: value, jsonError: this.validateJson(value) });\n }\n\n validateJson(value: string | null | undefined): boolean {\n let jsonError = false;\n if (this.props.schema.validateJson) {\n if (value || !this.props.schema.allowEmpty) {\n try {\n JSON.parse(value);\n } catch (err: unknown) {\n console.log('Error in JSON', err);\n jsonError = true;\n }\n }\n }\n\n return jsonError;\n }\n\n static getDerivedStateFromProps(props: ConfigTextProps, state: ConfigTextState): Partial<ConfigTextState> | null {\n if (props.oContext.multiEdit && state.value === ConfigGeneric.DIFFERENT_VALUE) {\n return { value: ConfigGeneric.DIFFERENT_VALUE };\n }\n\n let value = ConfigGeneric.getValue(props.data, props.attr);\n\n if (value !== null && value !== undefined) {\n value = value.toString();\n }\n\n if (value === null || value === undefined || (value !== state.value && value !== state.oldValue)) {\n return { value };\n }\n return null;\n }\n\n renderItem(error?: boolean, disabled?: boolean): JSX.Element {\n const isIndeterminate = Array.isArray(this.state.value) || this.state.value === ConfigGeneric.DIFFERENT_VALUE;\n\n if (this.props.schema.time) {\n // show read-only time\n\n let time = '';\n if (typeof this.state.value === 'number') {\n // If the value is a number, it is a timestamp.\n if (this.state.value && this.state.value < 946659600000) {\n // If the value is less than 2000-01-01, it is a timestamp in seconds.\n time = new Date(this.state.value * 1000).toLocaleString();\n } else {\n time = new Date(this.state.value).toLocaleString();\n }\n } else if (typeof this.state.value === 'string') {\n // If the value is a string, it is a date string.\n time = new Date(this.state.value).toLocaleString();\n }\n\n return (\n <TextField\n variant=\"standard\"\n fullWidth\n value={time}\n error={!!error || !!this.state.jsonError}\n disabled={!!disabled}\n slotProps={{\n htmlInput: {\n readOnly: true,\n },\n }}\n placeholder={this.getText(this.props.schema.placeholder)}\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\n if (this.state.oldValue !== null && this.state.oldValue !== undefined) {\n if (this.updateTimeout) {\n clearTimeout(this.updateTimeout);\n }\n this.updateTimeout = setTimeout(() => {\n this.updateTimeout = null;\n this.setState({ oldValue: null });\n }, 30);\n } else if (this.updateTimeout) {\n clearTimeout(this.updateTimeout);\n this.updateTimeout = null;\n }\n\n if (isIndeterminate) {\n const autoCompleteOptions = ConfigGeneric.getValue(this.props.data, this.props.attr);\n const arr =\n autoCompleteOptions\n ?.filter((a: any) => a || a === 0)\n .map((item: any) => ({ label: item.toString() || '', value: item })) || [];\n\n arr.unshift({ label: I18n.t(ConfigGeneric.DIFFERENT_LABEL), value: ConfigGeneric.DIFFERENT_VALUE });\n\n return (\n <Autocomplete\n style={styles.indeterminate}\n fullWidth\n value={arr[0]}\n // getOptionSelected={(option, value) => option.label === value.label}\n onChange={(_, value) => {\n const val = value ? value.value : '';\n const mayBePromise = this.onChange(this.props.attr, val, () => {\n this.setState({ value: val, oldValue: val, jsonError: this.validateJson(value) });\n });\n if (mayBePromise instanceof Promise) {\n mayBePromise.catch(e => console.error(`Cannot set value: ${e}`));\n }\n }}\n options={arr}\n getOptionLabel={option => option.label}\n renderInput={params => (\n <TextField\n variant=\"standard\"\n {...params}\n error={!!error}\n placeholder={this.getText(this.props.schema.placeholder)}\n slotProps={{\n htmlInput: {\n ...params.inputProps,\n maxLength: this.props.schema.maxLength || this.props.schema.max || undefined,\n readOnly: this.props.schema.readOnly || false,\n },\n }}\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 disabled={!!disabled}\n />\n )}\n />\n );\n }\n\n let actionButton: React.JSX.Element | undefined;\n let actionButtonStyle: React.CSSProperties | undefined;\n if ((this.props.schema.readOnly || disabled) && this.props.schema.copyToClipboard) {\n if (this.props.schema.minRows > 1) {\n actionButtonStyle = {\n position: 'absolute',\n right: 3,\n top: 20,\n zIndex: 1000,\n };\n }\n actionButton = (\n <IconButton\n tabIndex={-1}\n style={actionButtonStyle}\n size=\"small\"\n onClick={() => {\n Utils.copyToClipboard(this.state.value);\n window.alert(I18n.t('ra_Copied'));\n }}\n >\n <IconCopy />\n </IconButton>\n );\n } else if (!this.props.schema.readOnly && !disabled && this.state.value && !this.props.schema.noClearButton) {\n if (this.props.schema.minRows > 1) {\n actionButtonStyle = {\n position: 'absolute',\n right: 3,\n top: 20,\n zIndex: 1000,\n };\n }\n actionButton = (\n <IconButton\n style={actionButtonStyle}\n size=\"small\"\n tabIndex={-1}\n onClick={() =>\n this.setState({ value: '', oldValue: this.state.value }, () =>\n this.onChange(this.props.attr, ''),\n )\n }\n >\n <CloseIcon />\n </IconButton>\n );\n if (this.props.schema.minRows <= 1) {\n actionButton = <InputAdornment position=\"end\">{actionButton}</InputAdornment>;\n }\n }\n\n if (this.props.schema.minRows > 1) {\n const helper = this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n );\n return (\n <div style={{ width: '100%', position: 'relative' }}>\n {this.props.schema.label ? (\n <div style={styles.label}>{this.getText(this.props.schema.label)}</div>\n ) : null}\n <TextareaAutosize\n // variant=\"standard\"\n style={{\n width: '100%',\n resize: 'vertical',\n backgroundColor: this.props.oContext.themeType === 'dark' ? '#363636' : '#cccccc',\n color: this.props.oContext.themeType === 'dark' ? '#fff' : '#111',\n }}\n minRows={this.props.schema.minRows}\n maxRows={this.props.schema.maxRows}\n value={this.state.value ?? ''}\n disabled={!!disabled}\n readOnly={this.props.schema.readOnly || false}\n onChange={e => {\n const value = e.target.value;\n this.setState(\n { value, oldValue: this.state.value, jsonError: this.validateJson(value) },\n () => this.onChange(this.props.attr, value || ''),\n );\n }}\n placeholder={this.getText(this.props.schema.placeholder)}\n />\n {helper || error || this.state.jsonError ? (\n <div style={error ? styles.error : styles.helper}>\n {error || (this.state.jsonError ? I18n.t('ra_Invalid JSON') : helper)}\n </div>\n ) : null}\n </div>\n );\n }\n\n return (\n <TextField\n variant=\"standard\"\n fullWidth\n value={this.state.value ?? ''}\n error={!!error || !!this.state.jsonError}\n disabled={!!disabled}\n slotProps={{\n htmlInput: {\n maxLength: this.props.schema.maxLength || this.props.schema.max || undefined,\n readOnly: this.props.schema.readOnly || false,\n },\n input: {\n endAdornment: actionButton,\n },\n }}\n onChange={e => {\n const value = e.target.value;\n\n this.setState({ value, oldValue: this.state.value, jsonError: this.validateJson(value) }, () =>\n this.onChange(this.props.attr, value),\n );\n }}\n placeholder={this.getText(this.props.schema.placeholder)}\n label={this.getText(this.props.schema.label)}\n helperText={\n this.state.jsonError\n ? I18n.t('ra_Invalid JSON')\n : this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n )\n }\n />\n );\n }\n}\n\nexport default ConfigText;\n"]}
|
|
1
|
+
{"version":3,"file":"ConfigText.js","sourceRoot":"./src/","sources":["JsonConfigComponent/ConfigText.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { type JSX } from 'react';\n\nimport { Autocomplete, TextField, TextareaAutosize, InputAdornment, IconButton } from '@mui/material';\n\nimport { Close as CloseIcon } from '@mui/icons-material';\n\nimport { I18n, IconCopy, Utils } from '@iobroker/adapter-react-v5';\n\nimport type { ConfigItemText } from '../types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\nconst styles: Record<string, React.CSSProperties> = {\n indeterminate: {\n opacity: 0.5,\n },\n label: {\n width: '100%',\n fontSize: 14,\n marginBottom: 2,\n },\n helper: {\n width: '100%',\n fontSize: 12,\n },\n error: {\n width: '100%',\n fontSize: 12,\n color: '#FF0000',\n },\n};\n\ninterface ConfigTextProps extends ConfigGenericProps {\n schema: ConfigItemText;\n}\n\ninterface ConfigTextState extends ConfigGenericState {\n oldValue?: string;\n jsonError?: boolean;\n}\n\nclass ConfigText extends ConfigGeneric<ConfigTextProps, ConfigTextState> {\n private updateTimeout: ReturnType<typeof setTimeout> | null = null;\n\n async componentDidMount(): Promise<void> {\n await super.componentDidMount();\n let value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n\n if (Array.isArray(value) && this.props.oContext.multiEdit) {\n value = ConfigGeneric.DIFFERENT_VALUE;\n this.setState({ value, oldValue: value, jsonError: false });\n return;\n }\n\n this.setState({ value, oldValue: value, jsonError: this.validateJson(value) });\n }\n\n validateJson(value: string | null | undefined): boolean {\n let jsonError = false;\n if (this.props.schema.validateJson) {\n if (value || !this.props.schema.allowEmpty) {\n try {\n JSON.parse(value);\n } catch (err: unknown) {\n console.log('Error in JSON', err);\n jsonError = true;\n }\n }\n }\n\n return jsonError;\n }\n\n static getDerivedStateFromProps(props: ConfigTextProps, state: ConfigTextState): Partial<ConfigTextState> | null {\n if (props.oContext.multiEdit && state.value === ConfigGeneric.DIFFERENT_VALUE) {\n return { value: ConfigGeneric.DIFFERENT_VALUE };\n }\n\n let value = ConfigGeneric.getValue(props.data, props.attr);\n\n if (value !== null && value !== undefined) {\n value = value.toString();\n }\n\n if (value === null || value === undefined || (value !== state.value && value !== state.oldValue)) {\n return { value };\n }\n return null;\n }\n\n renderItem(error?: boolean, disabled?: boolean): JSX.Element {\n const isIndeterminate = Array.isArray(this.state.value) || this.state.value === ConfigGeneric.DIFFERENT_VALUE;\n\n if (this.props.schema.time) {\n // show read-only time\n\n let time = '';\n if (typeof this.state.value === 'number') {\n // If the value is a number, it is a timestamp.\n if (this.state.value && this.state.value < 946659600000) {\n // If the value is less than 2000-01-01, it is a timestamp in seconds.\n time = new Date(this.state.value * 1000).toLocaleString();\n } else {\n time = new Date(this.state.value).toLocaleString();\n }\n } else if (typeof this.state.value === 'string') {\n // If the value is a string, it is a date string.\n time = new Date(this.state.value).toLocaleString();\n }\n\n return (\n <TextField\n variant=\"standard\"\n fullWidth\n value={time}\n error={!!error || !!this.state.jsonError}\n disabled={!!disabled}\n slotProps={{\n htmlInput: {\n readOnly: true,\n },\n }}\n placeholder={this.getText(this.props.schema.placeholder)}\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\n if (this.state.oldValue !== null && this.state.oldValue !== undefined) {\n if (this.updateTimeout) {\n clearTimeout(this.updateTimeout);\n }\n this.updateTimeout = setTimeout(() => {\n this.updateTimeout = null;\n this.setState({ oldValue: null });\n }, 30);\n } else if (this.updateTimeout) {\n clearTimeout(this.updateTimeout);\n this.updateTimeout = null;\n }\n\n if (isIndeterminate) {\n const autoCompleteOptions = ConfigGeneric.getValue(this.props.data, this.props.attr);\n const arr =\n autoCompleteOptions\n ?.filter((a: any) => a || a === 0)\n .map((item: any) => ({ label: item.toString() || '', value: item })) || [];\n\n arr.unshift({ label: I18n.t(ConfigGeneric.DIFFERENT_LABEL), value: ConfigGeneric.DIFFERENT_VALUE });\n\n return (\n <Autocomplete\n style={styles.indeterminate}\n fullWidth\n value={arr[0]}\n // getOptionSelected={(option, value) => option.label === value.label}\n onChange={(_, value) => {\n const val = value ? value.value : '';\n const mayBePromise = this.onChange(this.props.attr, val, () => {\n this.setState({ value: val, oldValue: val, jsonError: this.validateJson(value) });\n });\n if (mayBePromise instanceof Promise) {\n mayBePromise.catch(e => console.error(`Cannot set value: ${e}`));\n }\n }}\n options={arr}\n getOptionLabel={option => option.label}\n renderInput={params => (\n <TextField\n variant=\"standard\"\n {...params}\n error={!!error}\n placeholder={this.getText(this.props.schema.placeholder)}\n slotProps={{\n htmlInput: {\n ...params.inputProps,\n maxLength: this.props.schema.maxLength || this.props.schema.max || undefined,\n readOnly: this.props.schema.readOnly || false,\n },\n }}\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 disabled={!!disabled}\n />\n )}\n />\n );\n }\n\n let actionButton: React.JSX.Element | undefined;\n let actionButtonStyle: React.CSSProperties | undefined;\n if ((this.props.schema.readOnly || disabled) && this.props.schema.copyToClipboard) {\n if (this.props.schema.minRows > 1) {\n actionButtonStyle = {\n position: 'absolute',\n right: 3,\n top: 20,\n zIndex: 1000,\n };\n }\n actionButton = (\n <IconButton\n tabIndex={-1}\n style={actionButtonStyle}\n size=\"small\"\n onClick={() => {\n Utils.copyToClipboard(this.state.value);\n window.alert(I18n.t('ra_Copied'));\n }}\n >\n <IconCopy />\n </IconButton>\n );\n } else if (!this.props.schema.readOnly && !disabled && this.state.value && !this.props.schema.noClearButton) {\n if (this.props.schema.minRows > 1) {\n actionButtonStyle = {\n position: 'absolute',\n right: 3,\n top: 20,\n zIndex: 1000,\n };\n }\n actionButton = (\n <IconButton\n style={actionButtonStyle}\n size=\"small\"\n tabIndex={-1}\n onClick={() =>\n this.setState({ value: '', oldValue: this.state.value }, () =>\n this.onChange(this.props.attr, ''),\n )\n }\n >\n <CloseIcon />\n </IconButton>\n );\n if (this.props.schema.minRows <= 1) {\n actionButton = <InputAdornment position=\"end\">{actionButton}</InputAdornment>;\n }\n }\n\n if (this.props.schema.minRows > 1) {\n const helper = this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n );\n return (\n <div style={{ width: '100%', position: 'relative' }}>\n {this.props.schema.label ? (\n <div style={styles.label}>{this.getText(this.props.schema.label)}</div>\n ) : null}\n <TextareaAutosize\n // variant=\"standard\"\n style={{\n width: '100%',\n resize: 'vertical',\n backgroundColor: this.props.oContext.themeType === 'dark' ? '#363636' : '#cccccc',\n color: this.props.oContext.themeType === 'dark' ? '#fff' : '#111',\n }}\n minRows={this.props.schema.minRows}\n maxRows={this.props.schema.maxRows}\n value={this.state.value ?? ''}\n disabled={!!disabled}\n readOnly={this.props.schema.readOnly || false}\n onChange={e => {\n const value = e.target.value;\n this.setState(\n { value, oldValue: this.state.value, jsonError: this.validateJson(value) },\n () => this.onChange(this.props.attr, value || ''),\n );\n }}\n placeholder={this.getText(this.props.schema.placeholder)}\n />\n {helper || error || this.state.jsonError ? (\n <div style={error ? styles.error : styles.helper}>\n {error || (this.state.jsonError ? I18n.t('ra_Invalid JSON') : helper)}\n </div>\n ) : null}\n </div>\n );\n }\n\n return (\n <TextField\n variant=\"standard\"\n fullWidth\n value={this.state.value ?? ''}\n error={!!error || !!this.state.jsonError}\n disabled={!!disabled}\n slotProps={{\n htmlInput: {\n maxLength: this.props.schema.maxLength || this.props.schema.max || undefined,\n readOnly: this.props.schema.readOnly || false,\n },\n input: {\n endAdornment: actionButton,\n },\n }}\n onChange={e => {\n const value = e.target.value;\n\n this.setState({ value, oldValue: this.state.value, jsonError: this.validateJson(value) }, () =>\n this.onChange(this.props.attr, value),\n );\n }}\n placeholder={this.getText(this.props.schema.placeholder)}\n label={this.getText(this.props.schema.label)}\n helperText={\n this.state.jsonError\n ? I18n.t('ra_Invalid JSON')\n : this.renderHelp(\n this.props.schema.help,\n this.props.schema.helpLink,\n this.props.schema.noTranslation,\n )\n }\n />\n );\n }\n}\n\nexport default ConfigText;\n"]}
|
|
@@ -13,7 +13,7 @@ interface ConfigTextSendToState extends ConfigGenericState {
|
|
|
13
13
|
declare class ConfigTextSendTo extends ConfigGeneric<ConfigTextSendToProps, ConfigTextSendToState> {
|
|
14
14
|
private initialized;
|
|
15
15
|
private localContext;
|
|
16
|
-
askInstance(): void
|
|
16
|
+
askInstance(): Promise<void>;
|
|
17
17
|
getLocalContext(): string;
|
|
18
18
|
renderItem(): JSX.Element;
|
|
19
19
|
}
|
|
@@ -11,11 +11,11 @@ const styles = {
|
|
|
11
11
|
class ConfigTextSendTo extends ConfigGeneric {
|
|
12
12
|
initialized = false;
|
|
13
13
|
localContext;
|
|
14
|
-
askInstance() {
|
|
14
|
+
async askInstance() {
|
|
15
15
|
if (this.props.alive) {
|
|
16
16
|
let data = this.props.schema.data;
|
|
17
17
|
if (data === undefined && this.props.schema.jsonData) {
|
|
18
|
-
const dataStr = this.
|
|
18
|
+
const dataStr = await this.getPatternAsync(this.props.schema.jsonData, null, true);
|
|
19
19
|
try {
|
|
20
20
|
data = JSON.parse(dataStr);
|
|
21
21
|
}
|
|
@@ -24,7 +24,7 @@ class ConfigTextSendTo extends ConfigGeneric {
|
|
|
24
24
|
}
|
|
25
25
|
}
|
|
26
26
|
data ??= null;
|
|
27
|
-
const instance = this.
|
|
27
|
+
const instance = await this.getPatternAsync(this.props.schema.instance || `${this.props.oContext.adapterName}.${this.props.oContext.instance}`);
|
|
28
28
|
void this.props.oContext.socket
|
|
29
29
|
.sendTo(instance, this.props.schema.command || 'send', data)
|
|
30
30
|
.then(result => {
|
|
@@ -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 askInstance(): 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 = this.getPattern(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 = this.getPattern(\n this.props.schema.instance || `${this.props.oContext.adapterName}.${this.props.oContext.instance}`,\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('ra_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":"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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 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('ra_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"]}
|
|
@@ -6,7 +6,7 @@ interface ConfigTimePickerProps extends ConfigGenericProps {
|
|
|
6
6
|
dialogName?: string;
|
|
7
7
|
}
|
|
8
8
|
export default class ConfigTimePicker extends ConfigGeneric<ConfigTimePickerProps> {
|
|
9
|
-
componentDidMount(): void
|
|
9
|
+
componentDidMount(): Promise<void>;
|
|
10
10
|
renderItem(_error: unknown, disabled: boolean): JSX.Element;
|
|
11
11
|
}
|
|
12
12
|
export {};
|
|
@@ -2,8 +2,8 @@ import React from 'react';
|
|
|
2
2
|
import { TimePicker } from '@mui/x-date-pickers';
|
|
3
3
|
import ConfigGeneric from './ConfigGeneric';
|
|
4
4
|
export default class ConfigTimePicker extends ConfigGeneric {
|
|
5
|
-
componentDidMount() {
|
|
6
|
-
super.componentDidMount();
|
|
5
|
+
async componentDidMount() {
|
|
6
|
+
await super.componentDidMount();
|
|
7
7
|
const value = ConfigGeneric.getValue(this.props.data, this.props.attr);
|
|
8
8
|
this.setState({ value });
|
|
9
9
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConfigTimePicker.js","sourceRoot":"./src/","sources":["JsonConfigComponent/ConfigTimePicker.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAExC,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAGjD,OAAO,aAA0C,MAAM,iBAAiB,CAAC;AAOzE,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,aAAoC;IAC9E,iBAAiB;
|
|
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"]}
|
|
@@ -5,7 +5,7 @@ interface ConfigTopicProps extends ConfigGenericProps {
|
|
|
5
5
|
schema: ConfigItemTopic;
|
|
6
6
|
}
|
|
7
7
|
declare class ConfigTopic extends ConfigGeneric<ConfigTopicProps, ConfigGenericState> {
|
|
8
|
-
componentDidMount(): void
|
|
8
|
+
componentDidMount(): Promise<void>;
|
|
9
9
|
renderItem(error: string, disabled: boolean): JSX.Element;
|
|
10
10
|
}
|
|
11
11
|
export default ConfigTopic;
|
|
@@ -13,8 +13,8 @@ function convertID2Topic(id, namespace) {
|
|
|
13
13
|
return topic;
|
|
14
14
|
}
|
|
15
15
|
class ConfigTopic extends ConfigGeneric {
|
|
16
|
-
componentDidMount() {
|
|
17
|
-
super.componentDidMount();
|
|
16
|
+
async componentDidMount() {
|
|
17
|
+
await super.componentDidMount();
|
|
18
18
|
const value = ConfigGeneric.getValue(this.props.data, this.props.attr);
|
|
19
19
|
if (!value && this.props.customObj?._id) {
|
|
20
20
|
const topic = convertID2Topic(this.props.customObj._id, `${this.props.oContext.adapterName}.${this.props.oContext.instance}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConfigTopic.js","sourceRoot":"./src/","sources":["JsonConfigComponent/ConfigTopic.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAExC,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAG1C,OAAO,aAAmE,MAAM,iBAAiB,CAAC;AAElG,SAAS,eAAe,CAAC,EAAU,EAAE,SAAiB;IAClD,IAAI,KAAK,CAAC;IACV,IAAI,SAAS,IAAI,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,KAAK,SAAS,EAAE,CAAC;QAC/D,KAAK,GAAG,EAAE,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC/C,CAAC;SAAM,CAAC;QACJ,KAAK,GAAG,EAAE,CAAC;IACf,CAAC;IACD,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACrD,OAAO,KAAK,CAAC;AACjB,CAAC;AAMD,MAAM,WAAY,SAAQ,aAAmD;IACzE,iBAAiB;
|
|
1
|
+
{"version":3,"file":"ConfigTopic.js","sourceRoot":"./src/","sources":["JsonConfigComponent/ConfigTopic.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { type JSX } from 'react';\n\nimport { TextField } from '@mui/material';\n\nimport type { ConfigItemTopic } from '../types';\nimport ConfigGeneric, { type ConfigGenericProps, type ConfigGenericState } from './ConfigGeneric';\n\nfunction convertID2Topic(id: string, namespace: string): string {\n let topic;\n if (namespace && id.substring(0, namespace.length) === namespace) {\n topic = id.substring(namespace.length + 1);\n } else {\n topic = id;\n }\n topic = topic.replace(/\\./g, '/').replace(/_/g, ' ');\n return topic;\n}\n\ninterface ConfigTopicProps extends ConfigGenericProps {\n schema: ConfigItemTopic;\n}\n\nclass ConfigTopic extends ConfigGeneric<ConfigTopicProps, ConfigGenericState> {\n async componentDidMount(): Promise<void> {\n await super.componentDidMount();\n const value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n if (!value && this.props.customObj?._id) {\n const topic = convertID2Topic(\n this.props.customObj._id,\n `${this.props.oContext.adapterName}.${this.props.oContext.instance}`,\n );\n this.setState({ value: topic });\n } else {\n this.setState({ value: value || '' });\n }\n }\n\n renderItem(error: string, disabled: boolean /* , defaultValue */): JSX.Element {\n return (\n <TextField\n variant=\"standard\"\n fullWidth\n slotProps={{\n htmlInput: {\n maxLength: this.props.schema.maxLength || this.props.schema.max || undefined,\n },\n }}\n value={this.state.value}\n error={!!error}\n disabled={disabled}\n placeholder={this.getText(this.props.schema.placeholder)}\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 onChange={e => {\n const value = e.target.value;\n this.setState({ value }, () => this.onChange(this.props.attr, value));\n }}\n />\n );\n }\n}\n\nexport default ConfigTopic;\n"]}
|