@rnga/orders
Version:
## Get schema from @prisma-cms 1. yarn get-api-schema -e http://localhost:4000 2. yarn build-api-fragments
770 lines (524 loc) • 11.5 kB
JavaScript
import React, { Component } from 'react'
import PropTypes from 'prop-types'
import Grid from 'material-ui/Grid';
import EditableView from 'apollo-cms/src/DataView/Object/Editable';
import OrderItemStatus from 'ui/OrderItem/Status/SelectField';
import { withStyles, TextField } from 'material-ui';
import moment from "moment";
import OrderNumber from "ui/OrderNumber";
import UserView from "ui/View/User/Object";
import OrderItemExpertises from "./Expertises";
export const styles = {
invisible: {
height: 1,
opacity: 0,
border: "none",
},
}
class OrderItemPageView extends EditableView {
static propTypes = {
...EditableView.propTypes,
classes: PropTypes.object.isRequired,
};
static contextTypes = {
...EditableView.contextTypes,
loadApiData: PropTypes.func.isRequired,
setPageMeta: PropTypes.func.isRequired,
};
setPageMeta() {
const {
setPageMeta,
} = this.context;
setPageMeta({
title: this.getTitle(),
});
}
componentWillMount() {
this.setPageMeta();
super.componentWillMount && super.componentWillMount();
}
componentDidUpdate() {
this.setPageMeta();
super.componentDidUpdate && super.componentDidUpdate();
}
getTitle() {
const draftObject = this.getObjectWithMutations();
const {
title,
} = draftObject || {};
return title || "";
}
canEdit() {
const {
user: currentUser,
} = this.context;
// const {
// data,
// } = this.props;
// const {
// object: user,
// } = data || {};
// return currentUser && user && (currentUser.id === user.id || currentUser.sudo === true) ? true : false;
return currentUser && currentUser.sudo ? true : false;
}
async save() {
const result = await super.save()
.then(r => {
const {
loadApiData,
} = this.context;
loadApiData();
return r;
})
.catch(e => {
console.error(e);
});
return result;
}
onUpdateAvatar = (file) => {
if (file) {
const {
id,
path,
mimetype,
} = file;
if (!path) {
this.addError("File URL is empty");
return;
}
if (!mimetype) {
this.addError("Wrong file type");
}
else if (!mimetype.match(/image/)) {
this.addError("Only images allow");
}
else {
let image = path;
this.updateObject({
image,
});
}
}
else {
this.addError("File did not received");
}
}
getTextField(props = {}) {
props = {
disabled: !this.isInEditMode(),
inputProps: {
style: {
color: "#333",
},
},
...props,
}
return super.getTextField(props);
}
onChange(event) {
let {
name,
value,
type: Type,
} = event.target;
if (Type === "number") {
value = value ? parseFloat(value) : null;
}
switch (name) {
case "externalKey":
value = value ? parseInt(String(value).substr(0, 4)) : null;
break;
}
let data = {
[name]: value ? value : null,
};
let {
id,
type,
externalKey,
} = this.getObjectWithMutations();
if (!id) {
switch (name) {
case "externalKey":
case "type":
let slabData = Object.assign({
type,
externalKey,
year: moment().format("YY0"),
}, {
[name]: value,
});
if (type && externalKey) {
let slab = Object.values(slabData).join("");
data.slab = slab;
}
break;
}
}
this.updateObject(data);
}
renderAdminBlock() {
const object = this.getObjectWithMutations();
if (!object) {
return null;
}
const inEditMode = this.isInEditMode();
let {
id: orderItemId,
type,
status,
} = object;
// birthday = birthday && moment(birthday).isValid() ? moment(birthday).format("YYYY-MM-DD") : birthday;
// birthday = birthday && moment(birthday).isValid() ? moment(birthday).toLocaleString() : birthday;
let type_str = "";
switch (type) {
case "10":
type_str = "Монета";
break;
case "20":
type_str = "Медаль";
break;
case "30":
type_str = "Жетон";
break;
}
return <div
style={{
marginTop: 30,
}}
>
<Grid
container
spacing={8}
>
{/* <Grid
item
xs={12}
sm={6}
md={4}
lg={3}
>
{this.getTextField({
label: "Дата рождения",
name: "birthday",
type: "date",
value: birthday || "дд.мм.гггг",
})}
</Grid> */}
<Grid
item
xs={12}
sm={6}
md={4}
lg={3}
>
{this.getTextField({
label: "Номер строки",
name: "externalKey",
type: "number",
})}
</Grid>
<Grid
item
xs={12}
sm={6}
md={4}
lg={3}
>
{this.getTextField({
label: "Порядковый номер",
name: "number",
helperText: "1, 2, 3 и т.д.",
type: "number",
})}
</Grid>
<Grid
item
xs={12}
sm={6}
md={4}
lg={3}
>
{this.getTextField({
label: "№ слаба",
name: "slab",
Editor: OrderNumber,
customInput: TextField,
})}
</Grid>
<Grid
item
xs={12}
sm={6}
md={4}
lg={3}
>
{this.getTextField({
label: "Заголовок",
name: "title",
})}
</Grid>
<Grid
item
xs={12}
sm={6}
md={4}
lg={3}
>
{this.getTextField({
label: "Год",
name: "year",
})}
</Grid>
<Grid
item
xs={12}
sm={6}
md={4}
lg={3}
>
{this.getTextField({
label: "Прегрейд",
name: "preGrade",
})}
</Grid>
<Grid
item
xs={12}
sm={6}
md={4}
lg={3}
>
{this.getTextField({
Editor: OrderItemStatus,
label: "Статус",
name: "status",
})}
</Grid>
<Grid
item
xs={12}
sm={6}
md={4}
lg={3}
>
{this.getTextField({
label: "Тип",
name: "type",
helperText: "10-монета, 20-медаль, 30-жетон",
type: "number",
})}
</Grid>
<Grid
item
xs={12}
sm={6}
md={4}
lg={3}
>
{this.getTextField({
label: "Тип",
name: "type",
value: type_str,
disabled: true,
})}
</Grid>
<Grid
item
xs={12}
sm={6}
md={4}
lg={3}
>
{this.getTextField({
label: "Диаметр",
name: "diametr",
type: "number",
})}
</Grid>
<Grid
item
xs={12}
sm={6}
md={4}
lg={3}
>
{this.getTextField({
label: "Толщина",
name: "thingh",
type: "number",
})}
</Grid>
<Grid
item
xs={12}
sm={6}
md={4}
lg={3}
>
{this.getTextField({
label: "Вес",
name: "weight",
type: "number",
})}
</Grid>
<Grid
item
xs={12}
sm={6}
md={4}
lg={3}
>
{this.getTextField({
label: "Оценочная стоимость",
name: "price",
type: "number",
})}
</Grid>
<Grid
item
xs={12}
sm={6}
md={4}
lg={3}
>
{this.getTextField({
label: "Страховая стоимость",
name: "ensure_price",
type: "number",
})}
</Grid>
<Grid
item
xs={12}
sm={6}
md={4}
lg={3}
>
{this.getTextField({
label: "Грейд по Шелдону",
name: "sheldon_grade",
})}
</Grid>
<Grid
item
xs={12}
sm={6}
md={4}
lg={3}
>
{this.getTextField({
label: "№ по Биткину",
name: "bitkin",
})}
</Grid>
{/* <Grid
item
xs={12}
sm={6}
md={4}
lg={3}
>
{this.getTextField({
label: "Эксперт. закл.",
name: "expertize",
})}
</Grid> */}
{orderItemId
?
<Grid
item
xs={12}
>
<OrderItemExpertises
item={object}
inEditMode={inEditMode}
/>
</Grid>
: null
}
<Grid
item
xs={12}
>
{this.renderOwner()}
</Grid>
</Grid>
</div>;
}
renderOwner() {
const {
Order,
} = this.getObjectWithMutations() || {};
const {
User,
} = Order || {};
// const {
// updateUser,
// } = this.props;
let userView;
if (User) {
userView = <div
style={{
marginTop: 30,
}}
>
<UserView
data={{
object: User,
}}
// mutate={updateUser}
/>
</div>
}
return <Grid
container
spacing={8}
>
{userView}
</Grid>;
}
renderDefaultView() {
const object = this.getObjectWithMutations();
const inEditMode = this.isInEditMode();
const {
id,
} = object;
const {
user: currentUser,
} = this.context;
const {
} = currentUser || {}
return <Grid
container
>
<Grid
item
xs={12}
>
{this.renderAdminBlock()}
</Grid>
</Grid>;
}
renderEditableView() {
const object = this.getObjectWithMutations();
const inEditMode = this.isInEditMode();
const {
classes,
} = this.props;
const {
user: currentUser,
} = this.context;
return <Grid
container
>
<Grid
item
xs={12}
>
{this.renderAdminBlock()}
</Grid>
</Grid>;
}
}
export default withStyles(styles)(OrderItemPageView);