Loading overlay for componentView

This commit is contained in:
Mo Bitar
2018-12-12 16:21:19 -06:00
parent cd8e94104e
commit 1877412ebf
5 changed files with 60 additions and 36 deletions

View File

@@ -45,34 +45,49 @@ class ComponentView {
return; return;
} }
// activationHandlers may be called multiple times, design below to be idempotent $timeout(() => {
if(component.active) { $scope.handleActivation();
$scope.loading = true; })
let iframe = componentManager.iframeForComponent(component); },
if(iframe) {
// begin loading error handler. If onload isn't called in x seconds, display an error
if($scope.loadTimeout) { $timeout.cancel($scope.loadTimeout);}
$scope.loadTimeout = $timeout(() => {
if($scope.loading) {
$scope.issueLoading = true;
}
}, 3500);
iframe.onload = function(event) {
// console.log("iframe loaded for component", component.name, "cancelling load timeout", $scope.loadTimeout);
$timeout.cancel($scope.loadTimeout);
$scope.loading = false;
$scope.issueLoading = false;
componentManager.registerComponentWindow(component, iframe.contentWindow);
}.bind(this);
}
}
},
actionHandler: (component, action, data) => { actionHandler: (component, action, data) => {
if(action == "set-size") { if(action == "set-size") {
componentManager.handleSetSizeEvent(component, data); componentManager.handleSetSizeEvent(component, data);
} }
}} }
); });
$scope.handleActivation = function() {
// activationHandlers may be called multiple times, design below to be idempotent
let component = $scope.component;
if(!component.active) {
return;
}
$scope.loading = true;
let iframe = componentManager.iframeForComponent(component);
if(iframe) {
// begin loading error handler. If onload isn't called in x seconds, display an error
if($scope.loadTimeout) { $timeout.cancel($scope.loadTimeout);}
$scope.loadTimeout = $timeout(() => {
if($scope.loading) {
$scope.issueLoading = true;
}
}, 3500);
iframe.onload = (event) => {
// console.log("iframe loaded for component", component.name, "cancelling load timeout", $scope.loadTimeout);
$timeout.cancel($scope.loadTimeout);
componentManager.registerComponentWindow(component, iframe.contentWindow);
// Add small timeout to, as $scope.loading controls loading overlay,
// which is used to avoid flicker when enabling extensions while having an enabled theme
$timeout(() => {
$scope.loading = false;
$scope.issueLoading = false;
}, 5)
};
}
}
/* /*

View File

@@ -154,7 +154,7 @@ class ComponentManager {
if(component.isTheme() || !component.active || !component.window) { if(component.isTheme() || !component.active || !component.window) {
continue; continue;
} }
this.postActiveThemeToComponent(component); this.postActiveThemesToComponent(component);
} }
} }
@@ -162,14 +162,16 @@ class ComponentManager {
return this.componentsForArea("themes").filter((theme) => {return theme.active}); return this.componentsForArea("themes").filter((theme) => {return theme.active});
} }
postActiveThemeToComponent(component) { urlsForActiveThemes() {
var themes = this.getActiveThemes(); let themes = this.getActiveThemes();
var urls = themes.map((theme) => { return themes.map((theme) => {
return this.urlForComponent(theme); return this.urlForComponent(theme);
}) })
var data = { }
themes: urls
} postActiveThemesToComponent(component) {
let urls = this.urlsForActiveThemes();
let data = { themes: urls }
this.sendMessageToComponent(component, {action: "themes", data: data}) this.sendMessageToComponent(component, {action: "themes", data: data})
} }
@@ -805,10 +807,11 @@ class ComponentManager {
data: { data: {
uuid: component.uuid, uuid: component.uuid,
environment: isDesktopApplication() ? "desktop" : "web", environment: isDesktopApplication() ? "desktop" : "web",
platform: getPlatformString() platform: getPlatformString(),
activeThemeUrls: this.urlsForActiveThemes()
} }
}); });
this.postActiveThemeToComponent(component); this.postActiveThemesToComponent(component);
this.desktopManager.notifyComponentActivation(component); this.desktopManager.notifyComponentActivation(component);
} }

View File

@@ -60,8 +60,6 @@ class ThemeManager {
return; return;
} }
console.log("Activating theme", theme.uuid);
this.activeThemes.push(theme); this.activeThemes.push(theme);
var url = this.componentManager.urlForComponent(theme); var url = this.componentManager.urlForComponent(theme);
@@ -97,7 +95,6 @@ class ThemeManager {
return params; return params;
})); }));
let data = JSON.stringify(mapped); let data = JSON.stringify(mapped);
console.log("Caching themes", data);
return this.storageManager.setItem(ThemeManager.CachedThemesKey, data, StorageManager.Fixed); return this.storageManager.setItem(ThemeManager.CachedThemesKey, data, StorageManager.Fixed);
} }

View File

@@ -178,6 +178,13 @@
min-width: 100%; min-width: 100%;
} }
.loading-overlay {
position: absolute;
background-color: var(--sn-stylekit-editor-background-color);
width: 100%;
height: 100%;
}
iframe { iframe {
// We're disabling flex: 1; because on Firefox, it causes weird sizing issues with component stack items. // We're disabling flex: 1; because on Firefox, it causes weird sizing issues with component stack items.
// Not sure yet if totally required. // Not sure yet if totally required.

View File

@@ -111,3 +111,5 @@
"sandbox" => "allow-scripts allow-top-navigation-by-user-activation allow-popups allow-popups-to-escape-sandbox allow-same-origin allow-modals allow-forms", "sandbox" => "allow-scripts allow-top-navigation-by-user-activation allow-popups allow-popups-to-escape-sandbox allow-same-origin allow-modals allow-forms",
"data-component-id" => "{{component.uuid}}"} "data-component-id" => "{{component.uuid}}"}
Loading Loading
.loading-overlay{"ng-if" => "loading"}