diff --git a/app/actions/index.js b/app/actions/index.js
index 7668e75..0b3f6f1 100644
--- a/app/actions/index.js
+++ b/app/actions/index.js
@@ -14,3 +14,14 @@ export function login(token, callback) {
{ token, callback }
);
}
+
+export const GET_PROJECTS = makeAsyncActionSet('GET_PROJECTS');
+export function getProjects(callback) {
+ return buildAsyncAction(
+ GET_PROJECTS,
+ endpoints.get('ALL_PROJECTS'),
+ methods.GET,
+ {},
+ { callback }
+ );
+}
diff --git a/app/components/projects/ProjectList.js b/app/components/projects/ProjectList.js
index 87842f4..19820e3 100644
--- a/app/components/projects/ProjectList.js
+++ b/app/components/projects/ProjectList.js
@@ -1,7 +1,8 @@
import React from 'react-native';
import GiftedListView from 'react-native-gifted-listview';
import ProjectItem from './ProjectItem';
-import { getProjects, getUserDetails } from '../../api/CircleCI';
+import { connect } from 'react-redux';
+import { getProjects } from '../../actions';
import loaderHandler from 'react-native-busy-indicator/LoaderHandler';
const {
@@ -20,23 +21,13 @@ const styles = StyleSheet.create({
},
});
-export default class ProjectList extends React.Component {
+export class ProjectList extends React.Component {
constructor(props) {
super(props);
- this.state = {
- userDetails: false,
- };
this.renderRow = this.renderRow.bind(this);
this._fetch = this._fetch.bind(this);
}
- componentDidMount() {
- getUserDetails().then(function(userDetails) {
- this.setState({ userDetails });
- }.bind(this));
- }
-
-
_sortByDate(projects) {
return projects.sort(function (a, b) {
const keyA = a.username + '/' + a.reponame;
@@ -48,21 +39,24 @@ export default class ProjectList extends React.Component {
}
renderRow(project) {
- return ;
+ return ;
}
_fetch(page, callback, options) {
- getProjects().then((projects) => {
- callback(this._sortByDate(projects));
+ const actionCallback = function (data) {
+ this._sortByDate(data);
+ callback(data);
loaderHandler.hideLoader();
- });
+ }.bind(this);
+ this.props.getProjects(actionCallback);
}
render() {
- if (!this.state.userDetails) {
- return ;
+ if (!this.props.token) {
+ return null; // If there's no token, we can't do anything, so wait
}
+ console.log('HAS TOKEN', this.props.userDetails.token);
return (
next => action => {
action.meta.callback &&
action.type.endsWith('SUCCESS') &&
typeof action.meta.callback === 'function') {
- action.meta.callback();
+ action.meta.callback(action.payload);
}
return next(action);
};
diff --git a/app/reducers/allProjects.js b/app/reducers/allProjects.js
new file mode 100644
index 0000000..98e0386
--- /dev/null
+++ b/app/reducers/allProjects.js
@@ -0,0 +1,10 @@
+import * as actions from '../actions';
+import { Map } from 'immutable';
+
+export default function allProjects(state = Map(), action) {
+ console.log(action.type);
+ if (action.type === actions.GET_PROJECTS.SUCCESS) {
+ return Map(action.payload);
+ }
+ return state;
+};
diff --git a/app/reducers/index.js b/app/reducers/index.js
index 79943c3..37f684d 100644
--- a/app/reducers/index.js
+++ b/app/reducers/index.js
@@ -2,8 +2,10 @@ import { combineReducers } from 'redux';
import * as storage from 'redux-storage';
import user from './user';
+import allProjects from './allProjects';
export default storage.reducer(combineReducers({
- user
+ user,
+ allProjects
}));