From df2653df6ccda26d7210f0b71862a99b6f839b7d Mon Sep 17 00:00:00 2001 From: Marc Glasser Date: Tue, 22 Sep 2020 13:14:36 -0700 Subject: [PATCH 01/30] Add desktop dock icon indicator --- main.js | 4 ++ src/lib/PageTitleUpdater/index.js | 16 ------ src/lib/UnreadIndicatorUpdater/index.js | 50 +++++++++++++++++++ .../index.native.js | 4 +- src/lib/actions/Report.js | 22 ++++---- src/page/home/HomePage.js | 3 ++ src/page/home/sidebar/SidebarLinks.js | 6 +-- 7 files changed, 73 insertions(+), 32 deletions(-) delete mode 100644 src/lib/PageTitleUpdater/index.js create mode 100644 src/lib/UnreadIndicatorUpdater/index.js rename src/lib/{PageTitleUpdater => UnreadIndicatorUpdater}/index.native.js (73%) diff --git a/main.js b/main.js index 3714f8a9c85e..a5174483880a 100644 --- a/main.js +++ b/main.js @@ -68,6 +68,10 @@ const mainWindow = (() => { event.returnValue = browserWindow.isFocused(); }); + ipcMain.on('request-update-badge-count', (event, totalCount) => { + app.setBadgeCount(totalCount); + }); + return browserWindow; }) diff --git a/src/lib/PageTitleUpdater/index.js b/src/lib/PageTitleUpdater/index.js deleted file mode 100644 index 52bdd01d3944..000000000000 --- a/src/lib/PageTitleUpdater/index.js +++ /dev/null @@ -1,16 +0,0 @@ -/** - * Web browsers have a tab title and favicon which can be updated to show there are unread comments - */ -import CONFIG from '../../CONFIG'; - -/** - * Updates the title and favicon of the current browser tab with an unread indicator - * - * @param {boolean} hasUnread - */ -const PageTitleUpdater = (hasUnread) => { - document.title = hasUnread ? `(NEW!) ${CONFIG.SITE_TITLE}` : CONFIG.SITE_TITLE; - document.getElementById('favicon').href = hasUnread ? CONFIG.FAVICON.UNREAD : CONFIG.FAVICON.DEFAULT; -}; - -export default PageTitleUpdater; diff --git a/src/lib/UnreadIndicatorUpdater/index.js b/src/lib/UnreadIndicatorUpdater/index.js new file mode 100644 index 000000000000..a37189930b50 --- /dev/null +++ b/src/lib/UnreadIndicatorUpdater/index.js @@ -0,0 +1,50 @@ +import _ from 'underscore'; +import Ion from '../Ion'; +import IONKEYS from '../../IONKEYS'; + +/** + * Web browsers have a tab title and favicon which can be updated to show there are unread comments + */ +import CONFIG from '../../CONFIG'; + +// We conditionally import the ipcRenderer here so that we can +// communicate with the main Electron process in main.js +const ipcRenderer = window.require ? window.require('electron').ipcRenderer : null; + +const reportMap = {}; + +/** + * Updates the title and favicon of the current browser tab + * and Mac OS dock icon with an unread indicator. + * + * @param {boolean} hasUnread + */ + +function updatePageTitleAndUnreadCount() { + const totalCount = _.reduce(reportMap, (total, report) => total + ((report && report.unreadActionCount) || 0), 0); + const hasUnread = totalCount > 0; + document.title = hasUnread ? `(NEW!) ${CONFIG.SITE_TITLE}` : CONFIG.SITE_TITLE; + document.getElementById('favicon').href = hasUnread ? CONFIG.FAVICON.UNREAD : CONFIG.FAVICON.DEFAULT; + + if (ipcRenderer) { + // Ask the main Electron process to update our + // badge count in the Mac OS dock icon + ipcRenderer.send('request-update-badge-count', totalCount); + } +} + +Ion.connect({ + key: IONKEYS.COLLECTION.REPORT, + callback: (report) => { + if (!report || !report.reportID) { + return; + } + + reportMap[report.reportID] = report; + updatePageTitleAndUnreadCount(); + } +}); + +export default { + init: () => {}, +}; diff --git a/src/lib/PageTitleUpdater/index.native.js b/src/lib/UnreadIndicatorUpdater/index.native.js similarity index 73% rename from src/lib/PageTitleUpdater/index.native.js rename to src/lib/UnreadIndicatorUpdater/index.native.js index e631e07e04bc..82461b6b447a 100644 --- a/src/lib/PageTitleUpdater/index.native.js +++ b/src/lib/UnreadIndicatorUpdater/index.native.js @@ -1,4 +1,6 @@ /** * Native devices (iOS, Android) don't have page title like web does, so this module doesn't do anything */ -export default () => {}; +export default { + init: () => {}, +}; diff --git a/src/lib/actions/Report.js b/src/lib/actions/Report.js index 90c311a88dbd..d849d3c01247 100644 --- a/src/lib/actions/Report.js +++ b/src/lib/actions/Report.js @@ -56,29 +56,27 @@ const configReportIDs = CONFIG.REPORT_IDS.split(',').map(Number); * @param {object} report * @returns {boolean} */ -function hasUnreadActions(report) { +function getUnreadActionCount(report) { const usersLastReadActionID = lodashGet(report, [ 'reportNameValuePairs', `lastReadActionID_${currentUserAccountID}`, ]); if (report.reportActionList.length === 0) { - return false; + return 0; } if (!usersLastReadActionID) { - return true; + return report.reportActionList.length; } // Find the most recent sequence number from the report actions const maxSequenceNumber = reportMaxSequenceNumbers[report.reportID]; - if (!maxSequenceNumber) { - return false; - } - - // There are unread items if the last one the user has read is less than the highest sequence number we have - return usersLastReadActionID < maxSequenceNumber; + // There are unread items if the last one the user has read is less + // than the highest sequence number we have. + const unreadActionCount = (maxSequenceNumber || report.reportActionList.length) - usersLastReadActionID; + return unreadActionCount > 0 ? unreadActionCount : 0; } /** @@ -92,11 +90,13 @@ function hasUnreadActions(report) { * @returns {object} */ function getSimplifiedReportObject(report) { + const unreadActionCount = getUnreadActionCount(report); return { reportID: report.reportID, reportName: report.reportName, reportNameValuePairs: report.reportNameValuePairs, - isUnread: hasUnreadActions(report), + unreadActionCount, + isUnread: unreadActionCount > 0, pinnedReport: configReportIDs.includes(report.reportID), }; } @@ -183,6 +183,7 @@ function updateReportWithNewAction(reportID, reportAction) { // by handleReportChanged Ion.merge(`${IONKEYS.COLLECTION.REPORT}${reportID}`, { reportID, + unreadActionCount: newMaxSequenceNumber - previousMaxSequenceNumber, isUnread: hasNewSequenceNumber, maxSequenceNumber: reportAction.sequenceNumber, }); @@ -443,6 +444,7 @@ function updateLastReadActionID(reportID, sequenceNumber) { // Update the lastReadActionID on the report optimistically Ion.merge(`${IONKEYS.COLLECTION.REPORT}${reportID}`, { isUnread: false, + unreadActionCount: 0, reportNameValuePairs: { [`lastReadActionID_${currentUserAccountID}`]: sequenceNumber, } diff --git a/src/page/home/HomePage.js b/src/page/home/HomePage.js index 7e36a7863356..2162c5b07f88 100644 --- a/src/page/home/HomePage.js +++ b/src/page/home/HomePage.js @@ -15,6 +15,7 @@ import Main from './MainView'; import {subscribeToReportCommentEvents, fetchAll as fetchAllReports} from '../../lib/actions/Report'; import {fetch as fetchPersonalDetails} from '../../lib/actions/PersonalDetails'; import * as Pusher from '../../lib/Pusher/pusher'; +import UnreadIndicatorUpdater from '../../lib/UnreadIndicatorUpdater'; const windowSize = Dimensions.get('window'); const widthBreakPoint = 1000; @@ -43,6 +44,8 @@ export default class App extends React.Component { // Fetch all the reports fetchAllReports(); + UnreadIndicatorUpdater.init(); + Dimensions.addEventListener('change', this.toggleHamburgerBasedOnDimensions); StatusBar.setBarStyle('dark-content', true); diff --git a/src/page/home/sidebar/SidebarLinks.js b/src/page/home/sidebar/SidebarLinks.js index 2dd7c39881d2..9ea51a109e5c 100644 --- a/src/page/home/sidebar/SidebarLinks.js +++ b/src/page/home/sidebar/SidebarLinks.js @@ -8,7 +8,6 @@ import Text from '../../../components/Text'; import SidebarLink from './SidebarLink'; import withIon from '../../../components/withIon'; import IONKEYS from '../../../IONKEYS'; -import PageTitleUpdater from '../../../lib/PageTitleUpdater'; import ChatSwitcherView from './ChatSwitcherView'; import SafeAreaInsetPropTypes from '../../SafeAreaInsetPropTypes'; import compose from '../../../lib/compose'; @@ -54,7 +53,7 @@ class SidebarLinks extends React.Component { } render() { - const {reports, onLinkClick} = this.props; + const {onLinkClick} = this.props; const reportIDInUrl = parseInt(this.props.match.params.reportID, 10); const sortedReports = lodashOrderby(this.props.reports, ['pinnedReport', 'reportName'], ['desc', 'asc']); @@ -62,9 +61,6 @@ class SidebarLinks extends React.Component { // eslint-disable-next-line max-len const reportsToDisplay = _.filter(sortedReports, report => (report.pinnedReport || report.isUnread || report.reportID === reportIDInUrl)); - // Updates the page title to indicate there are unread reports - PageTitleUpdater(_.any(reports, report => report.isUnread)); - return ( From 772ba7a4a6de1786bb7b8d99e5956cd18a4e876f Mon Sep 17 00:00:00 2001 From: Marc Glasser Date: Tue, 22 Sep 2020 13:47:30 -0700 Subject: [PATCH 02/30] fix newline --- src/lib/UnreadIndicatorUpdater/index.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/lib/UnreadIndicatorUpdater/index.js b/src/lib/UnreadIndicatorUpdater/index.js index a37189930b50..34e1b73f3da8 100644 --- a/src/lib/UnreadIndicatorUpdater/index.js +++ b/src/lib/UnreadIndicatorUpdater/index.js @@ -19,7 +19,6 @@ const reportMap = {}; * * @param {boolean} hasUnread */ - function updatePageTitleAndUnreadCount() { const totalCount = _.reduce(reportMap, (total, report) => total + ((report && report.unreadActionCount) || 0), 0); const hasUnread = totalCount > 0; From b216c53d6dbcadd8c7e68cde39db319c6e98b241 Mon Sep 17 00:00:00 2001 From: Marc Glasser Date: Tue, 22 Sep 2020 13:58:33 -0700 Subject: [PATCH 03/30] save lastReadActionIDs so we can reference them later --- src/lib/actions/Report.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/lib/actions/Report.js b/src/lib/actions/Report.js index d849d3c01247..c00856a39f65 100644 --- a/src/lib/actions/Report.js +++ b/src/lib/actions/Report.js @@ -47,6 +47,9 @@ Ion.connect({ // Keeps track of the max sequence number for each report const reportMaxSequenceNumbers = {}; +// Keeps track of the last read for each report +const lastReadActionIDs = {}; + // List of reportIDs that we define in .env const configReportIDs = CONFIG.REPORT_IDS.split(',').map(Number); @@ -62,6 +65,9 @@ function getUnreadActionCount(report) { `lastReadActionID_${currentUserAccountID}`, ]); + // Save the lastReadActionID locally so we can access this later + lastReadActionIDs[report.reportID] = usersLastReadActionID; + if (report.reportActionList.length === 0) { return 0; } @@ -183,7 +189,7 @@ function updateReportWithNewAction(reportID, reportAction) { // by handleReportChanged Ion.merge(`${IONKEYS.COLLECTION.REPORT}${reportID}`, { reportID, - unreadActionCount: newMaxSequenceNumber - previousMaxSequenceNumber, + unreadActionCount: newMaxSequenceNumber - (lastReadActionIDs[reportID] || 0), isUnread: hasNewSequenceNumber, maxSequenceNumber: reportAction.sequenceNumber, }); @@ -441,6 +447,8 @@ function updateLastReadActionID(reportID, sequenceNumber) { return; } + lastReadActionIDs[reportID] = 0; + // Update the lastReadActionID on the report optimistically Ion.merge(`${IONKEYS.COLLECTION.REPORT}${reportID}`, { isUnread: false, From 99c9b9ef5d753975c443a341742a3de140657a22 Mon Sep 17 00:00:00 2001 From: Marc Glasser Date: Tue, 22 Sep 2020 14:05:22 -0700 Subject: [PATCH 04/30] not zero use sequenceNumber --- src/lib/actions/Report.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/actions/Report.js b/src/lib/actions/Report.js index c00856a39f65..dc9d328a7069 100644 --- a/src/lib/actions/Report.js +++ b/src/lib/actions/Report.js @@ -447,7 +447,7 @@ function updateLastReadActionID(reportID, sequenceNumber) { return; } - lastReadActionIDs[reportID] = 0; + lastReadActionIDs[reportID] = sequenceNumber; // Update the lastReadActionID on the report optimistically Ion.merge(`${IONKEYS.COLLECTION.REPORT}${reportID}`, { From 40083b9c460958026034c6e3d942bb0301bedfb8 Mon Sep 17 00:00:00 2001 From: Marc Glasser Date: Tue, 22 Sep 2020 14:50:34 -0700 Subject: [PATCH 05/30] remove isUnread from report --- src/lib/UnreadIndicatorUpdater/index.js | 41 +++++++++++++------ .../UnreadIndicatorUpdater/index.native.js | 1 + src/lib/actions/Report.js | 5 --- src/page/home/HomePage.js | 1 + src/page/home/sidebar/SidebarLinks.js | 6 +-- 5 files changed, 34 insertions(+), 20 deletions(-) diff --git a/src/lib/UnreadIndicatorUpdater/index.js b/src/lib/UnreadIndicatorUpdater/index.js index 34e1b73f3da8..906014c578c2 100644 --- a/src/lib/UnreadIndicatorUpdater/index.js +++ b/src/lib/UnreadIndicatorUpdater/index.js @@ -11,7 +11,8 @@ import CONFIG from '../../CONFIG'; // communicate with the main Electron process in main.js const ipcRenderer = window.require ? window.require('electron').ipcRenderer : null; -const reportMap = {}; +// Stash the unread action counts for each report +const unreadActionCounts = {}; /** * Updates the title and favicon of the current browser tab @@ -20,7 +21,7 @@ const reportMap = {}; * @param {boolean} hasUnread */ function updatePageTitleAndUnreadCount() { - const totalCount = _.reduce(reportMap, (total, report) => total + ((report && report.unreadActionCount) || 0), 0); + const totalCount = _.reduce(unreadActionCounts, (total, reportCount) => total + reportCount, 0); const hasUnread = totalCount > 0; document.title = hasUnread ? `(NEW!) ${CONFIG.SITE_TITLE}` : CONFIG.SITE_TITLE; document.getElementById('favicon').href = hasUnread ? CONFIG.FAVICON.UNREAD : CONFIG.FAVICON.DEFAULT; @@ -32,18 +33,34 @@ function updatePageTitleAndUnreadCount() { } } -Ion.connect({ - key: IONKEYS.COLLECTION.REPORT, - callback: (report) => { - if (!report || !report.reportID) { - return; +let connectionID; + +/** + * Bind to the report collection key and update + * the title and unread count indicators + */ +function init() { + connectionID = Ion.connect({ + key: IONKEYS.COLLECTION.REPORT, + callback: (report) => { + if (!report || !report.reportID) { + return; + } + + unreadActionCounts[report.reportID] = report.unreadActionCount || 0; + updatePageTitleAndUnreadCount(); } + }); +} - reportMap[report.reportID] = report; - updatePageTitleAndUnreadCount(); - } -}); +/** + * Remove the subscription callback when we no longer need it. + */ +function destroy() { + Ion.disconnect(connectionID); +} export default { - init: () => {}, + init, + destroy, }; diff --git a/src/lib/UnreadIndicatorUpdater/index.native.js b/src/lib/UnreadIndicatorUpdater/index.native.js index 82461b6b447a..71625e5c31f4 100644 --- a/src/lib/UnreadIndicatorUpdater/index.native.js +++ b/src/lib/UnreadIndicatorUpdater/index.native.js @@ -3,4 +3,5 @@ */ export default { init: () => {}, + destroy: () => {}, }; diff --git a/src/lib/actions/Report.js b/src/lib/actions/Report.js index dc9d328a7069..4bcf61919655 100644 --- a/src/lib/actions/Report.js +++ b/src/lib/actions/Report.js @@ -102,7 +102,6 @@ function getSimplifiedReportObject(report) { reportName: report.reportName, reportNameValuePairs: report.reportNameValuePairs, unreadActionCount, - isUnread: unreadActionCount > 0, pinnedReport: configReportIDs.includes(report.reportID), }; } @@ -180,9 +179,7 @@ function fetchChatReportsByIDs(chatList) { * @param {object} reportAction */ function updateReportWithNewAction(reportID, reportAction) { - const previousMaxSequenceNumber = reportMaxSequenceNumbers[reportID]; const newMaxSequenceNumber = reportAction.sequenceNumber; - const hasNewSequenceNumber = newMaxSequenceNumber > previousMaxSequenceNumber; // Always merge the reportID into Ion // If the report doesn't exist in Ion yet, then all the rest of the data will be filled out @@ -190,7 +187,6 @@ function updateReportWithNewAction(reportID, reportAction) { Ion.merge(`${IONKEYS.COLLECTION.REPORT}${reportID}`, { reportID, unreadActionCount: newMaxSequenceNumber - (lastReadActionIDs[reportID] || 0), - isUnread: hasNewSequenceNumber, maxSequenceNumber: reportAction.sequenceNumber, }); @@ -451,7 +447,6 @@ function updateLastReadActionID(reportID, sequenceNumber) { // Update the lastReadActionID on the report optimistically Ion.merge(`${IONKEYS.COLLECTION.REPORT}${reportID}`, { - isUnread: false, unreadActionCount: 0, reportNameValuePairs: { [`lastReadActionID_${currentUserAccountID}`]: sequenceNumber, diff --git a/src/page/home/HomePage.js b/src/page/home/HomePage.js index 2162c5b07f88..1099e30b1cbf 100644 --- a/src/page/home/HomePage.js +++ b/src/page/home/HomePage.js @@ -55,6 +55,7 @@ export default class App extends React.Component { componentWillUnmount() { Dimensions.removeEventListener('change', this.toggleHamburgerBasedOnDimensions); + UnreadIndicatorUpdater.destroy(); } /** diff --git a/src/page/home/sidebar/SidebarLinks.js b/src/page/home/sidebar/SidebarLinks.js index 9ea51a109e5c..c7bb2e3d9c65 100644 --- a/src/page/home/sidebar/SidebarLinks.js +++ b/src/page/home/sidebar/SidebarLinks.js @@ -36,7 +36,7 @@ const propTypes = { reports: PropTypes.objectOf(PropTypes.shape({ reportID: PropTypes.number, reportName: PropTypes.string, - isUnread: PropTypes.bool, + unreadActionCount: PropTypes.number, })), }; const defaultProps = { @@ -59,7 +59,7 @@ class SidebarLinks extends React.Component { // Filter the reports so that the only reports shown are pinned, unread, and the one matching the URL // eslint-disable-next-line max-len - const reportsToDisplay = _.filter(sortedReports, report => (report.pinnedReport || report.isUnread || report.reportID === reportIDInUrl)); + const reportsToDisplay = _.filter(sortedReports, report => (report.pinnedReport || (report.unreadActionCount > 0) || report.reportID === reportIDInUrl)); return ( @@ -90,7 +90,7 @@ class SidebarLinks extends React.Component { key={report.reportID} reportID={report.reportID} reportName={report.reportName} - isUnread={report.isUnread} + isUnread={report.unreadActionCount > 0} onLinkClick={onLinkClick} /> ))} From 3153f2ee973ed0b1b3b45f99d0876e8a58b3bd78 Mon Sep 17 00:00:00 2001 From: Marc Glasser Date: Tue, 22 Sep 2020 15:00:00 -0700 Subject: [PATCH 06/30] Simplify the SidebarLink component --- src/page/home/sidebar/SidebarLink.js | 41 +++++++-------------------- src/page/home/sidebar/SidebarLinks.js | 1 + 2 files changed, 11 insertions(+), 31 deletions(-) diff --git a/src/page/home/sidebar/SidebarLink.js b/src/page/home/sidebar/SidebarLink.js index c83f8fbb0bb8..385a487ff371 100644 --- a/src/page/home/sidebar/SidebarLink.js +++ b/src/page/home/sidebar/SidebarLink.js @@ -2,12 +2,8 @@ import React from 'react'; import PropTypes from 'prop-types'; import {View} from 'react-native'; import Text from '../../../components/Text'; -import {withRouter} from '../../../lib/Router'; -import IONKEYS from '../../../IONKEYS'; import styles from '../../../style/StyleSheet'; -import withIon from '../../../components/withIon'; import PressableLink from '../../../components/PressableLink'; -import compose from '../../../lib/compose'; const propTypes = { // The ID of the report for this link @@ -16,36 +12,26 @@ const propTypes = { // The name of the report to use as the text for this link reportName: PropTypes.string, - // These are from withRouter - // eslint-disable-next-line react/forbid-prop-types - match: PropTypes.object.isRequired, - // Toggles the hamburger menu open and closed onLinkClick: PropTypes.func.isRequired, - /* Ion Props */ + // Does the report for this link have unread comments? + isUnread: PropTypes.bool, - // The report object for this link - report: PropTypes.shape({ - // Does the report for this link have unread comments? - isUnread: PropTypes.bool, - }), + // Whether this is the report currently in view + isActiveReport: PropTypes.bool.isRequired, }; const defaultProps = { - report: { - isUnread: false, - }, + isUnread: false, reportName: '', }; const SidebarLink = (props) => { - const reportIDInUrl = parseInt(props.match.params.reportID, 10); - const isReportActive = reportIDInUrl === props.reportID; - const linkWrapperActiveStyle = isReportActive && styles.sidebarLinkWrapperActive; - const linkActiveStyle = isReportActive ? styles.sidebarLinkActive : styles.sidebarLink; - const textActiveStyle = isReportActive ? styles.sidebarLinkActiveText : styles.sidebarLinkText; - const textActiveUnreadStyle = props.report.isUnread + const linkWrapperActiveStyle = props.isActiveReport && styles.sidebarLinkWrapperActive; + const linkActiveStyle = props.isActiveReport ? styles.sidebarLinkActive : styles.sidebarLink; + const textActiveStyle = props.isActiveReport ? styles.sidebarLinkActiveText : styles.sidebarLinkText; + const textActiveUnreadStyle = props.isUnread ? [textActiveStyle, styles.sidebarLinkTextUnread] : [textActiveStyle]; return ( @@ -65,11 +51,4 @@ SidebarLink.displayName = 'SidebarLink'; SidebarLink.propTypes = propTypes; SidebarLink.defaultProps = defaultProps; -export default compose( - withRouter, - withIon({ - report: { - key: ({reportID}) => `${IONKEYS.COLLECTION.REPORT}${reportID}`, - }, - }), -)(SidebarLink); +export default SidebarLink; diff --git a/src/page/home/sidebar/SidebarLinks.js b/src/page/home/sidebar/SidebarLinks.js index c7bb2e3d9c65..1600db64083a 100644 --- a/src/page/home/sidebar/SidebarLinks.js +++ b/src/page/home/sidebar/SidebarLinks.js @@ -92,6 +92,7 @@ class SidebarLinks extends React.Component { reportName={report.reportName} isUnread={report.unreadActionCount > 0} onLinkClick={onLinkClick} + isActiveReport={report.reportID === reportIDInUrl} /> ))} From 0e904e2519840138fb42f5600ef7f2e38ab60f9a Mon Sep 17 00:00:00 2001 From: Marc Glasser Date: Tue, 22 Sep 2020 15:28:57 -0700 Subject: [PATCH 07/30] add electron events --- desktop/ELECTRON_EVENTS.js | 6 ++++++ main.js | 5 +++-- src/lib/UnreadIndicatorUpdater/index.js | 3 ++- src/lib/Visibility/index.js | 4 +++- 4 files changed, 14 insertions(+), 4 deletions(-) create mode 100644 desktop/ELECTRON_EVENTS.js diff --git a/desktop/ELECTRON_EVENTS.js b/desktop/ELECTRON_EVENTS.js new file mode 100644 index 000000000000..a0df58fe7a9b --- /dev/null +++ b/desktop/ELECTRON_EVENTS.js @@ -0,0 +1,6 @@ +const ELECTRON_EVENTS = { + REQUEST_UPDATE_BADGE_COUNT: 'request-update-badge-count', + REQUEST_VISIBILITY: 'request_visibility', +}; + +module.exports = ELECTRON_EVENTS; diff --git a/main.js b/main.js index a5174483880a..1260d826fef1 100644 --- a/main.js +++ b/main.js @@ -8,6 +8,7 @@ const serve = require('electron-serve'); const contextMenu = require('electron-context-menu'); const {autoUpdater} = require('electron-updater'); const log = require('electron-log'); +const ELECTRON_EVENTS = require('./desktop/ELECTRON_EVENTS'); /** * Electron main process that handles wrapping the web application. @@ -62,13 +63,13 @@ const mainWindow = (() => { return shell.openExternal(url); }); - ipcMain.on('request-visibility', (event) => { + ipcMain.on(ELECTRON_EVENTS.REQUEST_VISIBILITY, (event) => { // This is how synchronous messages work in Electron // eslint-disable-next-line no-param-reassign event.returnValue = browserWindow.isFocused(); }); - ipcMain.on('request-update-badge-count', (event, totalCount) => { + ipcMain.on(ELECTRON_EVENTS.REQUEST_UPDATE_BADGE_COUNT, (event, totalCount) => { app.setBadgeCount(totalCount); }); diff --git a/src/lib/UnreadIndicatorUpdater/index.js b/src/lib/UnreadIndicatorUpdater/index.js index 906014c578c2..cc76b912a44a 100644 --- a/src/lib/UnreadIndicatorUpdater/index.js +++ b/src/lib/UnreadIndicatorUpdater/index.js @@ -1,6 +1,7 @@ import _ from 'underscore'; import Ion from '../Ion'; import IONKEYS from '../../IONKEYS'; +import ELECTRON_EVENTS from '../../../desktop/ELECTRON_EVENTS'; /** * Web browsers have a tab title and favicon which can be updated to show there are unread comments @@ -29,7 +30,7 @@ function updatePageTitleAndUnreadCount() { if (ipcRenderer) { // Ask the main Electron process to update our // badge count in the Mac OS dock icon - ipcRenderer.send('request-update-badge-count', totalCount); + ipcRenderer.send(ELECTRON_EVENTS.REQUEST_UPDATE_BADGE_COUNT, totalCount); } } diff --git a/src/lib/Visibility/index.js b/src/lib/Visibility/index.js index 7929d824a5f2..336d80bf17ea 100644 --- a/src/lib/Visibility/index.js +++ b/src/lib/Visibility/index.js @@ -1,3 +1,5 @@ +import ELECTRON_EVENTS from '../../../desktop/ELECTRON_EVENTS'; + // We conditionally import the ipcRenderer here so that we can // communicate with the main Electron process in main.js const ipcRenderer = window.require ? window.require('electron').ipcRenderer : null; @@ -13,7 +15,7 @@ const ipcRenderer = window.require ? window.require('electron').ipcRenderer : nu */ function isVisible() { return ipcRenderer - ? ipcRenderer.sendSync('request-visibility') + ? ipcRenderer.sendSync(ELECTRON_EVENTS.REQUEST_VISIBILITY) : document.visibilityState === 'visible'; } From 50999a7df12a5df49d826513a6575002179159e4 Mon Sep 17 00:00:00 2001 From: Marc Glasser Date: Tue, 22 Sep 2020 15:38:21 -0700 Subject: [PATCH 08/30] use throttle to minimize calls to the updater --- src/lib/UnreadIndicatorUpdater/index.js | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/lib/UnreadIndicatorUpdater/index.js b/src/lib/UnreadIndicatorUpdater/index.js index cc76b912a44a..e145f920884a 100644 --- a/src/lib/UnreadIndicatorUpdater/index.js +++ b/src/lib/UnreadIndicatorUpdater/index.js @@ -18,10 +18,8 @@ const unreadActionCounts = {}; /** * Updates the title and favicon of the current browser tab * and Mac OS dock icon with an unread indicator. - * - * @param {boolean} hasUnread */ -function updatePageTitleAndUnreadCount() { +const throttledUpdatePageTitleAndUnreadCount = _.throttle(() => { const totalCount = _.reduce(unreadActionCounts, (total, reportCount) => total + reportCount, 0); const hasUnread = totalCount > 0; document.title = hasUnread ? `(NEW!) ${CONFIG.SITE_TITLE}` : CONFIG.SITE_TITLE; @@ -32,7 +30,7 @@ function updatePageTitleAndUnreadCount() { // badge count in the Mac OS dock icon ipcRenderer.send(ELECTRON_EVENTS.REQUEST_UPDATE_BADGE_COUNT, totalCount); } -} +}, 1000, {leading: false}); let connectionID; @@ -49,7 +47,7 @@ function init() { } unreadActionCounts[report.reportID] = report.unreadActionCount || 0; - updatePageTitleAndUnreadCount(); + throttledUpdatePageTitleAndUnreadCount(); } }); } From 7717b1b104e70af27526402602183835a55e0a1e Mon Sep 17 00:00:00 2001 From: Marc Glasser Date: Tue, 22 Sep 2020 15:40:28 -0700 Subject: [PATCH 09/30] add comment --- main.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/main.js b/main.js index 1260d826fef1..3ebcc2bb79bb 100644 --- a/main.js +++ b/main.js @@ -69,6 +69,8 @@ const mainWindow = (() => { event.returnValue = browserWindow.isFocused(); }); + // Listen to badge updater event emitted by the render process + // and update the app badge count (MacOS only) ipcMain.on(ELECTRON_EVENTS.REQUEST_UPDATE_BADGE_COUNT, (event, totalCount) => { app.setBadgeCount(totalCount); }); From d9d14243fa2ce1c7bead048af44c4913529c74af Mon Sep 17 00:00:00 2001 From: Marc Glasser Date: Tue, 22 Sep 2020 17:22:34 -0700 Subject: [PATCH 10/30] Move updateUnread method to its own utility --- ios/Podfile.lock | 6 +++ ios/ReactNativeChat.xcodeproj/project.pbxproj | 4 ++ ios/ReactNativeChat/AppDelegate.h | 3 +- ios/ReactNativeChat/AppDelegate.m | 49 +++++++++++++++++++ ios/ReactNativeChat/Chat.entitlements | 8 +++ ios/ReactNativeChat/Info.plist | 34 +++++++------ package-lock.json | 8 +++ package.json | 1 + src/lib/UnreadIndicatorUpdater/index.js | 21 +------- .../UnreadIndicatorUpdater/index.native.js | 7 --- .../updateUnread/index.js | 24 +++++++++ .../updateUnread/index.native.js | 14 ++++++ 12 files changed, 137 insertions(+), 42 deletions(-) create mode 100644 ios/ReactNativeChat/Chat.entitlements delete mode 100644 src/lib/UnreadIndicatorUpdater/index.native.js create mode 100644 src/lib/UnreadIndicatorUpdater/updateUnread/index.js create mode 100644 src/lib/UnreadIndicatorUpdater/updateUnread/index.native.js diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 9013b3ab5278..6e74a6f260a6 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -310,6 +310,8 @@ PODS: - React-jsi (= 0.63.2) - RNCAsyncStorage (1.11.0): - React + - RNCPushNotificationIOS (1.5.0): + - React - Yoga (1.14.0) - YogaKit (1.18.1): - Yoga (~> 1.14) @@ -367,6 +369,7 @@ DEPENDENCIES: - React-RCTVibration (from `../node_modules/react-native/Libraries/Vibration`) - ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`) - "RNCAsyncStorage (from `../node_modules/@react-native-community/async-storage`)" + - "RNCPushNotificationIOS (from `../node_modules/@react-native-community/push-notification-ios`)" - Yoga (from `../node_modules/react-native/ReactCommon/yoga`) SPEC REPOS: @@ -447,6 +450,8 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native/ReactCommon" RNCAsyncStorage: :path: "../node_modules/@react-native-community/async-storage" + RNCPushNotificationIOS: + :path: "../node_modules/@react-native-community/push-notification-ios" Yoga: :path: "../node_modules/react-native/ReactCommon/yoga" @@ -493,6 +498,7 @@ SPEC CHECKSUMS: React-RCTVibration: 4d2e726957f4087449739b595f107c0d4b6c2d2d ReactCommon: a0a1edbebcac5e91338371b72ffc66aa822792ce RNCAsyncStorage: db711e29e5e0500d9bd21aa0c2e397efa45302b1 + RNCPushNotificationIOS: 8025ff0b610d7b28d29ddc1b619cd55814362e4c Yoga: 7740b94929bbacbddda59bf115b5317e9a161598 YogaKit: f782866e155069a2cca2517aafea43200b01fd5a diff --git a/ios/ReactNativeChat.xcodeproj/project.pbxproj b/ios/ReactNativeChat.xcodeproj/project.pbxproj index 911b93d1d30b..b7bee2e0dff4 100644 --- a/ios/ReactNativeChat.xcodeproj/project.pbxproj +++ b/ios/ReactNativeChat.xcodeproj/project.pbxproj @@ -43,6 +43,7 @@ 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = ReactNativeChat/Info.plist; sourceTree = ""; }; 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = ReactNativeChat/main.m; sourceTree = ""; }; 1CFBC073CF30A72CCF109A40 /* Pods-ReactNativeChat-ReactNativeChatTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ReactNativeChat-ReactNativeChatTests.release.xcconfig"; path = "Target Support Files/Pods-ReactNativeChat-ReactNativeChatTests/Pods-ReactNativeChat-ReactNativeChatTests.release.xcconfig"; sourceTree = ""; }; + 499D0486251AC7F1000B666B /* Chat.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; name = Chat.entitlements; path = ReactNativeChat/Chat.entitlements; sourceTree = ""; }; 67D5C3A6A7FA417C8A853FC1 /* GTAmericaExp-Light.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "GTAmericaExp-Light.otf"; path = "../assets/fonts/GTAmericaExp-Light.otf"; sourceTree = ""; }; 6ABF95746519766B23B4E2D0 /* libPods-ReactNativeChat.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-ReactNativeChat.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = ReactNativeChat/LaunchScreen.storyboard; sourceTree = ""; }; @@ -98,6 +99,7 @@ 13B07FAE1A68108700A75B9A /* ReactNativeChat */ = { isa = PBXGroup; children = ( + 499D0486251AC7F1000B666B /* Chat.entitlements */, 008F07F21AC5B25A0029DE68 /* main.jsbundle */, 13B07FAF1A68108700A75B9A /* AppDelegate.h */, 13B07FB01A68108700A75B9A /* AppDelegate.m */, @@ -478,6 +480,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = ReactNativeChat/Chat.entitlements; CODE_SIGN_IDENTITY = "iPhone Distribution"; CODE_SIGN_STYLE = Manual; CURRENT_PROJECT_VERSION = 3; @@ -507,6 +510,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = ReactNativeChat/Chat.entitlements; CODE_SIGN_IDENTITY = "iPhone Distribution"; CODE_SIGN_STYLE = Manual; CURRENT_PROJECT_VERSION = 3; diff --git a/ios/ReactNativeChat/AppDelegate.h b/ios/ReactNativeChat/AppDelegate.h index ef1de86a2a80..854a4484a587 100644 --- a/ios/ReactNativeChat/AppDelegate.h +++ b/ios/ReactNativeChat/AppDelegate.h @@ -1,7 +1,8 @@ +#import #import #import -@interface AppDelegate : UIResponder +@interface AppDelegate : UIResponder @property (nonatomic, strong) UIWindow *window; diff --git a/ios/ReactNativeChat/AppDelegate.m b/ios/ReactNativeChat/AppDelegate.m index dab2afd4320e..538c9c426771 100644 --- a/ios/ReactNativeChat/AppDelegate.m +++ b/ios/ReactNativeChat/AppDelegate.m @@ -4,6 +4,9 @@ #import #import +#import +#import + #ifdef FB_SONARKIT_ENABLED #import #import @@ -43,9 +46,55 @@ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:( rootViewController.view = rootView; self.window.rootViewController = rootViewController; [self.window makeKeyAndVisible]; + + // Define UNUserNotificationCenter + UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter]; + center.delegate = self; + return YES; } +//Called when a notification is delivered to a foreground app. +-(void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler +{ + completionHandler(UNAuthorizationOptionSound | UNAuthorizationOptionAlert | UNAuthorizationOptionBadge); +} + +// Required to register for notifications +- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings +{ + [RNCPushNotificationIOS didRegisterUserNotificationSettings:notificationSettings]; +} +// Required for the register event. +- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken +{ + [RNCPushNotificationIOS didRegisterForRemoteNotificationsWithDeviceToken:deviceToken]; +} +// Required for the notification event. You must call the completion handler after handling the remote notification. +- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo +fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler +{ + [RNCPushNotificationIOS didReceiveRemoteNotification:userInfo fetchCompletionHandler:completionHandler]; +} +// Required for the registrationError event. +- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error +{ + [RNCPushNotificationIOS didFailToRegisterForRemoteNotificationsWithError:error]; +} +// IOS 10+ Required for localNotification event +- (void)userNotificationCenter:(UNUserNotificationCenter *)center +didReceiveNotificationResponse:(UNNotificationResponse *)response + withCompletionHandler:(void (^)(void))completionHandler +{ + [RNCPushNotificationIOS didReceiveNotificationResponse:response]; + completionHandler(); +} +// IOS 4-10 Required for the localNotification event. +- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification +{ + [RNCPushNotificationIOS didReceiveLocalNotification:notification]; +} + - (NSURL *)sourceURLForBridge:(RCTBridge *)bridge { #if DEBUG diff --git a/ios/ReactNativeChat/Chat.entitlements b/ios/ReactNativeChat/Chat.entitlements new file mode 100644 index 000000000000..903def2af530 --- /dev/null +++ b/ios/ReactNativeChat/Chat.entitlements @@ -0,0 +1,8 @@ + + + + + aps-environment + development + + diff --git a/ios/ReactNativeChat/Info.plist b/ios/ReactNativeChat/Info.plist index edcb6d5fc7a0..97a30e5f6cd6 100644 --- a/ios/ReactNativeChat/Info.plist +++ b/ios/ReactNativeChat/Info.plist @@ -23,33 +23,39 @@ CFBundleVersion 64 ITSAppUsesNonExemptEncryption - + LSRequiresIPhoneOS - + NSAppTransportSecurity NSAllowsArbitraryLoads - + NSExceptionDomains localhost NSExceptionAllowsInsecureHTTPLoads - + NSIncludesSubdomains - + www.expensify.com.dev NSExceptionAllowsInsecureHTTPLoads - + NSIncludesSubdomains - + + NSCameraUsageDescription + Your camera is used to create chat attachments. NSLocationWhenInUseUsageDescription - + + NSPhotoLibraryAddUsageDescription + Your camera roll is used to store chat attachments. + NSPhotoLibraryUsageDescription + Your photos are used to create chat attachments. UIAppFonts GTAmericaExp-Bold.otf @@ -58,6 +64,10 @@ GTAmericaExp-Regular.otf GTAmericaExp-Thin.otf + UIBackgroundModes + + remote-notification + UILaunchStoryboardName LaunchScreen UIRequiredDeviceCapabilities @@ -70,13 +80,7 @@ UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight - NSPhotoLibraryUsageDescription - Your photos are used to create chat attachments. - NSCameraUsageDescription - Your camera is used to create chat attachments. - NSPhotoLibraryAddUsageDescription - Your camera roll is used to store chat attachments. UIViewControllerBasedStatusBarAppearance - + diff --git a/package-lock.json b/package-lock.json index d71ca160cec8..d3e4f78ed314 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1799,6 +1799,14 @@ "resolved": "https://registry.npmjs.org/@react-native-community/netinfo/-/netinfo-5.9.6.tgz", "integrity": "sha512-cEkA1Apg8+VjnDdeDZRHI+2RqouiPKgYnewouRkvF4ettH9ZS4Cmi/nANQKIpIu2L+czboxM3fCZ44nc7IM9VQ==" }, + "@react-native-community/push-notification-ios": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@react-native-community/push-notification-ios/-/push-notification-ios-1.5.0.tgz", + "integrity": "sha512-88Uwu6S8oRVnuMfBMGN+MtTyUjiVmMKwfObYrPmm+b2E2Aqk0WlZ4clfECukG8QIzv1pfELJZ5uZMVTYMI6klg==", + "requires": { + "invariant": "^2.2.4" + } + }, "@sindresorhus/is": { "version": "0.14.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", diff --git a/package.json b/package.json index 043471be3983..1cfa7f588a5d 100644 --- a/package.json +++ b/package.json @@ -25,6 +25,7 @@ "dependencies": { "@react-native-community/async-storage": "^1.11.0", "@react-native-community/netinfo": "^5.9.6", + "@react-native-community/push-notification-ios": "^1.5.0", "babel-plugin-transform-remove-console": "^6.9.4", "dotenv": "^8.2.0", "electron-context-menu": "^2.3.0", diff --git a/src/lib/UnreadIndicatorUpdater/index.js b/src/lib/UnreadIndicatorUpdater/index.js index e145f920884a..f45b6bfaf08f 100644 --- a/src/lib/UnreadIndicatorUpdater/index.js +++ b/src/lib/UnreadIndicatorUpdater/index.js @@ -1,16 +1,7 @@ import _ from 'underscore'; import Ion from '../Ion'; import IONKEYS from '../../IONKEYS'; -import ELECTRON_EVENTS from '../../../desktop/ELECTRON_EVENTS'; - -/** - * Web browsers have a tab title and favicon which can be updated to show there are unread comments - */ -import CONFIG from '../../CONFIG'; - -// We conditionally import the ipcRenderer here so that we can -// communicate with the main Electron process in main.js -const ipcRenderer = window.require ? window.require('electron').ipcRenderer : null; +import updateUnread from './updateUnread'; // Stash the unread action counts for each report const unreadActionCounts = {}; @@ -21,15 +12,7 @@ const unreadActionCounts = {}; */ const throttledUpdatePageTitleAndUnreadCount = _.throttle(() => { const totalCount = _.reduce(unreadActionCounts, (total, reportCount) => total + reportCount, 0); - const hasUnread = totalCount > 0; - document.title = hasUnread ? `(NEW!) ${CONFIG.SITE_TITLE}` : CONFIG.SITE_TITLE; - document.getElementById('favicon').href = hasUnread ? CONFIG.FAVICON.UNREAD : CONFIG.FAVICON.DEFAULT; - - if (ipcRenderer) { - // Ask the main Electron process to update our - // badge count in the Mac OS dock icon - ipcRenderer.send(ELECTRON_EVENTS.REQUEST_UPDATE_BADGE_COUNT, totalCount); - } + updateUnread(totalCount); }, 1000, {leading: false}); let connectionID; diff --git a/src/lib/UnreadIndicatorUpdater/index.native.js b/src/lib/UnreadIndicatorUpdater/index.native.js deleted file mode 100644 index 71625e5c31f4..000000000000 --- a/src/lib/UnreadIndicatorUpdater/index.native.js +++ /dev/null @@ -1,7 +0,0 @@ -/** - * Native devices (iOS, Android) don't have page title like web does, so this module doesn't do anything - */ -export default { - init: () => {}, - destroy: () => {}, -}; diff --git a/src/lib/UnreadIndicatorUpdater/updateUnread/index.js b/src/lib/UnreadIndicatorUpdater/updateUnread/index.js new file mode 100644 index 000000000000..27b9baef48a1 --- /dev/null +++ b/src/lib/UnreadIndicatorUpdater/updateUnread/index.js @@ -0,0 +1,24 @@ +import ELECTRON_EVENTS from '../../../desktop/ELECTRON_EVENTS'; + +// We conditionally import the ipcRenderer here so that we can +// communicate with the main Electron process in main.js +const ipcRenderer = window.require ? window.require('electron').ipcRenderer : null; + +/** + * Web browsers have a tab title and favicon which can be updated to show there are unread comments + */ +import CONFIG from '../../CONFIG'; + +function updateUnread() { + const hasUnread = totalCount > 0; + document.title = hasUnread ? `(NEW!) ${CONFIG.SITE_TITLE}` : CONFIG.SITE_TITLE; + document.getElementById('favicon').href = hasUnread ? CONFIG.FAVICON.UNREAD : CONFIG.FAVICON.DEFAULT; + + if (ipcRenderer) { + // Ask the main Electron process to update our + // badge count in the Mac OS dock icon + ipcRenderer.send(ELECTRON_EVENTS.REQUEST_UPDATE_BADGE_COUNT, totalCount); + } +} + +export default updateUnread; diff --git a/src/lib/UnreadIndicatorUpdater/updateUnread/index.native.js b/src/lib/UnreadIndicatorUpdater/updateUnread/index.native.js new file mode 100644 index 000000000000..22fc9c4b3df1 --- /dev/null +++ b/src/lib/UnreadIndicatorUpdater/updateUnread/index.native.js @@ -0,0 +1,14 @@ +import PushNotificationIOS from '@react-native-community/push-notification-ios'; + +/** + * Set the App Icon badge with the number of + * unread messages on iOS + * + * @param {Number} totalCount + */ +function updateUnread(totalCount) { + console.log('setting the application badge number: ', totalCount); + PushNotificationIOS.setApplicationIconBadgeNumber(totalCount); +} + +export default updateUnread; From 2ec176ebcabc6f3dbe4c90981c2fd6902e828d1c Mon Sep 17 00:00:00 2001 From: Marc Glasser Date: Tue, 22 Sep 2020 17:23:54 -0700 Subject: [PATCH 11/30] fix broken imports --- src/lib/UnreadIndicatorUpdater/updateUnread/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lib/UnreadIndicatorUpdater/updateUnread/index.js b/src/lib/UnreadIndicatorUpdater/updateUnread/index.js index 27b9baef48a1..0c6efa9e6533 100644 --- a/src/lib/UnreadIndicatorUpdater/updateUnread/index.js +++ b/src/lib/UnreadIndicatorUpdater/updateUnread/index.js @@ -1,4 +1,4 @@ -import ELECTRON_EVENTS from '../../../desktop/ELECTRON_EVENTS'; +import ELECTRON_EVENTS from '../../../../desktop/ELECTRON_EVENTS'; // We conditionally import the ipcRenderer here so that we can // communicate with the main Electron process in main.js @@ -7,7 +7,7 @@ const ipcRenderer = window.require ? window.require('electron').ipcRenderer : nu /** * Web browsers have a tab title and favicon which can be updated to show there are unread comments */ -import CONFIG from '../../CONFIG'; +import CONFIG from '../../../CONFIG'; function updateUnread() { const hasUnread = totalCount > 0; From 5766871848568b58fd7d15f28cde95529d121f71 Mon Sep 17 00:00:00 2001 From: Marc Glasser Date: Tue, 22 Sep 2020 17:29:03 -0700 Subject: [PATCH 12/30] Implement iOS --- .../UnreadIndicatorUpdater/updateUnread/index.js | 14 ++++++++++---- .../updateUnread/index.native.js | 1 - 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/lib/UnreadIndicatorUpdater/updateUnread/index.js b/src/lib/UnreadIndicatorUpdater/updateUnread/index.js index 0c6efa9e6533..c4f165a1155f 100644 --- a/src/lib/UnreadIndicatorUpdater/updateUnread/index.js +++ b/src/lib/UnreadIndicatorUpdater/updateUnread/index.js @@ -1,15 +1,21 @@ import ELECTRON_EVENTS from '../../../../desktop/ELECTRON_EVENTS'; +/** + * Web browsers have a tab title and favicon which can be updated to show there are unread comments + */ +import CONFIG from '../../../CONFIG'; + // We conditionally import the ipcRenderer here so that we can // communicate with the main Electron process in main.js const ipcRenderer = window.require ? window.require('electron').ipcRenderer : null; + /** - * Web browsers have a tab title and favicon which can be updated to show there are unread comments + * Set the App Icon badge on desktop and page title on web + * + * @param {Number} totalCount */ -import CONFIG from '../../../CONFIG'; - -function updateUnread() { +function updateUnread(totalCount) { const hasUnread = totalCount > 0; document.title = hasUnread ? `(NEW!) ${CONFIG.SITE_TITLE}` : CONFIG.SITE_TITLE; document.getElementById('favicon').href = hasUnread ? CONFIG.FAVICON.UNREAD : CONFIG.FAVICON.DEFAULT; diff --git a/src/lib/UnreadIndicatorUpdater/updateUnread/index.native.js b/src/lib/UnreadIndicatorUpdater/updateUnread/index.native.js index 22fc9c4b3df1..1f9070be74f9 100644 --- a/src/lib/UnreadIndicatorUpdater/updateUnread/index.native.js +++ b/src/lib/UnreadIndicatorUpdater/updateUnread/index.native.js @@ -7,7 +7,6 @@ import PushNotificationIOS from '@react-native-community/push-notification-ios'; * @param {Number} totalCount */ function updateUnread(totalCount) { - console.log('setting the application badge number: ', totalCount); PushNotificationIOS.setApplicationIconBadgeNumber(totalCount); } From 4499c7e519b3c0a0991aa58400f6914b73665817 Mon Sep 17 00:00:00 2001 From: Marc Glasser Date: Tue, 22 Sep 2020 18:38:10 -0700 Subject: [PATCH 13/30] remove new line --- src/lib/UnreadIndicatorUpdater/updateUnread/index.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/lib/UnreadIndicatorUpdater/updateUnread/index.js b/src/lib/UnreadIndicatorUpdater/updateUnread/index.js index c4f165a1155f..503065f5918d 100644 --- a/src/lib/UnreadIndicatorUpdater/updateUnread/index.js +++ b/src/lib/UnreadIndicatorUpdater/updateUnread/index.js @@ -9,7 +9,6 @@ import CONFIG from '../../../CONFIG'; // communicate with the main Electron process in main.js const ipcRenderer = window.require ? window.require('electron').ipcRenderer : null; - /** * Set the App Icon badge on desktop and page title on web * From f83cfe7c4f073bea5edf45cead8ea635d2f97b80 Mon Sep 17 00:00:00 2001 From: Marc Glasser Date: Wed, 23 Sep 2020 22:36:15 -0700 Subject: [PATCH 14/30] create a index.desktop.js and index.website.js file --- .../updateUnread/index.desktop.js | 15 ++++++++++ .../updateUnread/index.js | 29 ------------------- .../updateUnread/index.website.js | 17 +++++++++++ 3 files changed, 32 insertions(+), 29 deletions(-) create mode 100644 src/lib/UnreadIndicatorUpdater/updateUnread/index.desktop.js delete mode 100644 src/lib/UnreadIndicatorUpdater/updateUnread/index.js create mode 100644 src/lib/UnreadIndicatorUpdater/updateUnread/index.website.js diff --git a/src/lib/UnreadIndicatorUpdater/updateUnread/index.desktop.js b/src/lib/UnreadIndicatorUpdater/updateUnread/index.desktop.js new file mode 100644 index 000000000000..d552a8aa21b5 --- /dev/null +++ b/src/lib/UnreadIndicatorUpdater/updateUnread/index.desktop.js @@ -0,0 +1,15 @@ +import ELECTRON_EVENTS from '../../../../desktop/ELECTRON_EVENTS'; +const ipcRenderer = window.require('electron').ipcRenderer; + +/** + * Set the badge on desktop + * + * @param {Number} totalCount + */ +function updateUnread(totalCount) { + // Ask the main Electron process to update our + // badge count in the Mac OS dock icon + ipcRenderer.send(ELECTRON_EVENTS.REQUEST_UPDATE_BADGE_COUNT, totalCount); +} + +export default updateUnread; diff --git a/src/lib/UnreadIndicatorUpdater/updateUnread/index.js b/src/lib/UnreadIndicatorUpdater/updateUnread/index.js deleted file mode 100644 index 503065f5918d..000000000000 --- a/src/lib/UnreadIndicatorUpdater/updateUnread/index.js +++ /dev/null @@ -1,29 +0,0 @@ -import ELECTRON_EVENTS from '../../../../desktop/ELECTRON_EVENTS'; - -/** - * Web browsers have a tab title and favicon which can be updated to show there are unread comments - */ -import CONFIG from '../../../CONFIG'; - -// We conditionally import the ipcRenderer here so that we can -// communicate with the main Electron process in main.js -const ipcRenderer = window.require ? window.require('electron').ipcRenderer : null; - -/** - * Set the App Icon badge on desktop and page title on web - * - * @param {Number} totalCount - */ -function updateUnread(totalCount) { - const hasUnread = totalCount > 0; - document.title = hasUnread ? `(NEW!) ${CONFIG.SITE_TITLE}` : CONFIG.SITE_TITLE; - document.getElementById('favicon').href = hasUnread ? CONFIG.FAVICON.UNREAD : CONFIG.FAVICON.DEFAULT; - - if (ipcRenderer) { - // Ask the main Electron process to update our - // badge count in the Mac OS dock icon - ipcRenderer.send(ELECTRON_EVENTS.REQUEST_UPDATE_BADGE_COUNT, totalCount); - } -} - -export default updateUnread; diff --git a/src/lib/UnreadIndicatorUpdater/updateUnread/index.website.js b/src/lib/UnreadIndicatorUpdater/updateUnread/index.website.js new file mode 100644 index 000000000000..2f5c2769ed9f --- /dev/null +++ b/src/lib/UnreadIndicatorUpdater/updateUnread/index.website.js @@ -0,0 +1,17 @@ +/** + * Web browsers have a tab title and favicon which can be updated to show there are unread comments + */ +import CONFIG from '../../../CONFIG'; + +/** + * Set the page title on web + * + * @param {Number} totalCount + */ +function updateUnread(totalCount) { + const hasUnread = totalCount > 0; + document.title = hasUnread ? `(NEW!) ${CONFIG.SITE_TITLE}` : CONFIG.SITE_TITLE; + document.getElementById('favicon').href = hasUnread ? CONFIG.FAVICON.UNREAD : CONFIG.FAVICON.DEFAULT; +} + +export default updateUnread; From 2ddade2ee582eb007aead0095e859c8589f0a7e6 Mon Sep 17 00:00:00 2001 From: Marc Glasser Date: Wed, 23 Sep 2020 22:37:58 -0700 Subject: [PATCH 15/30] add android and ios --- src/lib/UnreadIndicatorUpdater/updateUnread/index.android.js | 2 ++ .../updateUnread/{index.native.js => index.ios.js} | 0 2 files changed, 2 insertions(+) create mode 100644 src/lib/UnreadIndicatorUpdater/updateUnread/index.android.js rename src/lib/UnreadIndicatorUpdater/updateUnread/{index.native.js => index.ios.js} (100%) diff --git a/src/lib/UnreadIndicatorUpdater/updateUnread/index.android.js b/src/lib/UnreadIndicatorUpdater/updateUnread/index.android.js new file mode 100644 index 000000000000..731b8058a9a7 --- /dev/null +++ b/src/lib/UnreadIndicatorUpdater/updateUnread/index.android.js @@ -0,0 +1,2 @@ +// Android does not yet implement this +export default () => {}; diff --git a/src/lib/UnreadIndicatorUpdater/updateUnread/index.native.js b/src/lib/UnreadIndicatorUpdater/updateUnread/index.ios.js similarity index 100% rename from src/lib/UnreadIndicatorUpdater/updateUnread/index.native.js rename to src/lib/UnreadIndicatorUpdater/updateUnread/index.ios.js From f6b99582bea330668377bed8c1519dd6f40e4d9f Mon Sep 17 00:00:00 2001 From: Marc Glasser Date: Wed, 23 Sep 2020 22:38:38 -0700 Subject: [PATCH 16/30] fix comment --- src/lib/UnreadIndicatorUpdater/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lib/UnreadIndicatorUpdater/index.js b/src/lib/UnreadIndicatorUpdater/index.js index f45b6bfaf08f..8f94bf2c144e 100644 --- a/src/lib/UnreadIndicatorUpdater/index.js +++ b/src/lib/UnreadIndicatorUpdater/index.js @@ -1,14 +1,14 @@ import _ from 'underscore'; import Ion from '../Ion'; import IONKEYS from '../../IONKEYS'; -import updateUnread from './updateUnread'; +import updateUnread from './updateUnread/index.website'; // Stash the unread action counts for each report const unreadActionCounts = {}; /** * Updates the title and favicon of the current browser tab - * and Mac OS dock icon with an unread indicator. + * and Mac OS or iOS dock icon with an unread indicator. */ const throttledUpdatePageTitleAndUnreadCount = _.throttle(() => { const totalCount = _.reduce(unreadActionCounts, (total, reportCount) => total + reportCount, 0); From 4608b095f6e0e6448daab389222071f5a329ce5f Mon Sep 17 00:00:00 2001 From: Marc Glasser Date: Fri, 25 Sep 2020 15:30:14 -0700 Subject: [PATCH 17/30] eslint likes new lines --- src/lib/UnreadIndicatorUpdater/updateUnread/index.desktop.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lib/UnreadIndicatorUpdater/updateUnread/index.desktop.js b/src/lib/UnreadIndicatorUpdater/updateUnread/index.desktop.js index d552a8aa21b5..34176ff9b7bd 100644 --- a/src/lib/UnreadIndicatorUpdater/updateUnread/index.desktop.js +++ b/src/lib/UnreadIndicatorUpdater/updateUnread/index.desktop.js @@ -1,4 +1,5 @@ import ELECTRON_EVENTS from '../../../../desktop/ELECTRON_EVENTS'; + const ipcRenderer = window.require('electron').ipcRenderer; /** From 21a950b37fe3aae3c76b531fd23ea070330de435 Mon Sep 17 00:00:00 2001 From: Rory Abraham Date: Mon, 28 Sep 2020 10:05:39 -0700 Subject: [PATCH 18/30] fix index.website.js bundler for cross platform and fix import --- ios/ReactNativeChat.xcodeproj/project.pbxproj | 130 +++++++++--------- metro.config.js | 5 + src/lib/UnreadIndicatorUpdater/index.js | 2 +- 3 files changed, 71 insertions(+), 66 deletions(-) diff --git a/ios/ReactNativeChat.xcodeproj/project.pbxproj b/ios/ReactNativeChat.xcodeproj/project.pbxproj index b7bee2e0dff4..c94bd283b05e 100644 --- a/ios/ReactNativeChat.xcodeproj/project.pbxproj +++ b/ios/ReactNativeChat.xcodeproj/project.pbxproj @@ -8,17 +8,17 @@ /* Begin PBXBuildFile section */ 00E356F31AD99517003FC87E /* ReactNativeChatTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* ReactNativeChatTests.m */; }; - 097C76E5807C5DFC565DC655 /* libPods-ReactNativeChat-ReactNativeChatTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = C4F81DB9C6DA6418525441E5 /* libPods-ReactNativeChat-ReactNativeChatTests.a */; }; 11FA3546D54246CD8F819152 /* GTAmericaExp-Bold.otf in Resources */ = {isa = PBXBuildFile; fileRef = A5AAD008CBD84A6CAEB9AC97 /* GTAmericaExp-Bold.otf */; }; 13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; }; 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; 13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; - 347C4A976B972BC7A903F97D /* libPods-ReactNativeChat.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 6ABF95746519766B23B4E2D0 /* libPods-ReactNativeChat.a */; }; + 4240AE54CAE449C1152C6BDE /* libPods-ReactNativeChat-ReactNativeChatTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 88C2B58752759FFC71A856C2 /* libPods-ReactNativeChat-ReactNativeChatTests.a */; }; 4912B60FA66C4604A56AD575 /* GTAmericaExp-Regular.otf in Resources */ = {isa = PBXBuildFile; fileRef = 8C7003903C1E4957824899BB /* GTAmericaExp-Regular.otf */; }; 49F157C845CE4D56AA72B80E /* GTAmericaExp-Light.otf in Resources */ = {isa = PBXBuildFile; fileRef = 67D5C3A6A7FA417C8A853FC1 /* GTAmericaExp-Light.otf */; }; 7F7721B764D444D6861A9B39 /* GTAmericaExp-Thin.otf in Resources */ = {isa = PBXBuildFile; fileRef = A292718541C841859D97DF2F /* GTAmericaExp-Thin.otf */; }; 81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */; }; CC07911F22C2437DA6708BD2 /* GTAmericaExp-Medium.otf in Resources */ = {isa = PBXBuildFile; fileRef = AE65058949E14DA5A2D5435D /* GTAmericaExp-Medium.otf */; }; + FC9F1F30A3B563D480032A24 /* libPods-ReactNativeChat.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B2E64A28C6D8EC058C5C3144 /* libPods-ReactNativeChat.a */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,19 +42,19 @@ 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = ReactNativeChat/Images.xcassets; sourceTree = ""; }; 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = ReactNativeChat/Info.plist; sourceTree = ""; }; 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = ReactNativeChat/main.m; sourceTree = ""; }; - 1CFBC073CF30A72CCF109A40 /* Pods-ReactNativeChat-ReactNativeChatTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ReactNativeChat-ReactNativeChatTests.release.xcconfig"; path = "Target Support Files/Pods-ReactNativeChat-ReactNativeChatTests/Pods-ReactNativeChat-ReactNativeChatTests.release.xcconfig"; sourceTree = ""; }; + 2061509B833DB0123E4416F5 /* Pods-ReactNativeChat.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ReactNativeChat.release.xcconfig"; path = "Target Support Files/Pods-ReactNativeChat/Pods-ReactNativeChat.release.xcconfig"; sourceTree = ""; }; 499D0486251AC7F1000B666B /* Chat.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; name = Chat.entitlements; path = ReactNativeChat/Chat.entitlements; sourceTree = ""; }; + 66FC9F8F0AF1190BE595FC04 /* Pods-ReactNativeChat.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ReactNativeChat.debug.xcconfig"; path = "Target Support Files/Pods-ReactNativeChat/Pods-ReactNativeChat.debug.xcconfig"; sourceTree = ""; }; 67D5C3A6A7FA417C8A853FC1 /* GTAmericaExp-Light.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "GTAmericaExp-Light.otf"; path = "../assets/fonts/GTAmericaExp-Light.otf"; sourceTree = ""; }; - 6ABF95746519766B23B4E2D0 /* libPods-ReactNativeChat.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-ReactNativeChat.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = ReactNativeChat/LaunchScreen.storyboard; sourceTree = ""; }; + 88C2B58752759FFC71A856C2 /* libPods-ReactNativeChat-ReactNativeChatTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-ReactNativeChat-ReactNativeChatTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 8C7003903C1E4957824899BB /* GTAmericaExp-Regular.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "GTAmericaExp-Regular.otf"; path = "../assets/fonts/GTAmericaExp-Regular.otf"; sourceTree = ""; }; - 9B9FEA91E46D2B2609028E69 /* Pods-ReactNativeChat.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ReactNativeChat.debug.xcconfig"; path = "Target Support Files/Pods-ReactNativeChat/Pods-ReactNativeChat.debug.xcconfig"; sourceTree = ""; }; A292718541C841859D97DF2F /* GTAmericaExp-Thin.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "GTAmericaExp-Thin.otf"; path = "../assets/fonts/GTAmericaExp-Thin.otf"; sourceTree = ""; }; A5AAD008CBD84A6CAEB9AC97 /* GTAmericaExp-Bold.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "GTAmericaExp-Bold.otf"; path = "../assets/fonts/GTAmericaExp-Bold.otf"; sourceTree = ""; }; AE65058949E14DA5A2D5435D /* GTAmericaExp-Medium.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "GTAmericaExp-Medium.otf"; path = "../assets/fonts/GTAmericaExp-Medium.otf"; sourceTree = ""; }; - BA6C613DE6755E40F7EDDC68 /* Pods-ReactNativeChat-ReactNativeChatTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ReactNativeChat-ReactNativeChatTests.debug.xcconfig"; path = "Target Support Files/Pods-ReactNativeChat-ReactNativeChatTests/Pods-ReactNativeChat-ReactNativeChatTests.debug.xcconfig"; sourceTree = ""; }; - C4F81DB9C6DA6418525441E5 /* libPods-ReactNativeChat-ReactNativeChatTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-ReactNativeChat-ReactNativeChatTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - C6C1D4F5C262ACDAF1800CAD /* Pods-ReactNativeChat.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ReactNativeChat.release.xcconfig"; path = "Target Support Files/Pods-ReactNativeChat/Pods-ReactNativeChat.release.xcconfig"; sourceTree = ""; }; + B2E64A28C6D8EC058C5C3144 /* libPods-ReactNativeChat.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-ReactNativeChat.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + B81A8F09B6065AF7D0A5D2CD /* Pods-ReactNativeChat-ReactNativeChatTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ReactNativeChat-ReactNativeChatTests.release.xcconfig"; path = "Target Support Files/Pods-ReactNativeChat-ReactNativeChatTests/Pods-ReactNativeChat-ReactNativeChatTests.release.xcconfig"; sourceTree = ""; }; + BB3B578785B6B7D4E739A8C8 /* Pods-ReactNativeChat-ReactNativeChatTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ReactNativeChat-ReactNativeChatTests.debug.xcconfig"; path = "Target Support Files/Pods-ReactNativeChat-ReactNativeChatTests/Pods-ReactNativeChat-ReactNativeChatTests.debug.xcconfig"; sourceTree = ""; }; ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; }; ED2971642150620600B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS12.0.sdk/System/Library/Frameworks/JavaScriptCore.framework; sourceTree = DEVELOPER_DIR; }; /* End PBXFileReference section */ @@ -64,7 +64,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 097C76E5807C5DFC565DC655 /* libPods-ReactNativeChat-ReactNativeChatTests.a in Frameworks */, + 4240AE54CAE449C1152C6BDE /* libPods-ReactNativeChat-ReactNativeChatTests.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -72,7 +72,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 347C4A976B972BC7A903F97D /* libPods-ReactNativeChat.a in Frameworks */, + FC9F1F30A3B563D480032A24 /* libPods-ReactNativeChat.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -116,8 +116,8 @@ children = ( ED297162215061F000B7C4FE /* JavaScriptCore.framework */, ED2971642150620600B7C4FE /* JavaScriptCore.framework */, - 6ABF95746519766B23B4E2D0 /* libPods-ReactNativeChat.a */, - C4F81DB9C6DA6418525441E5 /* libPods-ReactNativeChat-ReactNativeChatTests.a */, + B2E64A28C6D8EC058C5C3144 /* libPods-ReactNativeChat.a */, + 88C2B58752759FFC71A856C2 /* libPods-ReactNativeChat-ReactNativeChatTests.a */, ); name = Frameworks; sourceTree = ""; @@ -169,10 +169,10 @@ EC29677F0A49C2946A495A33 /* Pods */ = { isa = PBXGroup; children = ( - 9B9FEA91E46D2B2609028E69 /* Pods-ReactNativeChat.debug.xcconfig */, - C6C1D4F5C262ACDAF1800CAD /* Pods-ReactNativeChat.release.xcconfig */, - BA6C613DE6755E40F7EDDC68 /* Pods-ReactNativeChat-ReactNativeChatTests.debug.xcconfig */, - 1CFBC073CF30A72CCF109A40 /* Pods-ReactNativeChat-ReactNativeChatTests.release.xcconfig */, + 66FC9F8F0AF1190BE595FC04 /* Pods-ReactNativeChat.debug.xcconfig */, + 2061509B833DB0123E4416F5 /* Pods-ReactNativeChat.release.xcconfig */, + BB3B578785B6B7D4E739A8C8 /* Pods-ReactNativeChat-ReactNativeChatTests.debug.xcconfig */, + B81A8F09B6065AF7D0A5D2CD /* Pods-ReactNativeChat-ReactNativeChatTests.release.xcconfig */, ); path = Pods; sourceTree = ""; @@ -184,11 +184,11 @@ isa = PBXNativeTarget; buildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "ReactNativeChatTests" */; buildPhases = ( - 67625BD6E56D7B445CE0B75D /* [CP] Check Pods Manifest.lock */, + ECEBF6D927AD6913C7D49FAA /* [CP] Check Pods Manifest.lock */, 00E356EA1AD99517003FC87E /* Sources */, 00E356EB1AD99517003FC87E /* Frameworks */, 00E356EC1AD99517003FC87E /* Resources */, - 740ED6E57E4D77AE97454014 /* [CP] Copy Pods Resources */, + 96F29378CAD503EE24A4238F /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -204,13 +204,13 @@ isa = PBXNativeTarget; buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "ReactNativeChat" */; buildPhases = ( - 25778851D923FF95A2D6EE6D /* [CP] Check Pods Manifest.lock */, + C918B32D93F5DFC09167D222 /* [CP] Check Pods Manifest.lock */, FD10A7F022414F080027D42C /* Start Packager */, 13B07F871A680F5B00A75B9A /* Sources */, 13B07F8C1A680F5B00A75B9A /* Frameworks */, 13B07F8E1A680F5B00A75B9A /* Resources */, 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */, - 930B6ED2A0414681598DB7E1 /* [CP] Copy Pods Resources */, + 2BEB5135F1A6A0AFC39DEE60 /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -237,7 +237,7 @@ 13B07F861A680F5B00A75B9A = { DevelopmentTeam = 368M544MTT; LastSwiftMigration = 1120; - ProvisioningStyle = Manual; + ProvisioningStyle = Automatic; }; }; }; @@ -299,84 +299,84 @@ shellPath = /bin/sh; shellScript = "export NODE_BINARY=node\n../node_modules/react-native/scripts/react-native-xcode.sh"; }; - 25778851D923FF95A2D6EE6D /* [CP] Check Pods Manifest.lock */ = { + 2BEB5135F1A6A0AFC39DEE60 /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-ReactNativeChat/Pods-ReactNativeChat-resources.sh", + "${PODS_CONFIGURATION_BUILD_DIR}/React-Core/AccessibilityResources.bundle", ); + name = "[CP] Copy Pods Resources"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-ReactNativeChat-checkManifestLockResult.txt", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AccessibilityResources.bundle", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-ReactNativeChat/Pods-ReactNativeChat-resources.sh\"\n"; showEnvVarsInLog = 0; }; - 67625BD6E56D7B445CE0B75D /* [CP] Check Pods Manifest.lock */ = { + 96F29378CAD503EE24A4238F /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-ReactNativeChat-ReactNativeChatTests/Pods-ReactNativeChat-ReactNativeChatTests-resources.sh", + "${PODS_CONFIGURATION_BUILD_DIR}/React-Core/AccessibilityResources.bundle", ); + name = "[CP] Copy Pods Resources"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-ReactNativeChat-ReactNativeChatTests-checkManifestLockResult.txt", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AccessibilityResources.bundle", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-ReactNativeChat-ReactNativeChatTests/Pods-ReactNativeChat-ReactNativeChatTests-resources.sh\"\n"; showEnvVarsInLog = 0; }; - 740ED6E57E4D77AE97454014 /* [CP] Copy Pods Resources */ = { + C918B32D93F5DFC09167D222 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-ReactNativeChat-ReactNativeChatTests/Pods-ReactNativeChat-ReactNativeChatTests-resources.sh", - "${PODS_CONFIGURATION_BUILD_DIR}/React-Core/AccessibilityResources.bundle", + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "[CP] Copy Pods Resources"; outputPaths = ( - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AccessibilityResources.bundle", + "$(DERIVED_FILE_DIR)/Pods-ReactNativeChat-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-ReactNativeChat-ReactNativeChatTests/Pods-ReactNativeChat-ReactNativeChatTests-resources.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 930B6ED2A0414681598DB7E1 /* [CP] Copy Pods Resources */ = { + ECEBF6D927AD6913C7D49FAA /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-ReactNativeChat/Pods-ReactNativeChat-resources.sh", - "${PODS_CONFIGURATION_BUILD_DIR}/React-Core/AccessibilityResources.bundle", + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "[CP] Copy Pods Resources"; outputPaths = ( - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AccessibilityResources.bundle", + "$(DERIVED_FILE_DIR)/Pods-ReactNativeChat-ReactNativeChatTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-ReactNativeChat/Pods-ReactNativeChat-resources.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; FD10A7F022414F080027D42C /* Start Packager */ = { @@ -431,7 +431,7 @@ /* Begin XCBuildConfiguration section */ 00E356F61AD99517003FC87E /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = BA6C613DE6755E40F7EDDC68 /* Pods-ReactNativeChat-ReactNativeChatTests.debug.xcconfig */; + baseConfigurationReference = BB3B578785B6B7D4E739A8C8 /* Pods-ReactNativeChat-ReactNativeChatTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -455,7 +455,7 @@ }; 00E356F71AD99517003FC87E /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1CFBC073CF30A72CCF109A40 /* Pods-ReactNativeChat-ReactNativeChatTests.release.xcconfig */; + baseConfigurationReference = B81A8F09B6065AF7D0A5D2CD /* Pods-ReactNativeChat-ReactNativeChatTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -476,15 +476,15 @@ }; 13B07F941A680F5B00A75B9A /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9B9FEA91E46D2B2609028E69 /* Pods-ReactNativeChat.debug.xcconfig */; + baseConfigurationReference = 66FC9F8F0AF1190BE595FC04 /* Pods-ReactNativeChat.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = ReactNativeChat/Chat.entitlements; - CODE_SIGN_IDENTITY = "iPhone Distribution"; - CODE_SIGN_STYLE = Manual; + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 3; - DEVELOPMENT_TEAM = 368M544MTT; + DEVELOPMENT_TEAM = ""; ENABLE_BITCODE = NO; INFOPLIST_FILE = ReactNativeChat/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; @@ -496,7 +496,7 @@ ); PRODUCT_BUNDLE_IDENTIFIER = com.chat.expensify.chat; PRODUCT_NAME = Chat; - PROVISIONING_PROFILE_SPECIFIER = chat_expensify_appstore; + PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; @@ -506,15 +506,15 @@ }; 13B07F951A680F5B00A75B9A /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C6C1D4F5C262ACDAF1800CAD /* Pods-ReactNativeChat.release.xcconfig */; + baseConfigurationReference = 2061509B833DB0123E4416F5 /* Pods-ReactNativeChat.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = ReactNativeChat/Chat.entitlements; - CODE_SIGN_IDENTITY = "iPhone Distribution"; - CODE_SIGN_STYLE = Manual; + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 3; - DEVELOPMENT_TEAM = 368M544MTT; + DEVELOPMENT_TEAM = ""; INFOPLIST_FILE = ReactNativeChat/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; MARKETING_VERSION = 1.0.0; @@ -525,7 +525,7 @@ ); PRODUCT_BUNDLE_IDENTIFIER = com.chat.expensify.chat; PRODUCT_NAME = Chat; - PROVISIONING_PROFILE_SPECIFIER = chat_expensify_appstore; + PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; diff --git a/metro.config.js b/metro.config.js index 783f3499c2cb..4d3ed08388cc 100644 --- a/metro.config.js +++ b/metro.config.js @@ -5,7 +5,12 @@ * @format */ +const blacklist = require('metro-config/src/defaults/blacklist'); + module.exports = { + resolver: { + blacklistRE: blacklist([new RegExp(/.*\.website\.js$/), new RegExp(/.*\.desktop\.js$/)]), + }, transformer: { getTransformOptions: async () => ({ transform: { diff --git a/src/lib/UnreadIndicatorUpdater/index.js b/src/lib/UnreadIndicatorUpdater/index.js index 8f94bf2c144e..f29d76b54d13 100644 --- a/src/lib/UnreadIndicatorUpdater/index.js +++ b/src/lib/UnreadIndicatorUpdater/index.js @@ -1,7 +1,7 @@ import _ from 'underscore'; import Ion from '../Ion'; import IONKEYS from '../../IONKEYS'; -import updateUnread from './updateUnread/index.website'; +import updateUnread from './updateUnread'; // Stash the unread action counts for each report const unreadActionCounts = {}; From 34d66f58ebec44bc2f8a3a5cf6b0ab0f0fdecf1c Mon Sep 17 00:00:00 2001 From: Rory Abraham Date: Mon, 28 Sep 2020 10:50:34 -0700 Subject: [PATCH 19/30] remove unnecessary blacklist code --- metro.config.js | 4 ---- 1 file changed, 4 deletions(-) diff --git a/metro.config.js b/metro.config.js index 4d3ed08388cc..f7188003cc97 100644 --- a/metro.config.js +++ b/metro.config.js @@ -5,12 +5,8 @@ * @format */ -const blacklist = require('metro-config/src/defaults/blacklist'); module.exports = { - resolver: { - blacklistRE: blacklist([new RegExp(/.*\.website\.js$/), new RegExp(/.*\.desktop\.js$/)]), - }, transformer: { getTransformOptions: async () => ({ transform: { From dd72182a9d898abb921a7234ef327efcd7fcc114 Mon Sep 17 00:00:00 2001 From: Marc Glasser Date: Thu, 1 Oct 2020 11:27:02 -0700 Subject: [PATCH 20/30] fix conflicts --- src/page/home/MainView.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/page/home/MainView.js b/src/page/home/MainView.js index 6a0ce6e68831..af59011d7369 100644 --- a/src/page/home/MainView.js +++ b/src/page/home/MainView.js @@ -51,7 +51,7 @@ class MainView extends Component { const reportsToDisplay = _.filter(this.props.reports, report => ( report.pinnedReport - || report.isUnread + || report.unreadActionCount > 0 || report.reportID === reportIDInUrl )); return ( From a5792ceb293c330351bb1068858dc4f2a255344c Mon Sep 17 00:00:00 2001 From: Marc Glasser Date: Thu, 1 Oct 2020 11:33:22 -0700 Subject: [PATCH 21/30] use Math.max remove new line --- metro.config.js | 1 - src/lib/actions/Report.js | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/metro.config.js b/metro.config.js index f7188003cc97..783f3499c2cb 100644 --- a/metro.config.js +++ b/metro.config.js @@ -5,7 +5,6 @@ * @format */ - module.exports = { transformer: { getTransformOptions: async () => ({ diff --git a/src/lib/actions/Report.js b/src/lib/actions/Report.js index 07c204f649d2..e938119315d0 100644 --- a/src/lib/actions/Report.js +++ b/src/lib/actions/Report.js @@ -77,7 +77,7 @@ function getUnreadActionCount(report) { // There are unread items if the last one the user has read is less // than the highest sequence number we have. const unreadActionCount = (maxSequenceNumber || report.reportActionList.length) - usersLastReadActionID; - return unreadActionCount > 0 ? unreadActionCount : 0; + return Math.max(0, unreadActionCount); } /** From c640d6fc51e619fe94de842b46fc6c87991faada Mon Sep 17 00:00:00 2001 From: Marc Glasser Date: Mon, 5 Oct 2020 20:29:48 -0700 Subject: [PATCH 22/30] Fix bug where chat reports would not showing up as unread --- src/lib/actions/Report.js | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/src/lib/actions/Report.js b/src/lib/actions/Report.js index e938119315d0..9678d8e65a88 100644 --- a/src/lib/actions/Report.js +++ b/src/lib/actions/Report.js @@ -71,12 +71,12 @@ function getUnreadActionCount(report) { return report.reportActionList.length; } - // Find the most recent sequence number from the report actions - const maxSequenceNumber = reportMaxSequenceNumbers[report.reportID]; + // Find the most recent sequence number from the report itself or the local store of max sequence numbers + const maxSequenceNumber = Math.max(reportMaxSequenceNumbers[report.reportID] || 0, report.reportActionList.length); // There are unread items if the last one the user has read is less // than the highest sequence number we have. - const unreadActionCount = (maxSequenceNumber || report.reportActionList.length) - usersLastReadActionID; + const unreadActionCount = maxSequenceNumber - usersLastReadActionID; return Math.max(0, unreadActionCount); } @@ -91,6 +91,7 @@ function getUnreadActionCount(report) { * @returns {object} */ function getSimplifiedReportObject(report) { + const maxSequenceNumber = Math.max(reportMaxSequenceNumbers[report.reportID] || 0, report.reportActionList.length); const unreadActionCount = getUnreadActionCount(report); return { reportID: report.reportID, @@ -98,6 +99,7 @@ function getSimplifiedReportObject(report) { reportNameValuePairs: report.reportNameValuePairs, unreadActionCount, pinnedReport: configReportIDs.includes(report.reportID), + maxSequenceNumber, }; } @@ -150,9 +152,8 @@ function fetchChatReportsByIDs(chatList) { PersonalDetails.getForEmails(emails.join(',')); } - // Process the reports and store them in Ion - const ionPromises = _.map(fetchedReports, (report) => { + _.each(fetchedReports, (report) => { const newReport = getSimplifiedReportObject(report); if (lodashGet(report, 'reportNameValuePairs.type') === 'chat') { @@ -163,7 +164,7 @@ function fetchChatReportsByIDs(chatList) { Ion.merge(`${IONKEYS.COLLECTION.REPORT}${report.reportID}`, newReport); }); - return Promise.all(ionPromises); + return {reports: fetchedReports}; }); } @@ -298,13 +299,21 @@ function fetchAll(shouldRedirectToFirstReport = true, shouldFetchActions = false .then((data) => { fetchedReports = _.compact(_.map(data, (promiseResult) => { // Grab the report from the promise result which stores it in the `value` key - const report = lodashGet(promiseResult, 'value.reports', {}); + const reports = lodashGet(promiseResult, 'value.reports', {}); + + // If there are multiple reports then these are the chat reports + if (_.size(reports) > 1) { + return null; + } // If there is no report found from the promise, return null // Otherwise, grab the actual report object from the first index in the values array - return _.isEmpty(report) ? null : _.values(report)[0]; + return _.isEmpty(reports) ? null : _.values(reports)[0]; })); + const chatReports = lodashGet(_.last(data), 'value.reports', {}); + _.each(chatReports, report => fetchedReports.push(report)); + // Set the first report ID so that the logged in person can be redirected there // if they are on the home page if (shouldRedirectToFirstReport && (currentURL === '/' || currentURL === '/home')) { From 92bf235174e535cc917ecab76e8ec5c561baaf65 Mon Sep 17 00:00:00 2001 From: Marc Glasser Date: Wed, 7 Oct 2020 16:40:07 -0700 Subject: [PATCH 23/30] woops --- ios/ReactNativeChat.xcodeproj/project.pbxproj | 19 ++++++++++--------- src/lib/actions/Report.js | 17 ----------------- 2 files changed, 10 insertions(+), 26 deletions(-) diff --git a/ios/ReactNativeChat.xcodeproj/project.pbxproj b/ios/ReactNativeChat.xcodeproj/project.pbxproj index 9610daec576e..a29afb3d9752 100644 --- a/ios/ReactNativeChat.xcodeproj/project.pbxproj +++ b/ios/ReactNativeChat.xcodeproj/project.pbxproj @@ -8,7 +8,6 @@ /* Begin PBXBuildFile section */ 00E356F31AD99517003FC87E /* ReactNativeChatTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* ReactNativeChatTests.m */; }; - 097C76E5807C5DFC565DC655 /* libPods-ReactNativeChat-ReactNativeChatTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = C4F81DB9C6DA6418525441E5 /* libPods-ReactNativeChat-ReactNativeChatTests.a */; }; 12DD1878FCB9487C9F031C86 /* GTAmericaExpMono-Rg.otf in Resources */ = {isa = PBXBuildFile; fileRef = 8437A5A38F2047E0BCCD7C2F /* GTAmericaExpMono-Rg.otf */; }; 13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; }; 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; @@ -18,10 +17,11 @@ 1E76D5232522316A005A268F /* GTAmericaExp-Medium.otf in Resources */ = {isa = PBXBuildFile; fileRef = AE65058949E14DA5A2D5435D /* GTAmericaExp-Medium.otf */; }; 1E76D5242522316A005A268F /* GTAmericaExp-Regular.otf in Resources */ = {isa = PBXBuildFile; fileRef = 8C7003903C1E4957824899BB /* GTAmericaExp-Regular.otf */; }; 1E76D5252522316A005A268F /* GTAmericaExp-Thin.otf in Resources */ = {isa = PBXBuildFile; fileRef = A292718541C841859D97DF2F /* GTAmericaExp-Thin.otf */; }; - 347C4A976B972BC7A903F97D /* libPods-ReactNativeChat.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 6ABF95746519766B23B4E2D0 /* libPods-ReactNativeChat.a */; }; - 81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */; }; 425866037F4C482AAB46CB8B /* GTAmericaExp-BdIt.otf in Resources */ = {isa = PBXBuildFile; fileRef = A8D6F2F722FD4E66A38EBBB6 /* GTAmericaExp-BdIt.otf */; }; 6856B78873B64C44A92E51DB /* GTAmericaExp-MdIt.otf in Resources */ = {isa = PBXBuildFile; fileRef = DB5A1365442D4419AF6F08E5 /* GTAmericaExp-MdIt.otf */; }; + 712B637C71EDACB60BFCCFDF /* libPods-ReactNativeChat-ReactNativeChatTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5198B14DF64811534104106B /* libPods-ReactNativeChat-ReactNativeChatTests.a */; }; + 7EF88515CE8703E46E771C2D /* libPods-ReactNativeChat.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B2E64A28C6D8EC058C5C3144 /* libPods-ReactNativeChat.a */; }; + 81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */; }; 8821A238A081483FA947BC4E /* GTAmericaExp-RgIt.otf in Resources */ = {isa = PBXBuildFile; fileRef = 918D7FEFF96242E6B5F5E14D /* GTAmericaExp-RgIt.otf */; }; /* End PBXBuildFile section */ @@ -48,22 +48,23 @@ 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = ReactNativeChat/main.m; sourceTree = ""; }; 2061509B833DB0123E4416F5 /* Pods-ReactNativeChat.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ReactNativeChat.release.xcconfig"; path = "Target Support Files/Pods-ReactNativeChat/Pods-ReactNativeChat.release.xcconfig"; sourceTree = ""; }; 499D0486251AC7F1000B666B /* Chat.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; name = Chat.entitlements; path = ReactNativeChat/Chat.entitlements; sourceTree = ""; }; + 5198B14DF64811534104106B /* libPods-ReactNativeChat-ReactNativeChatTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-ReactNativeChat-ReactNativeChatTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 66FC9F8F0AF1190BE595FC04 /* Pods-ReactNativeChat.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ReactNativeChat.debug.xcconfig"; path = "Target Support Files/Pods-ReactNativeChat/Pods-ReactNativeChat.debug.xcconfig"; sourceTree = ""; }; 67D5C3A6A7FA417C8A853FC1 /* GTAmericaExp-Light.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "GTAmericaExp-Light.otf"; path = "../assets/fonts/GTAmericaExp-Light.otf"; sourceTree = ""; }; 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = ReactNativeChat/LaunchScreen.storyboard; sourceTree = ""; }; 8437A5A38F2047E0BCCD7C2F /* GTAmericaExpMono-Rg.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "GTAmericaExpMono-Rg.otf"; path = "../assets/fonts/GTAmericaExpMono-Rg.otf"; sourceTree = ""; }; 8C7003903C1E4957824899BB /* GTAmericaExp-Regular.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "GTAmericaExp-Regular.otf"; path = "../assets/fonts/GTAmericaExp-Regular.otf"; sourceTree = ""; }; + 918D7FEFF96242E6B5F5E14D /* GTAmericaExp-RgIt.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "GTAmericaExp-RgIt.otf"; path = "../assets/fonts/GTAmericaExp-RgIt.otf"; sourceTree = ""; }; A292718541C841859D97DF2F /* GTAmericaExp-Thin.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "GTAmericaExp-Thin.otf"; path = "../assets/fonts/GTAmericaExp-Thin.otf"; sourceTree = ""; }; A5AAD008CBD84A6CAEB9AC97 /* GTAmericaExp-Bold.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "GTAmericaExp-Bold.otf"; path = "../assets/fonts/GTAmericaExp-Bold.otf"; sourceTree = ""; }; + A8D6F2F722FD4E66A38EBBB6 /* GTAmericaExp-BdIt.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "GTAmericaExp-BdIt.otf"; path = "../assets/fonts/GTAmericaExp-BdIt.otf"; sourceTree = ""; }; AE65058949E14DA5A2D5435D /* GTAmericaExp-Medium.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "GTAmericaExp-Medium.otf"; path = "../assets/fonts/GTAmericaExp-Medium.otf"; sourceTree = ""; }; B2E64A28C6D8EC058C5C3144 /* libPods-ReactNativeChat.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-ReactNativeChat.a"; sourceTree = BUILT_PRODUCTS_DIR; }; B81A8F09B6065AF7D0A5D2CD /* Pods-ReactNativeChat-ReactNativeChatTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ReactNativeChat-ReactNativeChatTests.release.xcconfig"; path = "Target Support Files/Pods-ReactNativeChat-ReactNativeChatTests/Pods-ReactNativeChat-ReactNativeChatTests.release.xcconfig"; sourceTree = ""; }; BB3B578785B6B7D4E739A8C8 /* Pods-ReactNativeChat-ReactNativeChatTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ReactNativeChat-ReactNativeChatTests.debug.xcconfig"; path = "Target Support Files/Pods-ReactNativeChat-ReactNativeChatTests/Pods-ReactNativeChat-ReactNativeChatTests.debug.xcconfig"; sourceTree = ""; }; + DB5A1365442D4419AF6F08E5 /* GTAmericaExp-MdIt.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "GTAmericaExp-MdIt.otf"; path = "../assets/fonts/GTAmericaExp-MdIt.otf"; sourceTree = ""; }; ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; }; ED2971642150620600B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS12.0.sdk/System/Library/Frameworks/JavaScriptCore.framework; sourceTree = DEVELOPER_DIR; }; - A8D6F2F722FD4E66A38EBBB6 /* GTAmericaExp-BdIt.otf */ = {isa = PBXFileReference; name = "GTAmericaExp-BdIt.otf"; path = "../assets/fonts/GTAmericaExp-BdIt.otf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; }; - DB5A1365442D4419AF6F08E5 /* GTAmericaExp-MdIt.otf */ = {isa = PBXFileReference; name = "GTAmericaExp-MdIt.otf"; path = "../assets/fonts/GTAmericaExp-MdIt.otf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; }; - 918D7FEFF96242E6B5F5E14D /* GTAmericaExp-RgIt.otf */ = {isa = PBXFileReference; name = "GTAmericaExp-RgIt.otf"; path = "../assets/fonts/GTAmericaExp-RgIt.otf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -71,7 +72,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4240AE54CAE449C1152C6BDE /* libPods-ReactNativeChat-ReactNativeChatTests.a in Frameworks */, + 712B637C71EDACB60BFCCFDF /* libPods-ReactNativeChat-ReactNativeChatTests.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -79,7 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - FC9F1F30A3B563D480032A24 /* libPods-ReactNativeChat.a in Frameworks */, + 7EF88515CE8703E46E771C2D /* libPods-ReactNativeChat.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -124,7 +125,7 @@ ED297162215061F000B7C4FE /* JavaScriptCore.framework */, ED2971642150620600B7C4FE /* JavaScriptCore.framework */, B2E64A28C6D8EC058C5C3144 /* libPods-ReactNativeChat.a */, - 88C2B58752759FFC71A856C2 /* libPods-ReactNativeChat-ReactNativeChatTests.a */, + 5198B14DF64811534104106B /* libPods-ReactNativeChat-ReactNativeChatTests.a */, ); name = Frameworks; sourceTree = ""; diff --git a/src/lib/actions/Report.js b/src/lib/actions/Report.js index 2391644554f7..1d2bee79a36a 100644 --- a/src/lib/actions/Report.js +++ b/src/lib/actions/Report.js @@ -79,18 +79,9 @@ function getUnreadActionCount(report) { return report.reportActionList.length; } -<<<<<<< HEAD - // Find the most recent sequence number from the report itself or the local store of max sequence numbers - const maxSequenceNumber = Math.max(reportMaxSequenceNumbers[report.reportID] || 0, report.reportActionList.length); - - // There are unread items if the last one the user has read is less - // than the highest sequence number we have. - const unreadActionCount = maxSequenceNumber - usersLastReadActionID; -======= // There are unread items if the last one the user has read is less // than the highest sequence number we have const unreadActionCount = report.reportActionList.length - usersLastReadActionID; ->>>>>>> origin return Math.max(0, unreadActionCount); } @@ -105,21 +96,13 @@ function getUnreadActionCount(report) { * @returns {object} */ function getSimplifiedReportObject(report) { - const maxSequenceNumber = Math.max(reportMaxSequenceNumbers[report.reportID] || 0, report.reportActionList.length); - const unreadActionCount = getUnreadActionCount(report); return { reportID: report.reportID, reportName: report.reportName, reportNameValuePairs: report.reportNameValuePairs, -<<<<<<< HEAD - unreadActionCount, - pinnedReport: configReportIDs.includes(report.reportID), - maxSequenceNumber, -======= unreadActionCount: getUnreadActionCount(report), pinnedReport: configReportIDs.includes(report.reportID), maxSequenceNumber: report.reportActionList.length, ->>>>>>> origin }; } From 71fd6aa5038c1eae6d2b0af463c6a50c308158ca Mon Sep 17 00:00:00 2001 From: Marc Glasser Date: Wed, 7 Oct 2020 16:43:49 -0700 Subject: [PATCH 24/30] remove unneeded stuff --- src/page/home/sidebar/SidebarLinks.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/page/home/sidebar/SidebarLinks.js b/src/page/home/sidebar/SidebarLinks.js index 57ac38ace011..6af6c4e51905 100644 --- a/src/page/home/sidebar/SidebarLinks.js +++ b/src/page/home/sidebar/SidebarLinks.js @@ -9,7 +9,6 @@ import SidebarLink from './SidebarLink'; import withIon from '../../../components/withIon'; import IONKEYS from '../../../IONKEYS'; import ChatSwitcherView from './ChatSwitcherView'; -import PageTitleUpdater from '../../../lib/PageTitleUpdater'; import SafeAreaInsetPropTypes from '../../SafeAreaInsetPropTypes'; import compose from '../../../lib/compose'; import {withRouter} from '../../../lib/Router'; From 2f2fb02b4df81ef9e18f67f8d9401169ceb9df7e Mon Sep 17 00:00:00 2001 From: Marc Glasser Date: Wed, 7 Oct 2020 16:49:10 -0700 Subject: [PATCH 25/30] update names of methods and move to sign out area --- src/lib/UnreadIndicatorUpdater/index.js | 12 ++++++++---- src/lib/actions/SignInRedirect.js | 1 + src/page/home/HomePage.js | 3 +-- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/lib/UnreadIndicatorUpdater/index.js b/src/lib/UnreadIndicatorUpdater/index.js index f29d76b54d13..6a461f804ab3 100644 --- a/src/lib/UnreadIndicatorUpdater/index.js +++ b/src/lib/UnreadIndicatorUpdater/index.js @@ -21,7 +21,7 @@ let connectionID; * Bind to the report collection key and update * the title and unread count indicators */ -function init() { +function listenForReportChanges() { connectionID = Ion.connect({ key: IONKEYS.COLLECTION.REPORT, callback: (report) => { @@ -38,11 +38,15 @@ function init() { /** * Remove the subscription callback when we no longer need it. */ -function destroy() { +function stopListeningForReportChanges() { + if (!connectionID) { + return; + } + Ion.disconnect(connectionID); } export default { - init, - destroy, + listenForReportChanges, + stopListeningForReportChanges, }; diff --git a/src/lib/actions/SignInRedirect.js b/src/lib/actions/SignInRedirect.js index a81f0112f176..795dbb434b7c 100644 --- a/src/lib/actions/SignInRedirect.js +++ b/src/lib/actions/SignInRedirect.js @@ -19,6 +19,7 @@ Ion.connect({ */ function redirectToSignIn(errorMessage) { NetworkConnection.stopListeningForReconnect(); + UnreadIndicatorUpdater.stopListeningForReportChanges(); Pusher.disconnect(); Ion.clear() .then(() => { diff --git a/src/page/home/HomePage.js b/src/page/home/HomePage.js index c76b1467a508..42547a3bae86 100644 --- a/src/page/home/HomePage.js +++ b/src/page/home/HomePage.js @@ -48,7 +48,7 @@ export default class App extends React.Component { // Fetch all the reports fetchAllReports(); - UnreadIndicatorUpdater.init(); + UnreadIndicatorUpdater.listenForReportChanges(); Dimensions.addEventListener('change', this.toggleHamburgerBasedOnDimensions); @@ -59,7 +59,6 @@ export default class App extends React.Component { componentWillUnmount() { Dimensions.removeEventListener('change', this.toggleHamburgerBasedOnDimensions); - UnreadIndicatorUpdater.destroy(); } /** From 58793f6032f0f1288ea925897c75ca93578d6086 Mon Sep 17 00:00:00 2001 From: Marc Glasser Date: Wed, 7 Oct 2020 16:49:56 -0700 Subject: [PATCH 26/30] derp --- src/lib/actions/SignInRedirect.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lib/actions/SignInRedirect.js b/src/lib/actions/SignInRedirect.js index 795dbb434b7c..973a6461014f 100644 --- a/src/lib/actions/SignInRedirect.js +++ b/src/lib/actions/SignInRedirect.js @@ -4,6 +4,7 @@ import ROUTES from '../../ROUTES'; import {redirect} from './App'; import * as Pusher from '../Pusher/pusher'; import NetworkConnection from '../NetworkConnection'; +import UnreadIndicatorUpdater from '../UnreadIndicatorUpdater'; let currentURL; Ion.connect({ From 30dfd18d92e0aea9fa6ef45066a4206b59e14ad8 Mon Sep 17 00:00:00 2001 From: Marc Glasser Date: Wed, 7 Oct 2020 17:13:33 -0700 Subject: [PATCH 27/30] woops snuck in old change --- src/lib/actions/Report.js | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/src/lib/actions/Report.js b/src/lib/actions/Report.js index 1d2bee79a36a..a38ed89a566f 100644 --- a/src/lib/actions/Report.js +++ b/src/lib/actions/Report.js @@ -292,16 +292,11 @@ function fetchHardcodedReports() { .then((data) => { const fetchedReports = _.compact(_.map(data, (promiseResult) => { // Grab the report from the promise result which stores it in the `value` key - const reports = lodashGet(promiseResult, 'value.reports', {}); - - // If there are multiple reports then these are the chat reports - if (_.size(reports) > 1) { - return null; - } + const report = lodashGet(promiseResult, 'value.reports', {}); // If there is no report found from the promise, return null // Otherwise, grab the actual report object from the first index in the values array - return _.isEmpty(reports) ? null : _.values(reports)[0]; + return _.isEmpty(report) ? null : _.values(report)[0]; })); _.each(fetchedReports, (report) => { From 8e5ead8c7d80575c12d93d9f24e732d1fa3c14ae Mon Sep 17 00:00:00 2001 From: Marc Glasser Date: Thu, 8 Oct 2020 20:04:04 -0700 Subject: [PATCH 28/30] add Podfile.lock back --- ios/Podfile.lock | 501 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 501 insertions(+) create mode 100644 ios/Podfile.lock diff --git a/ios/Podfile.lock b/ios/Podfile.lock new file mode 100644 index 000000000000..9013b3ab5278 --- /dev/null +++ b/ios/Podfile.lock @@ -0,0 +1,501 @@ +PODS: + - boost-for-react-native (1.63.0) + - CocoaAsyncSocket (7.6.4) + - CocoaLibEvent (1.0.0) + - DoubleConversion (1.1.6) + - FBLazyVector (0.63.2) + - FBReactNativeSpec (0.63.2): + - Folly (= 2020.01.13.00) + - RCTRequired (= 0.63.2) + - RCTTypeSafety (= 0.63.2) + - React-Core (= 0.63.2) + - React-jsi (= 0.63.2) + - ReactCommon/turbomodule/core (= 0.63.2) + - Flipper (0.41.5): + - Flipper-Folly (~> 2.2) + - Flipper-RSocket (~> 1.1) + - Flipper-DoubleConversion (1.1.7) + - Flipper-Folly (2.2.0): + - boost-for-react-native + - CocoaLibEvent (~> 1.0) + - Flipper-DoubleConversion + - Flipper-Glog + - OpenSSL-Universal (= 1.0.2.19) + - Flipper-Glog (0.3.6) + - Flipper-PeerTalk (0.0.4) + - Flipper-RSocket (1.1.0): + - Flipper-Folly (~> 2.2) + - FlipperKit (0.41.5): + - FlipperKit/Core (= 0.41.5) + - FlipperKit/Core (0.41.5): + - Flipper (~> 0.41.5) + - FlipperKit/CppBridge + - FlipperKit/FBCxxFollyDynamicConvert + - FlipperKit/FBDefines + - FlipperKit/FKPortForwarding + - FlipperKit/CppBridge (0.41.5): + - Flipper (~> 0.41.5) + - FlipperKit/FBCxxFollyDynamicConvert (0.41.5): + - Flipper-Folly (~> 2.2) + - FlipperKit/FBDefines (0.41.5) + - FlipperKit/FKPortForwarding (0.41.5): + - CocoaAsyncSocket (~> 7.6) + - Flipper-PeerTalk (~> 0.0.4) + - FlipperKit/FlipperKitHighlightOverlay (0.41.5) + - FlipperKit/FlipperKitLayoutPlugin (0.41.5): + - FlipperKit/Core + - FlipperKit/FlipperKitHighlightOverlay + - FlipperKit/FlipperKitLayoutTextSearchable + - YogaKit (~> 1.18) + - FlipperKit/FlipperKitLayoutTextSearchable (0.41.5) + - FlipperKit/FlipperKitNetworkPlugin (0.41.5): + - FlipperKit/Core + - FlipperKit/FlipperKitReactPlugin (0.41.5): + - FlipperKit/Core + - FlipperKit/FlipperKitUserDefaultsPlugin (0.41.5): + - FlipperKit/Core + - FlipperKit/SKIOSNetworkPlugin (0.41.5): + - FlipperKit/Core + - FlipperKit/FlipperKitNetworkPlugin + - Folly (2020.01.13.00): + - boost-for-react-native + - DoubleConversion + - Folly/Default (= 2020.01.13.00) + - glog + - Folly/Default (2020.01.13.00): + - boost-for-react-native + - DoubleConversion + - glog + - glog (0.3.5) + - OpenSSL-Universal (1.0.2.19): + - OpenSSL-Universal/Static (= 1.0.2.19) + - OpenSSL-Universal/Static (1.0.2.19) + - RCTRequired (0.63.2) + - RCTTypeSafety (0.63.2): + - FBLazyVector (= 0.63.2) + - Folly (= 2020.01.13.00) + - RCTRequired (= 0.63.2) + - React-Core (= 0.63.2) + - React (0.63.2): + - React-Core (= 0.63.2) + - React-Core/DevSupport (= 0.63.2) + - React-Core/RCTWebSocket (= 0.63.2) + - React-RCTActionSheet (= 0.63.2) + - React-RCTAnimation (= 0.63.2) + - React-RCTBlob (= 0.63.2) + - React-RCTImage (= 0.63.2) + - React-RCTLinking (= 0.63.2) + - React-RCTNetwork (= 0.63.2) + - React-RCTSettings (= 0.63.2) + - React-RCTText (= 0.63.2) + - React-RCTVibration (= 0.63.2) + - React-callinvoker (0.63.2) + - React-Core (0.63.2): + - Folly (= 2020.01.13.00) + - glog + - React-Core/Default (= 0.63.2) + - React-cxxreact (= 0.63.2) + - React-jsi (= 0.63.2) + - React-jsiexecutor (= 0.63.2) + - Yoga + - React-Core/CoreModulesHeaders (0.63.2): + - Folly (= 2020.01.13.00) + - glog + - React-Core/Default + - React-cxxreact (= 0.63.2) + - React-jsi (= 0.63.2) + - React-jsiexecutor (= 0.63.2) + - Yoga + - React-Core/Default (0.63.2): + - Folly (= 2020.01.13.00) + - glog + - React-cxxreact (= 0.63.2) + - React-jsi (= 0.63.2) + - React-jsiexecutor (= 0.63.2) + - Yoga + - React-Core/DevSupport (0.63.2): + - Folly (= 2020.01.13.00) + - glog + - React-Core/Default (= 0.63.2) + - React-Core/RCTWebSocket (= 0.63.2) + - React-cxxreact (= 0.63.2) + - React-jsi (= 0.63.2) + - React-jsiexecutor (= 0.63.2) + - React-jsinspector (= 0.63.2) + - Yoga + - React-Core/RCTActionSheetHeaders (0.63.2): + - Folly (= 2020.01.13.00) + - glog + - React-Core/Default + - React-cxxreact (= 0.63.2) + - React-jsi (= 0.63.2) + - React-jsiexecutor (= 0.63.2) + - Yoga + - React-Core/RCTAnimationHeaders (0.63.2): + - Folly (= 2020.01.13.00) + - glog + - React-Core/Default + - React-cxxreact (= 0.63.2) + - React-jsi (= 0.63.2) + - React-jsiexecutor (= 0.63.2) + - Yoga + - React-Core/RCTBlobHeaders (0.63.2): + - Folly (= 2020.01.13.00) + - glog + - React-Core/Default + - React-cxxreact (= 0.63.2) + - React-jsi (= 0.63.2) + - React-jsiexecutor (= 0.63.2) + - Yoga + - React-Core/RCTImageHeaders (0.63.2): + - Folly (= 2020.01.13.00) + - glog + - React-Core/Default + - React-cxxreact (= 0.63.2) + - React-jsi (= 0.63.2) + - React-jsiexecutor (= 0.63.2) + - Yoga + - React-Core/RCTLinkingHeaders (0.63.2): + - Folly (= 2020.01.13.00) + - glog + - React-Core/Default + - React-cxxreact (= 0.63.2) + - React-jsi (= 0.63.2) + - React-jsiexecutor (= 0.63.2) + - Yoga + - React-Core/RCTNetworkHeaders (0.63.2): + - Folly (= 2020.01.13.00) + - glog + - React-Core/Default + - React-cxxreact (= 0.63.2) + - React-jsi (= 0.63.2) + - React-jsiexecutor (= 0.63.2) + - Yoga + - React-Core/RCTSettingsHeaders (0.63.2): + - Folly (= 2020.01.13.00) + - glog + - React-Core/Default + - React-cxxreact (= 0.63.2) + - React-jsi (= 0.63.2) + - React-jsiexecutor (= 0.63.2) + - Yoga + - React-Core/RCTTextHeaders (0.63.2): + - Folly (= 2020.01.13.00) + - glog + - React-Core/Default + - React-cxxreact (= 0.63.2) + - React-jsi (= 0.63.2) + - React-jsiexecutor (= 0.63.2) + - Yoga + - React-Core/RCTVibrationHeaders (0.63.2): + - Folly (= 2020.01.13.00) + - glog + - React-Core/Default + - React-cxxreact (= 0.63.2) + - React-jsi (= 0.63.2) + - React-jsiexecutor (= 0.63.2) + - Yoga + - React-Core/RCTWebSocket (0.63.2): + - Folly (= 2020.01.13.00) + - glog + - React-Core/Default (= 0.63.2) + - React-cxxreact (= 0.63.2) + - React-jsi (= 0.63.2) + - React-jsiexecutor (= 0.63.2) + - Yoga + - React-CoreModules (0.63.2): + - FBReactNativeSpec (= 0.63.2) + - Folly (= 2020.01.13.00) + - RCTTypeSafety (= 0.63.2) + - React-Core/CoreModulesHeaders (= 0.63.2) + - React-jsi (= 0.63.2) + - React-RCTImage (= 0.63.2) + - ReactCommon/turbomodule/core (= 0.63.2) + - React-cxxreact (0.63.2): + - boost-for-react-native (= 1.63.0) + - DoubleConversion + - Folly (= 2020.01.13.00) + - glog + - React-callinvoker (= 0.63.2) + - React-jsinspector (= 0.63.2) + - React-jsi (0.63.2): + - boost-for-react-native (= 1.63.0) + - DoubleConversion + - Folly (= 2020.01.13.00) + - glog + - React-jsi/Default (= 0.63.2) + - React-jsi/Default (0.63.2): + - boost-for-react-native (= 1.63.0) + - DoubleConversion + - Folly (= 2020.01.13.00) + - glog + - React-jsiexecutor (0.63.2): + - DoubleConversion + - Folly (= 2020.01.13.00) + - glog + - React-cxxreact (= 0.63.2) + - React-jsi (= 0.63.2) + - React-jsinspector (0.63.2) + - react-native-config (1.3.3): + - react-native-config/App (= 1.3.3) + - react-native-config/App (1.3.3): + - React + - react-native-image-picker (2.3.3): + - React + - react-native-netinfo (5.9.6): + - React + - react-native-safe-area-context (3.1.4): + - React + - react-native-webview (10.6.0): + - React + - React-RCTActionSheet (0.63.2): + - React-Core/RCTActionSheetHeaders (= 0.63.2) + - React-RCTAnimation (0.63.2): + - FBReactNativeSpec (= 0.63.2) + - Folly (= 2020.01.13.00) + - RCTTypeSafety (= 0.63.2) + - React-Core/RCTAnimationHeaders (= 0.63.2) + - React-jsi (= 0.63.2) + - ReactCommon/turbomodule/core (= 0.63.2) + - React-RCTBlob (0.63.2): + - FBReactNativeSpec (= 0.63.2) + - Folly (= 2020.01.13.00) + - React-Core/RCTBlobHeaders (= 0.63.2) + - React-Core/RCTWebSocket (= 0.63.2) + - React-jsi (= 0.63.2) + - React-RCTNetwork (= 0.63.2) + - ReactCommon/turbomodule/core (= 0.63.2) + - React-RCTImage (0.63.2): + - FBReactNativeSpec (= 0.63.2) + - Folly (= 2020.01.13.00) + - RCTTypeSafety (= 0.63.2) + - React-Core/RCTImageHeaders (= 0.63.2) + - React-jsi (= 0.63.2) + - React-RCTNetwork (= 0.63.2) + - ReactCommon/turbomodule/core (= 0.63.2) + - React-RCTLinking (0.63.2): + - FBReactNativeSpec (= 0.63.2) + - React-Core/RCTLinkingHeaders (= 0.63.2) + - React-jsi (= 0.63.2) + - ReactCommon/turbomodule/core (= 0.63.2) + - React-RCTNetwork (0.63.2): + - FBReactNativeSpec (= 0.63.2) + - Folly (= 2020.01.13.00) + - RCTTypeSafety (= 0.63.2) + - React-Core/RCTNetworkHeaders (= 0.63.2) + - React-jsi (= 0.63.2) + - ReactCommon/turbomodule/core (= 0.63.2) + - React-RCTSettings (0.63.2): + - FBReactNativeSpec (= 0.63.2) + - Folly (= 2020.01.13.00) + - RCTTypeSafety (= 0.63.2) + - React-Core/RCTSettingsHeaders (= 0.63.2) + - React-jsi (= 0.63.2) + - ReactCommon/turbomodule/core (= 0.63.2) + - React-RCTText (0.63.2): + - React-Core/RCTTextHeaders (= 0.63.2) + - React-RCTVibration (0.63.2): + - FBReactNativeSpec (= 0.63.2) + - Folly (= 2020.01.13.00) + - React-Core/RCTVibrationHeaders (= 0.63.2) + - React-jsi (= 0.63.2) + - ReactCommon/turbomodule/core (= 0.63.2) + - ReactCommon/turbomodule/core (0.63.2): + - DoubleConversion + - Folly (= 2020.01.13.00) + - glog + - React-callinvoker (= 0.63.2) + - React-Core (= 0.63.2) + - React-cxxreact (= 0.63.2) + - React-jsi (= 0.63.2) + - RNCAsyncStorage (1.11.0): + - React + - Yoga (1.14.0) + - YogaKit (1.18.1): + - Yoga (~> 1.14) + +DEPENDENCIES: + - DoubleConversion (from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`) + - FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`) + - FBReactNativeSpec (from `../node_modules/react-native/Libraries/FBReactNativeSpec`) + - Flipper (~> 0.41.1) + - Flipper-DoubleConversion (= 1.1.7) + - Flipper-Folly (~> 2.2) + - Flipper-Glog (= 0.3.6) + - Flipper-PeerTalk (~> 0.0.4) + - Flipper-RSocket (~> 1.1) + - FlipperKit (~> 0.41.1) + - FlipperKit/Core (~> 0.41.1) + - FlipperKit/CppBridge (~> 0.41.1) + - FlipperKit/FBCxxFollyDynamicConvert (~> 0.41.1) + - FlipperKit/FBDefines (~> 0.41.1) + - FlipperKit/FKPortForwarding (~> 0.41.1) + - FlipperKit/FlipperKitHighlightOverlay (~> 0.41.1) + - FlipperKit/FlipperKitLayoutPlugin (~> 0.41.1) + - FlipperKit/FlipperKitLayoutTextSearchable (~> 0.41.1) + - FlipperKit/FlipperKitNetworkPlugin (~> 0.41.1) + - FlipperKit/FlipperKitReactPlugin (~> 0.41.1) + - FlipperKit/FlipperKitUserDefaultsPlugin (~> 0.41.1) + - FlipperKit/SKIOSNetworkPlugin (~> 0.41.1) + - Folly (from `../node_modules/react-native/third-party-podspecs/Folly.podspec`) + - glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`) + - RCTRequired (from `../node_modules/react-native/Libraries/RCTRequired`) + - RCTTypeSafety (from `../node_modules/react-native/Libraries/TypeSafety`) + - React (from `../node_modules/react-native/`) + - React-callinvoker (from `../node_modules/react-native/ReactCommon/callinvoker`) + - React-Core (from `../node_modules/react-native/`) + - React-Core/DevSupport (from `../node_modules/react-native/`) + - React-Core/RCTWebSocket (from `../node_modules/react-native/`) + - React-CoreModules (from `../node_modules/react-native/React/CoreModules`) + - React-cxxreact (from `../node_modules/react-native/ReactCommon/cxxreact`) + - React-jsi (from `../node_modules/react-native/ReactCommon/jsi`) + - React-jsiexecutor (from `../node_modules/react-native/ReactCommon/jsiexecutor`) + - React-jsinspector (from `../node_modules/react-native/ReactCommon/jsinspector`) + - react-native-config (from `../node_modules/react-native-config`) + - react-native-image-picker (from `../node_modules/react-native-image-picker`) + - "react-native-netinfo (from `../node_modules/@react-native-community/netinfo`)" + - react-native-safe-area-context (from `../node_modules/react-native-safe-area-context`) + - react-native-webview (from `../node_modules/react-native-webview`) + - React-RCTActionSheet (from `../node_modules/react-native/Libraries/ActionSheetIOS`) + - React-RCTAnimation (from `../node_modules/react-native/Libraries/NativeAnimation`) + - React-RCTBlob (from `../node_modules/react-native/Libraries/Blob`) + - React-RCTImage (from `../node_modules/react-native/Libraries/Image`) + - React-RCTLinking (from `../node_modules/react-native/Libraries/LinkingIOS`) + - React-RCTNetwork (from `../node_modules/react-native/Libraries/Network`) + - React-RCTSettings (from `../node_modules/react-native/Libraries/Settings`) + - React-RCTText (from `../node_modules/react-native/Libraries/Text`) + - React-RCTVibration (from `../node_modules/react-native/Libraries/Vibration`) + - ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`) + - "RNCAsyncStorage (from `../node_modules/@react-native-community/async-storage`)" + - Yoga (from `../node_modules/react-native/ReactCommon/yoga`) + +SPEC REPOS: + trunk: + - boost-for-react-native + - CocoaAsyncSocket + - CocoaLibEvent + - Flipper + - Flipper-DoubleConversion + - Flipper-Folly + - Flipper-Glog + - Flipper-PeerTalk + - Flipper-RSocket + - FlipperKit + - OpenSSL-Universal + - YogaKit + +EXTERNAL SOURCES: + DoubleConversion: + :podspec: "../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec" + FBLazyVector: + :path: "../node_modules/react-native/Libraries/FBLazyVector" + FBReactNativeSpec: + :path: "../node_modules/react-native/Libraries/FBReactNativeSpec" + Folly: + :podspec: "../node_modules/react-native/third-party-podspecs/Folly.podspec" + glog: + :podspec: "../node_modules/react-native/third-party-podspecs/glog.podspec" + RCTRequired: + :path: "../node_modules/react-native/Libraries/RCTRequired" + RCTTypeSafety: + :path: "../node_modules/react-native/Libraries/TypeSafety" + React: + :path: "../node_modules/react-native/" + React-callinvoker: + :path: "../node_modules/react-native/ReactCommon/callinvoker" + React-Core: + :path: "../node_modules/react-native/" + React-CoreModules: + :path: "../node_modules/react-native/React/CoreModules" + React-cxxreact: + :path: "../node_modules/react-native/ReactCommon/cxxreact" + React-jsi: + :path: "../node_modules/react-native/ReactCommon/jsi" + React-jsiexecutor: + :path: "../node_modules/react-native/ReactCommon/jsiexecutor" + React-jsinspector: + :path: "../node_modules/react-native/ReactCommon/jsinspector" + react-native-config: + :path: "../node_modules/react-native-config" + react-native-image-picker: + :path: "../node_modules/react-native-image-picker" + react-native-netinfo: + :path: "../node_modules/@react-native-community/netinfo" + react-native-safe-area-context: + :path: "../node_modules/react-native-safe-area-context" + react-native-webview: + :path: "../node_modules/react-native-webview" + React-RCTActionSheet: + :path: "../node_modules/react-native/Libraries/ActionSheetIOS" + React-RCTAnimation: + :path: "../node_modules/react-native/Libraries/NativeAnimation" + React-RCTBlob: + :path: "../node_modules/react-native/Libraries/Blob" + React-RCTImage: + :path: "../node_modules/react-native/Libraries/Image" + React-RCTLinking: + :path: "../node_modules/react-native/Libraries/LinkingIOS" + React-RCTNetwork: + :path: "../node_modules/react-native/Libraries/Network" + React-RCTSettings: + :path: "../node_modules/react-native/Libraries/Settings" + React-RCTText: + :path: "../node_modules/react-native/Libraries/Text" + React-RCTVibration: + :path: "../node_modules/react-native/Libraries/Vibration" + ReactCommon: + :path: "../node_modules/react-native/ReactCommon" + RNCAsyncStorage: + :path: "../node_modules/@react-native-community/async-storage" + Yoga: + :path: "../node_modules/react-native/ReactCommon/yoga" + +SPEC CHECKSUMS: + boost-for-react-native: 39c7adb57c4e60d6c5479dd8623128eb5b3f0f2c + CocoaAsyncSocket: 694058e7c0ed05a9e217d1b3c7ded962f4180845 + CocoaLibEvent: 2fab71b8bd46dd33ddb959f7928ec5909f838e3f + DoubleConversion: cde416483dac037923206447da6e1454df403714 + FBLazyVector: 3ef4a7f62e7db01092f9d517d2ebc0d0677c4a37 + FBReactNativeSpec: dc7fa9088f0f2a998503a352b0554d69a4391c5a + Flipper: 33585e2d9810fe5528346be33bcf71b37bb7ae13 + Flipper-DoubleConversion: 38631e41ef4f9b12861c67d17cb5518d06badc41 + Flipper-Folly: c12092ea368353b58e992843a990a3225d4533c3 + Flipper-Glog: 1dfd6abf1e922806c52ceb8701a3599a79a200a6 + Flipper-PeerTalk: 116d8f857dc6ef55c7a5a75ea3ceaafe878aadc9 + Flipper-RSocket: 64e7431a55835eb953b0bf984ef3b90ae9fdddd7 + FlipperKit: bc68102cd4952a258a23c9c1b316c7bec1fecf83 + Folly: b73c3869541e86821df3c387eb0af5f65addfab4 + glog: 40a13f7840415b9a77023fbcae0f1e6f43192af3 + OpenSSL-Universal: 8b48cc0d10c1b2923617dfe5c178aa9ed2689355 + RCTRequired: f13f25e7b12f925f1f6a6a8c69d929a03c0129fe + RCTTypeSafety: 44982c5c8e43ff4141eb519a8ddc88059acd1f3a + React: e1c65dd41cb9db13b99f24608e47dd595f28ca9a + React-callinvoker: 552a6a6bc8b3bb794cf108ad59e5a9e2e3b4fc98 + React-Core: 9d341e725dc9cd2f49e4c49ad1fc4e8776aa2639 + React-CoreModules: 5335e168165da7f7083ce7147768d36d3e292318 + React-cxxreact: d3261ec5f7d11743fbf21e263a34ea51d1f13ebc + React-jsi: 54245e1d5f4b690dec614a73a3795964eeef13a8 + React-jsiexecutor: 8ca588cc921e70590820ce72b8789b02c67cce38 + React-jsinspector: b14e62ebe7a66e9231e9581279909f2fc3db6606 + react-native-config: 9a061347e0136fdb32d43a34d60999297d672361 + react-native-image-picker: a6c3d644751a388b0fc8b56822ff7cbd398a3008 + react-native-netinfo: d2c312fa4b151214e1d5c8456ddb5f28ff24a576 + react-native-safe-area-context: 0ed9288ed4409beabb0817b54efc047286fc84da + react-native-webview: 797f50d16bb271c4270bc742040a64c79ec7147c + React-RCTActionSheet: 910163b6b09685a35c4ebbc52b66d1bfbbe39fc5 + React-RCTAnimation: 9a883bbe1e9d2e158d4fb53765ed64c8dc2200c6 + React-RCTBlob: 39cf0ece1927996c4466510e25d2105f67010e13 + React-RCTImage: de355d738727b09ad3692f2a979affbd54b5f378 + React-RCTLinking: 8122f221d395a63364b2c0078ce284214bd04575 + React-RCTNetwork: 8f96c7b49ea6a0f28f98258f347b6ad218bc0830 + React-RCTSettings: 8a49622aff9c1925f5455fa340b6fe4853d64ab6 + React-RCTText: 1b6773e776e4b33f90468c20fe3b16ca3e224bb8 + React-RCTVibration: 4d2e726957f4087449739b595f107c0d4b6c2d2d + ReactCommon: a0a1edbebcac5e91338371b72ffc66aa822792ce + RNCAsyncStorage: db711e29e5e0500d9bd21aa0c2e397efa45302b1 + Yoga: 7740b94929bbacbddda59bf115b5317e9a161598 + YogaKit: f782866e155069a2cca2517aafea43200b01fd5a + +PODFILE CHECKSUM: 7f6bb9c130ea13236f8249f800f75d671c1833fa + +COCOAPODS: 1.9.3 From 70a5b46c7c1185fe1959fb415545357c097d1dcb Mon Sep 17 00:00:00 2001 From: Marc Glasser Date: Thu, 8 Oct 2020 20:07:40 -0700 Subject: [PATCH 29/30] fix podfile --- ios/Podfile.lock | 428 ++++++++++++++++++++++++----------------------- 1 file changed, 217 insertions(+), 211 deletions(-) diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 9013b3ab5278..8c1457e58c0e 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -3,15 +3,15 @@ PODS: - CocoaAsyncSocket (7.6.4) - CocoaLibEvent (1.0.0) - DoubleConversion (1.1.6) - - FBLazyVector (0.63.2) - - FBReactNativeSpec (0.63.2): + - FBLazyVector (0.63.3) + - FBReactNativeSpec (0.63.3): - Folly (= 2020.01.13.00) - - RCTRequired (= 0.63.2) - - RCTTypeSafety (= 0.63.2) - - React-Core (= 0.63.2) - - React-jsi (= 0.63.2) - - ReactCommon/turbomodule/core (= 0.63.2) - - Flipper (0.41.5): + - RCTRequired (= 0.63.3) + - RCTTypeSafety (= 0.63.3) + - React-Core (= 0.63.3) + - React-jsi (= 0.63.3) + - ReactCommon/turbomodule/core (= 0.63.3) + - Flipper (0.54.0): - Flipper-Folly (~> 2.2) - Flipper-RSocket (~> 1.1) - Flipper-DoubleConversion (1.1.7) @@ -25,36 +25,36 @@ PODS: - Flipper-PeerTalk (0.0.4) - Flipper-RSocket (1.1.0): - Flipper-Folly (~> 2.2) - - FlipperKit (0.41.5): - - FlipperKit/Core (= 0.41.5) - - FlipperKit/Core (0.41.5): - - Flipper (~> 0.41.5) + - FlipperKit (0.54.0): + - FlipperKit/Core (= 0.54.0) + - FlipperKit/Core (0.54.0): + - Flipper (~> 0.54.0) - FlipperKit/CppBridge - FlipperKit/FBCxxFollyDynamicConvert - FlipperKit/FBDefines - FlipperKit/FKPortForwarding - - FlipperKit/CppBridge (0.41.5): - - Flipper (~> 0.41.5) - - FlipperKit/FBCxxFollyDynamicConvert (0.41.5): + - FlipperKit/CppBridge (0.54.0): + - Flipper (~> 0.54.0) + - FlipperKit/FBCxxFollyDynamicConvert (0.54.0): - Flipper-Folly (~> 2.2) - - FlipperKit/FBDefines (0.41.5) - - FlipperKit/FKPortForwarding (0.41.5): + - FlipperKit/FBDefines (0.54.0) + - FlipperKit/FKPortForwarding (0.54.0): - CocoaAsyncSocket (~> 7.6) - Flipper-PeerTalk (~> 0.0.4) - - FlipperKit/FlipperKitHighlightOverlay (0.41.5) - - FlipperKit/FlipperKitLayoutPlugin (0.41.5): + - FlipperKit/FlipperKitHighlightOverlay (0.54.0) + - FlipperKit/FlipperKitLayoutPlugin (0.54.0): - FlipperKit/Core - FlipperKit/FlipperKitHighlightOverlay - FlipperKit/FlipperKitLayoutTextSearchable - YogaKit (~> 1.18) - - FlipperKit/FlipperKitLayoutTextSearchable (0.41.5) - - FlipperKit/FlipperKitNetworkPlugin (0.41.5): + - FlipperKit/FlipperKitLayoutTextSearchable (0.54.0) + - FlipperKit/FlipperKitNetworkPlugin (0.54.0): - FlipperKit/Core - - FlipperKit/FlipperKitReactPlugin (0.41.5): + - FlipperKit/FlipperKitReactPlugin (0.54.0): - FlipperKit/Core - - FlipperKit/FlipperKitUserDefaultsPlugin (0.41.5): + - FlipperKit/FlipperKitUserDefaultsPlugin (0.54.0): - FlipperKit/Core - - FlipperKit/SKIOSNetworkPlugin (0.41.5): + - FlipperKit/SKIOSNetworkPlugin (0.54.0): - FlipperKit/Core - FlipperKit/FlipperKitNetworkPlugin - Folly (2020.01.13.00): @@ -70,172 +70,172 @@ PODS: - OpenSSL-Universal (1.0.2.19): - OpenSSL-Universal/Static (= 1.0.2.19) - OpenSSL-Universal/Static (1.0.2.19) - - RCTRequired (0.63.2) - - RCTTypeSafety (0.63.2): - - FBLazyVector (= 0.63.2) + - RCTRequired (0.63.3) + - RCTTypeSafety (0.63.3): + - FBLazyVector (= 0.63.3) - Folly (= 2020.01.13.00) - - RCTRequired (= 0.63.2) - - React-Core (= 0.63.2) - - React (0.63.2): - - React-Core (= 0.63.2) - - React-Core/DevSupport (= 0.63.2) - - React-Core/RCTWebSocket (= 0.63.2) - - React-RCTActionSheet (= 0.63.2) - - React-RCTAnimation (= 0.63.2) - - React-RCTBlob (= 0.63.2) - - React-RCTImage (= 0.63.2) - - React-RCTLinking (= 0.63.2) - - React-RCTNetwork (= 0.63.2) - - React-RCTSettings (= 0.63.2) - - React-RCTText (= 0.63.2) - - React-RCTVibration (= 0.63.2) - - React-callinvoker (0.63.2) - - React-Core (0.63.2): + - RCTRequired (= 0.63.3) + - React-Core (= 0.63.3) + - React (0.63.3): + - React-Core (= 0.63.3) + - React-Core/DevSupport (= 0.63.3) + - React-Core/RCTWebSocket (= 0.63.3) + - React-RCTActionSheet (= 0.63.3) + - React-RCTAnimation (= 0.63.3) + - React-RCTBlob (= 0.63.3) + - React-RCTImage (= 0.63.3) + - React-RCTLinking (= 0.63.3) + - React-RCTNetwork (= 0.63.3) + - React-RCTSettings (= 0.63.3) + - React-RCTText (= 0.63.3) + - React-RCTVibration (= 0.63.3) + - React-callinvoker (0.63.3) + - React-Core (0.63.3): - Folly (= 2020.01.13.00) - glog - - React-Core/Default (= 0.63.2) - - React-cxxreact (= 0.63.2) - - React-jsi (= 0.63.2) - - React-jsiexecutor (= 0.63.2) + - React-Core/Default (= 0.63.3) + - React-cxxreact (= 0.63.3) + - React-jsi (= 0.63.3) + - React-jsiexecutor (= 0.63.3) - Yoga - - React-Core/CoreModulesHeaders (0.63.2): + - React-Core/CoreModulesHeaders (0.63.3): - Folly (= 2020.01.13.00) - glog - React-Core/Default - - React-cxxreact (= 0.63.2) - - React-jsi (= 0.63.2) - - React-jsiexecutor (= 0.63.2) + - React-cxxreact (= 0.63.3) + - React-jsi (= 0.63.3) + - React-jsiexecutor (= 0.63.3) - Yoga - - React-Core/Default (0.63.2): + - React-Core/Default (0.63.3): - Folly (= 2020.01.13.00) - glog - - React-cxxreact (= 0.63.2) - - React-jsi (= 0.63.2) - - React-jsiexecutor (= 0.63.2) + - React-cxxreact (= 0.63.3) + - React-jsi (= 0.63.3) + - React-jsiexecutor (= 0.63.3) - Yoga - - React-Core/DevSupport (0.63.2): + - React-Core/DevSupport (0.63.3): - Folly (= 2020.01.13.00) - glog - - React-Core/Default (= 0.63.2) - - React-Core/RCTWebSocket (= 0.63.2) - - React-cxxreact (= 0.63.2) - - React-jsi (= 0.63.2) - - React-jsiexecutor (= 0.63.2) - - React-jsinspector (= 0.63.2) + - React-Core/Default (= 0.63.3) + - React-Core/RCTWebSocket (= 0.63.3) + - React-cxxreact (= 0.63.3) + - React-jsi (= 0.63.3) + - React-jsiexecutor (= 0.63.3) + - React-jsinspector (= 0.63.3) - Yoga - - React-Core/RCTActionSheetHeaders (0.63.2): + - React-Core/RCTActionSheetHeaders (0.63.3): - Folly (= 2020.01.13.00) - glog - React-Core/Default - - React-cxxreact (= 0.63.2) - - React-jsi (= 0.63.2) - - React-jsiexecutor (= 0.63.2) + - React-cxxreact (= 0.63.3) + - React-jsi (= 0.63.3) + - React-jsiexecutor (= 0.63.3) - Yoga - - React-Core/RCTAnimationHeaders (0.63.2): + - React-Core/RCTAnimationHeaders (0.63.3): - Folly (= 2020.01.13.00) - glog - React-Core/Default - - React-cxxreact (= 0.63.2) - - React-jsi (= 0.63.2) - - React-jsiexecutor (= 0.63.2) + - React-cxxreact (= 0.63.3) + - React-jsi (= 0.63.3) + - React-jsiexecutor (= 0.63.3) - Yoga - - React-Core/RCTBlobHeaders (0.63.2): + - React-Core/RCTBlobHeaders (0.63.3): - Folly (= 2020.01.13.00) - glog - React-Core/Default - - React-cxxreact (= 0.63.2) - - React-jsi (= 0.63.2) - - React-jsiexecutor (= 0.63.2) + - React-cxxreact (= 0.63.3) + - React-jsi (= 0.63.3) + - React-jsiexecutor (= 0.63.3) - Yoga - - React-Core/RCTImageHeaders (0.63.2): + - React-Core/RCTImageHeaders (0.63.3): - Folly (= 2020.01.13.00) - glog - React-Core/Default - - React-cxxreact (= 0.63.2) - - React-jsi (= 0.63.2) - - React-jsiexecutor (= 0.63.2) + - React-cxxreact (= 0.63.3) + - React-jsi (= 0.63.3) + - React-jsiexecutor (= 0.63.3) - Yoga - - React-Core/RCTLinkingHeaders (0.63.2): + - React-Core/RCTLinkingHeaders (0.63.3): - Folly (= 2020.01.13.00) - glog - React-Core/Default - - React-cxxreact (= 0.63.2) - - React-jsi (= 0.63.2) - - React-jsiexecutor (= 0.63.2) + - React-cxxreact (= 0.63.3) + - React-jsi (= 0.63.3) + - React-jsiexecutor (= 0.63.3) - Yoga - - React-Core/RCTNetworkHeaders (0.63.2): + - React-Core/RCTNetworkHeaders (0.63.3): - Folly (= 2020.01.13.00) - glog - React-Core/Default - - React-cxxreact (= 0.63.2) - - React-jsi (= 0.63.2) - - React-jsiexecutor (= 0.63.2) + - React-cxxreact (= 0.63.3) + - React-jsi (= 0.63.3) + - React-jsiexecutor (= 0.63.3) - Yoga - - React-Core/RCTSettingsHeaders (0.63.2): + - React-Core/RCTSettingsHeaders (0.63.3): - Folly (= 2020.01.13.00) - glog - React-Core/Default - - React-cxxreact (= 0.63.2) - - React-jsi (= 0.63.2) - - React-jsiexecutor (= 0.63.2) + - React-cxxreact (= 0.63.3) + - React-jsi (= 0.63.3) + - React-jsiexecutor (= 0.63.3) - Yoga - - React-Core/RCTTextHeaders (0.63.2): + - React-Core/RCTTextHeaders (0.63.3): - Folly (= 2020.01.13.00) - glog - React-Core/Default - - React-cxxreact (= 0.63.2) - - React-jsi (= 0.63.2) - - React-jsiexecutor (= 0.63.2) + - React-cxxreact (= 0.63.3) + - React-jsi (= 0.63.3) + - React-jsiexecutor (= 0.63.3) - Yoga - - React-Core/RCTVibrationHeaders (0.63.2): + - React-Core/RCTVibrationHeaders (0.63.3): - Folly (= 2020.01.13.00) - glog - React-Core/Default - - React-cxxreact (= 0.63.2) - - React-jsi (= 0.63.2) - - React-jsiexecutor (= 0.63.2) + - React-cxxreact (= 0.63.3) + - React-jsi (= 0.63.3) + - React-jsiexecutor (= 0.63.3) - Yoga - - React-Core/RCTWebSocket (0.63.2): + - React-Core/RCTWebSocket (0.63.3): - Folly (= 2020.01.13.00) - glog - - React-Core/Default (= 0.63.2) - - React-cxxreact (= 0.63.2) - - React-jsi (= 0.63.2) - - React-jsiexecutor (= 0.63.2) + - React-Core/Default (= 0.63.3) + - React-cxxreact (= 0.63.3) + - React-jsi (= 0.63.3) + - React-jsiexecutor (= 0.63.3) - Yoga - - React-CoreModules (0.63.2): - - FBReactNativeSpec (= 0.63.2) + - React-CoreModules (0.63.3): + - FBReactNativeSpec (= 0.63.3) - Folly (= 2020.01.13.00) - - RCTTypeSafety (= 0.63.2) - - React-Core/CoreModulesHeaders (= 0.63.2) - - React-jsi (= 0.63.2) - - React-RCTImage (= 0.63.2) - - ReactCommon/turbomodule/core (= 0.63.2) - - React-cxxreact (0.63.2): + - RCTTypeSafety (= 0.63.3) + - React-Core/CoreModulesHeaders (= 0.63.3) + - React-jsi (= 0.63.3) + - React-RCTImage (= 0.63.3) + - ReactCommon/turbomodule/core (= 0.63.3) + - React-cxxreact (0.63.3): - boost-for-react-native (= 1.63.0) - DoubleConversion - Folly (= 2020.01.13.00) - glog - - React-callinvoker (= 0.63.2) - - React-jsinspector (= 0.63.2) - - React-jsi (0.63.2): + - React-callinvoker (= 0.63.3) + - React-jsinspector (= 0.63.3) + - React-jsi (0.63.3): - boost-for-react-native (= 1.63.0) - DoubleConversion - Folly (= 2020.01.13.00) - glog - - React-jsi/Default (= 0.63.2) - - React-jsi/Default (0.63.2): + - React-jsi/Default (= 0.63.3) + - React-jsi/Default (0.63.3): - boost-for-react-native (= 1.63.0) - DoubleConversion - Folly (= 2020.01.13.00) - glog - - React-jsiexecutor (0.63.2): + - React-jsiexecutor (0.63.3): - DoubleConversion - Folly (= 2020.01.13.00) - glog - - React-cxxreact (= 0.63.2) - - React-jsi (= 0.63.2) - - React-jsinspector (0.63.2) + - React-cxxreact (= 0.63.3) + - React-jsi (= 0.63.3) + - React-jsinspector (0.63.3) - react-native-config (1.3.3): - react-native-config/App (= 1.3.3) - react-native-config/App (1.3.3): @@ -248,68 +248,70 @@ PODS: - React - react-native-webview (10.6.0): - React - - React-RCTActionSheet (0.63.2): - - React-Core/RCTActionSheetHeaders (= 0.63.2) - - React-RCTAnimation (0.63.2): - - FBReactNativeSpec (= 0.63.2) + - React-RCTActionSheet (0.63.3): + - React-Core/RCTActionSheetHeaders (= 0.63.3) + - React-RCTAnimation (0.63.3): + - FBReactNativeSpec (= 0.63.3) - Folly (= 2020.01.13.00) - - RCTTypeSafety (= 0.63.2) - - React-Core/RCTAnimationHeaders (= 0.63.2) - - React-jsi (= 0.63.2) - - ReactCommon/turbomodule/core (= 0.63.2) - - React-RCTBlob (0.63.2): - - FBReactNativeSpec (= 0.63.2) + - RCTTypeSafety (= 0.63.3) + - React-Core/RCTAnimationHeaders (= 0.63.3) + - React-jsi (= 0.63.3) + - ReactCommon/turbomodule/core (= 0.63.3) + - React-RCTBlob (0.63.3): + - FBReactNativeSpec (= 0.63.3) - Folly (= 2020.01.13.00) - - React-Core/RCTBlobHeaders (= 0.63.2) - - React-Core/RCTWebSocket (= 0.63.2) - - React-jsi (= 0.63.2) - - React-RCTNetwork (= 0.63.2) - - ReactCommon/turbomodule/core (= 0.63.2) - - React-RCTImage (0.63.2): - - FBReactNativeSpec (= 0.63.2) + - React-Core/RCTBlobHeaders (= 0.63.3) + - React-Core/RCTWebSocket (= 0.63.3) + - React-jsi (= 0.63.3) + - React-RCTNetwork (= 0.63.3) + - ReactCommon/turbomodule/core (= 0.63.3) + - React-RCTImage (0.63.3): + - FBReactNativeSpec (= 0.63.3) - Folly (= 2020.01.13.00) - - RCTTypeSafety (= 0.63.2) - - React-Core/RCTImageHeaders (= 0.63.2) - - React-jsi (= 0.63.2) - - React-RCTNetwork (= 0.63.2) - - ReactCommon/turbomodule/core (= 0.63.2) - - React-RCTLinking (0.63.2): - - FBReactNativeSpec (= 0.63.2) - - React-Core/RCTLinkingHeaders (= 0.63.2) - - React-jsi (= 0.63.2) - - ReactCommon/turbomodule/core (= 0.63.2) - - React-RCTNetwork (0.63.2): - - FBReactNativeSpec (= 0.63.2) + - RCTTypeSafety (= 0.63.3) + - React-Core/RCTImageHeaders (= 0.63.3) + - React-jsi (= 0.63.3) + - React-RCTNetwork (= 0.63.3) + - ReactCommon/turbomodule/core (= 0.63.3) + - React-RCTLinking (0.63.3): + - FBReactNativeSpec (= 0.63.3) + - React-Core/RCTLinkingHeaders (= 0.63.3) + - React-jsi (= 0.63.3) + - ReactCommon/turbomodule/core (= 0.63.3) + - React-RCTNetwork (0.63.3): + - FBReactNativeSpec (= 0.63.3) - Folly (= 2020.01.13.00) - - RCTTypeSafety (= 0.63.2) - - React-Core/RCTNetworkHeaders (= 0.63.2) - - React-jsi (= 0.63.2) - - ReactCommon/turbomodule/core (= 0.63.2) - - React-RCTSettings (0.63.2): - - FBReactNativeSpec (= 0.63.2) + - RCTTypeSafety (= 0.63.3) + - React-Core/RCTNetworkHeaders (= 0.63.3) + - React-jsi (= 0.63.3) + - ReactCommon/turbomodule/core (= 0.63.3) + - React-RCTSettings (0.63.3): + - FBReactNativeSpec (= 0.63.3) - Folly (= 2020.01.13.00) - - RCTTypeSafety (= 0.63.2) - - React-Core/RCTSettingsHeaders (= 0.63.2) - - React-jsi (= 0.63.2) - - ReactCommon/turbomodule/core (= 0.63.2) - - React-RCTText (0.63.2): - - React-Core/RCTTextHeaders (= 0.63.2) - - React-RCTVibration (0.63.2): - - FBReactNativeSpec (= 0.63.2) + - RCTTypeSafety (= 0.63.3) + - React-Core/RCTSettingsHeaders (= 0.63.3) + - React-jsi (= 0.63.3) + - ReactCommon/turbomodule/core (= 0.63.3) + - React-RCTText (0.63.3): + - React-Core/RCTTextHeaders (= 0.63.3) + - React-RCTVibration (0.63.3): + - FBReactNativeSpec (= 0.63.3) - Folly (= 2020.01.13.00) - - React-Core/RCTVibrationHeaders (= 0.63.2) - - React-jsi (= 0.63.2) - - ReactCommon/turbomodule/core (= 0.63.2) - - ReactCommon/turbomodule/core (0.63.2): + - React-Core/RCTVibrationHeaders (= 0.63.3) + - React-jsi (= 0.63.3) + - ReactCommon/turbomodule/core (= 0.63.3) + - ReactCommon/turbomodule/core (0.63.3): - DoubleConversion - Folly (= 2020.01.13.00) - glog - - React-callinvoker (= 0.63.2) - - React-Core (= 0.63.2) - - React-cxxreact (= 0.63.2) - - React-jsi (= 0.63.2) + - React-callinvoker (= 0.63.3) + - React-Core (= 0.63.3) + - React-cxxreact (= 0.63.3) + - React-jsi (= 0.63.3) - RNCAsyncStorage (1.11.0): - React + - RNCPushNotificationIOS (1.5.0): + - React - Yoga (1.14.0) - YogaKit (1.18.1): - Yoga (~> 1.14) @@ -318,25 +320,25 @@ DEPENDENCIES: - DoubleConversion (from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`) - FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`) - FBReactNativeSpec (from `../node_modules/react-native/Libraries/FBReactNativeSpec`) - - Flipper (~> 0.41.1) + - Flipper (~> 0.54.0) - Flipper-DoubleConversion (= 1.1.7) - Flipper-Folly (~> 2.2) - Flipper-Glog (= 0.3.6) - Flipper-PeerTalk (~> 0.0.4) - Flipper-RSocket (~> 1.1) - - FlipperKit (~> 0.41.1) - - FlipperKit/Core (~> 0.41.1) - - FlipperKit/CppBridge (~> 0.41.1) - - FlipperKit/FBCxxFollyDynamicConvert (~> 0.41.1) - - FlipperKit/FBDefines (~> 0.41.1) - - FlipperKit/FKPortForwarding (~> 0.41.1) - - FlipperKit/FlipperKitHighlightOverlay (~> 0.41.1) - - FlipperKit/FlipperKitLayoutPlugin (~> 0.41.1) - - FlipperKit/FlipperKitLayoutTextSearchable (~> 0.41.1) - - FlipperKit/FlipperKitNetworkPlugin (~> 0.41.1) - - FlipperKit/FlipperKitReactPlugin (~> 0.41.1) - - FlipperKit/FlipperKitUserDefaultsPlugin (~> 0.41.1) - - FlipperKit/SKIOSNetworkPlugin (~> 0.41.1) + - FlipperKit (~> 0.54.0) + - FlipperKit/Core (~> 0.54.0) + - FlipperKit/CppBridge (~> 0.54.0) + - FlipperKit/FBCxxFollyDynamicConvert (~> 0.54.0) + - FlipperKit/FBDefines (~> 0.54.0) + - FlipperKit/FKPortForwarding (~> 0.54.0) + - FlipperKit/FlipperKitHighlightOverlay (~> 0.54.0) + - FlipperKit/FlipperKitLayoutPlugin (~> 0.54.0) + - FlipperKit/FlipperKitLayoutTextSearchable (~> 0.54.0) + - FlipperKit/FlipperKitNetworkPlugin (~> 0.54.0) + - FlipperKit/FlipperKitReactPlugin (~> 0.54.0) + - FlipperKit/FlipperKitUserDefaultsPlugin (~> 0.54.0) + - FlipperKit/SKIOSNetworkPlugin (~> 0.54.0) - Folly (from `../node_modules/react-native/third-party-podspecs/Folly.podspec`) - glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`) - RCTRequired (from `../node_modules/react-native/Libraries/RCTRequired`) @@ -367,6 +369,7 @@ DEPENDENCIES: - React-RCTVibration (from `../node_modules/react-native/Libraries/Vibration`) - ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`) - "RNCAsyncStorage (from `../node_modules/@react-native-community/async-storage`)" + - "RNCPushNotificationIOS (from `../node_modules/@react-native-community/push-notification-ios`)" - Yoga (from `../node_modules/react-native/ReactCommon/yoga`) SPEC REPOS: @@ -447,6 +450,8 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native/ReactCommon" RNCAsyncStorage: :path: "../node_modules/@react-native-community/async-storage" + RNCPushNotificationIOS: + :path: "../node_modules/@react-native-community/push-notification-ios" Yoga: :path: "../node_modules/react-native/ReactCommon/yoga" @@ -455,45 +460,46 @@ SPEC CHECKSUMS: CocoaAsyncSocket: 694058e7c0ed05a9e217d1b3c7ded962f4180845 CocoaLibEvent: 2fab71b8bd46dd33ddb959f7928ec5909f838e3f DoubleConversion: cde416483dac037923206447da6e1454df403714 - FBLazyVector: 3ef4a7f62e7db01092f9d517d2ebc0d0677c4a37 - FBReactNativeSpec: dc7fa9088f0f2a998503a352b0554d69a4391c5a - Flipper: 33585e2d9810fe5528346be33bcf71b37bb7ae13 + FBLazyVector: 878b59e31113e289e275165efbe4b54fa614d43d + FBReactNativeSpec: 7da9338acfb98d4ef9e5536805a0704572d33c2f + Flipper: be611d4b742d8c87fbae2ca5f44603a02539e365 Flipper-DoubleConversion: 38631e41ef4f9b12861c67d17cb5518d06badc41 Flipper-Folly: c12092ea368353b58e992843a990a3225d4533c3 Flipper-Glog: 1dfd6abf1e922806c52ceb8701a3599a79a200a6 Flipper-PeerTalk: 116d8f857dc6ef55c7a5a75ea3ceaafe878aadc9 Flipper-RSocket: 64e7431a55835eb953b0bf984ef3b90ae9fdddd7 - FlipperKit: bc68102cd4952a258a23c9c1b316c7bec1fecf83 + FlipperKit: ab353d41aea8aae2ea6daaf813e67496642f3d7d Folly: b73c3869541e86821df3c387eb0af5f65addfab4 glog: 40a13f7840415b9a77023fbcae0f1e6f43192af3 OpenSSL-Universal: 8b48cc0d10c1b2923617dfe5c178aa9ed2689355 - RCTRequired: f13f25e7b12f925f1f6a6a8c69d929a03c0129fe - RCTTypeSafety: 44982c5c8e43ff4141eb519a8ddc88059acd1f3a - React: e1c65dd41cb9db13b99f24608e47dd595f28ca9a - React-callinvoker: 552a6a6bc8b3bb794cf108ad59e5a9e2e3b4fc98 - React-Core: 9d341e725dc9cd2f49e4c49ad1fc4e8776aa2639 - React-CoreModules: 5335e168165da7f7083ce7147768d36d3e292318 - React-cxxreact: d3261ec5f7d11743fbf21e263a34ea51d1f13ebc - React-jsi: 54245e1d5f4b690dec614a73a3795964eeef13a8 - React-jsiexecutor: 8ca588cc921e70590820ce72b8789b02c67cce38 - React-jsinspector: b14e62ebe7a66e9231e9581279909f2fc3db6606 + RCTRequired: 48884c74035a0b5b76dbb7a998bd93bcfc5f2047 + RCTTypeSafety: edf4b618033c2f1c5b7bc3d90d8e085ed95ba2ab + React: f36e90f3ceb976546e97df3403e37d226f79d0e3 + React-callinvoker: 18874f621eb96625df7a24a7dc8d6e07391affcd + React-Core: ac3d816b8e3493970153f4aaf0cff18af0bb95e6 + React-CoreModules: 4016d3a4e518bcfc4f5a51252b5a05692ca6f0e1 + React-cxxreact: ffc9129013b87cb36cf3f30a86695a3c397b0f99 + React-jsi: df07aa95b39c5be3e41199921509bfa929ed2b9d + React-jsiexecutor: b56c03e61c0dd5f5801255f2160a815f4a53d451 + React-jsinspector: 8e68ffbfe23880d3ee9bafa8be2777f60b25cbe2 react-native-config: 9a061347e0136fdb32d43a34d60999297d672361 react-native-image-picker: a6c3d644751a388b0fc8b56822ff7cbd398a3008 react-native-netinfo: d2c312fa4b151214e1d5c8456ddb5f28ff24a576 react-native-safe-area-context: 0ed9288ed4409beabb0817b54efc047286fc84da react-native-webview: 797f50d16bb271c4270bc742040a64c79ec7147c - React-RCTActionSheet: 910163b6b09685a35c4ebbc52b66d1bfbbe39fc5 - React-RCTAnimation: 9a883bbe1e9d2e158d4fb53765ed64c8dc2200c6 - React-RCTBlob: 39cf0ece1927996c4466510e25d2105f67010e13 - React-RCTImage: de355d738727b09ad3692f2a979affbd54b5f378 - React-RCTLinking: 8122f221d395a63364b2c0078ce284214bd04575 - React-RCTNetwork: 8f96c7b49ea6a0f28f98258f347b6ad218bc0830 - React-RCTSettings: 8a49622aff9c1925f5455fa340b6fe4853d64ab6 - React-RCTText: 1b6773e776e4b33f90468c20fe3b16ca3e224bb8 - React-RCTVibration: 4d2e726957f4087449739b595f107c0d4b6c2d2d - ReactCommon: a0a1edbebcac5e91338371b72ffc66aa822792ce + React-RCTActionSheet: 53ea72699698b0b47a6421cb1c8b4ab215a774aa + React-RCTAnimation: 1befece0b5183c22ae01b966f5583f42e69a83c2 + React-RCTBlob: 0b284339cbe4b15705a05e2313a51c6d8b51fa40 + React-RCTImage: d1756599ebd4dc2cb19d1682fe67c6b976658387 + React-RCTLinking: 9af0a51c6d6a4dd1674daadafffc6d03033a6d18 + React-RCTNetwork: 332c83929cc5eae0b3bbca4add1d668e1fc18bda + React-RCTSettings: d6953772cfd55f2c68ad72b7ef29efc7ec49f773 + React-RCTText: 65a6de06a7389098ce24340d1d3556015c38f746 + React-RCTVibration: 8e9fb25724a0805107fc1acc9075e26f814df454 + ReactCommon: 4167844018c9ed375cc01a843e9ee564399e53c3 RNCAsyncStorage: db711e29e5e0500d9bd21aa0c2e397efa45302b1 - Yoga: 7740b94929bbacbddda59bf115b5317e9a161598 + RNCPushNotificationIOS: 8025ff0b610d7b28d29ddc1b619cd55814362e4c + Yoga: 7d13633d129fd179e01b8953d38d47be90db185a YogaKit: f782866e155069a2cca2517aafea43200b01fd5a PODFILE CHECKSUM: 7f6bb9c130ea13236f8249f800f75d671c1833fa From aa1f1bd5ea1ed4b05f2270938802b7c84b20a515 Mon Sep 17 00:00:00 2001 From: Marc Glasser Date: Thu, 8 Oct 2020 20:09:03 -0700 Subject: [PATCH 30/30] make these constants consistent --- desktop/ELECTRON_EVENTS.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/desktop/ELECTRON_EVENTS.js b/desktop/ELECTRON_EVENTS.js index a0df58fe7a9b..d2ce63868986 100644 --- a/desktop/ELECTRON_EVENTS.js +++ b/desktop/ELECTRON_EVENTS.js @@ -1,6 +1,6 @@ const ELECTRON_EVENTS = { - REQUEST_UPDATE_BADGE_COUNT: 'request-update-badge-count', - REQUEST_VISIBILITY: 'request_visibility', + REQUEST_UPDATE_BADGE_COUNT: 'requestUpdateBadgeCount', + REQUEST_VISIBILITY: 'requestVisibility', }; module.exports = ELECTRON_EVENTS;