started creating spreadsheet component

This commit is contained in:
Senad Uka
2014-12-22 10:58:42 +01:00
parent edafa92a3e
commit c2224430ab
9 changed files with 160 additions and 16 deletions

1
.gitignore vendored
View File

@@ -1,2 +1,3 @@
node_modules
build
.idea

View File

@@ -0,0 +1,17 @@
/**
* Created by senadu on 12/22/14.
*/
var CsvEditorDispatcher = require('../dispatcher/CsvEditorDispatcher');
var CsvEditorConstants = require('../constants/CsvEditorConstants');
var ActionTypes = CsvEditorConstants.ActionTypes;
module.exports = {
chooseFile: function(fileInput) {
CsvEditorDispatcher.handleViewAction({
type: ActionTypes.CHOOSE_FILE,
target: fileInput
})
}
};

View File

@@ -0,0 +1,24 @@
/** @jsx React.DOM */
var React = require('react');
var ChooseFile = require('./ChooseFile.react');
var SpreadSheet = require('./SpreadSheet.react');
var Application = React.createClass({
render: function () {
return (
<div>
<div className="menu">
<ChooseFile />
</div>
<div className="spreadsheet">
<SpreadSheet />
</div>
</div>
);
}
});
module.exports = Application;

View File

@@ -1,12 +1,23 @@
/** @jsx React.DOM */
var React = require('react');
var ChooseFile = React.createClass({
render: function() {
return (
<button className="red-button">ChooseFile</button>
);
}
getInitialState: function () {
return {fileName: ""};
},
render: function () {
if (this.state.fileName === "") {
return (<input type="file" accept=".csv" onChange={this._onChange}/>);
} else
return (<div>Editing file.</div>);
},
_onChange: function(e) {
this.setState({fileName: e.target.value})
}
});
module.exports = ChooseFile;

View File

@@ -1,16 +1,38 @@
/** @jsx React.DOM */
var React = require('react');
var ChooseFile = require('./ChooseFile.react');
var LocalStore = require('../stores/LocalStore');
var getStateFromStore = function () {
return {
columns: LocalStore.getColumns(),
data: LocalStore.getDataForColumns()
}
};
var SpreadSheet = React.createClass({
render: function() {
return (
<div className="spreadsheet">
<ChooseFile />
</div>
);
}
getInitialState: function() {
return getStateFromStore();
},
render: function () {
var columns = this.state.columns.map(function (column) {
return(<th>{column}</th>);
});
return (
<table className="spreadsheet">
<tr>
{columns}
</tr>
</table>
);
}
});

View File

@@ -3,12 +3,16 @@ var keyMirror = require('keymirror');
module.exports = {
ActionTypes: keyMirror({
CREATE_MESSAGE: null
CHOOSE_FILE: null
}),
PayloadSources: keyMirror({
BACKEND_ACTION: null,
VIEW_ACTION: null
}),
EventTypes: keyMirror({
FILE_CHOSEN: null
})
};

View File

@@ -1,5 +1,8 @@
var Constants = require('../constants/CsvEditorConstants');
var Dispatcher = require('flux').Dispatcher;
var assign = require('object-assign');
var CsvEditorDispatcher = assign(new Dispatcher(), {

View File

@@ -1,4 +1,4 @@
/** @jsx React.DOM */
var React = require('react');
var SpreadSheet = require('./components/SpreadSheet.react');
React.render(<SpreadSheet/>, document.body);
var Application = require('./components/Application.react');
React.render(<Application/>, document.body);

62
app/stores/LocalStore.js Normal file
View File

@@ -0,0 +1,62 @@
/**
* Created by senadu on 12/22/14.
*/
var CsvEditorDispatcher = require('../dispatcher/CsvEditorDispatcher');
var EventEmitter = require('events').EventEmitter;
var CsvEditorConstants = require('../constants/CsvEditorConstants');
var assign = require('object-assign');
var ActionTypes = CsvEditorConstants.ActionTypes;
var EventTypes = CsvEditorConstants.EventTypes;
var LocalStore = assign({}, EventEmitter.prototype, {
emitFileLoadedEvent: function() {
this.emit(EventTypes.FILE_CHOSEN);
},
/**
* @param {function} callback
*/
addFileLoadedListener: function(callback) {
this.on(EventTypes.FILE_CHOSEN, callback);
},
removeFileLoadedListener: function(callback) {
this.removeListener(EventTypes.FILE_CHOSEN, callback);
},
getColumns: function() {
return ["First", "Second", "Third"];
},
getDataForColumns: function() {
return {
"First": [1,2,3,4,5],
"Second": [1.1,2.2,3.3,4.4,5.5],
"Third": ["Hamo", "Suljo","Aha", "Maha", "Vaha"]
}
}
});
LocalStore.dispatchToken = CsvEditorDispatcher.register(function(payload) {
var action = payload.action;
switch(action.type) {
case ActionTypes.FILE_CHOSEN:
LocalStore.emitFileLoadedEvent();
break;
default:
// do nothing
}
});
module.exports = LocalStore;