2018-07-08 03:15:28 +02:00
|
|
|
import React from 'react';
|
2018-07-16 02:50:19 +02:00
|
|
|
import ReactDOMServer from 'react-dom/server';
|
2018-07-17 03:53:21 +02:00
|
|
|
import {instanceOfModsContent} from "./ModsPropTypes";
|
2018-07-08 03:15:28 +02:00
|
|
|
|
2018-07-13 00:58:18 +02:00
|
|
|
class ModLoadSave extends React.Component {
|
2018-07-08 03:15:28 +02:00
|
|
|
constructor(props) {
|
|
|
|
super(props);
|
|
|
|
|
|
|
|
this.loadMods = this.loadMods.bind(this);
|
2018-07-16 02:50:19 +02:00
|
|
|
this.loadModsSwalHandler = this.loadModsSwalHandler.bind(this);
|
2018-07-08 03:15:28 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
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) => {
|
2018-07-17 03:53:21 +02:00
|
|
|
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}
|
2018-07-17 03:53:21 +02:00
|
|
|
<input type="hidden" name="mod_name" value={mod.name}/>
|
2018-07-16 02:50:19 +02:00
|
|
|
</td>
|
|
|
|
<td>
|
2018-07-17 03:53:21 +02:00
|
|
|
{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,
|
2018-07-17 03:53:21 +02:00
|
|
|
type: "error",
|
2018-07-13 00:58:18 +02:00
|
|
|
});
|
|
|
|
}
|
|
|
|
});
|
2018-07-08 03:15:28 +02:00
|
|
|
}
|
|
|
|
|
2018-07-16 02:50:19 +02:00
|
|
|
loadModsSwalHandler() {
|
|
|
|
$.ajax({
|
2018-07-17 03:53:21 +02:00
|
|
|
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
|
|
|
})
|
|
|
|
}
|
|
|
|
|
2018-07-08 03:15:28 +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>
|
2018-07-08 03:15:28 +02:00
|
|
|
</div>
|
2018-07-13 00:58:18 +02:00
|
|
|
</form>
|
2018-07-08 03:15:28 +02:00
|
|
|
</div>
|
|
|
|
)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-07-17 03:53:21 +02:00
|
|
|
ModLoadSave.propTypes = {
|
|
|
|
modContentClass: instanceOfModsContent.isRequired,
|
|
|
|
}
|
|
|
|
|
2018-07-13 00:58:18 +02:00
|
|
|
export default ModLoadSave;
|