modalStore.tsx 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. import {createStore, StoreDefinition} from 'reflux';
  2. import {ModalOptions, ModalRenderProps} from 'sentry/actionCreators/modal';
  3. import {makeSafeRefluxStore} from 'sentry/utils/makeSafeRefluxStore';
  4. type Renderer = (renderProps: ModalRenderProps) => React.ReactNode;
  5. type ModalStoreState = {
  6. options: ModalOptions;
  7. renderer: Renderer | null;
  8. };
  9. interface ModalStoreDefinition extends StoreDefinition {
  10. closeModal(): void;
  11. get(): ModalStoreState;
  12. init(): void;
  13. openModal(renderer: Renderer, options: ModalOptions): void;
  14. reset(): void;
  15. }
  16. const storeConfig: ModalStoreDefinition = {
  17. unsubscribeListeners: [],
  18. init() {
  19. this.reset();
  20. },
  21. get() {
  22. return this.state;
  23. },
  24. reset() {
  25. this.state = {
  26. renderer: null,
  27. options: {},
  28. } as ModalStoreState;
  29. },
  30. closeModal() {
  31. this.reset();
  32. this.trigger(this.state);
  33. },
  34. openModal(renderer: Renderer, options: ModalOptions) {
  35. this.state = {renderer, options};
  36. this.trigger(this.state);
  37. },
  38. };
  39. const ModalStore = createStore(makeSafeRefluxStore(storeConfig));
  40. export default ModalStore;