@kiwicom/smart-faq
Version:
58 lines (49 loc) • 1.44 kB
JavaScript
// @flow
import * as React from 'react';
// TODO: replace by React.memo when updating to React 16.6
import memoize from 'memoize-one';
import OriginalQueryRenderer from 'relay-in-next/src/QueryRenderer';
import createEnvironment from './environment';
import { fromLanguageToLocale } from '../helpers/translationUtils';
type RenderArgs<RenderProps> = {
error: ?Error,
props: ?RenderProps,
...
};
export type Props<RenderProps> = {|
cacheConfig?: {| force: boolean |},
query: () => mixed,
render: (RenderArgs<RenderProps>) => React.Node,
variables?: { [string]: mixed, ... },
loginToken?: ?string,
kwAuthToken?: ?string,
language: string,
|};
class QueryRenderer<RenderProps> extends React.Component<Props<RenderProps>> {
getEnvironment = memoize(
(loginToken: ?string, kwAuthToken: ?string, locale: string) =>
createEnvironment(loginToken, kwAuthToken, locale),
);
render() {
const {
loginToken,
kwAuthToken,
query,
variables,
cacheConfig,
render,
} = this.props;
const locale = fromLanguageToLocale(this.props.language);
const newEnvironment = this.getEnvironment(loginToken, kwAuthToken, locale);
return (
<OriginalQueryRenderer
query={query}
variables={variables}
cacheConfig={cacheConfig}
render={render}
environment={newEnvironment}
/>
);
}
}
export default QueryRenderer;