From 6c4e9451e5b8ebbbe18a664467c76b425b6e0bf8 Mon Sep 17 00:00:00 2001 From: Florian Duros Date: Tue, 20 Dec 2022 11:40:34 +0100 Subject: [PATCH] Use react lazy to load rte component --- .../DynamicImportWysiwygComposer.tsx | 36 +++++++++++++++ .../wysiwyg_composer/EditWysiwygComposer.tsx | 45 ++++++++++--------- .../wysiwyg_composer/SendWysiwygComposer.tsx | 3 ++ .../views/rooms/wysiwyg_composer/index.ts | 6 ++- .../SendWysiwygComposer-test.tsx | 4 +- 5 files changed, 70 insertions(+), 24 deletions(-) create mode 100644 src/components/views/rooms/wysiwyg_composer/DynamicImportWysiwygComposer.tsx diff --git a/src/components/views/rooms/wysiwyg_composer/DynamicImportWysiwygComposer.tsx b/src/components/views/rooms/wysiwyg_composer/DynamicImportWysiwygComposer.tsx new file mode 100644 index 000000000000..65a365b06dab --- /dev/null +++ b/src/components/views/rooms/wysiwyg_composer/DynamicImportWysiwygComposer.tsx @@ -0,0 +1,36 @@ +/* +Copyright 2022 The Matrix.org Foundation C.I.C. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +import React, { ComponentProps, lazy, Suspense } from "react"; + +const SendComposer = lazy(() => import("./SendWysiwygComposer")); +const EditComposer = lazy(() => import("./EditWysiwygComposer")); + +export function DynamicImportSendWysiwygComposer(props: ComponentProps) { + return ( + }> + + + ); +} + +export function DynamicImportEditWysiwygComposer(props: ComponentProps) { + return ( + }> + + + ); +} diff --git a/src/components/views/rooms/wysiwyg_composer/EditWysiwygComposer.tsx b/src/components/views/rooms/wysiwyg_composer/EditWysiwygComposer.tsx index 275d30bb1f43..0997797933fc 100644 --- a/src/components/views/rooms/wysiwyg_composer/EditWysiwygComposer.tsx +++ b/src/components/views/rooms/wysiwyg_composer/EditWysiwygComposer.tsx @@ -49,26 +49,31 @@ export function EditWysiwygComposer({ editorStateTransfer, className, ...props } const { editMessage, endEditing, onChange, isSaveDisabled } = useEditing(editorStateTransfer, initialContent); + if (!isReady) { + return null; + } + return ( - isReady && ( - - {(ref) => ( - <> - - - - )} - - ) + + {(ref) => ( + <> + + + + )} + ); } + +// Needed for React.lazy +export default EditWysiwygComposer; diff --git a/src/components/views/rooms/wysiwyg_composer/SendWysiwygComposer.tsx b/src/components/views/rooms/wysiwyg_composer/SendWysiwygComposer.tsx index 4d7267216749..c46f6286f86f 100644 --- a/src/components/views/rooms/wysiwyg_composer/SendWysiwygComposer.tsx +++ b/src/components/views/rooms/wysiwyg_composer/SendWysiwygComposer.tsx @@ -72,3 +72,6 @@ export function SendWysiwygComposer({ ); } + +// Needed for React.lazy +export default SendWysiwygComposer; diff --git a/src/components/views/rooms/wysiwyg_composer/index.ts b/src/components/views/rooms/wysiwyg_composer/index.ts index 55a3e79a19d1..c82f59ca896b 100644 --- a/src/components/views/rooms/wysiwyg_composer/index.ts +++ b/src/components/views/rooms/wysiwyg_composer/index.ts @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ -export { SendWysiwygComposer } from "./SendWysiwygComposer"; -export { EditWysiwygComposer } from "./EditWysiwygComposer"; +export { + DynamicImportSendWysiwygComposer as SendWysiwygComposer, + DynamicImportEditWysiwygComposer as EditWysiwygComposer, +} from "./DynamicImportWysiwygComposer"; export { sendMessage } from "./utils/message"; diff --git a/test/components/views/rooms/wysiwyg_composer/SendWysiwygComposer-test.tsx b/test/components/views/rooms/wysiwyg_composer/SendWysiwygComposer-test.tsx index 669c611f8ce1..3854e9b1f349 100644 --- a/test/components/views/rooms/wysiwyg_composer/SendWysiwygComposer-test.tsx +++ b/test/components/views/rooms/wysiwyg_composer/SendWysiwygComposer-test.tsx @@ -24,7 +24,7 @@ import defaultDispatcher from "../../../../../src/dispatcher/dispatcher"; import { Action } from "../../../../../src/dispatcher/actions"; import { IRoomState } from "../../../../../src/components/structures/RoomView"; import { createTestClient, flushPromises, getRoomContext, mkEvent, mkStubRoom } from "../../../../test-utils"; -import { SendWysiwygComposer } from "../../../../../src/components/views/rooms/wysiwyg_composer"; +import { SendWysiwygComposer } from "../../../../../src/components/views/rooms/wysiwyg_composer/"; import { aboveLeftOf } from "../../../../../src/components/structures/ContextMenu"; import { ComposerInsertPayload, ComposerType } from "../../../../../src/dispatcher/payloads/ComposerInsertPayload"; import { setSelection } from "../../../../../src/components/views/rooms/wysiwyg_composer/utils/selection"; @@ -106,7 +106,7 @@ describe("SendWysiwygComposer", () => { customRender(jest.fn(), jest.fn(), false, true); // Then - expect(screen.getByTestId("WysiwygComposer")).toBeTruthy(); + waitFor(() => expect(screen.getByTestId("WysiwygComposer")).toBeTruthy()); }); it("Should render PlainTextComposer when isRichTextEnabled is at false", () => {