Skip to content

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

@lunarmoon26

Description

@lunarmoon26

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 !== ''
        );
    }

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions