53 lines
2.0 KiB
JavaScript
53 lines
2.0 KiB
JavaScript
'use strict';
|
|
|
|
// Isomorphic script that runs in the browser and on the server for SSR (needs
|
|
// browser context) that renders Hydrogen to the `document.body`.
|
|
//
|
|
// Data is passed in via `window.matrixPublicArchiveContext`
|
|
|
|
const assert = require('matrix-public-archive-shared/lib/assert');
|
|
|
|
const MatrixPublicArchiveURLCreator = require('matrix-public-archive-shared/lib/url-creator');
|
|
|
|
const RoomDirectoryView = require('matrix-public-archive-shared/views/RoomDirectoryView');
|
|
const RoomDirectoryViewModel = require('matrix-public-archive-shared/viewmodels/RoomDirectoryViewModel');
|
|
|
|
const rooms = window.matrixPublicArchiveContext.rooms;
|
|
assert(rooms);
|
|
const nextPaginationToken = window.matrixPublicArchiveContext.nextPaginationToken;
|
|
const prevPaginationToken = window.matrixPublicArchiveContext.prevPaginationToken;
|
|
const searchTerm = window.matrixPublicArchiveContext.searchTerm;
|
|
const config = window.matrixPublicArchiveContext.config;
|
|
assert(config);
|
|
assert(config.matrixServerUrl);
|
|
assert(config.matrixServerName);
|
|
assert(config.basePath);
|
|
|
|
const matrixPublicArchiveURLCreator = new MatrixPublicArchiveURLCreator(config.basePath);
|
|
|
|
async function mountHydrogen() {
|
|
console.log('Mounting Hydrogen...');
|
|
console.time('Completed mounting Hydrogen');
|
|
const appElement = document.querySelector('#app');
|
|
|
|
const roomDirectoryViewModel = new RoomDirectoryViewModel({
|
|
homeserverUrl: config.matrixServerUrl,
|
|
homeserverName: config.matrixServerName,
|
|
matrixPublicArchiveURLCreator,
|
|
rooms,
|
|
searchTerm,
|
|
nextPaginationToken,
|
|
prevPaginationToken,
|
|
});
|
|
|
|
const view = new RoomDirectoryView(roomDirectoryViewModel);
|
|
|
|
appElement.replaceChildren(view.mount());
|
|
console.timeEnd('Completed mounting Hydrogen');
|
|
}
|
|
|
|
// N.B.: When we run this in a virtual machine (`vm`), it will return the last
|
|
// statement. It's important to leave this as the last statement so we can await
|
|
// the promise it returns and signal that all of the async tasks completed.
|
|
mountHydrogen();
|