React/Redux - publish component #323
|
@ -43,6 +43,11 @@
|
||||||
"nodemon": "^1.11.0",
|
"nodemon": "^1.11.0",
|
||||||
"passport": "^0.4.0",
|
"passport": "^0.4.0",
|
||||||
"passport-local": "^1.0.0",
|
"passport-local": "^1.0.0",
|
||||||
|
"prop-types": "^15.6.0",
|
||||||
|
"react": "^16.2.0",
|
||||||
|
"react-dom": "^16.2.0",
|
||||||
|
"react-redux": "^5.0.6",
|
||||||
|
"redux": "^3.7.2",
|
||||||
"request": "^2.83.0",
|
"request": "^2.83.0",
|
||||||
"request-promise": "^4.2.2",
|
"request-promise": "^4.2.2",
|
||||||
"sequelize": "^4.1.0",
|
"sequelize": "^4.1.0",
|
||||||
|
@ -68,8 +73,7 @@
|
||||||
"eslint-plugin-standard": "3.0.1",
|
"eslint-plugin-standard": "3.0.1",
|
||||||
"husky": "^0.13.4",
|
"husky": "^0.13.4",
|
||||||
"mocha": "^4.0.1",
|
"mocha": "^4.0.1",
|
||||||
"react": "^16.2.0",
|
"redux-devtools": "^3.4.1",
|
||||||
"react-dom": "^16.2.0",
|
|
||||||
"webpack": "^3.10.0"
|
"webpack": "^3.10.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
17
react/actions/index.js
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
// export action types
|
||||||
|
export const FILE_SELECTED = 'FILE_SELECTED';
|
||||||
|
export const FILE_CLEAR = 'FILE_CLEAR';
|
||||||
|
|
||||||
|
// export action creators
|
||||||
|
export function selectFile (file) {
|
||||||
|
return {
|
||||||
|
type : FILE_SELECTED,
|
||||||
|
payload: file,
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
export function clearFile () {
|
||||||
|
return {
|
||||||
|
type: FILE_CLEAR,
|
||||||
|
};
|
||||||
|
};
|
|
@ -1,6 +1,8 @@
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
|
// import PropTypes from 'prop-types';
|
||||||
|
|
||||||
const DETAILS = 'DETAILS';
|
import { selectFile } from '../actions';
|
||||||
|
import { connect } from 'react-redux';
|
||||||
|
|
||||||
class PublishDropzone extends React.Component {
|
class PublishDropzone extends React.Component {
|
||||||
constructor (props) {
|
constructor (props) {
|
||||||
|
@ -16,7 +18,6 @@ class PublishDropzone extends React.Component {
|
||||||
this.handleDragLeave = this.handleDragLeave.bind(this);
|
this.handleDragLeave = this.handleDragLeave.bind(this);
|
||||||
this.handleClick = this.handleClick.bind(this);
|
this.handleClick = this.handleClick.bind(this);
|
||||||
this.handleFileInput = this.handleFileInput.bind(this);
|
this.handleFileInput = this.handleFileInput.bind(this);
|
||||||
this.stageFile = this.stageFile.bind(this);
|
|
||||||
this.setClaimNameFromFileName = this.setClaimNameFromFileName.bind(this);
|
this.setClaimNameFromFileName = this.setClaimNameFromFileName.bind(this);
|
||||||
}
|
}
|
||||||
validateFile (file) {
|
validateFile (file) {
|
||||||
|
@ -73,7 +74,7 @@ class PublishDropzone extends React.Component {
|
||||||
}
|
}
|
||||||
// stage it so it will be ready when the publish button is clicked
|
// stage it so it will be ready when the publish button is clicked
|
||||||
this.setClaimNameFromFileName(droppedFile.name);
|
this.setClaimNameFromFileName(droppedFile.name);
|
||||||
this.stageFile(droppedFile);
|
this.props.onFileSelect(droppedFile);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -113,16 +114,9 @@ class PublishDropzone extends React.Component {
|
||||||
}
|
}
|
||||||
// stage it so it will be ready when the publish button is clicked
|
// stage it so it will be ready when the publish button is clicked
|
||||||
this.setClaimNameFromFileName(chosenFile.name);
|
this.setClaimNameFromFileName(chosenFile.name);
|
||||||
this.stageFile(chosenFile);
|
this.props.onFileSelect(chosenFile);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
stageFile (selectedFile) {
|
|
||||||
console.log('stageFileAndShowDetails', selectedFile);
|
|
||||||
// store the selected file for upload
|
|
||||||
this.props.updateUploaderState('file', selectedFile);
|
|
||||||
// show the publish form
|
|
||||||
this.props.updateUploaderState('showComponent', DETAILS);
|
|
||||||
}
|
|
||||||
setClaimNameFromFileName (fileName) {
|
setClaimNameFromFileName (fileName) {
|
||||||
console.log('setClaimNameFromFileName', fileName);
|
console.log('setClaimNameFromFileName', fileName);
|
||||||
const fileNameWithoutEnding = fileName.substring(0, fileName.lastIndexOf('.'));
|
const fileNameWithoutEnding = fileName.substring(0, fileName.lastIndexOf('.'));
|
||||||
|
@ -154,4 +148,18 @@ class PublishDropzone extends React.Component {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports = PublishDropzone;
|
const mapStateToProps = state => {
|
||||||
|
return {
|
||||||
|
file: state.file,
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
const mapDispatchToProps = dispatch => {
|
||||||
|
return {
|
||||||
|
onFileSelect: (file) => {
|
||||||
|
dispatch(selectFile(file));
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
export default connect(mapStateToProps, mapDispatchToProps)(PublishDropzone);
|
||||||
|
|
|
@ -7,6 +7,9 @@ import PublishThumbnailInput from './PublishThumbnailInput.jsx';
|
||||||
import PublishMetadataInputs from './PublishMetadataInputs.jsx';
|
import PublishMetadataInputs from './PublishMetadataInputs.jsx';
|
||||||
import AnonymousOrChannelSelect from './AnonymousOrChannelSelect.jsx';
|
import AnonymousOrChannelSelect from './AnonymousOrChannelSelect.jsx';
|
||||||
|
|
||||||
|
import { selectFile, clearFile } from '../actions';
|
||||||
|
import { connect } from 'react-redux';
|
||||||
|
|
||||||
class PublishForm extends React.Component {
|
class PublishForm extends React.Component {
|
||||||
constructor (props) {
|
constructor (props) {
|
||||||
super(props);
|
super(props);
|
||||||
|
@ -14,7 +17,7 @@ class PublishForm extends React.Component {
|
||||||
this.state = {
|
this.state = {
|
||||||
error : null,
|
error : null,
|
||||||
showMetadataInputs: false,
|
showMetadataInputs: false,
|
||||||
}
|
};
|
||||||
this.publish = this.publish.bind(this);
|
this.publish = this.publish.bind(this);
|
||||||
}
|
}
|
||||||
publish () {
|
publish () {
|
||||||
|
@ -80,7 +83,7 @@ class PublishForm extends React.Component {
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="row row--short align-content-center">
|
<div className="row row--short align-content-center">
|
||||||
<button className="button--cancel" onClick={this.props.clearUploaderState}>Cancel</button>
|
<button className="button--cancel" onClick={this.props.onFileClear}>Cancel</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="row row--short align-content-center">
|
<div className="row row--short align-content-center">
|
||||||
|
@ -94,4 +97,30 @@ class PublishForm extends React.Component {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports = PublishForm;
|
const mapStateToProps = state => {
|
||||||
|
return {
|
||||||
|
loggedInChannelName : state.loggedInChannelName,
|
||||||
|
loggedInChannelShortId: state.loggedInChannelShortId,
|
||||||
|
publishToChannel : state.publishToChannel,
|
||||||
|
file : state.file,
|
||||||
|
title : state.title,
|
||||||
|
claim : state.claim,
|
||||||
|
thumbnail : state.thumbnail,
|
||||||
|
description : state.description,
|
||||||
|
license : state.license,
|
||||||
|
nsfw : state.nsfw,
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
const mapDispatchToProps = dispatch => {
|
||||||
|
return {
|
||||||
|
onFileSelect: (file) => {
|
||||||
|
dispatch(selectFile(file));
|
||||||
|
},
|
||||||
|
onFileClear: () => {
|
||||||
|
dispatch(clearFile());
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
export default connect(mapStateToProps, mapDispatchToProps)(PublishForm);
|
||||||
|
|
|
@ -5,10 +5,10 @@ class MetadataInputs extends React.Component {
|
||||||
super(props);
|
super(props);
|
||||||
this.state = {
|
this.state = {
|
||||||
showInputs : false,
|
showInputs : false,
|
||||||
description: null,
|
|
||||||
};
|
};
|
||||||
this.toggleShowInputs = this.toggleShowInputs.bind(this);
|
this.toggleShowInputs = this.toggleShowInputs.bind(this);
|
||||||
this.handleInput = this.handleInput.bind(this);
|
this.handleInput = this.handleInput.bind(this);
|
||||||
|
this.handleSelection = this.handleSelection.bind(this);
|
||||||
}
|
}
|
||||||
toggleShowInputs () {
|
toggleShowInputs () {
|
||||||
if (this.state.showInputs) {
|
if (this.state.showInputs) {
|
||||||
|
@ -19,10 +19,16 @@ class MetadataInputs extends React.Component {
|
||||||
}
|
}
|
||||||
handleInput (event) {
|
handleInput (event) {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
const name = event.target.name;
|
const target = event.target;
|
||||||
const value = event.target.value;
|
const name = target.name;
|
||||||
|
const value = target.type === 'checkbox' ? target.checked : target.value;
|
||||||
this.props.updateUploaderState(name, value);
|
this.props.updateUploaderState(name, value);
|
||||||
}
|
}
|
||||||
|
handleSelection (event) {
|
||||||
|
const selectedOption = event.target.selectedOptions[0].value;
|
||||||
|
this.props.updateUploaderState('', value);
|
||||||
|
}
|
||||||
|
|
||||||
render () {
|
render () {
|
||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
|
@ -37,7 +43,7 @@ class MetadataInputs extends React.Component {
|
||||||
<div className="column column--3 column--med-10 align-content-top">
|
<div className="column column--3 column--med-10 align-content-top">
|
||||||
<label htmlFor="publish-license" className="label">Description:</label>
|
<label htmlFor="publish-license" className="label">Description:</label>
|
||||||
</div><div className="column column--7 column--sml-10">
|
</div><div className="column column--7 column--sml-10">
|
||||||
<textarea rows="1" id="publish-description" className="textarea textarea--primary textarea--full-width" name="description" placeholder="Optional description" onChange={this.handleInput}>{this.state.description}</textarea>
|
<textarea rows="1" id="publish-description" className="textarea textarea--primary textarea--full-width" name="description" placeholder="Optional description" value={this.props.description} onChange={this.handleInput} />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -45,7 +51,7 @@ class MetadataInputs extends React.Component {
|
||||||
<div className="column column--3 column--med-10">
|
<div className="column column--3 column--med-10">
|
||||||
<label htmlFor="publish-license" className="label">License:</label>
|
<label htmlFor="publish-license" className="label">License:</label>
|
||||||
</div><div className="column column--7 column--sml-10">
|
</div><div className="column column--7 column--sml-10">
|
||||||
<select type="text" id="publish-license" className="select select--primary">
|
<select type="text" name="license" id="publish-license" className="select select--primary" onSelect={this.handleSelection}>
|
||||||
<option value=" ">Unspecified</option>
|
<option value=" ">Unspecified</option>
|
||||||
<option value="Public Domain">Public Domain</option>
|
<option value="Public Domain">Public Domain</option>
|
||||||
<option value="Creative Commons">Creative Commons</option>
|
<option value="Creative Commons">Creative Commons</option>
|
||||||
|
@ -57,7 +63,7 @@ class MetadataInputs extends React.Component {
|
||||||
<div className="column column--3">
|
<div className="column column--3">
|
||||||
<label htmlFor="publish-nsfw" className="label">Mature:</label>
|
<label htmlFor="publish-nsfw" className="label">Mature:</label>
|
||||||
</div><div className="column column--7">
|
</div><div className="column column--7">
|
||||||
<input className="input-checkbox" type="checkbox" id="publish-nsfw" />
|
<input className="input-checkbox" type="checkbox" id="publish-nsfw" name="nsfw" checked={this.props.nsfw} onChange={this.handleInput} />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
@ -1,34 +1,14 @@
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import ReactDOM from 'react-dom';
|
import PublishDropzone from './PublishDropzone.jsx';
|
||||||
import PublishDropzone from './components/PublishDropzone.jsx';
|
import PublishForm from './PublishForm.jsx';
|
||||||
import PublishForm from './components/PublishForm.jsx';
|
import PublishStatus from './PublishStatus.jsx';
|
||||||
import PublishStatus from './components/PublishStatus.jsx';
|
import {connect} from 'react-redux';
|
||||||
|
|
||||||
const DROPZONE = 'DROPZONE';
|
|
||||||
const DETAILS = 'DETAILS';
|
|
||||||
const STATUS = 'STATUS';
|
|
||||||
const initialState = {
|
|
||||||
showComponent : DROPZONE, // DROPZONE, DETAILS, or PUBLISHING
|
|
||||||
loggedInChannelName : null,
|
|
||||||
loggedInChannelShortId: null,
|
|
||||||
publishToChannel : false,
|
|
||||||
error : null,
|
|
||||||
file : null,
|
|
||||||
title : '',
|
|
||||||
claim : '',
|
|
||||||
thumbnail : '',
|
|
||||||
description : '',
|
|
||||||
license : '',
|
|
||||||
nsfw : '',
|
|
||||||
};
|
|
||||||
|
|
||||||
class PublishTool extends React.Component {
|
class PublishTool extends React.Component {
|
||||||
constructor (props) {
|
constructor (props) {
|
||||||
super(props);
|
super(props);
|
||||||
this.state = initialState;
|
|
||||||
// bind class methods with `this`
|
// bind class methods with `this`
|
||||||
this.updateUploaderState = this.updateUploaderState.bind(this);
|
this.updateUploaderState = this.updateUploaderState.bind(this);
|
||||||
this.clearUploaderState = this.clearUploaderState.bind(this);
|
|
||||||
this.makeGetRequest = this.makeGetRequest.bind(this);
|
this.makeGetRequest = this.makeGetRequest.bind(this);
|
||||||
this.makePostRequest = this.makePostRequest.bind(this);
|
this.makePostRequest = this.makePostRequest.bind(this);
|
||||||
this.cleanseInput = this.cleanseInput.bind(this);
|
this.cleanseInput = this.cleanseInput.bind(this);
|
||||||
|
@ -46,9 +26,6 @@ class PublishTool extends React.Component {
|
||||||
console.log(`updateUploaderState ${name} ${value}`);
|
console.log(`updateUploaderState ${name} ${value}`);
|
||||||
this.setState({[name]: value});
|
this.setState({[name]: value});
|
||||||
}
|
}
|
||||||
clearUploaderState () {
|
|
||||||
this.setState(initialState);
|
|
||||||
}
|
|
||||||
makeGetRequest (url) {
|
makeGetRequest (url) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
let xhttp = new XMLHttpRequest();
|
let xhttp = new XMLHttpRequest();
|
||||||
|
@ -111,33 +88,22 @@ class PublishTool extends React.Component {
|
||||||
render () {
|
render () {
|
||||||
return (
|
return (
|
||||||
<div className="row row--tall flex-container--column">
|
<div className="row row--tall flex-container--column">
|
||||||
{ this.state.showComponent === DROPZONE &&
|
{ !this.props.file &&
|
||||||
<PublishDropzone
|
<PublishDropzone
|
||||||
updateUploaderState={this.updateUploaderState}
|
updateUploaderState={this.updateUploaderState}
|
||||||
cleanseInput={this.cleanseInput}
|
cleanseInput={this.cleanseInput}
|
||||||
/>
|
/>
|
||||||
}
|
}
|
||||||
{ this.state.showComponent === DETAILS &&
|
{ this.props.file &&
|
||||||
<PublishForm
|
<PublishForm
|
||||||
updateUploaderState={this.updateUploaderState}
|
updateUploaderState={this.updateUploaderState}
|
||||||
clearUploaderState={this.clearUploaderState}
|
clearUploaderState={this.clearUploaderState}
|
||||||
makeGetRequest={this.makeGetRequest}
|
makeGetRequest={this.makeGetRequest}
|
||||||
makePostRequest={this.makePostRequest}
|
makePostRequest={this.makePostRequest}
|
||||||
cleanseInput={this.cleanseInput}
|
cleanseInput={this.cleanseInput}
|
||||||
loggedInChannelName={this.state.loggedInChannelName}
|
|
||||||
loggedInChannelShortId={this.state.loggedInChannelShortId}
|
|
||||||
publishToChannel={this.state.publishToChannel}
|
|
||||||
error={this.state.error}
|
|
||||||
file={this.state.file}
|
|
||||||
title={this.state.title}
|
|
||||||
claim={this.state.claim}
|
|
||||||
thumbnail={this.state.thumbnail}
|
|
||||||
description={this.state.description}
|
|
||||||
license={this.state.license}
|
|
||||||
nsfw={this.state.nsfw}
|
|
||||||
/>
|
/>
|
||||||
}
|
}
|
||||||
{ this.state.showComponent === STATUS &&
|
{ this.props.publishStatus &&
|
||||||
<PublishStatus />
|
<PublishStatus />
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
|
@ -145,7 +111,10 @@ class PublishTool extends React.Component {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
ReactDOM.render(
|
const mapStateToProps = state => {
|
||||||
<PublishTool />,
|
return {
|
||||||
document.getElementById('react-uploader')
|
file: state.file,
|
||||||
);
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
export default connect(mapStateToProps, null)(PublishTool);
|
15
react/index.js
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
import React from 'react';
|
||||||
|
import ReactDOM from 'react-dom';
|
||||||
|
import { Provider } from 'react-redux';
|
||||||
|
import { createStore } from 'redux';
|
||||||
|
import Reducers from './reducers/index.js';
|
||||||
|
import PublishTool from './components/PublishTool.jsx';
|
||||||
|
|
||||||
|
let store = createStore(Reducers)
|
||||||
|
|
||||||
|
ReactDOM.render(
|
||||||
|
<Provider store={store}>
|
||||||
|
<PublishTool />
|
||||||
|
</Provider>,
|
||||||
|
document.getElementById('react-publish-tool')
|
||||||
|
)
|
36
react/reducers/index.js
Normal file
|
@ -0,0 +1,36 @@
|
||||||
![]()
`import * as`
![]() Some of these should possibly be renamed or refactored into separate files (or possibly can wait until next refactor/revision). Some of these should possibly be renamed or refactored into separate files (or possibly can wait until next refactor/revision).
|
|||||||
|
import {FILE_CLEAR, FILE_SELECTED} from '../actions';
|
||||||
![]()
`import * as`
![]() Some of these should possibly be renamed or refactored into separate files (or possibly can wait until next refactor/revision). Some of these should possibly be renamed or refactored into separate files (or possibly can wait until next refactor/revision).
|
|||||||
|
|
||||||
![]()
`import * as`
![]() Some of these should possibly be renamed or refactored into separate files (or possibly can wait until next refactor/revision). Some of these should possibly be renamed or refactored into separate files (or possibly can wait until next refactor/revision).
|
|||||||
|
const DROPZONE = 'DROPZONE';
|
||||||
![]()
`import * as`
![]() Some of these should possibly be renamed or refactored into separate files (or possibly can wait until next refactor/revision). Some of these should possibly be renamed or refactored into separate files (or possibly can wait until next refactor/revision).
|
|||||||
|
|
||||||
![]()
`import * as`
![]() Some of these should possibly be renamed or refactored into separate files (or possibly can wait until next refactor/revision). Some of these should possibly be renamed or refactored into separate files (or possibly can wait until next refactor/revision).
|
|||||||
|
const initialState = {
|
||||||
![]()
`import * as`
![]() Some of these should possibly be renamed or refactored into separate files (or possibly can wait until next refactor/revision). Some of these should possibly be renamed or refactored into separate files (or possibly can wait until next refactor/revision).
|
|||||||
|
showComponent : DROPZONE,
|
||||||
![]()
`import * as`
![]() Some of these should possibly be renamed or refactored into separate files (or possibly can wait until next refactor/revision). Some of these should possibly be renamed or refactored into separate files (or possibly can wait until next refactor/revision).
|
|||||||
|
loggedInChannelName : null,
|
||||||
![]()
`import * as`
![]() Some of these should possibly be renamed or refactored into separate files (or possibly can wait until next refactor/revision). Some of these should possibly be renamed or refactored into separate files (or possibly can wait until next refactor/revision).
|
|||||||
|
loggedInChannelShortId: null,
|
||||||
![]()
`import * as`
![]() Some of these should possibly be renamed or refactored into separate files (or possibly can wait until next refactor/revision). Some of these should possibly be renamed or refactored into separate files (or possibly can wait until next refactor/revision).
|
|||||||
|
publishToChannel : false,
|
||||||
![]()
`import * as`
![]() Some of these should possibly be renamed or refactored into separate files (or possibly can wait until next refactor/revision). Some of these should possibly be renamed or refactored into separate files (or possibly can wait until next refactor/revision).
|
|||||||
|
publishStatus : null,
|
||||||
![]()
`import * as`
![]() Some of these should possibly be renamed or refactored into separate files (or possibly can wait until next refactor/revision). Some of these should possibly be renamed or refactored into separate files (or possibly can wait until next refactor/revision).
|
|||||||
|
error : null,
|
||||||
![]()
`import * as`
![]() Some of these should possibly be renamed or refactored into separate files (or possibly can wait until next refactor/revision). Some of these should possibly be renamed or refactored into separate files (or possibly can wait until next refactor/revision).
|
|||||||
|
file : null,
|
||||||
![]()
`import * as`
![]() Some of these should possibly be renamed or refactored into separate files (or possibly can wait until next refactor/revision). Some of these should possibly be renamed or refactored into separate files (or possibly can wait until next refactor/revision).
|
|||||||
|
title : '',
|
||||||
![]()
`import * as`
![]() Some of these should possibly be renamed or refactored into separate files (or possibly can wait until next refactor/revision). Some of these should possibly be renamed or refactored into separate files (or possibly can wait until next refactor/revision).
|
|||||||
|
claim : '',
|
||||||
![]()
`import * as`
![]() Some of these should possibly be renamed or refactored into separate files (or possibly can wait until next refactor/revision). Some of these should possibly be renamed or refactored into separate files (or possibly can wait until next refactor/revision).
|
|||||||
|
thumbnail : '',
|
||||||
![]()
`import * as`
![]() Some of these should possibly be renamed or refactored into separate files (or possibly can wait until next refactor/revision). Some of these should possibly be renamed or refactored into separate files (or possibly can wait until next refactor/revision).
|
|||||||
|
description : '',
|
||||||
![]()
`import * as`
![]() Some of these should possibly be renamed or refactored into separate files (or possibly can wait until next refactor/revision). Some of these should possibly be renamed or refactored into separate files (or possibly can wait until next refactor/revision).
|
|||||||
|
license : '',
|
||||||
![]()
`import * as`
![]() Some of these should possibly be renamed or refactored into separate files (or possibly can wait until next refactor/revision). Some of these should possibly be renamed or refactored into separate files (or possibly can wait until next refactor/revision).
|
|||||||
|
nsfw : '',
|
||||||
![]()
`import * as`
![]() Some of these should possibly be renamed or refactored into separate files (or possibly can wait until next refactor/revision). Some of these should possibly be renamed or refactored into separate files (or possibly can wait until next refactor/revision).
|
|||||||
|
};
|
||||||
![]()
`import * as`
![]() Some of these should possibly be renamed or refactored into separate files (or possibly can wait until next refactor/revision). Some of these should possibly be renamed or refactored into separate files (or possibly can wait until next refactor/revision).
|
|||||||
|
|
||||||
![]()
`import * as`
![]() Some of these should possibly be renamed or refactored into separate files (or possibly can wait until next refactor/revision). Some of these should possibly be renamed or refactored into separate files (or possibly can wait until next refactor/revision).
|
|||||||
|
/*
|
||||||
![]()
`import * as`
![]() Some of these should possibly be renamed or refactored into separate files (or possibly can wait until next refactor/revision). Some of these should possibly be renamed or refactored into separate files (or possibly can wait until next refactor/revision).
|
|||||||
|
Reducers describe how the application's state changes in response to actions
|
||||||
![]()
`import * as`
![]() Some of these should possibly be renamed or refactored into separate files (or possibly can wait until next refactor/revision). Some of these should possibly be renamed or refactored into separate files (or possibly can wait until next refactor/revision).
|
|||||||
|
*/
|
||||||
![]()
`import * as`
![]() Some of these should possibly be renamed or refactored into separate files (or possibly can wait until next refactor/revision). Some of these should possibly be renamed or refactored into separate files (or possibly can wait until next refactor/revision).
|
|||||||
|
|
||||||
![]()
`import * as`
![]() Some of these should possibly be renamed or refactored into separate files (or possibly can wait until next refactor/revision). Some of these should possibly be renamed or refactored into separate files (or possibly can wait until next refactor/revision).
|
|||||||
|
export default function (state = initialState, action) {
|
||||||
![]()
`import * as`
![]() Some of these should possibly be renamed or refactored into separate files (or possibly can wait until next refactor/revision). Some of these should possibly be renamed or refactored into separate files (or possibly can wait until next refactor/revision).
|
|||||||
|
switch (action.type) {
|
||||||
![]()
`import * as`
![]() Some of these should possibly be renamed or refactored into separate files (or possibly can wait until next refactor/revision). Some of these should possibly be renamed or refactored into separate files (or possibly can wait until next refactor/revision).
|
|||||||
|
case FILE_SELECTED:
|
||||||
![]()
`import * as`
![]() Some of these should possibly be renamed or refactored into separate files (or possibly can wait until next refactor/revision). Some of these should possibly be renamed or refactored into separate files (or possibly can wait until next refactor/revision).
|
|||||||
|
return Object.assign({}, state, {
|
||||||
![]()
`import * as`
![]() Some of these should possibly be renamed or refactored into separate files (or possibly can wait until next refactor/revision). Some of these should possibly be renamed or refactored into separate files (or possibly can wait until next refactor/revision).
|
|||||||
|
file: action.payload,
|
||||||
![]()
`import * as`
![]() Some of these should possibly be renamed or refactored into separate files (or possibly can wait until next refactor/revision). Some of these should possibly be renamed or refactored into separate files (or possibly can wait until next refactor/revision).
|
|||||||
|
});
|
||||||
![]()
`import * as`
![]() Some of these should possibly be renamed or refactored into separate files (or possibly can wait until next refactor/revision). Some of these should possibly be renamed or refactored into separate files (or possibly can wait until next refactor/revision).
|
|||||||
|
case FILE_CLEAR:
|
||||||
![]()
`import * as`
![]() Some of these should possibly be renamed or refactored into separate files (or possibly can wait until next refactor/revision). Some of these should possibly be renamed or refactored into separate files (or possibly can wait until next refactor/revision).
|
|||||||
|
return initialState;
|
||||||
![]()
`import * as`
![]() Some of these should possibly be renamed or refactored into separate files (or possibly can wait until next refactor/revision). Some of these should possibly be renamed or refactored into separate files (or possibly can wait until next refactor/revision).
|
|||||||
|
default:
|
||||||
![]()
`import * as`
![]() Some of these should possibly be renamed or refactored into separate files (or possibly can wait until next refactor/revision). Some of these should possibly be renamed or refactored into separate files (or possibly can wait until next refactor/revision).
|
|||||||
|
return state;
|
||||||
![]()
`import * as`
![]() Some of these should possibly be renamed or refactored into separate files (or possibly can wait until next refactor/revision). Some of these should possibly be renamed or refactored into separate files (or possibly can wait until next refactor/revision).
|
|||||||
|
}
|
||||||
![]()
`import * as`
![]() Some of these should possibly be renamed or refactored into separate files (or possibly can wait until next refactor/revision). Some of these should possibly be renamed or refactored into separate files (or possibly can wait until next refactor/revision).
|
|||||||
|
}
|
||||||
![]()
`import * as`
![]() Some of these should possibly be renamed or refactored into separate files (or possibly can wait until next refactor/revision). Some of these should possibly be renamed or refactored into separate files (or possibly can wait until next refactor/revision).
|
|
@ -1,5 +1,5 @@
|
||||||
![]() This doesn't seem exactly on theme. Maybe ask nizuka? This doesn't seem exactly on theme. Maybe ask nizuka?
![]() This doesn't seem exactly on theme. Maybe ask nizuka? This doesn't seem exactly on theme. Maybe ask nizuka?
|
|||||||
<div class="row row--tall flex-container--column">
|
<div class="row row--tall flex-container--column">
|
||||||
<div id="react-uploader" class="row row--padded row--tall flex-container--column">
|
<div id="react-publish-tool" class="row row--padded row--tall flex-container--column">
|
||||||
![]() This doesn't seem exactly on theme. Maybe ask nizuka? This doesn't seem exactly on theme. Maybe ask nizuka?
![]() This doesn't seem exactly on theme. Maybe ask nizuka? This doesn't seem exactly on theme. Maybe ask nizuka?
|
|||||||
<div class="row row--padded row--tall flex-container--column flex-container--center-center">
|
<div class="row row--padded row--tall flex-container--column flex-container--center-center">
|
||||||
<img src="/assets/img/loading.gif" alt="loading">
|
<img src="/assets/img/loading.gif" alt="loading">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
![]() This doesn't seem exactly on theme. Maybe ask nizuka? This doesn't seem exactly on theme. Maybe ask nizuka?
![]() This doesn't seem exactly on theme. Maybe ask nizuka? This doesn't seem exactly on theme. Maybe ask nizuka?
|
|
@ -1,7 +1,7 @@
|
||||||
const path = require('path');
|
const path = require('path');
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
entry : './react/PublishTool.js',
|
entry : './react/index.js',
|
||||||
output: {
|
output: {
|
||||||
path : path.join(__dirname, '/public/bundle/'),
|
path : path.join(__dirname, '/public/bundle/'),
|
||||||
filename: 'bundle.js',
|
filename: 'bundle.js',
|
||||||
|
|
import * as
Some of these should possibly be renamed or refactored into separate files (or possibly can wait until next refactor/revision).