import BaseFoundation, { DefaultAdapter } from '../base/foundation'; import warning from '../utils/warning'; export interface SwitchAdapter
, S = Record {
setNativeControlChecked: (nativeControlChecked: boolean | undefined) => void;
setNativeControlDisabled: (nativeControlDisabled: boolean | undefined) => void;
setFocusVisible: (focusVisible: boolean) => void;
notifyChange: (checked: boolean, e: any) => void
}
export default class SwitchFoundation , S = Record ) {
super({ ...adapter });
}
init(): void {
const { defaultChecked, checked, disabled } = this.getProps();
this.setChecked(defaultChecked || checked);
this.setDisabled(disabled);
}
setChecked(checked: boolean | undefined): void {
this._adapter.setNativeControlChecked(checked);
}
setDisabled(disabled: boolean | undefined): void {
this._adapter.setNativeControlDisabled(disabled);
}
handleChange(checked: boolean, e: any): void {
const propChecked = this.getProps().checked;
const isControlledComponent = typeof propChecked !== 'undefined';
if (isControlledComponent) {
this._adapter.notifyChange(checked, e);
} else {
this._adapter.setNativeControlChecked(checked);
this._adapter.notifyChange(checked, e);
}
}
handleFocusVisible = (event: any) => {
const { target } = event;
try {
if (target.matches(':focus-visible')) {
this._adapter.setFocusVisible(true);
}
} catch (error){
warning(true, 'Warning: [Semi Switch] The current browser does not support the focus-visible');
}
}
handleBlur = () => {
this._adapter.setFocusVisible(false);
}
// eslint-disable-next-line @typescript-eslint/no-empty-function
destroy(): void {}
}