sentryAppComponentsStore.tsx 1.2 KB

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