changed show components to share ShowAsset

This commit is contained in:
bill bittner 2018-01-30 17:15:23 -08:00
parent 1f5a493375
commit 6ac91046b1
5 changed files with 189 additions and 132 deletions

View file

@ -0,0 +1,106 @@
import React from 'react';
import ShowLite from 'components/ShowLite';
import ShowDetails from 'components/ShowDetails';
import request from 'utils/request';
class ShowAsset extends React.Component {
constructor (props) {
super(props);
this.state = {
claimData: null,
error : null,
};
this.getLongClaimId = this.getLongClaimId.bind(this);
this.getClaimData = this.getClaimData.bind(this);
}
componentDidMount () {
console.log('ShowAsset did mount');
console.log('ShowAsset props', this.props);
let body = {};
if (this.props.identifier) {
if (this.props.identifier.isChannel) {
body['channelName'] = this.props.identifier.channelName;
body['channelClaimId'] = this.props.identifier.channelClaimId;
} else {
body['claimId'] = this.props.identifier.claimId;
}
}
if (this.props.claim) {
body['claimName'] = this.props.claim.claimName;
}
const params = {
method : 'POST',
headers: new Headers({
'Content-Type': 'application/json',
}),
body: JSON.stringify(body),
}
const that = this;
this.getLongClaimId(params)
.then(claimLongId => {
return that.getClaimData(this.props.claim.claimName, claimLongId);
})
.then(claimData => {
this.setState({ claimData });
})
.catch(error => {
this.setState({error});
});
}
getLongClaimId (params) {
const url = `/api/claim-get-long-id`;
console.log('params:', params);
return new Promise((resolve, reject) => {
request(url, params)
.then(({ success, message }) => {
console.log('get long claim id response:', message);
if (!success) {
reject(message);
}
resolve(message);
})
.catch((error) => {
reject(error.message);
});
});
}
getClaimData (claimName, claimId) {
return new Promise((resolve, reject) => {
const url = `/api/claim-get-data/${claimName}/${claimId}`;
return request(url)
.then(({ success, message }) => {
console.log('get claim data response:', message);
if (!success) {
reject(message);
}
resolve(message);
})
.catch((error) => {
reject(error.message);
});
});
}
render () {
if (this.props.isServeRequest) {
return (
<ShowLite
error={this.state.error}
claimData={this.state.claimData}
/>
);
}
return (
<ShowDetails
error={this.state.error}
claimData={this.state.claimData}
/>
);
}
};
// required props
// identifier
// claim
// isServeRequest
export default ShowAsset;

View file

@ -4,7 +4,7 @@ import AssetTitle from 'components/AssetTitle';
import AssetDisplay from 'components/AssetDisplay';
import AssetInfo from 'components/AssetInfo';
class ShowDetailsPage extends React.Component {
class ShowDetails extends React.Component {
componentDidMount () {
console.log(this.props);
}
@ -12,23 +12,28 @@ class ShowDetailsPage extends React.Component {
return (
<div>
<NavBar/>
{this.props.error &&
<p>{this.props.error}</p>
}
{this.props.claimData &&
<div className="row row--tall row--padded">
<div className="column column--10">
<AssetTitle title={this.props.claimName}/>
<AssetTitle title={this.props.claimData.title}/>
</div>
<div className="column column--5 column--sml-10 align-content-top">
<div className="row row--padded">
<AssetDisplay
claimName={this.props.claimName}
claimId={this.props.claimId}
claimName={this.props.claimData.name}
claimId={this.props.claimData.claimId}
/>
</div>
</div><div className="column column--5 column--sml-10 align-content-top">
<div className="row row--padded">
<AssetInfo claimId={this.props.claimId}/>
<AssetInfo claimId={this.props.claimData.claimId}/>
</div>
</div>
</div>
}
</div>
);
}
@ -41,4 +46,4 @@ class ShowDetailsPage extends React.Component {
// claimId
// claimName
export default ShowDetailsPage;
export default ShowDetails;

View file

@ -1,78 +1,21 @@
import React from 'react';
import { Link } from 'react-router-dom';
import AssetDisplay from 'components/AssetDisplay';
import request from 'utils/request';
class ShowLitePage extends React.Component {
constructor (props) {
super(props);
this.state = {
claimData: null,
error : null,
};
this.getLongClaimId = this.getLongClaimId.bind(this);
this.getClaimData = this.getClaimData.bind(this);
}
componentDidMount () {
const that = this;
const claimName = that.props.claimName;
const claimId = that.props.claimId || 'none';
this.getLongClaimId(claimName, claimId)
.then(claimLongId => {
return that.getClaimData(claimName, claimLongId);
})
.then(claimData => {
this.setState({ claimData });
})
.catch(error => {
this.setState({error});
});
}
getLongClaimId (claimName, claimId) {
return new Promise((resolve, reject) => {
const url = `/api/claim-get-long-id/${claimName}/${claimId}`;
return request(url)
.then(({ success, message }) => {
console.log('get long claim id response:', message);
if (!success) {
reject(message);
}
resolve(message);
})
.catch((error) => {
reject(error.message);
});
});
}
getClaimData (claimName, claimId) {
return new Promise((resolve, reject) => {
const url = `/api/claim-get-data/${claimName}/${claimId}`;
return request(url)
.then(({ success, message }) => {
console.log('get claim data response:', message);
if (!success) {
reject(message);
}
resolve(message);
})
.catch((error) => {
reject(error.message);
});
});
}
class ShowLite extends React.Component {
render () {
return (
<div className="row row--tall flex-container--column flex-container--center-center">
{this.state.error &&
<p>{this.state.error}</p>
{this.props.error &&
<p>{this.props.error}</p>
}
{this.state.claimData &&
{this.props.claimData &&
<div>
<AssetDisplay
claimName={this.state.claimData.name}
claimId={this.state.claimData.claimId}
claimName={this.props.claimData.name}
claimId={this.props.claimData.claimId}
/>
<Link id="asset-boilerpate" className="link--primary fine-print" to={`/${this.state.claimData.claimId}/${this.state.claimData.name}`}>hosted via Spee.ch</Link>
<Link id="asset-boilerpate" className="link--primary fine-print" to={`/${this.props.claimData.claimId}/${this.props.claimData.name}`}>hosted via Spee.ch</Link>
</div>
}
</div>
@ -80,4 +23,4 @@ class ShowLitePage extends React.Component {
}
};
export default ShowLitePage;
export default ShowLite;

View file

@ -1,6 +1,5 @@
import React from 'react';
import ShowLite from 'components/ShowLite';
import ShowDetails from 'components/ShowDetails';
import ShowAsset from 'components/ShowAsset';
import ShowChannel from 'components/ShowChannel';
import lbryUri from 'utils/lbryUri';
@ -8,16 +7,13 @@ class ShowPage extends React.Component {
constructor (props) {
super(props);
this.state = {
isChannel : null,
channelName : null,
channelClaimId: null,
claimId : null,
claimName : null,
identifier : null,
claim : null,
isServeRequest: null,
longClaimId : null,
};
}
componentDidMount () {
console.log('ShowPage did mount');
const identifier = this.props.match.params.identifier;
const claim = this.props.match.params.claim;
// handle case of identifier and claim
@ -31,11 +27,15 @@ class ShowPage extends React.Component {
}
// set state
return this.setState({
identifier: {
isChannel,
channelName,
channelClaimId,
claimId,
},
claim: {
claimName,
},
isServeRequest,
});
}
@ -44,56 +44,53 @@ class ShowPage extends React.Component {
try {
({ isChannel, channelName, channelClaimId } = lbryUri.parseIdentifier(claim));
} catch (error) {
console.log('error:', error);
return console.log('error:', error);
}
if (isChannel) {
return this.setState({
claim: {
isChannel,
channelName,
channelClaimId,
},
});
}
let claimName, isServeRequest;
try {
({claimName, isServeRequest} = lbryUri.parseName(claim));
} catch (error) {
console.log('error:', error);
return console.log('error:', error);
}
this.setState({
claim: {
claimName,
},
isServeRequest,
});
}
render () {
const identifier = this.props.match.params.identifier;
console.log('rendering component');
if (!identifier && this.state.isChannel) {
console.log('rendering ShowPage');
if (this.state.claim) {
if (this.state.claim.isChannel) {
return (
<ShowChannel
channelName={this.state.channelName}
channelClaimId={this.state.channelClaimId}
/>
);
}
if (this.state.isServeRequest) {
return (
<ShowLite
claimName={this.state.claimName}
claimId={this.state.claimId}
channelName={this.state.channelName}
channelClaimId={this.state.channelClaimId}
channelName={this.state.claim.channelName}
channelClaimId={this.state.claim.channelClaimId}
/>
);
}
return (
<ShowDetails
claimName={this.state.claimName}
claimId={this.state.claimId}
channelName={this.state.channelName}
channelClaimId={this.state.channelClaimId}
<ShowAsset
identifier={this.state.identifier} // this.state.url.identifier
claim={this.state.claim} // this.state.url.claim
isServeRequest={this.state.isServeRequest} // this.state.url.ending
/>
);
}
return (
<p>Loading...</p>
);
}
};
export default ShowPage;

View file

@ -9,9 +9,10 @@ const { createPublishParams, parsePublishApiRequestBody, parsePublishApiRequestF
const errorHandlers = require('../helpers/errorHandlers.js');
const { sendGoogleAnalyticsTiming } = require('../helpers/statsHelpers.js');
const { authenticateIfNoUserToken } = require('../auth/authentication.js');
const { getChannelViewData } = require('../controllers/serveController.js');
const { getChannelViewData, getClaimId } = require('../controllers/serveController.js');
const NO_CHANNEL = 'NO_CHANNEL';
const NO_CLAIM = 'NO_CLAIM';
module.exports = (app) => {
// route to run a claim_list request on the daemon
@ -205,16 +206,21 @@ module.exports = (app) => {
errorHandlers.handleApiError(originalUrl, ip, error, res);
});
});
app.get('/api/claim-get-long-id/:claimName/:claimId', ({ ip, originalUrl, body, params }, res) => {
const claimName = params.claimName;
let claimId = params.claimId;
if (claimId === 'none') claimId = null;
db.Claim.getLongClaimId(claimName, claimId)
.then(longId => {
if (!longId) {
app.post('/api/claim-get-long-id', ({ ip, originalUrl, body, params }, res) => {
logger.debug('body:', body);
const channelName = body.channelName;
const channelClaimId = body.channelClaimId;
const claimName = body.claimName;
const claimId = body.claimId;
getClaimId(channelName, channelClaimId, claimName, claimId)
.then(result => {
if (result === NO_CHANNEL) {
return res.status(200).json({success: false, message: 'No matching channel could be found'});
}
if (result === NO_CLAIM) {
return res.status(200).json({success: false, message: 'No matching claim id could be found'});
}
res.status(200).json({success: true, message: longId});
res.status(200).json({success: true, message: result});
})
.catch(error => {
logger.error('api error getting long claim id', error);