]> Untitled Git - lemmy.git/commitdiff
ui.components.communities: deprecate componentWillReceiveProps
authorderek <wwsage@gmail.com>
Mon, 13 Jul 2020 03:17:56 +0000 (23:17 -0400)
committerderek <wwsage@gmail.com>
Tue, 14 Jul 2020 00:14:01 +0000 (20:14 -0400)
ui/src/components/communities.tsx

index 10a3ab803e4e01e2e7e9fb73af45ee62c379e95d..71ea878de50c1dfb6c0266c818db5f7dc8826683 100644 (file)
@@ -13,7 +13,7 @@ import {
   GetSiteResponse,
 } from '../interfaces';
 import { WebSocketService } from '../services';
-import { wsJsonToRes, toast } from '../utils';
+import { wsJsonToRes, toast, getPageFromProps } from '../utils';
 import { CommunityLink } from './community-link';
 import { i18n } from '../i18next';
 
@@ -32,7 +32,7 @@ export class Communities extends Component<any, CommunitiesState> {
   private emptyState: CommunitiesState = {
     communities: [],
     loading: true,
-    page: this.getPageFromProps(this.props),
+    page: getPageFromProps(this.props),
   };
 
   constructor(props: any, context: any) {
@@ -50,19 +50,19 @@ export class Communities extends Component<any, CommunitiesState> {
     WebSocketService.Instance.getSite();
   }
 
-  getPageFromProps(props: any): number {
-    return props.match.params.page ? Number(props.match.params.page) : 1;
-  }
-
   componentWillUnmount() {
     this.subscription.unsubscribe();
   }
 
-  // Necessary for back button for some reason
-  componentWillReceiveProps(nextProps: any) {
-    if (nextProps.history.action == 'POP') {
-      this.state = this.emptyState;
-      this.state.page = this.getPageFromProps(nextProps);
+  static getDerivedStateFromProps(props) {
+    return {
+      page: getPageFromProps(props),
+    };
+  }
+
+  componentDidUpdate(_, lastState) {
+    if (lastState.page !== this.state.page) {
+      this.setState({ loading: true });
       this.refetch();
     }
   }
@@ -172,22 +172,17 @@ export class Communities extends Component<any, CommunitiesState> {
     );
   }
 
-  updateUrl() {
-    this.props.history.push(`/communities/page/${this.state.page}`);
+  updateUrl(paramUpdates: { page: number }) {
+    const page = paramUpdates.page || this.state.page;
+    this.props.history.push(`/communities/page/${page}`);
   }
 
   nextPage(i: Communities) {
-    i.state.page++;
-    i.setState(i.state);
-    i.updateUrl();
-    i.refetch();
+    i.updateUrl({ page: i.state.page + 1 });
   }
 
   prevPage(i: Communities) {
-    i.state.page--;
-    i.setState(i.state);
-    i.updateUrl();
-    i.refetch();
+    i.updateUrl({ page: i.state.page - 1 });
   }
 
   handleUnsubscribe(communityId: number) {