diff --git a/src/hooks/useFeedStateString.js b/src/hooks/useFeedStateString.js index 18411c9a..23b316f0 100644 --- a/src/hooks/useFeedStateString.js +++ b/src/hooks/useFeedStateString.js @@ -1,77 +1,77 @@ import { useMemo } from "react" const useFeedStateString = (subplebbits) => { - return useMemo(() => { - const getClientHost = (clientUrl) => { - try { - clientUrl = new URL(clientUrl).hostname || clientUrl - } - catch (e) {} - return clientUrl + return useMemo(() => { + const getClientHost = (clientUrl) => { + try { + clientUrl = new URL(clientUrl).hostname || clientUrl + } + catch (e) {} + return clientUrl + } + const getClientUrls = (regex) => { + const clientUrls = new Set() + const addClientUrl = (client, clientUrl) => client?.state?.match?.(regex) && clientUrls.add(getClientHost(clientUrl)) + for (const subplebbit of subplebbits) { + for (const clientUrl in subplebbit?.clients?.ipfsGateways) { + addClientUrl(subplebbit.clients.ipfsGateways[clientUrl], clientUrl) } - const getClientUrls = (regex) => { - const clientUrls = new Set() - const addClientUrl = (client, clientUrl) => client?.state?.match?.(regex) && clientUrls.add(getClientHost(clientUrl)) - for (const subplebbit of subplebbits) { - for (const clientUrl in subplebbit?.clients?.ipfsGateways) { - addClientUrl(subplebbit.clients.ipfsGateways[clientUrl], clientUrl) - } - for (const clientUrl in subplebbit?.clients?.ipfsClients) { - addClientUrl(subplebbit.clients.ipfsClients[clientUrl], clientUrl) - } - for (const chainTicker in subplebbit?.clients?.chainProviders) { - for (const clientUrl in subplebbit.clients.chainProviders[chainTicker]) { - addClientUrl(subplebbit.clients.chainProviders[chainTicker][clientUrl], clientUrl) - } - } - } - return [...clientUrls] + for (const clientUrl in subplebbit?.clients?.ipfsClients) { + addClientUrl(subplebbit.clients.ipfsClients[clientUrl], clientUrl) } + for (const chainTicker in subplebbit?.clients?.chainProviders) { + for (const clientUrl in subplebbit.clients.chainProviders[chainTicker]) { + addClientUrl(subplebbit.clients.chainProviders[chainTicker][clientUrl], clientUrl) + } + } + } + return [...clientUrls] + } - if (!subplebbits) { - return undefined; - } + if (!subplebbits) { + return undefined; + } - const states = {} - for (const subplebbit of subplebbits) { - states[subplebbit?.updatingState] = (states[subplebbit?.updatingState] || 0) + 1 - } + const states = {} + for (const subplebbit of subplebbits) { + states[subplebbit?.updatingState] = (states[subplebbit?.updatingState] || 0) + 1 + } - // e.g. Resolving 2 addresses from infura.io, fetching 2 IPNS, 1 IPFS from cloudflare-ipfs.com, ipfs.io - let stateString = '' - if (states['resolving-address']) { - stateString += `resolving ${states['resolving-address']} addresses` - const clientUrls = getClientUrls(/address/) - if (clientUrls.length) { - stateString += ` from ${clientUrls.join(', ')}` - } - } - if (states['fetching-ipns'] || states['fetching-ipfs']) { - if (stateString) { - stateString += ', ' - } - stateString += `fetching ` - if (states['fetching-ipns']) { - stateString += `${states['fetching-ipns']} IPNS` - } - if (states['fetching-ipfs']) { - if (states['fetching-ipns']) { - stateString += ', ' - } - stateString += `${states['fetching-ipfs']} IPNS` - } - const clientUrls = getClientUrls(/ipfs|ipns/) - if (clientUrls.length) { - stateString += ` from ${clientUrls.join(', ')}` - } + // e.g. Resolving 2 addresses from infura.io, fetching 2 IPNS, 1 IPFS from cloudflare-ipfs.com, ipfs.io + let stateString = '' + if (states['resolving-address']) { + stateString += `resolving ${states['resolving-address']} addresses` + const clientUrls = getClientUrls(/address/) + if (clientUrls.length) { + stateString += ` from ${clientUrls.join(', ')}` + } + } + if (states['fetching-ipns'] || states['fetching-ipfs']) { + if (stateString) { + stateString += ', ' + } + stateString += `fetching ` + if (states['fetching-ipns']) { + stateString += `${states['fetching-ipns']} IPNS` + } + if (states['fetching-ipfs']) { + if (states['fetching-ipns']) { + stateString += ', ' } + stateString += `${states['fetching-ipfs']} IPNS` + } + const clientUrls = getClientUrls(/ipfs|ipns/) + if (clientUrls.length) { + stateString += ` from ${clientUrls.join(', ')}` + } + } - // capitalize first letter - stateString = stateString.charAt(0).toUpperCase() + stateString.slice(1) + // capitalize first letter + stateString = stateString.charAt(0).toUpperCase() + stateString.slice(1) - // if string is empty, return undefined instead - return stateString || undefined - }, [subplebbits]) + // if string is empty, return undefined instead + return stateString || undefined + }, [subplebbits]) } export default useFeedStateString \ No newline at end of file diff --git a/src/hooks/useStateString.js b/src/hooks/useStateString.js index 57bd2b17..15fffb46 100644 --- a/src/hooks/useStateString.js +++ b/src/hooks/useStateString.js @@ -1,83 +1,103 @@ import { useMemo } from 'react' const useStateString = (commentOrSubplebbit) => { - return useMemo(() => { - if (!commentOrSubplebbit?.clients) { - return - } - const clients = commentOrSubplebbit?.clients + return useMemo(() => { + if (!commentOrSubplebbit?.clients) { + return + } + const clients = commentOrSubplebbit?.clients - const states = {} - const addState = (state, clientUrl) => { - if (!state || state === 'stopped') { - return + const states = {} + const addState = (state, clientUrl) => { + if (!state || state === 'stopped') { + return + } + if (!states[state]) { + states[state] = [] + } + states[state].push(clientUrl) + } + for (const clientUrl in clients?.ipfsGateways) { + addState(clients.ipfsGateways[clientUrl]?.state, clientUrl) + } + for (const clientUrl in clients?.ipfsClients) { + addState(clients.ipfsClients[clientUrl]?.state, clientUrl) + } + for (const chainTicker in clients?.chainProviders) { + for (const clientUrl in clients.chainProviders[chainTicker]) { + addState(clients.chainProviders[chainTicker][clientUrl]?.state, clientUrl) + } + } + + // find subplebbit pages states + if (commentOrSubplebbit?.posts?.clients) { + for (const clientType in commentOrSubplebbit.posts.clients) { + for (const sortType in commentOrSubplebbit.posts.clients[clientType]) { + for (const clientUrl in commentOrSubplebbit.posts.clients[clientType][sortType]) { + let state = commentOrSubplebbit.posts.clients[clientType][sortType][clientUrl].state + if (state === 'stopped') { + continue } + state += `-page-${sortType}` + console.log(clientType, sortType, clientUrl, state) if (!states[state]) { - states[state] = [] + states[state] = [] } states[state].push(clientUrl) + } } - for (const clientUrl in clients?.ipfsGateways) { - addState(clients.ipfsGateways[clientUrl]?.state, clientUrl) - } - for (const clientUrl in clients?.ipfsClients) { - addState(clients.ipfsClients[clientUrl]?.state, clientUrl) - } - for (const chainTicker in clients?.chainProviders) { - for (const clientUrl in clients.chainProviders[chainTicker]) { - addState(clients.chainProviders[chainTicker][clientUrl]?.state, clientUrl) - } - } + } + } - const getClientHost = (clientUrl) => { - try { - clientUrl = new URL(clientUrl).hostname || clientUrl - } - catch (e) {} - return clientUrl - } + const getClientHost = (clientUrl) => { + try { + clientUrl = new URL(clientUrl).hostname || clientUrl + } + catch (e) {} + return clientUrl + } - let stateString = '' - for (const state in states) { - const clientUrls = states[state] - const clientHosts = clientUrls.map(clientUrl => getClientHost(clientUrl)) + let stateString = '' + for (const state in states) { + const clientUrls = states[state] + const clientHosts = clientUrls.map(clientUrl => getClientHost(clientUrl)) - // if there are no valid hosts, skip this state - if (clientHosts.length === 0) { - continue - } + // if there are no valid hosts, skip this state + if (clientHosts.length === 0) { + continue + } - // separate 2 different states using ', ' - if (stateString) { - stateString += ', ' - } + // separate 2 different states using ', ' + if (stateString) { + stateString += ', ' + } - // e.g. 'fetching IPFS from cloudflare-ipfs.com, ipfs.io' - const formattedState = state.replaceAll('-', ' ').replace('ipfs', 'IPFS').replace('ipns', 'IPNS') - stateString += `${formattedState} from ${clientHosts.join(', ')}` - } + // e.g. 'fetching IPFS from cloudflare-ipfs.com, ipfs.io' + const formattedState = state.replaceAll('-', ' ').replace('ipfs', 'IPFS').replace('ipns', 'IPNS') + stateString += `${formattedState} from ${clientHosts.join(', ')}` + } - // fallback to comment or subplebbit state when possible - if (!stateString) { - if (commentOrSubplebbit?.publishingState !== 'stopped') { - stateString = commentOrSubplebbit.publishingState - } - else if (commentOrSubplebbit?.updatingState !== 'stopped') { - stateString = commentOrSubplebbit.updatingState - } - if (stateString) { - stateString = stateString.replaceAll('-', ' ').replace('ipfs', 'IPFS').replace('ipns', 'IPNS') - } - } + // fallback to comment or subplebbit state when possible + if (!stateString) { + if (commentOrSubplebbit?.publishingState !== 'stopped') { + stateString = commentOrSubplebbit.publishingState + } + else if (commentOrSubplebbit?.updatingState !== 'stopped') { + stateString = commentOrSubplebbit.updatingState + } + if (stateString) { + stateString = stateString.replaceAll('-', ' ').replace('ipfs', 'IPFS').replace('ipns', 'IPNS') + } + } - // capitalize first letter - if (stateString) { - stateString = stateString.charAt(0).toUpperCase() + stateString.slice(1) - } + // capitalize first letter + if (stateString) { + stateString = stateString.charAt(0).toUpperCase() + stateString.slice(1) + } - // if string is empty, return undefined instead - return stateString === '' ? undefined : stateString - }, [commentOrSubplebbit]) + // if string is empty, return undefined instead + return stateString === '' ? undefined : stateString + }, [commentOrSubplebbit]) } export default useStateString \ No newline at end of file