Files
factorio-server-manager/ui/App/components/Mods/ModLoadSave.jsx

154 lines
4.9 KiB
React
Raw Normal View History

import React from 'react';
2018-07-16 02:50:19 +02:00
import ReactDOMServer from 'react-dom/server';
import {instanceOfModsContent} from "./ModsPropTypes";
2018-07-13 00:58:18 +02:00
class ModLoadSave extends React.Component {
constructor(props) {
super(props);
this.loadMods = this.loadMods.bind(this);
2018-07-16 02:50:19 +02:00
this.loadModsSwalHandler = this.loadModsSwalHandler.bind(this);
}
componentDidMount() {
//Load Saves
this.props.getSaves();
}
2018-07-13 00:58:18 +02:00
loadMods(e) {
e.preventDefault();
$.ajax({
url: "/api/mods/save/load",
method: "POST",
data: $(e.target).serialize(),
dataType: "JSON",
success: (data) => {
2018-07-16 02:50:19 +02:00
let checkboxes = [];
data.data.mods.forEach((mod) => {
if(mod.name == "base") return;
let modVersion = mod.version.major + "." + mod.version.minor + "." + mod.version.build;
2018-07-16 02:50:19 +02:00
let singleCheckbox = <tr key={mod.name}>
<td>
{mod.name}
<input type="hidden" name="mod_name" value={mod.name}/>
2018-07-16 02:50:19 +02:00
</td>
<td>
{modVersion}
<input type="hidden" name="mod_version" value={modVersion}/>
2018-07-16 02:50:19 +02:00
</td>
</tr>
checkboxes.push(singleCheckbox);
});
let table = <div>
All Mods will be installed
<div style={{display: "flex", width: "100%", justifyContent: "center"}}>
<form id="swalForm">
<table>
<thead>
<tr>
<th>
ModName
</th>
<th>
ModVersion
</th>
</tr>
</thead>
<tbody>
{checkboxes}
</tbody>
</table>
</form>
</div>
</div>
swal({
title: "Mods to install",
text: ReactDOMServer.renderToStaticMarkup(table),
html: true,
type: 'info',
showCancelButton: true,
closeOnConfirm: false,
confirmButtonText: "Download Mods!",
cancelButtonText: "Cancel",
showLoaderOnConfirm: true
}, this.loadModsSwalHandler);
2018-07-13 00:58:18 +02:00
},
error: (jqXHR) => {
let json_data = JSON.parse(jqXHR.responseJSON.data);
swal({
title: json_data.detail,
type: "error",
2018-07-13 00:58:18 +02:00
});
}
});
}
2018-07-16 02:50:19 +02:00
loadModsSwalHandler() {
$.ajax({
url: "/api/mods/install/multiple",
method: "POST",
dataType: "JSON",
data: $("#swalForm").serialize(),
success: (data) => {
swal({
title: "All Mods installed successfully!",
type: "success"
});
this.props.modContentClass.setState({
installedMods: data.data.mods
});
},
error: (jqXHR) => {
let json_data = JSON.parse(jqXHR.responseJSON.data);
swal({
title: json_data.detail,
type: "error",
});
}
2018-07-16 02:50:19 +02:00
})
}
render() {
let saves = [];
this.props.saves.forEach((value, index) => {
if(index != this.props.saves.length - 1) {
saves.push(
<option key={index} value={value.name}>
{value.name}
</option>
)
}
});
return (
<div className="box-body">
2018-07-13 00:58:18 +02:00
<form action="" onSubmit={this.loadMods}>
<div className="input-group">
<select className="custom-select form-control" name="saveFile">
{saves}
</select>
<div className="input-group-append">
<button className="btn btn-outline-secondary" type="submit">Load Mods</button>
</div>
</div>
2018-07-13 00:58:18 +02:00
</form>
</div>
)
}
}
ModLoadSave.propTypes = {
modContentClass: instanceOfModsContent.isRequired,
}
2018-07-13 00:58:18 +02:00
export default ModLoadSave;