filter(fn (Field $field) => $field instanceof FilterableField) ->map(function (FilterableField $field) { return collect($field->filterDirectives()) ->map(fn (FilterDirective $directive) => $directive->__toString()) ->toArray(); }) ->flatten() ->toArray(); } /** * Resolve the fields into arguments that are used for mutations of type create. * * @param Field[] $fields * @return string[] */ public function resolveCreateMutationArguments(array $fields): array { return collect($fields) ->filter(fn (Field $field) => $field instanceof CreatableField) ->map(fn (Field $field) => sprintf( '%s: %s%s', $field->getColumn(), $field->type()->__toString(), $field instanceof RequiredOnCreation ? '!' : '' )) ->flatten() ->toArray(); } /** * Resolve the fields into arguments that are used for mutations of type update. * * @param Field[] $fields * @return string[] */ public function resolveUpdateMutationArguments(array $fields): array { return collect($fields) ->filter(fn (Field $field) => $field instanceof UpdatableField) ->map(fn (Field $field) => sprintf( '%s: %s%s', $field->getColumn(), $field->type()->__toString(), $field instanceof RequiredOnUpdate ? '!' : '' )) ->flatten() ->toArray(); } /** * Resolve the bind argument. * * @param array $fields * @return string[] */ public function resolveBindArgument(array $fields, bool $shouldRequire = true): array { return collect($fields) ->filter(fn (Field $field) => $field instanceof BindableField) ->map(fn (Field&BindableField $field) => sprintf( '%s: %s%s%s', $field->getName(), $field->type()->__toString(), $shouldRequire ? '!' : '', $this->resolveDirectives([ 'bind' => [ 'class' => $field->bindTo(), 'column' => $field->bindUsingColumn(), ], ]) )) ->toArray(); } }