224 Commits

Author SHA1 Message Date
d5c4be2ac1 Sort imports 2019-03-24 09:48:08 +08:00
3bcf9d646e Style team manager 2019-03-23 22:50:44 +08:00
77838e8e0c packages/comments-server: Migrate to mysql/mariadb
Currently mysql2 prints a warning every time a connection is
established. This should be fixed with soon:

https://github.com/typeorm/typeorm/pull/3753
2019-03-23 21:21:50 +08:00
93b048bc10 Add correlationId to SqlLogger 2019-03-23 21:16:20 +08:00
cc360afbbe Use Route params in TeamConnector.tsx (untested)
TODO: Fix SQLite3 complaining

https://github.com/typeorm/typeorm/issues/307
2019-03-23 17:14:22 +08:00
dca5374911 Use $typeorm in buildfile 2019-03-23 17:14:08 +08:00
3595a71cec Make TestUtils.tsx type safe
After spending almost two days in finding the issue, I ran across a few
TypeScript issues on their GitHub page:

- Loss of type inference converting to named parameters object
  https://github.com/Microsoft/TypeScript/issues/29791

- Parameter of a callback without a specified type next to it breaks code.
  https://github.com/Microsoft/TypeScript/issues/29799

- Convert to named parameters
  https://github.com/Microsoft/TypeScript/pull/30089

It became clear that TypeScript is unable to infer method return
arguments if a generic type is used more than once in generic parameter
object. Instead it returns {}.

For example, the following would fail on line 28:

    type Convert<A, B> = (value: A) => B

    interface IParams<C, D> {
      value: C
      convert: Convert<C, D>
      doConvert: (value: C, convert: this['convert']) => D
    }

    function doSomething<E, F>(value: E, convert: Convert<E, F>) {
      return convert(value)
    }

    function build<G, H>(params: IParams<G, H>) {
      const {value, convert} = params
      return params.doConvert(value, convert)
    }

    const outerResult = build({
      value: {
        a: {
          value: 1,
        },
        b: 'string',
      },
      convert: value => value.a,
      doConvert: (value, convert) => {
        const innerResult = doSomething(value, convert)
        innerResult.value
        console.log('innerResult:', innerResult)
        return innerResult
      },
    })

    console.log('outerResult:', outerResult)

With the message:

    Property 'value' does not exist on type '{}'.

If we replace parameter object IParams with regular ordered function
parameters, the compilation succeeds.

RyanCavanough (TS project lead) from GitHub commented:

> We don't have a separate pass to say "Go dive into the function and
> check to see if all its return statements don't rely on its parameter
> type" - doing so would be expensive in light of the fact that extremely
> few real-world functions actually behave like that in practice.

Source: https://github.com/Microsoft/TypeScript/issues/29799#issuecomment-464154659

These modifications bring type safety to TestUtils.tsx, and therefore
client-side tests of React components, while keeping almost the same
ease of use as before.
2019-03-23 15:48:52 +08:00
0af4aa9554 Fix broken RegisterForm.test.tsx 2019-03-22 14:46:09 +08:00
637b51382a Fix broken LoginForm.test.tsx 2019-03-22 14:43:43 +08:00
8f8c3b6c9c Refactor action definitions to type less 2019-03-22 13:26:58 +08:00
f2e44f477c Add better type checking when connecting components 2019-03-20 16:57:41 +05:00
150a02b344 Add team to @rondo/comments-client 2019-03-20 16:38:20 +05:00
8ae82c5065 Add ability to specify custom JSX in TestUtils 2019-03-20 15:28:05 +05:00
a628082a73 Add packages/client/src/team 2019-03-20 15:01:15 +05:00
9aff78b7a9 Add ability to search users by email
This might be a security concern, even though the user will have to
provide an email to retrieve user information.

This functionality is needed by Team management functionality because
expecting users to add a user by id is hard.

TODO: explore other options. Maybe add public profiles and request the
user to go to the profile to invite a user to team?
2019-03-20 13:23:47 +05:00
5317187a45 Add packages/common/src/indexBy.ts 2019-03-20 12:37:05 +05:00
7a0d44abe4 Return ITeam[] from /my/teams 2019-03-20 11:15:49 +05:00
46e56b7ad4 Add routes for managing users in teams 2019-03-19 17:51:16 +05:00
dd358154b6 Add Narrow.tsx 2019-03-19 11:45:25 +05:00
dfca6cf073 Remove 302 after logout 2019-03-19 10:59:45 +05:00
209378424c Increase default duration in SessionMiddleware 2019-03-19 10:50:51 +05:00
6ae5817529 Generate req.correlationId 2019-03-19 10:20:32 +05:00
c813407c95 Add LoginMenu.tsx 2019-03-18 20:18:52 +05:00
30a8c56119 Fix test for User firstName & lastName
Also fix CSRF token. This was probably broken since csurf middleware was
modified to use cookie instead of session storage to provide support for
single page app (SPA).
2019-03-18 15:53:05 +05:00
6fb69e40df Build tsc project before generating migration
This is especially important for comments-server, because ts-node will
use compiled js files from @rondo/server - that's just how node's module
resolution works and I do not think there's anything that we can do to
change that
2019-03-18 14:27:32 +05:00
49fc73a1c2 comments/server: Add migration for User 2019-03-18 14:00:29 +05:00
bc979c51c7 packages/server: Fix ormconfig.js 2019-03-18 13:57:41 +05:00
a917d9b55e Update buildfile to latest version 2019-03-18 13:55:41 +05:00
905501e053 packages/client: Use bloomer in login & register forms 2019-03-18 13:48:18 +05:00
63c27328ff Update buildfile 2019-03-18 13:46:12 +05:00
003bccc9e8 projects/node: Add custom redirectTo after successful login 2019-03-18 13:13:52 +05:00
8733dc2c30 projects/node: Add Buildfile for packages/client 2019-03-18 12:46:10 +05:00
cf8aefd099 Add custom Redirect component
react-router v4 was made before React introduced a more performant
function renderToNodeStream to replace renderToString. All guides for
react-router are made using renderToString method, but I would love to
use the renderToNodeStream instead.

Since we cannot issue a 302 redirect after the page has already been
rendered (because status codes are written first), we can display a
<a> link with a text message. Once the React client-side library
hydrates the DOM Tree, the redirect should happen client side, so no
user action should be required.

This idea was taken from:
https://github.com/ReactTraining/react-router/issues/6191
2019-03-17 19:59:46 +05:00
3fae7adc4a Add isClientSide helper for server-side rendering 2019-03-17 19:42:26 +05:00
5f039f5f86 Add type to react-router context variable 2019-03-17 19:27:55 +05:00
85d5fd1110 Clear register & login forms after submit 2019-03-17 19:27:39 +05:00
5a34885605 Add withForm HOC, as well as RegisterForm 2019-03-17 15:05:02 +05:00
428630072c Fix (hopefully) CSRF for SPA 2019-03-17 15:04:15 +05:00
0c7af3538c Move LoginRoutes from /app to /api 2019-03-17 14:24:09 +05:00
491012a815 Update TypeScript to 3.3.3333
TODO: Remove cast this.router to any
2019-03-17 13:43:47 +05:00
c2c72457db Add LoginForm to comments 2019-03-17 11:20:34 +05:00
49b77403f6 Add sample Nav 2019-03-16 16:57:09 +05:00
7b682c745c Fix react-router-dom for server-side rendering 2019-03-16 12:31:18 +05:00
10b034e7f0 Add react-router-dom, TODO fix SSR 2019-03-16 12:20:55 +05:00
f5686c7dc9 Use bulma on frontend 2019-03-16 11:04:12 +05:00
20324bdff2 Add watch_ts to Buildfile 2019-03-16 10:13:08 +05:00
360dc83ded Setup simple SSR, untested 2019-03-14 12:38:34 +05:00
949b008208 Update jest to 24 and set maxConcurrency 2019-03-14 12:08:37 +05:00
aafeaee3e3 Run npm audit fix 2019-03-14 11:54:20 +05:00
df74a7100f Install latest version of buildfile 2019-03-14 11:51:37 +05:00