-
Notifications
You must be signed in to change notification settings - Fork 0
/
util.js
112 lines (95 loc) · 2.75 KB
/
util.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
/**
* A collection of utilities for working with Draft-js and editors in general
*/
import {
EditorState,
ContentState,
convertToRaw,
convertFromRaw
} from "draft-js";
const N_COLUMNS = 8;
// ------------------- copied stuff ------------------------
//
const MAX_PREVIEW_LENGTH = 40;
function formatText(text) {
const newText = text ? text : "New Note";
const formattedText =
newText.length > MAX_PREVIEW_LENGTH
? newText.substring(0, MAX_PREVIEW_LENGTH - 3) + "..."
: newText;
return formattedText;
}
function serializePreview(editorState) {
if (editorState === null) {
return { text: "No preview" };
}
const text = editorState.getCurrentContent().getFirstBlock().text;
return { text: formatText("Debate: " + text) };
}
/**
* Serializes "content" of this editor so it can be saved.
*/
function serializeContent(editorState) {
return {
contentState: convertToRaw(editorState.getCurrentContent())
};
}
/**
* Returns an EditorState with the text already typed out for you!
*/
const editorStateFromText = text =>
EditorState.createWithContent(ContentState.createFromText(text));
function emptyEditorState() {
return EditorState.createEmpty();
}
const emptySerializedEditorState = () => {
return serializeContent(emptyEditorState());
};
/**
* Deserializes "content" of this editor so it can be loaded in.
*/
function deSerializeContent(content) {
const contentState = convertFromRaw(content.contentState);
let editorState = EditorState.createWithContent(contentState);
// Note that the "moveSelectionToEnd" is required to fix errors
// that put the cursor in the front instead of at the end when clicked on.
editorState = EditorState.moveSelectionToEnd(
EditorState.createWithContent(editorState.getCurrentContent())
);
return editorState;
}
// ----------------- non copied stuff ------------------------
export function deSerialize(content) {
const deSerializedEditors = content.editors.map(e => deSerializeContent(e));
return {
editors: deSerializedEditors
};
}
export function serialize(state) {
const serializedEditors = state.editors.map(e => serializeContent(e));
return {
editors: serializedEditors
};
}
export function serPreview(state) {
return serializePreview(state.editors[0]);
}
function emptyState() {
return {
editors: Array(N_COLUMNS).fill(emptyEditorState())
};
}
function emptySerializedState() {
return serialize(emptyState());
}
export function getSearchableText(state) {
return state.editors.reduce((a, b) => {
return a + b.getCurrentContent().getPlainText();
}, "");
}
// Add this two column editor to global registry
window.editors.DebaterNote = {
emptyEditorState: emptyState(),
newNoteContent: emptySerializedState(),
screenName: "Debater Note"
};