From f3a6b3a9d4aaab6f9fc2c731dda3e24c84e46718 Mon Sep 17 00:00:00 2001 From: leon-up9 <97597983+leon-up9@users.noreply.github.com> Date: Tue, 5 Jul 2022 12:23:47 +0300 Subject: [PATCH] with loading HOC (#1181) * withLoading * optional props * LoadingWrapper * pr comments * changes Co-authored-by: Leon <> --- .../EntryDetailed/EntryDetailed.tsx | 24 +++++--------- ui-common/src/components/UI/index.ts | 3 +- .../src/components/UI/withLoading/spinner.svg | 6 ++++ .../components/UI/withLoading/withLoading.tsx | 33 +++++++++++++++++++ .../ReplayRequestModal/ReplayRequestModal.tsx | 21 ++++++------ .../ServiceMapModal.module.sass | 5 --- .../ServiceMapModal/ServiceMapModal.tsx | 24 +++++++------- .../TrafficStatsModal/TrafficStatsModal.tsx | 13 ++++---- 8 files changed, 77 insertions(+), 52 deletions(-) create mode 100644 ui-common/src/components/UI/withLoading/spinner.svg create mode 100644 ui-common/src/components/UI/withLoading/withLoading.tsx diff --git a/ui-common/src/components/EntryDetailed/EntryDetailed.tsx b/ui-common/src/components/EntryDetailed/EntryDetailed.tsx index c063bf500..74b432810 100644 --- a/ui-common/src/components/EntryDetailed/EntryDetailed.tsx +++ b/ui-common/src/components/EntryDetailed/EntryDetailed.tsx @@ -12,8 +12,8 @@ import TrafficViewerApiAtom from "../../recoil/TrafficViewerApi/atom"; import queryAtom from "../../recoil/query/atom"; import useWindowDimensions, { useRequestTextByWidth } from "../../hooks/WindowDimensionsHook"; import { TOAST_CONTAINER_ID } from "../../configs/Consts"; -import spinner from "assets/spinner.svg"; import entryDataAtom from "../../recoil/entryData"; +import { LoadingWrapper } from "../UI/withLoading/withLoading"; const useStyles = makeStyles(() => ({ entryTitle: { @@ -135,19 +135,11 @@ export const EntryDetailed = () => { // eslint-disable-next-line }, [focusedEntryId]); - return - {isLoading &&
spinner
} - {!isLoading && entryData && } - {!isLoading && entryData && } - - {!isLoading && entryData && } - -
+ return + {entryData && + + + + } + }; diff --git a/ui-common/src/components/UI/index.ts b/ui-common/src/components/UI/index.ts index 952753c55..2a5b52419 100644 --- a/ui-common/src/components/UI/index.ts +++ b/ui-common/src/components/UI/index.ts @@ -8,6 +8,7 @@ import CustomModal from "./CustomModal/CustomModal"; import { InformationIcon, Link } from "./InformationIcon/InformationIcon"; import SelectList from "./SelectList/SelectList"; import NoDataMessage from "./NoDataMessage/NoDataMessage"; +import withLoading from "./withLoading/withLoading"; -export { LoadingOverlay, Select, Tabs, Tooltip, Checkbox, CustomModal, InformationIcon, SelectList, NoDataMessage, Link }; +export { LoadingOverlay, Select, Tabs, Tooltip, Checkbox, CustomModal, InformationIcon, SelectList, NoDataMessage, withLoading, Link }; export { StatusBar } diff --git a/ui-common/src/components/UI/withLoading/spinner.svg b/ui-common/src/components/UI/withLoading/spinner.svg new file mode 100644 index 000000000..16ac582fa --- /dev/null +++ b/ui-common/src/components/UI/withLoading/spinner.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/ui-common/src/components/UI/withLoading/withLoading.tsx b/ui-common/src/components/UI/withLoading/withLoading.tsx new file mode 100644 index 000000000..1a102fdac --- /dev/null +++ b/ui-common/src/components/UI/withLoading/withLoading.tsx @@ -0,0 +1,33 @@ +import React from "react"; +import spinner from 'spinner.svg'; + +export interface WithLoadingProps { + isLoading: boolean + loaderMargin?: number, + loaderHeight?: number +} + +const Loader = ({ loaderMargin = 20, loaderHeight = 35 }: Omit) => { + return
+ spinner +
+} + +const withLoading =

( + Component: React.ComponentType

+): React.FC

=> ({ + isLoading, + loaderMargin, + loaderHeight, + ...props +}: WithLoadingProps) => isLoading ? + : + ; + +export const LoadingWrapper: React.FC = ({ loaderMargin, loaderHeight, isLoading, children }) => { + return isLoading ? + : + {children} +} + +export default withLoading diff --git a/ui-common/src/components/modals/ReplayRequestModal/ReplayRequestModal.tsx b/ui-common/src/components/modals/ReplayRequestModal/ReplayRequestModal.tsx index 5c945a721..8d4c6328d 100644 --- a/ui-common/src/components/modals/ReplayRequestModal/ReplayRequestModal.tsx +++ b/ui-common/src/components/modals/ReplayRequestModal/ReplayRequestModal.tsx @@ -12,7 +12,6 @@ import { toast } from "react-toastify"; import { TOAST_CONTAINER_ID } from "../../../configs/Consts"; import styles from './ReplayRequestModal.module.sass' import closeIcon from "assets/close.svg" -import spinnerImg from "assets/spinner.svg" import refreshImg from "assets/refresh.svg" import { formatRequestWithOutError } from "../../EntryDetailed/EntrySections/EntrySections"; import entryDataAtom from "../../../recoil/entryData"; @@ -20,6 +19,7 @@ import { AutoRepresentation, TabsEnum } from "../../EntryDetailed/EntryViewer/Au import useDebounce from "../../../hooks/useDebounce" import replayRequestModalOpenAtom from "../../../recoil/replayRequestModalOpen"; import { Utils } from "../../../helpers/Utils"; +import { LoadingWrapper } from "../../UI/withLoading/withLoading"; const modalStyle = { position: 'absolute', @@ -233,15 +233,16 @@ const ReplayRequestModal: React.FC = ({ isOpen, onClose - {isLoading && spinner} - {response && !isLoading && ( setResponseExpanded(!responseExpanded)}> - } aria-controls="response-content"> - RESPONSE - - - - - )} + + {response && ( setResponseExpanded(!responseExpanded)}> + } aria-controls="response-content"> + RESPONSE + + + + + )} + diff --git a/ui-common/src/components/modals/ServiceMapModal/ServiceMapModal.module.sass b/ui-common/src/components/modals/ServiceMapModal/ServiceMapModal.module.sass index ae47f3ddf..3f882c410 100644 --- a/ui-common/src/components/modals/ServiceMapModal/ServiceMapModal.module.sass +++ b/ui-common/src/components/modals/ServiceMapModal/ServiceMapModal.module.sass @@ -96,8 +96,3 @@ $modalMargin-from-edge : 35px .servicesFilterList height: calc(100% - 30px - 52px) - -.spinnerContainer - display: flex - justify-content: center - margin-bottom: 10px diff --git a/ui-common/src/components/modals/ServiceMapModal/ServiceMapModal.tsx b/ui-common/src/components/modals/ServiceMapModal/ServiceMapModal.tsx index 2f819de27..a87456273 100644 --- a/ui-common/src/components/modals/ServiceMapModal/ServiceMapModal.tsx +++ b/ui-common/src/components/modals/ServiceMapModal/ServiceMapModal.tsx @@ -1,7 +1,6 @@ import React, { useState, useEffect, useCallback, useMemo } from "react"; import { Box, Fade, Modal, Backdrop, Button } from "@mui/material"; import { toast } from "react-toastify"; -import spinnerImg from 'assets/spinner.svg'; import Graph from "react-graph-vis"; import debounce from 'lodash/debounce'; import ServiceMapOptions from './ServiceMapOptions' @@ -16,6 +15,7 @@ import { GraphData, ServiceMapGraph } from "./ServiceMapModalTypes" import { Utils } from "../../../helpers/Utils"; import { TOAST_CONTAINER_ID } from "../../../configs/Consts"; import Resizeable from "../../UI/Resizeable/Resizeable" +import { LoadingWrapper } from "../../UI/withLoading/withLoading"; const modalStyle = { position: 'absolute', @@ -197,14 +197,14 @@ export const ServiceMapModal: React.FC = ({ isOpen, onClos

- close onClose()} style={{ cursor: "pointer", userSelect: "none" }}/> + close onClose()} style={{ cursor: "pointer", userSelect: "none" }} />
Services
diff --git a/ui-common/src/components/modals/TrafficStatsModal/TrafficStatsModal.tsx b/ui-common/src/components/modals/TrafficStatsModal/TrafficStatsModal.tsx index f9e86568e..56aacec02 100644 --- a/ui-common/src/components/modals/TrafficStatsModal/TrafficStatsModal.tsx +++ b/ui-common/src/components/modals/TrafficStatsModal/TrafficStatsModal.tsx @@ -4,9 +4,9 @@ import styles from "./TrafficStatsModal.module.sass"; import closeIcon from "assets/close.svg"; import { TrafficPieChart } from "./TrafficPieChart/TrafficPieChart"; import { TimelineBarChart } from "./TimelineBarChart/TimelineBarChart"; -import spinnerImg from "assets/spinner.svg"; import refreshIcon from "assets/refresh.svg"; import { useCommonStyles } from "../../../helpers/commonStyle"; +import { LoadingWrapper } from "../../UI/withLoading/withLoading"; const modalStyle = { position: 'absolute', @@ -114,13 +114,12 @@ export const TrafficStatsModal: React.FC = ({ isOpen, on
- {isLoading ?
- spinner -
: +
- - -
} + + +
+