@bbl-digital/snorre 4.1.11 → 4.1.13

Sign up to get free protection for your applications and to get access to all the features.
package/dist/bundle.js CHANGED
@@ -35458,7 +35458,7 @@ to {top: 100vh;}
35458
35458
  'formats/ulist': MyListItem
35459
35459
  });
35460
35460
  Quill__default["default"].register(CustomLinkSanitizer, true);
35461
- const QuillEditor = ({
35461
+ const QuillEditor = /*#__PURE__*/React.forwardRef(({
35462
35462
  height,
35463
35463
  width,
35464
35464
  maxHeight,
@@ -35485,12 +35485,15 @@ to {top: 100vh;}
35485
35485
  disabled,
35486
35486
  pasteAsText,
35487
35487
  name,
35488
- id,
35489
- resize // Trenger vi denne?,
35490
- }) => {
35488
+ id
35489
+ }, ref) => {
35491
35490
  const [quill, setQuill] = React.useState(null);
35492
35491
  const isMounted = React.useRef(false);
35493
35492
  const containerRef = React.useRef(null);
35493
+ const defaultValueRef = React.useRef(initialValue);
35494
+ const onTextChangeRef = React.useRef(onChange);
35495
+ // const onFocusRef = useRef(onFocus)
35496
+ // const onBlurRef = useRef(onBlur)
35494
35497
  const {
35495
35498
  alert
35496
35499
  } = react.useTheme();
@@ -35537,20 +35540,17 @@ to {top: 100vh;}
35537
35540
  }
35538
35541
  }
35539
35542
  };
35540
- const handleChange = React.useCallback((delta, _oldDelta, source) => {
35541
- if (quill) {
35542
- const html = quill.root.innerHTML;
35543
- if (onChange) {
35544
- onChange(html, delta, source, quill);
35545
- }
35543
+ const handleChange = React.useCallback((delta, _oldDelta, source, instance) => {
35544
+ const html = instance.root.innerHTML;
35545
+ if (onChange) {
35546
+ onChange(html, delta, source, quill);
35546
35547
  }
35547
35548
  }, [quill, onChange]);
35548
- const handelFocus = React.useCallback(() => {
35549
- if (!quill) return;
35550
- const html = quill.root.innerHTML;
35549
+ const handelFocus = React.useCallback(instance => {
35550
+ const html = instance.root.innerHTML;
35551
35551
  onFocus && onFocus(html);
35552
35552
  }, [quill, onFocus]);
35553
- const applySizes = () => {
35553
+ const applySizes = quill => {
35554
35554
  if (!quill) return;
35555
35555
  minHeight && (quill.root.style.minHeight = `${minHeight}px`);
35556
35556
  maxHeight && (quill.root.style.maxHeight = `${maxHeight}px`);
@@ -35559,86 +35559,80 @@ to {top: 100vh;}
35559
35559
  height && (quill.root.style.height = `${height}px`);
35560
35560
  minWidth && (quill.root.style.minWidth = `${minWidth}px`);
35561
35561
  };
35562
+ React.useLayoutEffect(() => {
35563
+ onTextChangeRef.current = onChange;
35564
+ });
35562
35565
  React.useEffect(() => {
35563
- if (!isMounted.current) {
35564
- const editor = document.createElement('div');
35565
- containerRef.current?.appendChild(editor);
35566
- const quillInstance = new Quill__default["default"](editor, {
35567
- theme: 'snow',
35568
- modules: {
35569
- ...modules
35570
- },
35571
- formats,
35572
- placeholder,
35573
- bounds,
35574
- readOnly
35575
- });
35576
- const editorActual = editor.querySelector('.ql-editor');
35577
- if (editorActual) {
35578
- editorActual.setAttribute('id', id || 'ql-editor');
35579
- editorActual.setAttribute('name', name || 'ql-editor');
35566
+ if (isMounted.current) return;
35567
+ const container = containerRef.current;
35568
+ const editor = container?.appendChild(container.ownerDocument.createElement('div'));
35569
+ if (!editor) return;
35570
+ const quillInstance = new Quill__default["default"](editor, {
35571
+ theme: 'snow',
35572
+ modules: {
35573
+ ...modules
35574
+ },
35575
+ formats,
35576
+ placeholder,
35577
+ bounds,
35578
+ readOnly
35579
+ });
35580
+ ref && ref.current && (ref.current = editor);
35581
+ const editorActual = editor.querySelector('.ql-editor');
35582
+ if (editorActual) {
35583
+ editorActual.setAttribute('id', id || 'ql-editor');
35584
+ editorActual.setAttribute('name', name || 'ql-editor');
35585
+ }
35586
+ applySizes(quillInstance);
35587
+ quillInstance.keyboard.addBinding({
35588
+ key: 'Backspace'
35589
+ }, {
35590
+ format: {
35591
+ list: true,
35592
+ indent: true
35580
35593
  }
35581
- quillInstance.keyboard.addBinding({
35582
- key: 'Backspace'
35583
- }, {
35584
- format: {
35585
- list: true,
35586
- indent: true
35587
- }
35588
- }, (range, context) => {
35589
- return handleBackspaceWithIndentetList(range, context, quillInstance);
35590
- });
35591
- // Move the last binding in the list, to the top. Ensure that the custom binding is called first.
35592
- quillInstance.keyboard.bindings['Backspace'].unshift(quillInstance.keyboard.bindings['Backspace'].pop());
35593
- quillInstance.keyboard.addBinding({
35594
- key: 'Escape'
35595
- }, () => {
35596
- // Remove focus from editor
35597
- quillInstance.blur();
35594
+ }, (range, context) => {
35595
+ return handleBackspaceWithIndentetList(range, context, quillInstance);
35596
+ });
35597
+ // Move the last binding in the list, to the top. Ensure that the custom binding is called first.
35598
+ quillInstance.keyboard.bindings['Backspace'].unshift(quillInstance.keyboard.bindings['Backspace'].pop());
35599
+ quillInstance.keyboard.addBinding({
35600
+ key: 'Escape'
35601
+ }, () => {
35602
+ // Remove focus from editor
35603
+ quillInstance.blur();
35604
+ });
35605
+ if (defaultValueRef.current) {
35606
+ const delta = quillInstance.clipboard.convert({
35607
+ html: defaultValueRef.current
35598
35608
  });
35599
- if (initialValue !== undefined) {
35600
- if (quillInstance.root.innerHTML !== initialValue) {
35601
- const delta = quillInstance.clipboard.convert({
35602
- html: initialValue
35603
- });
35604
- quillInstance.setContents(delta);
35605
- }
35606
- }
35607
- isMounted.current = true;
35608
- setQuill(quillInstance);
35609
+ quillInstance.setContents(delta);
35609
35610
  }
35610
- }, []);
35611
+ quillInstance.on(Quill__default["default"].events.TEXT_CHANGE, (...args) => handleChange(...args, quillInstance));
35612
+ quillInstance.on(Quill__default["default"].events.SELECTION_CHANGE, range => {
35613
+ if (!range) return;
35614
+ handelFocus(quillInstance);
35615
+ });
35616
+ isMounted.current = true;
35617
+ setQuill(quillInstance);
35618
+ return () => {
35619
+ ref && ref.current && (ref.current = null);
35620
+ container.innerHTML = '';
35621
+ };
35622
+ }, [ref]);
35611
35623
  React.useEffect(() => {
35612
35624
  if (!quill) return;
35613
35625
  const handleBlur = () => {
35614
- const html = quill.root.innerHTML;
35615
- onBlur && onBlur(html);
35626
+ setTimeout(() => {
35627
+ const html = quill.root.innerHTML;
35628
+ onBlur && onBlur(html);
35629
+ }, 50);
35616
35630
  };
35617
35631
  quill.root.addEventListener('blur', handleBlur);
35618
35632
  return () => {
35619
35633
  quill.root.removeEventListener('blur', handleBlur);
35620
35634
  };
35621
35635
  }, [quill]);
35622
- React.useEffect(() => {
35623
- if (!quill) return;
35624
- quill.on('selection-change', (range, oldRange, source) => {
35625
- if (!range) return;
35626
- handelFocus();
35627
- });
35628
- return () => {
35629
- quill.off('selection-change');
35630
- };
35631
- }, [quill]);
35632
- React.useEffect(() => {
35633
- if (!quill) return;
35634
- quill.on('text-change', handleChange);
35635
- return () => {
35636
- quill.off('text-change', handleChange);
35637
- };
35638
- }, [quill, isMounted]);
35639
- React.useEffect(() => {
35640
- applySizes();
35641
- }, [quill, height, width, maxHeight, maxWidth, minHeight, minWidth]);
35642
35636
  React.useEffect(() => {
35643
35637
  if (!quill) return;
35644
35638
  quill.clipboard.addMatcher(Node.ELEMENT_NODE, (node, delta) => {
@@ -35699,7 +35693,7 @@ to {top: 100vh;}
35699
35693
  })
35700
35694
  })]
35701
35695
  });
35702
- };
35696
+ });
35703
35697
 
35704
35698
  const getReducedArray = (array, indexesAmount) => {
35705
35699
  // copies x amount of indexes from array (in order) to a new array
@@ -1,5 +1,5 @@
1
1
  /** @jsxImportSource @emotion/react */
2
- import { useRef, useState, useEffect, useCallback } from 'react';
2
+ import { useRef, useState, useEffect, useCallback, forwardRef, useLayoutEffect } from 'react';
3
3
  import Quill from 'quill';
4
4
  import 'quill/dist/quill.snow.css';
5
5
  import { basicToolbar, richToolbar } from './config';
@@ -55,7 +55,7 @@ Quill.register({
55
55
  'formats/ulist': MyListItem
56
56
  });
57
57
  Quill.register(CustomLinkSanitizer, true);
58
- const QuillEditor = ({
58
+ const QuillEditor = /*#__PURE__*/forwardRef(({
59
59
  height,
60
60
  width,
61
61
  maxHeight,
@@ -82,12 +82,15 @@ const QuillEditor = ({
82
82
  disabled,
83
83
  pasteAsText,
84
84
  name,
85
- id,
86
- resize // Trenger vi denne?,
87
- }) => {
85
+ id
86
+ }, ref) => {
88
87
  const [quill, setQuill] = useState(null);
89
88
  const isMounted = useRef(false);
90
89
  const containerRef = useRef(null);
90
+ const defaultValueRef = useRef(initialValue);
91
+ const onTextChangeRef = useRef(onChange);
92
+ // const onFocusRef = useRef(onFocus)
93
+ // const onBlurRef = useRef(onBlur)
91
94
  const {
92
95
  alert
93
96
  } = useTheme();
@@ -134,20 +137,17 @@ const QuillEditor = ({
134
137
  }
135
138
  }
136
139
  };
137
- const handleChange = useCallback((delta, _oldDelta, source) => {
138
- if (quill) {
139
- const html = quill.root.innerHTML;
140
- if (onChange) {
141
- onChange(html, delta, source, quill);
142
- }
140
+ const handleChange = useCallback((delta, _oldDelta, source, instance) => {
141
+ const html = instance.root.innerHTML;
142
+ if (onChange) {
143
+ onChange(html, delta, source, quill);
143
144
  }
144
145
  }, [quill, onChange]);
145
- const handelFocus = useCallback(() => {
146
- if (!quill) return;
147
- const html = quill.root.innerHTML;
146
+ const handelFocus = useCallback(instance => {
147
+ const html = instance.root.innerHTML;
148
148
  onFocus && onFocus(html);
149
149
  }, [quill, onFocus]);
150
- const applySizes = () => {
150
+ const applySizes = quill => {
151
151
  if (!quill) return;
152
152
  minHeight && (quill.root.style.minHeight = `${minHeight}px`);
153
153
  maxHeight && (quill.root.style.maxHeight = `${maxHeight}px`);
@@ -156,86 +156,80 @@ const QuillEditor = ({
156
156
  height && (quill.root.style.height = `${height}px`);
157
157
  minWidth && (quill.root.style.minWidth = `${minWidth}px`);
158
158
  };
159
+ useLayoutEffect(() => {
160
+ onTextChangeRef.current = onChange;
161
+ });
159
162
  useEffect(() => {
160
- if (!isMounted.current) {
161
- const editor = document.createElement('div');
162
- containerRef.current?.appendChild(editor);
163
- const quillInstance = new Quill(editor, {
164
- theme: 'snow',
165
- modules: {
166
- ...modules
167
- },
168
- formats,
169
- placeholder,
170
- bounds,
171
- readOnly
172
- });
173
- const editorActual = editor.querySelector('.ql-editor');
174
- if (editorActual) {
175
- editorActual.setAttribute('id', id || 'ql-editor');
176
- editorActual.setAttribute('name', name || 'ql-editor');
163
+ if (isMounted.current) return;
164
+ const container = containerRef.current;
165
+ const editor = container?.appendChild(container.ownerDocument.createElement('div'));
166
+ if (!editor) return;
167
+ const quillInstance = new Quill(editor, {
168
+ theme: 'snow',
169
+ modules: {
170
+ ...modules
171
+ },
172
+ formats,
173
+ placeholder,
174
+ bounds,
175
+ readOnly
176
+ });
177
+ ref && ref.current && (ref.current = editor);
178
+ const editorActual = editor.querySelector('.ql-editor');
179
+ if (editorActual) {
180
+ editorActual.setAttribute('id', id || 'ql-editor');
181
+ editorActual.setAttribute('name', name || 'ql-editor');
182
+ }
183
+ applySizes(quillInstance);
184
+ quillInstance.keyboard.addBinding({
185
+ key: 'Backspace'
186
+ }, {
187
+ format: {
188
+ list: true,
189
+ indent: true
177
190
  }
178
- quillInstance.keyboard.addBinding({
179
- key: 'Backspace'
180
- }, {
181
- format: {
182
- list: true,
183
- indent: true
184
- }
185
- }, (range, context) => {
186
- return handleBackspaceWithIndentetList(range, context, quillInstance);
187
- });
188
- // Move the last binding in the list, to the top. Ensure that the custom binding is called first.
189
- quillInstance.keyboard.bindings['Backspace'].unshift(quillInstance.keyboard.bindings['Backspace'].pop());
190
- quillInstance.keyboard.addBinding({
191
- key: 'Escape'
192
- }, () => {
193
- // Remove focus from editor
194
- quillInstance.blur();
191
+ }, (range, context) => {
192
+ return handleBackspaceWithIndentetList(range, context, quillInstance);
193
+ });
194
+ // Move the last binding in the list, to the top. Ensure that the custom binding is called first.
195
+ quillInstance.keyboard.bindings['Backspace'].unshift(quillInstance.keyboard.bindings['Backspace'].pop());
196
+ quillInstance.keyboard.addBinding({
197
+ key: 'Escape'
198
+ }, () => {
199
+ // Remove focus from editor
200
+ quillInstance.blur();
201
+ });
202
+ if (defaultValueRef.current) {
203
+ const delta = quillInstance.clipboard.convert({
204
+ html: defaultValueRef.current
195
205
  });
196
- if (initialValue !== undefined) {
197
- if (quillInstance.root.innerHTML !== initialValue) {
198
- const delta = quillInstance.clipboard.convert({
199
- html: initialValue
200
- });
201
- quillInstance.setContents(delta);
202
- }
203
- }
204
- isMounted.current = true;
205
- setQuill(quillInstance);
206
+ quillInstance.setContents(delta);
206
207
  }
207
- }, []);
208
+ quillInstance.on(Quill.events.TEXT_CHANGE, (...args) => handleChange(...args, quillInstance));
209
+ quillInstance.on(Quill.events.SELECTION_CHANGE, range => {
210
+ if (!range) return;
211
+ handelFocus(quillInstance);
212
+ });
213
+ isMounted.current = true;
214
+ setQuill(quillInstance);
215
+ return () => {
216
+ ref && ref.current && (ref.current = null);
217
+ container.innerHTML = '';
218
+ };
219
+ }, [ref]);
208
220
  useEffect(() => {
209
221
  if (!quill) return;
210
222
  const handleBlur = () => {
211
- const html = quill.root.innerHTML;
212
- onBlur && onBlur(html);
223
+ setTimeout(() => {
224
+ const html = quill.root.innerHTML;
225
+ onBlur && onBlur(html);
226
+ }, 50);
213
227
  };
214
228
  quill.root.addEventListener('blur', handleBlur);
215
229
  return () => {
216
230
  quill.root.removeEventListener('blur', handleBlur);
217
231
  };
218
232
  }, [quill]);
219
- useEffect(() => {
220
- if (!quill) return;
221
- quill.on('selection-change', (range, oldRange, source) => {
222
- if (!range) return;
223
- handelFocus();
224
- });
225
- return () => {
226
- quill.off('selection-change');
227
- };
228
- }, [quill]);
229
- useEffect(() => {
230
- if (!quill) return;
231
- quill.on('text-change', handleChange);
232
- return () => {
233
- quill.off('text-change', handleChange);
234
- };
235
- }, [quill, isMounted]);
236
- useEffect(() => {
237
- applySizes();
238
- }, [quill, height, width, maxHeight, maxWidth, minHeight, minWidth]);
239
233
  useEffect(() => {
240
234
  if (!quill) return;
241
235
  quill.clipboard.addMatcher(Node.ELEMENT_NODE, (node, delta) => {
@@ -296,5 +290,5 @@ const QuillEditor = ({
296
290
  })
297
291
  })]
298
292
  });
299
- };
293
+ });
300
294
  export default QuillEditor;
@@ -1,5 +1,5 @@
1
1
  import 'quill/dist/quill.snow.css';
2
2
  import { QuillEditorProps } from './models';
3
- declare const QuillEditor: React.FC<QuillEditorProps>;
3
+ declare const QuillEditor: import("react").ForwardRefExoticComponent<QuillEditorProps & import("react").RefAttributes<HTMLDivElement>>;
4
4
  export default QuillEditor;
5
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/packages/core/QuillEditor/index.tsx"],"names":[],"mappings":"AAGA,OAAO,2BAA2B,CAAA;AAClC,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AA+D3C,QAAA,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAoR3C,CAAA;AAED,eAAe,WAAW,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/packages/core/QuillEditor/index.tsx"],"names":[],"mappings":"AAUA,OAAO,2BAA2B,CAAA;AAClC,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAiE3C,QAAA,MAAM,WAAW,6GA6RhB,CAAA;AAED,eAAe,WAAW,CAAA"}
@@ -1,5 +1,5 @@
1
1
  /** @jsxImportSource @emotion/react */
2
- import { useRef, useState, useEffect, useCallback } from 'react';
2
+ import { useRef, useState, useEffect, useCallback, forwardRef, useLayoutEffect } from 'react';
3
3
  import Quill from 'quill';
4
4
  import 'quill/dist/quill.snow.css';
5
5
  import { basicToolbar, richToolbar } from './config';
@@ -55,7 +55,7 @@ Quill.register({
55
55
  'formats/ulist': MyListItem
56
56
  });
57
57
  Quill.register(CustomLinkSanitizer, true);
58
- const QuillEditor = ({
58
+ const QuillEditor = /*#__PURE__*/forwardRef(({
59
59
  height,
60
60
  width,
61
61
  maxHeight,
@@ -82,12 +82,15 @@ const QuillEditor = ({
82
82
  disabled,
83
83
  pasteAsText,
84
84
  name,
85
- id,
86
- resize // Trenger vi denne?,
87
- }) => {
85
+ id
86
+ }, ref) => {
88
87
  const [quill, setQuill] = useState(null);
89
88
  const isMounted = useRef(false);
90
89
  const containerRef = useRef(null);
90
+ const defaultValueRef = useRef(initialValue);
91
+ const onTextChangeRef = useRef(onChange);
92
+ // const onFocusRef = useRef(onFocus)
93
+ // const onBlurRef = useRef(onBlur)
91
94
  const {
92
95
  alert
93
96
  } = useTheme();
@@ -134,20 +137,17 @@ const QuillEditor = ({
134
137
  }
135
138
  }
136
139
  };
137
- const handleChange = useCallback((delta, _oldDelta, source) => {
138
- if (quill) {
139
- const html = quill.root.innerHTML;
140
- if (onChange) {
141
- onChange(html, delta, source, quill);
142
- }
140
+ const handleChange = useCallback((delta, _oldDelta, source, instance) => {
141
+ const html = instance.root.innerHTML;
142
+ if (onChange) {
143
+ onChange(html, delta, source, quill);
143
144
  }
144
145
  }, [quill, onChange]);
145
- const handelFocus = useCallback(() => {
146
- if (!quill) return;
147
- const html = quill.root.innerHTML;
146
+ const handelFocus = useCallback(instance => {
147
+ const html = instance.root.innerHTML;
148
148
  onFocus && onFocus(html);
149
149
  }, [quill, onFocus]);
150
- const applySizes = () => {
150
+ const applySizes = quill => {
151
151
  if (!quill) return;
152
152
  minHeight && (quill.root.style.minHeight = `${minHeight}px`);
153
153
  maxHeight && (quill.root.style.maxHeight = `${maxHeight}px`);
@@ -156,86 +156,80 @@ const QuillEditor = ({
156
156
  height && (quill.root.style.height = `${height}px`);
157
157
  minWidth && (quill.root.style.minWidth = `${minWidth}px`);
158
158
  };
159
+ useLayoutEffect(() => {
160
+ onTextChangeRef.current = onChange;
161
+ });
159
162
  useEffect(() => {
160
- if (!isMounted.current) {
161
- const editor = document.createElement('div');
162
- containerRef.current?.appendChild(editor);
163
- const quillInstance = new Quill(editor, {
164
- theme: 'snow',
165
- modules: {
166
- ...modules
167
- },
168
- formats,
169
- placeholder,
170
- bounds,
171
- readOnly
172
- });
173
- const editorActual = editor.querySelector('.ql-editor');
174
- if (editorActual) {
175
- editorActual.setAttribute('id', id || 'ql-editor');
176
- editorActual.setAttribute('name', name || 'ql-editor');
163
+ if (isMounted.current) return;
164
+ const container = containerRef.current;
165
+ const editor = container?.appendChild(container.ownerDocument.createElement('div'));
166
+ if (!editor) return;
167
+ const quillInstance = new Quill(editor, {
168
+ theme: 'snow',
169
+ modules: {
170
+ ...modules
171
+ },
172
+ formats,
173
+ placeholder,
174
+ bounds,
175
+ readOnly
176
+ });
177
+ ref && ref.current && (ref.current = editor);
178
+ const editorActual = editor.querySelector('.ql-editor');
179
+ if (editorActual) {
180
+ editorActual.setAttribute('id', id || 'ql-editor');
181
+ editorActual.setAttribute('name', name || 'ql-editor');
182
+ }
183
+ applySizes(quillInstance);
184
+ quillInstance.keyboard.addBinding({
185
+ key: 'Backspace'
186
+ }, {
187
+ format: {
188
+ list: true,
189
+ indent: true
177
190
  }
178
- quillInstance.keyboard.addBinding({
179
- key: 'Backspace'
180
- }, {
181
- format: {
182
- list: true,
183
- indent: true
184
- }
185
- }, (range, context) => {
186
- return handleBackspaceWithIndentetList(range, context, quillInstance);
187
- });
188
- // Move the last binding in the list, to the top. Ensure that the custom binding is called first.
189
- quillInstance.keyboard.bindings['Backspace'].unshift(quillInstance.keyboard.bindings['Backspace'].pop());
190
- quillInstance.keyboard.addBinding({
191
- key: 'Escape'
192
- }, () => {
193
- // Remove focus from editor
194
- quillInstance.blur();
191
+ }, (range, context) => {
192
+ return handleBackspaceWithIndentetList(range, context, quillInstance);
193
+ });
194
+ // Move the last binding in the list, to the top. Ensure that the custom binding is called first.
195
+ quillInstance.keyboard.bindings['Backspace'].unshift(quillInstance.keyboard.bindings['Backspace'].pop());
196
+ quillInstance.keyboard.addBinding({
197
+ key: 'Escape'
198
+ }, () => {
199
+ // Remove focus from editor
200
+ quillInstance.blur();
201
+ });
202
+ if (defaultValueRef.current) {
203
+ const delta = quillInstance.clipboard.convert({
204
+ html: defaultValueRef.current
195
205
  });
196
- if (initialValue !== undefined) {
197
- if (quillInstance.root.innerHTML !== initialValue) {
198
- const delta = quillInstance.clipboard.convert({
199
- html: initialValue
200
- });
201
- quillInstance.setContents(delta);
202
- }
203
- }
204
- isMounted.current = true;
205
- setQuill(quillInstance);
206
+ quillInstance.setContents(delta);
206
207
  }
207
- }, []);
208
+ quillInstance.on(Quill.events.TEXT_CHANGE, (...args) => handleChange(...args, quillInstance));
209
+ quillInstance.on(Quill.events.SELECTION_CHANGE, range => {
210
+ if (!range) return;
211
+ handelFocus(quillInstance);
212
+ });
213
+ isMounted.current = true;
214
+ setQuill(quillInstance);
215
+ return () => {
216
+ ref && ref.current && (ref.current = null);
217
+ container.innerHTML = '';
218
+ };
219
+ }, [ref]);
208
220
  useEffect(() => {
209
221
  if (!quill) return;
210
222
  const handleBlur = () => {
211
- const html = quill.root.innerHTML;
212
- onBlur && onBlur(html);
223
+ setTimeout(() => {
224
+ const html = quill.root.innerHTML;
225
+ onBlur && onBlur(html);
226
+ }, 50);
213
227
  };
214
228
  quill.root.addEventListener('blur', handleBlur);
215
229
  return () => {
216
230
  quill.root.removeEventListener('blur', handleBlur);
217
231
  };
218
232
  }, [quill]);
219
- useEffect(() => {
220
- if (!quill) return;
221
- quill.on('selection-change', (range, oldRange, source) => {
222
- if (!range) return;
223
- handelFocus();
224
- });
225
- return () => {
226
- quill.off('selection-change');
227
- };
228
- }, [quill]);
229
- useEffect(() => {
230
- if (!quill) return;
231
- quill.on('text-change', handleChange);
232
- return () => {
233
- quill.off('text-change', handleChange);
234
- };
235
- }, [quill, isMounted]);
236
- useEffect(() => {
237
- applySizes();
238
- }, [quill, height, width, maxHeight, maxWidth, minHeight, minWidth]);
239
233
  useEffect(() => {
240
234
  if (!quill) return;
241
235
  quill.clipboard.addMatcher(Node.ELEMENT_NODE, (node, delta) => {
@@ -296,5 +290,5 @@ const QuillEditor = ({
296
290
  })
297
291
  })]
298
292
  });
299
- };
293
+ });
300
294
  export default QuillEditor;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bbl-digital/snorre",
3
- "version": "4.1.11",
3
+ "version": "4.1.13",
4
4
  "description": "Design library for BBL Digital",
5
5
  "license": "MIT",
6
6
  "main": "./lib/index.js",