@churchapps/apphelper 0.0.9 → 0.0.11

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.
Files changed (193) hide show
  1. package/.eslintignore +3 -3
  2. package/.eslintrc.json +22 -22
  3. package/LICENSE +21 -21
  4. package/README.md +16 -16
  5. package/dist/components/ExportLink.d.ts.map +1 -1
  6. package/dist/components/ExportLink.js +3 -2
  7. package/dist/components/ExportLink.js.map +1 -1
  8. package/dist/components/markdownEditor/editor.css +787 -787
  9. package/dist/components/markdownEditor/images/icons/arrow-clockwise.svg +3 -3
  10. package/dist/components/markdownEditor/images/icons/arrow-counterclockwise.svg +3 -3
  11. package/dist/components/markdownEditor/images/icons/chat-square-quote.svg +3 -3
  12. package/dist/components/markdownEditor/images/icons/chevron-down.svg +2 -2
  13. package/dist/components/markdownEditor/images/icons/code.svg +2 -2
  14. package/dist/components/markdownEditor/images/icons/journal-code.svg +4 -4
  15. package/dist/components/markdownEditor/images/icons/journal-text.svg +4 -4
  16. package/dist/components/markdownEditor/images/icons/justify.svg +2 -2
  17. package/dist/components/markdownEditor/images/icons/link.svg +3 -3
  18. package/dist/components/markdownEditor/images/icons/list-ol.svg +3 -3
  19. package/dist/components/markdownEditor/images/icons/list-ul.svg +2 -2
  20. package/dist/components/markdownEditor/images/icons/pencil-fill.svg +2 -2
  21. package/dist/components/markdownEditor/images/icons/text-center.svg +2 -2
  22. package/dist/components/markdownEditor/images/icons/text-left.svg +2 -2
  23. package/dist/components/markdownEditor/images/icons/text-paragraph.svg +2 -2
  24. package/dist/components/markdownEditor/images/icons/text-right.svg +2 -2
  25. package/dist/components/markdownEditor/images/icons/type-bold.svg +2 -2
  26. package/dist/components/markdownEditor/images/icons/type-h1.svg +2 -2
  27. package/dist/components/markdownEditor/images/icons/type-h2.svg +2 -2
  28. package/dist/components/markdownEditor/images/icons/type-h3.svg +2 -2
  29. package/dist/components/markdownEditor/images/icons/type-h4.svg +12 -12
  30. package/dist/components/markdownEditor/images/icons/type-italic.svg +2 -2
  31. package/dist/components/markdownEditor/images/icons/type-strikethrough.svg +2 -2
  32. package/dist/components/markdownEditor/images/icons/type-underline.svg +2 -2
  33. package/dist/components/material/SiteWrapper.js +2 -2
  34. package/dist/components/material/SiteWrapper.js.map +1 -1
  35. package/dist/helpers/SocketHelper.d.ts +3 -3
  36. package/dist/helpers/SocketHelper.d.ts.map +1 -1
  37. package/dist/helpers/SocketHelper.js +6 -6
  38. package/dist/helpers/SocketHelper.js.map +1 -1
  39. package/dist/interfaces/Messaging.d.ts +1 -2
  40. package/dist/interfaces/Messaging.d.ts.map +1 -1
  41. package/package.json +84 -84
  42. package/src/components/CreatePerson.tsx +80 -80
  43. package/src/components/DisplayBox.tsx +68 -68
  44. package/src/components/ErrorMessages.tsx +26 -26
  45. package/src/components/ExportLink.tsx +67 -66
  46. package/src/components/FloatingSupport.tsx +16 -16
  47. package/src/components/FormSubmissionEdit.tsx +120 -120
  48. package/src/components/HelpIcon.tsx +10 -10
  49. package/src/components/ImageEditor.tsx +126 -126
  50. package/src/components/InputBox.tsx +73 -73
  51. package/src/components/Loading.tsx +29 -29
  52. package/src/components/PersonAdd.tsx +75 -75
  53. package/src/components/QuestionEdit.tsx +62 -62
  54. package/src/components/SmallButton.tsx +39 -39
  55. package/src/components/SupportModal.tsx +26 -26
  56. package/src/components/TabPanel.tsx +34 -34
  57. package/src/components/gallery/GalleryModal.tsx +102 -102
  58. package/src/components/gallery/StockPhotos.tsx +74 -74
  59. package/src/components/gallery/index.ts +1 -1
  60. package/src/components/index.tsx +23 -23
  61. package/src/components/markdownEditor/Editor.tsx +132 -132
  62. package/src/components/markdownEditor/MarkdownEditor.tsx +16 -16
  63. package/src/components/markdownEditor/MarkdownModal.tsx +46 -46
  64. package/src/components/markdownEditor/MarkdownPreview.tsx +14 -14
  65. package/src/components/markdownEditor/editor.css +787 -787
  66. package/src/components/markdownEditor/images/icons/arrow-clockwise.svg +3 -3
  67. package/src/components/markdownEditor/images/icons/arrow-counterclockwise.svg +3 -3
  68. package/src/components/markdownEditor/images/icons/chat-square-quote.svg +3 -3
  69. package/src/components/markdownEditor/images/icons/chevron-down.svg +2 -2
  70. package/src/components/markdownEditor/images/icons/code.svg +2 -2
  71. package/src/components/markdownEditor/images/icons/journal-code.svg +4 -4
  72. package/src/components/markdownEditor/images/icons/journal-text.svg +4 -4
  73. package/src/components/markdownEditor/images/icons/justify.svg +2 -2
  74. package/src/components/markdownEditor/images/icons/link.svg +3 -3
  75. package/src/components/markdownEditor/images/icons/list-ol.svg +3 -3
  76. package/src/components/markdownEditor/images/icons/list-ul.svg +2 -2
  77. package/src/components/markdownEditor/images/icons/pencil-fill.svg +2 -2
  78. package/src/components/markdownEditor/images/icons/text-center.svg +2 -2
  79. package/src/components/markdownEditor/images/icons/text-left.svg +2 -2
  80. package/src/components/markdownEditor/images/icons/text-paragraph.svg +2 -2
  81. package/src/components/markdownEditor/images/icons/text-right.svg +2 -2
  82. package/src/components/markdownEditor/images/icons/type-bold.svg +2 -2
  83. package/src/components/markdownEditor/images/icons/type-h1.svg +2 -2
  84. package/src/components/markdownEditor/images/icons/type-h2.svg +2 -2
  85. package/src/components/markdownEditor/images/icons/type-h3.svg +2 -2
  86. package/src/components/markdownEditor/images/icons/type-h4.svg +12 -12
  87. package/src/components/markdownEditor/images/icons/type-italic.svg +2 -2
  88. package/src/components/markdownEditor/images/icons/type-strikethrough.svg +2 -2
  89. package/src/components/markdownEditor/images/icons/type-underline.svg +2 -2
  90. package/src/components/markdownEditor/index.ts +2 -2
  91. package/src/components/markdownEditor/plugins/AutoLinkPlugin.tsx +35 -35
  92. package/src/components/markdownEditor/plugins/ControlledEditorPlugin.tsx +24 -24
  93. package/src/components/markdownEditor/plugins/ListMaxIndentLevelPlugin.tsx +68 -68
  94. package/src/components/markdownEditor/plugins/MarkdownTransformers.ts +106 -106
  95. package/src/components/markdownEditor/plugins/ReadOnlyPlugin.tsx +15 -15
  96. package/src/components/markdownEditor/plugins/ToolbarPlugin.tsx +401 -401
  97. package/src/components/markdownEditor/plugins/customLink/CustomLinkNode.tsx +224 -224
  98. package/src/components/markdownEditor/plugins/customLink/CustomLinkNodePlugin.tsx +32 -32
  99. package/src/components/markdownEditor/plugins/customLink/CustomLinkNodeTransformer.tsx +102 -102
  100. package/src/components/markdownEditor/plugins/customLink/FloatingLinkEditor.tsx +243 -243
  101. package/src/components/markdownEditor/plugins/customLink/FloatingLinkEditor.types.ts +11 -11
  102. package/src/components/markdownEditor/plugins/emoji/EmojiNode.tsx +95 -95
  103. package/src/components/markdownEditor/plugins/emoji/EmojiNodeTransform.ts +41 -41
  104. package/src/components/markdownEditor/plugins/emoji/EmojiPickerPlugin.tsx +152 -152
  105. package/src/components/markdownEditor/plugins/emoji/EmojisPlugin.tsx +65 -65
  106. package/src/components/markdownEditor/plugins/index.ts +6 -6
  107. package/src/components/markdownEditor/theme.ts +65 -65
  108. package/src/components/material/AppList.tsx +20 -20
  109. package/src/components/material/ChurchList.tsx +22 -22
  110. package/src/components/material/NavItem.tsx +41 -41
  111. package/src/components/material/NewPrivateMessage.tsx +103 -103
  112. package/src/components/material/PrivateMessageDetails.tsx +23 -23
  113. package/src/components/material/PrivateMessages.tsx +87 -87
  114. package/src/components/material/SiteWrapper.tsx +140 -140
  115. package/src/components/material/UserMenu.tsx +141 -141
  116. package/src/components/material/iconPicker/IconNamesList.ts +2240 -2240
  117. package/src/components/material/iconPicker/IconPicker.tsx +153 -153
  118. package/src/components/material/index.tsx +6 -6
  119. package/src/components/notes/AddNote.tsx +90 -90
  120. package/src/components/notes/Conversation.tsx +82 -82
  121. package/src/components/notes/Conversations.tsx +58 -58
  122. package/src/components/notes/NewConversation.tsx +78 -78
  123. package/src/components/notes/Note.tsx +44 -44
  124. package/src/components/notes/Notes.tsx +52 -52
  125. package/src/components/notes/index.ts +5 -5
  126. package/src/components/reporting/ChartReport.tsx +98 -98
  127. package/src/components/reporting/ReportFilter.tsx +54 -54
  128. package/src/components/reporting/ReportFilterField.tsx +160 -160
  129. package/src/components/reporting/ReportOutput.tsx +79 -79
  130. package/src/components/reporting/ReportWithFilter.tsx +70 -70
  131. package/src/components/reporting/TableReport.tsx +57 -57
  132. package/src/components/reporting/TreeReport.tsx +111 -111
  133. package/src/components/reporting/index.ts +4 -4
  134. package/src/donationComponents/DonationPage.tsx +136 -136
  135. package/src/donationComponents/components/BankForm.tsx +159 -159
  136. package/src/donationComponents/components/CardForm.tsx +104 -104
  137. package/src/donationComponents/components/DonationForm.tsx +235 -235
  138. package/src/donationComponents/components/FundDonation.tsx +49 -49
  139. package/src/donationComponents/components/FundDonations.tsx +39 -39
  140. package/src/donationComponents/components/NonAuthDonation.tsx +31 -31
  141. package/src/donationComponents/components/NonAuthDonationInner.tsx +259 -259
  142. package/src/donationComponents/components/PaymentMethods.tsx +135 -135
  143. package/src/donationComponents/components/RecurringDonations.tsx +121 -121
  144. package/src/donationComponents/components/RecurringDonationsEdit.tsx +93 -93
  145. package/src/donationComponents/components/index.tsx +9 -9
  146. package/src/donationComponents/index.ts +3 -3
  147. package/src/donationComponents/modals/DonationPreviewModal.tsx +66 -66
  148. package/src/helpers/AnalyticsHelper.ts +33 -33
  149. package/src/helpers/ApiHelper.ts +125 -125
  150. package/src/helpers/AppearanceHelper.ts +69 -69
  151. package/src/helpers/ArrayHelper.ts +81 -81
  152. package/src/helpers/CommonEnvironmentHelper.ts +80 -80
  153. package/src/helpers/CurrencyHelper.ts +10 -10
  154. package/src/helpers/DateHelper.ts +108 -108
  155. package/src/helpers/DonationHelper.ts +26 -26
  156. package/src/helpers/ErrorHelper.ts +36 -36
  157. package/src/helpers/EventHelper.ts +52 -52
  158. package/src/helpers/FileHelper.ts +31 -31
  159. package/src/helpers/PersonHelper.ts +60 -60
  160. package/src/helpers/SocketHelper.ts +76 -76
  161. package/src/helpers/Themes.ts +14 -14
  162. package/src/helpers/UniqueIdHelper.ts +36 -36
  163. package/src/helpers/UserHelper.ts +59 -59
  164. package/src/helpers/createEmotionCache.ts +17 -17
  165. package/src/helpers/index.ts +18 -18
  166. package/src/hooks/index.ts +1 -1
  167. package/src/hooks/useMountedState.ts +16 -16
  168. package/src/index.ts +6 -6
  169. package/src/interfaces/Access.ts +24 -24
  170. package/src/interfaces/Attendance.ts +8 -8
  171. package/src/interfaces/Content.ts +10 -10
  172. package/src/interfaces/Doing.ts +24 -24
  173. package/src/interfaces/Donation.ts +45 -45
  174. package/src/interfaces/Error.ts +17 -17
  175. package/src/interfaces/Membership.ts +51 -51
  176. package/src/interfaces/Messaging.ts +20 -20
  177. package/src/interfaces/Permissions.ts +68 -68
  178. package/src/interfaces/Reporting.ts +7 -7
  179. package/src/interfaces/UserContextInterface.ts +13 -13
  180. package/src/interfaces/index.ts +13 -13
  181. package/src/pageComponents/LoginPage.tsx +244 -244
  182. package/src/pageComponents/LogoutPage.tsx +28 -28
  183. package/src/pageComponents/components/Forgot.tsx +79 -79
  184. package/src/pageComponents/components/Login.tsx +54 -54
  185. package/src/pageComponents/components/LoginSetPassword.tsx +63 -63
  186. package/src/pageComponents/components/Register.tsx +107 -107
  187. package/src/pageComponents/components/SelectChurchModal.tsx +41 -41
  188. package/src/pageComponents/components/SelectChurchRegister.tsx +88 -88
  189. package/src/pageComponents/components/SelectChurchSearch.tsx +69 -69
  190. package/src/pageComponents/components/SelectableChurch.tsx +38 -38
  191. package/src/pageComponents/index.ts +3 -3
  192. package/tsconfig.json +34 -34
  193. package/tslint.json +14 -14
@@ -1,132 +1,132 @@
1
- import React, {useCallback, useMemo} from "react";
2
- import { LexicalComposer } from "@lexical/react/LexicalComposer";
3
- import { RichTextPlugin } from "@lexical/react/LexicalRichTextPlugin";
4
- import { ContentEditable } from "@lexical/react/LexicalContentEditable";
5
- import { HistoryPlugin } from "@lexical/react/LexicalHistoryPlugin";
6
- import { OnChangePlugin } from "@lexical/react/LexicalOnChangePlugin";
7
- import { AutoFocusPlugin } from "@lexical/react/LexicalAutoFocusPlugin";
8
- import LexicalErrorBoundary from "@lexical/react/LexicalErrorBoundary";
9
- import { ListPlugin } from "@lexical/react/LexicalListPlugin";
10
- import { LexicalNode } from "lexical";
11
- import { MarkdownShortcutPlugin } from "@lexical/react/LexicalMarkdownShortcutPlugin";
12
- import { TRANSFORMERS, $convertToMarkdownString, $convertFromMarkdownString } from "@lexical/markdown";
13
- import { HeadingNode, QuoteNode } from "@lexical/rich-text";
14
- import { ListItemNode, ListNode } from "@lexical/list";
15
- import { TableCellNode, TableNode, TableRowNode } from "@lexical/table";
16
- import { AutoLinkNode, LinkNode } from "@lexical/link";
17
- import { CodeHighlightNode, CodeNode } from "@lexical/code";
18
- import { theme } from "./theme";
19
- import { ToolbarPlugin, CustomAutoLinkPlugin, ListMaxIndentLevelPlugin, PLAYGROUND_TRANSFORMERS, ReadOnlyPlugin, ControlledEditorPlugin } from "./plugins";
20
- import { MarkdownModal } from "./MarkdownModal";
21
- import CustomLinkNodePlugin from "./plugins/customLink/CustomLinkNodePlugin";
22
- import { CustomLinkNode } from "./plugins/customLink/CustomLinkNode";
23
- import EmojisPlugin from "./plugins/emoji/EmojisPlugin";
24
- import { EmojiNode } from "./plugins/emoji/EmojiNode";
25
- import EmojiPickerPlugin from "./plugins/emoji/EmojiPickerPlugin";
26
-
27
- interface Props {
28
- value: string;
29
- onChange?: (value: string) => void;
30
- mode?: "interactive" | "preview";
31
- style?: any;
32
- textAlign?: "left" | "center" | "right";
33
- placeholder?: string;
34
- }
35
-
36
- function Editor({ value, onChange = () => { }, mode = "interactive", textAlign = "left", style, placeholder = "Enter some text..." }: Props) {
37
- const [fullScreen, setFullScreen] = React.useState(false);
38
-
39
- const handleChange = (editorState: any) => {
40
- editorState.read(() => {
41
- const markdown = $convertToMarkdownString(PLAYGROUND_TRANSFORMERS);
42
- onChange(markdown);
43
- });
44
- };
45
-
46
- const onError = (error: any) => {
47
- console.error(error);
48
- };
49
-
50
- const handleModalOnChange = (value : string) => {
51
- onChange(value);
52
- };
53
-
54
- const handleCloseFullScreen = () => {
55
- setFullScreen(false);
56
- };
57
-
58
- const initialConfig = {
59
- editorState: () => $convertFromMarkdownString(value, PLAYGROUND_TRANSFORMERS),
60
- namespace: "editor",
61
- theme,
62
- onError,
63
- nodes: [
64
- HeadingNode,
65
- ListNode,
66
- ListItemNode,
67
- QuoteNode,
68
- CodeNode,
69
- CodeHighlightNode,
70
- TableNode,
71
- TableCellNode,
72
- TableRowNode,
73
- AutoLinkNode,
74
- LinkNode,
75
- CustomLinkNode,
76
- EmojiNode,
77
- {
78
- replace: LinkNode,
79
- with: (node: LexicalNode) => (
80
- new CustomLinkNode(node.__url, node.__target, [])
81
- )
82
- }
83
- ]
84
- };
85
-
86
- let textAlignClass = ""
87
- switch (textAlign) {
88
- case "center":
89
- textAlignClass = "text-center"
90
- break;
91
- case "right":
92
- textAlignClass = "text-right"
93
- break;
94
- case "left":
95
- default:
96
- textAlignClass = "text-left"
97
- break;
98
- }
99
-
100
- return (
101
- <>
102
- <LexicalComposer initialConfig={initialConfig}>
103
- <div className={(mode === "preview") ? `editor-container preview ${textAlignClass}` : `editor-container ${textAlignClass}`} style={Object.assign({ border: mode === "preview" ? "none" : "1px solid lightgray" }, style)}>
104
- {mode !== "preview" && <ToolbarPlugin goFullScreen={() => { setFullScreen(true) }} />}
105
- <div className="editor-inner">
106
- {!fullScreen && <RichTextPlugin
107
- contentEditable={<ContentEditable className="editor-input" style={{ minHeight: mode === "preview" ? "auto" : "150px" }} />}
108
- placeholder={mode !== "preview" ? <div className="editor-placeholder">{placeholder}</div> : null}
109
- ErrorBoundary={LexicalErrorBoundary}
110
- /> }
111
- <CustomLinkNodePlugin />
112
- {mode !== "preview" && <EmojiPickerPlugin />}
113
- <EmojisPlugin />
114
- <OnChangePlugin onChange={handleChange} />
115
- {mode !== "preview" && <AutoFocusPlugin />}
116
- <HistoryPlugin />
117
- <ListPlugin />
118
- <CustomAutoLinkPlugin />
119
-
120
- <ListMaxIndentLevelPlugin maxDepth={7} />
121
- <ReadOnlyPlugin isDisabled={mode === "preview"} />
122
- <ControlledEditorPlugin isFullscreen={fullScreen} value={value} isPreview={mode === "preview"} />
123
- <MarkdownShortcutPlugin transformers={TRANSFORMERS} />
124
- </div>
125
- </div>
126
- </LexicalComposer>
127
- {fullScreen && <MarkdownModal onChange={handleModalOnChange} value={value} hideModal={handleCloseFullScreen} />}
128
- </>
129
- );
130
- }
131
-
132
- export default Editor;
1
+ import React, {useCallback, useMemo} from "react";
2
+ import { LexicalComposer } from "@lexical/react/LexicalComposer";
3
+ import { RichTextPlugin } from "@lexical/react/LexicalRichTextPlugin";
4
+ import { ContentEditable } from "@lexical/react/LexicalContentEditable";
5
+ import { HistoryPlugin } from "@lexical/react/LexicalHistoryPlugin";
6
+ import { OnChangePlugin } from "@lexical/react/LexicalOnChangePlugin";
7
+ import { AutoFocusPlugin } from "@lexical/react/LexicalAutoFocusPlugin";
8
+ import LexicalErrorBoundary from "@lexical/react/LexicalErrorBoundary";
9
+ import { ListPlugin } from "@lexical/react/LexicalListPlugin";
10
+ import { LexicalNode } from "lexical";
11
+ import { MarkdownShortcutPlugin } from "@lexical/react/LexicalMarkdownShortcutPlugin";
12
+ import { TRANSFORMERS, $convertToMarkdownString, $convertFromMarkdownString } from "@lexical/markdown";
13
+ import { HeadingNode, QuoteNode } from "@lexical/rich-text";
14
+ import { ListItemNode, ListNode } from "@lexical/list";
15
+ import { TableCellNode, TableNode, TableRowNode } from "@lexical/table";
16
+ import { AutoLinkNode, LinkNode } from "@lexical/link";
17
+ import { CodeHighlightNode, CodeNode } from "@lexical/code";
18
+ import { theme } from "./theme";
19
+ import { ToolbarPlugin, CustomAutoLinkPlugin, ListMaxIndentLevelPlugin, PLAYGROUND_TRANSFORMERS, ReadOnlyPlugin, ControlledEditorPlugin } from "./plugins";
20
+ import { MarkdownModal } from "./MarkdownModal";
21
+ import CustomLinkNodePlugin from "./plugins/customLink/CustomLinkNodePlugin";
22
+ import { CustomLinkNode } from "./plugins/customLink/CustomLinkNode";
23
+ import EmojisPlugin from "./plugins/emoji/EmojisPlugin";
24
+ import { EmojiNode } from "./plugins/emoji/EmojiNode";
25
+ import EmojiPickerPlugin from "./plugins/emoji/EmojiPickerPlugin";
26
+
27
+ interface Props {
28
+ value: string;
29
+ onChange?: (value: string) => void;
30
+ mode?: "interactive" | "preview";
31
+ style?: any;
32
+ textAlign?: "left" | "center" | "right";
33
+ placeholder?: string;
34
+ }
35
+
36
+ function Editor({ value, onChange = () => { }, mode = "interactive", textAlign = "left", style, placeholder = "Enter some text..." }: Props) {
37
+ const [fullScreen, setFullScreen] = React.useState(false);
38
+
39
+ const handleChange = (editorState: any) => {
40
+ editorState.read(() => {
41
+ const markdown = $convertToMarkdownString(PLAYGROUND_TRANSFORMERS);
42
+ onChange(markdown);
43
+ });
44
+ };
45
+
46
+ const onError = (error: any) => {
47
+ console.error(error);
48
+ };
49
+
50
+ const handleModalOnChange = (value : string) => {
51
+ onChange(value);
52
+ };
53
+
54
+ const handleCloseFullScreen = () => {
55
+ setFullScreen(false);
56
+ };
57
+
58
+ const initialConfig = {
59
+ editorState: () => $convertFromMarkdownString(value, PLAYGROUND_TRANSFORMERS),
60
+ namespace: "editor",
61
+ theme,
62
+ onError,
63
+ nodes: [
64
+ HeadingNode,
65
+ ListNode,
66
+ ListItemNode,
67
+ QuoteNode,
68
+ CodeNode,
69
+ CodeHighlightNode,
70
+ TableNode,
71
+ TableCellNode,
72
+ TableRowNode,
73
+ AutoLinkNode,
74
+ LinkNode,
75
+ CustomLinkNode,
76
+ EmojiNode,
77
+ {
78
+ replace: LinkNode,
79
+ with: (node: LexicalNode) => (
80
+ new CustomLinkNode(node.__url, node.__target, [])
81
+ )
82
+ }
83
+ ]
84
+ };
85
+
86
+ let textAlignClass = ""
87
+ switch (textAlign) {
88
+ case "center":
89
+ textAlignClass = "text-center"
90
+ break;
91
+ case "right":
92
+ textAlignClass = "text-right"
93
+ break;
94
+ case "left":
95
+ default:
96
+ textAlignClass = "text-left"
97
+ break;
98
+ }
99
+
100
+ return (
101
+ <>
102
+ <LexicalComposer initialConfig={initialConfig}>
103
+ <div className={(mode === "preview") ? `editor-container preview ${textAlignClass}` : `editor-container ${textAlignClass}`} style={Object.assign({ border: mode === "preview" ? "none" : "1px solid lightgray" }, style)}>
104
+ {mode !== "preview" && <ToolbarPlugin goFullScreen={() => { setFullScreen(true) }} />}
105
+ <div className="editor-inner">
106
+ {!fullScreen && <RichTextPlugin
107
+ contentEditable={<ContentEditable className="editor-input" style={{ minHeight: mode === "preview" ? "auto" : "150px" }} />}
108
+ placeholder={mode !== "preview" ? <div className="editor-placeholder">{placeholder}</div> : null}
109
+ ErrorBoundary={LexicalErrorBoundary}
110
+ /> }
111
+ <CustomLinkNodePlugin />
112
+ {mode !== "preview" && <EmojiPickerPlugin />}
113
+ <EmojisPlugin />
114
+ <OnChangePlugin onChange={handleChange} />
115
+ {mode !== "preview" && <AutoFocusPlugin />}
116
+ <HistoryPlugin />
117
+ <ListPlugin />
118
+ <CustomAutoLinkPlugin />
119
+
120
+ <ListMaxIndentLevelPlugin maxDepth={7} />
121
+ <ReadOnlyPlugin isDisabled={mode === "preview"} />
122
+ <ControlledEditorPlugin isFullscreen={fullScreen} value={value} isPreview={mode === "preview"} />
123
+ <MarkdownShortcutPlugin transformers={TRANSFORMERS} />
124
+ </div>
125
+ </div>
126
+ </LexicalComposer>
127
+ {fullScreen && <MarkdownModal onChange={handleModalOnChange} value={value} hideModal={handleCloseFullScreen} />}
128
+ </>
129
+ );
130
+ }
131
+
132
+ export default Editor;
@@ -1,16 +1,16 @@
1
- import React from "react";
2
- import { lazy, Suspense } from 'react';
3
- import { Loading } from "../Loading";
4
- const Editor = lazy(() => import('./Editor'));
5
-
6
- interface Props {
7
- value: string;
8
- onChange?: (newValue: string) => void;
9
- style?: any;
10
- textAlign?: "left" | "center" | "right";
11
- placeholder?: string;
12
- }
13
-
14
- export function MarkdownEditor({ value: markdownString = "", onChange, style, textAlign, placeholder }: Props) {
15
- return <Suspense fallback={<Loading />}><Editor value={markdownString} onChange={onChange} style={style} textAlign={textAlign} placeholder={placeholder} /></Suspense>
16
- }
1
+ import React from "react";
2
+ import { lazy, Suspense } from 'react';
3
+ import { Loading } from "../Loading";
4
+ const Editor = lazy(() => import('./Editor'));
5
+
6
+ interface Props {
7
+ value: string;
8
+ onChange?: (newValue: string) => void;
9
+ style?: any;
10
+ textAlign?: "left" | "center" | "right";
11
+ placeholder?: string;
12
+ }
13
+
14
+ export function MarkdownEditor({ value: markdownString = "", onChange, style, textAlign, placeholder }: Props) {
15
+ return <Suspense fallback={<Loading />}><Editor value={markdownString} onChange={onChange} style={style} textAlign={textAlign} placeholder={placeholder} /></Suspense>
16
+ }
@@ -1,46 +1,46 @@
1
- import React, { useEffect, useState } from "react";
2
- import { Button, Dialog, DialogActions, DialogContent, DialogTitle, Grid, TextField } from "@mui/material";
3
- import { MarkdownPreview } from "./MarkdownPreview";
4
-
5
- interface Props {
6
- hideModal: () => void
7
- onChange: (newValue: string) => void
8
- value?: string;
9
- }
10
-
11
- const guideLink = <a href="https://www.markdownguide.org/cheat-sheet/" target="_blank" rel="noopener noreferrer" style={{ float: "right" }}>Markdown Guide</a>;
12
-
13
-
14
- export const MarkdownModal: React.FC<Props> = ({ value, onChange, hideModal }) => {
15
- const [inputVal, setInputVal] = useState(value);
16
-
17
-
18
- useEffect(() => {
19
- if (value.trim() === inputVal.trim()) return;
20
- setInputVal(value);
21
- }, [value, inputVal]);
22
-
23
- useEffect(() => { onChange(inputVal); }, [inputVal, onChange]);
24
-
25
- return (<Dialog open={true} onClose={() => { hideModal() }} fullScreen={true}>
26
- <DialogTitle>Markdown Editor</DialogTitle>
27
- <DialogContent>
28
- <Grid container spacing={3}>
29
- <Grid item xs={6}>
30
- <TextField fullWidth multiline label={<>Content &nbsp; {guideLink}</>} name="modalMarkdown" className="modalMarkdown" InputProps={{ style: { height: "80vh" } }} value={inputVal} onChange={(e) => {
31
- setInputVal(e.target.value);
32
- }} placeholder="" />
33
- </Grid>
34
- <Grid item xs={6}>
35
- <div style={{ border: "1px solid #BBB", borderRadius: 5, marginTop: 15, padding: 10, height: "80vh", overflowY: "scroll" }} id="markdownPreview">
36
- <div style={{ marginTop: -20, marginBottom: -10, position: "absolute" }}><span style={{ backgroundColor: "#FFFFFF", color: "#999", fontSize: 13 }}> &nbsp; Preview &nbsp; </span></div>
37
- <MarkdownPreview value={inputVal} />
38
- </div>
39
- </Grid>
40
- </Grid>
41
- </DialogContent>
42
- <DialogActions sx={{ paddingX: "16px", paddingBottom: "12px" }}>
43
- <Button variant="outlined" onClick={() => { hideModal() }}>Close</Button>
44
- </DialogActions>
45
- </Dialog>)
46
- };
1
+ import React, { useEffect, useState } from "react";
2
+ import { Button, Dialog, DialogActions, DialogContent, DialogTitle, Grid, TextField } from "@mui/material";
3
+ import { MarkdownPreview } from "./MarkdownPreview";
4
+
5
+ interface Props {
6
+ hideModal: () => void
7
+ onChange: (newValue: string) => void
8
+ value?: string;
9
+ }
10
+
11
+ const guideLink = <a href="https://www.markdownguide.org/cheat-sheet/" target="_blank" rel="noopener noreferrer" style={{ float: "right" }}>Markdown Guide</a>;
12
+
13
+
14
+ export const MarkdownModal: React.FC<Props> = ({ value, onChange, hideModal }) => {
15
+ const [inputVal, setInputVal] = useState(value);
16
+
17
+
18
+ useEffect(() => {
19
+ if (value.trim() === inputVal.trim()) return;
20
+ setInputVal(value);
21
+ }, [value, inputVal]);
22
+
23
+ useEffect(() => { onChange(inputVal); }, [inputVal, onChange]);
24
+
25
+ return (<Dialog open={true} onClose={() => { hideModal() }} fullScreen={true}>
26
+ <DialogTitle>Markdown Editor</DialogTitle>
27
+ <DialogContent>
28
+ <Grid container spacing={3}>
29
+ <Grid item xs={6}>
30
+ <TextField fullWidth multiline label={<>Content &nbsp; {guideLink}</>} name="modalMarkdown" className="modalMarkdown" InputProps={{ style: { height: "80vh" } }} value={inputVal} onChange={(e) => {
31
+ setInputVal(e.target.value);
32
+ }} placeholder="" />
33
+ </Grid>
34
+ <Grid item xs={6}>
35
+ <div style={{ border: "1px solid #BBB", borderRadius: 5, marginTop: 15, padding: 10, height: "80vh", overflowY: "scroll" }} id="markdownPreview">
36
+ <div style={{ marginTop: -20, marginBottom: -10, position: "absolute" }}><span style={{ backgroundColor: "#FFFFFF", color: "#999", fontSize: 13 }}> &nbsp; Preview &nbsp; </span></div>
37
+ <MarkdownPreview value={inputVal} />
38
+ </div>
39
+ </Grid>
40
+ </Grid>
41
+ </DialogContent>
42
+ <DialogActions sx={{ paddingX: "16px", paddingBottom: "12px" }}>
43
+ <Button variant="outlined" onClick={() => { hideModal() }}>Close</Button>
44
+ </DialogActions>
45
+ </Dialog>)
46
+ };
@@ -1,14 +1,14 @@
1
- import React, { Suspense } from "react";
2
- import { lazy } from 'react';
3
- const Editor = lazy(() => import('./Editor'));
4
-
5
- interface Props {
6
- value: string;
7
- textAlign?: "left" | "center" | "right"
8
- }
9
-
10
- export function MarkdownPreview({ value: markdownString = "", textAlign }: Props) {
11
- return <Suspense fallback={<div>{markdownString || ""}</div>}>
12
- <Editor mode="preview" value={markdownString || ""} textAlign={textAlign} />
13
- </Suspense>
14
- }
1
+ import React, { Suspense } from "react";
2
+ import { lazy } from 'react';
3
+ const Editor = lazy(() => import('./Editor'));
4
+
5
+ interface Props {
6
+ value: string;
7
+ textAlign?: "left" | "center" | "right"
8
+ }
9
+
10
+ export function MarkdownPreview({ value: markdownString = "", textAlign }: Props) {
11
+ return <Suspense fallback={<div>{markdownString || ""}</div>}>
12
+ <Editor mode="preview" value={markdownString || ""} textAlign={textAlign} />
13
+ </Suspense>
14
+ }