@@ -10,7 +10,6 @@ import { PlacementOffset } from './const';
1010import MessageComponent from './MessageComponent' ;
1111import { useMessageClass } from './useMessageClass' ;
1212
13- import type { AttachNodeReturnValue } from '../common' ;
1413import type {
1514 MessageCloseAllMethod ,
1615 MessageConfigMethod ,
@@ -56,7 +55,7 @@ interface ContainerInstance {
5655let messageKey = 1 ;
5756
5857// 不同 attach 和 placement 对应的消息容器
59- const MessageContainerMaps : Map < AttachNodeReturnValue , Map < MessagePlacementList , ContainerInstance > > = new Map ( ) ;
58+ const MessageContainerMaps : Map < HTMLElement , Map < MessagePlacementList , ContainerInstance > > = new Map ( ) ;
6059
6160const MessageContainer : React . FC < MessageContainerProps > = ( props ) => {
6261 const { placement, children, zIndex, renderCallback } = props ;
@@ -93,15 +92,15 @@ const MessageContainer: React.FC<MessageContainerProps> = (props) => {
9392 ) ;
9493} ;
9594
96- function getAttachNodeMap ( attachNode : AttachNodeReturnValue ) {
95+ function getAttachNodeMap ( attachNode : HTMLElement ) {
9796 if ( ! MessageContainerMaps . has ( attachNode ) ) {
9897 MessageContainerMaps . set ( attachNode , new Map ( ) ) ;
9998 }
10099 return MessageContainerMaps . get ( attachNode ) ;
101100}
102101
103102async function findExistingContainer (
104- attachNode : AttachNodeReturnValue ,
103+ attachNode : HTMLElement ,
105104 placement : MessagePlacementList ,
106105 zIndex ?: number ,
107106) {
@@ -162,15 +161,6 @@ async function renderElement(theme, config: MessageOptions): Promise<MessageInst
162161 const index = containerInstance . messages . indexOf ( message ) ;
163162 if ( index === - 1 ) return ;
164163 containerInstance . messages . splice ( index , 1 ) ;
165- // 如果容器内没有消息,整个移除
166- if ( containerInstance . messages . length === 0 ) {
167- containerInstance . container . remove ( ) ;
168- const attachNodeMap = getAttachNodeMap ( attachNode ) ;
169- attachNodeMap . delete ( placement ) ;
170- if ( attachNodeMap . size === 0 ) {
171- MessageContainerMaps . delete ( attachNode ) ;
172- }
173- }
174164 } ,
175165 } ;
176166
@@ -259,13 +249,11 @@ MessagePlugin.close = (messageInstance) => {
259249 * @desc 关闭所有的 message
260250 */
261251MessagePlugin . closeAll = ( ) : MessageCloseAllMethod => {
262- // 收集所有需要关闭的消息实例
263252 const allMessages : MessageInstance [ ] = [ ] ;
264-
265253 MessageContainerMaps . forEach ( ( placementMap ) => {
266- placementMap . forEach ( ( containerInfo ) => {
267- // 复制消息数组,避免在关闭过程中数组被修改
268- allMessages . push ( ...containerInfo . messages . slice ( ) ) ;
254+ placementMap . forEach ( ( instance ) => {
255+ // 收集需要关闭的消息实例,避免同时遍历与删除导致的索引错乱问题
256+ allMessages . push ( ...instance . messages . slice ( ) ) ;
269257 } ) ;
270258 } ) ;
271259
@@ -275,8 +263,6 @@ MessagePlugin.closeAll = (): MessageCloseAllMethod => {
275263 message . close ( ) ;
276264 }
277265 } ) ;
278-
279- MessageContainerMaps . clear ( ) ;
280266 return ;
281267} ;
282268
0 commit comments