+ saveDirtyDescriptorsToSessionStorage() {
+ const dirtyCatalogs = this.catalogs.reduce((result, catalog) => {
+ const dirtyDescriptors = catalog.descriptors.reduce((result, descriptor) => {
+ if (descriptor.uiState.modified && !descriptor.uiState.deleted) {
+ result.push(descriptor);
+ }
+ return result;
+ }, []);
+ if (dirtyDescriptors.length) {
+ let newCatalog = Object.assign({}, catalog);
+ newCatalog.descriptors = dirtyDescriptors;
+ result.push(newCatalog);
+ }
+ return result;
+ }, []);
+ window.sessionStorage.setItem(this.userProfile.userId + '@' + this.userProfile.domain, JSON.stringify({
+ dirtyCatalogs
+ }));
+ }
+
+ mergeDirtyDescriptorsFromSessionStorage(catalogs) {
+ let userProfileDirtyCatalogs = window.sessionStorage.getItem(this.userProfile.userId + '@' + this.userProfile.domain);
+ let dirtyCatalogs = [];
+ if (userProfileDirtyCatalogs) {
+ dirtyCatalogs = JSON.parse(userProfileDirtyCatalogs).dirtyCatalogs;
+ }
+ dirtyCatalogs.forEach((dirtyCatalog) => {
+ let catalog = catalogs.find((c) => c.id === dirtyCatalog.id);
+ dirtyCatalog.descriptors.forEach((dirtyDescriptor, index) => {
+ let descriptor = catalog.descriptors.find((d) => d.id === dirtyDescriptor.id);
+ if (descriptor) {
+ this.addSnapshot(descriptor);
+ _merge(descriptor, dirtyDescriptor);
+ } else {
+ dirtyCatalog.descriptors.splice(index, 1);
+ this.queueDirtyCheck();
+ }
+ })
+ });
+ this.isNotMergedWithSessionStorage = false;
+ return catalogs;
+ }
+
+ setUserProfile = (userProfile) => {
+ if (!this.userProfile) {
+ this.userProfile = userProfile;
+ if (this.catalogs.length) {
+ const catalogs = this.mergeDirtyDescriptorsFromSessionStorage(this.catalogs);
+ this.setState({ catalogs });
+ } else {
+ this.isNotMergedWithSessionStorage = true;
+ }
+ }
+ }
+