diff --git a/src/components/App/App.css b/src/components/App/App.css
index 4931613..f4e9e70 100755
--- a/src/components/App/App.css
+++ b/src/components/App/App.css
@@ -1,3 +1 @@
-.App {
- text-align: center;
-}
+/* .App {} */
diff --git a/src/components/App/App.tsx b/src/components/App/App.tsx
index 02257aa..a87de9b 100755
--- a/src/components/App/App.tsx
+++ b/src/components/App/App.tsx
@@ -1,18 +1,25 @@
import React, { PureComponent } from 'react';
import { WorkloadListContainer } from '../WorkloadList';
+import { WorkloadFormContainer } from '../WorkloadForm';
import './App.css';
class App extends PureComponent {
render() {
return (
-
-
-
+
+
CloudWork
+
+
+
+
-
- {/*
*/}
+
+
+
+
Workloads
+
);
diff --git a/src/components/WorkloadForm/WorkloadForm.tsx b/src/components/WorkloadForm/WorkloadForm.tsx
new file mode 100644
index 0000000..f506689
--- /dev/null
+++ b/src/components/WorkloadForm/WorkloadForm.tsx
@@ -0,0 +1,71 @@
+import React from 'react';
+import { Dispatch } from 'redux';
+import { connect } from 'react-redux';
+import { submit } from '../../state/workloads/actions';
+
+
+interface WorkloadFormDispatchProps {
+ submitWorkload: (complexity: number) => void
+}
+
+interface WorkloadFormProps extends
+ WorkloadFormDispatchProps {}
+
+interface WorkloadFormState {
+ complexity: number;
+}
+
+class WorkloadForm extends React.PureComponent
{
+ defaultState = {
+ complexity: 5,
+ }
+
+ state = this.defaultState;
+
+ handleSubmit = (e: React.MouseEvent) => {
+ this.props.submitWorkload(this.state.complexity);
+ this.setState(this.defaultState);
+ e.preventDefault();
+ }
+
+ render() {
+ return (
+
+ );
+ }
+}
+
+
+const mapDispatchToProps = (dispatch: Dispatch): WorkloadFormDispatchProps => ({
+ submitWorkload: (complexity: number) => dispatch(submit({ complexity })),
+});
+
+const WorkloadFormContainer = connect(null, mapDispatchToProps)(WorkloadForm);
+
+
+export {
+ WorkloadForm,
+ WorkloadFormContainer,
+}
+
+export default WorkloadForm;
\ No newline at end of file
diff --git a/src/components/WorkloadForm/index.ts b/src/components/WorkloadForm/index.ts
new file mode 100644
index 0000000..34ece6c
--- /dev/null
+++ b/src/components/WorkloadForm/index.ts
@@ -0,0 +1,2 @@
+export { default } from './WorkloadForm';
+export * from './WorkloadForm';
diff --git a/src/components/WorkloadItem/WorkloadItem.css b/src/components/WorkloadItem/WorkloadItem.css
deleted file mode 100644
index 3602dfb..0000000
--- a/src/components/WorkloadItem/WorkloadItem.css
+++ /dev/null
@@ -1,3 +0,0 @@
-.WorkloadItem {
- border: 2px solid var(--wf-blue);
-}
diff --git a/src/index.tsx b/src/index.tsx
index 68fa9dc..47bd841 100755
--- a/src/index.tsx
+++ b/src/index.tsx
@@ -1,21 +1,27 @@
import React from 'react';
import ReactDOM from 'react-dom';
-import { createStore, applyMiddleware } from 'redux';
+import { createStore, applyMiddleware, compose } from 'redux';
import { Provider } from 'react-redux';
import { createEpicMiddleware } from 'redux-observable';
+import moment from 'moment';
-import { reducers, epics, Action, State } from './state';
+import { reducer, epics, Action, State } from './state';
import * as WorkloadActions from './state/workloads/actions';
import './index.css';
import App from './components/App';
-const epicMiddleware = createEpicMiddleware();
-const store = createStore(reducers, applyMiddleware(epicMiddleware));
+// @ts-ignore: use Redux devtools if installed in browser
+const composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;
+const epicMiddleware = createEpicMiddleware();
+const store = createStore(reducer, composeEnhancers(applyMiddleware(epicMiddleware)));
epicMiddleware.run(epics);
-store.dispatch(WorkloadActions.submit({ complexity: 100 }));
-store.dispatch(WorkloadActions.created({ id: 0, complexity: 100, completeDate: new Date() }));
+
+// demo actions
+store.dispatch(WorkloadActions.submit({ complexity: 10 }));
+store.dispatch(WorkloadActions.created({ id: 0, complexity: 10, completeDate: moment().add(10, 'second').toDate() }));
+store.dispatch(WorkloadActions.created({ id: 1, complexity: 10, completeDate: moment().add(18, 'second').toDate() }));
/*
diff --git a/src/state/index.ts b/src/state/index.ts
index 957be3f..4982eb3 100644
--- a/src/state/index.ts
+++ b/src/state/index.ts
@@ -1,3 +1,3 @@
-export * from './reducers';
+export * from './reducer';
export * from './actions';
export * from './epics';
\ No newline at end of file
diff --git a/src/state/reducers.ts b/src/state/reducer.ts
similarity index 82%
rename from src/state/reducers.ts
rename to src/state/reducer.ts
index 9a44e48..e77ee0a 100644
--- a/src/state/reducers.ts
+++ b/src/state/reducer.ts
@@ -12,6 +12,6 @@ export interface State {
workloads: WorkloadsState;
}
-export const reducers = combineReducers({
+export const reducer = combineReducers({
workloads: workloadReducer,
});
diff --git a/src/state/workloads/epics.ts b/src/state/workloads/epics.ts
index 11a69e3..b99cf63 100644
--- a/src/state/workloads/epics.ts
+++ b/src/state/workloads/epics.ts
@@ -2,7 +2,7 @@ import { combineEpics, Epic, ofType } from 'redux-observable';
import { map, tap, ignoreElements } from 'rxjs/operators';
import { Action } from '../actions';
-import { State } from '../reducers';
+import { State } from '../reducer';
type AppEpic = Epic;
diff --git a/src/state/workloads/index.ts b/src/state/workloads/index.ts
index c758b74..6e978ef 100644
--- a/src/state/workloads/index.ts
+++ b/src/state/workloads/index.ts
@@ -1,5 +1,5 @@
export * from './types';
export * from './actions';
-export * from './reducers';
+export * from './reducer';
export * from './epics';
export * from './services';
diff --git a/src/state/workloads/reducers.ts b/src/state/workloads/reducer.ts
similarity index 94%
rename from src/state/workloads/reducers.ts
rename to src/state/workloads/reducer.ts
index fd6c02a..81daf04 100644
--- a/src/state/workloads/reducers.ts
+++ b/src/state/workloads/reducer.ts
@@ -19,6 +19,7 @@ export const reducer = (state: State = initialState, action: Action): State => {
switch (action.type) {
case 'WORKLOAD_CREATED':
return {
+ ...state,
[action.payload.id]: {
id: action.payload.id,
complexity: action.payload.complexity,
@@ -29,6 +30,7 @@ export const reducer = (state: State = initialState, action: Action): State => {
case 'WORKLOAD_CANCEL':
return {
+ ...state,
[action.payload.id]: {
...state[action.payload.id],
status: 'CANCELED',
@@ -37,6 +39,7 @@ export const reducer = (state: State = initialState, action: Action): State => {
case 'WORKLOAD_UPDATE_STATUS':
return {
+ ...state,
[action.payload.id]: {
...state[action.payload.id],
status: action.payload.status,