Browse Source

ref(js): Remove RepositoryActions (#38112)

Evan Purkhiser 2 years ago
parent
commit
752d92d7d9

+ 3 - 4
static/app/actionCreators/repositories.tsx

@@ -1,6 +1,5 @@
 import * as Sentry from '@sentry/react';
 
-import RepositoryActions from 'sentry/actions/repositoryActions';
 import {Client} from 'sentry/api';
 import RepositoryStore from 'sentry/stores/repositoryStore';
 import {Repository} from 'sentry/types';
@@ -18,17 +17,17 @@ export function getRepositories(api: Client, params: ParamsGet) {
   // repo to be fired before the loading state is updated in store.
   // This hack short-circuits that and update the state immediately.
   RepositoryStore.state.repositoriesLoading = true;
-  RepositoryActions.loadRepositories(orgSlug);
+  RepositoryStore.loadRepositories(orgSlug);
 
   return api
     .requestPromise(path, {
       method: 'GET',
     })
     .then((res: Repository[]) => {
-      RepositoryActions.loadRepositoriesSuccess(res);
+      RepositoryStore.loadRepositoriesSuccess(res);
     })
     .catch(err => {
-      RepositoryActions.loadRepositoriesError(err);
+      RepositoryStore.loadRepositoriesError(err);
       Sentry.withScope(scope => {
         scope.setLevel('warning');
         scope.setFingerprint(['getRepositories-action-creator']);

+ 0 - 10
static/app/actions/repositoryActions.tsx

@@ -1,10 +0,0 @@
-import {createActions} from 'reflux';
-
-const RepositoryActions = createActions([
-  'resetRepositories',
-  'loadRepositories',
-  'loadRepositoriesError',
-  'loadRepositoriesSuccess',
-]);
-
-export default RepositoryActions;

+ 1 - 4
static/app/stores/repositoryStore.tsx

@@ -1,6 +1,5 @@
 import {createStore, StoreDefinition} from 'reflux';
 
-import RepoActions from 'sentry/actions/repositoryActions';
 import {Repository} from 'sentry/types';
 import {makeSafeRefluxStore} from 'sentry/utils/makeSafeRefluxStore';
 
@@ -11,11 +10,10 @@ interface RepositoryStoreDefinition extends StoreDefinition {
     repositoriesError?: Error;
     repositoriesLoading?: boolean;
   };
-
   loadRepositories(orgSlug: string): void;
-
   loadRepositoriesError(error: Error): void;
   loadRepositoriesSuccess(data: Repository[]): void;
+  resetRepositories(): void;
   state: {
     orgSlug?: string;
     repositories?: Repository[];
@@ -25,7 +23,6 @@ interface RepositoryStoreDefinition extends StoreDefinition {
 }
 
 const storeConfig: RepositoryStoreDefinition = {
-  listenables: RepoActions,
   state: {
     orgSlug: undefined,
     repositories: undefined,

+ 9 - 8
static/app/utils/withRepositories.tsx

@@ -1,7 +1,6 @@
 import {Component} from 'react';
 
 import {getRepositories} from 'sentry/actionCreators/repositories';
-import RepositoryActions from 'sentry/actions/repositoryActions';
 import {Client} from 'sentry/api';
 import RepositoryStore from 'sentry/stores/repositoryStore';
 import {Organization, Repository} from 'sentry/types';
@@ -33,21 +32,23 @@ function withRepositories<P extends DependentProps>(
     constructor(props: P & DependentProps, context: any) {
       super(props, context);
 
-      const {organization} = this.props;
-      const orgSlug = organization.slug;
       const repoData = RepositoryStore.get();
 
-      if (repoData.orgSlug !== orgSlug) {
-        RepositoryActions.resetRepositories();
-      }
-
       this.state =
-        repoData.orgSlug === orgSlug
+        repoData.orgSlug === props.organization.slug
           ? {...INITIAL_STATE, ...repoData}
           : {...INITIAL_STATE};
     }
 
     componentDidMount() {
+      const {organization} = this.props;
+      const orgSlug = organization.slug;
+      const repoData = RepositoryStore.get();
+
+      if (repoData.orgSlug !== orgSlug) {
+        RepositoryStore.resetRepositories();
+      }
+
       // XXX(leedongwei): Do not move this function call unless you modify the
       // unit test named "prevents repeated calls"
       this.fetchRepositories();

+ 3 - 3
static/app/views/organizationIntegrations/integrationRepos.tsx

@@ -3,7 +3,6 @@ import styled from '@emotion/styled';
 import debounce from 'lodash/debounce';
 
 import {addRepository, migrateRepository} from 'sentry/actionCreators/integrations';
-import RepositoryActions from 'sentry/actions/repositoryActions';
 import Alert from 'sentry/components/alert';
 import AsyncComponent from 'sentry/components/asyncComponent';
 import Button from 'sentry/components/button';
@@ -15,6 +14,7 @@ import {Panel, PanelBody, PanelHeader} from 'sentry/components/panels';
 import RepositoryRow from 'sentry/components/repositoryRow';
 import {IconCommit} from 'sentry/icons';
 import {t} from 'sentry/locale';
+import RepositoryStore from 'sentry/stores/repositoryStore';
 import space from 'sentry/styles/space';
 import {Integration, Organization, Repository} from 'sentry/types';
 import withOrganization from 'sentry/utils/withOrganization';
@@ -74,7 +74,7 @@ class IntegrationRepos extends AsyncComponent<Props, State> {
       }
     });
     this.setState({itemList});
-    RepositoryActions.resetRepositories();
+    RepositoryStore.resetRepositories();
   };
 
   debouncedSearchRepositoriesRequest = debounce(
@@ -126,7 +126,7 @@ class IntegrationRepos extends AsyncComponent<Props, State> {
     promise.then(
       (repo: Repository) => {
         this.setState({adding: false, itemList: itemList.concat(repo)});
-        RepositoryActions.resetRepositories();
+        RepositoryStore.resetRepositories();
       },
       () => this.setState({adding: false})
     );

+ 6 - 7
tests/js/spec/actionCreators/repositories.spec.jsx

@@ -1,5 +1,4 @@
 import {getRepositories} from 'sentry/actionCreators/repositories';
-import RepositoryActions from 'sentry/actions/repositoryActions';
 import RepositoryStore from 'sentry/stores/repositoryStore';
 
 describe('RepositoryActionCreator', function () {
@@ -20,8 +19,8 @@ describe('RepositoryActionCreator', function () {
     RepositoryStore.resetRepositories();
 
     jest.restoreAllMocks();
-    jest.spyOn(RepositoryActions, 'loadRepositories');
-    jest.spyOn(RepositoryActions, 'loadRepositoriesSuccess');
+    jest.spyOn(RepositoryStore, 'loadRepositories');
+    jest.spyOn(RepositoryStore, 'loadRepositoriesSuccess');
 
     /**
      * XXX(leedongwei): We would want to ensure that Store methods are not
@@ -40,14 +39,14 @@ describe('RepositoryActionCreator', function () {
    */
   it('fetches a Repository and emits actions', async () => {
     getRepositories(api, {orgSlug}); // Fire Action.loadRepositories
-    expect(RepositoryActions.loadRepositories).toHaveBeenCalledWith(orgSlug);
-    expect(RepositoryActions.loadRepositoriesSuccess).not.toHaveBeenCalled();
+    expect(RepositoryStore.loadRepositories).toHaveBeenCalledWith(orgSlug);
+    expect(RepositoryStore.loadRepositoriesSuccess).not.toHaveBeenCalled();
 
     await tick(); // Run Store.loadRepositories and fire Action.loadRepositoriesSuccess
     await tick(); // Run Store.loadRepositoriesSuccess
 
     expect(mockResponse).toHaveBeenCalledWith(repoUrl, expect.anything());
-    expect(RepositoryActions.loadRepositoriesSuccess).toHaveBeenCalledWith(mockData);
+    expect(RepositoryStore.loadRepositoriesSuccess).toHaveBeenCalledWith(mockData);
 
     expect(RepositoryStore.state.orgSlug).toEqual(orgSlug);
     expect(RepositoryStore.state.repositories).toEqual(mockData);
@@ -58,7 +57,7 @@ describe('RepositoryActionCreator', function () {
     expect(RepositoryStore.state.repositoriesLoading).toEqual(undefined);
 
     getRepositories(api, {orgSlug}); // Fire Action.loadRepositories
-    expect(RepositoryActions.loadRepositories).toHaveBeenCalled();
+    expect(RepositoryStore.loadRepositories).toHaveBeenCalled();
     // expect(RepositoryStore.loadRepositories).not.toHaveBeenCalled();
     expect(RepositoryStore.state.repositoriesLoading).toEqual(true); // Short-circuit
   });

+ 4 - 4
tests/js/spec/views/organizationIntegrations/integrationRepos.spec.jsx

@@ -1,7 +1,7 @@
 import {mountWithTheme} from 'sentry-test/enzyme';
 
-import RepositoryActions from 'sentry/actions/repositoryActions';
 import {Client} from 'sentry/api';
+import RepositoryStore from 'sentry/stores/repositoryStore';
 import IntegrationRepos from 'sentry/views/organizationIntegrations/integrationRepos';
 
 describe('IntegrationRepos', function () {
@@ -10,7 +10,7 @@ describe('IntegrationRepos', function () {
 
   beforeEach(() => {
     Client.clearMockResponses();
-    jest.spyOn(RepositoryActions, 'resetRepositories');
+    jest.spyOn(RepositoryStore, 'resetRepositories');
   });
 
   afterEach(() => {
@@ -77,7 +77,7 @@ describe('IntegrationRepos', function () {
       expect(name).toHaveLength(1);
       expect(name.text()).toEqual('example/repo-name');
 
-      expect(RepositoryActions.resetRepositories).toHaveBeenCalled();
+      expect(RepositoryStore.resetRepositories).toHaveBeenCalled();
     });
 
     it('handles failure during save', function () {
@@ -150,7 +150,7 @@ describe('IntegrationRepos', function () {
           data: {integrationId: '1'},
         })
       );
-      expect(RepositoryActions.resetRepositories).toHaveBeenCalled();
+      expect(RepositoryStore.resetRepositories).toHaveBeenCalled();
     });
 
     it('uses externalSlug not name for comparison', () => {