Skip to content

Commit cc6522c

Browse files
committed
Store callback Output value in persistence storage
1 parent a4bdc7d commit cc6522c

File tree

3 files changed

+27
-46
lines changed

3 files changed

+27
-46
lines changed

dash/dash-renderer/src/actions/index.js

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import {once} from 'ramda';
1+
import {once, path} from 'ramda';
22
import {createAction} from 'redux-actions';
33
import {addRequestedCallbacks} from './callbacks';
44
import {getAppState} from '../reducers/constants';
@@ -7,6 +7,7 @@ import cookie from 'cookie';
77
import {validateCallbacksToLayout} from './dependencies';
88
import {includeObservers, getLayoutCallbacks} from './dependencies_ts';
99
import {computePaths, getPath} from './paths';
10+
import {recordUiEdit} from '../persistence';
1011

1112
export const onError = createAction(getAction('ON_ERROR'));
1213
export const setAppLifecycle = createAction(getAction('SET_APP_LIFECYCLE'));
@@ -17,10 +18,20 @@ export const setHooks = createAction(getAction('SET_HOOKS'));
1718
export const setLayout = createAction(getAction('SET_LAYOUT'));
1819
export const setPaths = createAction(getAction('SET_PATHS'));
1920
export const setRequestQueue = createAction(getAction('SET_REQUEST_QUEUE'));
20-
export const updateProps = createAction(getAction('ON_PROP_CHANGE'));
2121
export const insertComponent = createAction(getAction('INSERT_COMPONENT'));
2222
export const removeComponent = createAction(getAction('REMOVE_COMPONENT'));
2323

24+
// Change the variable name of the action
25+
export const onPropChange = createAction(getAction('ON_PROP_CHANGE'));
26+
27+
export function updateProps(payload) {
28+
return (dispatch, getState) => {
29+
const component = path(payload.itempath, getState().layout);
30+
recordUiEdit(component, payload.props, dispatch);
31+
dispatch(onPropChange(payload));
32+
};
33+
}
34+
2435
export const addComponentToLayout = payload => (dispatch, getState) => {
2536
const {paths} = getState();
2637
dispatch(insertComponent(payload));

dash/dash-renderer/src/persistence.js

Lines changed: 14 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -501,46 +501,21 @@ export function prunePersistence(layout, newProps, dispatch) {
501501
depersistedProps = mergeRight(props, update);
502502
}
503503

504-
if (finalPersistence) {
504+
if (finalPersistence && persistenceChanged) {
505505
const finalStorage = getStore(finalPersistenceType, dispatch);
506-
507-
if (persistenceChanged) {
508-
// apply new persistence
509-
forEach(
510-
persistedProp =>
511-
modProp(
512-
getValsKey(id, persistedProp, finalPersistence),
513-
finalStorage,
514-
element,
515-
depersistedProps,
516-
persistedProp,
517-
update
518-
),
519-
filter(notInNewProps, finalPersistedProps)
520-
);
521-
}
522-
523-
// now the main point - clear any edit of a prop that changed
524-
// note that this is independent of the new prop value.
525-
const transforms = element.persistenceTransforms || {};
526-
for (const propName in newProps) {
527-
const propTransforms = transforms[propName];
528-
if (propTransforms) {
529-
for (const propPart in propTransforms) {
530-
finalStorage.removeItem(
531-
getValsKey(
532-
id,
533-
`${propName}.${propPart}`,
534-
finalPersistence
535-
)
536-
);
537-
}
538-
} else {
539-
finalStorage.removeItem(
540-
getValsKey(id, propName, finalPersistence)
541-
);
542-
}
543-
}
506+
// apply new persistence
507+
forEach(
508+
persistedProp =>
509+
modProp(
510+
getValsKey(id, persistedProp, finalPersistence),
511+
finalStorage,
512+
element,
513+
depersistedProps,
514+
persistedProp,
515+
update
516+
),
517+
filter(notInNewProps, finalPersistedProps)
518+
);
544519
}
545520
return persistenceChanged ? mergeRight(newProps, update) : newProps;
546521
}

dash/dash-renderer/src/wrapper/DashWrapper.tsx

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ import {DashLayoutPath, UpdatePropsPayload} from '../types/component';
2323
import {DashConfig} from '../config';
2424
import {notifyObservers, onError, updateProps} from '../actions';
2525
import {getWatchedKeys, stringifyId} from '../actions/dependencies';
26-
import {recordUiEdit} from '../persistence';
2726
import {
2827
createElement,
2928
getComponentLayout,
@@ -131,10 +130,6 @@ function DashWrapper({
131130
const watchedKeys = getWatchedKeys(id, keys(changedProps), graphs);
132131

133132
batch(() => {
134-
// setProps here is triggered by the UI - record these changes
135-
// for persistence
136-
recordUiEdit(renderComponent, newProps, dispatch);
137-
138133
// Only dispatch changes to Dash if a watched prop changed
139134
if (watchedKeys.length) {
140135
dispatch(

0 commit comments

Comments
 (0)