| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 | 
							- import BaseFoundation, { DefaultAdapter } from '../base/foundation';
 
- const addKeys = function addKeys(originKeys: (string | number)[] = [], ...willAddKeys: (string | number)[]) {
 
-     const keySet = new Set(originKeys);
 
-     willAddKeys.forEach(key => key && keySet.add(key));
 
-     return Array.from(keySet);
 
- };
 
- const removeKeys = function removeKeys(originKeys: (string | number)[] = [], ...willRemoveKeys: (string | number)[]) {
 
-     const keySet = new Set(originKeys);
 
-     willRemoveKeys.forEach(key => key && keySet.delete(key));
 
-     return Array.from(keySet);
 
- };
 
- export interface OnOpenChangeData {
 
-     itemKey: string | number;
 
-     openKeys: (string | number)[];
 
-     isOpen: boolean;
 
- }
 
- export interface OnClickData extends OnOpenChangeData {
 
-     domEvent: any;
 
- }
 
- export interface OnSelectData extends OnOpenChangeData {
 
-     domEvent: any;
 
- }
 
- export interface SubNavAdapter<P = Record<string, any>, S = Record<string, any>> extends DefaultAdapter<P, S> {
 
-     updateIsHovered(isHovered: boolean): void;
 
-     getOpenKeys(): (string | number)[];
 
-     getOpenKeysIsControlled(): boolean;
 
-     getCanUpdateOpenKeys(): boolean;
 
-     updateOpen(isOpen: boolean): void;
 
-     notifyGlobalOpenChange(data: OnOpenChangeData): void;
 
-     notifyGlobalOnSelect(data: OnSelectData): void;
 
-     notifyGlobalOnClick(data: OnClickData): void;
 
-     getIsSelected(itemKey: string | number): boolean;
 
-     getIsOpen(): boolean;
 
- }
 
- export default class SubNavFoundation<P = Record<string, any>, S = Record<string, any>> extends BaseFoundation<SubNavAdapter<P, S>, P, S> {
 
-     constructor(adapter: SubNavAdapter<P, S>) {
 
-         super({ ...adapter });
 
-     }
 
-     _timer: number;
 
-     init() {
 
-         // this.log('invoke SubNavFoundation init()');
 
-         this._timer = null;
 
-     }
 
-     destroy() {} // eslint-disable-line
 
-     clearDelayTimer() {
 
-         if (this._timer) {
 
-             clearTimeout(this._timer);
 
-             this._timer = null;
 
-         }
 
-     }
 
-     isValidKey(itemKey: string | number) {
 
-         // eslint-disable-next-line eqeqeq
 
-         return itemKey != null && (typeof itemKey === 'number' || typeof itemKey === 'string');
 
-     }
 
-     handleDropdownVisibleChange(visible: boolean) {
 
-         const itemKey = this.getProp('itemKey');
 
-         const openKeysIsControlled = this._adapter.getOpenKeysIsControlled();
 
-         const canUpdateOpenKeys = this._adapter.getCanUpdateOpenKeys();
 
-         const rawOpenKeys = this._adapter.getOpenKeys();
 
-         const openKeys = visible ? addKeys(rawOpenKeys, itemKey) : removeKeys(rawOpenKeys, itemKey);
 
-         this.clearDelayTimer();
 
-         if (!openKeysIsControlled) {
 
-             if (canUpdateOpenKeys) {
 
-                 this._adapter.updateOpen(visible);
 
-             }
 
-             // this._adapter.updateIsHovered(visible);
 
-         }
 
-         this._adapter.notifyGlobalOpenChange({ itemKey, openKeys, isOpen: visible });
 
-     }
 
-     /**
 
-      *
 
-      * @param {Event} e
 
-      * @param {HTMLElement} titleRef
 
-      */
 
-     handleClick(e: any, titleRef: any) {
 
-         const { itemKey, disabled } = this.getProps();
 
-         if (disabled) {
 
-             return;
 
-         }
 
-         // this.log(e, titleRef, titleRef.contains(e.target));
 
-         const clickedDomIsTitle = titleRef && titleRef.contains(e.target);
 
-         let isOpen = Boolean(this._adapter.getIsOpen());
 
-         if (!clickedDomIsTitle) {
 
-             isOpen = false;
 
-         } else {
 
-             isOpen = !isOpen;
 
-         }
 
-         const openKeys = isOpen
 
-             ? addKeys(this._adapter.getOpenKeys(), itemKey)
 
-             : removeKeys(this._adapter.getOpenKeys(), itemKey);
 
-         const cbVal = { itemKey, openKeys, isOpen, domEvent: e };
 
-         const openKeysIsControlled = this._adapter.getOpenKeysIsControlled();
 
-         const canUpdateOpenKeys = this._adapter.getCanUpdateOpenKeys();
 
-         if (!openKeysIsControlled && canUpdateOpenKeys) {
 
-             this._adapter.updateOpen(isOpen);
 
-         }
 
-         this._adapter.notifyGlobalOpenChange(cbVal);
 
-         this._adapter.notifyGlobalOnClick(cbVal);
 
-     }
 
- }
 
 
  |