ngx-jsonapi icon indicating copy to clipboard operation
ngx-jsonapi copied to clipboard

Resource: "hasOneRelated" check failed after calling "removeRelationship" and saved

Open lunarmoon26 opened this issue 4 years ago • 0 comments

Angular Version:

8.1.3

ngx-jsonapi Version:

2.1.15

npm Version:

6.14.6

Typescript Version:

3.4.5

OS:

Windows 10

Given:

foo is the only possible relationship (One related) The service follows the JSON api specs, i.e. if no related foo, then there won't be relationships key on the Resource Calling the GET service with include: ['foo']

Steps:

  1. Load the resource with GET (doesn't matter with or without the related foo)
  2. Update the resource, call removeRelationship('foo')
  3. Save the resource with .save(), it will POST to the service
  4. Load the same resource again with GET and check hasOneRelated

Issue:

TypeError: Cannot read property 'type' of null at Ln.hasOneRelated ...

Analysis:

  1. The foo was initialized as an empty Resource the first time, if there is no relationships key returned from the service
  2. After the removal & save, the local Resource was updated and relationships.foo.data would become null
  3. Since hasOneRelated checks ...relationships[resource].data).type, it will throw NullPointer exception

Suggestion:

add a condition in hasOneRelated, i.e.

    public hasOneRelated(resource: string): boolean {
        return Boolean(
            this.relationships[resource] &&
------>     this.relationships[resource].data &&
                (<Resource>this.relationships[resource].data).type &&
                (<Resource>this.relationships[resource].data).type !== ''
        );
    }

lunarmoon26 avatar Sep 15 '20 04:09 lunarmoon26