Code Monkey home page Code Monkey logo

Comments (2)

yury-dymov avatar yury-dymov commented on July 4, 2024

Ok, I feel it largely depends on how you are using meta. I guess I need a little bit more context to help

from redux-object.

GregPeden avatar GregPeden commented on July 4, 2024

For context, here is the unit test I wrote for json-ap-normalizer while implementing relationship metadata handling:

describe('relationship meta', () => {
  const json1 = {
    "data": [{
      "type": "post",
      "relationships": {
        "questions": {
          "data": [
            {
              "type": "question",
              "id": "295"
            }
          ],
          "meta": {
            "membership": [
              {
                "post_id": "2620",
                "question_id": "295",
                "created_at": "2017-11-22",
                "updated_at": "2017-11-26"
              }
            ],
            "review-status": {
              "content_flags": "4"
            }
          }
        }
      },
      "id": "2620",
      "attributes": {
        "text": "hello",
      }
    }]
  };

  const output1 = {
    post: {
      "2620": {
        id: "2620",
        attributes: {
          "text": "hello",
        },
        relationships: {
          questions: {
            data: [
              {
                id: "295",
                type: "question"
              }
            ],
            meta: {
              membership: [
                {
                  postId: "2620",
                  questionId: "295",
                  createdAt: "2017-11-22",
                  updatedAt: "2017-11-26"
                }
              ],
              reviewStatus: {
                contentFlags: "4"
              }
            }
          }
        }
      }
    }
  };

  it('meta in relationship', () => {
    const result = normalize(json1);
    expect(isEqual(result, output1)).to.be.true;
  });
});

So let figure "output1" is being fed to redux-object. Below is the output from the current package, which won't include the relationship metadata.

  const reduxOutput = {
    posts: [
      {
        id: "2620",
        text: "hello",
        questions: [
          {
            id: "295",
            type: "question"
          }
        ]
      }
    ]
  };

My struggle is figuring out where to put the metadata on a relationship. In particular this is made difficult by the lazy loading pattern since I don't want to read the relationship content until it is accessed, then I would like to avoid amending it to the parent resource in its own "meta" property.

So for instance I considered something like this, but it doesn't fit well with lazy loading:

  const output2 = {
    posts: [
      {
        id: "2620",
        text: "hello",
        questions: [
          {
            id: "295",
            type: "question"
          }
        ],
        meta: {
          relationships: {
            questions: {
              membership: [
                {
                  postId: "2620",
                  questionId: "295",
                  createdAt: "2017-11-22",
                  updatedAt: "2017-11-26"
                }
              ],
              reviewStatus: {
                contentFlags: "4"
              }
            }
          }
        }
      }
    ]
  };

from redux-object.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.