Files
optolith-client/js/views/rcp/ProfessionsListItem.js
T

110 lines
2.9 KiB
JavaScript

import BorderButton from '../../components/BorderButton';
import CultureStore from '../../stores/CultureStore';
import { Profession } from '../../utils/DataUtils';
import ProfessionActions from '../../actions/ProfessionActions';
import ProfessionVariantActions from '../../actions/ProfessionVariantActions';
import ProfessionVariantStore from '../../stores/ProfessionVariantStore';
import ProfileStore from '../../stores/ProfileStore';
import RadioButtonGroup from '../../components/RadioButtonGroup';
import React, { Component, PropTypes } from 'react';
import classNames from 'classnames';
export default class ProfessionsListItem extends Component {
static propTypes = {
currentID: PropTypes.string,
currentVID: PropTypes.string,
profession: PropTypes.instanceOf(Profession).isRequired,
sex: PropTypes.string.isRequired,
showAddSlidein: PropTypes.func.isRequired
};
selectProfession = () => ProfessionActions.selectProfession(this.props.profession.id);
selectProfessionVariant = id => ProfessionVariantActions.selectProfessionVariant(id);
render() {
const { showAddSlidein, currentID, currentVID, profession, sex } = this.props;
const className = classNames({
'active': profession.id === currentID
});
var variants;
if (profession.id === currentID && profession.variants.length > 0) {
var allVariants = ProfessionVariantStore.getAll().filter(e => {
if (profession.variants.includes(e.id)) {
if (e.reqs_p !== null) {
return e.reqs_p.every(req => {
if (req[0] === 'c') {
let cultureID = CultureStore.getCurrentID();
return req[1].includes(cultureID);
} else if (req[0] === 'g') {
let gender = ProfileStore.getGender();
return gender === req[1];
}
return false;
});
}
return true;
}
return false;
});
if (allVariants.length > 0) {
allVariants = allVariants.map(e => {
let { ap, id, name } = e;
if (typeof name === 'object') {
name = name[sex];
}
return {
name: `${name} (${profession.ap + ap} AP)`,
value: id
};
});
allVariants.splice(0, 0, {
name: 'Keine Variante',
value: null
});
variants = (
<RadioButtonGroup active={currentVID} onClick={this.selectProfessionVariant} array={allVariants} />
);
}
}
let { name, subname } = profession;
if (typeof name === 'object') {
name = name[sex];
}
if (typeof subname === 'object') {
subname = subname[sex];
}
return (
<li className={className}>
<div className="left">
<h2>{name} ({profession.ap} AP)</h2>
{subname ? <h3>{subname}</h3> : null}
{variants}
</div>
<div className="right">
{
profession.id === currentID ? (
<BorderButton
label="Weiter"
onClick={showAddSlidein}
primary
/>
) : (
<BorderButton
label="Auswählen"
onClick={this.selectProfession}
/>
)
}
</div>
</li>
);
}
}