diff --git a/server.ts b/server.ts
index ba0c8fd7b2..3e10677a8b 100644
--- a/server.ts
+++ b/server.ts
@@ -37,7 +37,6 @@ import { json } from 'body-parser';
import { existsSync, readFileSync } from 'fs';
import { join } from 'path';
-import { APP_BASE_HREF } from '@angular/common';
import { enableProdMode } from '@angular/core';
import { ngExpressEngine } from '@nguniversal/express-engine';
@@ -65,7 +64,7 @@ const DIST_FOLDER = join(process.cwd(), 'dist/browser');
// Set path fir IIIF viewer.
const IIIF_VIEWER = join(process.cwd(), 'dist/iiif');
-const indexHtml = existsSync(join(DIST_FOLDER, 'index.html')) ? 'index.html' : 'index';
+const indexHtml = join(DIST_FOLDER, 'index.html');
const cookieParser = require('cookie-parser');
@@ -258,7 +257,6 @@ function serverSideRender(req, res, sendToUser: boolean = true) {
baseUrl: environment.ui.nameSpace,
originUrl: environment.ui.baseUrl,
requestUrl: req.originalUrl,
- providers: [{ provide: APP_BASE_HREF, useValue: req.baseUrl }]
}, (err, data) => {
if (hasNoValue(err) && hasValue(data)) {
// save server side rendered page to cache (if any are enabled)
@@ -292,13 +290,7 @@ function serverSideRender(req, res, sendToUser: boolean = true) {
* @param res current response
*/
function clientSideRender(req, res) {
- res.render(indexHtml, {
- req,
- providers: [{
- provide: APP_BASE_HREF,
- useValue: req.baseUrl
- }]
- });
+ res.sendFile(indexHtml);
}
diff --git a/src/index.csr.html b/src/index.csr.html
deleted file mode 100644
index b1ef4343b1..0000000000
--- a/src/index.csr.html
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-
-
-
-
- DSpace
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/main.browser.ts b/src/main.browser.ts
index d5efe828c3..68debfb355 100644
--- a/src/main.browser.ts
+++ b/src/main.browser.ts
@@ -2,21 +2,27 @@ import 'zone.js';
import 'reflect-metadata';
import 'core-js/es/reflect';
-import { enableProdMode } from '@angular/core';
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { load as loadWebFont } from 'webfontloader';
-import { hasValue } from './app/shared/empty.util';
-
import { BrowserAppModule } from './modules/app/browser-app.module';
import { environment } from './environments/environment';
import { AppConfig } from './config/app-config.interface';
import { extendEnvironmentWithAppConfig } from './config/config.util';
+import { enableProdMode } from '@angular/core';
const bootstrap = () => platformBrowserDynamic()
.bootstrapModule(BrowserAppModule, {});
+/**
+ * We use this to determine have been serven SSR HTML or not.
+ *
+ * At this point, {@link environment} may not be in sync with the configuration.
+ * Therefore, we cannot depend on it to determine how to bootstrap the app.
+ */
+const hasTransferState = document.querySelector('script#dspace-angular-state') !== null;
+
const main = () => {
// Load fonts async
// https://github.com/typekit/webfontloader#configuration
@@ -30,22 +36,23 @@ const main = () => {
enableProdMode();
}
- if (hasValue(environment.universal) && environment.universal.preboot) {
+ if (hasTransferState) {
+ // Configuration will be taken from transfer state during initialization
return bootstrap();
} else {
+ // Configuration must be fetched explicitly
return fetch('assets/config.json')
.then((response) => response.json())
.then((appConfig: AppConfig) => {
// extend environment with app config for browser when not prerendered
extendEnvironmentWithAppConfig(environment, appConfig);
-
return bootstrap();
});
}
};
// support async tag or hmr
-if (document.readyState === 'complete' && hasValue(environment.universal) && !environment.universal.preboot) {
+if (document.readyState === 'complete' && !hasTransferState) {
main();
} else {
document.addEventListener('DOMContentLoaded', main);