123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- import BaseFoundation, { DefaultAdapter } from '../base/foundation';
- import warning from '../utils/warning';
- import { BasicCheckboxEvent } from './checkboxFoundation';
- export interface CheckboxGroupAdapter extends DefaultAdapter{
- updateGroupValue: (value: any[]) => void;
- notifyChange: (value: any[]) => void
- }
- class CheckboxGroupFoundation extends BaseFoundation<CheckboxGroupAdapter> {
- static get checkboxGroupDefaultAdapter() {
- return {};
- }
- constructor(adapter: CheckboxGroupAdapter) {
- super({ ...CheckboxGroupFoundation.checkboxGroupDefaultAdapter, ...adapter });
- }
- init() {
- const { defaultValue, value } = this.getProps();
- if (typeof defaultValue !== 'undefined' && !Array.isArray(defaultValue)) {
- warning(true, 'Warning: [Semi CheckboxGroup] defaultValue should be an Array');
- }
- if (typeof value !== 'undefined' && !Array.isArray(value)) {
- warning(true, 'Warning: [Semi CheckboxGroup] value should be an Array');
- }
- }
- notifyChange(value: any[]) {
- this._adapter.notifyChange(value);
- }
- handleChange(evt: BasicCheckboxEvent) {
- const prevValue: any[] = this.getState('value');
- let newValue = [];
- if (!Array.isArray(prevValue)) {
- newValue = [prevValue];
- }
- if (evt.target.checked) {
- newValue = [...prevValue, evt.target.value];
- } else {
- newValue = prevValue.filter((itm, idx) => itm !== evt.target.value);
- }
- const isControlledMode = 'value' in this.getProps();
- if (isControlledMode) {
- // Controlled mode only needs to notify
- this.notifyChange(newValue);
- } else {
- // In uncontrolled mode, update the value in the state, and then notify
- this._adapter.updateGroupValue(newValue);
- this.notifyChange(newValue);
- }
- }
- getFormatName() {
- const propName = this.getProp('name');
- const defaultName = 'default';
- return propName || defaultName;
- }
- handlePropValueChange(newPropValue: any[]) {
- if (Array.isArray(newPropValue)) {
- this._adapter.updateGroupValue(newPropValue);
- } else {
- // to adjust reset in Form.CheckboxGroup
- if (typeof newPropValue === 'undefined') {
- this._adapter.updateGroupValue([]);
- }
- warning(true, 'Warning: [Semi CheckboxGroup] value should be an Array');
- }
- }
- // eslint-disable-next-line @typescript-eslint/no-empty-function
- destroy() {}
- }
- export default CheckboxGroupFoundation;
|