import { createSelector } from 'reselect'; import { parseQueryParams } from 'util/query_params'; import lbryuri from 'lbryuri'; export const _selectState = state => state.app || {}; export const selectIsLoaded = createSelector( _selectState, state => state.isLoaded ); export const selectCurrentPath = createSelector( _selectState, state => state.currentPath ); export const selectCurrentPage = createSelector(selectCurrentPath, path => { return path.replace(/^\//, '').split('?')[0]; }); export const selectCurrentParams = createSelector(selectCurrentPath, path => { if (path === undefined) return {}; if (!path.match(/\?/)) return {}; return parseQueryParams(path.split('?')[1]); }); export const selectPageTitle = createSelector( selectCurrentPage, selectCurrentParams, (page, params) => { switch (page) { case 'settings': case 'help': case 'report': case 'wallet': case 'send': case 'receive': case 'rewards': case 'start': case 'publish': case 'help': case 'developer': return __(page.charAt(0).toUpperCase() + page.slice(1)); case 'search': return params.query ? __('Search results for %s', params.query) : __('Search'); case 'show': return lbryuri.normalize(params.uri); case 'downloaded': return __('Downloads & Purchases'); case 'published': return __('Publishes'); case 'discover': return __('Home'); default: return ''; } } ); export const selectPlatform = createSelector( _selectState, state => state.platform ); export const selectUpdateUrl = createSelector(selectPlatform, platform => { switch (platform) { case 'darwin': return 'https://lbry.io/get/lbry.dmg'; case 'linux': return 'https://lbry.io/get/lbry.deb'; case 'win32': return 'https://lbry.io/get/lbry.exe'; default: throw 'Unknown platform'; } }); export const selectVersion = createSelector(_selectState, state => { return state.version; }); export const selectUpgradeFilename = createSelector( selectPlatform, selectVersion, (platform, version) => { switch (platform) { case 'darwin': return `LBRY_${version}.dmg`; case 'linux': return `LBRY_${version}_amd64.deb`; case 'win32': return `LBRY_${version}.exe`; default: throw 'Unknown platform'; } } ); export const selectCurrentModal = createSelector( _selectState, state => state.modal ); export const selectDownloadProgress = createSelector( _selectState, state => state.downloadProgress ); export const selectDownloadComplete = createSelector( _selectState, state => state.upgradeDownloadCompleted ); export const selectHeaderLinks = createSelector(selectCurrentPage, page => { switch (page) { case 'wallet': case 'send': case 'receive': case 'rewards': return { wallet: __('Overview'), send: __('Send'), receive: __('Receive'), rewards: __('Rewards') }; case 'downloaded': case 'published': return { downloaded: __('Downloaded'), published: __('Published') }; case 'settings': case 'help': return { settings: __('Settings'), help: __('Help') }; default: return null; } }); export const selectUpgradeSkipped = createSelector( _selectState, state => state.upgradeSkipped ); export const selectUpgradeDownloadPath = createSelector( _selectState, state => state.downloadPath ); export const selectUpgradeDownloadItem = createSelector( _selectState, state => state.downloadItem ); export const selectModalExtraContent = createSelector( _selectState, state => state.modalExtraContent ); export const selectDaemonReady = createSelector( _selectState, state => state.daemonReady ); export const selectObscureNsfw = createSelector( _selectState, state => !!state.obscureNsfw ); export const selectSnackBar = createSelector( _selectState, state => state.snackBar || {} ); export const selectSnackBarSnacks = createSelector( selectSnackBar, snackBar => snackBar.snacks || [] );