reduxadder.sh 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. #!/bin/bash
  2. scriptfolder=$(dirname "$0")
  3. addwhat="$1"
  4. name="$2"
  5. if [ -z "$name" ]
  6. then
  7. echo "needs a name"
  8. exit
  9. fi
  10. case "$addwhat" in
  11. reducer)
  12. if [ -d "reducers" ]
  13. then
  14. sed "s/example/$name/g" $scriptfolder/exampleReducer.js > reducers/$name.js
  15. sed -i "s/import { combineReducers } from 'redux';/import { combineReducers } from 'redux';\nimport $name from '.\/$name.js';/g" reducers/index.js
  16. sed -i "s/combineReducers({/combineReducers({\n $name,/g" reducers/index.js
  17. else
  18. #TODO: add reducers folder and template reducers/index.js if not present (with user confirmation?)
  19. echo "need reducers folder (for now)"
  20. fi
  21. echo "added reducer $name to reducers/ and reducers/index.js"
  22. ;;
  23. action)
  24. if [ ! -e "actions.js" ]
  25. then
  26. echo "creating actions.js (don't forget to import in other files)"
  27. fi
  28. actiontype=$(echo $name | sed -e 's/\(.*\)/\U\1/' -e 's/\s/-/g')
  29. camelcase=$(echo $name | sed -e 's/\b\(.\)/\u\1/g' -e 's/\(.*\)/\l\1/' -e 's/\s//g')
  30. reducer="$3"
  31. props="${@:4}"
  32. actargs=$(echo $props | sed 's/\s\+/, /g')
  33. objprops=""
  34. if [ ! -z "$props" ]
  35. then
  36. for p in $props
  37. do
  38. objprops="$objprops $p,\n"
  39. done
  40. fi
  41. sed \
  42. -e "s/example/$camelcase/g" \
  43. -e "s/()/($actargs)/g" \
  44. -e "s/^ };/$objprops };/g" \
  45. -e "s/EXAMPLE/$actiontype/g" \
  46. $scriptfolder/exampleAction.js >> actions.js
  47. if [ -e "$reducer" ]
  48. then
  49. sed -i \
  50. -e "s/default:/case '$actiontype':\n return $camelcase(state, action);\n default:/" \
  51. $reducer
  52. sed "s/name/$camelcase/g" $scriptfolder/exampleReducerAction.js >> $reducer
  53. fi
  54. echo "added action '$actiontype' to [actions.js] and [$reducer]"
  55. ;;
  56. epic)
  57. echo "add epic"
  58. if [ -d "epics" ]
  59. then
  60. sed "s/example/$name/g" $scriptfolder/exampleEpic.js > epics/$name.js
  61. sed -i "s/import { combineEpics } from 'redux-observable';/import { combineEpics } from 'redux-observable';\nimport $name from '.\/$name.js';/g" epics/index.js
  62. sed -i "s/combineEpics(/combineEpics(\n $name,/g" epics/index.js
  63. else
  64. #TODO: add epics folder and template epics/index.js if not present (with user confirmation?)
  65. echo "need epics folder (for now)"
  66. fi
  67. echo "added epic $name to epics/ and epics/index.js"
  68. ;;
  69. *)
  70. echo "possible actions:"
  71. echo "- add component"
  72. echo "- add reducer"
  73. echo "- add action and include in specific reducer"
  74. echo "- add epic"
  75. ;;
  76. esac
  77. # ADD REDUCER
  78. # 1. add reducer template file to reducers/
  79. # 2. import reducer in reducers/index.js
  80. # 3. include name of reducer in combineReducers in reducers/index.js
  81. # ADD ACTION AND INCLUDE IN REDUCER
  82. # 1. append action creator function in actions.js
  83. # 2. insert action case statement into designated reducer
  84. # 3. append function in reducer file
  85. # ADD EPIC
  86. # 1. add epic template file to epics/
  87. # 2. import epic in epics/index.js
  88. # 3. include name of epic in combineEpics in epics/index.js
  89. # ADD COMPONENT
  90. # 1. add component template file to components/