lml-main
Version:
This is now a mono repository published into many standalone packages.
158 lines • 7.2 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const tslib_1 = require("tslib");
const React = require("react");
const react_redux_1 = require("react-redux");
const react_virtualized_1 = require("react-virtualized");
const actions_1 = require("../../../jobs/actions");
const Selectors = require("../../../jobs/selectors");
const JobListHeader = require("./list-header");
const JobCard = require("../../../jobs/components/card");
const cosmoui_1 = require("cosmoui");
const styles = require('./job-list.scss');
class BaseList extends React.Component {
constructor(props) {
super(props);
this.setJobsListRef = (ref) => this.jobsList = ref;
this.renderJob = this.renderJob.bind(this);
this.renderShowNoJobsMessage = this.renderShowNoJobsMessage.bind(this);
this.jobRowHeight = this.jobRowHeight.bind(this);
this.setJobsListRef = this.setJobsListRef.bind(this);
}
componentWillUpdate() {
if (this.jobsList)
this.jobsList.recomputeRowHeights();
}
render() {
const { jobs, HeaderComponent } = this.props;
return (React.createElement(cosmoui_1.Column, { align: "stretch", grow: 1, shrink: 0, basis: "auto" },
React.createElement(HeaderComponent, null),
React.createElement(cosmoui_1.Column, { grow: 1, shrink: 1, basis: "auto" },
React.createElement(react_virtualized_1.AutoSizer, null, (_a) => {
var params = tslib_1.__rest(_a, []);
return (React.createElement(react_virtualized_1.List, { ref: this.setJobsListRef, className: styles.scrollList, width: params.width, height: params.height, rowCount: jobs.length + 2, estimatedRowSize: 70, rowHeight: this.jobRowHeight, rowRenderer: this.renderJob, noRowsRenderer: this.renderShowNoJobsMessage }));
}))));
}
renderJob(_a) {
var params = tslib_1.__rest(_a, []);
const { jobs, JobComponent, canPageForwards, canPageBack } = this.props;
if (params.index === 0) {
return canPageBack && (React.createElement(cosmoui_1.Row, { style: params.style, key: "jobsListBtnBack", justify: "center", className: styles.scrollButton, onClick: this.props.pageBackwards },
React.createElement("div", { id: "job-list-load-previous" }, "...Load Previous")));
}
else if (params.index === jobs.length + 1) {
return canPageForwards && (React.createElement(cosmoui_1.Row, { style: params.style, key: "jobsListBtnNext", justify: "center", className: styles.scrollButton, onClick: this.props.pageForwards },
React.createElement("div", { id: "job-list-load-next" }, "...Load Next")));
}
else {
const job = this.props.jobs[params.index - 1];
if (params.index === 1) {
params.style = Object.assign({}, params.style, { height: params.style.height -= this.spacerHeight(), marginTop: this.spacerHeight() });
}
return React.createElement(JobComponent, { style: params.style, jobByStatus: job, key: job.refId });
}
}
renderShowNoJobsMessage() {
const { showNoJobsMessage } = this.props;
if (!showNoJobsMessage)
return null;
return (React.createElement(cosmoui_1.Text, { size: "lg", style: { textAlign: 'center', margin: '20px' }, shade: 700 }, "No matching jobs"));
}
jobRowHeight(_a) {
var params = tslib_1.__rest(_a, []);
const { jobs, expandedJobs, allJobsExpanded, canPageBack, canPageForwards } = this.props;
if (params.index === 0) {
return canPageBack ? 56 : 0;
}
else if (params.index === jobs.length + 1) {
return canPageForwards ? 56 : 0;
}
else {
const job = jobs[params.index - 1];
let height = job && (expandedJobs[job.refId] || allJobsExpanded) ? 140 : 56;
if (params.index === 1)
height += this.spacerHeight();
return height;
}
}
spacerHeight() {
const { firstJobIsActive, canPageBack } = this.props;
return (firstJobIsActive && !canPageBack) ? 20 : 0;
}
}
exports.BaseList = BaseList;
const mapStateToProps = (state, ownProps) => ({
jobs: Selectors.getJobList(state),
isSearched: Selectors.getSearchInput(state),
expandedJobs: Selectors.getExpandedJobRefIds(state),
allJobsExpanded: Selectors.getAllExpanded(state),
firstJobIsActive: Selectors.firstJobIsActive(state),
canPageBack: Selectors.canPageBack(state),
canPageForwards: Selectors.canPageForwards(state),
showNoJobsMessage: Selectors.getShowNoJobsMessage(state),
});
const mapDispatchToProps = {
resetPagination: actions_1.resetPagination,
pageForwards: actions_1.pageForwards,
pageBackwards: actions_1.pageBackwards,
};
exports.ConnectedList = react_redux_1.connect(mapStateToProps, mapDispatchToProps)(BaseList);
class AbstractList extends React.Component {
}
exports.AbstractList = AbstractList;
class LiveJobsList extends AbstractList {
render() {
const _props = {
JobComponent: JobCard.LiveJobCard,
HeaderComponent: JobListHeader.LiveHeaderComponent,
};
const props = Object.assign({}, this.props, _props);
return (React.createElement(exports.ConnectedList, Object.assign({}, props)));
}
}
exports.LiveJobsList = LiveJobsList;
class AllocatedJobsList extends AbstractList {
render() {
const _props = {
JobComponent: JobCard.AllocatedJobCard,
HeaderComponent: JobListHeader.AllocatedHeaderComponent,
};
const props = Object.assign({}, this.props, _props);
return (React.createElement(exports.ConnectedList, Object.assign({}, props)));
}
}
exports.AllocatedJobsList = AllocatedJobsList;
class AcceptedJobsList extends AbstractList {
render() {
const _props = {
JobComponent: JobCard.AcceptedJobCard,
HeaderComponent: JobListHeader.AcceptedHeaderComponent,
};
const props = Object.assign({}, this.props, _props);
return (React.createElement(exports.ConnectedList, Object.assign({}, props)));
}
}
exports.AcceptedJobsList = AcceptedJobsList;
class InProgressJobsList extends AbstractList {
render() {
const _props = {
JobComponent: JobCard.InProgressJobCard,
HeaderComponent: JobListHeader.InProgressHeaderComponent,
};
const props = Object.assign({}, this.props, _props);
return (React.createElement(exports.ConnectedList, Object.assign({}, props)));
}
}
exports.InProgressJobsList = InProgressJobsList;
class CompletedJobsList extends AbstractList {
render() {
const _props = {
JobComponent: JobCard.CompletedJobCard,
HeaderComponent: JobListHeader.CompletedHeaderComponent,
};
const props = Object.assign({}, this.props, _props);
return (React.createElement(exports.ConnectedList, Object.assign({}, props)));
}
}
exports.CompletedJobsList = CompletedJobsList;
//# sourceMappingURL=jobs-list.js.map