append(implode(', ', Arr::flatten($arguments))) ->append(')') ->__toString(); } return ''; } /** * Resolve the fields into arguments that are used for filtering. * * @param Field[] $fields * @return string[] */ public function resolveFilterArguments(array $fields): array { return collect($fields) ->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(function (Field&CreatableField $field) { return Str::of($field->getColumn()) ->append(': ') ->append($field->type()->__toString()) ->append($field instanceof RequiredOnCreation ? '!' : '') ->__toString(); }) ->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(function (Field&UpdatableField $field) { return Str::of($field->getColumn()) ->append(': ') ->append($field->type()->__toString()) ->append($field instanceof RequiredOnUpdate ? '!' : '') ->__toString(); }) ->flatten() ->toArray(); } /** * Resolve the bind argument. * * @param array $fields * @param bool $shouldRequire * @return string[] */ public function resolveBindArgument(array $fields, bool $shouldRequire = true): array { return collect($fields) ->filter(fn (Field $field) => $field instanceof BindableField) ->map(function (Field&BindableField $field) use ($shouldRequire) { return Str::of($field->getName()) ->append(': ') ->append($field->type()->__toString()) ->append($shouldRequire ? '! ' : '') ->append($this->resolveDirectives([ 'bind' => [ 'class' => $field->bindTo(), 'column' => $field->bindUsingColumn(), ], ])) ->__toString(); }) ->toArray(); } }