| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- import BaseFoundation, { DefaultAdapter } from '../base/foundation';
- import { RadioChangeEvent } from './radioInnerFoundation';
- export interface RadioGroupAdapter extends DefaultAdapter {
- isInProps?: (name: string) => boolean;
- notifyChange?: (e: RadioChangeEvent) => void;
- setValue?: (value: any) => void;
- }
- export default class RadioGroupFoundation extends BaseFoundation<RadioGroupAdapter> {
- constructor(adapter: RadioGroupAdapter) {
- super({ ...adapter });
- }
- init() {
- const displayValue = this._getDisplayValue();
- this._setValue(displayValue);
- }
- _getDisplayValue() {
- const { value, defaultValue } = this.getProps();
- let displayValue;
- if ('value' in this.getProps()) {
- displayValue = value;
- } else if ('defaultValue' in this.getProps()) {
- displayValue = defaultValue;
- }
- return displayValue;
- }
- handleChange(evt: any) {
- const mode = this.getProp('mode');
- const lastValue = this.getState('value');
- const { checked, value } = evt.target;
- const isControlledComponent = this._adapter.isInProps('value');
- const cbValue = {
- ...evt,
- target: {
- ...evt.target,
- value,
- }
- };
- if (mode === 'advanced' && !checked) {
- cbValue.target.value = undefined;
- }
- if (!isControlledComponent) {
- if (mode === 'advanced' && !checked) {
- this._setValue(undefined);
- } else {
- this._setValue(value);
- }
- }
- if (mode === 'advanced' || lastValue !== value) {
- this._adapter.notifyChange(cbValue);
- }
- }
- // call when prop.value change
- handlePropValueChange(propValue: any) {
- this._setValue(propValue);
- }
- _setValue(value: any) {
- this._adapter.setValue(value);
- }
- // eslint-disable-next-line @typescript-eslint/no-empty-function
- destroy() {}
- }
|