Skip to content

Commit

Permalink
another try: server-side returns last_updated_time in save_dash response
Browse files Browse the repository at this point in the history
  • Loading branch information
Grace committed Nov 9, 2020
1 parent 6bc8339 commit 89dec86
Show file tree
Hide file tree
Showing 4 changed files with 23 additions and 14 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -131,19 +131,22 @@ describe('dashboardState reducer', () => {
expect(result.updatedColorScheme).toBe(false);
});

it('should set lastModifiedTime on save', () => {
const lastModifiedTime = Math.round(new Date().getTime() / 1000);
it('should reset lastModifiedTime on save', () => {
const initTime = new Date().getTime() / 1000;
dashboardStateReducer(
{
lastModifiedTime,
lastModifiedTime: initTime,
},
{},
);

const lastModifiedTime = Math.round(new Date().getTime() / 1000);
expect(
dashboardStateReducer({ hasUnsavedChanges: true }, { type: ON_SAVE })
.lastModifiedTime,
).toBeGreaterThanOrEqual(lastModifiedTime);
dashboardStateReducer(
{ hasUnsavedChanges: true },
{ type: ON_SAVE, lastModifiedTime },
).lastModifiedTime,
).toBeGreaterThanOrEqual(initTime);
});

it('should clear the focused filter field', () => {
Expand Down
10 changes: 5 additions & 5 deletions superset-frontend/src/dashboard/actions/dashboardState.js
Original file line number Diff line number Diff line change
Expand Up @@ -152,18 +152,18 @@ export function onChange() {
}

export const ON_SAVE = 'ON_SAVE';
export function onSave() {
return { type: ON_SAVE };
export function onSave(lastModifiedTime) {
return { type: ON_SAVE, lastModifiedTime };
}

export const SET_REFRESH_FREQUENCY = 'SET_REFRESH_FREQUENCY';
export function setRefreshFrequency(refreshFrequency, isPersistent = false) {
return { type: SET_REFRESH_FREQUENCY, refreshFrequency, isPersistent };
}

export function saveDashboardRequestSuccess() {
export function saveDashboardRequestSuccess(lastModifiedTime) {
return dispatch => {
dispatch(onSave());
dispatch(onSave(lastModifiedTime));
// clear layout undo history
dispatch(UndoActionCreators.clearHistory());
};
Expand Down Expand Up @@ -199,7 +199,7 @@ export function saveDashboardRequest(data, id, saveType) {
},
})
.then(response => {
dispatch(saveDashboardRequestSuccess());
dispatch(saveDashboardRequestSuccess(response.json.last_modified_time));
dispatch(addSuccessToast(t('This dashboard was saved successfully.')));
return response;
})
Expand Down
4 changes: 2 additions & 2 deletions superset-frontend/src/dashboard/reducers/dashboardState.js
Original file line number Diff line number Diff line change
Expand Up @@ -106,8 +106,8 @@ export default function dashboardStateReducer(state = {}, action) {
maxUndoHistoryExceeded: false,
editMode: false,
updatedColorScheme: false,
// server-side compare last_modified_time in second level
lastModifiedTime: Math.round(new Date().getTime() / 1000),
// server-side returns last_modified_time for latest change
lastModifiedTime: action.lastModifiedTime,
};
},
[SET_UNSAVED_CHANGES]() {
Expand Down
8 changes: 7 additions & 1 deletion superset/views/core.py
Original file line number Diff line number Diff line change
Expand Up @@ -1085,8 +1085,14 @@ def save_dash( # pylint: disable=no-self-use
DashboardDAO.set_dash_metadata(dash, data)
session.merge(dash)
session.commit()

# get updated changed_on
dash = session.query(Dashboard).get(dashboard_id)
last_modified_time = dash.changed_on.replace(microsecond=0).timestamp()
session.close()
return json_success(json.dumps({"status": "SUCCESS"}))
return json_success(
json.dumps({"status": "SUCCESS", "last_modified_time": last_modified_time,})
)

@api
@has_access_api
Expand Down

0 comments on commit 89dec86

Please sign in to comment.