added controlled component with redux (title)
This commit is contained in:
parent
94cdb37a13
commit
66e1496a73
5 changed files with 47 additions and 21 deletions
|
@ -1,12 +1,13 @@
|
||||||
// export action types
|
// export action types
|
||||||
export const FILE_SELECTED = 'FILE_SELECTED';
|
export const FILE_SELECTED = 'FILE_SELECTED';
|
||||||
export const FILE_CLEAR = 'FILE_CLEAR';
|
export const FILE_CLEAR = 'FILE_CLEAR';
|
||||||
|
export const METADATA_UPDATE = 'TITLE_UPDATE';
|
||||||
|
|
||||||
// export action creators
|
// export action creators
|
||||||
export function selectFile (file) {
|
export function selectFile (file) {
|
||||||
return {
|
return {
|
||||||
type: FILE_SELECTED,
|
type: FILE_SELECTED,
|
||||||
payload: file,
|
file: file,
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -15,3 +16,11 @@ export function clearFile () {
|
||||||
type: FILE_CLEAR,
|
type: FILE_CLEAR,
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export function updateMetadata (name, value) {
|
||||||
|
return {
|
||||||
|
type: METADATA_UPDATE,
|
||||||
|
name,
|
||||||
|
value,
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
|
@ -28,10 +28,7 @@ class PublishForm extends React.Component {
|
||||||
<div className="row row--no-bottom">
|
<div className="row row--no-bottom">
|
||||||
<div className="column column--10">
|
<div className="column column--10">
|
||||||
|
|
||||||
<PublishTitleInput
|
<PublishTitleInput />
|
||||||
title={this.props.title}
|
|
||||||
updateUploaderState={this.props.updateUploaderState}
|
|
||||||
/>
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div className="column column--5 column--sml-10" >
|
<div className="column column--5 column--sml-10" >
|
||||||
|
@ -103,7 +100,6 @@ const mapStateToProps = state => {
|
||||||
loggedInChannelShortId: state.loggedInChannelShortId,
|
loggedInChannelShortId: state.loggedInChannelShortId,
|
||||||
publishToChannel : state.publishToChannel,
|
publishToChannel : state.publishToChannel,
|
||||||
file : state.file,
|
file : state.file,
|
||||||
title : state.title,
|
|
||||||
claim : state.claim,
|
claim : state.claim,
|
||||||
thumbnail : state.thumbnail,
|
thumbnail : state.thumbnail,
|
||||||
description : state.description,
|
description : state.description,
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
|
import {updateMetadata} from '../actions';
|
||||||
|
import {connect} from 'react-redux';
|
||||||
|
|
||||||
class TitleInput extends React.Component {
|
class TitleInput extends React.Component {
|
||||||
constructor (props) {
|
constructor (props) {
|
||||||
|
@ -9,7 +11,7 @@ class TitleInput extends React.Component {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
const name = e.target.name;
|
const name = e.target.name;
|
||||||
const value = e.target.value;
|
const value = e.target.value;
|
||||||
this.props.updateUploaderState(name, value);
|
this.props.onMetadataChange(name, value);
|
||||||
}
|
}
|
||||||
render () {
|
render () {
|
||||||
return (
|
return (
|
||||||
|
@ -18,4 +20,18 @@ class TitleInput extends React.Component {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = TitleInput;
|
const mapStateToProps = state => {
|
||||||
|
return {
|
||||||
|
title: state.metadata.title,
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
const mapDispatchToProps = dispatch => {
|
||||||
|
return {
|
||||||
|
onMetadataChange: (name, value) => {
|
||||||
|
dispatch(updateMetadata(name, value));
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
export default connect(mapStateToProps, mapDispatchToProps)(TitleInput);
|
||||||
|
|
|
@ -97,7 +97,6 @@ class PublishTool extends React.Component {
|
||||||
{ this.props.file &&
|
{ this.props.file &&
|
||||||
<PublishForm
|
<PublishForm
|
||||||
updateUploaderState={this.updateUploaderState}
|
updateUploaderState={this.updateUploaderState}
|
||||||
clearUploaderState={this.clearUploaderState}
|
|
||||||
makeGetRequest={this.makeGetRequest}
|
makeGetRequest={this.makeGetRequest}
|
||||||
makePostRequest={this.makePostRequest}
|
makePostRequest={this.makePostRequest}
|
||||||
cleanseInput={this.cleanseInput}
|
cleanseInput={this.cleanseInput}
|
||||||
|
|
|
@ -1,21 +1,20 @@
|
||||||
import {FILE_CLEAR, FILE_SELECTED} from '../actions';
|
import {FILE_CLEAR, FILE_SELECTED, METADATA_UPDATE} from '../actions';
|
||||||
|
|
||||||
const DROPZONE = 'DROPZONE';
|
|
||||||
|
|
||||||
const initialState = {
|
const initialState = {
|
||||||
showComponent : DROPZONE,
|
|
||||||
loggedInChannelName : null,
|
loggedInChannelName : null,
|
||||||
loggedInChannelShortId: null,
|
loggedInChannelShortId: null,
|
||||||
publishToChannel : false,
|
publishToChannel : false,
|
||||||
publishStatus : null,
|
publishStatus : null,
|
||||||
error : null,
|
error : null,
|
||||||
file : null,
|
file : null,
|
||||||
|
metadata : {
|
||||||
title : '',
|
title : '',
|
||||||
claim : '',
|
claim : '',
|
||||||
thumbnail : '',
|
thumbnail : '',
|
||||||
description: '',
|
description: '',
|
||||||
license : '',
|
license : '',
|
||||||
nsfw : '',
|
nsfw : '',
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -26,10 +25,17 @@ export default function (state = initialState, action) {
|
||||||
switch (action.type) {
|
switch (action.type) {
|
||||||
case FILE_SELECTED:
|
case FILE_SELECTED:
|
||||||
return Object.assign({}, state, {
|
return Object.assign({}, state, {
|
||||||
file: action.payload,
|
file: action.file,
|
||||||
});
|
});
|
||||||
case FILE_CLEAR:
|
case FILE_CLEAR:
|
||||||
return initialState;
|
return initialState;
|
||||||
|
case METADATA_UPDATE:
|
||||||
|
console.log(`reducer for ${action.name} ${action.value}`);
|
||||||
|
return Object.assign({}, state, {
|
||||||
|
metadata: {
|
||||||
|
[action.name]: action.value,
|
||||||
|
},
|
||||||
|
})
|
||||||
default:
|
default:
|
||||||
return state;
|
return state;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue