123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 |
- 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;
|