From ac4b431d71b98ba2a8b3c705565adc276b01ca29 Mon Sep 17 00:00:00 2001 From: Chi Vinh Le Date: Wed, 8 Aug 2018 15:03:51 +0200 Subject: [PATCH] Add SetViewMutation --- .../auth/mutations/SetViewMutation.spec.ts | 21 ++++++++++++++++ .../client/auth/mutations/SetViewMutation.ts | 25 +++++++++++++++++++ src/core/client/auth/mutations/index.ts | 1 + 3 files changed, 47 insertions(+) create mode 100644 src/core/client/auth/mutations/SetViewMutation.spec.ts create mode 100644 src/core/client/auth/mutations/SetViewMutation.ts create mode 100644 src/core/client/auth/mutations/index.ts diff --git a/src/core/client/auth/mutations/SetViewMutation.spec.ts b/src/core/client/auth/mutations/SetViewMutation.spec.ts new file mode 100644 index 000000000..bb610981e --- /dev/null +++ b/src/core/client/auth/mutations/SetViewMutation.spec.ts @@ -0,0 +1,21 @@ +import { Environment, RecordSource } from "relay-runtime"; + +import { LOCAL_ID } from "talk-framework/lib/relay"; +import { createRelayEnvironment } from "talk-framework/testHelpers"; + +import { commit } from "./SetViewMutation"; + +let environment: Environment; +const source: RecordSource = new RecordSource(); + +beforeAll(() => { + environment = createRelayEnvironment({ + source, + }); +}); + +it("Sets view", () => { + const view = "SIGN_UP"; + commit(environment, { view }, {} as any); + expect(source.get(LOCAL_ID)!.view).toEqual(view); +}); diff --git a/src/core/client/auth/mutations/SetViewMutation.ts b/src/core/client/auth/mutations/SetViewMutation.ts new file mode 100644 index 000000000..c5bb851fd --- /dev/null +++ b/src/core/client/auth/mutations/SetViewMutation.ts @@ -0,0 +1,25 @@ +import { commitLocalUpdate, Environment } from "relay-runtime"; + +import { TalkContext } from "talk-framework/lib/bootstrap"; +import { createMutationContainer } from "talk-framework/lib/relay"; +import { LOCAL_ID } from "talk-framework/lib/relay/withLocalStateContainer"; + +export interface SetViewInput { + // TODO: replace with generated typescript types. + view: "SIGN_IN" | "SIGN_UP" | "FORGOT_PASSWORD"; +} + +export type SetViewMutation = (input: SetViewInput) => Promise; + +export async function commit( + environment: Environment, + input: SetViewInput, + { pym }: TalkContext +) { + return commitLocalUpdate(environment, store => { + const record = store.get(LOCAL_ID)!; + record.setValue(input.view, "view"); + }); +} + +export const withSetViewMutation = createMutationContainer("setView", commit); diff --git a/src/core/client/auth/mutations/index.ts b/src/core/client/auth/mutations/index.ts new file mode 100644 index 000000000..50d8d059b --- /dev/null +++ b/src/core/client/auth/mutations/index.ts @@ -0,0 +1 @@ +export { withSetViewMutation, SetViewMutation } from "./SetViewMutation";