foundation.ts 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import BaseFoundation, { DefaultAdapter } from "../base/foundation";
  2. export interface CollapsibleFoundationProps {
  3. isOpen?: boolean;
  4. duration?: number;
  5. keepDOM?: boolean;
  6. className?: string;
  7. collapseHeight?: number;
  8. reCalcKey?: number | string;
  9. id?: string;
  10. fade?: boolean
  11. }
  12. export interface CollapsibleFoundationState {
  13. domInRenderTree: boolean;
  14. domHeight: number;
  15. visible: boolean;
  16. isTransitioning: boolean
  17. }
  18. export interface CollapsibleAdapter<P = Record<string, any>, S = Record<string, any>> extends DefaultAdapter<P, S> {
  19. setDOMInRenderTree: (isInRenderTree: boolean) => void;
  20. setDOMHeight: (domHeight: number) => void;
  21. setVisible: (visible: boolean) => void;
  22. setIsTransitioning: (isTransitioning: boolean) => void
  23. }
  24. class CollapsibleFoundation extends BaseFoundation<CollapsibleAdapter<CollapsibleFoundationProps, CollapsibleFoundationState>, CollapsibleFoundationProps, CollapsibleFoundationState> {
  25. constructor(adapter: CollapsibleAdapter<CollapsibleFoundationProps, CollapsibleFoundationState>) {
  26. super({
  27. ...adapter
  28. });
  29. }
  30. updateDOMInRenderTree = (isInRenderTree) => {
  31. this._adapter.setDOMInRenderTree(isInRenderTree);
  32. }
  33. updateDOMHeight = (domHeight: number) => {
  34. this._adapter.setDOMHeight(domHeight);
  35. }
  36. updateVisible = (visible: boolean) => {
  37. this._adapter.setVisible(visible);
  38. }
  39. updateIsTransitioning = (isTransitioning: boolean) => {
  40. this._adapter.setIsTransitioning(isTransitioning);
  41. }
  42. }
  43. export default CollapsibleFoundation;