beauby / jsonapi-datastore

JavaScript client-side JSON API data handling made easy.
MIT License
195 stars 40 forks source link

Support for meta object doesn't seem to work #36

Open cedv opened 7 years ago

cedv commented 7 years ago

Support for meta object doesn't seem to work.

I tried with both store.sync and store.syncWithMeta, and either way, I can't see the meta information in the datastore when I pull the record using store.find. The rest of the data is fine; I can see the attributes, relationships and links.

This is how I use the datastore (within some AngularJS code):

var store = JsonApiDataStore.store;
store.sync(payload);
$scope.client = store.find('clients', 700);

And this is my JSON payload:

{
  "data": {
    "id": "700",
    "type": "clients",
    "links": {
      "self": "http://localhost:3000/clients/700"
    },
    "attributes": {
      "name": "Dummy Client"
    },
    "relationships": {
      "clientType": {
        "links": {
          "self": "http://localhost:3000/clients/700/relationships/client-type",
          "related": "http://localhost:3000/clients/700/client-type"
        },
        "data": {
          "type": "clientTypes",
          "id": "INTERNAL"
        }
      }
    },
    "meta": {
      "created": {
        "at": "1372275070780",
        "by": {
          "userName": "sys",
          "name": "System",
          "emailAddress": "system@example.com"
        }
      }
    }
  }
}
amwmedia commented 7 years ago

I believe you need to use syncWithMeta

italopaiva commented 7 years ago

@amwmedia, I believe he means that he couldn't retrieve the meta information in the store object after doing store.syncWithMeta(payload). I'm kinda having the same problem to retrieve the meta object after syncing it in the store. Is there something like store.metadata() to retrieve this information from the store?

beauby commented 7 years ago

@cedv @italopaiva As you can see here, the syncWithMeta method will return an object containing the meta data. So you should do:

var res = store.syncWithMeta(payload);
console.log(res.meta);

I agree the README is not clear on that point. Would any of you guys mind opening a docs PR?