You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

112 lines
2.9 KiB

package react.order;
import react.ReactDOM;
import react.ReactComponent;
import react.ReactMacro.jsx;
import Common;
import utils.HttpUtil;
import react.product.ProductSelect;
import react.router.Redirect;
import react.router.Link;
/**
* A box to add an order to a member
* @author fbarbut
*/
class InsertOrder extends react.ReactComponentOfPropsAndState<{contractId:Int,userId:Int,distributionId:Int,onInsert:UserOrder->Void},{products:Array<ProductInfo>,error:String,selected:Int}>
{
public function new(props)
{
super(props);
state = {products:[],error:null,selected:null};
}
override function componentDidMount()
{
//load product list
HttpUtil.fetch("/api/product/get/", GET, {contractId:props.contractId},PLAIN_TEXT)
.then(function(data:String) {
/*var data : {products:Array<ProductInfo>} = haxe.Json.parse(data);
for( p in data.products) {
p.unitType = Type.createEnumIndex(UnitType,untyped p.unitType);
}*/
var data : {products:Array<ProductInfo>} = tink.Json.parse(data);
setState({products:data.products, error:null,selected:null});
}).catchError(function(data) {
var data = Std.string(data);
trace("Error",data);
if(data.substr(0,1)=="{"){
//json error from server
var data : ErrorInfos = haxe.Json.parse(data);
setState(cast {error:data.error.message} );
}else{
//js error
setState(cast {error:data} );
}
});
}
override public function render(){
//redirect to orderBox if a product is selected
var redirect = if(state.selected!=null) jsx('<$Redirect to="/" />') else null;
return jsx('
<div>
$redirect
<h3>Choisissez le produit à ajouter</h3>
<$Link className="btn btn-default" to="/"><span className="glyphicon glyphicon-chevron-left"></span> Retour</$Link>
<$Error error="${state.error}" />
<hr />
<$ProductSelect onSelect=$onSelectProduct products=${state.products} />
</div>
');
}
function onSelectProduct(p:ProductInfo){
var uo : UserOrder = cast {
id:null,
product:p,
quantity:1,
productId:p.id,
productPrice:p.price,
paid:false,
invert:false,
user2:null
};
props.onInsert(uo);
setState(cast {selected:p.id});
//do not insert order now, just warn the OrderBox
/*
//insert order
var data = [{id:null,productId:p.id,qt:1,paid:false,invert:false,user2:null} ];
var req = {
orders:haxe.Json.stringify(data),
distributionId : props.distributionId,
contractId : props.contractId
};
var r = HttpUtil.fetch("/api/order/update/"+props.userId, POST, req, JSON);
r.then(function(d:Dynamic) {
if (Reflect.hasField(d, "error")) {
setState(cast {error:d.error.message});
}else{
//WOOT
//trace("OK");
//go to OrderBox with a redirect
setState(cast {selected:p.id});
}
}).catchError(function(d) {
trace("PROMISE ERROR", d);
setState(cast {error:d.error.message});
});
*/
}
}