Parcourir la source

adding redux utilities

Brandon Wong il y a 7 ans
Parent
commit
262ad6e9a0
5 fichiers modifiés avec 142 ajouts et 0 suppressions
  1. 5 0
      utils/exampleAction.js
  2. 9 0
      utils/exampleEpic.js
  3. 11 0
      utils/exampleReducer.js
  4. 5 0
      utils/exampleReducerAction.js
  5. 112 0
      utils/reduxadder.sh

+ 5 - 0
utils/exampleAction.js

@@ -0,0 +1,5 @@
+export function example() {
+    return {
+        type: 'EXAMPLE',
+    };
+};

+ 9 - 0
utils/exampleEpic.js

@@ -0,0 +1,9 @@
+
+import 'rxjs';
+
+export default function example(action$) {
+    return action$.ofType('PING')
+        .mapTo({type: 'PONG'});
+};
+
+

+ 11 - 0
utils/exampleReducer.js

@@ -0,0 +1,11 @@
+
+const defaultState = Object.freeze({});
+
+export default function example(state = defaultState, action = {type:'NO-OP'}) {
+    switch( action.type ) {
+        default:
+            return state;
+    }
+}
+
+

+ 5 - 0
utils/exampleReducerAction.js

@@ -0,0 +1,5 @@
+function name(state, action) {
+    return {
+        ...state,
+    };
+}

+ 112 - 0
utils/reduxadder.sh

@@ -0,0 +1,112 @@
+#!/bin/bash
+
+scriptfolder=$(dirname "$0")
+addwhat="$1"
+name="$2"
+
+if [ -z "$name" ]
+then
+    echo "needs a name"
+    exit
+fi
+
+case "$addwhat" in
+
+    reducer)
+        if [ -d "reducers" ]
+        then
+            sed "s/example/$name/g" $scriptfolder/exampleReducer.js > reducers/$name.js
+            sed -i "s/import { combineReducers } from 'redux';/import { combineReducers } from 'redux';\nimport $name from '.\/$name.js';/g" reducers/index.js
+            sed -i "s/combineReducers({/combineReducers({\n    $name,/g" reducers/index.js
+        else
+            #TODO: add reducers folder and template reducers/index.js if not present (with user confirmation?)
+            echo "need reducers folder (for now)"
+        fi
+        echo "added reducer $name to reducers/ and reducers/index.js"
+        ;;
+
+
+
+    action)
+        if [ ! -e "actions.js" ]
+        then
+            echo "creating actions.js (don't forget to import in other files)"
+        fi
+        actiontype=$(echo $name | sed -e 's/\(.*\)/\U\1/' -e 's/\s/-/g')
+        camelcase=$(echo $name | sed -e 's/\b\(.\)/\u\1/g' -e 's/\(.*\)/\l\1/' -e 's/\s//g')
+        reducer="$3"
+        props="${@:4}"
+        actargs=$(echo $props | sed 's/\s\+/, /g')
+
+        objprops=""
+        if [ ! -z "$props" ]
+        then
+            for p in $props
+            do
+                objprops="$objprops        $p,\n"
+            done
+        fi
+
+        sed \
+            -e "s/example/$camelcase/g" \
+            -e "s/()/($actargs)/g" \
+            -e "s/^    };/$objprops    };/g" \
+            -e "s/EXAMPLE/$actiontype/g" \
+            $scriptfolder/exampleAction.js >> actions.js
+
+        if [ -e "$reducer" ]
+        then
+            sed -i \
+                -e "s/default:/case '$actiontype':\n            return $camelcase(state, action);\n        default:/" \
+                $reducer
+            sed "s/name/$camelcase/g" $scriptfolder/exampleReducerAction.js >> $reducer
+        fi
+        ;;
+
+
+
+    epic)
+        echo "add epic"
+        if [ -d "epics" ]
+        then
+            sed "s/example/$name/g" $scriptfolder/exampleEpic.js > epics/$name.js
+            sed -i "s/import { combineEpics } from 'redux-observable';/import { combineEpics } from 'redux-observable';\nimport $name from '.\/$name.js';/g" epics/index.js
+            sed -i "s/combineEpics(/combineEpics(\n    $name,/g" epics/index.js
+        else
+            #TODO: add epics folder and template epics/index.js if not present (with user confirmation?)
+            echo "need epics folder (for now)"
+        fi
+        echo "added epic $name to epics/ and epics/index.js"
+        ;;
+
+
+
+    *)
+        echo "possible actions:"
+        echo "- add component"
+        echo "- add reducer"
+        echo "- add action and include in specific reducer"
+        echo "- add epic"
+        ;;
+esac
+
+
+# ADD REDUCER
+# 1. add reducer template file to reducers/
+# 2. import reducer in reducers/index.js
+# 3. include name of reducer in combineReducers in reducers/index.js
+
+# ADD ACTION AND INCLUDE IN REDUCER
+# 1. append action creator function in actions.js
+# 2. insert action case statement into designated reducer
+# 3. append function in reducer file
+
+# ADD EPIC
+# 1. add epic template file to epics/
+# 2. import epic in epics/index.js
+# 3. include name of epic in combineEpics in epics/index.js
+
+# ADD COMPONENT
+# 1. add component template file to components/
+
+