Commit d8e6cfc3 authored by AU-PRO's avatar AU-PRO

add new code

parent ef25743a
...@@ -3,17 +3,23 @@ ...@@ -3,17 +3,23 @@
import React, { Component } from 'react'; import React, { Component } from 'react';
import resList from '../../../resconfig/resList'; import resList from '../../../resconfig/resList';
import { Aup } from '../../../pop'
import './PopDefault.less'; import './PopDefault.less';
class PopDefault extends Component { class PopDefault extends Component {
constructor(props) { constructor(props) {
super(props); super(props);
this.state = this.state || { this.state = this.state || {
resList: resList resList: resList,
data: this.props.data
}; };
this.ref = React.createRef()
} }
doCallBack = () => { doCallBack = async () => {
this.props.fn() // this.props.fn()
let arr = await Aup.getArr()
console.log(arr)
} }
render() { render() {
...@@ -31,4 +37,5 @@ class PopDefault extends Component { ...@@ -31,4 +37,5 @@ class PopDefault extends Component {
); );
} }
} }
export default PopDefault; export default PopDefault;
...@@ -67,6 +67,7 @@ class PageHome extends Component { ...@@ -67,6 +67,7 @@ class PageHome extends Component {
<div className="home"> <div className="home">
<div className="home_title">pageHome</div> <div className="home_title">pageHome</div>
<div className="home_button_group"> <div className="home_button_group">
<div onClick={ debounce(this.openDefault, 300, 1) } className="home_button">open pop default</div> <div onClick={ debounce(this.openDefault, 300, 1) } className="home_button">open pop default</div>
<div onClick={ debounce(this.openRule, 300, 1) } className="home_button">open pop rule</div> <div onClick={ debounce(this.openRule, 300, 1) } className="home_button">open pop rule</div>
<div onClick={ debounce(this.openInput, 300, 1) } className="home_button">open pop input</div> <div onClick={ debounce(this.openInput, 300, 1) } className="home_button">open pop input</div>
......
...@@ -4,7 +4,7 @@ import popMap from '../PopMap.js' ...@@ -4,7 +4,7 @@ import popMap from '../PopMap.js'
import { observer } from 'mobx-react-lite' import { observer } from 'mobx-react-lite'
import { toJS } from "mobx"; import { toJS } from "mobx";
import { Aup } from "../index.js" import { Aup } from "../index.js"
import { ConsoleStyleComponents } from '../api/tools.js'; import { ConsoleStyleComponents, ConsoleStyleFlagColor } from '../api/tools.js';
import './AUPopMobx.less' import './AUPopMobx.less'
...@@ -12,14 +12,14 @@ class AUPopMobx extends Component { ...@@ -12,14 +12,14 @@ class AUPopMobx extends Component {
constructor (props) { constructor (props) {
super(props) super(props)
this.state = this.state || { this.state = this.state || {
popArr: [], popArr: []
closeFlag: false
} }
this.auPopRef = React.createRef() this.auPopRef = React.createRef()
this.closeFlagRef = React.createRef()
} }
static getDerivedStateFromProps(nextProprs, preState) { static getDerivedStateFromProps(nextProprs, preState) {
console.log(`%c AUPopMobx nextProprs is: \n`, ConsoleStyleComponents, toJS(nextProprs.popArr)) console.log(`%c AUPopMobx nextProprs is: \n`, ConsoleStyleComponents, nextProprs)
if (nextProprs.popArr.length === 0) { if (nextProprs.popArr.length === 0) {
allowScroll() allowScroll()
} else if (nextProprs.popArr.length && preState.length == 0) { } else if (nextProprs.popArr.length && preState.length == 0) {
...@@ -31,35 +31,41 @@ class AUPopMobx extends Component { ...@@ -31,35 +31,41 @@ class AUPopMobx extends Component {
} }
closePop = (index) => { closePop = (index) => {
if (this.state.popArr.length == 1) {
// TODO: not complete
// TODO: inject some animation function in there:
if (!this.state.popArr.length) return
else if (this.state.popArr.length == 1) {
if (this.auPopRef.current) { if (this.auPopRef.current) {
this.auPopRef.current.style.transition = `opacity 350ms` this.auPopRef.current.style.transition = `opacity 350ms`
this.auPopRef.current.style.opacity = '0' this.auPopRef.current.style.opacity = '0'
this.setState({closeFlag: true}) this.closeFlagRef.current && (this.closeFlagRef.current.style.display = 'block')
setTimeout(() => { setTimeout(() => {
// this.props.showPop({type: 0})
Aup.close() Aup.close()
this.setState({closeFlag: false}) this.closeFlagRef.current && (this.closeFlagRef.current.style.display = 'none')
}, 400); }, 400);
} else { } else {
// this.props.showPop({type: 0})
Aup.close() Aup.close()
this.setState({closeFlag: false}) this.closeFlagRef.current.style.display = 'none'
} }
} }
else {
console.log(this.state.popArr) else if (this.state.popArr.length > 1) {
this.setState({closeFlag: true}) this.closeFlagRef.current && (this.closeFlagRef.current.style.display = 'block')
setTimeout(() => { setTimeout(() => {
// this.props.showPop({type: 0})
Aup.close() Aup.close()
this.setState({closeFlag: false}) this.closeFlagRef.current && (this.closeFlagRef.current.style.display = 'none')
}, 400); }, 400);
} }
} }
render() { render() {
const { popArr, closeFlag } = this.state console.log('%c ----------------- AUtest - RENDER RUN FLAG ----------------- ----------------- ----------------- -----------------', ConsoleStyleFlagColor)
const { popArr } = this.state
let Pop = [] let Pop = []
popArr.forEach((item, index) => { popArr.forEach((item, index) => {
const { showPop, popData, fn, ctx } = item const { showPop, popData, fn, ctx } = item
...@@ -77,7 +83,7 @@ class AUPopMobx extends Component { ...@@ -77,7 +83,7 @@ class AUPopMobx extends Component {
<div className='compop_mask'></div> <div className='compop_mask'></div>
{/* 关闭-禁止点击 */} {/* 关闭-禁止点击 */}
{ closeFlag ? <div className='compop_transparent'></div> : null } <div ref={this.closeFlagRef} className='compop_transparent'></div>
{Pop.map((It, index) => { {Pop.map((It, index) => {
return ( return (
......
...@@ -25,6 +25,7 @@ ...@@ -25,6 +25,7 @@
left: 0; left: 0;
z-index: 9; z-index: 9;
touch-action: none; touch-action: none;
display: none;
} }
} }
......
...@@ -18,16 +18,18 @@ class PopState { ...@@ -18,16 +18,18 @@ class PopState {
popArr: observable, popArr: observable,
addPop: action.bound, addPop: action.bound,
changePop: action.bound, changePop: action.bound,
computedPopArr: computed popArrLength: computed
}) })
} }
// 添加一个弹窗
addPop = (data) => { addPop = (data) => {
this.nowShow = data.type this.nowShow = data.type
this.popArr.push(data) this.popArr.push(data)
// console.log(`${CONSO_START_mark}\n addPop:`, ConsoleStyleTitle, toJS(this.popArr)) // console.log(`${CONSO_START_mark}\n addPop:`, ConsoleStyleTitle, toJS(this.popArr))
} }
// 改变数组中的第一个弹窗
changePop = (data) => { changePop = (data) => {
this.nowShow = data.type this.nowShow = data.type
this.popArr.push(data) this.popArr.push(data)
...@@ -35,15 +37,20 @@ class PopState { ...@@ -35,15 +37,20 @@ class PopState {
// this.popArr = [data] // this.popArr = [data]
} }
// 删除弹窗
delePop = (long) => { delePop = (long) => {
this.popArr.splice(this.popArr.length - long, long) this.popArr.splice(this.popArr.length - long, long)
if (this.popArr.length) this.nowShow = this.popArr[this.popArr.length - 1].type if (this.popArr.length) this.nowShow = this.popArr[this.popArr.length - 1].type
} }
// 清空 弹窗
clearPop = () => {
this.popArr = []
}
get popArrLength () {
get computedPopArr () { // console.log(`${CONSO_START_mark}\n this.popArr:`, ConsoleStyleTitle, toJS(this.popArr))
console.log(`${CONSO_START_mark}\n this.popArr:`, ConsoleStyleTitle, toJS(this.popArr)) return this.popArr.length
} }
} }
...@@ -52,12 +59,12 @@ export const AUP_MBX_STATE = new PopState('init') ...@@ -52,12 +59,12 @@ export const AUP_MBX_STATE = new PopState('init')
autorun(() => { autorun(() => {
let tempLastComPop = toJS(AUP_MBX_STATE.popArr) let tempLastComPop = toJS(AUP_MBX_STATE.popArr)
let last = tempLastComPop.length ? tempLastComPop[tempLastComPop.length - 1] : undefined let last = tempLastComPop.length ? tempLastComPop[tempLastComPop.length - 1] : undefined
console.log(`${CONSO_START_mark}\n AUTORUN::: the last Pop of AUP_MBX_STATE.popArr:`, ConsoleStyleTitle, last) console.log(`${CONSO_START_mark}\n AUTORUN::: the last Pop`, ConsoleStyleTitle, last)
return last return last
}) })
// ready for mobx can't use // ready code for mobx can't use
// author: 沈阳楠 // author: 沈阳楠
......
...@@ -6,5 +6,8 @@ import { CONSO_START_mark, ConsoleStyleTitle } from './tools' ...@@ -6,5 +6,8 @@ import { CONSO_START_mark, ConsoleStyleTitle } from './tools'
* 清空页面弹窗 * 清空页面弹窗
*/ */
export const clear = () => { export const clear = () => {
if (AUP_MBX_STATE.popArrLength === 0) return
else AUP_MBX_STATE.clearPop()
}
}
\ No newline at end of file
...@@ -7,6 +7,16 @@ import { CONSO_START_mark, ConsoleStyleTitle } from './tools' ...@@ -7,6 +7,16 @@ import { CONSO_START_mark, ConsoleStyleTitle } from './tools'
* @param {Number} length 关闭的数量 * @param {Number} length 关闭的数量
*/ */
export const close = (length = 1) => { export const close = (length = 1) => {
AUP_MBX_STATE.delePop(length) if (AUP_MBX_STATE.popArrLength === 0) {
console.warn(`弹窗数组无储存的弹窗, \n 勿重复调用 close()`)
return
}
else if (AUP_MBX_STATE.popArrLength >= length) {
AUP_MBX_STATE.delePop(length)
}
else {
console.warn(`传入的关闭弹窗数量 ${length},大于弹窗数组所储存的数量 ${AUP_MBX_STATE.popArrLength}, \n 执行清空操作`)
AUP_MBX_STATE.clearPop()
}
} }
...@@ -19,7 +19,7 @@ export const cover = (type, data = {}, option = null) => { ...@@ -19,7 +19,7 @@ export const cover = (type, data = {}, option = null) => {
// console.log(`${CONSO_START_mark}\n AupopShow data is:`, ConsoleStyleTitle, data) // console.log(`${CONSO_START_mark}\n AupopShow data is:`, ConsoleStyleTitle, data)
// 覆盖弹窗 // 覆盖弹窗
if (type && AUP_MBX_STATE.popArr.length && (option && option.cover)) AUP_MBX_STATE.addPop(pData) if (type && AUP_MBX_STATE.popArrLength) AUP_MBX_STATE.addPop(pData)
// 出现弹窗 - ps: 首个弹窗 // 出现弹窗 - ps: 首个弹窗
else AUP_MBX_STATE.addPop(pData) else AUP_MBX_STATE.addPop(pData)
......
...@@ -6,7 +6,23 @@ import { CONSO_START_mark, ConsoleStyleTitle } from './tools' ...@@ -6,7 +6,23 @@ import { CONSO_START_mark, ConsoleStyleTitle } from './tools'
* 获取弹窗数组 * 获取弹窗数组
*/ */
export const getArr = () => { export const getArr = () => {
return [] return new Promise((resolve, reject) => {
let popArrTmp = deepCopy(AUP_MBX_STATE.popArr)
resolve(popArrTmp)
})
}
function deepCopy(source){
if (typeof source != "object") {
return source
}
if (source == null) {
return source
}
var newObj = source.constructor === Array ? [] : {} //开辟一块新的内存空间
for (var i in source) {
newObj[i] = deepCopy(source[i])
}
return newObj
} }
// IntersectionObserver // IntersectionObserver
\ No newline at end of file
export { show } from './show' export { show } from './show'
export { cover } from './cover'
export { close } from './close' export { close } from './close'
export { clear } from './clear' export { clear } from './clear'
export { getArr } from './getArr' export { getArr } from './getArr'
\ No newline at end of file
...@@ -19,10 +19,10 @@ export const show = (type, data = {}, ctx, fn) => { ...@@ -19,10 +19,10 @@ export const show = (type, data = {}, ctx, fn) => {
// console.log(`${CONSO_START_mark}\n AupopShow data is:`, ConsoleStyleTitle, data) // console.log(`${CONSO_START_mark}\n AupopShow data is:`, ConsoleStyleTitle, data)
// 添加弹窗 没有弹窗 // 添加弹窗 没有弹窗
if (type && !AUP_MBX_STATE.popArr.length) AUP_MBX_STATE.addPop(pData) if (type && !AUP_MBX_STATE.popArrLength) AUP_MBX_STATE.addPop(pData)
// 替换弹窗 // 替换弹窗
else if (type && AUP_MBX_STATE.popArr.length) AUP_MBX_STATE.changePop(pData) else if (type && AUP_MBX_STATE.popArrLength) AUP_MBX_STATE.changePop(pData)
} }
...@@ -29,6 +29,11 @@ export const ConsoleStyleComponents = [ ...@@ -29,6 +29,11 @@ export const ConsoleStyleComponents = [
'font-weight: 400' 'font-weight: 400'
].join(';') ].join(';')
export const ConsoleStyleFlagColor = [
'color: #fda300',
'font-size: 6px',
'font-weight: 900'
].join(';')
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment