in source/idea/idea-cluster-manager/webapp/src/pages/hpc/submit-job.tsx [467:586]
buildJobTemplatesSelectionModal() {
const onCancel = () => {
this.setState({
selectedJobTemplateId: null,
showJobTemplatesModal: false,
});
};
const onDeleteJobTemplate = () => {
AppContext.get()
.jobTemplates()
.deleteJobTemplate(this.state.selectedJobTemplateId!)
.then(() => {
this.loadAllJobTemplates().finally(() => {
this.setState({
selectedJobTemplateId: null,
});
});
})
.finally();
};
const onLoadJobTemplate = () => {
AppContext.get()
.jobTemplates()
.getJobTemplate(this.state.selectedJobTemplateId!)
.then((jobTemplate) => {
this.setState(
{
selectedJobTemplateId: null,
showJobTemplatesModal: false,
errorMessage: "",
},
() => {
this.initialize(jobTemplate.template_data);
}
);
});
};
return (
<Modal
visible={this.state.showJobTemplatesModal}
size="large"
onDismiss={onCancel}
header="Select a saved Job Template"
footer={
<div>
<Box float="left">
<SpaceBetween size="xs" direction="horizontal">
<Button variant="normal" disabled={this.state.selectedJobTemplateId == null} onClick={onDeleteJobTemplate}>
Delete
</Button>
</SpaceBetween>
</Box>
<Box float="right">
<SpaceBetween size="xs" direction="horizontal">
<Button variant="normal" onClick={onCancel}>
Cancel
</Button>
<Button variant="primary" disabled={this.state.selectedJobTemplateId == null} onClick={onLoadJobTemplate}>
Load Job Template
</Button>
</SpaceBetween>
</Box>
</div>
}
>
<div style={{ height: "60vh", overflow: "auto" }}>
<SpaceBetween size="m" direction="vertical">
<TextFilter
filteringText={this.state.jobTemplateFilterText}
filteringPlaceholder="Search Job Templates"
onChange={(event) => {
this.setState({
jobTemplateFilterText: event.detail.filteringText,
});
}}
onDelayedChange={(event) => {
const filteringText = event.detail.filteringText.trim().toLowerCase();
let filteredJobTemplates: JobTemplate[] = [];
if (Utils.isEmpty(filteringText)) {
filteredJobTemplates = [...this.state.jobTemplates];
} else {
this.state.jobTemplates.forEach((jobTemplate) => {
if (jobTemplate.title) {
if (jobTemplate.title.trim().toLowerCase().includes(filteringText)) {
filteredJobTemplates.push(jobTemplate);
}
}
});
}
this.setState({
filteredJobTemplates: filteredJobTemplates,
});
}}
/>
<Tiles
value={this.state.selectedJobTemplateId}
onChange={(event) =>
this.setState({
selectedJobTemplateId: event.detail.value,
})
}
columns={3}
items={this.state.filteredJobTemplates.map((jobTemplate) => {
return {
label: (
<div>
<strong>{jobTemplate.title!}</strong>
<br />
<span>{jobTemplate.description}</span>
</div>
),
value: jobTemplate.id!,
};
})}
/>
</SpaceBetween>
</div>
</Modal>
);
}