lbry-desktop/ui/component/userChannelFollowIntro/view.jsx
saltrafael b75a4014b6
Re-design comment threads (#1489)
* Redesign threadline and fetching state

- threadline goes right below channel avatar, mimicking reddits implementation, has a increase effect on hover and is slimmer, creating more space for comments on screen
- fetching state now replaces show/hide button, also mimicking reddit, and now says that it is loading, instead of a blank spinner, and also improves space a bit

* Redesign comment threads

- Allow for infinite comment chains
- Can go back and forth between the pages
- Can go back to all comments or to the first comment in the chain
- Some other improvements, which include:
- add title on non-drawer comment sections (couldn't see amount of comments)
- fix Expandable component (would begin expanded and collapse after the effect runs, which looked bad and shifted the layout, now each comments greater than the set length begins collapsed)
- used constants for consistency

* Fix replying to last thread comment

* Fix buttons condition (only on fetched comment to avoid deleted case)

* Fix auto-scroll

* Bring back instant feedback for Show More replies

* Improve thread back links

- Now going back to all comments links the top-level comment for easier navigation
- Going back to ~ previous ~ now goes back into the chain instead of topmost level

* Clear timeouts due to unrelated issue

* Fix deep thread linked comment case and more scroll improvements

* More minor changes

* Flow

* Fix commentList tile style

* Fix long channel names overflowing on small screens

* More scroll changes

* Fix threadline

* Revert "Fix long channel names overflowing on small screens"

This reverts commit e4d2dc7da5861ed8136a60f3352e41a690cd4d33.

* Fix replies fetch

* Revert "Fix replies fetch"

This reverts commit ec70054675a604a7a5f3764ba07c36bf7b0f49c8.

* Cleanup and make smooth

* Always use linked comment on threads

* Cleanup

* Higlight thread comment

* Fix comment body styles
2022-05-16 06:22:13 -04:00

117 lines
3.8 KiB
JavaScript

// @flow
import { CUSTOM_HOMEPAGE, SIMPLE_SITE, SITE_NAME } from 'config';
import { parseURI } from 'util/lbryURI';
import * as CS from 'constants/claim_search';
import COMMUNITY_CHANNELS from 'constants/community_channels';
import Button from 'component/button';
import Card from 'component/common/card';
import ClaimListDiscover from 'component/claimListDiscover';
import Nag from 'component/common/nag';
import React from 'react';
type Props = {
homepageData: any,
language: string,
prefsReady: boolean,
subscribedChannels: Array<Subscription>,
channelSubscribe: (string, string) => void,
onContinue: () => void,
};
function UserChannelFollowIntro(props: Props) {
const { homepageData, language, prefsReady, subscribedChannels, channelSubscribe, onContinue } = props;
const { PRIMARY_CONTENT, LATEST } = homepageData;
const autoFollowChannels = COMMUNITY_CHANNELS[language] || COMMUNITY_CHANNELS['en'];
const channelsToSubscribe = autoFollowChannels
.trim()
.split(' ')
.filter((x) => x !== '');
let channelIds;
if (CUSTOM_HOMEPAGE) {
if (LATEST) {
channelIds = LATEST.channelIds;
} else if (PRIMARY_CONTENT) {
channelIds = PRIMARY_CONTENT.channelIds;
}
}
const followingCount = (subscribedChannels && subscribedChannels.length) || 0;
const followingCountIgnoringAutoFollows = (subscribedChannels || []).filter(
(channel) => !channelsToSubscribe.includes(channel.uri)
).length;
// subscribe to odysee channels
React.useEffect(() => {
if (channelsToSubscribe && channelsToSubscribe.length && prefsReady) {
const delayedChannelSubscribe = () => {
channelsToSubscribe.forEach((channelUri) => {
let claimName;
try {
const { claimName: name } = parseURI(channelUri);
claimName = name;
} catch (e) {}
if (claimName) channelSubscribe(claimName, channelUri);
});
};
const timer = setTimeout(delayedChannelSubscribe, 1000);
return () => clearTimeout(timer);
}
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [prefsReady]);
return (
<Card
className="channelsToFollow-wrapper"
title={__('Find channels to follow')}
subtitle={__(
'%SITE_NAME% works better if you find and follow a couple creators you like. You can also block channels you never want to see.',
{ SITE_NAME }
)}
actions={
<div className="section__body">
<ClaimListDiscover
hideFilters={SIMPLE_SITE}
hideAdvancedFilter={SIMPLE_SITE}
meta={
<Button
button={subscribedChannels.length < 1 ? 'alt' : 'primary'}
onClick={onContinue}
label={subscribedChannels.length < 1 ? __('Skip') : __('Continue')}
/>
}
defaultOrderBy={CS.ORDER_BY_TRENDING}
defaultFreshness={CS.FRESH_ALL}
claimType="channel"
claimIds={(CUSTOM_HOMEPAGE && channelIds) || undefined}
defaultTags={followingCount > 3 ? CS.TAGS_FOLLOWED : undefined}
maxPages={SIMPLE_SITE ? 3 : undefined}
/>
{followingCountIgnoringAutoFollows > 0 && (
<Nag
type="helpful"
message={__(
followingCountIgnoringAutoFollows === 1
? 'Nice! You are currently following %followingCount% creator'
: 'Nice! You are currently following %followingCount% creators',
{
followingCount: followingCountIgnoringAutoFollows,
}
)}
actionText={__('Continue')}
onClick={onContinue}
/>
)}
</div>
}
/>
);
}
export default UserChannelFollowIntro;