Socket
Socket
Sign inDemoInstall

@ssfbank/sanity-plugin-byo-table

Package Overview
Dependencies
16
Maintainers
2
Versions
8
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    @ssfbank/sanity-plugin-byo-table

Input component for your own table schema type for Sanity CMS


Version published
Weekly downloads
26
decreased by-46.94%
Maintainers
2
Install size
4.48 MB
Created
Weekly downloads
 

Readme

Source

sanity-plugin-byo-table

Sanity plugin that supplies the react editor for a user defined table and row. Basically, bring your own schema.

This repo is forked from sanity-plugin-table

Getting started

  1. Install using the Sanity CLI.
sanity install @ssfbank/sanity-plugin-byo-table
  1. Define your table schema

Start with the cell level of the table, which should be an object. The name of this cell object can be anything.

export default {
    title: 'Table Cell',
    name: 'cell',
    type: 'object',
    fields: [
        {
            name: 'value',
            title: 'The value',
            type: 'string'
        },
        {
            name: 'anotherValue',
            title: 'More value',
            type: 'number'
        }
    ],
    preview: {
        select: {
            title: 'value',
            subtitle: 'anotherValue'
        }
    }
};

Define the row level. This is restricted to have only one field and that should be an array of the cell object. The name of this table row object can be anything.

export default {
  title: 'Table Row',
  name: 'row',
  type: 'object',
  fields: [
    {
        name: 'cells',
        type: 'array',
        of: [{ type: 'cell' }]
    }
  ]
};

The actual document(or object) where you want a table should have a field of type array of the row object. It also needs to have input component RowsInput.

import RowsInput from 'part:@ssfbank/sanity-plugin-byo-table/rows-input';

export default {
  title: 'Table',
  name: 'table',
  type: 'document',
  fields: [
    {
      name: 'title',
      type: 'string',
      title: 'Title'
    },
    {
      name: 'totallyRelatedData',
      type: 'array',
      description: 'Table related data not involved in the plugin.',
      of: [
        {
          type: 'string',
        }
      ]
    },
    {
      name: 'rows',
      title: 'Table Rows',
      type: 'array',
      of: [
        {
          type: 'row',
        }
      ],
      inputComponent: RowsInput
    }
  ],
  preview: {
    select: {
      title: 'title'
    }
  }
};

Finally, register these types in the schema:

import cell from './example-schema/cell';
import row from './example-schema/row';
import table from './example-schema/table';

const tableTypes = [cell, row, table];

const allSchemaTypes = schemaTypes
  .concat(tableTypes);
export default createSchema({
  name: 'default',
  types: allSchemaTypes,
});

These examples are attached under /example-schema

Known Issues

  • Performance is weak in general and seems to scale negatively with amount of cells. PRs welcome.
  • Block content works in cells, but object marks in the blocks(like links, urls etc) can not be edited as the popover is not visible. This may be a sanity bug, PRs welcome.
  • Only tested on chrome, so quite possible some quirks on other browsers.
  • There is no horizontal scroll styling, so alot of columns will look kind of rubbish.

Migrating from sanity-plugin-table

If coming from the original fork and wanting to switch to this plugin, you can do it without migrating. Just install this plugin, remove the old one, copy in the schema and point the RowsInput-component to the 'rows' field.

License

MIT

FAQs

Last updated on 27 Nov 2020

Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc