diff --git a/packages/backend/src/graphql/mutations/create-flow.ts b/packages/backend/src/graphql/mutations/create-flow.ts index 1920c7b3..fd587260 100644 --- a/packages/backend/src/graphql/mutations/create-flow.ts +++ b/packages/backend/src/graphql/mutations/create-flow.ts @@ -1,14 +1,23 @@ import Step from '../../models/step'; -import flowType from '../types/flow'; +import flowType, { flowInputType} from '../types/flow'; import RequestWithCurrentUser from '../../types/express/request-with-current-user'; -const createFlowResolver = async (req: RequestWithCurrentUser) => { +type Params = { + input: { + triggerAppKey: string; + }; +}; + +const createFlowResolver = async (params: Params, req: RequestWithCurrentUser) => { + const appKey = params?.input?.triggerAppKey; + const flow = await req.currentUser.$relatedQuery('flows').insert({}); await Step.query().insert({ flowId: flow.id, type: 'trigger', position: 1, + appKey, }); return flow; @@ -16,8 +25,11 @@ const createFlowResolver = async (req: RequestWithCurrentUser) => { const createFlow = { type: flowType, - resolve: (_: any, _params: any, req: RequestWithCurrentUser) => - createFlowResolver(req), + args: { + input: { type: flowInputType }, + }, + resolve: (_: any, params: Params, req: RequestWithCurrentUser) => + createFlowResolver(params, req), }; export default createFlow; diff --git a/packages/backend/src/graphql/types/flow.ts b/packages/backend/src/graphql/types/flow.ts index 627f4f21..4665b111 100644 --- a/packages/backend/src/graphql/types/flow.ts +++ b/packages/backend/src/graphql/types/flow.ts @@ -1,6 +1,7 @@ import { GraphQLList, GraphQLObjectType, + GraphQLInputObjectType, GraphQLString, GraphQLBoolean, } from 'graphql'; @@ -18,4 +19,11 @@ const flowType = new GraphQLObjectType({ }, }); +export const flowInputType = new GraphQLInputObjectType({ + name: 'FlowInput', + fields: { + triggerAppKey: { type: GraphQLString }, + }, +}); + export default flowType; diff --git a/packages/web/public/favicon.ico b/packages/web/public/favicon.ico index a11777cc..59ab8480 100644 Binary files a/packages/web/public/favicon.ico and b/packages/web/public/favicon.ico differ diff --git a/packages/web/src/config/urls.ts b/packages/web/src/config/urls.ts index 014bb74d..d6ee38f7 100644 --- a/packages/web/src/config/urls.ts +++ b/packages/web/src/config/urls.ts @@ -16,7 +16,8 @@ export const APP_FLOWS = (appKey: string): string => `/app/${appKey}/flows`; export const APP_FLOWS_PATTERN = '/app/:appKey/flows'; export const EDITOR = '/editor'; -export const CREATE_FLOW = '/editor/create'; +export const CREATE_FLOW ='/editor/create'; +export const CREATE_FLOW_WITH_APP = (appKey: string) => `/editor/create?appKey=${appKey}`; export const FLOW_EDITOR = (flowId: string): string => `/editor/${flowId}`; export const FLOWS = '/flows'; diff --git a/packages/web/src/graphql/mutations/create-flow.ts b/packages/web/src/graphql/mutations/create-flow.ts index 93b07d9e..317fc591 100644 --- a/packages/web/src/graphql/mutations/create-flow.ts +++ b/packages/web/src/graphql/mutations/create-flow.ts @@ -1,8 +1,8 @@ import { gql } from '@apollo/client'; export const CREATE_FLOW = gql` - mutation createFlow { - createFlow { + mutation createFlow($input: FlowInput) { + createFlow(input: $input) { id name } diff --git a/packages/web/src/pages/Application/index.tsx b/packages/web/src/pages/Application/index.tsx index 815ee198..3c0e5b11 100644 --- a/packages/web/src/pages/Application/index.tsx +++ b/packages/web/src/pages/Application/index.tsx @@ -70,9 +70,9 @@ export default function Application(): React.ReactElement { linkProps, ref, ) { - return ; + return ; }), - [], + [appKey], ); return ( diff --git a/packages/web/src/pages/Editor/create.tsx b/packages/web/src/pages/Editor/create.tsx index 1b8af63d..57555d02 100644 --- a/packages/web/src/pages/Editor/create.tsx +++ b/packages/web/src/pages/Editor/create.tsx @@ -1,5 +1,5 @@ import * as React from 'react'; -import { useNavigate } from 'react-router-dom'; +import { useNavigate, useSearchParams } from 'react-router-dom'; import { useMutation } from '@apollo/client'; import CircularProgress from '@mui/material/CircularProgress'; import Typography from '@mui/material/Typography'; @@ -11,22 +11,29 @@ import { CREATE_FLOW } from 'graphql/mutations/create-flow'; import Box from '@mui/material/Box'; export default function CreateFlow(): React.ReactElement { + const [searchParams] = useSearchParams(); const navigate = useNavigate(); const formatMessage = useFormatMessage(); const [createFlow] = useMutation(CREATE_FLOW); + const appKey = searchParams.get('appKey'); + React.useEffect(() => { async function initiate() { - const response = await createFlow(); + const response = await createFlow({ + variables: { + input: { + triggerAppKey: appKey, + } + } + }); const flowId = response.data?.createFlow?.id; - setTimeout(() => { - navigate(URLS.FLOW_EDITOR(flowId)); - }, 1234); + navigate(URLS.FLOW_EDITOR(flowId)); } initiate(); - }, [createFlow, navigate]); + }, [createFlow, navigate, appKey]); return (