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,
|
|
|
|
Pagination
|
|
|
|
} 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>
|
|
|
|
{!isSendingCShiftRequest &&
|
|
|
|
results.length > 0 && (
|
|
|
|
<Item.Group>
|
|
|
|
{results.map(result => (
|
|
|
|
<Item key={result.uuid}>
|
|
|
|
<Item.Content>
|
|
|
|
<Item.Header content={result.uuid} />
|
|
|
|
<code>{JSON.stringify(result, null, 2)}</code>
|
|
|
|
</Item.Content>
|
|
|
|
</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);
|