reduxadder.sh 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  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. ;;
  55. epic)
  56. echo "add epic"
  57. if [ -d "epics" ]
  58. then
  59. sed "s/example/$name/g" $scriptfolder/exampleEpic.js > epics/$name.js
  60. sed -i "s/import { combineEpics } from 'redux-observable';/import { combineEpics } from 'redux-observable';\nimport $name from '.\/$name.js';/g" epics/index.js
  61. sed -i "s/combineEpics(/combineEpics(\n $name,/g" epics/index.js
  62. else
  63. #TODO: add epics folder and template epics/index.js if not present (with user confirmation?)
  64. echo "need epics folder (for now)"
  65. fi
  66. echo "added epic $name to epics/ and epics/index.js"
  67. ;;
  68. *)
  69. echo "possible actions:"
  70. echo "- add component"
  71. echo "- add reducer"
  72. echo "- add action and include in specific reducer"
  73. echo "- add epic"
  74. ;;
  75. esac
  76. # ADD REDUCER
  77. # 1. add reducer template file to reducers/
  78. # 2. import reducer in reducers/index.js
  79. # 3. include name of reducer in combineReducers in reducers/index.js
  80. # ADD ACTION AND INCLUDE IN REDUCER
  81. # 1. append action creator function in actions.js
  82. # 2. insert action case statement into designated reducer
  83. # 3. append function in reducer file
  84. # ADD EPIC
  85. # 1. add epic template file to epics/
  86. # 2. import epic in epics/index.js
  87. # 3. include name of epic in combineEpics in epics/index.js
  88. # ADD COMPONENT
  89. # 1. add component template file to components/