123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- import type {StoreDefinition} from 'reflux';
- import {createStore} from 'reflux';
- import type {Repository} from 'sentry/types/integrations';
- type State = {
- orgSlug?: string;
- repositories?: Repository[];
- repositoriesError?: Error;
- repositoriesLoading?: boolean;
- };
- interface RepositoryStoreDefinition extends StoreDefinition {
- get(): State;
- init(): void;
- loadRepositories(orgSlug: string): void;
- loadRepositoriesError(error: Error): void;
- loadRepositoriesSuccess(data: Repository[]): void;
- resetRepositories(): void;
- state: State;
- }
- const storeConfig: RepositoryStoreDefinition = {
- state: {
- orgSlug: undefined,
- repositories: undefined,
- repositoriesLoading: undefined,
- repositoriesError: undefined,
- },
- init() {
- // XXX: Do not use `this.listenTo` in this store. We avoid usage of reflux
- // listeners due to their leaky nature in tests.
- this.resetRepositories();
- },
- resetRepositories() {
- this.state = {
- orgSlug: undefined,
- repositories: undefined,
- repositoriesLoading: undefined,
- repositoriesError: undefined,
- };
- this.trigger(this.state);
- },
- loadRepositories(orgSlug: string) {
- this.state = {
- orgSlug,
- repositories: orgSlug === this.state.orgSlug ? this.state.repositories : undefined,
- repositoriesLoading: true,
- repositoriesError: undefined,
- };
- this.trigger(this.state);
- },
- loadRepositoriesError(err: Error) {
- this.state = {
- ...this.state,
- repositories: undefined,
- repositoriesLoading: false,
- repositoriesError: err,
- };
- this.trigger(this.state);
- },
- loadRepositoriesSuccess(data: Repository[]) {
- this.state = {
- ...this.state,
- repositories: data,
- repositoriesLoading: false,
- repositoriesError: undefined,
- };
- this.trigger(this.state);
- },
- get() {
- return {...this.state};
- },
- };
- const RepositoryStore = createStore(storeConfig);
- export default RepositoryStore;
|