lbry-desktop/ui/component/common/card.jsx
zeppi f092e8cb7b fix isLivestream
channelContent - live

only poll streaming if has livestream claim

check channel for livestream claims every minute

update consts

poll livestream claims on setup page

do not poll livestream claims if live

smoother loading

unmerged redux bump
2021-03-29 01:15:27 -04:00

114 lines
3.1 KiB
JavaScript

// @flow
import type { Node } from 'react';
import React, { useState } from 'react';
import classnames from 'classnames';
import Icon from 'component/common/icon';
import Button from 'component/button';
import * as ICONS from 'constants/icons';
type Props = {
title?: string | Node,
subtitle?: string | Node,
titleActions?: string | Node,
body?: string | Node,
actions?: string | Node,
icon?: string,
className?: string,
isPageTitle?: boolean,
noTitleWrap?: boolean,
isBodyList?: boolean,
defaultExpand?: boolean,
nag?: Node,
smallTitle?: boolean,
onClick?: () => void,
children?: any, // not sure how this works
};
export default function Card(props: Props) {
const {
title,
subtitle,
titleActions,
body,
actions,
icon,
className,
isPageTitle = false,
isBodyList = false,
noTitleWrap = false,
smallTitle = false,
defaultExpand,
nag,
onClick,
children,
} = props;
const [expanded, setExpanded] = useState(defaultExpand);
const expandable = defaultExpand !== undefined;
return (
<section
className={classnames(className, 'card')}
onClick={() => {
if (onClick) {
onClick();
}
}}
>
{(title || subtitle) && (
<div
className={classnames('card__header--between', {
'card__header--nowrap': noTitleWrap,
})}
>
<div
className={classnames('card__title-section', {
'card__title-section--body-list': isBodyList,
'card__title-section--small': smallTitle,
})}
>
{icon && <Icon sectionIcon icon={icon} />}
<div>
{isPageTitle && <h1 className="card__title">{title}</h1>}
{!isPageTitle && (
<h2 className={classnames('card__title', { 'card__title--small': smallTitle })}>{title}</h2>
)}
{subtitle && <div className="card__subtitle">{subtitle}</div>}
</div>
</div>
<div>
{titleActions && <div className="card__title-actions">{titleActions}</div>}
{expandable && (
<div className="card__title-actions">
<Button
button="alt"
aria-expanded={expanded}
aria-label={expanded ? __('Less') : __('More')}
icon={expanded ? ICONS.SUBTRACT : ICONS.ADD}
onClick={() => setExpanded(!expanded)}
/>
</div>
)}
</div>
</div>
)}
{(!expandable || (expandable && expanded)) && (
<>
{body && (
<div
className={classnames('card__body', {
'card__body--no-title': !title && !subtitle,
'card__body--list': isBodyList,
})}
>
{body}
</div>
)}
{actions && <div className="card__main-actions">{actions}</div>}
{children && <div className="card__main-actions">{children}</div>}
</>
)}
{nag}
</section>
);
}