Skip to content

Add path to Normalization API #200

@samdenty

Description

@samdenty

Given a query for a list of objects:

query {
  something {
    items(limit: 1) {
      name
    }
  }
}

And we want to normalize an Item to the index by which it appears in items.

normalization: {
  identifier(item) {
    return item.__typename + index
  }
}

One possible way of implementing it, is a second getParent / path argument:

normalization: {
  identifier(item, { getParent, path }) {
// path ==
[
  { key: "0",         args: null,         data: { name: "" }                             },
  { key: "items",     args: { limit: 1 }, data: [{ name: "" }]                           },
  { key: "something", args: null,         data: { items: [{ name: "" }] }                },
  { key: null,        args: null,         data: { something: { items: [{ name: "" }] } } },
];


	const { key, args, parent } = getParent(item)
    
    // key == "0"
    // args == null
    // parent == [{name:""}]
    
    return item.__typename + key // aka the index
  }
}

path being an array of the keys / args / data to the root of the response

and getParent being a function which accepts any item, and returns the key/args of the item, along with the parent item (which can be fed back in)

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions