diff --git a/packages/client/src/components/Redirect.test.tsx b/packages/client/src/components/Redirect.test.tsx new file mode 100644 index 0000000..478a9cf --- /dev/null +++ b/packages/client/src/components/Redirect.test.tsx @@ -0,0 +1,48 @@ +import React from 'react' +import {renderToString} from 'react-dom/server' +import T from 'react-dom/test-utils' +import {Redirect} from './Redirect' +import {LocationDescriptorObject} from 'history' +import { + MemoryRouter, + // Redirect as RouterRedirect, + Route, +} from 'react-router-dom' + +function getJSX(to: LocationDescriptorObject | string = '/test1234') { + return ( + + Ok} /> + } /> + + ) +} + +describe('Redirect - client side', () => { + it('renders a redirect component', () => { + T.renderIntoDocument(getJSX()) + }) +}) + +describe('Redirect - server side', () => { + const g: any = global + const window = g.window + beforeEach(() => { + delete g.window + }) + afterEach(() => { + g.window = window + }) + + it('renders a href component', () => { + const html = renderToString(getJSX()) + expect(html).toContain('here') + }) + + it('handles LocationDescriptorObject', () => { + const html = renderToString(getJSX({ + pathname: '/test1234', + })) + expect(html).toContain('here') + }) +}) diff --git a/packages/client/src/components/Redirect.tsx b/packages/client/src/components/Redirect.tsx new file mode 100644 index 0000000..28556eb --- /dev/null +++ b/packages/client/src/components/Redirect.tsx @@ -0,0 +1,22 @@ +import React from 'react' +import {Redirect as RouterRedirect} from 'react-router-dom' +import {RedirectProps} from 'react-router' +import {isClientSide} from '../renderer' + +export class Redirect extends React.PureComponent { + render() { + if (isClientSide()) { + return + } + + const href = typeof this.props.to === 'string' + ? this.props.to : this.props.to.pathname + + return ( + + You are being redirected. + Click here to 'continue' + + ) + } +} diff --git a/packages/client/src/components/index.ts b/packages/client/src/components/index.ts index 543a729..e6c9daa 100644 --- a/packages/client/src/components/index.ts +++ b/packages/client/src/components/index.ts @@ -1,3 +1,4 @@ export * from './Button' // export * from './Component' export * from './Input' +export * from './Redirect'