metricsMetaStore.tsx 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import {createStore} from 'reflux';
  2. import {MetricsMeta, MetricsMetaCollection} from 'sentry/types';
  3. import {makeSafeRefluxStore} from 'sentry/utils/makeSafeRefluxStore';
  4. import {CommonStoreDefinition} from './types';
  5. type State = {
  6. /**
  7. * This is state for when tags fetched from the API are loaded
  8. */
  9. loaded: boolean;
  10. metricsMeta: MetricsMetaCollection;
  11. };
  12. interface MetricsMetaStoreDefinition extends CommonStoreDefinition<State> {
  13. loadSuccess(data: MetricsMeta[]): void;
  14. reset(): void;
  15. }
  16. const storeConfig: MetricsMetaStoreDefinition = {
  17. unsubscribeListeners: [],
  18. state: {
  19. metricsMeta: {},
  20. loaded: false,
  21. },
  22. reset() {
  23. this.state = {
  24. metricsMeta: {},
  25. loaded: false,
  26. };
  27. this.trigger(this.state);
  28. },
  29. getState() {
  30. return this.state;
  31. },
  32. loadSuccess(data) {
  33. const newFields = data.reduce<MetricsMetaCollection>((acc, field) => {
  34. acc[field.name] = {
  35. ...field,
  36. };
  37. return acc;
  38. }, {});
  39. this.state = {
  40. metricsMeta: {...this.state.metricsMeta, ...newFields},
  41. loaded: true,
  42. };
  43. this.trigger(this.state);
  44. },
  45. };
  46. const MetricsMetaStore = createStore(makeSafeRefluxStore(storeConfig));
  47. export default MetricsMetaStore;