graphql-laravel icon indicating copy to clipboard operation
graphql-laravel copied to clipboard

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

Open leonardocustodio opened this issue 3 years ago • 7 comments

Versions:

  • graphql-laravel Version: 8.3.0
  • Laravel Version: 9.10
  • PHP Version: 8.1.8

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.

leonardocustodio avatar Jul 14 '22 17:07 leonardocustodio

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.

mfn avatar Jul 14 '22 18:07 mfn

Sure, I can do it in a few hours 😄

leonardocustodio avatar Jul 14 '22 18:07 leonardocustodio

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

leonardocustodio avatar Jul 14 '22 22:07 leonardocustodio

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

mfn avatar Jul 15 '22 17:07 mfn

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

leonardocustodio avatar Jul 16 '22 16:07 leonardocustodio

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

crissi avatar Sep 26 '22 21:09 crissi

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

mfn avatar Jun 26 '23 18:06 mfn