/**
* @description loading组件,可用于设置全局loading
*/
import React, { ReactNode } from "react";
import { observer } from "mobx-react";
import { Spin } from 'antd';
import { StateManage } from "../../../service/state";
import { PropertyService } from "../../../service/property";
import { IObservableObject } from 'mobx';
import ReactDOM from "react-dom";
export class Service {
randomEleID: string
private defaultClassName = "zion-ui-loading"
hasRenderGlobalLoading: boolean = false
globalStyle: any = {
position: "fixed",
zIndex: 10000,
top: "0px", left: "0px",
bottom: "0px", right: "0px",
background: "rgba(238,238,238, .3)",
lineHeight: document.body.clientHeight + "px"
}
globalLoadingProps: IObservableObject
constructor() {
this.randomEleID = this.createElement()
this.globalLoadingProps = PropertyService.getObservableObj({ loading: true })
}
private createElement(): string {
const ele = document.createElement("div")
const randomId = this.defaultClassName + (Math.random() * 1000).toFixed(0)
ele.id = randomId
document.body.appendChild(ele)
return randomId
}
private renderGlobalLoading() {
const GlobalLoading = observer(() => {
const { loading, icon } = StateManage.get(this.globalLoadingProps)
this.globalStyle.lineHeight = document.body.clientHeight + "px"
return
})
ReactDOM.render(, document.getElementById(this.randomEleID))
}
setGlobalLoading(loading: boolean, options?: { icon: ReactNode }) {
const { icon } = options || {}
StateManage.set(this.globalLoadingProps, { loading, icon })
if (this.hasRenderGlobalLoading) {
return
}
this.renderGlobalLoading()
this.hasRenderGlobalLoading = true
}
}