0.2.0 • Published 3 years ago

use-record-set v0.2.0

Weekly downloads
-
License
MIT
Repository
github
Last release
3 years ago

Installation

Yarn:

yarn add use-record-set graphql-tag

npm:

npm install use-record-set graphql-tag

Usage

// ./useRecordSet.js

import { createRecordSet } from "use-record-set";

const schema = {
  Group: {
    meta: {
      singular: "group",
      plural: "groups",
    },
    fields: {
      name: {
        type: "String",
      },
      members: {
        type: "ForeignKey",
        cardinality: "manyToMany",
      },
    },
  },
  Person: {
    meta: {
      singular: "person",
      plural: "people",
    },
    fields: {
      name: {
        type: "String",
      },
      groups: {
        type: "Inverse",
        sources: [
          {
            type: "Group",
            field: "members",
          },
        ],
      },
    },
  },
};

const records = [
  {
    type: "Group",
    id: "3d6ff8ff-d23e-4421-bfe1-b2fabd1ccb8c",
    name: "Group A",
  },
  {
    type: "Person",
    id: "7de3a1cf-5f26-4c56-b453-5dd2a33697fc",
    name: "Person A",
  },
];

const { useRecordSet, updateRecordSet } = createRecordSet(schema, {
  init: records,
  persistence: "url",
  localStorageKey: "recordSet",
});

export { useRecordSet, updateRecordSet };
// ./index.js

import { useRecordSet, updateRecordSet } from "./useRecordSet";

const MyComponent = () => {
  const { group } = useRecordSet(
    gql`
      query ($id: String) {
        group(id: $id) {
          id
          name
          members {
            id
            name
            groups {
              id
              name
            }
          }
        }
      }
    `,
    { id: "3d6ff8ff-d23e-4421-bfe1-b2fabd1ccb8c" },
  );
  return (
    <ul>
      {group.members.map((member) => (
        <li
          key={member.id}
          onClick={() => {
            const result = updateRecordSet(
              gql`
                mutation ($source: String, $target: String) {
                  removeRelationship(field: "members", source: $source, target: $target) {
                    id
                  }
                }
              `,
              { source: group.id, target: id },
            );
            if (!result) {
              throw Error("Unable to remove relationship");
            }
          }}
        >
          {member.name}
          <ul>
            {member.groups.map((group) => (
              <li key={group.id}>{group.name}</li>
            ))}
          </ul>
        </li>
      ))}
    </ul>
  );
};
0.2.1-0

3 years ago

0.2.0

3 years ago

0.1.0

3 years ago

0.1.0-5

3 years ago

0.1.0-4

3 years ago

0.1.0-3

3 years ago

0.1.0-2

3 years ago

0.1.0-1

3 years ago

0.1.0-0

3 years ago