import { GqlSegment, MutationSegment } from './gql-segments/types'; // TODO: turn this into a type export default function constructGqlSegmentFromArray( items: Array, constructSingleGqlSegment: () => MutationSegment, constructVariablesInput: ( item: T, componentId?: string, ) => Record, gqlAcc: GqlSegment, componentId?: string, ): GqlSegment { const { mutation, parameters, variables } = items.reduce( ( { mutation: accMutation, parameters: accParams, variables: accVariables }, item, ) => { const { mutationGql: singleMutation, params: singleParams, inputId, } = constructSingleGqlSegment(); accVariables[inputId] = constructVariablesInput(item, componentId); return { mutation: accMutation + singleMutation, parameters: [...accParams, ...singleParams], variables: accVariables, }; }, { mutation: '', parameters: [], variables: {}, } as GqlSegment, ); return { mutation: gqlAcc.mutation + mutation, parameters: gqlAcc.parameters.concat(parameters), variables: { ...gqlAcc.variables, ...variables, }, }; }