$model */ public function __construct(protected string $model) { parent::__construct('Create'.Str::pascal(class_basename($model))); } public function authorize($root, array $args, $ctx, ?ResolveInfo $resolveInfo = null, ?Closure $getSelectFields = null): bool { $args = collect($args) ->filter(fn ($value): bool => $value instanceof Model) ->values() ->all(); return ($this->response = Gate::inspect('create', [$this->model, ...$args]))->allowed(); } /** * Get the arguments for the create mutation. * * @return Argument[] */ public function arguments(): array { $arguments = []; $baseType = $this->baseType(); if ($baseType instanceof BaseType) { $bindableFields = Arr::where($baseType->fieldClasses(), fn (Field $field): bool => $field instanceof BindableField && $field instanceof CreatableField); $notBindableFields = Arr::where($baseType->fieldClasses(), fn (Field $field): bool => ! $field instanceof BindableField); $arguments[] = $this->resolveBindArguments($bindableFields); $arguments[] = $this->resolveCreateMutationArguments($notBindableFields); } return Arr::flatten($arguments); } /** * @param array $args * @return array */ public function rulesForValidation(array $args = []): array { $baseType = $this->baseType(); if ($baseType instanceof BaseType) { return collect($baseType->fieldClasses()) ->filter(fn (Field $field): bool => $field instanceof CreatableField) ->mapWithKeys(fn (Field&CreatableField $field): array => [$field->getColumn() => $field->getCreationRules($args)]) ->all(); } return []; } public function type(): Type { return Type::nonNull($this->toType()); } }