From cf563bd1a463429809ea6fbeafcd984be6a501d6 Mon Sep 17 00:00:00 2001 From: jankyzhang Date: Thu, 17 Oct 2019 12:31:00 +0800 Subject: [PATCH] Avoid unnecessary requests --- src/api/templates.js | 10 ++++-- src/reducers/templates.js | 33 +++++++++++++++---- .../metadata/components/MetaDataPanel.jsx | 4 +-- 3 files changed, 37 insertions(+), 10 deletions(-) diff --git a/src/api/templates.js b/src/api/templates.js index e883989bb..a5e87ea6e 100644 --- a/src/api/templates.js +++ b/src/api/templates.js @@ -93,13 +93,19 @@ export function updateProjectsMetadata(metadataId, type, data) { return axios.patch(`${PROJECTS_API_URL}/v4/projects/metadata/${type}/${key}/versions/${version}`, { param: tmpdata }) - .then(resp => _.get(resp.data, 'result.content', {})) + .then(resp => { + const versionMetadata = _.get(resp.data, 'result.content', {}) + return { type, versionMetadata } + }) } else { const path = type !== 'milestoneTemplates' ? 'projects' : 'timelines' return axios.patch(`${PROJECTS_API_URL}/v4/${path}/metadata/${type}/${metadataId}`, { param: data }) - .then(resp => _.get(resp.data, 'result.content', {})) + .then(resp => { + const metadata = _.get(resp.data, 'result.content', {}) + return { type, metadata } + }) } } diff --git a/src/reducers/templates.js b/src/reducers/templates.js index 1589787b0..00dffd0f4 100644 --- a/src/reducers/templates.js +++ b/src/reducers/templates.js @@ -197,14 +197,35 @@ export default function(state = initialState, action) { metadata: action.payload, error: false, } - case UPDATE_PROJECTS_METADATA_SUCCESS: + case UPDATE_PROJECTS_METADATA_SUCCESS: { Alert.success('PROJECT METADATA UPDATE SUCCESS') - return { - ...state, - isLoading: false, - metadata: action.payload, - error: false, + const type = action.payload.type + const keys = ['form', 'planConfig', 'priceConfig'] + if (keys.includes(type)) { + return { + ...state, + isLoading: false, + metadataRevisions: _.orderBy([...state.metadataRevisions, action.payload.versionMetadata], ['updatedAt'], ['desc']), + versionMetadata: action.payload.versionMetadata, + planConfigs: type === 'planConfig' ? _.orderBy(_.concat(_.differenceBy(state.planConfigs, [action.payload.versionMetadata], 'key'), action.payload.versionMetadata), ['updatedAt'], ['desc']) : state.planConfigs, + forms: type === 'form' ? _.orderBy(_.concat(_.differenceBy(state.forms, [action.payload.versionMetadata], 'key'), action.payload.versionMetadata), ['updatedAt'], ['desc']) : state.forms, + priceConfigs: type === 'priceConfig' ? _.orderBy(_.concat(_.differenceBy(state.priceConfigs, [action.payload.versionMetadata], 'key'), action.payload.versionMetadata), ['updatedAt'], ['desc']) : state.priceConfigs, + error: false, + } + } else { + return { + ...state, + isLoading: false, + metadata: action.payload.metadata, + error: false, + projectTemplates: type === 'projectTemplates' ? _.orderBy(_.concat(_.differenceBy(state.projectTemplates, [action.payload.metadata], 'key'), action.payload.metadata), ['updatedAt'], ['desc']) : state.projectTemplates, + projectTypes: type === 'projectTypes' ? _.orderBy(_.concat(_.differenceBy(state.projectTypes, [action.payload.metadata], 'key'), action.payload.metadata), ['updatedAt'], ['desc']) : state.projectTypes, + productTemplates: type === 'productTemplates' ? _.orderBy(_.concat(_.differenceBy(state.productTemplates, [action.payload.metadata], 'id'), action.payload.metadata), ['updatedAt'], ['desc']) : state.productTemplates, + productCategories: type === 'productCategories' ? _.orderBy(_.concat(_.differenceBy(state.productCategories, [action.payload.metadata], 'key'), action.payload.metadata), ['updatedAt'], ['desc']) : state.productCategories, + milestoneTemplates: type === 'milestoneTemplates' ? _.orderBy(_.concat(_.differenceBy(state.milestoneTemplates, [action.payload.metadata], 'id'), action.payload.metadata), ['updatedAt'], ['desc']) : state.milestoneTemplates, + } } + } case REMOVE_PROJECTS_METADATA_SUCCESS: case REMOVE_PRODUCT_CATEGORY_SUCCESS: case REMOVE_PROJECT_TYPE_SUCCESS: diff --git a/src/routes/metadata/components/MetaDataPanel.jsx b/src/routes/metadata/components/MetaDataPanel.jsx index 0136ea035..75d46544b 100644 --- a/src/routes/metadata/components/MetaDataPanel.jsx +++ b/src/routes/metadata/components/MetaDataPanel.jsx @@ -553,9 +553,9 @@ class MetaDataPanel extends React.Component { .then((res) => { if (!res.error) { if (metadataWithVersion && this.props.routerParams.version) { - this.props.getProjectMetadataWithVersion(metadataResource, payload.key, payload.version) + this.setState({ metadata: res.action.payload.versionMetadata }) } else{ - this.props.loadProjectsMetadata() + this.setState({ metadata: res.action.payload.metadata }) } } })