0.8.0-alpha.4 • Published 3 days ago

@mercuriya/slate-gallery-read-only v0.8.0-alpha.4

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

Slate gallery (read-only)

An image gallery for slate editor

Installation

yarn add @mercuriya/slate-gallery-read-only
npm install @mercuriya/slate-gallery-read-only --save

Configuration

In your file with Slate component:

import React from 'react';
import { createEditor } from 'slate';
import { Slate, Editable, withReact } from 'slate-react';
import { withGallery, } from '@mercuriya/slate-gallery';

const initialValue = Value.fromJSON({ ... });
const plugins = [galleryPlugin({ ...options })];

export default function EditorComponent(props) {
  const [value, setValue] = useState([ /* some initial state here */ ]);
  const editor = useMemo(
    () =>
      withGallery(withReact(createEditor()), {
        // slate-gallery options        
      }),
    [],
  );   
  const renderElement = useCallback(({ attributes, children, element }) => {
    switch (element.type) {
      case 'gallery':
        return editor.galleryElementType({
          attributes,
          children,
          element,
          // ❗️ we use this prop internally, so you must provide it here
          readOnly: false, // or true
        });
      default:
        return <p {...attributes}>{children}</p>;
    }
  }, []);

  return (
    <Slate editor={editor} value={value} onChange={value => setValue(value)}>
      <Editable renderElement={renderElement} />
    </Slate>
  );
}

Description

This plugin adds a void block which can show images as an image grid. It allows to cover each image in something like image lightbox if you want.

Each image can have a description, which is not related with image tag alt props. It is stored as data of this gallery block.

readOnly: false mode:

readOnly: false

readOnly: true mode:

readOnly: true

Please, see stories for more usage examples.

Options

NameTypeDescription
size? (default: 9)numberMin: 1, max: 9. It represents a grid size. A number of images which will be visible within readOnly: true mode. The remaining images will be hidden, but user will see them in the images lightbox if you will implement this.
dropzoneProps?objectAn object of react-dropzone props which is applies to Dropzone component
sortableContainerProps?objectAn object of react-sortable-hoc props which is applies to SortableContainer's component
renderControls?args => React.ReactNodeA render function that allows you to customize controls block. See types definitions for more example
renderEditModal?args => React.ReactNodeA render function that allows you to use custom modal while editing images descriptions
renderExtra?args => React.ReactNodeA render function that allows you to place additional component near image gallery. It could be handy to build image-lightbox functionality
renderImage?args => React.ReactNodeA render function that allows you to customize and image component
gridClassName?stringGrid component custom class name
imageClassName?stringImage component custom class name
imageWrapperClassName?stringImage wrapper custom class name
leftClassName?stringNumber of left images (+x) custom className