mirror of
https://github.com/ascribe/onion.git
synced 2025-02-14 21:10:27 +01:00
Added PieceDetail boilerplate code
This commit is contained in:
parent
ffd1326366
commit
1cb0b54f77
23
js/actions/piece_actions.js
Normal file
23
js/actions/piece_actions.js
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
import alt from '../alt';
|
||||||
|
import PieceFetcher from '../fetchers/piece_fetcher';
|
||||||
|
|
||||||
|
|
||||||
|
class PieceActions {
|
||||||
|
constructor() {
|
||||||
|
this.generateActions(
|
||||||
|
'updatePiece'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
fetchOne(pieceId) {
|
||||||
|
PieceFetcher.fetchOne(pieceId)
|
||||||
|
.then((res) => {
|
||||||
|
this.actions.updatePiece(res.piece);
|
||||||
|
})
|
||||||
|
.catch((err) => {
|
||||||
|
console.log(err);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
export default alt.createActions(PieceActions);
|
18
js/components/ascribe_piece_detail/piece_detail.js
Normal file
18
js/components/ascribe_piece_detail/piece_detail.js
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
import React from 'react';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This is the component that implements display-specific functionality
|
||||||
|
*/
|
||||||
|
let PieceDetail = React.createClass({
|
||||||
|
propTypes: {
|
||||||
|
title: React.PropTypes.string.isRequired
|
||||||
|
},
|
||||||
|
|
||||||
|
render() {
|
||||||
|
return (
|
||||||
|
<p>Title: {this.props.title}</p>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
export default PieceDetail;
|
@ -6,6 +6,7 @@ import TableColumnContentModel from '../../models/table_column_content_model';
|
|||||||
import GeneralUtils from '../../utils/general_utils';
|
import GeneralUtils from '../../utils/general_utils';
|
||||||
|
|
||||||
import TableItemSubtableButton from './table_item_subtable_button';
|
import TableItemSubtableButton from './table_item_subtable_button';
|
||||||
|
import Table from './table';
|
||||||
|
|
||||||
|
|
||||||
let TableItemSubtable = React.createClass({
|
let TableItemSubtable = React.createClass({
|
||||||
@ -29,8 +30,12 @@ let TableItemSubtable = React.createClass({
|
|||||||
},
|
},
|
||||||
|
|
||||||
loadEditionList() {
|
loadEditionList() {
|
||||||
console.log(this.props);
|
this.props.actions.fetchEditionList(this.props.columnContent.id);
|
||||||
//this.props.actions.actions.fetchEditionList();
|
|
||||||
|
this.setState({
|
||||||
|
'open': true,
|
||||||
|
'editionList': this.props.store.getState()
|
||||||
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
calcColumnClasses(list, i) {
|
calcColumnClasses(list, i) {
|
||||||
@ -63,6 +68,26 @@ let TableItemSubtable = React.createClass({
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
let renderEditionListTable = () => {
|
||||||
|
|
||||||
|
// let columnList = [
|
||||||
|
// new TableColumnContentModel('thumbnail', '', TableItemImg, 2, false),
|
||||||
|
// new TableColumnContentModel('artist_name', 'Artist', TableItemText, 4, true),
|
||||||
|
// new TableColumnContentModel('title', 'Title', TableItemText, 4, true)
|
||||||
|
// ];
|
||||||
|
|
||||||
|
if(this.state.open) {
|
||||||
|
return (
|
||||||
|
<div className="row">
|
||||||
|
<div className="col-xs-12 col-sm-12 col-md-12 col-lg-12">
|
||||||
|
<Table itemList={this.state.editionList}></Table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="col-xs-12 col-sm-12 col-md-12 col-lg-12 ascribe-table-item">
|
<div className="col-xs-12 col-sm-12 col-md-12 col-lg-12 ascribe-table-item">
|
||||||
<div className="row">
|
<div className="row">
|
||||||
@ -72,6 +97,7 @@ let TableItemSubtable = React.createClass({
|
|||||||
</TableItemSubtableButton>
|
</TableItemSubtableButton>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
{renderEditionListTable()}
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -3,13 +3,14 @@ import React from 'react';
|
|||||||
let TableItemSubtableButton = React.createClass({
|
let TableItemSubtableButton = React.createClass({
|
||||||
|
|
||||||
propTypes: {
|
propTypes: {
|
||||||
content: React.PropTypes.string.isRequired
|
content: React.PropTypes.string.isRequired,
|
||||||
|
onClick: React.PropTypes.func.isRequired
|
||||||
},
|
},
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
return (
|
return (
|
||||||
<span>
|
<span>
|
||||||
<button type="button" className="btn btn-ascribe btn-primary btn-sm">
|
<button type="button" className="btn btn-ascribe btn-primary btn-sm" onClick={this.props.onClick}>
|
||||||
{this.props.content}
|
{this.props.content}
|
||||||
</button>
|
</button>
|
||||||
</span>
|
</span>
|
||||||
|
@ -1,11 +1,45 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
|
|
||||||
|
import PieceActions from '../actions/piece_actions';
|
||||||
|
import PieceStore from '../stores/piece_store';
|
||||||
|
|
||||||
|
import PieceDetail from './ascribe_piece_detail/piece_detail';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This is the component that implements resource/data specific functionality
|
||||||
|
*/
|
||||||
let Piece = React.createClass({
|
let Piece = React.createClass({
|
||||||
|
|
||||||
|
getInitialState() {
|
||||||
|
return PieceStore.getState();
|
||||||
|
},
|
||||||
|
|
||||||
|
onChange(state) {
|
||||||
|
this.setState(state);
|
||||||
|
},
|
||||||
|
|
||||||
|
componentDidMount() {
|
||||||
|
PieceActions.fetchOne(this.props.params.pieceId);
|
||||||
|
PieceStore.listen(this.onChange);
|
||||||
|
},
|
||||||
|
|
||||||
|
componentDidUnmount() {
|
||||||
|
PieceStore.unlisten(this.onChange);
|
||||||
|
},
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
return (
|
|
||||||
<p>this.props.piece.title</p>
|
if('title' in this.state.piece) {
|
||||||
);
|
return (
|
||||||
|
<PieceDetail title={this.state.piece.title}></PieceDetail>
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
return (
|
||||||
|
<p>Loading</p>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -16,7 +16,7 @@ import TableItemSubtableButton from './ascribe_table/table_item_subtable_button'
|
|||||||
|
|
||||||
import TableColumnContentModel from '../models/table_column_content_model';
|
import TableColumnContentModel from '../models/table_column_content_model';
|
||||||
|
|
||||||
import Pagination from './ascribe_pagination/pagination'
|
import Pagination from './ascribe_pagination/pagination';
|
||||||
|
|
||||||
|
|
||||||
let PieceList = React.createClass({
|
let PieceList = React.createClass({
|
||||||
|
22
js/fetchers/piece_fetcher.js
Normal file
22
js/fetchers/piece_fetcher.js
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
import fetch from 'isomorphic-fetch';
|
||||||
|
|
||||||
|
import AppConstants from '../constants/application_constants';
|
||||||
|
import FetchApiUtils from '../utils/fetch_api_utils';
|
||||||
|
|
||||||
|
|
||||||
|
let PieceFetcher = {
|
||||||
|
/**
|
||||||
|
* Fetch one user from the API.
|
||||||
|
* If no arg is supplied, load the current user
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
fetchOne(pieceId) {
|
||||||
|
return fetch(AppConstants.baseUrl + 'pieces/' + pieceId + '/', {
|
||||||
|
headers: {
|
||||||
|
'Authorization': 'Basic ' + AppConstants.debugCredentialBase64
|
||||||
|
}
|
||||||
|
}).then((res) => res.json());
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
export default PieceFetcher;
|
@ -11,7 +11,9 @@ let Route = Router.Route;
|
|||||||
let routes = (
|
let routes = (
|
||||||
<Route name="app" path="/" handler={AscribeApp}>
|
<Route name="app" path="/" handler={AscribeApp}>
|
||||||
<Route name="pieces" path="/pieces" handler={PieceList}>
|
<Route name="pieces" path="/pieces" handler={PieceList}>
|
||||||
<Route name="piece" path="/pieces/:bitcoin_ID_noPrefix" handler={Piece} />
|
|
||||||
|
</Route>
|
||||||
|
<Route name="piece" path="/pieces/:pieceId" handler={Piece}>
|
||||||
</Route>
|
</Route>
|
||||||
</Route>
|
</Route>
|
||||||
);
|
);
|
||||||
|
16
js/stores/piece_store.js
Normal file
16
js/stores/piece_store.js
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
import alt from '../alt';
|
||||||
|
import PieceAction from '../actions/piece_actions';
|
||||||
|
|
||||||
|
|
||||||
|
class PieceStore {
|
||||||
|
constructor() {
|
||||||
|
this.piece = {}
|
||||||
|
this.bindActions(PieceAction);
|
||||||
|
}
|
||||||
|
|
||||||
|
onUpdatePiece(piece) {
|
||||||
|
this.piece = piece;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
export default alt.createStore(PieceStore);
|
Loading…
Reference in New Issue
Block a user