homeflowjs 0.13.24 → 0.13.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -9,3 +9,8 @@ export const setBranchesSearch = (payload) => ({
9
9
  type: BranchesActionTypes.SET_BRANCHES_SEARCH,
10
10
  payload,
11
11
  });
12
+
13
+ export const setBranchesPagination = (payload) => ({
14
+ type: BranchesActionTypes.SET_BRANCHES_PAGINATION,
15
+ payload,
16
+ });
@@ -1,6 +1,7 @@
1
1
  const BranchesActionTypes = {
2
2
  SET_BRANCHES: 'SET_BRANCHES',
3
3
  SET_BRANCHES_SEARCH: 'SET_BRANCHES_SEARCH',
4
+ SET_BRANCHES_PAGINATION: 'SET_BRANCHES_PAGINATION',
4
5
  };
5
6
 
6
7
  export default BranchesActionTypes;
@@ -14,8 +14,11 @@ import { fetchUser } from '../actions/user.actions';
14
14
  import {
15
15
  setProperties, setPagination, setProperty, setPropertyLinksAsync,
16
16
  } from '../actions/properties.actions';
17
- import { setSearch, setInitialSearch, setSearchField, setPlace } from '../actions/search.actions';
17
+ import {
18
+ setSearch, setInitialSearch, setSearchField, setPlace,
19
+ } from '../actions/search.actions';
18
20
  import { setArticles } from '../actions/articles.actions';
21
+ import { setBranches, setBranchesPagination } from '../actions/branches.actions';
19
22
  import parseFragment from '../search/property-search/parse-fragment';
20
23
  import { isEmpty } from '../utils';
21
24
 
@@ -105,6 +108,11 @@ const hfInitialize = () => {
105
108
  store.dispatch(setArticles(Homeflow.get('articles')));
106
109
  }
107
110
 
111
+ if (pageRoute === 'branches#index') {
112
+ store.dispatch(setBranches(Homeflow.get('branches')));
113
+ store.dispatch(setBranchesPagination(Homeflow.get('branchesPagination')));
114
+ }
115
+
108
116
  // all property results routes
109
117
  if (pageRoute === 'properties#index'
110
118
  || pageRoute === 'counties#show'
package/hooks/index.js CHANGED
@@ -3,6 +3,7 @@ import useGeolocate from './use-geolocate';
3
3
  import useOutsideClick from './use-outside-click';
4
4
  import { useOnScreen } from './use-on-screen';
5
5
  import usePropertyInfiniteScroll from './use-property-inifinite-scroll';
6
+ import useLoadBranches from './use-load-branches';
6
7
 
7
8
  export {
8
9
  useDefaultSort,
@@ -10,4 +11,5 @@ export {
10
11
  useOutsideClick,
11
12
  useOnScreen,
12
13
  usePropertyInfiniteScroll,
14
+ useLoadBranches,
13
15
  };
@@ -0,0 +1,36 @@
1
+ /*
2
+ * This hook renders a handler to load the next page of branch results
3
+ *
4
+ * The loadBranches handler takes in an optional query string to pass to the branch search
5
+ * which loads branches with a particular filter
6
+ *
7
+ * e.g.
8
+ * loadBranches('&channel=sales')
9
+ */
10
+ import { useState } from 'react';
11
+ import { useSelector, useDispatch } from 'react-redux';
12
+ import { setBranches, setBranchesPagination } from '../actions/branches.actions';
13
+
14
+ const useLoadBranches = () => {
15
+ const [loading, setLoading] = useState(false);
16
+ const branches = useSelector((state) => state.branches.branches);
17
+ const pagination = useSelector((state) => state.branches.pagination);
18
+ const dispatch = useDispatch();
19
+
20
+ const loadBranches = (query = '') => {
21
+ if (pagination.hasNextPage) {
22
+ setLoading(true);
23
+ fetch(`/branches.ljson?page=${pagination.currentPage + 1}${query}`)
24
+ .then((response) => response.json())
25
+ .then((json) => {
26
+ dispatch(setBranchesPagination(json.pagination));
27
+ dispatch(setBranches([...branches, ...json.branches]));
28
+ setLoading(false);
29
+ });
30
+ }
31
+ };
32
+
33
+ return { loadBranches, loadingBranches: loading, hasNextPage: pagination.hasNextPage };
34
+ };
35
+
36
+ export default useLoadBranches;
@@ -0,0 +1,31 @@
1
+ import { renderHook, act } from '@testing-library/react-hooks';
2
+ import * as redux from 'react-redux';
3
+ import useLoadBranches from './use-load-branches';
4
+ import store from '../store';
5
+ import { TestProvider } from '../reducers/test-provider';
6
+ import { setBranchesPagination } from '../actions/branches.actions';
7
+
8
+ const INITIAL_BRANCHES_PAGINATION = {
9
+ currentPage: 1,
10
+ hasPrevPage: false,
11
+ totalCount: 100,
12
+ hasNextPage: true,
13
+ };
14
+
15
+ beforeAll(() => {
16
+ act(() => {
17
+ store.dispatch(setBranchesPagination(INITIAL_BRANCHES_PAGINATION))
18
+ });
19
+ });
20
+
21
+ describe('useLoadBranches', () => {
22
+ const renderedHook = renderHook(useLoadBranches, { wrapper: TestProvider });
23
+
24
+ it('renders a loadBranches function, loadingBranches boolean and hasNextPage boolean', () => {
25
+ const { loadBranches, loadingBranches, hasNextPage } = renderedHook.result.current;
26
+
27
+ expect(typeof loadBranches).toBe('function');
28
+ expect(typeof loadingBranches).toBe('boolean');
29
+ expect(typeof hasNextPage).toBe('boolean');
30
+ });
31
+ });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "homeflowjs",
3
- "version": "0.13.24",
3
+ "version": "0.13.26",
4
4
  "sideEffects": [
5
5
  "modal/**/*",
6
6
  "user/default-profile/**/*",
@@ -93,6 +93,13 @@ export default class GeonamesMap extends DraggableMap {
93
93
  this.map.on('dragend', () => {
94
94
  store.dispatch(setPlace(null))
95
95
  store.dispatch(setSearchField({ q: '' }));
96
+
97
+ // Remove the suggested locations links as they no longer represent the
98
+ // initially searched location
99
+ const locationLinksElement = document.querySelector('.js-suggested-destinations');
100
+ if (locationLinksElement && Homeflow.get('hide_location_links_on_drag')) {
101
+ locationLinksElement.style.display = 'none';
102
+ }
96
103
  });
97
104
 
98
105
  /**
@@ -3,6 +3,7 @@ import BranchesActionTypes from '../actions/branches.types';
3
3
  const INITIAL_STATE = {
4
4
  branches: [],
5
5
  branchesSearch: '',
6
+ pagination: {},
6
7
  };
7
8
 
8
9
  const branchesReducer = (state = INITIAL_STATE, action) => {
@@ -17,6 +18,11 @@ const branchesReducer = (state = INITIAL_STATE, action) => {
17
18
  ...state,
18
19
  branchesSearch: action.payload,
19
20
  };
21
+ case BranchesActionTypes.SET_BRANCHES_PAGINATION:
22
+ return {
23
+ ...state,
24
+ pagination: action.payload,
25
+ };
20
26
  default: return state;
21
27
  }
22
28
  };
@@ -0,0 +1,7 @@
1
+ import React from 'react';
2
+ import { Provider } from 'react-redux';
3
+ import store from '../store';
4
+
5
+ export function TestProvider({ children }) {
6
+ return <Provider store={store}>{children}</Provider>;
7
+ }