semantic-ui-react#Button JavaScript Examples
The following examples show how to use
semantic-ui-react#Button.
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: TxButton.js From vpp with MIT License | 6 votes |
function TxGroupButton(props) {
return (
<Button.Group>
<TxButton
label='Unsigned'
type='UNSIGNED-TX'
color='grey'
{...props}
/>
<Button.Or/>
<TxButton
label='Signed'
type='SIGNED-TX'
color='blue'
{...props}
/>
<Button.Or/>
<TxButton
label='SUDO'
type='SUDO-TX'
color='red'
{...props}
/>
</Button.Group>
);
}
Example #2
Source File: ChallengesAdminWidget.jsx From HACC-Hui with MIT License | 6 votes |
render() {
return (
<Table.Row>
<Table.Cell width={2}>{this.props.challenges.title}</Table.Cell>
<Table.Cell width={5}>{this.props.challenges.description}</Table.Cell>
<Table.Cell width={2}>{this.props.challenges.submissionDetail}</Table.Cell>
<Table.Cell width={2}>{this.props.challenges.pitch}</Table.Cell>
{/* eslint-disable-next-line max-len */}
<Table.Cell width={2}><Button><Link to={`/edit-challenge/${this.props.challenges._id}`} style={{ color: 'rgba(0, 0, 0, 0.6)' }}>Edit</Link></Button></Table.Cell>
{/* eslint-disable-next-line max-len */}
<Table.Cell width={2}><Button negative onClick={() => this.removeItem(this.props.challenges._id)}>Delete</Button></Table.Cell>
</Table.Row>
);
}
Example #3
Source File: LikeButton.js From 0.4.1-Quarantime with MIT License | 6 votes |
function LikeButton({ user, post: { id, likeCount, likes } }) {
const [liked, setLiked] = useState(false);
useEffect(() => {
if (user && likes.find((like) => like.username === user.username)) {
setLiked(true);
} else setLiked(false);
}, [user, likes]);
const [likePost] = useMutation(LIKE_POST_MUTATION, {
variables: { postId: id }
});
const likeButton = user ? (
liked ? (
<Button color="pink" >
<Icon name="heart" />
</Button>
) : (
<Button color="pink" basic>
<Icon name="heart" />
</Button>
)
) : (
<Button as={Link} to="/login" color="pink" basic>
<Icon name="heart" />
</Button>
);
return (
<Button as="div" labelPosition="right" onClick={likePost}>
<MyPopup content={liked ? 'Unlike' : 'Like'}>{likeButton}</MyPopup>
<Label basic color="pink" pointing="left">
{likeCount}
</Label>
</Button>
);
}
Example #4
Source File: Product.js From React-Ecommerce-Template with MIT License | 6 votes |
function Product({ id, title, price, rating, imageUrl }) {
const [, dispatch] = useStateValue();
const addTobasket = () => {
dispatch({
type: "ADD_TO_BASKET",
item: {
id,
title,
price,
rating,
imageUrl,
},
});
};
return (
<div className="product">
<Card className="product__card">
<Image className="product__image" centered src={imageUrl} />
<Card.Content>
<Card.Header className="product__title">{title}</Card.Header>
<Card.Meta>
<Rating icon="star" defaultRating={rating} maxRating={5} />
</Card.Meta>
<Card.Description>
<span className="product__price">${price}</span>
</Card.Description>
</Card.Content>
<Card.Content extra className="product__footer">
<Button inverted className="product__button" onClick={addTobasket}>
ADD TO BASKET
</Button>
</Card.Content>
</Card>
</div>
);
}
Example #5
Source File: ConfirmDeleteDialog.js From vch-mri with MIT License | 6 votes |
render() {
return (
<Modal
onSubmit={this.handleSubmit}
style={{ maxWidth: 500 }}
onClose={() => this.setState({open: false})}
onOpen={() => this.setState({open: true})}
open={this.state.open}
trigger={
<Button size='tiny' secondary icon='delete' />
}
>
<Modal.Header as='h2' color='blue' textAlign='center'>
Confirm Delete
</Modal.Header>
<Modal.Content>
<p>Are you sure you want to delete this?</p>
</Modal.Content>
<Modal.Actions>
<Button
color='black'
content='No'
onClick={() => this.setState({open: false})}
/>
<Button
type='submit'
content='Yes'
color='blue'
onClick={() => this.handleDelete()}
/>
</Modal.Actions>
</Modal>
)
}
Example #6
Source File: HomePage.jsx From ElectionsApp with GNU General Public License v3.0 | 6 votes |
render() {
return (
<GridContainer verticalAlign="middle" columns={1}>
<Grid.Column>
{this.renderMobileMessage()}
<StyledSegment>
<Label as="a" color="blue" size="massive" ribbon>
{year}
</Label>
<TextContainer>
<h1 className="welcome">Welcome to Ada's Team Elections!</h1>
<h2 className="subheader">
We appreciate you all coming out to participate!
</h2>
<h3 className="info">{covidAcknowledgment}</h3>
<h3 className="info">{beforeYouBegin}</h3>
<h3 className="info">{checkOutCandidates}</h3>
</TextContainer>
<Link to="/validate">
<Button disabled={false} fluid color="blue" size="massive">
Start
</Button>
</Link>
</StyledSegment>
</Grid.Column>
</GridContainer>
);
}
Example #7
Source File: 1-App.js From smart-contracts with MIT License | 6 votes |
ExampleAlgoSigner = ({title, buttonText, buttonAction}) => {
const [result, setResult] = useState("");
const onClick = useCallback(async () => {
const r = await buttonAction();
setResult(r);
}, [buttonAction]);
return (
<>
<Header as="h2" dividing>{title}</Header>
<Button primary={true} onClick={onClick}>{buttonText}</Button>
<Message>
<code>
{result}
</code>
</Message>
</>
);
}
Example #8
Source File: FormError.js From profile-store with MIT License | 6 votes |
FormError = ({ message, setError, title, positive }) => {
return (
<Message negative={positive ? false : true}>
<Message.Header>
{title || 'Error'}
<Button
icon="close"
color="red"
floated="right"
onClick={() => setError(null)}
compact
size="mini"
circular
/>
</Message.Header>
<p>{message}</p>
</Message>
);
}
Example #9
Source File: contact-form.js From react-hooks-context-app with MIT License | 6 votes |
export default function ContactForm() {
const name = useFormInput("");
const email = useFormInput("");
// eslint-disable-next-line no-unused-vars
const [state, dispatch] = useContext(ContactContext);
const onSubmit = () => {
dispatch({
type: "ADD_CONTACT",
payload: { id: _.uniqueId(10), name: name.value, email: email.value }
})
// Reset Form
name.onReset();
email.onReset();
};
return (
<Segment basic>
<Form onSubmit={onSubmit}>
<Form.Group widths="3">
<Form.Field width={6}>
<Input placeholder="Enter Name" {...name} required />
</Form.Field>
<Form.Field width={6}>
<Input placeholder="Enter Email" {...email} type="email" required />
</Form.Field>
<Form.Field width={4}>
<Button fluid primary>
New Contact
</Button>
</Form.Field>
</Form.Group>
</Form>
</Segment>
);
}
Example #10
Source File: Metadata.js From substrate-evm with The Unlicense | 6 votes |
export default function Metadata (props) {
const { api } = useSubstrate();
const [metadata, setMetadata] = useState({ data: null, version: null });
useEffect(() => {
const getMetadata = async () => {
try {
const data = await api.rpc.state.getMetadata();
setMetadata({ data, version: data.version });
} catch (e) {
console.error(e);
}
};
getMetadata();
}, [api.rpc.state]);
return (
<Grid.Column>
<Card>
<Card.Content>
<Card.Header>Metadata</Card.Header>
<Card.Meta><span>v{metadata.version}</span></Card.Meta>
</Card.Content>
<Card.Content extra>
<Modal trigger={<Button>Show Metadata</Button>}>
<Modal.Header>Runtime Metadata</Modal.Header>
<Modal.Content scrolling>
<Modal.Description>
<pre><code>{JSON.stringify(metadata.data, null, 2)}</code></pre>
</Modal.Description>
</Modal.Content>
</Modal>
</Card.Content>
</Card>
</Grid.Column>
);
}
Example #11
Source File: FileButton.js From nextfeathers with Apache License 2.0 | 6 votes |
render() {
return (
<div>
<Button {...this.props} as="label" htmlFor={this.id} />
<input
hidden
id={this.id}
multiple
type="file"
onChange={this.onChangeFile}
/>
</div>
);
}
Example #12
Source File: Pagination.js From spring-boot-ecommerce with Apache License 2.0 | 6 votes |
export default function Pagination({ cardsPerPage, totalCards, paginate }) {
const pageNumbers = [];
for (let i = 1; i <= Math.ceil(totalCards / cardsPerPage); i++) {
pageNumbers.push(i);
}
return (
<Button.Group className="pagination">
{pageNumbers.map(number => (
<Button onClick={() => paginate(number)} className="page-link">
{number}
</Button>
))}
</Button.Group>
);
}
Example #13
Source File: ToolbarButton.jsx From volto-slate with MIT License | 6 votes |
ToolbarButton = React.forwardRef(
({ className, active, reversed, icon, style, title = '', ...props }, ref) => {
const intl = useIntl();
const i18ntitle =
typeof title !== 'string' ? intl.formatMessage(title) : title;
return (
<div className="button-wrapper">
<Button
as="a"
{...props}
title={i18ntitle}
ref={ref}
style={style}
className={cx(className)}
active={active}
inverted={reversed}
compact
toggle
size="tiny"
icon={icon && <Icon name={icon} size="24px" />}
></Button>
</div>
);
},
)
Example #14
Source File: ContributeForm.js From CrowdCoin with MIT License | 6 votes |
render(){
return(
<Form onSubmit={this.onSubmit} error={!!this.state.errorMessage}>
<Form.Field>
<label>Amount to Contribute</label>
<Input
label="ether"
labelPosition="right"
value={this.state.value}
onChange = {event => this.setState ( { value : event.target.value })}
/>
</Form.Field>
<Message error header="Oops!" content={this.state.errorMessage} />
<Button loading={this.state.loading} primary>Contribute!</Button>
</Form>
);
}
Example #15
Source File: LoginWithOauthButton.js From react-invenio-app-ils with MIT License | 6 votes |
render() {
const { nextUrl, url, hasError, errorMessage, ...restProps } = this.props;
return (
<>
<Button
fluid
{...restProps}
onClick={() =>
authenticationService.loginWithOauthProvider(
nextUrl || window.location.pathname,
url
)
}
/>
{hasError && (
<Message negative header="Login failed." content={errorMessage} />
)}
</>
);
}
Example #16
Source File: ProtectionButtons.js From react-invenio-deposit with MIT License | 6 votes |
render() {
const { active, disabled } = this.props;
const publicColor = active ? 'positive' : '';
const restrictedColor = !active ? 'negative' : '';
return (
<Button.Group widths="2">
<Button
className={publicColor}
data-testid="protection-buttons-component-public"
disabled={disabled}
onClick={this.handlePublicButtonClick}
active={active}
>
{i18next.t('Public')}
</Button>
<Button
className={restrictedColor}
data-testid="protection-buttons-component-restricted"
active={!active}
onClick={this.handleRestrictionButtonClick}
>
{i18next.t('Restricted')}
</Button>
</Button.Group>
);
}
Example #17
Source File: ViewTeam.jsx From HACC-Hui with MIT License | 5 votes |
ViewTeam = ({ isCompliant, participants, teamChallenges, team, teamMembers }) => {
const allParticipants = participants;
const captain = allParticipants.filter(p => team.owner === p._id)[0];
const challenge = teamChallenges[0];
function changeBackground(e) {
e.currentTarget.style.backgroundColor = '#fafafa';
e.currentTarget.style.cursor = 'pointer';
}
function onLeave(e) {
e.currentTarget.style.backgroundColor = 'transparent';
}
// console.log(team, captain, teamChallenges);
return (
<Item onMouseEnter={changeBackground} onMouseLeave={onLeave}
style={{ padding: '1.0rem 1.5rem 1.0rem 1.5rem' }}>
<Modal closeIcon trigger={
<Item.Content>
<Item.Header>
{team.name} {isCompliant ? <Icon className="green check"/> : <Icon name="exclamation circle"
color="red"/> }
</Item.Header>
<Item.Description>
<strong>Captain:</strong> {captain ? `${captain.firstName} ${captain.lastName}: ${captain.username} `
: ' '},
<strong>Challenge:</strong> {challenge.title}
</Item.Description>
</Item.Content>
}>
<Grid padded>
<Grid.Row>
<Grid.Column width={4}>
<Header>{team.name}</Header>
<List>
{teamChallenges.map((c) => <List.Item key={c._id}>{c.title}</List.Item>)}
</List>
<Header as="h4">Captain</Header>
{captain ? `${captain.firstName} ${captain.lastName}: ${captain.username}` : ''}
</Grid.Column>
<Grid.Column width={5}>
<Header>Members</Header>
<List bulleted>
{teamMembers.map((t) => <List.Item key={t}>{t}</List.Item>)}
</List>
</Grid.Column>
<Grid.Column width={5}>
{isCompliant ? <Header>Team is Compliant</Header> : <Header>
<mark>Team is not Compliant</mark>
</Header>}
<Header>Devpost Page</Header>
{team.devPostPage}
<Header>Github Repo</Header>
{team.gitHubRepo}
</Grid.Column>
<Grid.Column width={2}>
{/* eslint-disable-next-line max-len */}
<Button><Link to={`/admin-edit-team/${team._id}`}
style={{ color: 'rgba(0, 0, 0, 0.6)' }}>Edit</Link></Button>
</Grid.Column>
</Grid.Row>
</Grid>
</Modal>
</Item>
);
}
Example #18
Source File: DeleteButton.js From 0.4.1-Quarantime with MIT License | 5 votes |
function DeleteButton({ postId, commentId, callback }) {
const [confirmOpen, setConfirmOpen] = useState(false);
const mutation = commentId ? DELETE_COMMENT_MUTATION : DELETE_POST_MUTATION;
const [deletePostOrMutation] = useMutation(mutation, {
update(proxy) {
setConfirmOpen(false);
if (!commentId) {
const data = proxy.readQuery({
query: FETCH_POSTS_QUERY
});
data.getPosts = data.getPosts.filter((p) => p.id !== postId);
proxy.writeQuery({ query: FETCH_POSTS_QUERY, data });
}
if (callback) callback();
},
variables: {
postId,
commentId
}
});
return (
<>
<MyPopup content={commentId ? 'Delete comment' : 'Delete post'}>
<Button
as="div"
color="red"
floated="right"
onClick={() => setConfirmOpen(true)}
>
<Icon name="trash" style={{ margin: 0 }} />
</Button>
</MyPopup>
<Confirm
open={confirmOpen}
onCancel={() => setConfirmOpen(false)}
onConfirm={deletePostOrMutation}
/>
</>
);
}
Example #19
Source File: CheckoutProduct.js From React-Ecommerce-Template with MIT License | 5 votes |
function CheckoutProduct({ id, title, price, rating, imageUrl }) {
const [, dispatch] = useStateValue();
const removeFromBasket = () => {
dispatch({
type:'REMOVE_FROM_BASKET',
id
})
};
return (
<div>
<Item className="checkoutProduct__item">
<Item.Image
size="tiny"
src={imageUrl}
className="checkoutProduct__image"
/>
<Item.Content>
<Item.Header className="checkoutProduct__title">{title}</Item.Header>
<Item.Meta>
{" "}
<Rating icon="star" defaultRating={rating} maxRating={5} />
</Item.Meta>
<Item.Description>
<span className="checkoutProduct__price">${price}</span>
</Item.Description>
<Item.Extra>
<Button
color='red'
className="checkoutProduct__button"
onClick={removeFromBasket}
>
REMOVE
</Button>
</Item.Extra>
</Item.Content>
<Divider inverted section />
</Item>
</div>
);
}
Example #20
Source File: ForgotPasswordForm.js From vch-mri with MIT License | 5 votes |
render() {
return (
<Grid textAlign='center' style={{ height: '100vh' }} verticalAlign='middle'>
<Grid.Column style={{ maxWidth: 400 }}>
<Segment>
<Header as='h2' color='blue' textAlign='center'>
Forgot Your Password?
</Header>
<Form onSubmit={this.handleSubmit} ref="form">
<Grid.Row>
<Input width={'100%'}
type="text"
name="email"
placeholder="Enter your email address"
onChange={this.handleChange}
value={this.state.email}
validators={['required']}
errorMessages={['This field is required']}/>
</Grid.Row>
<Grid.Row>
<NavLink to="/login" style={{
display: 'inline-block',
padding: '4px 0 4px 0',
}}>Back to Login</NavLink>
</Grid.Row>
<Grid.Row>
<Button
fluid
content='Confirm Request'
color="blue"
disabled={!this.state.email}
/>
</Grid.Row>
</Form>
</Segment>
{ !!this.state.error &&
<Message negative>
<p>{this.state.error}</p>
</Message>}
</Grid.Column>
</Grid>);
}
Example #21
Source File: LoadEligibility.jsx From ElectionsApp with GNU General Public License v3.0 | 5 votes |
render() {
const {
messageBgColor,
messageHeader,
messageContent,
buttonContent,
redirect,
iconName,
loading
} = this.state;
const { eligible, voter } = this.props;
if (redirect) {
return eligible ? <Vote voter={voter} /> : <Results />;
}
return (
<GridContainer verticalAlign="middle" centered columns={1}>
<Grid.Column width={5}>
<Image size="huge" src={AdaBotHeadImage} alt="Ada Bot Head" />
<Progress color="blue" percent={50}></Progress>
<Message size="massive" color={messageBgColor} icon>
<Icon name={iconName} loading={loading} />
<Message.Content>
<Message.Header>{messageHeader}</Message.Header>
{messageContent}
</Message.Content>
</Message>
{!loading && (
<Button
onClick={this.handleButtonClick}
fluid
color="blue"
size="massive"
>
{buttonContent}
</Button>
)}
</Grid.Column>
</GridContainer>
);
}
Example #22
Source File: index.js From demos-for-react with MIT License | 5 votes |
Home = () => {
const history = useHistory();
const [profile, setProfile] = useState(null);
const [loading, setLoading] = useState(false);
useEffect(() => {
getUserData()
.then(response => {
setProfile(response);
setLoading(false);
})
.catch(e => {
console.log(e.message);
setProfile(false);
setLoading(false);
});
}, []);
const common = (
<Segment textAlign={"center"}>
<h2>
Welcome to CRUD w/ <a href="https://appwrite.io/">Appwrite</a> Tutorial
</h2>
</Segment>
);
if (profile && loading === false) {
console.log(profile);
return (
<div>
{common}
<Grid>
<Grid.Row columns={3}>
<Grid.Column />
<Grid.Column>
<Segment>
<Grid verticalAlign={"middle"}>
<Grid.Row columns={2}>
<Grid.Column computer={12} textAlign={"left"}>
<h3>
Go to <Link to={"/users"}>User Dashboard</Link>
</h3>
</Grid.Column>
<Grid.Column computer={4}>
<Button
floated={"right"}
primary
onClick={() => logout(history)}
>
Logout
</Button>
</Grid.Column>
</Grid.Row>
</Grid>
</Segment>
</Grid.Column>
<Grid.Column />
</Grid.Row>
</Grid>
</div>
);
} else if (profile === false && loading === false) {
return (
<div>
{common}
<Segment textAlign={"center"}>
To start please <Link to={"/login"}>Login</Link>
</Segment>
</div>
);
} else {
return <Spinner />;
}
}
Example #23
Source File: CCPDataTables.js From aws-amplify-connect with MIT No Attribution | 5 votes |
render() {
//console.log("this.items");
//console.log(this.state.items);
var tableitems = this.state.items.sort( compare );
var tablerows = tableitems.map(function (item, i) {
let toggleEnabled;
if (item.enabled === "0"){
toggleEnabled = <Checkbox toggle checked={false} onChange={(event) => this.onEnabledClickHandler(item, i, event, "1")} /> // click enables "1"
};
if (item.enabled === "1") {
toggleEnabled = <Checkbox toggle checked={true} onChange={(event) => this.onEnabledClickHandler(item, i, event, "0")} /> // click disabled "0"
};
return <Table.Row key={i} >
<Table.Cell collapsing>{item.telephoneNumber}</Table.Cell>
<Table.Cell>{item.firstName} {item.lastName}</Table.Cell>
<Table.Cell>{toggleEnabled}</Table.Cell>
<Table.Cell><Button negative circular icon='delete' onClick={(event) => this.onDeleteClickHandler(item, i, event)}/></Table.Cell>
</Table.Row>
}.bind(this));
var leftDisabled = false
var rightDisabled = false
if(this.state.scanIndexForward === false && this.state.lastEvaluatedKey === ""){leftDisabled = true} else {leftDisabled = false};
if(this.state.scanIndexForward === true && this.state.lastEvaluatedKey === ""){rightDisabled = true} else {rightDisabled = false};
if(this.state.pageturns < 2){leftDisabled = true} // handle just started use case
const table =
<div>
<Table celled striped>
<Table.Header>
<Table.Row>
<Table.HeaderCell>Telephone</Table.HeaderCell>
<Table.HeaderCell>Name</Table.HeaderCell>
<Table.HeaderCell><Checkbox toggle checked={this.state.filterEnabled} onClick={(event) => this.onFilterEnabledClickHandler()}/> Enabled</Table.HeaderCell>
<Table.HeaderCell>Delete</Table.HeaderCell>
</Table.Row>
</Table.Header>
<Table.Body>
{tablerows}
</Table.Body>
</Table>
<Button icon labelPosition='left' onClick={(event) => this.componentDidMount(true)} disabled={leftDisabled}><Icon name='left arrow' />Back</Button>
<Button icon labelPosition='right' onClick={(event) => this.componentDidMount(false)} disabled={rightDisabled}>Next<Icon name='right arrow' /></Button>
</div>
return table;
}
Example #24
Source File: contact-card.js From react-crud-app with MIT License | 5 votes |
export default function ContactCard({contact}) {
// eslint-disable-next-line no-unused-vars
const [state, dispatch] = useContext(ContactContext);
const deleteContact = async id => {
try {
const response = await axios.delete(`http://localhost:3030/contacts/${id}`);
dispatch({
type: "DELETE_CONTACT",
payload: response.data
});
} catch (error) {
flashErrorMessage(dispatch, error)
}
}
return (
<Card>
<Card.Content>
<Card.Header>
<Icon name='user outline'/> {contact.name.first} {contact.name.last}
</Card.Header>
<Card.Description>
<p><Icon name='phone'/> {contact.phone}</p>
<p><Icon name='mail outline'/> {contact.email}</p>
</Card.Description>
</Card.Content>
<Card.Content extra>
<div className="ui two buttons">
<Button basic color="green" as={Link} to={`/contacts/edit/${contact._id}`}>
Edit
</Button>
<Button basic color="red" onClick={() => deleteContact(contact._id)}>
Delete
</Button>
</div>
</Card.Content>
</Card>
)
}
Example #25
Source File: contact-table.js From react-hooks-context-app with MIT License | 5 votes |
export default function ContactTable() {
// Subscribe to `contacts` state and access dispatch function
const [state, dispatch] = useContext(ContactContext);
// Declare a local state to be used internally by this component
const [selectedId, setSelectedId] = useState();
const delContact = id => {
dispatch({
type: "DEL_CONTACT",
payload: id
});
};
const onRemoveUser = () => {
delContact(selectedId);
setSelectedId(null); // Clear selection
};
const rows = state.contacts.map(contact => (
<Table.Row
key={contact.id}
onClick={() => setSelectedId(contact.id)}
active={contact.id === selectedId}
>
<Table.Cell>{contact.id}</Table.Cell>
<Table.Cell>{contact.name}</Table.Cell>
<Table.Cell>{contact.email}</Table.Cell>
</Table.Row>
));
return (
<Segment>
<Table celled striped selectable>
<Table.Header>
<Table.Row>
<Table.HeaderCell>Id</Table.HeaderCell>
<Table.HeaderCell>Name</Table.HeaderCell>
<Table.HeaderCell>Email</Table.HeaderCell>
</Table.Row>
</Table.Header>
<Table.Body>{rows}</Table.Body>
<Table.Footer fullWidth>
<Table.Row>
<Table.HeaderCell />
<Table.HeaderCell colSpan="4">
<Button
floated="right"
icon
labelPosition="left"
color="red"
size="small"
disabled={!selectedId}
onClick={onRemoveUser}
>
<Icon name="trash" /> Remove User
</Button>
</Table.HeaderCell>
</Table.Row>
</Table.Footer>
</Table>
</Segment>
);
}
Example #26
Source File: PostList.js From nextfeathers with Apache License 2.0 | 5 votes |
//List => Panel => ItemView
export default function PostList(props) {
const headline = props.headline ? props.headline : "All Posts";
return (
<div>
<Header as="h1" icon>
<Header.Content>
{headline}{" "}
{props.tagData && (
<span>
{" "}
In <i>{props.tagData.name}</i>
</span>
)}
</Header.Content>
</Header>
{props.posts.length < 1 && <p>Not Records Found!</p>}
<Item.Group divided>
{props.posts &&
props.posts.map((item) => {
let author = "Admin";
if (item.author) {
author = item.author.firstName + " " + item.author.lastName;
}
return (
<Item key={item._id}>
<div className="image">
<Link href={`/blog/[slug]`} as={`/blog/${item.slug}`}>
<a>
<Image alt={item.title} src={item.image} />
</a>
</Link>
</div>
<Item.Content>
<Item.Header>
<Link href={`/blog/[slug]`} as={`/blog/${item.slug}`}>
<a>{item.title}</a>
</Link>
</Item.Header>
<Item.Meta>
<span className="cinema">
{author} | <TimeAgo date={item.createdAt} />
</span>
</Item.Meta>
<Item.Description>{item.summary}</Item.Description>
<Item.Extra>
{item.tags.map((tag) => (
<Link
passHref
key={tag}
href={`/blog/tags/[slug]`}
as={`/blog/tags/${tag}`}
>
<Label as="a">{tag}</Label>
</Link>
))}
</Item.Extra>
</Item.Content>
</Item>
);
})}
</Item.Group>
{props.showLoadMore && !props.isLoading && (
<Segment textAlign="center">
<Button color="blue" onClick={props.loadMore}>
Load More
</Button>
</Segment>
)}
</div>
);
}