diff --git a/frontend/src/Store/Actions/Creators/createSaveProviderHandler.js b/frontend/src/Store/Actions/Creators/createSaveProviderHandler.js index 89a8639cd..da5cb4d84 100644 --- a/frontend/src/Store/Actions/Creators/createSaveProviderHandler.js +++ b/frontend/src/Store/Actions/Creators/createSaveProviderHandler.js @@ -6,6 +6,7 @@ import getProviderState from 'Utilities/State/getProviderState'; import { removeItem, set, updateItem } from '../baseActions'; const abortCurrentRequests = {}; +let lastSaveData = null; export function createCancelSaveProviderHandler(section) { return function(getState, payload, dispatch) { @@ -27,27 +28,33 @@ function createSaveProviderHandler(section, url, options = {}, removeStale = fal } = payload; const saveData = Array.isArray(id) ? id.map((x) => getProviderState({ id: x, ...otherPayload }, getState, section)) : getProviderState({ id, ...otherPayload }, getState, section); + const requestUrl = id ? `${url}/${id}` : url; + const params = { ...queryParams }; + + // If the user is re-saving the same provider without changes + // force it to be saved. Only applies to editing existing providers. + + if (id && _.isEqual(saveData, lastSaveData)) { + params.forceSave = true; + } + + lastSaveData = saveData; const ajaxOptions = { - url: `${url}?${$.param(queryParams, true)}`, - method: 'POST', + url: `${requestUrl}?${$.param(params, true)}`, + method: id ? 'PUT' : 'POST', contentType: 'application/json', dataType: 'json', data: JSON.stringify(saveData) }; - if (id) { - ajaxOptions.method = 'PUT'; - if (!Array.isArray(id)) { - ajaxOptions.url = `${url}/${id}?${$.param(queryParams, true)}`; - } - } - const { request, abortRequest } = createAjaxRequest(ajaxOptions); abortCurrentRequests[section] = abortRequest; request.done((data) => { + lastSaveData = null; + if (!Array.isArray(data)) { data = [data]; }