123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- import React from 'react';
- import { Popover } from 'antd';
- import { PopoverProps } from 'antd/lib/popover';
- import WantedPublishView from '../WantedPublishView';
-
- import popClose from '../assets/icon/close@2x.png';
- import styles from './WantedPublishPopover.less';
-
- export interface WantedPublishPopoverProp {
- popoverConfig?: PopoverProps;
- handleConfirm?: Function;
- }
-
- export interface WantedPublishPopoverState {
- visible: boolean;
- current_wanted: number|string|null;
- }
-
- export class WantedPublishPopover extends React.Component<WantedPublishPopoverProp, WantedPublishPopoverState> {
- constructor(props: WantedPublishPopoverProp) {
- super(props);
- this.state = {
- visible: false,
-
- current_wanted: null,
- }
- }
-
- handleClose = () => {
- const { handleConfirm } = this.props;
- if (handleConfirm) {
- this.handleUpdateCurrentWanted(this.state.current_wanted, (value: string) => {
- handleConfirm(Number(value).toFixed(2));
- });
- }
- this.setState({ visible: false });
- }
-
- clearCurrentWanted = (cb: Function) => {
- this.setState({
- current_wanted: null,
- }, () => cb())
- }
-
- handleUpdateCurrentWanted = (value: string|number|null, afterUpdate?: Function) => {
- if (!value) return;
- let result: string|number;
- result = value;
- if (parseInt(`${value}`, 10) === value) {
- // 无小数判断
- result = Number(value)
- }
- if (!result) return;
- if (result > 10000) result = 10000;
- if (result < 5) result = 5;
- this.setState({ current_wanted: result }, () => afterUpdate && afterUpdate(result));
- }
-
- renderInitView() {
- const { current_wanted } = this.state;
- return (
- <WantedPublishView
- type="pop"
- current_wanted={current_wanted}
- InputWantedValueChange={(v: string) => this.setState({ current_wanted: v })}
- InputWantedPressEnter={(v: string) => this.handleUpdateCurrentWanted(v, this.handleClose)}
- InputWantedOnBlur={(v: string) => this.handleUpdateCurrentWanted(v)}
- InputWantedClear={() => this.clearCurrentWanted(this.handleClose)}
- CloseFunction={this.handleClose}
- />
- )
- }
-
- render() {
- const { children, popoverConfig = {} } = this.props;
-
- return (
- <Popover
- placement="left"
- trigger="click"
- visible={this.state.visible}
- onVisibleChange={(value: boolean) => {
- if (!value) {
- this.handleClose();
- }
- this.setState({ visible: value });
- }}
- {...popoverConfig}
- content={
- <div className={styles.wantedWrapper}>
- <div role="button" tabIndex={1} className={styles.closeBtnWrapper}>
- <div className={styles.closeBtn} onClick={this.handleClose}>
- <img src={popClose} alt="close wanted button"/>
- </div>
- </div>
- {this.renderInitView()}
- </div>
- }
- >
- {children}
- </Popover>
- );
- }
- }
-
- export default WantedPublishPopover;
|