From 01eff1ef3e3ceceb8eb43c8af758d82dc86f1a9c Mon Sep 17 00:00:00 2001 From: Vesa Luusua Date: Mon, 4 Dec 2017 19:41:37 +0200 Subject: [PATCH] Fetch messages fix (maximum page size is 100 on API) --- .../OrderDetailsPanel/OrderDetailsPanel.js | 8 +- .../OrderDetailsPanel.test.js | 2 + .../SaleDetailsPanel/SaleDetailsPanel.js | 8 +- .../SaleDetailsPanel/SaleDetailsPanel.test.js | 2 + src/containers/OrderPage/OrderPage.duck.js | 82 ++++++++++--------- src/containers/OrderPage/OrderPage.js | 15 ++-- src/containers/OrderPage/OrderPage.test.js | 2 + .../__snapshots__/OrderPage.test.js.snap | 3 +- src/containers/SalePage/SalePage.duck.js | 75 +++++++++-------- src/containers/SalePage/SalePage.js | 15 ++-- src/containers/SalePage/SalePage.test.js | 2 + .../__snapshots__/SalePage.test.js.snap | 3 +- 12 files changed, 127 insertions(+), 90 deletions(-) diff --git a/src/components/OrderDetailsPanel/OrderDetailsPanel.js b/src/components/OrderDetailsPanel/OrderDetailsPanel.js index d5eea321..47f0bf4b 100644 --- a/src/components/OrderDetailsPanel/OrderDetailsPanel.js +++ b/src/components/OrderDetailsPanel/OrderDetailsPanel.js @@ -136,7 +136,8 @@ export class OrderDetailsPanelComponent extends Component { className, currentUser, transaction, - totalMessages, + totalMessagePages, + oldestMessagePageFetched, messages, initialMessageFailed, fetchMessagesInProgress, @@ -222,7 +223,7 @@ export class OrderDetailsPanelComponent extends Component { const txTransitions = currentTransaction.attributes.transitions ? currentTransaction.attributes.transitions : []; - const hasOlderMessages = totalMessages > messages.length; + const hasOlderMessages = totalMessagePages > oldestMessagePageFetched; const handleShowOlderMessages = () => { onShowMoreMessages(currentTransaction.id); }; @@ -413,7 +414,8 @@ OrderDetailsPanelComponent.propTypes = { currentUser: propTypes.currentUser, transaction: propTypes.transaction.isRequired, - totalMessages: number.isRequired, + totalMessagePages: number.isRequired, + oldestMessagePageFetched: number.isRequired, messages: arrayOf(propTypes.message).isRequired, initialMessageFailed: bool.isRequired, fetchMessagesInProgress: bool.isRequired, diff --git a/src/components/OrderDetailsPanel/OrderDetailsPanel.test.js b/src/components/OrderDetailsPanel/OrderDetailsPanel.test.js index df68e3c5..54f7f87d 100644 --- a/src/components/OrderDetailsPanel/OrderDetailsPanel.test.js +++ b/src/components/OrderDetailsPanel/OrderDetailsPanel.test.js @@ -71,6 +71,8 @@ describe('OrderDetailsPanel', () => { intl: fakeIntl, currentUser: createCurrentUser('user2'), totalMessages: 2, + totalMessagePages: 1, + oldestMessagePageFetched: 1, messages: [ createMessage('msg1', {}, { sender: createUser('user1') }), createMessage('msg2', {}, { sender: createUser('user2') }), diff --git a/src/components/SaleDetailsPanel/SaleDetailsPanel.js b/src/components/SaleDetailsPanel/SaleDetailsPanel.js index 5e8f4c3f..75cf8454 100644 --- a/src/components/SaleDetailsPanel/SaleDetailsPanel.js +++ b/src/components/SaleDetailsPanel/SaleDetailsPanel.js @@ -135,7 +135,8 @@ export class SaleDetailsPanelComponent extends Component { declineSaleError, fetchMessagesInProgress, fetchMessagesError, - totalMessages, + totalMessagePages, + oldestMessagePageFetched, messages, sendMessageInProgress, sendMessageError, @@ -206,7 +207,7 @@ export class SaleDetailsPanelComponent extends Component { const txTransitions = currentTransaction.attributes.transitions ? currentTransaction.attributes.transitions : []; - const hasOlderMessages = totalMessages > messages.length; + const hasOlderMessages = totalMessagePages > oldestMessagePageFetched; const handleShowOlderMessages = () => { onShowMoreMessages(currentTransaction.id); }; @@ -436,7 +437,8 @@ SaleDetailsPanelComponent.propTypes = { declineSaleError: propTypes.error, fetchMessagesInProgress: bool.isRequired, fetchMessagesError: propTypes.error, - totalMessages: number.isRequired, + totalMessagePages: number.isRequired, + oldestMessagePageFetched: number.isRequired, messages: arrayOf(propTypes.message).isRequired, sendMessageInProgress: bool.isRequired, sendMessageError: propTypes.error, diff --git a/src/components/SaleDetailsPanel/SaleDetailsPanel.test.js b/src/components/SaleDetailsPanel/SaleDetailsPanel.test.js index 1f1fc568..aa4384ea 100644 --- a/src/components/SaleDetailsPanel/SaleDetailsPanel.test.js +++ b/src/components/SaleDetailsPanel/SaleDetailsPanel.test.js @@ -74,6 +74,8 @@ describe('SaleDetailsPanel', () => { declineInProgress: false, currentUser: createCurrentUser('user1'), totalMessages: 2, + totalMessagePages: 1, + oldestMessagePageFetched: 1, messages: [ createMessage('msg1', {}, { sender: createUser('user1') }), createMessage('msg2', {}, { sender: createUser('user2') }), diff --git a/src/containers/OrderPage/OrderPage.duck.js b/src/containers/OrderPage/OrderPage.duck.js index d60b0ede..8b927114 100644 --- a/src/containers/OrderPage/OrderPage.duck.js +++ b/src/containers/OrderPage/OrderPage.duck.js @@ -36,6 +36,8 @@ const initialState = { fetchMessagesInProgress: false, fetchMessagesError: null, totalMessages: 0, + totalMessagePages: 0, + oldestMessagePageFetched: 0, messages: [], messageSendingFailedToTransaction: null, sendMessageInProgress: false, @@ -44,6 +46,15 @@ const initialState = { sendReviewError: null, }; +// Merge entity arrays using ids, so that conflicting items in newer array (b) overwrite old values (a). +// const a = [{ id: { uuid: 1 } }, { id: { uuid: 3 } }]; +// const b = [{ id: : { uuid: 2 } }, { id: : { uuid: 1 } }]; +// mergeEntityArrays(a, b) +// => [{ id: { uuid: 3 } }, { id: : { uuid: 2 } }, { id: : { uuid: 1 } }] +const mergeEntityArrays = (a, b) => { + return a.filter(aEntity => !b.find(bEntity => aEntity.id.uuid === bEntity.id.uuid)).concat(b); +}; + export default function checkoutPageReducer(state = initialState, action = {}) { const { type, payload } = action; switch (type) { @@ -62,13 +73,20 @@ export default function checkoutPageReducer(state = initialState, action = {}) { case FETCH_MESSAGES_REQUEST: return { ...state, fetchMessagesInProgress: true, fetchMessagesError: null }; - case FETCH_MESSAGES_SUCCESS: + case FETCH_MESSAGES_SUCCESS: { + const oldestMessagePageFetched = + state.oldestMessagePageFetched > payload.page + ? state.oldestMessagePageFetched + : payload.page; return { ...state, fetchMessagesInProgress: false, - messages: payload.messages, + messages: mergeEntityArrays(state.messages, payload.messages), totalMessages: payload.totalItems, + totalMessagePages: payload.totalPages, + oldestMessagePageFetched, }; + } case FETCH_MESSAGES_ERROR: return { ...state, fetchMessagesInProgress: false, fetchMessagesError: payload }; @@ -91,12 +109,6 @@ export default function checkoutPageReducer(state = initialState, action = {}) { } } -// ================ Selectors ================ // - -export const fetchedMessagesCount = state => { - return state.OrderPage.messages.length; -}; - // ================ Action creators ================ // export const setInitialValues = initialValues => ({ @@ -109,9 +121,9 @@ const fetchOrderSuccess = response => ({ type: FETCH_ORDER_SUCCESS, payload: res const fetchOrderError = e => ({ type: FETCH_ORDER_ERROR, error: true, payload: e }); const fetchMessagesRequest = () => ({ type: FETCH_MESSAGES_REQUEST }); -const fetchMessagesSuccess = (messages, totalItems) => ({ +const fetchMessagesSuccess = (messages, pagination) => ({ type: FETCH_MESSAGES_SUCCESS, - payload: { messages, totalItems }, + payload: { messages, ...pagination }, }); const fetchMessagesError = e => ({ type: FETCH_MESSAGES_ERROR, error: true, payload: e }); @@ -181,7 +193,8 @@ export const fetchOrder = id => (dispatch, getState, sdk) => { }); }; -const fetchMessages = (txId, paging) => (dispatch, getState, sdk) => { +const fetchMessages = (txId, page) => (dispatch, getState, sdk) => { + const paging = { page, per_page: MESSAGES_PAGE_SIZE }; dispatch(fetchMessagesRequest()); return sdk.messages @@ -189,9 +202,11 @@ const fetchMessages = (txId, paging) => (dispatch, getState, sdk) => { .then(response => { const entities = updatedEntities({}, response.data); const messageIds = response.data.data.map(d => d.id); - const denormalized = denormalisedEntities(entities, 'message', messageIds); + const denormalizedMessages = denormalisedEntities(entities, 'message', messageIds); + const { totalItems, totalPages, page: fetchedPage } = response.data.meta; + const pagination = { totalItems, totalPages, page: fetchedPage }; - dispatch(fetchMessagesSuccess(denormalized, response.data.meta.totalItems)); + dispatch(fetchMessagesSuccess(denormalizedMessages, pagination)); }) .catch(e => { dispatch(fetchMessagesError(storableError(e))); @@ -199,23 +214,15 @@ const fetchMessages = (txId, paging) => (dispatch, getState, sdk) => { }); }; -const fetchNLatestMessages = (txId, n) => (dispatch, getState, sdk) => { - const paging = { - page: 1, - per_page: n, - }; - return dispatch(fetchMessages(txId, paging)); -}; - export const fetchMoreMessages = txId => (dispatch, getState, sdk) => { - // This is clearly not the most sophisticated solution, but the - // default page size should be large enough that seeing the "Show - // older" button is very rare. - // - // This compromises on the network request size in favor of correct - // page offset handling that is quite tricky. - const messagesToFetch = fetchedMessagesCount(getState()) + MESSAGES_PAGE_SIZE; - return dispatch(fetchNLatestMessages(txId, messagesToFetch)); + const state = getState(); + const { oldestMessagePageFetched, totalMessagePages } = state.OrderPage; + const hasMoreOldMessages = totalMessagePages > oldestMessagePageFetched; + + // In case there're no more old pages left we default to fetching the current cursor position + const nextPage = hasMoreOldMessages ? oldestMessagePageFetched + 1 : oldestMessagePageFetched; + + return dispatch(fetchMessages(txId, nextPage)); }; export const sendMessage = (orderId, message) => (dispatch, getState, sdk) => { @@ -226,13 +233,11 @@ export const sendMessage = (orderId, message) => (dispatch, getState, sdk) => { .then(response => { const messageId = response.data.data.id; - // Try to keep the fetched messages in the store by fetching the - // sent message and as much messages as there were before. Some - // of the older ones might be lost if there are also other new - // messages received in addition to this message. - const messagesToFetch = fetchedMessagesCount(getState()) + 1; - - return dispatch(fetchNLatestMessages(orderId, messagesToFetch)) + // We fetch the first page again to add sent message to the page data + // and update possible incoming messages too. + // TODO if there're more than 100 incoming messages, + // this should loop through most recent pages instead of fetching just the first one. + return dispatch(fetchMessages(orderId, 1)) .then(() => { dispatch(sendMessageSuccess()); return messageId; @@ -322,8 +327,5 @@ export const loadData = params => dispatch => { dispatch(setInitialValues({ sendMessageError: null, sendReviewError: null })); // Order (i.e. transaction entity in API, but from buyers perspective) contains order details - return Promise.all([ - dispatch(fetchOrder(orderId)), - dispatch(fetchNLatestMessages(orderId, MESSAGES_PAGE_SIZE)), - ]); + return Promise.all([dispatch(fetchOrder(orderId)), dispatch(fetchMessages(orderId, 1))]); }; diff --git a/src/containers/OrderPage/OrderPage.js b/src/containers/OrderPage/OrderPage.js index 208efe61..faaa8b6c 100644 --- a/src/containers/OrderPage/OrderPage.js +++ b/src/containers/OrderPage/OrderPage.js @@ -38,7 +38,8 @@ export const OrderPageComponent = props => { fetchOrderError, fetchMessagesInProgress, fetchMessagesError, - totalMessages, + totalMessagePages, + oldestMessagePageFetched, messages, messageSendingFailedToTransaction, sendMessageInProgress, @@ -100,7 +101,8 @@ export const OrderPageComponent = props => { currentUser={currentUser} transaction={currentTransaction} fetchMessagesInProgress={fetchMessagesInProgress} - totalMessages={totalMessages} + totalMessagePages={totalMessagePages} + oldestMessagePageFetched={oldestMessagePageFetched} messages={messages} initialMessageFailed={initialMessageFailed} fetchMessagesError={fetchMessagesError} @@ -155,7 +157,8 @@ OrderPageComponent.propTypes = { fetchOrderError: propTypes.error, fetchMessagesInProgress: bool.isRequired, fetchMessagesError: propTypes.error, - totalMessages: number.isRequired, + totalMessagePages: number.isRequired, + oldestMessagePageFetched: number.isRequired, messages: array.isRequired, messageSendingFailedToTransaction: propTypes.uuid, sendMessageInProgress: bool.isRequired, @@ -177,7 +180,8 @@ const mapStateToProps = state => { transactionRef, fetchMessagesInProgress, fetchMessagesError, - totalMessages, + totalMessagePages, + oldestMessagePageFetched, messages, messageSendingFailedToTransaction, sendMessageInProgress, @@ -193,7 +197,8 @@ const mapStateToProps = state => { fetchOrderError, fetchMessagesInProgress, fetchMessagesError, - totalMessages, + totalMessagePages, + oldestMessagePageFetched, messages, messageSendingFailedToTransaction, sendMessageInProgress, diff --git a/src/containers/OrderPage/OrderPage.test.js b/src/containers/OrderPage/OrderPage.test.js index 2e01c27a..9d47be3b 100644 --- a/src/containers/OrderPage/OrderPage.test.js +++ b/src/containers/OrderPage/OrderPage.test.js @@ -34,6 +34,8 @@ describe('OrderPage', () => { currentUser: createCurrentUser('customer1'), totalMessages: 0, + totalMessagePages: 0, + oldestMessagePageFetched: 0, messages: [], fetchMessagesInProgress: false, sendMessageInProgress: false, diff --git a/src/containers/OrderPage/__snapshots__/OrderPage.test.js.snap b/src/containers/OrderPage/__snapshots__/OrderPage.test.js.snap index 981a359a..f5d05221 100644 --- a/src/containers/OrderPage/__snapshots__/OrderPage.test.js.snap +++ b/src/containers/OrderPage/__snapshots__/OrderPage.test.js.snap @@ -45,12 +45,13 @@ exports[`OrderPage matches snapshot 1`] = ` fetchMessagesInProgress={false} initialMessageFailed={false} messages={Array []} + oldestMessagePageFetched={0} onResetForm={[Function]} onSendMessage={[Function]} onShowMoreMessages={[Function]} sendMessageError={null} sendMessageInProgress={false} - totalMessages={0} + totalMessagePages={0} transaction={ Object { "attributes": Object { diff --git a/src/containers/SalePage/SalePage.duck.js b/src/containers/SalePage/SalePage.duck.js index ddfb0438..f61bc650 100644 --- a/src/containers/SalePage/SalePage.duck.js +++ b/src/containers/SalePage/SalePage.duck.js @@ -50,6 +50,8 @@ const initialState = { fetchMessagesInProgress: false, fetchMessagesError: null, totalMessages: 0, + totalMessagePages: 0, + oldestMessagePageFetched: 0, messages: [], sendMessageInProgress: false, sendMessageError: null, @@ -57,6 +59,15 @@ const initialState = { sendReviewError: null, }; +// Merge entity arrays using ids, so that conflicting items in newer array (b) overwrite old values (a). +// const a = [{ id: { uuid: 1 } }, { id: { uuid: 3 } }]; +// const b = [{ id: : { uuid: 2 } }, { id: : { uuid: 1 } }]; +// mergeEntityArrays(a, b) +// => [{ id: { uuid: 3 } }, { id: : { uuid: 2 } }, { id: : { uuid: 1 } }] +const mergeEntityArrays = (a, b) => { + return a.filter(aEntity => !b.find(bEntity => aEntity.id.uuid === bEntity.id.uuid)).concat(b); +}; + export default function checkoutPageReducer(state = initialState, action = {}) { const { type, payload } = action; switch (type) { @@ -89,13 +100,20 @@ export default function checkoutPageReducer(state = initialState, action = {}) { case FETCH_MESSAGES_REQUEST: return { ...state, fetchMessagesInProgress: true, fetchMessagesError: null }; - case FETCH_MESSAGES_SUCCESS: + case FETCH_MESSAGES_SUCCESS: { + const oldestMessagePageFetched = + state.oldestMessagePageFetched > payload.page + ? state.oldestMessagePageFetched + : payload.page; return { ...state, fetchMessagesInProgress: false, - messages: payload.messages, + messages: mergeEntityArrays(state.messages, payload.messages), totalMessages: payload.totalItems, + totalMessagePages: payload.totalPages, + oldestMessagePageFetched, }; + } case FETCH_MESSAGES_ERROR: return { ...state, fetchMessagesInProgress: false, fetchMessagesError: payload }; @@ -124,10 +142,6 @@ export const acceptOrDeclineInProgress = state => { return state.SalePage.acceptInProgress || state.SalePage.declineInProgress; }; -export const fetchedMessagesCount = state => { - return state.SalePage.messages.length; -}; - // ================ Action creators ================ // export const setInitialValues = initialValues => ({ type: SET_INITAL_VALUES, @@ -147,9 +161,9 @@ const declineSaleSuccess = () => ({ type: DECLINE_SALE_SUCCESS }); const declineSaleError = e => ({ type: DECLINE_SALE_ERROR, error: true, payload: e }); const fetchMessagesRequest = () => ({ type: FETCH_MESSAGES_REQUEST }); -const fetchMessagesSuccess = (messages, totalItems) => ({ +const fetchMessagesSuccess = (messages, pagination) => ({ type: FETCH_MESSAGES_SUCCESS, - payload: { messages, totalItems }, + payload: { messages, ...pagination }, }); const fetchMessagesError = e => ({ type: FETCH_MESSAGES_ERROR, error: true, payload: e }); @@ -257,7 +271,8 @@ export const declineSale = id => (dispatch, getState, sdk) => { }); }; -const fetchMessages = (txId, paging) => (dispatch, getState, sdk) => { +const fetchMessages = (txId, page) => (dispatch, getState, sdk) => { + const paging = { page, per_page: MESSAGES_PAGE_SIZE }; dispatch(fetchMessagesRequest()); return sdk.messages @@ -265,9 +280,11 @@ const fetchMessages = (txId, paging) => (dispatch, getState, sdk) => { .then(response => { const entities = updatedEntities({}, response.data); const messageIds = response.data.data.map(d => d.id); - const denormalized = denormalisedEntities(entities, 'message', messageIds); + const denormalizedMessages = denormalisedEntities(entities, 'message', messageIds); + const { totalItems, totalPages, page: fetchedPage } = response.data.meta; + const pagination = { totalItems, totalPages, page: fetchedPage }; - dispatch(fetchMessagesSuccess(denormalized, response.data.meta.totalItems)); + dispatch(fetchMessagesSuccess(denormalizedMessages, pagination)); }) .catch(e => { dispatch(fetchMessagesError(storableError(e))); @@ -275,23 +292,15 @@ const fetchMessages = (txId, paging) => (dispatch, getState, sdk) => { }); }; -const fetchNLatestMessages = (txId, n) => (dispatch, getState, sdk) => { - const paging = { - page: 1, - per_page: n, - }; - return dispatch(fetchMessages(txId, paging)); -}; - export const fetchMoreMessages = txId => (dispatch, getState, sdk) => { - // This is clearly not the most sophisticated solution, but the - // default page size should be large enough that seeing the "Show - // older" button is very rare. - // - // This compromises on the network request size in favor of correct - // page offset handling that is quite tricky. - const messagesToFetch = fetchedMessagesCount(getState()) + MESSAGES_PAGE_SIZE; - return dispatch(fetchNLatestMessages(txId, messagesToFetch)); + const state = getState(); + const { oldestMessagePageFetched, totalMessagePages } = state.SalePage; + const hasMoreOldMessages = totalMessagePages > oldestMessagePageFetched; + + // In case there're no more old pages left we default to fetching the current cursor position + const nextPage = hasMoreOldMessages ? oldestMessagePageFetched + 1 : oldestMessagePageFetched; + + return dispatch(fetchMessages(txId, nextPage)); }; export const sendMessage = (saleId, message) => (dispatch, getState, sdk) => { @@ -301,7 +310,12 @@ export const sendMessage = (saleId, message) => (dispatch, getState, sdk) => { .send({ transactionId: saleId, content: message }) .then(response => { const messageId = response.data.data.id; - return dispatch(fetchMessages(saleId)) + + // We fetch the first page again to add sent message to the page data + // and update possible incoming messages too. + // TODO if there're more than 100 incoming messages, + // this should loop through most recent pages instead of fetching just the first one. + return dispatch(fetchMessages(saleId, 1)) .then(() => { dispatch(sendMessageSuccess()); return messageId; @@ -391,8 +405,5 @@ export const loadData = params => dispatch => { dispatch(setInitialValues({ sendMessageError: null, sendReviewError: null })); // Sale (i.e. transaction entity in API, but from buyers perspective) contains sale details - return Promise.all([ - dispatch(fetchSale(saleId)), - dispatch(fetchNLatestMessages(saleId, MESSAGES_PAGE_SIZE)), - ]); + return Promise.all([dispatch(fetchSale(saleId)), dispatch(fetchMessages(saleId, 1))]); }; diff --git a/src/containers/SalePage/SalePage.js b/src/containers/SalePage/SalePage.js index 1f6ab948..f9b54091 100644 --- a/src/containers/SalePage/SalePage.js +++ b/src/containers/SalePage/SalePage.js @@ -49,7 +49,8 @@ export const SalePageComponent = props => { transaction, fetchMessagesInProgress, fetchMessagesError, - totalMessages, + totalMessagePages, + oldestMessagePageFetched, messages, sendMessageInProgress, sendMessageError, @@ -105,7 +106,8 @@ export const SalePageComponent = props => { declineInProgress={declineInProgress} acceptSaleError={acceptSaleError} declineSaleError={declineSaleError} - totalMessages={totalMessages} + totalMessagePages={totalMessagePages} + oldestMessagePageFetched={oldestMessagePageFetched} messages={messages} fetchMessagesInProgress={fetchMessagesInProgress} fetchMessagesError={fetchMessagesError} @@ -170,7 +172,8 @@ SalePageComponent.propTypes = { scrollingDisabled: bool.isRequired, transaction: propTypes.transaction, fetchMessagesError: propTypes.error, - totalMessages: number.isRequired, + totalMessagePages: number.isRequired, + oldestMessagePageFetched: number.isRequired, messages: arrayOf(propTypes.message).isRequired, sendMessageInProgress: bool.isRequired, sendMessageError: propTypes.error, @@ -192,7 +195,8 @@ const mapStateToProps = state => { transactionRef, fetchMessagesInProgress, fetchMessagesError, - totalMessages, + totalMessagePages, + oldestMessagePageFetched, messages, sendMessageInProgress, sendMessageError, @@ -215,7 +219,8 @@ const mapStateToProps = state => { transaction, fetchMessagesInProgress, fetchMessagesError, - totalMessages, + totalMessagePages, + oldestMessagePageFetched, messages, sendMessageInProgress, sendMessageError, diff --git a/src/containers/SalePage/SalePage.test.js b/src/containers/SalePage/SalePage.test.js index 0dbb3a55..35b0fff0 100644 --- a/src/containers/SalePage/SalePage.test.js +++ b/src/containers/SalePage/SalePage.test.js @@ -39,6 +39,8 @@ describe('SalePage', () => { scrollingDisabled: false, transaction, totalMessages: 0, + totalMessagePages: 0, + oldestMessagePageFetched: 0, messages: [], sendMessageInProgress: false, onShowMoreMessages: noop, diff --git a/src/containers/SalePage/__snapshots__/SalePage.test.js.snap b/src/containers/SalePage/__snapshots__/SalePage.test.js.snap index b9280c89..6c2fa676 100644 --- a/src/containers/SalePage/__snapshots__/SalePage.test.js.snap +++ b/src/containers/SalePage/__snapshots__/SalePage.test.js.snap @@ -48,6 +48,7 @@ exports[`SalePage matches snapshot 1`] = ` declineSaleError={null} fetchMessagesError={null} messages={Array []} + oldestMessagePageFetched={0} onAcceptSale={[Function]} onDeclineSale={[Function]} onResetForm={[Function]} @@ -55,7 +56,7 @@ exports[`SalePage matches snapshot 1`] = ` onShowMoreMessages={[Function]} sendMessageError={null} sendMessageInProgress={false} - totalMessages={0} + totalMessagePages={0} transaction={ Object { "attributes": Object {