| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- import BaseFoundation, { DefaultAdapter } from '../base/foundation';
- import { get, noop } from 'lodash';
- import KeyCode from '../utils/keyCode';
- export interface SideSheetProps {
- afterVisibleChange?: (isVisible: boolean) => void;
- bodyStyle?: Record<string, any>;
- className?: string;
- closable?: boolean;
- closeOnEsc?: boolean;
- disableScroll?: boolean;
- footer?: any;
- getPopupContainer?: () => HTMLElement;
- headerStyle?: Record<string, any>;
- height?: number | string;
- keepDOM?: boolean;
- mask?: boolean;
- maskClosable?: boolean;
- maskStyle?: Record<string, any>;
- motion?: boolean;
- onCancel?: (e: any) => void;
- placement?: 'top' | 'bottom' | 'left' | 'right';
- size?: 'small' | 'medium' | 'large';
- style?: Record<string, any>;
- title?: any;
- visible?: boolean;
- width?: number | string;
- zIndex?: number;
- children?: any;
- 'aria-label'?: string
- }
- export interface SideSheetState {
- displayNone: boolean
- }
- export interface SideSheetAdapter extends DefaultAdapter<SideSheetProps, SideSheetState> {
- disabledBodyScroll: () => void;
- enabledBodyScroll: () => void;
- notifyCancel: (e: any) => void;
- notifyVisibleChange: (visible: boolean) => void;
- setOnKeyDownListener: () => void;
- removeKeyDownListener: () => void;
- toggleDisplayNone: (displayNone: boolean) => void
- }
- export default class SideSheetFoundation extends BaseFoundation<SideSheetAdapter> {
- constructor(adapter: SideSheetAdapter) {
- super({ ...SideSheetFoundation.defaultAdapter, ...adapter });
- }
- get defaultAdapter() {
- return ({
- handleCancel: noop,
- beforeShow: noop,
- afterHide: noop,
- });
- }
- destroy() {
- this.afterHide();
- }
- handleCancel(e: any) {
- this._adapter.notifyCancel(e);
- }
- beforeShow() {
- const allowDisable = this.getProp('disableScroll');
- allowDisable && this._adapter.disabledBodyScroll();
- this._adapter.setOnKeyDownListener();
- }
- afterHide() {
- const allowDisable = this.getProp('disableScroll');
- allowDisable && this._adapter.enabledBodyScroll();
- this._adapter.removeKeyDownListener();
- }
- handleKeyDown(e: any) {
- const { closeOnEsc } = this.getProps();
- if (closeOnEsc && e.keyCode === KeyCode.ESC) {
- e.stopPropagation();
- this.handleCancel(e);
- return;
- }
- }
- onVisibleChange(visible: boolean) {
- this._adapter.notifyVisibleChange(visible);
- }
- toggleDisplayNone = (displayNone:boolean)=>{
- this._adapter.toggleDisplayNone(displayNone);
- }
- }
|