mirror of
https://github.com/EDCD/coriolis.git
synced 2025-12-09 14:45:35 +00:00
upload all builds to orbis under settings
This commit is contained in:
@@ -9,6 +9,8 @@ import { Cogs, CoriolisLogo, Hammer, Help, Rocket, StatsBars } from './SvgIcons'
|
||||
import { Ships } from 'coriolis-data/dist';
|
||||
import Persist from '../stores/Persist';
|
||||
import { toDetailedExport } from '../shipyard/Serializer';
|
||||
import Ship from '../shipyard/Ship';
|
||||
import ModalBatchOrbis from './ModalBatchOrbis';
|
||||
import ModalDeleteAll from './ModalDeleteAll';
|
||||
import ModalExport from './ModalExport';
|
||||
import ModalHelp from './ModalHelp';
|
||||
@@ -235,6 +237,39 @@ export default class Header extends TranslatedComponent {
|
||||
/>);
|
||||
};
|
||||
|
||||
_uploadAllBuildsToOrbis(e) {
|
||||
e.preventDefault();
|
||||
const data = Persist.getBuilds();
|
||||
let postObject = [];
|
||||
for (const ship in data) {
|
||||
for (const code in data[ship]) {
|
||||
const shipModel = ship;
|
||||
if (!shipModel) {
|
||||
throw 'No such ship found: "' + ship + '"';
|
||||
}
|
||||
const shipTemplate = Ships[shipModel];
|
||||
const shipPostObject = {};
|
||||
let shipInstance = new Ship(shipModel, shipTemplate.properties, shipTemplate.slots);
|
||||
shipInstance.buildWith(null);
|
||||
shipInstance.buildFrom(data[ship][code]);
|
||||
shipPostObject.coriolisId = shipInstance.id;
|
||||
shipPostObject.coriolisShip = shipInstance;
|
||||
|
||||
shipPostObject.coriolisShip.url = window.location.origin + outfitURL(shipModel, data[ship][code], code);
|
||||
shipPostObject.title = code || shipInstance.id;
|
||||
shipPostObject.description = code || shipInstance.id;
|
||||
shipPostObject.ShipName = shipInstance.id;
|
||||
shipPostObject.Ship = shipInstance.id;
|
||||
postObject.push(shipPostObject);
|
||||
}
|
||||
}
|
||||
console.log(postObject);
|
||||
|
||||
this.context.showModal(<ModalBatchOrbis
|
||||
ships={postObject}
|
||||
/>);
|
||||
}
|
||||
|
||||
/**
|
||||
* Show export modal with detailed export
|
||||
* @param {SyntheticEvent} e Event
|
||||
@@ -430,6 +465,7 @@ export default class Header extends TranslatedComponent {
|
||||
{translate('builds')} & {translate('comparisons')}
|
||||
<li><Link href="#" className='block' onClick={this._showBackup.bind(this)}>{translate('backup')}</Link></li>
|
||||
<li><Link href="#" className='block' onClick={this._showDetailedExport.bind(this)}>{translate('detailed export')}</Link></li>
|
||||
<li><Link href="#" className='block' onClick={this._uploadAllBuildsToOrbis.bind(this)}>{translate('upload all builds to orbis')}</Link></li>
|
||||
<li><Link href="#" className='block' onClick={this._showImport.bind(this)}>{translate('import')}</Link></li>
|
||||
<li><Link href="#" className='block' onClick={this._showDeleteAll.bind(this)}>{translate('delete all')}</Link></li>
|
||||
</ul>
|
||||
|
||||
92
src/app/components/ModalBatchOrbis.jsx
Normal file
92
src/app/components/ModalBatchOrbis.jsx
Normal file
@@ -0,0 +1,92 @@
|
||||
import React from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import request from 'superagent';
|
||||
import TranslatedComponent from './TranslatedComponent';
|
||||
import { orbisUpload } from '../utils/ShortenUrl';
|
||||
import Persist from '../stores/Persist';
|
||||
|
||||
/**
|
||||
* Permalink modal
|
||||
*/
|
||||
export default class ModalBatchOrbis extends TranslatedComponent {
|
||||
|
||||
static propTypes = {
|
||||
ships: PropTypes.any.isRequired
|
||||
};
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
* @param {Object} props React Component properties
|
||||
*/
|
||||
constructor(props) {
|
||||
super(props);
|
||||
|
||||
this.state = {
|
||||
orbisCreds: Persist.getOrbisCreds(),
|
||||
resp: ''
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Send ship to Orbis.zone
|
||||
* @param {SyntheticEvent} e React Event
|
||||
*/
|
||||
sendToOrbis(e) {
|
||||
let agent;
|
||||
try {
|
||||
agent = request.agent(); // apparently this crashes somehow
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
}
|
||||
if (!agent) {
|
||||
agent = request;
|
||||
}
|
||||
const API_ORBIS = 'http://localhost:3030/api/builds/add/batch';
|
||||
return new Promise((resolve, reject) => {
|
||||
try {
|
||||
agent
|
||||
.post(API_ORBIS)
|
||||
.withCredentials()
|
||||
.redirects(0)
|
||||
.set('Content-Type', 'application/json')
|
||||
.send(this.props.ships)
|
||||
.end((err, response) => {
|
||||
console.log(response);
|
||||
if (err) {
|
||||
console.error(err);
|
||||
this.setState({ resp: response.text });
|
||||
reject('Bad Request');
|
||||
} else {
|
||||
this.setState({ resp: 'All builds uploaded. Check https://orbis.zone' });
|
||||
resolve('All builds uploaded. Check https://orbis.zone');
|
||||
}
|
||||
});
|
||||
} catch (e) {
|
||||
console.log(e);
|
||||
reject(e.message ? e.message : e);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Render the modal
|
||||
* @return {React.Component} Modal Content
|
||||
*/
|
||||
render() {
|
||||
let translate = this.context.language.translate;
|
||||
this.sendToOrbis = this.sendToOrbis.bind(this);
|
||||
|
||||
return <div className='modal' onClick={ (e) => e.stopPropagation() }>
|
||||
<h2>{translate('permalink')}</h2>
|
||||
<br/>
|
||||
<a className='button' href="https://orbis.zone/api/auth">Log in / signup to Orbis</a>
|
||||
<br/><br/>
|
||||
<h3 >{translate('success')}</h3>
|
||||
<input value={this.state.resp} readOnly size={25} onFocus={ (e) => e.target.select() }/>
|
||||
<br/><br/>
|
||||
<p>Orbis.zone is currently in a trial period, and may be wiped at any time as development progresses. Some elements are also still placeholders.</p>
|
||||
<button className={'l cb dismiss cap'} disabled={!!this.state.failed} onClick={this.sendToOrbis}>{translate('PHASE_UPLOAD_ORBIS')}</button>
|
||||
<button className={'r dismiss cap'} onClick={this.context.hideModal}>{translate('close')}</button>
|
||||
</div>;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user