import React from 'react' import i18n from 'i18next' import cls from 'classnames' import { Menu, Dropdown, Tooltip } from 'antd' import newEventActions from 'actions/newEvent' import newEventStores from 'stores/newEvent' import widgetStore from 'stores/widget' import { shallowEqualImmutable } from 'utils/utils' import { getEventBlockByBid, getEventNodeById } from 'stores/funcs/newEvent' import { getModuleInstanceNameLocale } from 'src/stores/funcs/event/methodUtils' import { getTriggerEvents } from 'stores/funcs/event/eventUtils' import { isHySa } from 'utils/commons/ctrlHide' import BlockEnable from '../BlockEnable' import iconStrObj from 'src/assets/icons/iconsStr' const MenuItem = Menu.Item export default class BlockEventTrigger extends React.Component { constructor(props) { super(props) this.curEventNodeId = newEventStores.curEventNodeId this.state = { events: this.getEvents(), trigger: this.getTrigger().name, mini: this.getTrigger().mini } this.onEventChange = this.onEventChange.bind(this) this.getEvents = this.getEvents.bind(this) this.getTrigger = this.getTrigger.bind(this) this.onSelectTrigger = this.onSelectTrigger.bind(this) this.getTriggerName = this.getTriggerName.bind(this) this.getTipInfo = this.getTipInfo.bind(this) } shouldComponentUpdate(nextProps, nextState) { return ( !shallowEqualImmutable(this.props, nextProps) || !shallowEqualImmutable(this.state, nextState) ) } componentDidMount() { this.unsubscribe = newEventStores.listen(this.onEventChange) } componentWillUnmount() { this.unsubscribe() } componentDidUpdate(preProps) { if (preProps.bid !== this.props.bid) { this.setState({ events: this.getEvents(), trigger: this.getTrigger().name, mini: this.getTrigger().mini }) } } onEventChange(status) { let obj = {} if (status) { if ( status.types.includes('curEventNodeId') && this.curEventNodeId !== status.data.curEventNodeId ) { this.curEventNodeId = status.data.curEventNodeId } if ( status.types.includes('updateBlockProp') && this.props.bid === status.data.affectBlockId && status.data.prop === 'trigger' ) { obj.trigger = this.getTrigger().name obj.mini = this.getTrigger().mini } } if (Object.keys(obj).length > 0) { this.setState(obj) } } onSelectTrigger(option) { if (option.key === 'emptyContent') { return } let name = option.key let trigger = this.state.trigger if (trigger === name) { return } this.setState({ trigger: name }) let curNodeId = this.props.eventNodeId || this.curEventNodeId newEventActions.updateBlockProp({ nodeId: curNodeId, blockId: this.props.bid, prop: 'trigger', value: name }) } getEvents() { let curNodeId = this.props.eventNodeId || this.curEventNodeId return getTriggerEvents(curNodeId) } getTrigger() { let result = {} let curNodeId = this.props.eventNodeId || this.curEventNodeId let block = getEventBlockByBid(this.props.bid, curNodeId) if (block && block.eventId) { result['name'] = block.name result['mini'] = !!block.mini } return result } getTriggerName() { let curNodeId = this.props.eventNodeId || this.curEventNodeId let curEventNode = getEventNodeById(curNodeId) let nodeInfo = curEventNode ? widgetStore.widget[curEventNode.type] : undefined let name = this.state.trigger || '' if (curEventNode) { let isMini = this.state.mini if (isMini) { name = getModuleInstanceNameLocale({ nodeId: curEventNode.id, type: 'events', name: name }) } else { if (nodeInfo && nodeInfo.map && nodeInfo.map.eventsMap) { name = nodeInfo.map.eventsMap[name] && nodeInfo.map.eventsMap[name].locale ? nodeInfo.map.eventsMap[name].locale[i18n.language] : name } } } return name } getTipInfo(item) { let curNodeId = this.props.eventNodeId || this.curEventNodeId let objNode = getEventNodeById(curNodeId) let type = objNode && objNode.type if (type && item) { let stopPro = e => { e.stopPropagation() } let info = widgetStore.widget[type].map.eventsMap[item.name] let content = info && info.desc && info.desc[i18n.language] let link = i18n.language === 'en' ? info && info.linkEN : info && info.linkZH content = content ? (