caremyway-client/src/components/User/Client/ClientShifts.jsx

141 lines
3.4 KiB
React
Raw Normal View History

2018-04-18 19:05:56 +00:00
import React, { Component } from "react";
import { connect } from "react-redux";
import { Redirect, Link } from "react-router-dom";
2018-04-23 00:23:43 +00:00
import {
Button,
Container,
Header,
Item,
Segment,
2018-04-23 03:07:50 +00:00
Pagination,
Loader
2018-04-23 00:23:43 +00:00
} from "semantic-ui-react";
import { getCShiftsRequest } from "../../../actions/cShift/saga.actions";
2018-04-18 19:05:56 +00:00
class ClientShifts extends Component {
2018-04-23 00:23:43 +00:00
constructor(props) {
super(props);
this.state = {
page: 1,
pageSize: 10 // client can't control this, but set here just in case
};
}
componentWillMount = () => {
this.props.dispatch(
getCShiftsRequest({
page: this.state.page,
page_size: this.state.pageSize
})
);
};
handlePaginationChange = (event, { activePage }) => {
this.props.dispatch(
getCShiftsRequest({
page: activePage,
page_size: this.state.pageSize
})
);
this.setState({ page: activePage });
};
2018-04-18 19:05:56 +00:00
render() {
2018-04-23 00:23:43 +00:00
const {
isSendingCShiftRequest,
cShiftRequestSuccess,
selfUser
} = this.props;
const { page, pageSize } = this.state;
2018-04-18 19:05:56 +00:00
if (selfUser.client) {
2018-04-23 00:23:43 +00:00
return (
<ClientShiftsView
isSendingCShiftRequest={isSendingCShiftRequest}
cShiftRequestSuccess={cShiftRequestSuccess}
page={page}
pageSize={pageSize}
user={selfUser}
handlePaginationChange={this.handlePaginationChange}
/>
);
2018-04-18 19:05:56 +00:00
} else {
return <Redirect to="/" />;
}
}
}
function mapStateToProps(state) {
2018-04-23 00:23:43 +00:00
return { ...state.cShift, selfUser: state.user.selfUser };
2018-04-18 19:05:56 +00:00
}
2018-04-23 00:23:43 +00:00
const ClientShiftsView = ({
isSendingCShiftRequest,
cShiftRequestSuccess,
user,
page,
pageSize,
handlePaginationChange
}) => {
const { count = 0, results = [] } = cShiftRequestSuccess;
return (
<Container>
<Header>Shifts</Header>
<Segment>
<Button
basic
color="green"
size="small"
as={Link}
to="/user/profile/client/add-shift"
>
Schedule a Shift
</Button>
</Segment>
2018-04-23 03:07:50 +00:00
{!!isSendingCShiftRequest && <Loader content="Loading" />}
2018-04-23 00:23:43 +00:00
{!isSendingCShiftRequest &&
results.length > 0 && (
2018-04-23 03:07:50 +00:00
<Item.Group divided>
2018-04-23 00:23:43 +00:00
{results.map(result => (
<Item key={result.uuid}>
<Item.Content>
<Item.Header content={result.uuid} />
<code>{JSON.stringify(result, null, 2)}</code>
</Item.Content>
2018-04-23 03:07:50 +00:00
<Item.Extra>
<Button
primary
floated="right"
as={Link}
to={`/user/profile/client/edit-shift/${result.uuid}`}
>
Edit
</Button>
<Button color="red" floated="right">
Delete
</Button>
</Item.Extra>
2018-04-23 00:23:43 +00:00
</Item>
))}
</Item.Group>
)}
<div style={{ textAlign: "center" }}>
<Pagination
activePage={page}
onPageChange={handlePaginationChange}
totalPages={Math.ceil(count / pageSize)}
boundaryRange={1}
siblingRange={1}
size="mini"
firstItem={undefined}
lastItem={undefined}
prevItem={null}
nextItem={null}
/>
</div>
</Container>
);
};
2018-04-18 19:05:56 +00:00
export default connect(mapStateToProps)(ClientShifts);