]> Untitled Git - lemmy-ui.git/blobdiff - src/server/index.tsx
Somewhat working webpack. Sponsors and communities pages done.
[lemmy-ui.git] / src / server / index.tsx
index f100c979e18ee90aaa293b98e6ed9779828bee8f..3a698e90d54630a76c8cf15f461fe8a1767c9bd9 100644 (file)
@@ -1,28 +1,55 @@
-import cookieParser = require('cookie-parser');
-import * as serialize from 'serialize-javascript';
-import * as express from 'express';
+// import cookieParser = require('cookie-parser');
+import serialize from 'serialize-javascript';
+import express from 'express';
 import { StaticRouter } from 'inferno-router';
 import { renderToString } from 'inferno-server';
-import path = require('path');
-import App from '../client/components/App/App';
+import { matchPath } from 'inferno-router';
+import path from 'path';
+import { App } from '../shared/components/app';
+import { IsoData } from '../shared/interfaces';
+import { routes } from '../shared/routes';
+import IsomorphicCookie from 'isomorphic-cookie';
+import { lemmyHttp, setAuth } from '../shared/utils';
+import { GetSiteForm } from 'lemmy-js-client';
 const server = express();
 const port = 1234;
 
 server.use(express.json());
 server.use(express.urlencoded({ extended: false }));
-server.use('/static', express.static(path.resolve('./dist/client')));
+server.use('/assets', express.static(path.resolve('./src/assets')));
+server.use('/static', express.static(path.resolve('./dist')));
 
-server.use(cookieParser());
+// server.use(cookieParser());
 
-server.get('/*', (req, res) => {
+server.get('/*', async (req, res) => {
+  const activeRoute = routes.find(route => matchPath(req.url, route)) || {};
   const context = {} as any;
-  const isoData = {
-    name: 'fishing sux',
+  let auth: string = IsomorphicCookie.load('jwt', req);
+
+  let getSiteForm: GetSiteForm = {};
+  setAuth(getSiteForm, auth);
+
+  let promises: Promise<any>[] = [];
+
+  let siteData = lemmyHttp.getSite(getSiteForm);
+  promises.push(siteData);
+  if (activeRoute.fetchInitialData) {
+    promises.push(...activeRoute.fetchInitialData(auth, req.path));
+  }
+
+  let resolver = await Promise.all(promises);
+
+  let isoData: IsoData = {
+    path: req.path,
+    site: resolver[0],
+    routeData: resolver.slice(1, resolver.length),
   };
 
+  console.log(activeRoute.path);
+
   const wrapper = (
-    <StaticRouter location={req.url} context={context}>
-      <App name={isoData.name} />
+    <StaticRouter location={req.url} context={isoData}>
+      <App site={isoData.site} />
     </StaticRouter>
   );
   if (context.url) {
@@ -30,17 +57,29 @@ server.get('/*', (req, res) => {
   }
 
   res.send(`
-   <!doctype html>
-   <html>
-       <head>
-       <title>My Universal App</title>
-       <script>window.isoData = ${serialize(isoData)}</script>      
-       </head>
-       <body>
-           <div id='root'>${renderToString(wrapper)}</div>
-           <script src='./static/bundle.js'></script>
-       </body>
-   </html>
+           <!DOCTYPE html>
+           <html lang="en">
+           <head>
+           <script>window.isoData = ${serialize(isoData)}</script>      
+
+           <!-- Required meta tags -->
+           <meta name="Description" content="Lemmy">
+           <meta charset="utf-8">
+           <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+
+           <!-- Icons -->
+           <link rel="shortcut icon" type="image/svg+xml" href="/assets/favicon.svg" />
+           <!-- <link rel="apple-touch-icon" href="/assets/apple-touch-icon.png" /> -->
+
+           <!-- Styles -->
+           <link rel="stylesheet" type="text/css" href="/static/styles/styles.css" />
+           </head>
+
+           <body>
+             <div id='root'>${renderToString(wrapper)}</div>
+             <script src='/static/js/client.js'></script>
+           </body>
+         </html>
 `);
 });
 let Server = server.listen(port, () => {