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";