radioFoundation.ts 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738
  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. setAddonId: () => void;
  6. setExtraId: () => void;
  7. setFocusVisible: (focusVisible: boolean) => void;
  8. }
  9. export default class RadioFoundation extends BaseFoundation<RadioAdapter> {
  10. init() {
  11. const { children, extra, extraId, addonId } = this._adapter.getProps();
  12. if (children && !addonId) {
  13. this._adapter.setAddonId();
  14. }
  15. if (extra && !extraId) {
  16. this._adapter.setExtraId();
  17. }
  18. }
  19. setHover(hover: boolean) {
  20. this._adapter.setHover(hover);
  21. }
  22. handleFocusVisible = (event: any) => {
  23. const { target } = event;
  24. try {
  25. if (target.matches(':focus-visible')) {
  26. this._adapter.setFocusVisible(true);
  27. }
  28. } catch (error){
  29. warning(true, 'Warning: [Semi Radio] The current browser does not support the focus-visible');
  30. }
  31. }
  32. handleBlur = () => {
  33. this._adapter.setFocusVisible(false);
  34. }
  35. }