From 61ec562ca4363eb4c74758c27484f97163ad4988 Mon Sep 17 00:00:00 2001 From: caturbgs Date: Mon, 20 Dec 2021 13:55:00 +0700 Subject: [PATCH] feat: init modal loader components --- src/component/Modal/ModalLoader.js | 19 +++++++++++++++++++ src/pages/App/App.js | 27 +++++++++++++++++++-------- src/pages/Product/Product.js | 6 +++++- src/utils/modal.js | 3 +++ 4 files changed, 46 insertions(+), 9 deletions(-) create mode 100644 src/component/Modal/ModalLoader.js create mode 100644 src/utils/modal.js diff --git a/src/component/Modal/ModalLoader.js b/src/component/Modal/ModalLoader.js new file mode 100644 index 0000000..ec156f2 --- /dev/null +++ b/src/component/Modal/ModalLoader.js @@ -0,0 +1,19 @@ +import React from 'react'; +import {Modal, Spin} from "antd"; +import {observer} from 'mobx-react-lite'; + +export const ModalLoader = observer(({isOpen, text}) => { + return +
+ + {text || 'Loading ...'} +
+
+}); diff --git a/src/pages/App/App.js b/src/pages/App/App.js index 2225853..64ec790 100644 --- a/src/pages/App/App.js +++ b/src/pages/App/App.js @@ -1,12 +1,11 @@ -import React, {useEffect} from "react"; +import React, {useEffect, useState} from "react"; import {DesktopLayout} from "./DesktopLayout"; import {useMediaQuery} from 'react-responsive'; import {useStore} from "../../utils/useStore"; -import {useHistory} from "react-router-dom"; - +import {ModalLoader} from "../../component/Modal/ModalLoader"; +import {ModalLoaderContext} from "../../utils/modal"; export const App = () => { - // TODO: add mobile layout const store = useStore(); const mediaQuery = { isDesktop: useMediaQuery({minWidth: 1024}), @@ -15,11 +14,23 @@ export const App = () => { isNotMobile: useMediaQuery({minWidth: 768}), }; + const [modalLoading, setModalLoading] = useState(false); + const [modalText, setModalText] = useState(undefined); + const modalContextValue = { + setLoading: setModalLoading, + setText: setModalText, + }; + useEffect(() => { store.ui.setMediaQuery(mediaQuery); }); -// const isMobileDevice = useMediaQuery({ -// query: "(min-device-width: 480px)", -// }); - return ; + + return ( + <> + + + + + + ); }; diff --git a/src/pages/Product/Product.js b/src/pages/Product/Product.js index cd2660e..31461ce 100644 --- a/src/pages/Product/Product.js +++ b/src/pages/Product/Product.js @@ -1,4 +1,4 @@ -import React, {useEffect, useState} from "react"; +import React, {useContext, useEffect, useState} from "react"; import {Button, Card, Col, Input, Row, Select, Tabs, Upload} from "antd"; import {FilterOutlined, PlusSquareOutlined, UploadOutlined,} from "@ant-design/icons"; import {BreadcumbComponent} from "../../component/BreadcumbComponent"; @@ -6,6 +6,7 @@ import {useStore} from "../../utils/useStore"; import {observer} from "mobx-react-lite"; import {ProductComponent} from "../../component/ProductComponent"; import {LINKS} from "../../routes/app"; +import {ModalLoaderContext} from "../../utils/modal"; const {TabPane} = Tabs; const {Search} = Input; @@ -14,11 +15,13 @@ const {Option} = Select; export const Product = observer(() => { const [isLoading, setIsLoading] = useState(false); const store = useStore(); + const modalLoader = useContext(ModalLoaderContext); useEffect(() => { const init = async () => { try { setIsLoading(true); + modalLoader.setLoading(true); await Promise.allSettled([ store.supplier.getData(), store.product.getDataCategories(), @@ -26,6 +29,7 @@ export const Product = observer(() => { ]); await store.product.getData(); setIsLoading(false); + modalLoader.setLoading(false); } catch (e) { setIsLoading(false); } diff --git a/src/utils/modal.js b/src/utils/modal.js new file mode 100644 index 0000000..6e9f80c --- /dev/null +++ b/src/utils/modal.js @@ -0,0 +1,3 @@ +import React from "react"; + +export const ModalLoaderContext = React.createContext(null);