innovationM
← Back to Blogs

Ext JS

CKEditor with strapi

InnovationM Admin 30 Sep 2021 2 min read
CKEditor with strapi

CKEditor5 react is a modern JavaScript-rich text editor with a modular architecture. It is one of the most used free WYSIWYG rich text editors used because of it is clear UI and customization features.

Generate Plugin

            Path – my-app

npm run strapi generate:plugin wysiwyg

Install CKEditor dependencies

Path –  ./plugin/wysiwyg

npm i @ckeditor/ckeditor5-react @ckeditor/ckeditor5-build-classic

Implementing CKEditor

Path  – ./plugins/wysiwyg/admin/src/components/CKEditor/index.js

Note – You have to create the folder manually in the src

          Ex –  /components/CKEditor/index.js

 

Add this code in index.js file

————————————

import React from 'react';

import PropTypes from 'prop-types';

import { CKEditor } from '@ckeditor/ckeditor5-react';

import ClassicEditor from '@ckeditor/ckeditor5-build-classic';

import styled from 'styled-components';

const Wrapper = styled.div`

  .ck-editor__main {

    min-height: 200px;

    > div {

      min-height: 200px;

    }

  }

`;




const configuration = {

  toolbar: [

    'heading',

    '|',

    'bold',

    'italic',

    'link',

    'bulletedList',

    'numberedList',

    '|',

    'indent',

    'outdent',

    '|',

    'blockQuote',

    'insertTable',

    'mediaEmbed',

    'undo',

    'redo',

  ],

};

const Editor = ({ onChange, name, value }) => {

  return (

    <Wrapper>

      <CKEditor

        editor={ClassicEditor}

        config={configuration}

        data={value}

        onReady={editor => editor.setData(value)}

        onChange={(event, editor) => {

          const data = editor.getData();

          onChange({ target: { name, value: data } });

        }}

      />

    </Wrapper>

  );

};

Editor.propTypes = {

  onChange: PropTypes.func.isRequired,

  name: PropTypes.string.isRequired,

  value: PropTypes.string,

};

export default Editor;

the main component should be null and remove the menu key object.

Path – ./plugins/wysiwyg/admin/src/index.js

Replace this code

mainComponent : null,

Remove this code

// menu: {

    //   pluginsSectionLinks: [

    //     {

    //       destination: `/plugins/${pluginId}`,

    //       icon,

    //       label: {

    //         id: `${pluginId}.plugin.name`,

    //         defaultMessage: name,

    //       },

    //       name,

    //       permissions: [

    //         // Uncomment to set the permissions of the plugin here

    //         // {

    //         //   action: '', // the action name should be plugins::p                lugin-name.actionType

    //         //   subject: null,

    //         // },

    //       ],

    //     },

    //   ],

    // },

Add registerField method before return

Path – ./plugins/wysiwyg/admin/src/index.js

Import CKEditor

import CKEditor from "../src/components/CKEditor/index";

Add this code

strapi.registerField({type:"wysiwyg", Component : CKEditor});

Run command after changes done

  1. npm run build
  2. npm run develop

Result

About the Author

InnovationM Admin

Contributor at InnovationM.

LinkedIn

Transform Your Ideas with Expert Guidance

icon
15+ Years of Expertise

Delivering high-impact solutions with years of industry experience.

icon
100+ Satisfied Clients

Helping contact industry software experts to achieve their brand goals.

icon
250+ In-House Team Members

A skilled team ready to tackle projects of any scale.

Book a consultation call with our experts today