sentryAppComponentsStore.tsx 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import Reflux from 'reflux';
  2. import SentryAppComponentsActions from 'sentry/actions/sentryAppComponentActions';
  3. import {SentryAppComponent} from 'sentry/types';
  4. type SentryAppComponentsStoreInterface = {
  5. onLoadComponents: (items: SentryAppComponent[]) => void;
  6. getComponentByType: (type: string | undefined) => SentryAppComponent[];
  7. getAll: () => SentryAppComponent[];
  8. getInitialState: () => SentryAppComponent[];
  9. get: (uuid: string) => SentryAppComponent | undefined;
  10. };
  11. const storeConfig: Reflux.StoreDefinition & SentryAppComponentsStoreInterface = {
  12. init() {
  13. this.items = [];
  14. this.listenTo(SentryAppComponentsActions.loadComponents, this.onLoadComponents);
  15. },
  16. getInitialState() {
  17. return this.items;
  18. },
  19. onLoadComponents(items: SentryAppComponent[]) {
  20. this.items = items;
  21. this.trigger(items);
  22. },
  23. get(uuid: string) {
  24. const items: SentryAppComponent[] = this.items;
  25. return items.find(item => item.uuid === uuid);
  26. },
  27. getAll() {
  28. return this.items;
  29. },
  30. getComponentByType(type: string | undefined) {
  31. if (!type) {
  32. return this.getAll();
  33. }
  34. const items: SentryAppComponent[] = this.items;
  35. return items.filter(item => item.type === type);
  36. },
  37. };
  38. const SentryAppComponentsStore = Reflux.createStore(storeConfig) as Reflux.Store &
  39. SentryAppComponentsStoreInterface;
  40. export default SentryAppComponentsStore;