@@ -28,6 +28,9 @@ import { toast } from 'react-toastify';
28
28
import { strings , interpolate } from "../../common/strings" ;
29
29
import clone from "rfdc" ;
30
30
import _ from "lodash" ;
31
+ import { decryptProject } from "../../common/utils" ;
32
+ import { StorageProviderFactory } from "../../providers/storage/storageProviderFactory" ;
33
+ import { constants } from "../../common/constants" ;
31
34
32
35
/**
33
36
* Actions to be performed in relation to projects
@@ -88,9 +91,9 @@ export function loadProject(project: IProject, sharedToken?: ISecurityToken):
88
91
throw new AppError ( ErrorCode . SecurityTokenNotFound , "Security Token Not Found" ) ;
89
92
}
90
93
const loadedProject = await projectService . load ( project , projectToken ) ;
91
-
92
- dispatch ( loadProjectAction ( loadedProject ) ) ;
93
- return loadedProject ;
94
+ const schemaUpdatedProject = await AssetService . checkAndUpdateSchema ( loadedProject ) ;
95
+ dispatch ( loadProjectAction ( schemaUpdatedProject ) ) ;
96
+ return schemaUpdatedProject ;
94
97
} ;
95
98
}
96
99
@@ -104,25 +107,22 @@ export function saveProject(project: IProject, saveTags?: boolean, updateTagsFro
104
107
project = Object . assign ( { } , project ) ;
105
108
const appState = getState ( ) ;
106
109
const projectService = new ProjectService ( ) ;
107
-
108
110
if ( projectService . isDuplicate ( project , appState . recentProjects ) ) {
109
111
throw new AppError ( ErrorCode . ProjectDuplicateName , `Project with name '${ project . name }
110
112
already exists with the same target connection '${ project . sourceConnection . name } '` ) ;
111
113
}
112
-
113
- const projectToken = appState . appSettings . securityTokens
114
- . find ( ( securityToken ) => securityToken . name === project . securityToken ) ;
115
-
116
- if ( ! projectToken ) {
117
- throw new AppError ( ErrorCode . SecurityTokenNotFound , "Security Token Not Found" ) ;
114
+ const findMatchToken = ( tokens , project ) => {
115
+ const tokenFinded = tokens . find ( ( securityToken ) => securityToken . name === project . securityToken ) ;
116
+ if ( ! tokenFinded ) {
117
+ throw new AppError ( ErrorCode . SecurityTokenNotFound , "Security Token Not Found" ) ;
118
+ }
119
+ return tokenFinded ;
118
120
}
119
121
122
+ const projectToken = findMatchToken ( appState . appSettings . securityTokens , project ) ;
120
123
const savedProject = await projectService . save ( project , projectToken , saveTags , updateTagsFromFiles ) ;
121
124
dispatch ( saveProjectAction ( savedProject ) ) ;
122
-
123
- // Reload project after save actions
124
- await loadProject ( savedProject ) ( dispatch , getState ) ;
125
-
125
+ dispatch ( loadProjectAction ( await decryptProject ( savedProject , projectToken ) ) ) ;
126
126
return savedProject ;
127
127
} ;
128
128
}
@@ -215,14 +215,24 @@ export function deleteAsset(project: IProject, assetMetadata: IAssetMetadata): (
215
215
* Gets assets from project, dispatches load assets action and returns assets
216
216
* @param project - Project from which to load assets
217
217
*/
218
- export function loadAssets ( project : IProject ) : ( dispatch : Dispatch ) => Promise < IAsset [ ] > {
219
- return async ( dispatch : Dispatch ) => {
218
+ export function loadAssets ( project : IProject ) : ( dispatch : Dispatch , getState : ( ) => IApplicationState ) => Promise < IAsset [ ] > {
219
+ return async ( dispatch : Dispatch , getState : ( ) => IApplicationState ) => {
220
220
const assetService = new AssetService ( project ) ;
221
221
const assets = await assetService . getAssets ( ) ;
222
+ let shouldAssetsUpdate = false ;
223
+ for ( const asset of assets ) {
224
+ if ( AssetService . shouldSchemaUpdate ( asset . schema ) ) {
225
+ shouldAssetsUpdate = true ;
226
+ asset . schema = constants . labelsSchema ;
227
+ }
228
+ }
222
229
if ( ! areAssetsEqual ( assets , project . assets ) ) {
223
230
dispatch ( loadProjectAssetsAction ( assets ) ) ;
224
231
}
225
-
232
+ if ( shouldAssetsUpdate ) {
233
+ const { currentProject} = getState ( ) ;
234
+ await AssetService . checkAndUpdateSchema ( currentProject ) ;
235
+ }
226
236
return assets ;
227
237
} ;
228
238
}
0 commit comments