diff --git a/package-lock.json b/package-lock.json index 925284e..3641599 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2074,9 +2074,9 @@ } }, "@react-navigation/core": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@react-navigation/core/-/core-3.5.0.tgz", - "integrity": "sha512-NLm24lA51R8o8c+iFnwtN9elqRzm4OJ8f1qPBCUNIYW1sb8M5yCD53vRP0fRcPFpr/6Xzs2TJMsWnnebwFp0Rw==", + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/@react-navigation/core/-/core-3.5.1.tgz", + "integrity": "sha512-q7NyhWVYOhVIWqL2GZKa6G78YarXaVTTtOlSDkvy4ZIggo40wZzamlnrJRvsaQX46gsgw45FAWb5SriHh8o7eA==", "requires": { "hoist-non-react-statics": "^3.3.0", "path-to-regexp": "^1.7.0", @@ -2085,9 +2085,9 @@ }, "dependencies": { "hoist-non-react-statics": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.0.tgz", - "integrity": "sha512-0XsbTXxgiaCDYDIWFcwkmerZPSwywfUqYmwT4jzewKTQSWoE6FCMoUVOeBJWK3E/CrWbxRG3m5GzY4lnIwGRBA==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz", + "integrity": "sha512-wbg3bpgA/ZqWrZuMOeJi8+SKMhr7X9TesL/rXMjTzh0p0JUBo3II8DHboYbuIXWRlttrUFxwcu/5kygrCw8fJw==", "requires": { "react-is": "^16.7.0" } @@ -2095,9 +2095,9 @@ } }, "@react-navigation/native": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/@react-navigation/native/-/native-3.6.1.tgz", - "integrity": "sha512-q12/sG4LinEokc7K0DRn0uxoBuLy42TedHNDXN3b9Fj9c2FamUqlLeTZQtjDQc8dLBEeN2Bpp5FSDN8MYxxjAA==", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/@react-navigation/native/-/native-3.6.2.tgz", + "integrity": "sha512-Cybeou6N82ZeRmgnGlu+wzlV3z5BZQR2dmYaNFV1TNLUGHqtvv8E7oNw9uYcz9Ox5LFbiX+FdNTn2d6ZPlK0kg==", "requires": { "hoist-non-react-statics": "^3.0.1", "react-native-safe-area-view": "^0.14.1", @@ -2105,27 +2105,12 @@ }, "dependencies": { "hoist-non-react-statics": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.0.tgz", - "integrity": "sha512-0XsbTXxgiaCDYDIWFcwkmerZPSwywfUqYmwT4jzewKTQSWoE6FCMoUVOeBJWK3E/CrWbxRG3m5GzY4lnIwGRBA==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz", + "integrity": "sha512-wbg3bpgA/ZqWrZuMOeJi8+SKMhr7X9TesL/rXMjTzh0p0JUBo3II8DHboYbuIXWRlttrUFxwcu/5kygrCw8fJw==", "requires": { "react-is": "^16.7.0" } - }, - "react-native-safe-area-view": { - "version": "0.14.7", - "resolved": "https://registry.npmjs.org/react-native-safe-area-view/-/react-native-safe-area-view-0.14.7.tgz", - "integrity": "sha512-fmuBYpvKDJK33bimo4JXrK2BN2CGw7nof1y1LDRgzqv+FZ3eADSDGshprN8WeQqSZjQ20hJx1CiWk28Edg/v4Q==", - "requires": { - "hoist-non-react-statics": "^2.3.1" - }, - "dependencies": { - "hoist-non-react-statics": { - "version": "2.5.5", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz", - "integrity": "sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw==" - } - } } } }, @@ -9155,9 +9140,9 @@ "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" }, "path-to-regexp": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz", - "integrity": "sha1-Wf3g9DW62suhA6hOnTvGTpa5k30=", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", + "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", "requires": { "isarray": "0.0.1" }, @@ -9526,9 +9511,9 @@ "dev": true }, "query-string": { - "version": "6.8.2", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-6.8.2.tgz", - "integrity": "sha512-J3Qi8XZJXh93t2FiKyd/7Ec6GNifsjKXUsVFkSBj/kjLsDylWhnCz4NT1bkPcKotttPW+QbKGqqPH8OoI2pdqw==", + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-6.9.0.tgz", + "integrity": "sha512-KG4bhCFYapExLsUHrFt+kQVEegF2agm4cpF/VNc6pZVthIfCc/GK8t8VyNIE3nyXG9DK3Tf2EGkxjR6/uRdYsA==", "requires": { "decode-uri-component": "^0.2.0", "split-on-first": "^1.0.0", @@ -9899,6 +9884,14 @@ "resolved": "https://registry.npmjs.org/react-native-reanimated/-/react-native-reanimated-1.4.0.tgz", "integrity": "sha512-tO7nSNNP+iRLVbkcSS5GXyDBb7tSI02+XuRL3/S39EAr35rnvUy2JfeLUQG+fWSObJjnMVhasUDEUwlENk8IXw==" }, + "react-native-safe-area-view": { + "version": "0.14.8", + "resolved": "https://registry.npmjs.org/react-native-safe-area-view/-/react-native-safe-area-view-0.14.8.tgz", + "integrity": "sha512-MtRSIcZNstxv87Jet+UsPhEd1tpGe8cVskDXlP657x6rHpSrbrc+y13ZNXrwAgGNNhqQNX7UJT68ZIq//ZRmvw==", + "requires": { + "hoist-non-react-statics": "^2.3.1" + } + }, "react-native-screens": { "version": "1.0.0-alpha.23", "resolved": "https://registry.npmjs.org/react-native-screens/-/react-native-screens-1.0.0-alpha.23.tgz", @@ -10098,14 +10091,14 @@ } }, "react-navigation": { - "version": "3.12.1", - "resolved": "https://registry.npmjs.org/react-navigation/-/react-navigation-3.12.1.tgz", - "integrity": "sha512-WLjQis/A40cIMpFlw4o26nSLN+CvrZp8MGvJoL5K5H7DMZ/TdwgPa/Nm2sAQA27Hw7hOohQGj+diyxFRZi89Iw==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/react-navigation/-/react-navigation-3.13.0.tgz", + "integrity": "sha512-r64bTImY2aNye8wtd39ubouVB6ZMJqjVQYKxH4LFmOav4FsI59fQTDN7sZzyJa29owowYw/wVkh+NWGT+tdD1A==", "requires": { - "@react-navigation/core": "~3.5.0", - "@react-navigation/native": "~3.6.1", + "@react-navigation/core": "~3.5.1", + "@react-navigation/native": "~3.6.2", "react-navigation-drawer": "~1.4.0", - "react-navigation-stack": "~1.5.0", + "react-navigation-stack": "1.5.3", "react-navigation-tabs": "~1.2.0" }, "dependencies": { @@ -10118,9 +10111,9 @@ } }, "react-navigation-stack": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/react-navigation-stack/-/react-navigation-stack-1.5.5.tgz", - "integrity": "sha512-qMhOhmUmyPNfFGWMbwv5flrNVsFU4JZSBWnONSgVGK4KWGW8DbobXBi4i4sBAC9Kg8EqJK0qyWcxnkMJJtfMWA==", + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/react-navigation-stack/-/react-navigation-stack-1.5.3.tgz", + "integrity": "sha512-MQcwDVbZUYsTtDJb5cFOSm+K+e7KpUCoROaGoUOR+JHWE3uuaJ3pd/Nu+32a57J98TNBf4qq0+2TPJWl6z6IBg==", "requires": { "prop-types": "^15.7.2" } @@ -10261,16 +10254,16 @@ } }, "redux-persist": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/redux-persist/-/redux-persist-5.10.0.tgz", - "integrity": "sha512-sSJAzNq7zka3qVHKce1hbvqf0Vf5DuTVm7dr4GtsqQVOexnrvbV47RWFiPxQ8fscnyiuWyD2O92DOxPl0tGCRg==" + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/redux-persist/-/redux-persist-6.0.0.tgz", + "integrity": "sha512-71LLMbUq2r02ng2We9S215LtPu3fY0KgaGE0k8WRgl6RkqxtGfl7HUozz1Dftwsb0D/5mZ8dwAaPbtnzfvbEwQ==" }, "redux-persist-filesystem-storage": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/redux-persist-filesystem-storage/-/redux-persist-filesystem-storage-1.4.1.tgz", - "integrity": "sha512-QDBlRWdFpn4JMrdLZcimwT7d3yc0xkSnA5j9xKWAY2Qw9rd3Uzlt76qXwEuuQ4M3qgKu/nLE8Roazl5BUcxfcA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/redux-persist-filesystem-storage/-/redux-persist-filesystem-storage-2.1.0.tgz", + "integrity": "sha512-KFj4opJCu8WXUveNV8YKZ1OMGiQm0kiTjWHSSYJ2hmQNrhEa7MOMiIcTImfNDO3vfRl9U+bidKDhQebtCeWrCw==", "requires": { - "rn-fetch-blob": "0.10.15" + "rn-fetch-blob": "^0.10.16" }, "dependencies": { "glob": { @@ -10287,9 +10280,9 @@ } }, "rn-fetch-blob": { - "version": "0.10.15", - "resolved": "https://registry.npmjs.org/rn-fetch-blob/-/rn-fetch-blob-0.10.15.tgz", - "integrity": "sha512-/m/gurTaPAvR3J843uehHhznj5k89x7XClyO5ejmbspNLNQ4ByF+kZs80wiiKGWntj+Wqo0jJu1goArXEfc0kA==", + "version": "0.10.16", + "resolved": "https://registry.npmjs.org/rn-fetch-blob/-/rn-fetch-blob-0.10.16.tgz", + "integrity": "sha512-hZV+nF0HK4CWmspXGMw7/G8Q8qugpS/wbKiNLsFpdBZR8XYzjFZNvBWgGyC0F5JWQn3sjmK2w/FJjBlwdQWNQg==", "requires": { "base-64": "0.1.0", "glob": "7.0.6" diff --git a/package.json b/package.json index 553fc77..a4754ff 100644 --- a/package.json +++ b/package.json @@ -34,14 +34,14 @@ "react-native-super-grid": "^3.0.4", "react-native-vector-icons": "^6.6.0", "react-native-video": "lbryio/react-native-video#7992ff945872f9bd00a3736d9ff1318f343abf47", - "react-navigation": "^3.11.0", + "react-navigation": "^3.13.0", "react-navigation-drawer": "^2.3.3", "react-navigation-redux-helpers": "^3.0.2", "react-navigation-stack": "^1.8.1", "react-redux": "^5.0.3", "redux": "^4.0.4", - "redux-persist": "^5.10.0", - "redux-persist-filesystem-storage": "^1.3.2", + "redux-persist": "^6.0.0", + "redux-persist-filesystem-storage": "^2.1.0", "redux-persist-transform-compress": "^4.2.0", "redux-persist-transform-filter": "0.0.18", "redux-thunk": "^2.3.0", diff --git a/src/component/fileListItem/view.js b/src/component/fileListItem/view.js index a5f9664..48d4aa0 100644 --- a/src/component/fileListItem/view.js +++ b/src/component/fileListItem/view.js @@ -178,7 +178,7 @@ class FileListItem extends React.PureComponent { {!title && !name && {uri}} {!title && !name && ( - + )} @@ -209,7 +209,7 @@ class FileListItem extends React.PureComponent { normalizeURI(shortChannelUri || fullChannelUri), null, false, - fullChannelUri + fullChannelUri, ); }} /> diff --git a/src/page/search/index.js b/src/page/search/index.js index dc39f39..b065d64 100644 --- a/src/page/search/index.js +++ b/src/page/search/index.js @@ -1,14 +1,15 @@ import { connect } from 'react-redux'; import { doClaimSearch, + doResolveUris, doSearch, doUpdateSearchQuery, makeSelectSearchUris, selectClaimSearchByQuery, selectIsSearching, + selectResolvingUris, selectSearchValue, makeSelectQueryWithOptions, - selectSearchUrisByQuery, } from 'lbry-redux'; import { doPushDrawerStack, doSetPlayerVisible } from 'redux/actions/drawer'; import { selectCurrentRoute } from 'redux/selectors/drawer'; @@ -22,8 +23,8 @@ const select = state => ({ currentRoute: selectCurrentRoute(state), isSearching: selectIsSearching(state), query: selectSearchValue(state), + resolvingUris: selectResolvingUris(state), uris: makeSelectSearchUris(makeSelectQueryWithOptions(null, numSearchResults)(state))(state), - urisByQuery: selectSearchUrisByQuery(state), }); const perform = dispatch => ({ @@ -31,10 +32,11 @@ const perform = dispatch => ({ claimSearch: options => dispatch(doClaimSearch(options)), updateSearchQuery: query => dispatch(doUpdateSearchQuery(query)), pushDrawerStack: () => dispatch(doPushDrawerStack(Constants.DRAWER_ROUTE_SEARCH)), + resolveUris: uris => dispatch(doResolveUris(uris)), setPlayerVisible: () => dispatch(doSetPlayerVisible(false)), }); export default connect( select, - perform + perform, )(SearchPage); diff --git a/src/page/search/view.js b/src/page/search/view.js index 1be1ba7..890fd47 100644 --- a/src/page/search/view.js +++ b/src/page/search/view.js @@ -26,6 +26,7 @@ class SearchPage extends React.PureComponent { showTagResult: false, claimSearchRun: false, claimSearchOptions: null, + resultsResolved: false, }; static navigationOptions = { @@ -80,11 +81,37 @@ class SearchPage extends React.PureComponent { this.setState({ currentQuery: query, currentUri: isURIValid(query) ? normalizeURI(query) : null, + resultsResolved: false, }); search(query); } } + allContentResolved() { + const { uris, resolvingUris } = this.props; + if (!this.state.resultsResolved) { + return false; + } + if (uris) { + let allResolved = true; + uris.forEach(uri => { + allResolved = allResolved && !resolvingUris.includes(uri); + }); + return allResolved; + } + + return false; + } + + shouldComponentUpdate() { + const { isSearching, uris } = this.props; + return (isSearching && (!uris || uris.length === 0)) || (!isSearching && this.allContentResolved()); + } + + componentDidUpdate() { + const { isSearching, resolveUris, uris } = this.props; + } + getSearchQuery() { const { navigation } = this.props; if (navigation && navigation.state && navigation.state.params) { @@ -130,11 +157,11 @@ class SearchPage extends React.PureComponent { this.setState({ claimSearchOptions: options, claimSearchRun: true }, () => claimSearch(options)); } - if (this.state.claimSearchRun && this.state.claimSearchOptions) { + /* if (this.state.claimSearchRun && this.state.claimSearchOptions) { const claimSearchKey = createNormalizedClaimSearchKey(this.state.claimSearchOptions); const claimSearchUris = claimSearchByQuery[claimSearchKey]; this.setState({ showTagResult: claimSearchUris && claimSearchUris.length > 0 }); - } + } */ return ( @@ -155,7 +182,7 @@ class SearchPage extends React.PureComponent { }; render() { - const { isSearching, navigation, query, uris, urisByQuery } = this.props; + const { isSearching, navigation, query, uris } = this.props; return ( @@ -167,22 +194,30 @@ class SearchPage extends React.PureComponent { )} - item} - initialNumToRender={10} - maxToRenderPerBatch={20} - removeClippedSubviews - ListEmptyComponent={!isSearching ? this.listEmptyComponent() : null} - ListHeaderComponent={this.state.currentUri ? this.listHeaderComponent(this.state.showTagResult) : null} - renderItem={({ item }) => ( - - )} - /> + {!isSearching && ( + item} + initialNumToRender={8} + maxToRenderPerBatch={20} + removeClippedSubviews + ListEmptyComponent={!isSearching ? this.listEmptyComponent() : null} + ListHeaderComponent={this.state.currentUri ? this.listHeaderComponent(this.state.showTagResult) : null} + renderItem={({ item }) => ( + + )} + /> + )} );