Skip to content

Commit

Permalink
fix #121
Browse files Browse the repository at this point in the history
  • Loading branch information
foxriver76 committed Nov 20, 2023
1 parent 69b0425 commit 4dd1138
Show file tree
Hide file tree
Showing 5 changed files with 65 additions and 54 deletions.
1 change: 0 additions & 1 deletion src/src/App.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -1652,7 +1652,6 @@ class App extends Runtime {
classes={{}}
selectedView={this.state.selectedView}
userGroups={this.state.userGroups}
project={store.getState().visProject}
changeProject={this.changeProject}
openedViews={store.getState().visProject.___settings.openedViews}
projectName={this.state.projectName}
Expand Down
6 changes: 5 additions & 1 deletion src/src/Attributes/Widget/WidgetBindingField.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import {
} from '@mui/icons-material';
import { I18n, Utils, SelectID } from '@iobroker/adapter-react-v5';
import VisFormatUtils from '../../Vis/visFormatUtils';
import { store, recalculateFields } from '../../Store';

const styles = () => ({
dialog: {
Expand Down Expand Up @@ -779,7 +780,10 @@ class WidgetBindingField extends Component {
disabled={this.state.editValue === this.state.value}
color="primary"
startIcon={<Check />}
onClick={() => this.setState({ showEditBindingDialog: false }, () => this.onChange(this.state.editValue))}
onClick={() => {
this.setState({ showEditBindingDialog: false }, () => this.onChange(this.state.editValue));
store.dispatch(recalculateFields(true));
}}
>
{I18n.t('Apply')}
</Button>
Expand Down
48 changes: 27 additions & 21 deletions src/src/Attributes/Widget/WidgetField.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ import {
import TextDialog from './TextDialog';
import MaterialIconSelector from '../../Components/MaterialIconSelector';
import { findWidgetUsages } from '../../Vis/visUtils';
import { store, recalculateFields } from '../../Store';

const POSSIBLE_UNITS = ['px', '%', 'em', 'rem', 'vh', 'vw', 'vmin', 'vmax', 'ex', 'ch', 'cm', 'mm', 'in', 'pt', 'pc'];

Expand Down Expand Up @@ -294,7 +295,7 @@ const WidgetField = props => {
let onChangeTimeout;

const applyValue = newValues => {
const project = JSON.parse(JSON.stringify(props.project));
const project = JSON.parse(JSON.stringify(store.getState().visProject));
props.selectedWidgets.forEach((selectedWidget, i) => {
const value = Array.isArray(newValues) ? newValues[i] : newValues;

Expand All @@ -321,7 +322,7 @@ const WidgetField = props => {
}
if (field.onChange) {
field.onChange(field, JSON.parse(JSON.stringify(data)), newData => {
const _project = JSON.parse(JSON.stringify(props.project));
const _project = JSON.parse(JSON.stringify(store.getState().visProject));
_project[props.selectedView].widgets[selectedWidget].data = newData;
onChangeTimeout && clearTimeout(onChangeTimeout);
onChangeTimeout = setTimeout(() => {
Expand Down Expand Up @@ -435,7 +436,7 @@ const WidgetField = props => {
}, []);

if (askForUsage) {
const usages = findWidgetUsages(props.project, props.selectedView, askForUsage.wid);
const usages = findWidgetUsages(store.getState().visProject, props.selectedView, askForUsage.wid);
// show dialog with usage
return <Dialog
open={!0}
Expand Down Expand Up @@ -606,7 +607,10 @@ const WidgetField = props => {
checked={!!value}
classes={{ root: Utils.clsx(props.classes.fieldContent, props.classes.clearPadding) }}
size="small"
onChange={e => change(e.target.checked)}
onChange={e => {
store.dispatch(recalculateFields(true));
change(e.target.checked);
}}
/>
{typeof error === 'string' ? <FormHelperText>{I18n.t(error)}</FormHelperText> : null}
</FormControl>;
Expand Down Expand Up @@ -812,29 +816,29 @@ const WidgetField = props => {
// take widgets from all views
if (field.all) {
options = [];
Object.keys(props.project).forEach(view =>
props.project[view].widgets && Object.keys(props.project[view].widgets)
Object.keys(store.getState().visProject).forEach(view =>
store.getState().visProject[view].widgets && Object.keys(store.getState().visProject[view].widgets)
.filter(wid =>
(field.withGroups || !props.project[view].widgets[wid].grouped) &&
(field.withGroups || !store.getState().visProject[view].widgets[wid].grouped) &&
(field.withSelf || wid !== widgetId) &&
(!field.hideUsed || !props.project[view].widgets[wid].usedInView))
(!field.hideUsed || !store.getState().visProject[view].widgets[wid].usedInView))
.forEach(wid => options.push({
wid,
view,
tpl: props.project[view].widgets[wid].tpl,
name: props.project[view].widgets[wid].name,
tpl: store.getState().visProject[view].widgets[wid].tpl,
name: store.getState().visProject[view].widgets[wid].name,
})));
} else {
options = Object.keys(props.project[props.selectedView].widgets)
options = Object.keys(store.getState().visProject[props.selectedView].widgets)
.filter(wid =>
(field.withGroups || !props.project[props.selectedView].widgets[wid].grouped) &&
(field.withGroups || !store.getState().visProject[props.selectedView].widgets[wid].grouped) &&
(field.withSelf || wid !== widgetId) &&
(!field.hideUsed || !props.project[props.selectedView].widgets[wid].usedInView))
(!field.hideUsed || !store.getState().visProject[props.selectedView].widgets[wid].usedInView))
.map(wid => ({
wid,
view: props.selectedView,
tpl: props.project[props.selectedView].widgets[wid].tpl,
name: props.project[props.selectedView].widgets[wid].name,
tpl: store.getState().visProject[props.selectedView].widgets[wid].tpl,
name: store.getState().visProject[props.selectedView].widgets[wid].name,
}));
}
if (field.tpl) {
Expand Down Expand Up @@ -863,18 +867,20 @@ const WidgetField = props => {
if (field.type === 'widget' &&
field.checkUsage &&
e.target.value &&
props.project[props.selectedView].widgets[e.target.value]?.usedInWidget
store.getState().visProject[props.selectedView].widgets[e.target.value]?.usedInWidget
) {
// Show dialog
setAskForUsage({
wid: e.target.value,
cb: () => {
const project = modifyWidgetUsages(props.project, props.selectedView, e.target.value, props.selectedWidgets[0], field.name);
const project = modifyWidgetUsages(store.getState().visProject, props.selectedView, e.target.value, props.selectedWidgets[0], field.name);
props.changeProject(project);
store.dispatch(recalculateFields(true));
},
});
} else {
change(e.target.value);
store.dispatch(recalculateFields(true));
}
}}
renderValue={_value => {
Expand Down Expand Up @@ -919,7 +925,7 @@ const WidgetField = props => {
}

if (field.type === 'select-views') {
const options = getViewOptions(props.project, [], null, 0, true)
const options = getViewOptions(store.getState().visProject, [], null, 0, true)
.filter(option => option.type === 'folder' || option.view !== props.selectedView);

return <Select
Expand Down Expand Up @@ -1048,7 +1054,7 @@ const WidgetField = props => {
}

if (field.type === 'views') {
const options = getViewOptions(props.project);
const options = getViewOptions(store.getState().visProject);

return <Autocomplete
freeSolo
Expand Down Expand Up @@ -1157,7 +1163,7 @@ const WidgetField = props => {
field,
widget.data,
newData => {
const _project = JSON.parse(JSON.stringify(props.project));
const _project = JSON.parse(JSON.stringify(store.getState().visProject));
props.selectedWidgets.forEach(selectedWidget => {
Object.keys(newData)
.forEach(attr => {
Expand All @@ -1176,7 +1182,7 @@ const WidgetField = props => {
projectName,
instance,
adapterName,
views: props.project,
views: store.getState().visProject,
},
selectedView: props.selectedView,
selectedWidgets: props.selectedWidgets,
Expand Down
Loading

0 comments on commit 4dd1138

Please sign in to comment.