flatten() ->map(fn (Argument $argument) => $argument->__toString()) ->implode(', '); return sprintf('(%s)', $arguments); } /** * Resolve the fields into arguments that are used for filtering. * * @param Field[] $fields * @return Argument[] */ protected function resolveFilterArguments(array $fields): array { return collect($fields) ->filter(fn (Field $field) => $field instanceof FilterableField) ->map( fn (FilterableField $field) => collect($field->filterDirectives()) ->map(fn (FilterDirective $directive) => $directive->argument()) ->toArray() ) ->flatten() ->toArray(); } /** * Resolve the fields into arguments that are used for sorting. * * @return SortArgument[] */ protected function resolveSortArguments(BaseType $type): array { return Arr::wrap(new SortArgument($type)); } /** * Resolve the fields into arguments that are used for mutations of type create. * * @param Field[] $fields * @return Argument[] */ protected function resolveCreateMutationArguments(array $fields): array { return collect($fields) ->filter(fn (Field $field) => $field instanceof CreatableField) ->map( fn (Field $field) => new Argument($field->getColumn(), $field->type()) ->required($field instanceof RequiredOnCreation) ) ->flatten() ->toArray(); } /** * Resolve the fields into arguments that are used for mutations of type update. * * @param Field[] $fields * @return Argument[] */ protected function resolveUpdateMutationArguments(array $fields): array { return collect($fields) ->filter(fn (Field $field) => $field instanceof UpdatableField) ->map( fn (Field $field) => new Argument($field->getColumn(), $field->type()) ->required($field instanceof RequiredOnUpdate) ) ->flatten() ->toArray(); } /** * Resolve the bind arguments. * * @param Field[] $fields * @return BindableArgument[] */ protected function resolveBindArguments(array $fields, bool $shouldRequire = true): array { return collect($fields) ->filter(fn (Field $field) => $field instanceof BindableField) ->map(fn (Field&BindableField $field) => new BindableArgument($field, $shouldRequire)) ->toArray(); } /** * Resolve the routeable arguments. * * @param Field[] $fields * @return RouteableArgument[] */ protected function resolveRouteableArguments(array $fields): array { return collect($fields) ->filter(fn (Field $field) => $field instanceof RouteableField) ->map(fn (Field&RouteableField $field) => new RouteableArgument($field)) ->toArray(); } }