From 8f03486e20e9b91b7991d2c8c6715109017c86b1 Mon Sep 17 00:00:00 2001 From: Paul Kaplan <pkaplan@media.mit.edu> Date: Tue, 19 Jun 2018 16:52:29 -0400 Subject: [PATCH] Add deleteting via context menu --- src/components/backpack/backpack.jsx | 11 ++++++++--- src/containers/backpack.jsx | 12 +++++++++++- src/lib/backpack-api.js | 19 +++++++++++++++++++ 3 files changed, 38 insertions(+), 4 deletions(-) diff --git a/src/components/backpack/backpack.jsx b/src/components/backpack/backpack.jsx index 0d64307b7..0f7b0b89f 100644 --- a/src/components/backpack/backpack.jsx +++ b/src/components/backpack/backpack.jsx @@ -17,7 +17,7 @@ const dragTypeMap = { sprite: DragConstants.BACKPACK_SPRITE }; -const Backpack = ({contents, dragOver, dropAreaRef, error, expanded, loading, onToggle}) => ( +const Backpack = ({contents, dragOver, dropAreaRef, error, expanded, loading, onToggle, onDelete}) => ( <div className={styles.backpackContainer}> <div className={styles.backpackHeader} @@ -43,7 +43,10 @@ const Backpack = ({contents, dragOver, dropAreaRef, error, expanded, loading, on )} </div> {expanded ? ( - <div className={styles.backpackList}> + <div + className={styles.backpackList} + ref={dropAreaRef} + > {error ? ( <div className={styles.statusMessage}> <FormattedMessage @@ -67,7 +70,6 @@ const Backpack = ({contents, dragOver, dropAreaRef, error, expanded, loading, on className={classNames(styles.backpackListInner, { [styles.dragOver]: dragOver })} - ref={dropAreaRef} > {contents.map(item => ( <SpriteSelectorItem @@ -76,10 +78,12 @@ const Backpack = ({contents, dragOver, dropAreaRef, error, expanded, loading, on details={item.name} dragPayload={item} dragType={dragTypeMap[item.type]} + id={item.id} key={item.id} name={item.type} selected={false} onClick={noop} + onDeleteButtonClick={onDelete} /> ))} </div> @@ -111,6 +115,7 @@ Backpack.propTypes = { error: PropTypes.bool, expanded: PropTypes.bool, loading: PropTypes.bool, + onDelete: PropTypes.func, onToggle: PropTypes.func }; diff --git a/src/containers/backpack.jsx b/src/containers/backpack.jsx index 8bf57d6f9..2d986fbe1 100644 --- a/src/containers/backpack.jsx +++ b/src/containers/backpack.jsx @@ -2,7 +2,7 @@ import React from 'react'; import PropTypes from 'prop-types'; import bindAll from 'lodash.bindall'; import BackpackComponent from '../components/backpack/backpack.jsx'; -import {getBackpackContents, saveBackpackObject, soundPayload, costumePayload} from '../lib/backpack-api'; +import {getBackpackContents, saveBackpackObject, deleteBackpackObject, soundPayload, costumePayload} from '../lib/backpack-api'; import DragConstants from '../lib/drag-constants'; import {connect} from 'react-redux'; @@ -14,6 +14,7 @@ class Backpack extends React.Component { bindAll(this, [ 'handleDrop', 'handleToggle', + 'handleDelete', 'refreshContents', 'setRef' ]); @@ -84,6 +85,14 @@ class Backpack extends React.Component { })) .then(this.refreshContents); } + handleDelete (id) { + deleteBackpackObject({ + host: this.props.host, + token: this.props.token, + username: this.props.username, + id: id + }).then(this.refreshContents); + } refreshContents () { if (this.props.token && this.props.username) { this.setState({loading: true, error: false}); @@ -114,6 +123,7 @@ class Backpack extends React.Component { error={this.state.error} expanded={this.state.expanded} loading={this.state.loading} + onDelete={this.handleDelete} onToggle={this.props.host ? this.handleToggle : null} /> ); diff --git a/src/lib/backpack-api.js b/src/lib/backpack-api.js index 3b1a55e15..9a2b19e95 100644 --- a/src/lib/backpack-api.js +++ b/src/lib/backpack-api.js @@ -49,9 +49,28 @@ const saveBackpackObject = ({ }); }); +const deleteBackpackObject = ({ + host, + username, + token, + id +}) => new Promise((resolve, reject) => { + xhr({ + method: 'DELETE', + uri: `${host}${username}/${id}`, + headers: {'x-token': token} + }, (error, response) => { + if (error || response.statusCode !== 200) { + return reject(); + } + return resolve(response.body); + }); +}); + export { getBackpackContents, saveBackpackObject, + deleteBackpackObject, costumePayload, soundPayload }; -- GitLab