initial commit
This commit is contained in:
46
src/app/molecules/channel-intro/ChannelIntro.jsx
Normal file
46
src/app/molecules/channel-intro/ChannelIntro.jsx
Normal file
@@ -0,0 +1,46 @@
|
||||
import React from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import './ChannelIntro.scss';
|
||||
|
||||
import Linkify from 'linkifyjs/react';
|
||||
import colorMXID from '../../../util/colorMXID';
|
||||
|
||||
import Text from '../../atoms/text/Text';
|
||||
import Avatar from '../../atoms/avatar/Avatar';
|
||||
|
||||
function linkifyContent(content) {
|
||||
return <Linkify options={{ target: { url: '_blank' } }}>{content}</Linkify>;
|
||||
}
|
||||
|
||||
function ChannelIntro({
|
||||
avatarSrc, name, heading, desc, time,
|
||||
}) {
|
||||
return (
|
||||
<div className="channel-intro">
|
||||
<Avatar imageSrc={avatarSrc} text={name.slice(0, 1)} bgColor={colorMXID(name)} size="large" />
|
||||
<div className="channel-intro__content">
|
||||
<Text className="channel-intro__name" variant="h1">{heading}</Text>
|
||||
<Text className="channel-intro__desc" variant="b1">{linkifyContent(desc)}</Text>
|
||||
{ time !== null && <Text className="channel-intro__time" variant="b3">{time}</Text>}
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
ChannelIntro.defaultProps = {
|
||||
avatarSrc: false,
|
||||
time: null,
|
||||
};
|
||||
|
||||
ChannelIntro.propTypes = {
|
||||
avatarSrc: PropTypes.oneOfType([
|
||||
PropTypes.string,
|
||||
PropTypes.bool,
|
||||
]),
|
||||
name: PropTypes.string.isRequired,
|
||||
heading: PropTypes.string.isRequired,
|
||||
desc: PropTypes.string.isRequired,
|
||||
time: PropTypes.string,
|
||||
};
|
||||
|
||||
export default ChannelIntro;
|
||||
31
src/app/molecules/channel-intro/ChannelIntro.scss
Normal file
31
src/app/molecules/channel-intro/ChannelIntro.scss
Normal file
@@ -0,0 +1,31 @@
|
||||
.channel-intro {
|
||||
margin-top: calc(2 * var(--sp-extra-loose));
|
||||
margin-bottom: var(--sp-extra-loose);
|
||||
padding-left: calc(var(--sp-normal) + var(--av-small) + var(--sp-tight));
|
||||
padding-right: var(--sp-extra-tight);
|
||||
|
||||
[dir=rtl] & {
|
||||
padding: {
|
||||
left: var(--sp-extra-tight);
|
||||
right: calc(var(--sp-normal) + var(--av-small) + var(--sp-tight));
|
||||
}
|
||||
}
|
||||
|
||||
.channel-intro__content {
|
||||
margin-top: var(--sp-extra-loose);
|
||||
max-width: 640px;
|
||||
}
|
||||
&__name {
|
||||
color: var(--tc-surface-high);
|
||||
}
|
||||
&__desc {
|
||||
color: var(--tc-surface-normal);
|
||||
margin: var(--sp-tight) 0 var(--sp-extra-tight);
|
||||
& a {
|
||||
word-break: break-all;
|
||||
}
|
||||
}
|
||||
&__time {
|
||||
color: var(--tc-surface-low);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user