UNPKG

@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
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);