reduxadder.sh 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. #!/bin/bash
  2. scriptfolder=$(dirname "$0")
  3. addwhat="$1"
  4. name="$2"
  5. camelcase=$(echo $name | sed -e 's/\b\(.\)/\u\1/g' -e 's/\(.*\)/\l\1/' -e 's/\s//g')
  6. actiontype=$(echo $name | sed -e 's/\(.*\)/\U\1/' -e 's/\s/-/g')
  7. if [ -z "$name" ]
  8. then
  9. echo "needs a name"
  10. exit
  11. fi
  12. case "$addwhat" in
  13. reducer)
  14. if [ -d "reducers" ]
  15. then
  16. sed "s/example/$name/g" $scriptfolder/exampleReducer.js > reducers/$name.js
  17. sed -i "s/import { combineReducers } from 'redux';/import { combineReducers } from 'redux';\nimport $name from '.\/$name.js';/g" reducers/index.js
  18. sed -i "s/combineReducers({/combineReducers({\n $name,/g" reducers/index.js
  19. else
  20. #TODO: add reducers folder and template reducers/index.js if not present (with user confirmation?)
  21. echo "need reducers folder (for now)"
  22. fi
  23. echo "added reducer $name to reducers/ and reducers/index.js"
  24. ;;
  25. action)
  26. if [ ! -e "actions.js" ]
  27. then
  28. echo "creating actions.js (don't forget to import in other files)"
  29. fi
  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. #TODO: consider adding option to add to epic AND/OR reducer (check for ".js", check for basename, etc) (all following arguments are action parameters)
  48. if [ -e "$reducer" ]
  49. then
  50. sed -i \
  51. -e "s/default:/case '$actiontype':\n return $camelcase(state, action);\n default:/" \
  52. $reducer
  53. sed "s/name/$camelcase/g" $scriptfolder/exampleReducerAction.js >> $reducer
  54. fi
  55. echo "added action '$actiontype' to [actions.js] and [$reducer]"
  56. ;;
  57. epic)
  58. echo "add epic"
  59. if [ -d "epics" ]
  60. then
  61. sed -e "s/example/$camelcase/g" -e "s/PING/$actiontype/g" $scriptfolder/exampleEpic.js > epics/$camelcase.js
  62. sed -i "s/import { combineEpics } from 'redux-observable';/import { combineEpics } from 'redux-observable';\nimport $camelcase from '.\/$camelcase.js';/g" epics/index.js
  63. sed -i "s/combineEpics(/combineEpics(\n $camelcase,/g" epics/index.js
  64. else
  65. #TODO: add epics folder and template epics/index.js if not present (with user confirmation?)
  66. echo "need epics folder (for now)"
  67. fi
  68. echo "added epic $camelcase to epics/ and epics/index.js"
  69. ;;
  70. component)
  71. if [ -d "components" ]
  72. then
  73. sed "s/Example/$name/g" $scriptfolder/exampleComponent.js > components/$name.js
  74. else
  75. #TODO: add components folder if not present (with user confirmation?)
  76. echo "need components folder (for now)"
  77. fi
  78. echo "added component $name to components/ and components/index.js"
  79. ;;
  80. *)
  81. echo "possible actions:"
  82. echo "- add component"
  83. echo "- add reducer"
  84. echo "- add action and include in specific reducer"
  85. echo "- add epic"
  86. ;;
  87. esac
  88. # ADD REDUCER
  89. # 1. add reducer template file to reducers/
  90. # 2. import reducer in reducers/index.js
  91. # 3. include name of reducer in combineReducers in reducers/index.js
  92. # ADD ACTION AND INCLUDE IN REDUCER
  93. # 1. append action creator function in actions.js
  94. # 2. insert action case statement into designated reducer
  95. # 3. append function in reducer file
  96. # ADD EPIC
  97. # 1. add epic template file to epics/
  98. # 2. import epic in epics/index.js
  99. # 3. include name of epic in combineEpics in epics/index.js
  100. # ADD COMPONENT
  101. # 1. add component template file to components/