rebing / graphql-laravel

Laravel wrapper for Facebook's GraphQL
MIT License
2.13k stars 266 forks source link

Rules don't work an array of a custom type input #930

Open leonardocustodio opened 2 years ago

leonardocustodio commented 2 years ago

Versions:

Description:

Rules don't work properly when they are in a type inside of a list.

I have a mutation called BatchMint with the following args:

    public function args(): array
    {
        return [
            'collectionId' => [
                'type' => GraphQL::type('BigInt!'),
                'description' => 'The Collection ID to mint from.',
            ],
            'recipients' => [
                'type' => GraphQL::type('[MintRecipient!]!'),
            ],
        ];
    }

MintRecipient has the following fields:

    public function fields(): array
    {
        return [
            'address' => [
                'type' => GraphQL::type('String!'),
                'description' => 'The recipient of the token.',
                'rules' => ['filled', new ValidSubstrateAddress],
            ],
            'createParams' => [
                'type' => GraphQL::type('CreateTokenParams'),
                'rules' => ['prohibits:mintParams'],
            ],
            'mintParams' => [
                'type' => GraphQL::type('MintTokenParams'),
                'rules' => ['prohibits:createParams'],
            ],
        ];
    }

The rules on the address field work fine. But the prohibits, required_unless, required_without, or any rule that makes a reference to another field don't work. I know those rules work fine when they are in the arguments but they don't work when they are in the array of types.

mfn commented 2 years ago

Can you create a PR with a test showing the (unexpected) behavior? The idea being that the test is green but based on the current behavior to have a point of reference.

leonardocustodio commented 2 years ago

Sure, I can do it in a few hours 😄

leonardocustodio commented 2 years ago

@mfn here it is probably not the best names but enough to understand what is happening https://github.com/rebing/graphql-laravel/pull/931

mfn commented 2 years ago

Appreciated, will take a look after I'm back from vacation

leonardocustodio commented 2 years ago

Thank you, hope you enjoy your vacation. I've just left to mine, otherwise I could take a better look at this 😅

crissi commented 2 years ago

yeah, right now this only works if you do: prohibits:recipients.mintParams so it is dependent on the whole path which is not ideal

mfn commented 1 year ago

Maybe this is something for a known limitation section, with an example how to work with this?