foundation.ts 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. import BaseFoundation, { DefaultAdapter } from '../base/foundation';
  2. export interface SpinAdapter extends Partial<DefaultAdapter> {
  3. setLoading: (val: boolean) => void;
  4. }
  5. class SpinFoundation extends BaseFoundation<SpinAdapter> {
  6. _timer: ReturnType<typeof setTimeout>;
  7. static get spinDefaultAdapter(): SpinAdapter {
  8. return {
  9. getProp: () => undefined,
  10. setLoading: val => undefined
  11. };
  12. }
  13. constructor(adapter: SpinAdapter) {
  14. super({ ...SpinFoundation.spinDefaultAdapter, ...adapter });
  15. }
  16. updateLoadingIfNeedDelay() {
  17. const { spinning: propsSpinning, delay: propsDelay } = this._adapter.getProps();
  18. const { delay } = this._adapter.getStates();
  19. if (delay) {
  20. const self = this;
  21. this._timer = setTimeout(() => {
  22. self._adapter.setState({
  23. loading: propsSpinning,
  24. delay: 0
  25. });
  26. }, propsDelay);
  27. }
  28. }
  29. destroy() {
  30. if (this._timer) {
  31. clearTimeout(this._timer);
  32. this._timer = null;
  33. }
  34. }
  35. }
  36. export default SpinFoundation;