radioFoundation.ts 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. import BaseFoundation, { DefaultAdapter } from '../base/foundation';
  2. import warning from '../utils/warning';
  3. export interface RadioAdapter extends DefaultAdapter {
  4. setHover: (hover: boolean) => void;
  5. setChecked: (checked: boolean) => void;
  6. setAddonId: () => void;
  7. setExtraId: () => void;
  8. setFocusVisible: (focusVisible: boolean) => void
  9. }
  10. export default class RadioFoundation extends BaseFoundation<RadioAdapter> {
  11. init() {
  12. const { children, extra, extraId, addonId } = this._adapter.getProps();
  13. if (children && !addonId) {
  14. this._adapter.setAddonId();
  15. }
  16. if (extra && !extraId) {
  17. this._adapter.setExtraId();
  18. }
  19. }
  20. setHover(hover: boolean) {
  21. this._adapter.setHover(hover);
  22. }
  23. setChecked(checked: boolean) {
  24. this._adapter.setChecked(checked);
  25. }
  26. handleFocusVisible = (event: any) => {
  27. const { target } = event;
  28. try {
  29. if (target.matches(':focus-visible')) {
  30. this._adapter.setFocusVisible(true);
  31. }
  32. } catch (error){
  33. warning(true, 'Warning: [Semi Radio] The current browser does not support the focus-visible');
  34. }
  35. }
  36. handleBlur = () => {
  37. this._adapter.setFocusVisible(false);
  38. }
  39. }