diff --git a/.babelrc b/.babelrc
new file mode 100644
index 000000000..f064025a2
--- /dev/null
+++ b/.babelrc
@@ -0,0 +1,7 @@
+{
+ "presets": [
+ "es2015",
+ "react",
+ "stage-0"
+ ]
+}
diff --git a/.eslintrc b/.eslintrc
new file mode 100644
index 000000000..da79aafb1
--- /dev/null
+++ b/.eslintrc
@@ -0,0 +1,34 @@
+rules:
+ indent:
+ - 2
+ - tab
+ quotes:
+ - 2
+ - single
+ linebreak-style:
+ - 2
+ - unix
+ semi:
+ - 2
+ - never
+ curly:
+ - 2
+ - multi-or-nest
+ space-before-blocks: 2
+ no-console: 1
+ react/prop-types: 0
+ react/display-name: 0
+
+parser: babel-eslint
+
+env:
+ browser: true
+ commonjs: true
+extends:
+ - eslint:recommended
+ - plugin:react/recommended
+plugins:
+ - react
+parserOptions:
+ ecmaFeatures:
+jsx: true
diff --git a/.gitignore b/.gitignore
index 0588e6ced..1f829970b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,2 @@
.tags*
+node_modules/
diff --git a/DevTools.js b/DevTools.js
new file mode 100644
index 000000000..81ada61ed
--- /dev/null
+++ b/DevTools.js
@@ -0,0 +1,24 @@
+import React from 'react'
+
+// Exported from redux-devtools
+import { createDevTools } from 'redux-devtools'
+
+// Monitors are separate packages, and you can make a custom one
+import LogMonitor from 'redux-devtools-log-monitor'
+import DockMonitor from 'redux-devtools-dock-monitor'
+
+// createDevTools takes a monitor and produces a DevTools component
+const DevTools = createDevTools(
+ // Monitors are individually adjustable with props.
+ // Consult their repositories to learn about those props.
+ // Here, we put LogMonitor inside a DockMonitor.
+ // Note: DockMonitor is visible by default.
+
+
+
+)
+
+export default DevTools
diff --git a/actions.js b/actions.js
new file mode 100644
index 000000000..74949ba98
--- /dev/null
+++ b/actions.js
@@ -0,0 +1,5 @@
+export const SELECT_TAG = 'SELECT_TAG'
+
+export function selectTag(tagName, tagValue) {
+ return {type: SELECT_TAG, tagName, tagValue}
+}
diff --git a/containers/App.css b/containers/App.css
new file mode 100644
index 000000000..25fa51c5a
--- /dev/null
+++ b/containers/App.css
@@ -0,0 +1,2 @@
+body {
+}
diff --git a/containers/App.dev.js b/containers/App.dev.js
new file mode 100644
index 000000000..9f901ec09
--- /dev/null
+++ b/containers/App.dev.js
@@ -0,0 +1,21 @@
+import React, {Component} from 'react'
+
+import Explorer from './Explorer'
+import { Provider } from 'react-redux'
+import DevTools from '../DevTools'
+
+import './App.css'
+
+export default class App extends Component {
+ render() {
+ const { store } = this.props
+ return (
+
+
+
+
+
+
+ )
+ }
+}
diff --git a/containers/App.js b/containers/App.js
new file mode 100644
index 000000000..31b7445de
--- /dev/null
+++ b/containers/App.js
@@ -0,0 +1,4 @@
+if (process.env.NODE_ENV === 'production')
+ module.exports = require('./App.prod')
+else
+ module.exports = require('./App.dev')
diff --git a/containers/App.prod.js b/containers/App.prod.js
new file mode 100644
index 000000000..7b1894fe6
--- /dev/null
+++ b/containers/App.prod.js
@@ -0,0 +1,17 @@
+import React, {Component} from 'react'
+
+import Explorer from './Explorer'
+import { Provider } from 'react-redux'
+
+import './App.css'
+
+export default class App extends Component {
+ render() {
+ const { store } = this.props
+ return (
+
+
+
+ )
+ }
+}
diff --git a/containers/Explorer.js b/containers/Explorer.js
new file mode 100644
index 000000000..69309ac38
--- /dev/null
+++ b/containers/Explorer.js
@@ -0,0 +1,52 @@
+import React from 'react'
+import parameters from '../load-parameters'
+import deepAssign from 'deep-assign'
+
+let
+ groupedByVariableName = parameters
+ .filter(p => p && p.variable)
+ .reduce((acc, p) => {
+ let variableName = p.variable
+ if (acc[variableName])
+ acc[variableName].push(p)
+ else
+ acc[variableName] = [p]
+ return acc
+ }, {}),
+
+ conflictingTags = (tags1, tags2) =>
+ Object.keys(tags1).reduce((conflicts, k) => {
+ if (typeof tags2[k] != 'undefined' && tags2[k] !== tags1[k])
+ conflicts.push(k)
+ return conflicts
+ }, []),
+
+ groupedMergedVariables =
+ Object.keys(groupedByVariableName)
+ .reduce((list, name) => {
+ let items = groupedByVariableName[name]
+ /* Les items sont des fragments de variables.
+ Les premiers fragments vont être fusionnés dans les suivants,
+ sauf s'il introduit un écrasement d'un tag */
+ let variableList = items.slice(1).reduce((mergedItems, item) => {
+ let mergedItem = mergedItems.reduce((final, itemBefore) => {
+ let oups = conflictingTags(itemBefore.tags, item.tags)
+ //console.log('conflicts for ', itemBefore.tags, item.tags)
+ return oups.length ? item : deepAssign({}, item, itemBefore)
+ },
+ item)
+ mergedItems.push(mergedItem)
+ return mergedItems
+ },
+ [items[0]])
+ return [...variableList, ...list]
+ }, [])
+ console.log('groupedMergedVariables', groupedMergedVariables)
+
+
+
+export default class Explorer extends React.Component {
+ render() {
+ return
{JSON.stringify(groupedMergedVariables['agff'], null, 2)}
+ }
+}
diff --git a/cotisations/afaire.CRDS.yaml b/cotisations/afaire.CRDS.yaml
deleted file mode 100644
index e69de29bb..000000000
diff --git a/cotisations/afaire.CSG.yaml b/cotisations/afaire.CSG.yaml
deleted file mode 100644
index e69de29bb..000000000
diff --git a/cotisations/afaire.gmp.yaml b/cotisations/afaire.gmp.yaml
deleted file mode 100644
index c672200a2..000000000
--- a/cotisations/afaire.gmp.yaml
+++ /dev/null
@@ -1,4 +0,0 @@
-# Cotisation non triviale.
-# C'est pas juste ça ?
-si < PSS -> cotisation forfaitaire GMP
-si > PSS alors le mec va payer une cotisation AGIRC, et la GMP sera le complément pour arriver à un montant total = cotisation forfaitaire GMP
diff --git a/entry.js b/entry.js
new file mode 100644
index 000000000..36cca79a0
--- /dev/null
+++ b/entry.js
@@ -0,0 +1,47 @@
+import React from 'react'
+import { render } from 'react-dom'
+import { compose, createStore, applyMiddleware } from 'redux'
+import App from './containers/App'
+import reducers from './reducers'
+import DevTools from './DevTools'
+import { AppContainer } from 'react-hot-loader'
+import createSagaMiddleware from 'redux-saga'
+import rootSaga from './sagas'
+
+const sagaMiddleware = createSagaMiddleware()
+
+const createFinalStore = compose(
+ // Enables your middleware:
+ applyMiddleware(sagaMiddleware), // any Redux middleware, e.g. redux-thunk
+ // Provides support for DevTools:
+ DevTools.instrument()
+)(createStore)
+
+
+const store = createFinalStore(reducers)
+sagaMiddleware.run(rootSaga)
+
+let anchor = document.querySelector('#js')
+
+render(
+
+
+ ,
+ anchor
+)
+
+if (module.hot) {
+ module.hot.accept('./containers/App', () => {
+ // If you use Webpack 2 in ES modules mode, you can
+ // use here rather than require() a .
+ const NextApp = require('./containers/App').default
+ render(
+
+
+ ,
+ anchor
+ )
+ })
+}
+
+export {anchor}
diff --git a/index.html b/index.html
new file mode 100644
index 000000000..687b8fb8e
--- /dev/null
+++ b/index.html
@@ -0,0 +1,14 @@
+
+
+
+
+
+ prel2
+
+
+
+
+ lOl
+
+
+
diff --git a/load-parameters.js b/load-parameters.js
new file mode 100644
index 000000000..2133fb1fa
--- /dev/null
+++ b/load-parameters.js
@@ -0,0 +1,6 @@
+/* Load all yaml files in a dir */
+let requireContext = require.context('./parameters/cotisations', false, /(agirc|arrco|agff).yaml$/)
+export default requireContext.keys()
+ .map( requireContext )
+ //flatten
+ .reduce((acc, next) => acc.concat(next), [])
diff --git a/package.json b/package.json
new file mode 100644
index 000000000..018f122cc
--- /dev/null
+++ b/package.json
@@ -0,0 +1,53 @@
+{
+ "name": "prel2",
+ "version": "0.0.1",
+ "license": "AGPL-3.0",
+ "repository": {
+ "type": "git",
+ "url": "git@github.com:laem/prel2.git"
+ },
+ "description": "Expérimentation sur les prélèvements sociaux en code",
+ "engines": {
+ "node": ">=6.2.0"
+ },
+ "dependencies": {
+ "babel-runtime": "^6.6.1",
+ "classnames": "^2.2.1",
+ "deep-assign": "^2.0.0",
+ "react": "^15.0.1",
+ "react-dom": "^15.0.1",
+ "react-hot-loader": "3.0.0-beta.1",
+ "react-redux": "^4.4.5",
+ "redux": "^3.5.2",
+ "redux-saga": "^0.10.5",
+ "whatwg-fetch": "^1.0.0"
+ },
+ "devDependencies": {
+ "autoprefixer": "^6.3.3",
+ "babel-core": "^6.7.4",
+ "babel-eslint": "^6.0.0-beta.6",
+ "babel-loader": "^6.2.4",
+ "babel-polyfill": "^6.9.1",
+ "babel-preset-es2015": "^6.6.0",
+ "babel-preset-react": "^6.5.0",
+ "babel-preset-stage-0": "^6.5.0",
+ "core-js": "^2.2.0",
+ "css-loader": "^0.23.1",
+ "eslint": "^2.3.0",
+ "eslint-plugin-react": "^5.1.1",
+ "express": "^4.13.3",
+ "file-loader": "^0.8.5",
+ "html-loader": "^0.4.2",
+ "img-loader": "^1.2.2",
+ "json-loader": "^0.5.4",
+ "postcss-loader": "^0.8.0",
+ "redux-devtools": "^3.2.0",
+ "redux-devtools-dock-monitor": "^1.1.1",
+ "redux-devtools-log-monitor": "^1.0.9",
+ "style-loader": "^0.13.0",
+ "url-loader": "^0.5.7",
+ "webpack": "^1.12.14",
+ "webpack-dev-server": "^1.14.1",
+ "yaml-loader": "^0.2.0"
+ }
+}
diff --git a/cotisations/_cotisations.yaml b/parameters/cotisations/_cotisations.yaml
similarity index 66%
rename from cotisations/_cotisations.yaml
rename to parameters/cotisations/_cotisations.yaml
index a9e1f26fe..d9c32eb4d 100644
--- a/cotisations/_cotisations.yaml
+++ b/parameters/cotisations/_cotisations.yaml
@@ -1,7 +1,7 @@
# Les tags communs à toutes les variables de ce répertoire sont renseignés
# dans ce fichier du même nom,
# pour éviter de polluer les déclarations de variables.
-
-domaine: prélèvements sociaux
-revenus: salaires
-type: cotisation sociale
+-
+ domaine: prélèvements sociaux
+ revenus: salaires
+ type: cotisation sociale
diff --git a/parameters/cotisations/afaire.CRDS.yaml b/parameters/cotisations/afaire.CRDS.yaml
new file mode 100644
index 000000000..792d60054
--- /dev/null
+++ b/parameters/cotisations/afaire.CRDS.yaml
@@ -0,0 +1 @@
+#
diff --git a/parameters/cotisations/afaire.CSG.yaml b/parameters/cotisations/afaire.CSG.yaml
new file mode 100644
index 000000000..792d60054
--- /dev/null
+++ b/parameters/cotisations/afaire.CSG.yaml
@@ -0,0 +1 @@
+#
diff --git a/parameters/cotisations/afaire.gmp.yaml b/parameters/cotisations/afaire.gmp.yaml
new file mode 100644
index 000000000..5863ea2df
--- /dev/null
+++ b/parameters/cotisations/afaire.gmp.yaml
@@ -0,0 +1,4 @@
+# Cotisation non triviale.
+# C'est pas juste ça ?
+#si < PSS -> cotisation forfaitaire GMP
+#si > PSS alors le mec va payer une cotisation AGIRC, et la GMP sera le complément pour arriver à un montant total = cotisation #forfaitaire GMP
diff --git a/cotisations/agff.yaml b/parameters/cotisations/agff.yaml
similarity index 91%
rename from cotisations/agff.yaml
rename to parameters/cotisations/agff.yaml
index b58faf362..8213e8743 100644
--- a/cotisations/agff.yaml
+++ b/parameters/cotisations/agff.yaml
@@ -2,7 +2,7 @@
description: |
Cotisation de retraite complémentaire
(Cotisation pour l'Association pour la Gestion du Fonds de Financement de l’AGIRC et de l’ARRCO)
- @:
+ tags:
branche: retraite
type de retraite: complémentaire
destinataire: AGFF
@@ -13,27 +13,10 @@
marginalRateTaxScale:
base: plafond_securite_sociale
-- variable: agff
- ?:
- categorie_salarié: privé non cadre
- @:
+- variable: AGFF
+ tags:
au nom de: employeur
- marginalRateTaxScale:
- - threshold: 0
- rate:
- values:
- 2001-04-01: .008
- - threshold: 1
- rate:
- values:
- 2001-04-01: .009
- - threshold: 3
- rate: 0
-
-- variable: agff
- @:
- au nom de: salarié
- ?:
+ conditions:
categorie_salarié: privé non cadre
marginalRateTaxScale:
@@ -48,10 +31,28 @@
- threshold: 3
rate: 0
-- variable: agff
- @:
+- variable: AGFF
+ tags:
au nom de: salarié
- ?:
+ conditions:
+ categorie_salarié: privé non cadre
+
+ marginalRateTaxScale:
+ - threshold: 0
+ rate:
+ values:
+ 2001-04-01: .008
+ - threshold: 1
+ rate:
+ values:
+ 2001-04-01: .009
+ - threshold: 3
+ rate: 0
+
+- variable: AGFF
+ tags:
+ au nom de: salarié
+ conditions:
categorie_salarié: privé cadre
marginalRateTaxScale:
@@ -71,10 +72,10 @@
- threshold: 8
rate: 0
-- variable: agff
- @:
+- variable: AGFF
+ tags:
au nom de: employeur
- ?:
+ conditions:
categorie_salarié: privé cadre
marginalRateTaxScale:
diff --git a/cotisations/agirc.yaml b/parameters/cotisations/agirc.yaml
similarity index 95%
rename from cotisations/agirc.yaml
rename to parameters/cotisations/agirc.yaml
index b40573e9d..9b9b50ba8 100644
--- a/cotisations/agirc.yaml
+++ b/parameters/cotisations/agirc.yaml
@@ -2,12 +2,12 @@
description: |
Cotisation de retraite complémentaire cadre, complémentant le régime ARRCO
(pour l'Association Générale des Institutions de Retraite des Cadres)
- @:
+ tags:
branche: retraite
type de retraite: complémentaire
destinataire: AGIRC
reference: http://www.agirc-arrco.fr/l-agirc-et-larrco/chiffres-cles
- ?:
+ conditions:
categorie_salarié: privé cadre
commentaires: |
Il éxiste une tranche C, de 4 à 8 fois la base, sur laquelle la répartition des cotisations est décidée au sein de l’entreprise jusqu’à 20 %. De 20 % à 20,30 %, la répartition est la suivante : 66,67 % à la charge du salarié et 33,33 % pour l’employeur.
@@ -15,8 +15,8 @@
marginalRateTaxScale:
base: plafond_securite_sociale
-- variable: agirc
- @:
+- variable: AGIRC
+ tags:
au nom de: employeur
marginalRateTaxScale:
- threshold: 0
@@ -38,8 +38,8 @@
- threshold: 8
rate: 0
-- variable: agirc
- @:
+- variable: AGIRC
+ tags:
au nom de: salarié
marginalRateTaxScale:
- threshold: 0
diff --git a/cotisations/apec.yaml b/parameters/cotisations/apec.yaml
similarity index 94%
rename from cotisations/apec.yaml
rename to parameters/cotisations/apec.yaml
index 72ba4f811..fb298e63b 100644
--- a/cotisations/apec.yaml
+++ b/parameters/cotisations/apec.yaml
@@ -2,7 +2,7 @@
description: |
Cotisation de retraite complémentaire cadre, pour le fonctionnement de l'APEC
(Association Pour l’Emploi des Cadres)
- @:
+ tags:
branche: retraite
type de retraite: complémentaire
destinataire: APEC
@@ -11,8 +11,8 @@
avertissements: |
Avant 2011, il y avait une cotisation forfaitaire au lieu de la tranche A
-- variable: apec
- @:
+- variable: APEC
+ tags:
au nom de: employeur
marginalRateTaxScale:
- threshold: 0
@@ -29,8 +29,8 @@
- threshold: 4
rate: 0
-- variable: apec
- @:
+- variable: APEC
+ tags:
au nom de: salarié
marginalRateTaxScale:
- threshold: 0
diff --git a/cotisations/arrco.yaml b/parameters/cotisations/arrco.yaml
similarity index 93%
rename from cotisations/arrco.yaml
rename to parameters/cotisations/arrco.yaml
index 0503e1efd..fa7115b45 100644
--- a/cotisations/arrco.yaml
+++ b/parameters/cotisations/arrco.yaml
@@ -3,7 +3,7 @@
Cotisation de retraite complémentaire pour tous les salariés du secteur privé,
(pour l'Association pour le Régime de Retraite Complémentaire des salariés)
reference: http://www.agirc-arrco.fr/l-agirc-et-larrco/chiffres-cles
- @:
+ tags:
branche: retraite
type de retraite: complémentaire
destinataire: ARRCO
@@ -12,10 +12,10 @@
base: plafond_securite_sociale
-- variable: arrco
- @:
+- variable: ARRCO
+ tags:
au nom de: employeur
- ?:
+ conditions:
categorie_salarié: privé cadre
marginalRateTaxScale:
- threshold: 0
@@ -32,10 +32,10 @@
- threshold: 1
rate: 0
-- variable: arrco
- @:
+- variable: ARRCO
+ tags:
au nom de: salarié
- ?:
+ conditions:
categorie_salarié: privé cadre
marginalRateTaxScale:
- threshold: 0
@@ -52,10 +52,10 @@
- threshold: 1
rate: 0
-- variable: arrco
- @:
+- variable: ARRCO
+ tags:
au nom de: employeur
- ?:
+ conditions:
categorie_salarié: privé non cadre
marginalRateTaxScale:
- threshold: 0
@@ -82,9 +82,10 @@
- threshold: 3
rate: 0
- @:
+- variable: ARRCO
+ tags:
au nom de: salarié
- ?:
+ conditions:
categorie_salarié: privé non cadre
marginalRateTaxScale:
- threshold: 0
diff --git a/cotisations/chomage.yaml b/parameters/cotisations/chomage.yaml
similarity index 94%
rename from cotisations/chomage.yaml
rename to parameters/cotisations/chomage.yaml
index 05306ed15..29811d9d3 100644
--- a/cotisations/chomage.yaml
+++ b/parameters/cotisations/chomage.yaml
@@ -1,5 +1,5 @@
- variable: chomage
- @:
+ tags:
branche: chomage
recouvreur: URSSAF
destinataire: Pôle emploi
@@ -8,7 +8,7 @@
base: assiette_cotisations_sociales
- variable: chomage
- @:
+ tags:
au nom de: employeur
linear:
values:
@@ -17,7 +17,7 @@
1992-07-01: 0.128
- variable: chomage
- @:
+ tags:
au nom de: salarié
linear:
values:
diff --git a/cotisations/contribution_solidarité_autonomie.yaml b/parameters/cotisations/contribution_solidarité_autonomie.yaml
similarity index 96%
rename from cotisations/contribution_solidarité_autonomie.yaml
rename to parameters/cotisations/contribution_solidarité_autonomie.yaml
index d6b52e825..ce91fd6a0 100644
--- a/cotisations/contribution_solidarité_autonomie.yaml
+++ b/parameters/cotisations/contribution_solidarité_autonomie.yaml
@@ -1,6 +1,6 @@
- variable: contribution solidarité autonomie
abbreviation: CSA
- @:
+ tags:
au nom de: employeur
contribution: oui
branche: vieillesse
diff --git a/cotisations/cotisation_exceptionnelle_temporaire.yaml b/parameters/cotisations/cotisation_exceptionnelle_temporaire.yaml
similarity index 95%
rename from cotisations/cotisation_exceptionnelle_temporaire.yaml
rename to parameters/cotisations/cotisation_exceptionnelle_temporaire.yaml
index 65833eff5..f29168de6 100644
--- a/cotisations/cotisation_exceptionnelle_temporaire.yaml
+++ b/parameters/cotisations/cotisation_exceptionnelle_temporaire.yaml
@@ -1,12 +1,12 @@
- variable: cotisation exceptionnelle temporaire
- ?:
+ conditions:
categorie salarie: prive cadre
linear:
base: assiette cotisations sociales
limit: 8 * plafond_securite_sociale
- variable: cotisation exceptionnelle temporaire
- @:
+ tags:
au nom de: employeur
linear:
values:
@@ -18,7 +18,7 @@
1997-01-01: .00044
- variable: cotisation exceptionnelle temporaire
- @:
+ tags:
au nom de: salarié
linear:
values:
diff --git a/cotisations/maladie.yaml b/parameters/cotisations/maladie.yaml
similarity index 95%
rename from cotisations/maladie.yaml
rename to parameters/cotisations/maladie.yaml
index 4f0f98840..6dc31b056 100644
--- a/cotisations/maladie.yaml
+++ b/parameters/cotisations/maladie.yaml
@@ -1,5 +1,5 @@
- variable: maladie
- @:
+ tags:
branche: maladie
plafonnée: oui
linear:
@@ -7,7 +7,7 @@
limit: 4
- variable: maladie
- @:
+ tags:
au nom de: employeur
linear:
values:
@@ -25,7 +25,7 @@
1993-07-01: 0.0483
- variable: maladie
- @:
+ tags:
au nom de: salarié
linear:
values:
@@ -46,9 +46,9 @@
complete la variable: maladie
# Ceci signifie que cette spécification ne remplace pas
# la variable de base du même nom, mais s'y ajoute !
- @:
+ tags:
au nom de: salarié
- ?:
+ conditions:
régime géographique: Alsace-Moselle
linear:
values:
@@ -63,9 +63,9 @@
1989-09-01: 0.75
- variable: maladie alsace moselle
- @:
+ tags:
au nom de: salarié
- ?:
+ conditions:
régime géographique: Alsace-Moselle
régime: agricole
linear:
diff --git a/cotisations/vieillesse.yaml b/parameters/cotisations/vieillesse.yaml
similarity index 96%
rename from cotisations/vieillesse.yaml
rename to parameters/cotisations/vieillesse.yaml
index da9f5c98e..d7e1a94ce 100644
--- a/cotisations/vieillesse.yaml
+++ b/parameters/cotisations/vieillesse.yaml
@@ -1,5 +1,5 @@
- variable: vieillesse
- @:
+ tags:
branche: retraite
type de retraite: base
recouvreur: URSSAF
@@ -9,7 +9,7 @@
base: assiette_cotisations_sociales
- variable: vieillesse
- @:
+ tags:
au nom de: salarié
plafonnée: non
linear:
@@ -22,7 +22,7 @@
2004-07-01: .001
- variable: vieillesse
- @:
+ tags:
au nom de: employeur
plafonnée: non
linear:
@@ -35,13 +35,13 @@
1991-02-01: 0.016
- variable: vieillesse
- @:
+ tags:
plafonnée: oui
linear:
limit: 4 * plafond_securite_sociale
- variable: vieillesse
- @:
+ tags:
au nom de: salarié
plafonnée: oui
linear:
@@ -55,7 +55,7 @@
1993-07-01: .0655
- variable: vieillesse
- @:
+ tags:
au nom de: employeur
plafonnée: oui
linear:
diff --git a/reducers.js b/reducers.js
new file mode 100644
index 000000000..6ae6b6dda
--- /dev/null
+++ b/reducers.js
@@ -0,0 +1,19 @@
+
+import { combineReducers } from 'redux'
+import { SELECT_TAG } from './actions'
+
+function selectTag(state = {}, action) {
+ switch (action.type) {
+ case SELECT_TAG:
+ return Object.assign({}, state, {
+ [action.tagName]: action.tagValue
+ })
+ default:
+ return state
+ }
+}
+
+
+export default combineReducers({
+ selectTag
+})
diff --git a/sagas.js b/sagas.js
new file mode 100644
index 000000000..55164391f
--- /dev/null
+++ b/sagas.js
@@ -0,0 +1,16 @@
+import { takeEvery} from 'redux-saga'
+import { call, put} from 'redux-saga/effects'
+import Promise from 'core-js/fn/promise'
+
+
+function* handleSubmitStep() {
+ console.log('salut')
+}
+
+function* watchSteps() {
+ yield* takeEvery('SUBMIT_STEP', handleSubmitStep)
+}
+
+export default function* rootSaga() {
+ yield [ watchSteps() ]
+}
diff --git a/server.js b/server.js
new file mode 100644
index 000000000..77065882e
--- /dev/null
+++ b/server.js
@@ -0,0 +1,17 @@
+var webpack = require('webpack')
+var WebpackDevServer = require('webpack-dev-server')
+var config = require('./webpack.config')
+
+new WebpackDevServer(webpack(config), {
+ publicPath: config.output.publicPath,
+ hot: true,
+ historyApiFallback: true,
+ stats: {
+ colors: true
+ },
+ noInfo: false
+}).listen(3000, 'localhost', function (err) {
+ if (err)
+ console.log(err)
+ console.log('Bonjour ! Je vous sers sur localhost:3000')
+})
diff --git a/webpack.config.js b/webpack.config.js
new file mode 100644
index 000000000..8a93520dc
--- /dev/null
+++ b/webpack.config.js
@@ -0,0 +1,53 @@
+var webpack = require('webpack'),
+ autoprefixer = require('autoprefixer')
+
+module.exports = {
+ devtool: 'cheap-module-source-map',
+ entry: [
+ 'webpack-dev-server/client?http://localhost:3000/',
+ 'webpack/hot/only-dev-server',
+ 'react-hot-loader/patch',
+ 'babel-polyfill',
+ './entry.js'
+ ],
+ output: {
+ path: require('path').resolve('./dist/'),
+ filename: 'bundle.js',
+ publicPath: '/dist/'
+ },
+ module: {
+ loaders: [ {
+ test: /\.css$/,
+ loader: 'style!css!postcss-loader'
+ }, {
+ test: /\.html$/,
+ loader: 'html'
+ },
+ {
+ test: /\.yaml$/,
+ loader: 'json!yaml'
+ },
+ {
+ test: /\.js$/,
+ exclude: /node_modules/,
+ loader: 'babel-loader'
+ },
+ {
+ test: /\.(jpe?g|png|gif|svg)$/i,
+ loader: 'url?limit=10000!img?progressive=true'
+ } ]
+ },
+ postcss: [
+ autoprefixer({
+ browsers: [ '> 1% in FR', 'not ie < 10' ]
+ })
+ ],
+ plugins: [
+ new webpack.HotModuleReplacementPlugin(),
+ new webpack.NoErrorsPlugin(),
+ // in order to use the fetch polyfill:
+ new webpack.ProvidePlugin({
+ 'fetch': 'imports?this=>global!exports?global.fetch!whatwg-fetch'
+ })
+ ]
+}