/** @format */ /** * External dependencies */ import { __, sprintf } from '@wordpress/i18n'; import { BaseControl, Button } from '@wordpress/components'; import { Component, Fragment } from '@wordpress/element'; import { compose } from '@wordpress/compose'; import { withDispatch } from '@wordpress/data'; /** * WooCommerce dependencies */ import { Link, ProductImage } from '@woocommerce/components'; /** * Internal dependencies */ import { ActivityCard } from '../../activity-card'; class ProductStockCard extends Component { constructor( props ) { super( props ); this.state = { quantity: props.product.stock_quantity, editing: false, }; this.beginEdit = this.beginEdit.bind( this ); this.cancelEdit = this.cancelEdit.bind( this ); this.onQuantityChange = this.onQuantityChange.bind( this ); this.updateStock = this.updateStock.bind( this ); } componentDidUpdate() { this.quantityInput && this.quantityInput.focus(); } beginEdit() { this.setState( { editing: true } ); } cancelEdit() { this.setState( { editing: false, quantity: this.props.product.stock_quantity, } ); } onQuantityChange( event ) { this.setState( { quantity: event.target.value } ); } updateStock() { const { product, updateItem } = this.props; this.setState( { editing: false }, () => { const data = { stock_quantity: this.state.quantity, type: product.type, parent_id: product.parent_id, }; updateItem( 'products', product.id, data ); } ); } getActions() { const { editing } = this.state; if ( editing ) { return [ , , ]; } return [ , ]; } getBody() { const { editing, quantity } = this.state; if ( editing ) { return ( { this.quantityInput = input; } } /> { __( 'in stock', 'woocommerce-admin' ) } ); } return ( { sprintf( __( '%d in stock', 'woocommerce-admin' ), quantity ) } ); } render() { const { product } = this.props; const title = ( { product.name } ); let subtitle = null; if ( 'variation' === product.type ) { subtitle = Object.values( product.attributes ) .map( attr => attr.option ) .join( ', ' ); } return ( } actions={ this.getActions() } > { this.getBody() } ); } } export default compose( withDispatch( dispatch => { const { updateItem } = dispatch( 'wc-api' ); return { updateItem, }; } ) )( ProductStockCard );