GitXplorerGitXplorer
A

draft-js-aws-amplify-s3-plugin

public
4 stars
0 forks
15 issues

Commits

List of commits on branch master.
Unverified
2c65ea4b2181bbeeb437f39cf3986dc9544fcf4a

Fix GitHub action

committed 5 years ago
Unverified
87c4b712e59a2772d6c4473c02595e5e0b21830d

Remove console.log

committed 5 years ago
Verified
8f5e05c4425f98f6f3b0449752dbd650cdf10652

Create npmpublish.yml

AAryanJ-NYC committed 5 years ago
Unverified
5b74f1477b1815024574c8cdb195786ebe137fde

Edit package.json

committed 5 years ago
Unverified
58672ea1941722edfee805db3ab1c36fccc885d3

Initial commit

committed 5 years ago

README

The README file for this repository.

DraftJS AWS Amplify S3 Plugin

This is a plugin for use with draft-js-plugins-editor

It is heavily inspired by the draft-js-image-plugin.

Assumptions

Peer Dependencies

Please note that using this plugin requires your project has aws-amplify (not @aws-amplify/storage), draft-js, react and react-dom packages installed.

Peer Dependencies Motivation

DraftJS has peer dependencies on react and react-dom. Additionally, to successfully use hooks, the react import from your application code needs to resolve to the same module as the react import from inside the react-dom package.

Since the Amplify module installed in your node_modules is correctly configured (using Amplify.configure()), this library hooks directly into that configuration via the peerDependency.

Amplify Configuration

This plugin assumes you've successfully configured AWS Amplify with an awsconfig.

Example Usage

import { Storage } from 'aws-amplify';
import { EditorState } from 'draft-js';
import Editor from 'draft-js-plugins-editor';
import createS3Plugin from 'draft-js-aws-amplify-s3-plugin';
import React from 'react';

const s3Plugin = createS3Plugin();
const plugins = [s3Plugin];

// The Editor accepts an array of plugins. In this case, only the s3Plugin
// is passed in, although it is possible to pass in multiple plugins.
const MyEditor = ({ editorState }: { editorState: EditorState }) => {
  const onImageChange = async (e: React.ChangeEvent<HTMLInputElement>) => {
    const { files } = e.target;
    const [file] = Array.from(files);
    const { key: s3Key } = (await Storage.put(file.name, file)) as {
      key: string;
    };
    const newEditorState = s3Plugin.addS3Image(editorState, s3Key);
    setEditorState(newEditorState);
  };

  return (
    <>
      <Editor editorState={editorState} onChange={onChange} plugins={plugins} />
      <input type="file" onChange={onImageChange} />
    </>
  );
};

export default MyEditor;