@herca/rn-kit 0.1.54 → 0.1.55
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -29,7 +29,6 @@ const TextEditor = /*#__PURE__*/forwardRef(({
|
|
|
29
29
|
saveLinkButtonText = 'Simpan',
|
|
30
30
|
cancelLinkButtonText = 'Batal'
|
|
31
31
|
}, ref) => {
|
|
32
|
-
const [keyboardHeight, setKeyboardHeight] = useState(0);
|
|
33
32
|
const [showToolbar, setShowToolbar] = useState(false);
|
|
34
33
|
const [activeFormats, setActiveFormats] = useState(new Set());
|
|
35
34
|
const [characterCount, setCharacterCount] = useState(0);
|
|
@@ -39,9 +38,11 @@ const TextEditor = /*#__PURE__*/forwardRef(({
|
|
|
39
38
|
const [isEditingLink, setIsEditingLink] = useState(false);
|
|
40
39
|
const webviewRef = useRef(null);
|
|
41
40
|
const inputUrlRef = useRef(null);
|
|
41
|
+
|
|
42
|
+
// Sekarang handleOnChange hanya dipanggil sebagai fallback
|
|
42
43
|
const handleOnChange = data => {
|
|
43
|
-
//
|
|
44
|
-
const textOnly = data.replace(/<[^>]*>/g, '');
|
|
44
|
+
// Fallback jika message bukan JSON
|
|
45
|
+
const textOnly = data.replace(/<[^>]*>/g, '').trim();
|
|
45
46
|
setCharacterCount(textOnly.length);
|
|
46
47
|
if (maxLength && textOnly.length > maxLength) {
|
|
47
48
|
return;
|
|
@@ -91,6 +92,7 @@ const TextEditor = /*#__PURE__*/forwardRef(({
|
|
|
91
92
|
width: 99.9%;
|
|
92
93
|
height: 100%;
|
|
93
94
|
overflow-x: hidden;
|
|
95
|
+
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
|
|
94
96
|
}
|
|
95
97
|
#editor {
|
|
96
98
|
height: 100%;
|
|
@@ -148,13 +150,29 @@ const TextEditor = /*#__PURE__*/forwardRef(({
|
|
|
148
150
|
editor.classList.remove('placeholder');
|
|
149
151
|
}
|
|
150
152
|
|
|
153
|
+
// Kirim initial character count saat load
|
|
154
|
+
setTimeout(() => {
|
|
155
|
+
const charCount = editor.textContent.trim().length;
|
|
156
|
+
window.ReactNativeWebView.postMessage(JSON.stringify({
|
|
157
|
+
type: 'initialCount',
|
|
158
|
+
characterCount: charCount
|
|
159
|
+
}));
|
|
160
|
+
}, 100);
|
|
161
|
+
|
|
151
162
|
editor.addEventListener("input", () => {
|
|
152
163
|
if (editor.textContent.trim()) {
|
|
153
164
|
editor.classList.remove('placeholder');
|
|
154
165
|
} else {
|
|
155
166
|
editor.classList.add('placeholder');
|
|
156
167
|
}
|
|
157
|
-
|
|
168
|
+
|
|
169
|
+
// Kirim HTML dan character count
|
|
170
|
+
const charCount = editor.textContent.trim().length;
|
|
171
|
+
window.ReactNativeWebView.postMessage(JSON.stringify({
|
|
172
|
+
type: 'content',
|
|
173
|
+
html: editor.innerHTML,
|
|
174
|
+
characterCount: charCount
|
|
175
|
+
}));
|
|
158
176
|
});
|
|
159
177
|
|
|
160
178
|
editor.addEventListener("focus", () => {
|
|
@@ -277,7 +295,14 @@ const TextEditor = /*#__PURE__*/forwardRef(({
|
|
|
277
295
|
range.collapse(true);
|
|
278
296
|
selection.removeAllRanges();
|
|
279
297
|
selection.addRange(range);
|
|
280
|
-
|
|
298
|
+
|
|
299
|
+
// Update content dan character count
|
|
300
|
+
const charCount = editor.textContent.trim().length;
|
|
301
|
+
window.ReactNativeWebView.postMessage(JSON.stringify({
|
|
302
|
+
type: 'content',
|
|
303
|
+
html: editor.innerHTML,
|
|
304
|
+
characterCount: charCount
|
|
305
|
+
}));
|
|
281
306
|
return;
|
|
282
307
|
}
|
|
283
308
|
}
|
|
@@ -298,7 +323,14 @@ const TextEditor = /*#__PURE__*/forwardRef(({
|
|
|
298
323
|
selection.removeAllRanges();
|
|
299
324
|
selection.addRange(range);
|
|
300
325
|
}
|
|
301
|
-
|
|
326
|
+
|
|
327
|
+
// Update content dan character count
|
|
328
|
+
const charCount = editor.textContent.trim().length;
|
|
329
|
+
window.ReactNativeWebView.postMessage(JSON.stringify({
|
|
330
|
+
type: 'content',
|
|
331
|
+
html: editor.innerHTML,
|
|
332
|
+
characterCount: charCount
|
|
333
|
+
}));
|
|
302
334
|
} else {
|
|
303
335
|
editor.focus();
|
|
304
336
|
document.execCommand(command, false, null);
|
|
@@ -323,32 +355,40 @@ const TextEditor = /*#__PURE__*/forwardRef(({
|
|
|
323
355
|
if (webviewRef.current) {
|
|
324
356
|
if (Platform.OS === 'ios') {
|
|
325
357
|
webviewRef.current.injectJavaScript(`
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
358
|
+
const editor = document.getElementById('editor');
|
|
359
|
+
editor.focus();
|
|
360
|
+
document.execCommand('${command}', false, null);
|
|
361
|
+
|
|
362
|
+
// Force update formats after command
|
|
363
|
+
setTimeout(() => {
|
|
364
|
+
const formats = [];
|
|
365
|
+
if (document.queryCommandState('bold')) formats.push('bold');
|
|
366
|
+
if (document.queryCommandState('italic')) formats.push('italic');
|
|
367
|
+
if (document.queryCommandState('underline')) formats.push('underline');
|
|
368
|
+
if (document.queryCommandState('strikeThrough')) formats.push('strikeThrough');
|
|
369
|
+
window.ReactNativeWebView.postMessage(JSON.stringify({
|
|
370
|
+
type: 'formats',
|
|
371
|
+
formats: formats
|
|
372
|
+
}));
|
|
373
|
+
window.ReactNativeWebView.postMessage(editor.innerHTML);
|
|
374
|
+
}, 50);
|
|
375
|
+
true;
|
|
376
|
+
`);
|
|
338
377
|
} else {
|
|
339
378
|
webviewRef.current.postMessage(command);
|
|
340
379
|
}
|
|
341
380
|
}
|
|
342
381
|
};
|
|
343
382
|
const openLinkModal = () => {
|
|
344
|
-
// Get selected text first
|
|
345
383
|
if (webviewRef.current) {
|
|
346
384
|
webviewRef.current.postMessage('getSelectedText');
|
|
347
385
|
}
|
|
348
|
-
|
|
386
|
+
setTimeout(() => {
|
|
387
|
+
setShowLinkModal(true);
|
|
388
|
+
}, 50);
|
|
349
389
|
setTimeout(() => {
|
|
350
390
|
inputUrlRef.current?.focus();
|
|
351
|
-
},
|
|
391
|
+
}, 350);
|
|
352
392
|
};
|
|
353
393
|
const insertLink = () => {
|
|
354
394
|
if (!linkUrl.trim()) {
|
|
@@ -356,7 +396,6 @@ const TextEditor = /*#__PURE__*/forwardRef(({
|
|
|
356
396
|
return;
|
|
357
397
|
}
|
|
358
398
|
let finalUrl = linkUrl.trim();
|
|
359
|
-
// Add https:// if no protocol
|
|
360
399
|
if (!finalUrl.match(/^https?:\/\//i)) {
|
|
361
400
|
finalUrl = 'https://' + finalUrl;
|
|
362
401
|
}
|
|
@@ -368,61 +407,71 @@ const TextEditor = /*#__PURE__*/forwardRef(({
|
|
|
368
407
|
if (webviewRef.current) {
|
|
369
408
|
if (Platform.OS === 'ios') {
|
|
370
409
|
webviewRef.current.injectJavaScript(`
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
if (selection && selection.rangeCount > 0) {
|
|
377
|
-
const range = selection.getRangeAt(0);
|
|
410
|
+
const linkData = ${linkData};
|
|
411
|
+
const editor = document.getElementById('editor');
|
|
412
|
+
editor.focus();
|
|
413
|
+
const selection = window.getSelection();
|
|
378
414
|
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
let linkElement = null;
|
|
382
|
-
let node = range.startContainer;
|
|
415
|
+
if (selection && selection.rangeCount > 0) {
|
|
416
|
+
const range = selection.getRangeAt(0);
|
|
383
417
|
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
break;
|
|
388
|
-
}
|
|
389
|
-
node = node.parentNode;
|
|
390
|
-
}
|
|
418
|
+
if (linkData.isExisting) {
|
|
419
|
+
let linkElement = null;
|
|
420
|
+
let node = range.startContainer;
|
|
391
421
|
|
|
392
|
-
|
|
393
|
-
|
|
422
|
+
while (node && node !== editor) {
|
|
423
|
+
if (node.nodeName === 'A') {
|
|
424
|
+
linkElement = node;
|
|
425
|
+
break;
|
|
394
426
|
}
|
|
427
|
+
node = node.parentNode;
|
|
428
|
+
}
|
|
395
429
|
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
linkElement.textContent = linkData.text;
|
|
399
|
-
range.setStartAfter(linkElement);
|
|
400
|
-
range.collapse(true);
|
|
401
|
-
selection.removeAllRanges();
|
|
402
|
-
selection.addRange(range);
|
|
403
|
-
window.ReactNativeWebView.postMessage(editor.innerHTML);
|
|
404
|
-
true;
|
|
405
|
-
return;
|
|
406
|
-
}
|
|
430
|
+
if (!linkElement && range.commonAncestorContainer.nodeType === 1) {
|
|
431
|
+
linkElement = range.commonAncestorContainer.querySelector('a');
|
|
407
432
|
}
|
|
408
433
|
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
434
|
+
if (linkElement) {
|
|
435
|
+
linkElement.href = linkData.url;
|
|
436
|
+
linkElement.textContent = linkData.text;
|
|
437
|
+
range.setStartAfter(linkElement);
|
|
438
|
+
range.collapse(true);
|
|
439
|
+
selection.removeAllRanges();
|
|
440
|
+
selection.addRange(range);
|
|
441
|
+
|
|
442
|
+
const charCount = editor.textContent.trim().length;
|
|
443
|
+
window.ReactNativeWebView.postMessage(JSON.stringify({
|
|
444
|
+
type: 'content',
|
|
445
|
+
html: editor.innerHTML,
|
|
446
|
+
characterCount: charCount
|
|
447
|
+
}));
|
|
448
|
+
true;
|
|
449
|
+
return;
|
|
450
|
+
}
|
|
422
451
|
}
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
452
|
+
|
|
453
|
+
const link = document.createElement('a');
|
|
454
|
+
link.href = linkData.url;
|
|
455
|
+
link.textContent = linkData.text;
|
|
456
|
+
link.target = '_blank';
|
|
457
|
+
range.deleteContents();
|
|
458
|
+
range.insertNode(link);
|
|
459
|
+
const space = document.createTextNode(' ');
|
|
460
|
+
link.parentNode.insertBefore(space, link.nextSibling);
|
|
461
|
+
range.setStartAfter(space);
|
|
462
|
+
range.collapse(true);
|
|
463
|
+
selection.removeAllRanges();
|
|
464
|
+
selection.addRange(range);
|
|
465
|
+
}
|
|
466
|
+
|
|
467
|
+
const charCount = editor.textContent.trim().length;
|
|
468
|
+
window.ReactNativeWebView.postMessage(JSON.stringify({
|
|
469
|
+
type: 'content',
|
|
470
|
+
html: editor.innerHTML,
|
|
471
|
+
characterCount: charCount
|
|
472
|
+
}));
|
|
473
|
+
true;
|
|
474
|
+
`);
|
|
426
475
|
} else {
|
|
427
476
|
webviewRef.current.postMessage('insertLink:' + linkData);
|
|
428
477
|
}
|
|
@@ -434,39 +483,59 @@ const TextEditor = /*#__PURE__*/forwardRef(({
|
|
|
434
483
|
};
|
|
435
484
|
const closeLinkModal = () => {
|
|
436
485
|
setShowLinkModal(false);
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
486
|
+
setTimeout(() => {
|
|
487
|
+
setLinkText('');
|
|
488
|
+
setLinkUrl('');
|
|
489
|
+
setIsEditingLink(false);
|
|
490
|
+
}, 300);
|
|
440
491
|
};
|
|
441
492
|
const handleWebViewMessage = event => {
|
|
442
493
|
const data = event.nativeEvent.data;
|
|
443
494
|
try {
|
|
444
495
|
const parsed = JSON.parse(data);
|
|
445
496
|
if (parsed.type === 'formats') {
|
|
446
|
-
|
|
497
|
+
requestAnimationFrame(() => {
|
|
498
|
+
setActiveFormats(new Set(parsed.formats));
|
|
499
|
+
});
|
|
447
500
|
} else if (parsed.type === 'focus') {
|
|
448
|
-
|
|
501
|
+
requestAnimationFrame(() => {
|
|
502
|
+
onFocus?.();
|
|
503
|
+
});
|
|
449
504
|
} else if (parsed.type === 'blur') {
|
|
450
|
-
|
|
505
|
+
requestAnimationFrame(() => {
|
|
506
|
+
onBlur?.();
|
|
507
|
+
});
|
|
451
508
|
} else if (parsed.type === 'selectedText') {
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
509
|
+
requestAnimationFrame(() => {
|
|
510
|
+
setLinkText(parsed.text);
|
|
511
|
+
const cleanUrl = parsed.url.replace(/^https?:\/\//, '');
|
|
512
|
+
setLinkUrl(cleanUrl);
|
|
513
|
+
setIsEditingLink(parsed.isExisting || false);
|
|
514
|
+
});
|
|
515
|
+
} else if (parsed.type === 'initialCount') {
|
|
516
|
+
// Set initial character count saat pertama load
|
|
517
|
+
setCharacterCount(parsed.characterCount);
|
|
518
|
+
} else if (parsed.type === 'content') {
|
|
519
|
+
// Update character count dari WebView
|
|
520
|
+
setCharacterCount(parsed.characterCount);
|
|
521
|
+
|
|
522
|
+
// Cek maxLength
|
|
523
|
+
if (maxLength && parsed.characterCount > maxLength) {
|
|
524
|
+
// Optional: bisa tambahkan alert atau prevent
|
|
525
|
+
return;
|
|
526
|
+
}
|
|
527
|
+
onChange?.(parsed.html);
|
|
457
528
|
}
|
|
458
529
|
} catch {
|
|
459
|
-
//
|
|
530
|
+
// Fallback ke cara lama jika bukan JSON (untuk backward compatibility)
|
|
460
531
|
handleOnChange(data);
|
|
461
532
|
}
|
|
462
533
|
};
|
|
463
534
|
useEffect(() => {
|
|
464
|
-
const showSub = Keyboard.addListener('keyboardDidShow',
|
|
465
|
-
setKeyboardHeight(e.endCoordinates.height - 35);
|
|
535
|
+
const showSub = Keyboard.addListener('keyboardDidShow', () => {
|
|
466
536
|
setShowToolbar(true);
|
|
467
537
|
});
|
|
468
538
|
const hideSub = Keyboard.addListener('keyboardDidHide', () => {
|
|
469
|
-
setKeyboardHeight(0);
|
|
470
539
|
setShowToolbar(false);
|
|
471
540
|
});
|
|
472
541
|
return () => {
|
|
@@ -474,7 +543,6 @@ const TextEditor = /*#__PURE__*/forwardRef(({
|
|
|
474
543
|
hideSub.remove();
|
|
475
544
|
};
|
|
476
545
|
}, []);
|
|
477
|
-
const gap = Platform.OS === 'ios' ? 200 : 185;
|
|
478
546
|
const isFormatActive = format => activeFormats.has(format);
|
|
479
547
|
const toolbarButtons = [{
|
|
480
548
|
command: 'bold',
|
|
@@ -492,12 +560,9 @@ const TextEditor = /*#__PURE__*/forwardRef(({
|
|
|
492
560
|
command: 'strikeThrough',
|
|
493
561
|
icon: 'strike-through',
|
|
494
562
|
label: 'Strike'
|
|
495
|
-
},
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
label: 'Link',
|
|
499
|
-
isSpecial: true
|
|
500
|
-
}, {
|
|
563
|
+
},
|
|
564
|
+
// { command: 'link', icon: 'Link', label: 'Link', isSpecial: true },
|
|
565
|
+
{
|
|
501
566
|
command: 'insertUnorderedList',
|
|
502
567
|
icon: 'list-un-ordered',
|
|
503
568
|
label: 'Bullet'
|
|
@@ -556,25 +621,26 @@ const TextEditor = /*#__PURE__*/forwardRef(({
|
|
|
556
621
|
weight: "medium",
|
|
557
622
|
children: [characterCount, "/", maxLength]
|
|
558
623
|
})]
|
|
559
|
-
}) : null, showToolbar
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
624
|
+
}) : null, showToolbar && /*#__PURE__*/_jsx(KeyboardAvoidingView, {
|
|
625
|
+
behavior: Platform.OS === 'ios' ? 'position' : 'padding',
|
|
626
|
+
children: /*#__PURE__*/_jsx(SafeAreaView, {
|
|
627
|
+
style: [styles.toolbar, Platform?.OS === 'android' && Platform.Version < 35 ? styles.mt10p : undefined],
|
|
628
|
+
children: /*#__PURE__*/_jsx(ScrollView, {
|
|
629
|
+
horizontal: true,
|
|
630
|
+
showsHorizontalScrollIndicator: false,
|
|
631
|
+
contentContainerStyle: styles.toolbarContent,
|
|
632
|
+
children: toolbarButtons.map(button => /*#__PURE__*/_jsx(TouchableOpacity, {
|
|
633
|
+
onPress: () => button.isSpecial ? openLinkModal() : formatText(button.command),
|
|
634
|
+
style: [styles.toolButton, isFormatActive(button.command) && styles.toolButtonActive],
|
|
635
|
+
children: /*#__PURE__*/_jsx(Icon, {
|
|
636
|
+
name: button.icon,
|
|
637
|
+
size: 20,
|
|
638
|
+
color: isFormatActive(button.command) ? '#fff' : Color.gray[900]
|
|
639
|
+
})
|
|
640
|
+
}, button.command))
|
|
641
|
+
})
|
|
576
642
|
})
|
|
577
|
-
})
|
|
643
|
+
}), /*#__PURE__*/_jsxs(BottomSheet, {
|
|
578
644
|
isOpen: showLinkModal,
|
|
579
645
|
onClose: () => setShowLinkModal(false),
|
|
580
646
|
children: [/*#__PURE__*/_jsxs(View, {
|
|
@@ -679,6 +745,9 @@ const styles = StyleSheet.create({
|
|
|
679
745
|
},
|
|
680
746
|
flex1: {
|
|
681
747
|
flex: 1
|
|
748
|
+
},
|
|
749
|
+
mt10p: {
|
|
750
|
+
marginTop: '10%'
|
|
682
751
|
}
|
|
683
752
|
});
|
|
684
753
|
//# sourceMappingURL=TextEditor.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["forwardRef","useEffect","useImperativeHandle","useRef","useState","Alert","Dimensions","Keyboard","KeyboardAvoidingView","Platform","SafeAreaView","ScrollView","StyleSheet","TouchableOpacity","View","WebView","BottomSheet","Button","Color","Icon","Input","LabelForm","Typography","jsx","_jsx","jsxs","_jsxs","TextEditor","label","hasError","hint","onChange","height","initialValue","placeholder","maxLength","onFocus","onBlur","inputLinkTextPlacholder","inputLinkUrlPlacholder","inputLabelLinkText","inputLabelLinkUrl","saveLinkButtonText","cancelLinkButtonText","ref","keyboardHeight","setKeyboardHeight","showToolbar","setShowToolbar","activeFormats","setActiveFormats","Set","characterCount","setCharacterCount","showLinkModal","setShowLinkModal","linkText","setLinkText","linkUrl","setLinkUrl","isEditingLink","setIsEditingLink","webviewRef","inputUrlRef","handleOnChange","data","textOnly","replace","length","getContent","current","postMessage","setContent","html","escapedHtml","injectJavaScript","clearContent","htmlEditor","gray","formatText","command","OS","openLinkModal","setTimeout","focus","insertLink","trim","alert","finalUrl","match","linkData","JSON","stringify","text","url","isExisting","closeLinkModal","handleWebViewMessage","event","nativeEvent","parsed","parse","type","formats","cleanUrl","showSub","addListener","e","endCoordinates","hideSub","remove","gap","isFormatActive","format","has","toolbarButtons","icon","isSpecial","style","styles","container","children","title","editorWrapper","minHeight","behavior","undefined","originWhitelist","source","onMessage","webview","javaScriptEnabled","domStorageEnabled","mixedContentMode","allowUniversalAccessFromFileURLs","allowFileAccess","scrollEnabled","hintContainer","color","danger","variant","weight","toolbar","top","get","horizontal","showsHorizontalScrollIndicator","contentContainerStyle","toolbarContent","map","button","onPress","toolButton","toolButtonActive","name","size","isOpen","onClose","modalBody","value","onChangeText","autoCapitalize","keyboardType","modalActions","flex1","displayName","create","backgroundColor","position","flex","borderWidth","borderColor","borderRadius","overflow","paddingVertical","paddingHorizontal","flexDirection","justifyContent","alignItems","borderTopWidth","left","width","padding","marginHorizontal","minWidth","primary","marginTop"],"sourceRoot":"../../../src","sources":["TextEditor/TextEditor.tsx"],"mappings":";;AAAA,SACEA,UAAU,EACVC,SAAS,EACTC,mBAAmB,EACnBC,MAAM,EACNC,QAAQ,QACH,OAAO;AACd,SACEC,KAAK,EACLC,UAAU,EACVC,QAAQ,EACRC,oBAAoB,EACpBC,QAAQ,EACRC,YAAY,EACZC,UAAU,EACVC,UAAU,EAEVC,gBAAgB,EAChBC,IAAI,QAEC,cAAc;AACrB,SAASC,OAAO,QAAQ,sBAAsB;AAC9C,OAAOC,WAAW,MAAM,+BAA4B;AACpD,OAAOC,MAAM,MAAM,qBAAkB;AACrC,OAAOC,KAAK,MAAM,mBAAgB;AAClC,OAAOC,IAAI,MAA8B,kBAAS;AAClD,OAAOC,KAAK,MAAM,mBAAgB;AAClC,OAAOC,SAAS,MAAM,2BAAwB;AAC9C,OAAOC,UAAU,MAAM,6BAA0B;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AA0ClD,MAAMC,UAAU,gBAAG3B,UAAU,CAC3B,CACE;EACE4B,KAAK;EACLC,QAAQ;EACRC,IAAI;EACJC,QAAQ;EACRC,MAAM,GAAG,GAAG;EACZC,YAAY,GAAG,EAAE;EACjBC,WAAW,GAAG,0BAA0B;EACxCC,SAAS;EACTC,OAAO;EACPC,MAAM;EACNC,uBAAuB,GAAG,UAAU;EACpCC,sBAAsB,GAAG,yBAAyB;EAClDC,kBAAkB,GAAG,WAAW;EAChCC,iBAAiB,GAAG,UAAU;EAC9BC,kBAAkB,GAAG,QAAQ;EAC7BC,oBAAoB,GAAG;AACzB,CAAC,EACDC,GAAG,KACA;EACH,MAAM,CAACC,cAAc,EAAEC,iBAAiB,CAAC,GAAG1C,QAAQ,CAAC,CAAC,CAAC;EACvD,MAAM,CAAC2C,WAAW,EAAEC,cAAc,CAAC,GAAG5C,QAAQ,CAAU,KAAK,CAAC;EAC9D,MAAM,CAAC6C,aAAa,EAAEC,gBAAgB,CAAC,GAAG9C,QAAQ,CAAc,IAAI+C,GAAG,CAAC,CAAC,CAAC;EAC1E,MAAM,CAACC,cAAc,EAAEC,iBAAiB,CAAC,GAAGjD,QAAQ,CAAC,CAAC,CAAC;EACvD,MAAM,CAACkD,aAAa,EAAEC,gBAAgB,CAAC,GAAGnD,QAAQ,CAAC,KAAK,CAAC;EACzD,MAAM,CAACoD,QAAQ,EAAEC,WAAW,CAAC,GAAGrD,QAAQ,CAAC,EAAE,CAAC;EAC5C,MAAM,CAACsD,OAAO,EAAEC,UAAU,CAAC,GAAGvD,QAAQ,CAAC,EAAE,CAAC;EAC1C,MAAM,CAACwD,aAAa,EAAEC,gBAAgB,CAAC,GAAGzD,QAAQ,CAAC,KAAK,CAAC;EACzD,MAAM0D,UAAU,GAAG3D,MAAM,CAAU,IAAI,CAAC;EACxC,MAAM4D,WAAW,GAAG5D,MAAM,CAAY,IAAI,CAAC;EAE3C,MAAM6D,cAAc,GAAIC,IAAY,IAAK;IACvC;IACA,MAAMC,QAAQ,GAAGD,IAAI,CAACE,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;IAC7Cd,iBAAiB,CAACa,QAAQ,CAACE,MAAM,CAAC;IAElC,IAAIjC,SAAS,IAAI+B,QAAQ,CAACE,MAAM,GAAGjC,SAAS,EAAE;MAC5C;IACF;IAEAJ,QAAQ,GAAGkC,IAAI,CAAC;EAClB,CAAC;;EAED;EACA/D,mBAAmB,CAAC0C,GAAG,EAAE,OAAO;IAC9ByB,UAAU,EAAEA,CAAA,KAAM;MAChBP,UAAU,CAACQ,OAAO,EAAEC,WAAW,CAAC,YAAY,CAAC;IAC/C,CAAC;IACDC,UAAU,EAAGC,IAAY,IAAK;MAC5B,MAAMC,WAAW,GAAGD,IAAI,CAACN,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAACA,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;MACnEL,UAAU,CAACQ,OAAO,EAAEK,gBAAgB,CAAC;AAC7C;AACA,+BAA+BD,WAAW;AAC1C;AACA;AACA;AACA;AACA,OAAO,CAAC;IACF,CAAC;IACDE,YAAY,EAAEA,CAAA,KAAM;MAClBd,UAAU,CAACQ,OAAO,EAAEK,gBAAgB,CAAC;AAC7C;AACA;AACA;AACA;AACA;AACA,OAAO,CAAC;IACF;EACF,CAAC,CAAC,CAAC;EAEH,MAAME,UAAU,GAAG;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB3C,WAAW;AACnC,qBAAqBhB,KAAK,CAAC4D,IAAI,CAAC,GAAG,CAAC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sEAAsE7C,YAAY;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;EAEC,MAAM8C,UAAU,GAAIC,OAAe,IAAK;IACtC,IAAIlB,UA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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["forwardRef","useEffect","useImperativeHandle","useRef","useState","Alert","Dimensions","Keyboard","KeyboardAvoidingView","Platform","SafeAreaView","ScrollView","StyleSheet","TouchableOpacity","View","WebView","BottomSheet","Button","Color","Icon","Input","LabelForm","Typography","jsx","_jsx","jsxs","_jsxs","TextEditor","label","hasError","hint","onChange","height","initialValue","placeholder","maxLength","onFocus","onBlur","inputLinkTextPlacholder","inputLinkUrlPlacholder","inputLabelLinkText","inputLabelLinkUrl","saveLinkButtonText","cancelLinkButtonText","ref","showToolbar","setShowToolbar","activeFormats","setActiveFormats","Set","characterCount","setCharacterCount","showLinkModal","setShowLinkModal","linkText","setLinkText","linkUrl","setLinkUrl","isEditingLink","setIsEditingLink","webviewRef","inputUrlRef","handleOnChange","data","textOnly","replace","trim","length","getContent","current","postMessage","setContent","html","escapedHtml","injectJavaScript","clearContent","htmlEditor","gray","formatText","command","OS","openLinkModal","setTimeout","focus","insertLink","alert","finalUrl","match","linkData","JSON","stringify","text","url","isExisting","closeLinkModal","handleWebViewMessage","event","nativeEvent","parsed","parse","type","requestAnimationFrame","formats","cleanUrl","showSub","addListener","hideSub","remove","isFormatActive","format","has","toolbarButtons","icon","style","styles","container","children","title","editorWrapper","minHeight","behavior","undefined","originWhitelist","source","onMessage","webview","javaScriptEnabled","domStorageEnabled","mixedContentMode","allowUniversalAccessFromFileURLs","allowFileAccess","scrollEnabled","hintContainer","color","danger","variant","weight","toolbar","Version","mt10p","horizontal","showsHorizontalScrollIndicator","contentContainerStyle","toolbarContent","map","button","onPress","isSpecial","toolButton","toolButtonActive","name","size","isOpen","onClose","modalBody","value","onChangeText","autoCapitalize","keyboardType","modalActions","flex1","displayName","create","backgroundColor","gap","position","flex","borderWidth","borderColor","borderRadius","overflow","paddingVertical","paddingHorizontal","flexDirection","justifyContent","alignItems","borderTopWidth","left","width","get","padding","marginHorizontal","minWidth","primary","marginTop"],"sourceRoot":"../../../src","sources":["TextEditor/TextEditor.tsx"],"mappings":"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AW;AACnC,qBAAqBhB,KAAK,CAAC2D,IAAI,CAAC,GAAG,CAAC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sEAAsE5C,YAAY;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TextEditor.d.ts","sourceRoot":"","sources":["../../../../src/TextEditor/TextEditor.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"TextEditor.d.ts","sourceRoot":"","sources":["../../../../src/TextEditor/TextEditor.tsx"],"names":[],"mappings":"AA4BA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,YAAY,EAAE,MAAM,IAAI,CAAC;CAC1B;AAED,UAAU,sBAAuB,SAAQ,cAAc;IACrD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAqBD,QAAA,MAAM,UAAU,kHA2sBf,CAAC;AAIF,eAAe,UAAU,CAAC"}
|
package/package.json
CHANGED
|
@@ -17,7 +17,6 @@ import {
|
|
|
17
17
|
TextInput,
|
|
18
18
|
TouchableOpacity,
|
|
19
19
|
View,
|
|
20
|
-
type KeyboardEvent,
|
|
21
20
|
} from 'react-native';
|
|
22
21
|
import { WebView } from 'react-native-webview';
|
|
23
22
|
import BottomSheet from '../BottomSheet/BottomSheet';
|
|
@@ -90,7 +89,6 @@ const TextEditor = forwardRef<TextEditorRef, ExtendedTextEditorType>(
|
|
|
90
89
|
},
|
|
91
90
|
ref
|
|
92
91
|
) => {
|
|
93
|
-
const [keyboardHeight, setKeyboardHeight] = useState(0);
|
|
94
92
|
const [showToolbar, setShowToolbar] = useState<boolean>(false);
|
|
95
93
|
const [activeFormats, setActiveFormats] = useState<Set<string>>(new Set());
|
|
96
94
|
const [characterCount, setCharacterCount] = useState(0);
|
|
@@ -101,9 +99,10 @@ const TextEditor = forwardRef<TextEditorRef, ExtendedTextEditorType>(
|
|
|
101
99
|
const webviewRef = useRef<WebView>(null);
|
|
102
100
|
const inputUrlRef = useRef<TextInput>(null);
|
|
103
101
|
|
|
102
|
+
// Sekarang handleOnChange hanya dipanggil sebagai fallback
|
|
104
103
|
const handleOnChange = (data: string) => {
|
|
105
|
-
//
|
|
106
|
-
const textOnly = data.replace(/<[^>]*>/g, '');
|
|
104
|
+
// Fallback jika message bukan JSON
|
|
105
|
+
const textOnly = data.replace(/<[^>]*>/g, '').trim();
|
|
107
106
|
setCharacterCount(textOnly.length);
|
|
108
107
|
|
|
109
108
|
if (maxLength && textOnly.length > maxLength) {
|
|
@@ -156,6 +155,7 @@ const TextEditor = forwardRef<TextEditorRef, ExtendedTextEditorType>(
|
|
|
156
155
|
width: 99.9%;
|
|
157
156
|
height: 100%;
|
|
158
157
|
overflow-x: hidden;
|
|
158
|
+
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
|
|
159
159
|
}
|
|
160
160
|
#editor {
|
|
161
161
|
height: 100%;
|
|
@@ -213,13 +213,29 @@ const TextEditor = forwardRef<TextEditorRef, ExtendedTextEditorType>(
|
|
|
213
213
|
editor.classList.remove('placeholder');
|
|
214
214
|
}
|
|
215
215
|
|
|
216
|
+
// Kirim initial character count saat load
|
|
217
|
+
setTimeout(() => {
|
|
218
|
+
const charCount = editor.textContent.trim().length;
|
|
219
|
+
window.ReactNativeWebView.postMessage(JSON.stringify({
|
|
220
|
+
type: 'initialCount',
|
|
221
|
+
characterCount: charCount
|
|
222
|
+
}));
|
|
223
|
+
}, 100);
|
|
224
|
+
|
|
216
225
|
editor.addEventListener("input", () => {
|
|
217
226
|
if (editor.textContent.trim()) {
|
|
218
227
|
editor.classList.remove('placeholder');
|
|
219
228
|
} else {
|
|
220
229
|
editor.classList.add('placeholder');
|
|
221
230
|
}
|
|
222
|
-
|
|
231
|
+
|
|
232
|
+
// Kirim HTML dan character count
|
|
233
|
+
const charCount = editor.textContent.trim().length;
|
|
234
|
+
window.ReactNativeWebView.postMessage(JSON.stringify({
|
|
235
|
+
type: 'content',
|
|
236
|
+
html: editor.innerHTML,
|
|
237
|
+
characterCount: charCount
|
|
238
|
+
}));
|
|
223
239
|
});
|
|
224
240
|
|
|
225
241
|
editor.addEventListener("focus", () => {
|
|
@@ -342,7 +358,14 @@ const TextEditor = forwardRef<TextEditorRef, ExtendedTextEditorType>(
|
|
|
342
358
|
range.collapse(true);
|
|
343
359
|
selection.removeAllRanges();
|
|
344
360
|
selection.addRange(range);
|
|
345
|
-
|
|
361
|
+
|
|
362
|
+
// Update content dan character count
|
|
363
|
+
const charCount = editor.textContent.trim().length;
|
|
364
|
+
window.ReactNativeWebView.postMessage(JSON.stringify({
|
|
365
|
+
type: 'content',
|
|
366
|
+
html: editor.innerHTML,
|
|
367
|
+
characterCount: charCount
|
|
368
|
+
}));
|
|
346
369
|
return;
|
|
347
370
|
}
|
|
348
371
|
}
|
|
@@ -363,7 +386,14 @@ const TextEditor = forwardRef<TextEditorRef, ExtendedTextEditorType>(
|
|
|
363
386
|
selection.removeAllRanges();
|
|
364
387
|
selection.addRange(range);
|
|
365
388
|
}
|
|
366
|
-
|
|
389
|
+
|
|
390
|
+
// Update content dan character count
|
|
391
|
+
const charCount = editor.textContent.trim().length;
|
|
392
|
+
window.ReactNativeWebView.postMessage(JSON.stringify({
|
|
393
|
+
type: 'content',
|
|
394
|
+
html: editor.innerHTML,
|
|
395
|
+
characterCount: charCount
|
|
396
|
+
}));
|
|
367
397
|
} else {
|
|
368
398
|
editor.focus();
|
|
369
399
|
document.execCommand(command, false, null);
|
|
@@ -389,18 +419,25 @@ const TextEditor = forwardRef<TextEditorRef, ExtendedTextEditorType>(
|
|
|
389
419
|
if (webviewRef.current) {
|
|
390
420
|
if (Platform.OS === 'ios') {
|
|
391
421
|
webviewRef.current.injectJavaScript(`
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
422
|
+
const editor = document.getElementById('editor');
|
|
423
|
+
editor.focus();
|
|
424
|
+
document.execCommand('${command}', false, null);
|
|
425
|
+
|
|
426
|
+
// Force update formats after command
|
|
427
|
+
setTimeout(() => {
|
|
428
|
+
const formats = [];
|
|
429
|
+
if (document.queryCommandState('bold')) formats.push('bold');
|
|
430
|
+
if (document.queryCommandState('italic')) formats.push('italic');
|
|
431
|
+
if (document.queryCommandState('underline')) formats.push('underline');
|
|
432
|
+
if (document.queryCommandState('strikeThrough')) formats.push('strikeThrough');
|
|
433
|
+
window.ReactNativeWebView.postMessage(JSON.stringify({
|
|
434
|
+
type: 'formats',
|
|
435
|
+
formats: formats
|
|
436
|
+
}));
|
|
437
|
+
window.ReactNativeWebView.postMessage(editor.innerHTML);
|
|
438
|
+
}, 50);
|
|
439
|
+
true;
|
|
440
|
+
`);
|
|
404
441
|
} else {
|
|
405
442
|
webviewRef.current.postMessage(command);
|
|
406
443
|
}
|
|
@@ -408,14 +445,17 @@ const TextEditor = forwardRef<TextEditorRef, ExtendedTextEditorType>(
|
|
|
408
445
|
};
|
|
409
446
|
|
|
410
447
|
const openLinkModal = () => {
|
|
411
|
-
// Get selected text first
|
|
412
448
|
if (webviewRef.current) {
|
|
413
449
|
webviewRef.current.postMessage('getSelectedText');
|
|
414
450
|
}
|
|
415
|
-
|
|
451
|
+
|
|
452
|
+
setTimeout(() => {
|
|
453
|
+
setShowLinkModal(true);
|
|
454
|
+
}, 50);
|
|
455
|
+
|
|
416
456
|
setTimeout(() => {
|
|
417
457
|
inputUrlRef.current?.focus();
|
|
418
|
-
},
|
|
458
|
+
}, 350);
|
|
419
459
|
};
|
|
420
460
|
|
|
421
461
|
const insertLink = () => {
|
|
@@ -425,7 +465,6 @@ const TextEditor = forwardRef<TextEditorRef, ExtendedTextEditorType>(
|
|
|
425
465
|
}
|
|
426
466
|
|
|
427
467
|
let finalUrl = linkUrl.trim();
|
|
428
|
-
// Add https:// if no protocol
|
|
429
468
|
if (!finalUrl.match(/^https?:\/\//i)) {
|
|
430
469
|
finalUrl = 'https://' + finalUrl;
|
|
431
470
|
}
|
|
@@ -439,61 +478,71 @@ const TextEditor = forwardRef<TextEditorRef, ExtendedTextEditorType>(
|
|
|
439
478
|
if (webviewRef.current) {
|
|
440
479
|
if (Platform.OS === 'ios') {
|
|
441
480
|
webviewRef.current.injectJavaScript(`
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
if (selection && selection.rangeCount > 0) {
|
|
448
|
-
const range = selection.getRangeAt(0);
|
|
481
|
+
const linkData = ${linkData};
|
|
482
|
+
const editor = document.getElementById('editor');
|
|
483
|
+
editor.focus();
|
|
484
|
+
const selection = window.getSelection();
|
|
449
485
|
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
let linkElement = null;
|
|
453
|
-
let node = range.startContainer;
|
|
486
|
+
if (selection && selection.rangeCount > 0) {
|
|
487
|
+
const range = selection.getRangeAt(0);
|
|
454
488
|
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
break;
|
|
459
|
-
}
|
|
460
|
-
node = node.parentNode;
|
|
461
|
-
}
|
|
489
|
+
if (linkData.isExisting) {
|
|
490
|
+
let linkElement = null;
|
|
491
|
+
let node = range.startContainer;
|
|
462
492
|
|
|
463
|
-
|
|
464
|
-
|
|
493
|
+
while (node && node !== editor) {
|
|
494
|
+
if (node.nodeName === 'A') {
|
|
495
|
+
linkElement = node;
|
|
496
|
+
break;
|
|
465
497
|
}
|
|
498
|
+
node = node.parentNode;
|
|
499
|
+
}
|
|
466
500
|
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
linkElement.textContent = linkData.text;
|
|
470
|
-
range.setStartAfter(linkElement);
|
|
471
|
-
range.collapse(true);
|
|
472
|
-
selection.removeAllRanges();
|
|
473
|
-
selection.addRange(range);
|
|
474
|
-
window.ReactNativeWebView.postMessage(editor.innerHTML);
|
|
475
|
-
true;
|
|
476
|
-
return;
|
|
477
|
-
}
|
|
501
|
+
if (!linkElement && range.commonAncestorContainer.nodeType === 1) {
|
|
502
|
+
linkElement = range.commonAncestorContainer.querySelector('a');
|
|
478
503
|
}
|
|
479
504
|
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
505
|
+
if (linkElement) {
|
|
506
|
+
linkElement.href = linkData.url;
|
|
507
|
+
linkElement.textContent = linkData.text;
|
|
508
|
+
range.setStartAfter(linkElement);
|
|
509
|
+
range.collapse(true);
|
|
510
|
+
selection.removeAllRanges();
|
|
511
|
+
selection.addRange(range);
|
|
512
|
+
|
|
513
|
+
const charCount = editor.textContent.trim().length;
|
|
514
|
+
window.ReactNativeWebView.postMessage(JSON.stringify({
|
|
515
|
+
type: 'content',
|
|
516
|
+
html: editor.innerHTML,
|
|
517
|
+
characterCount: charCount
|
|
518
|
+
}));
|
|
519
|
+
true;
|
|
520
|
+
return;
|
|
521
|
+
}
|
|
493
522
|
}
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
523
|
+
|
|
524
|
+
const link = document.createElement('a');
|
|
525
|
+
link.href = linkData.url;
|
|
526
|
+
link.textContent = linkData.text;
|
|
527
|
+
link.target = '_blank';
|
|
528
|
+
range.deleteContents();
|
|
529
|
+
range.insertNode(link);
|
|
530
|
+
const space = document.createTextNode(' ');
|
|
531
|
+
link.parentNode.insertBefore(space, link.nextSibling);
|
|
532
|
+
range.setStartAfter(space);
|
|
533
|
+
range.collapse(true);
|
|
534
|
+
selection.removeAllRanges();
|
|
535
|
+
selection.addRange(range);
|
|
536
|
+
}
|
|
537
|
+
|
|
538
|
+
const charCount = editor.textContent.trim().length;
|
|
539
|
+
window.ReactNativeWebView.postMessage(JSON.stringify({
|
|
540
|
+
type: 'content',
|
|
541
|
+
html: editor.innerHTML,
|
|
542
|
+
characterCount: charCount
|
|
543
|
+
}));
|
|
544
|
+
true;
|
|
545
|
+
`);
|
|
497
546
|
} else {
|
|
498
547
|
webviewRef.current.postMessage('insertLink:' + linkData);
|
|
499
548
|
}
|
|
@@ -507,9 +556,12 @@ const TextEditor = forwardRef<TextEditorRef, ExtendedTextEditorType>(
|
|
|
507
556
|
|
|
508
557
|
const closeLinkModal = () => {
|
|
509
558
|
setShowLinkModal(false);
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
559
|
+
|
|
560
|
+
setTimeout(() => {
|
|
561
|
+
setLinkText('');
|
|
562
|
+
setLinkUrl('');
|
|
563
|
+
setIsEditingLink(false);
|
|
564
|
+
}, 300);
|
|
513
565
|
};
|
|
514
566
|
|
|
515
567
|
const handleWebViewMessage = (event: any) => {
|
|
@@ -519,34 +571,50 @@ const TextEditor = forwardRef<TextEditorRef, ExtendedTextEditorType>(
|
|
|
519
571
|
const parsed = JSON.parse(data);
|
|
520
572
|
|
|
521
573
|
if (parsed.type === 'formats') {
|
|
522
|
-
|
|
574
|
+
requestAnimationFrame(() => {
|
|
575
|
+
setActiveFormats(new Set(parsed.formats));
|
|
576
|
+
});
|
|
523
577
|
} else if (parsed.type === 'focus') {
|
|
524
|
-
|
|
578
|
+
requestAnimationFrame(() => {
|
|
579
|
+
onFocus?.();
|
|
580
|
+
});
|
|
525
581
|
} else if (parsed.type === 'blur') {
|
|
526
|
-
|
|
582
|
+
requestAnimationFrame(() => {
|
|
583
|
+
onBlur?.();
|
|
584
|
+
});
|
|
527
585
|
} else if (parsed.type === 'selectedText') {
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
586
|
+
requestAnimationFrame(() => {
|
|
587
|
+
setLinkText(parsed.text);
|
|
588
|
+
const cleanUrl = parsed.url.replace(/^https?:\/\//, '');
|
|
589
|
+
setLinkUrl(cleanUrl);
|
|
590
|
+
setIsEditingLink(parsed.isExisting || false);
|
|
591
|
+
});
|
|
592
|
+
} else if (parsed.type === 'initialCount') {
|
|
593
|
+
// Set initial character count saat pertama load
|
|
594
|
+
setCharacterCount(parsed.characterCount);
|
|
595
|
+
} else if (parsed.type === 'content') {
|
|
596
|
+
// Update character count dari WebView
|
|
597
|
+
setCharacterCount(parsed.characterCount);
|
|
598
|
+
|
|
599
|
+
// Cek maxLength
|
|
600
|
+
if (maxLength && parsed.characterCount > maxLength) {
|
|
601
|
+
// Optional: bisa tambahkan alert atau prevent
|
|
602
|
+
return;
|
|
603
|
+
}
|
|
604
|
+
|
|
605
|
+
onChange?.(parsed.html);
|
|
533
606
|
}
|
|
534
607
|
} catch {
|
|
535
|
-
//
|
|
608
|
+
// Fallback ke cara lama jika bukan JSON (untuk backward compatibility)
|
|
536
609
|
handleOnChange(data);
|
|
537
610
|
}
|
|
538
611
|
};
|
|
539
612
|
|
|
540
613
|
useEffect(() => {
|
|
541
|
-
const showSub = Keyboard.addListener(
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
setKeyboardHeight(e.endCoordinates.height - 35);
|
|
545
|
-
setShowToolbar(true);
|
|
546
|
-
}
|
|
547
|
-
);
|
|
614
|
+
const showSub = Keyboard.addListener('keyboardDidShow', () => {
|
|
615
|
+
setShowToolbar(true);
|
|
616
|
+
});
|
|
548
617
|
const hideSub = Keyboard.addListener('keyboardDidHide', () => {
|
|
549
|
-
setKeyboardHeight(0);
|
|
550
618
|
setShowToolbar(false);
|
|
551
619
|
});
|
|
552
620
|
|
|
@@ -556,8 +624,6 @@ const TextEditor = forwardRef<TextEditorRef, ExtendedTextEditorType>(
|
|
|
556
624
|
};
|
|
557
625
|
}, []);
|
|
558
626
|
|
|
559
|
-
const gap = Platform.OS === 'ios' ? 200 : 185;
|
|
560
|
-
|
|
561
627
|
const isFormatActive = (format: string) => activeFormats.has(format);
|
|
562
628
|
|
|
563
629
|
const toolbarButtons: ToolbarButton[] = [
|
|
@@ -565,7 +631,7 @@ const TextEditor = forwardRef<TextEditorRef, ExtendedTextEditorType>(
|
|
|
565
631
|
{ command: 'italic', icon: 'Italic', label: 'Italic' },
|
|
566
632
|
{ command: 'underline', icon: 'UnderLine', label: 'Underline' },
|
|
567
633
|
{ command: 'strikeThrough', icon: 'strike-through', label: 'Strike' },
|
|
568
|
-
{ command: 'link', icon: 'Link', label: 'Link', isSpecial: true },
|
|
634
|
+
// { command: 'link', icon: 'Link', label: 'Link', isSpecial: true },
|
|
569
635
|
{
|
|
570
636
|
command: 'insertUnorderedList',
|
|
571
637
|
icon: 'list-un-ordered',
|
|
@@ -626,43 +692,51 @@ const TextEditor = forwardRef<TextEditorRef, ExtendedTextEditorType>(
|
|
|
626
692
|
</View>
|
|
627
693
|
) : null}
|
|
628
694
|
|
|
629
|
-
{showToolbar
|
|
630
|
-
<
|
|
631
|
-
|
|
632
|
-
styles.toolbar,
|
|
633
|
-
{ top: Dimensions.get('screen').height - keyboardHeight - gap },
|
|
634
|
-
]}
|
|
695
|
+
{showToolbar && (
|
|
696
|
+
<KeyboardAvoidingView
|
|
697
|
+
behavior={Platform.OS === 'ios' ? 'position' : 'padding'}
|
|
635
698
|
>
|
|
636
|
-
<
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
699
|
+
<SafeAreaView
|
|
700
|
+
style={[
|
|
701
|
+
styles.toolbar,
|
|
702
|
+
Platform?.OS === 'android' && Platform.Version < 35
|
|
703
|
+
? styles.mt10p
|
|
704
|
+
: undefined,
|
|
705
|
+
]}
|
|
640
706
|
>
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
>
|
|
654
|
-
<Icon
|
|
655
|
-
name={button.icon}
|
|
656
|
-
size={20}
|
|
657
|
-
color={
|
|
658
|
-
isFormatActive(button.command) ? '#fff' : Color.gray[900]
|
|
707
|
+
<ScrollView
|
|
708
|
+
horizontal
|
|
709
|
+
showsHorizontalScrollIndicator={false}
|
|
710
|
+
contentContainerStyle={styles.toolbarContent}
|
|
711
|
+
>
|
|
712
|
+
{toolbarButtons.map((button) => (
|
|
713
|
+
<TouchableOpacity
|
|
714
|
+
key={button.command}
|
|
715
|
+
onPress={() =>
|
|
716
|
+
button.isSpecial
|
|
717
|
+
? openLinkModal()
|
|
718
|
+
: formatText(button.command)
|
|
659
719
|
}
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
720
|
+
style={[
|
|
721
|
+
styles.toolButton,
|
|
722
|
+
isFormatActive(button.command) && styles.toolButtonActive,
|
|
723
|
+
]}
|
|
724
|
+
>
|
|
725
|
+
<Icon
|
|
726
|
+
name={button.icon}
|
|
727
|
+
size={20}
|
|
728
|
+
color={
|
|
729
|
+
isFormatActive(button.command)
|
|
730
|
+
? '#fff'
|
|
731
|
+
: Color.gray[900]
|
|
732
|
+
}
|
|
733
|
+
/>
|
|
734
|
+
</TouchableOpacity>
|
|
735
|
+
))}
|
|
736
|
+
</ScrollView>
|
|
737
|
+
</SafeAreaView>
|
|
738
|
+
</KeyboardAvoidingView>
|
|
739
|
+
)}
|
|
666
740
|
|
|
667
741
|
{/* Link Modal */}
|
|
668
742
|
<BottomSheet
|
|
@@ -776,4 +850,7 @@ const styles = StyleSheet.create({
|
|
|
776
850
|
flex1: {
|
|
777
851
|
flex: 1,
|
|
778
852
|
},
|
|
853
|
+
mt10p: {
|
|
854
|
+
marginTop: '10%',
|
|
855
|
+
},
|
|
779
856
|
});
|