1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- import BaseFoundation, { DefaultAdapter } from '../base/foundation';
- export interface RadioChangeEvent {
- target: {
- [x: string]: any;
- checked: boolean;
- value: any;
- };
- stopPropagation: () => void;
- preventDefault: () => void;
- }
- export interface RadioInnerAdapter extends DefaultAdapter {
- notifyChange?: (e: RadioChangeEvent) => void;
- setNativeControlChecked?: (checked: boolean) => void;
- }
- export default class RadioInnerFoundation extends BaseFoundation<RadioInnerAdapter> {
- constructor(adapter: RadioInnerAdapter) {
- super({ ...adapter });
- }
- init() {
- const checked = this._adapter.getProp('checked');
- const defaultChecked = this._adapter.getProp('defaultChecked');
- this.setChecked(checked || defaultChecked);
- }
- setChecked(checked: boolean) {
- this._adapter.setNativeControlChecked(checked);
- }
- getChecked() {
- return this._adapter.getProp('checked');
- }
- handleChange(e: any) {
- const isControlledMode = 'checked' in this.getProps();
- const { checked } = e.target;
- const stopPropagation = () => {
- e.stopPropagation();
- };
- const preventDefault = () => {
- e.preventDefault();
- };
- const cbValue = {
- target: {
- ...this.getProps(),
- checked,
- },
- stopPropagation,
- preventDefault
- };
- if (isControlledMode) {
- this._adapter.notifyChange(cbValue);
- } else {
- this.setChecked(checked);
- this._adapter.notifyChange(cbValue);
- }
- }
- // eslint-disable-next-line @typescript-eslint/no-empty-function
- destroy() {}
- }
|