strapi-plugin-comments 2.0.11 → 2.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (443) hide show
  1. package/README.md +165 -119
  2. package/admin/src/components/ActionButton/styles.ts +11 -0
  3. package/admin/src/components/Avatar/index.tsx +31 -0
  4. package/admin/src/components/ConfirmationDialog/index.tsx +88 -0
  5. package/admin/src/components/DiscussionStatus/index.tsx +36 -0
  6. package/admin/src/components/DiscussionThread/index.tsx +97 -0
  7. package/admin/src/components/DiscussionThreadItem/index.tsx +71 -0
  8. package/admin/src/components/DiscussionThreadItem/{styles.js → styles.ts} +8 -6
  9. package/admin/src/components/DiscussionThreadItemActions/index.tsx +365 -0
  10. package/admin/src/components/DiscussionThreadItemActions/styles.ts +9 -0
  11. package/admin/src/components/DiscussionThreadItemApprovalFlowActions/index.tsx +99 -0
  12. package/admin/src/components/DiscussionThreadItemApprovalFlowActions/styles.ts +8 -0
  13. package/admin/src/components/DiscussionThreadItemFooter/index.tsx +62 -0
  14. package/admin/src/components/DiscussionThreadItemFooter/styles.ts +15 -0
  15. package/admin/src/components/DiscussionThreadItemReviewAction/index.tsx +180 -0
  16. package/admin/src/components/FormSwitch/index.tsx +35 -0
  17. package/admin/src/components/FormSwitch/styles.ts +10 -0
  18. package/admin/src/components/IconButton/styles.ts +19 -0
  19. package/admin/src/components/Initializer/{index.js → index.tsx} +8 -6
  20. package/admin/src/components/LoadingIndicatorOverlay/index.tsx +19 -0
  21. package/admin/src/components/LoadingIndicatorOverlay/styles.ts +21 -0
  22. package/admin/src/components/Nav/index.tsx +61 -0
  23. package/admin/src/components/PluginIcon/{index.js → index.tsx} +4 -2
  24. package/admin/src/components/ReportsReviewModal/index.tsx +71 -0
  25. package/admin/src/components/ReportsReviewTable/index.tsx +233 -0
  26. package/admin/src/components/StatusBadge/index.tsx +21 -0
  27. package/admin/src/components/StatusBadge/styles.ts +19 -0
  28. package/admin/src/components/TableFilters/{index.js → index.tsx} +14 -9
  29. package/admin/src/components/TablePagination/{index.js → index.tsx} +8 -6
  30. package/admin/src/components/icons/comments.tsx +15 -0
  31. package/admin/src/components/icons/index.ts +6 -0
  32. package/admin/src/components/icons/{lock.js → lock.tsx} +17 -12
  33. package/admin/src/components/icons/review.tsx +25 -0
  34. package/admin/src/components/icons/unlock.tsx +25 -0
  35. package/admin/src/hooks/useConfig.ts +58 -0
  36. package/admin/src/{index.js → index.ts} +26 -22
  37. package/admin/src/pages/App/index.tsx +67 -0
  38. package/admin/src/pages/App/reducer/actions.ts +10 -0
  39. package/admin/src/pages/App/reducer/constants.ts +4 -0
  40. package/admin/src/pages/App/reducer/{index.js → index.ts} +8 -6
  41. package/admin/src/pages/App/reducer/init.ts +9 -0
  42. package/admin/src/pages/App/reducer/selectors.ts +32 -0
  43. package/admin/src/pages/App/utils/{api.js → api.ts} +3 -1
  44. package/admin/src/pages/ComingSoonPage/index.tsx +31 -0
  45. package/admin/src/pages/Details/components/DetailsEntity/index.tsx +106 -0
  46. package/admin/src/pages/Details/components/DetailsFilters/index.tsx +43 -0
  47. package/admin/src/pages/Details/components/DetailsFilters/styles.ts +9 -0
  48. package/admin/src/pages/Details/index.tsx +169 -0
  49. package/admin/src/pages/Discover/components/DiscoverTableRow/index.tsx +252 -0
  50. package/admin/src/pages/Discover/components/DiscoverTableRow/styles.ts +9 -0
  51. package/admin/src/pages/Discover/index.tsx +230 -0
  52. package/admin/src/pages/Discover/utils/api.ts +22 -0
  53. package/admin/src/pages/Discover/utils/filtersSchema.ts +9 -0
  54. package/admin/src/pages/Settings/components/RestartAlert/styles.ts +10 -0
  55. package/admin/src/pages/Settings/index.tsx +602 -0
  56. package/admin/src/pages/Settings/utils/{api.js → api.ts} +16 -5
  57. package/admin/src/pages/utils/api.ts +70 -0
  58. package/admin/src/permissions.ts +30 -0
  59. package/admin/src/pluginId.ts +3 -0
  60. package/admin/src/reducers.ts +8 -0
  61. package/admin/src/translations/en.json +131 -131
  62. package/admin/src/translations/pt-BR.json +130 -130
  63. package/admin/src/utils/{axiosInstance.js → axiosInstance.ts} +12 -9
  64. package/admin/src/utils/constants.ts +25 -0
  65. package/admin/src/utils/getApiUrl.ts +5 -0
  66. package/admin/src/utils/getMessage.ts +29 -0
  67. package/admin/src/utils/getRelatedGroups.ts +6 -0
  68. package/admin/src/utils/getUrl.ts +5 -0
  69. package/admin/src/utils/handleAPIError.ts +21 -0
  70. package/admin/src/utils/index.ts +11 -0
  71. package/admin/src/utils/parseRegExp.ts +9 -0
  72. package/admin/src/utils/renderEntryTitle.ts +16 -0
  73. package/admin/src/utils/renderInitials.ts +10 -0
  74. package/admin/src/utils/resolveCommentStatus.ts +37 -0
  75. package/admin/src/utils/resolveCommentStatusColor.ts +22 -0
  76. package/build/README.md +41 -5
  77. package/build/admin/src/components/ActionButton/styles.d.ts +1 -1
  78. package/build/admin/src/components/ActionButton/styles.js +5 -7
  79. package/build/admin/src/components/Avatar/index.d.ts +12 -0
  80. package/build/admin/src/components/Avatar/index.js +26 -0
  81. package/build/admin/src/components/ConfirmationDialog/index.js +23 -90
  82. package/build/admin/src/components/DiscussionStatus/index.js +13 -27
  83. package/build/admin/src/components/DiscussionThread/index.js +29 -83
  84. package/build/admin/src/components/DiscussionThreadItem/index.js +20 -59
  85. package/build/admin/src/components/DiscussionThreadItem/styles.d.ts +1 -1
  86. package/build/admin/src/components/DiscussionThreadItem/styles.js +8 -17
  87. package/build/admin/src/components/DiscussionThreadItemActions/index.js +163 -383
  88. package/build/admin/src/components/DiscussionThreadItemActions/styles.d.ts +1 -1
  89. package/build/admin/src/components/DiscussionThreadItemActions/styles.js +5 -9
  90. package/build/admin/src/components/DiscussionThreadItemApprovalFlowActions/index.js +52 -85
  91. package/build/admin/src/components/DiscussionThreadItemApprovalFlowActions/styles.d.ts +1 -1
  92. package/build/admin/src/components/DiscussionThreadItemApprovalFlowActions/styles.js +5 -8
  93. package/build/admin/src/components/DiscussionThreadItemFooter/index.js +27 -61
  94. package/build/admin/src/components/DiscussionThreadItemFooter/styles.d.ts +1 -1
  95. package/build/admin/src/components/DiscussionThreadItemFooter/styles.js +7 -14
  96. package/build/admin/src/components/DiscussionThreadItemReviewAction/index.js +91 -207
  97. package/build/admin/src/components/FormSwitch/index.d.ts +5 -9
  98. package/build/admin/src/components/FormSwitch/index.js +8 -32
  99. package/build/admin/src/components/FormSwitch/styles.d.ts +1 -1
  100. package/build/admin/src/components/FormSwitch/styles.js +5 -7
  101. package/build/admin/src/components/IconButton/styles.d.ts +1 -1
  102. package/build/admin/src/components/IconButton/styles.js +7 -13
  103. package/build/admin/src/components/Initializer/index.d.ts +4 -2
  104. package/build/admin/src/components/Initializer/index.js +7 -7
  105. package/build/admin/src/components/LoadingIndicatorOverlay/index.d.ts +1 -1
  106. package/build/admin/src/components/LoadingIndicatorOverlay/index.js +6 -12
  107. package/build/admin/src/components/LoadingIndicatorOverlay/styles.d.ts +1 -1
  108. package/build/admin/src/components/LoadingIndicatorOverlay/styles.js +7 -14
  109. package/build/admin/src/components/Nav/index.js +16 -62
  110. package/build/admin/src/components/PluginIcon/index.d.ts +1 -1
  111. package/build/admin/src/components/PluginIcon/index.js +5 -8
  112. package/build/admin/src/components/ReportsReviewModal/index.js +23 -62
  113. package/build/admin/src/components/ReportsReviewTable/index.js +112 -293
  114. package/build/admin/src/components/StatusBadge/index.d.ts +5 -9
  115. package/build/admin/src/components/StatusBadge/index.js +6 -16
  116. package/build/admin/src/components/StatusBadge/styles.d.ts +1 -1
  117. package/build/admin/src/components/StatusBadge/styles.js +5 -7
  118. package/build/admin/src/components/TableFilters/index.js +38 -91
  119. package/build/admin/src/components/TablePagination/index.d.ts +13 -11
  120. package/build/admin/src/components/TablePagination/index.js +19 -31
  121. package/build/admin/src/components/icons/comments.d.ts +4 -7
  122. package/build/admin/src/components/icons/comments.js +7 -18
  123. package/build/admin/src/components/icons/index.d.ts +1 -1
  124. package/build/admin/src/components/icons/index.js +5 -11
  125. package/build/admin/src/components/icons/lock.d.ts +5 -9
  126. package/build/admin/src/components/icons/lock.js +7 -24
  127. package/build/admin/src/components/icons/review.d.ts +5 -9
  128. package/build/admin/src/components/icons/review.js +7 -26
  129. package/build/admin/src/components/icons/unlock.d.ts +5 -9
  130. package/build/admin/src/components/icons/unlock.js +7 -24
  131. package/build/admin/src/hooks/useConfig.js +34 -42
  132. package/build/admin/src/index.js +84 -121
  133. package/build/admin/src/pages/App/index.js +23 -66
  134. package/build/admin/src/pages/App/reducer/actions.d.ts +4 -4
  135. package/build/admin/src/pages/App/reducer/actions.js +3 -3
  136. package/build/admin/src/pages/App/reducer/constants.d.ts +1 -1
  137. package/build/admin/src/pages/App/reducer/constants.js +1 -1
  138. package/build/admin/src/pages/App/reducer/index.d.ts +5 -10
  139. package/build/admin/src/pages/App/reducer/index.js +16 -19
  140. package/build/admin/src/pages/App/reducer/init.d.ts +1 -1
  141. package/build/admin/src/pages/App/reducer/init.js +4 -4
  142. package/build/admin/src/pages/App/reducer/selectors.d.ts +1 -1
  143. package/build/admin/src/pages/App/reducer/selectors.js +6 -8
  144. package/build/admin/src/pages/App/utils/api.js +8 -9
  145. package/build/admin/src/pages/ComingSoonPage/index.js +27 -62
  146. package/build/admin/src/pages/Details/components/DetailsEntity/index.js +39 -115
  147. package/build/admin/src/pages/Details/components/DetailsFilters/index.js +13 -33
  148. package/build/admin/src/pages/Details/components/DetailsFilters/styles.d.ts +1 -1
  149. package/build/admin/src/pages/Details/components/DetailsFilters/styles.js +5 -7
  150. package/build/admin/src/pages/Details/index.js +64 -183
  151. package/build/admin/src/pages/Discover/components/DiscoverTableRow/index.js +139 -314
  152. package/build/admin/src/pages/Discover/components/DiscoverTableRow/styles.d.ts +1 -1
  153. package/build/admin/src/pages/Discover/components/DiscoverTableRow/styles.js +5 -7
  154. package/build/admin/src/pages/Discover/index.js +98 -298
  155. package/build/admin/src/pages/Discover/utils/api.js +8 -15
  156. package/build/admin/src/pages/Discover/utils/filtersSchema.d.ts +8 -8
  157. package/build/admin/src/pages/Discover/utils/filtersSchema.js +6 -6
  158. package/build/admin/src/pages/Settings/components/RestartAlert/styles.d.ts +1 -1
  159. package/build/admin/src/pages/Settings/components/RestartAlert/styles.js +5 -7
  160. package/build/admin/src/pages/Settings/index.js +192 -678
  161. package/build/admin/src/pages/Settings/utils/api.js +44 -59
  162. package/build/admin/src/pages/utils/api.js +26 -51
  163. package/build/admin/src/permissions.d.ts +25 -25
  164. package/build/admin/src/permissions.js +28 -60
  165. package/build/admin/src/pluginId.d.ts +1 -1
  166. package/build/admin/src/pluginId.js +20 -41
  167. package/build/admin/src/reducers.d.ts +4 -9
  168. package/build/admin/src/reducers.js +5 -7
  169. package/build/admin/src/translations/fr.json +132 -1
  170. package/build/admin/src/utils/axiosInstance.js +15 -23
  171. package/build/admin/src/utils/constants.d.ts +17 -17
  172. package/build/admin/src/utils/constants.js +16 -20
  173. package/build/admin/src/utils/getApiUrl.d.ts +1 -1
  174. package/build/admin/src/utils/getApiUrl.js +1 -1
  175. package/build/admin/src/utils/getMessage.js +13 -17
  176. package/build/admin/src/utils/getRelatedGroups.js +2 -3
  177. package/build/admin/src/utils/getUrl.d.ts +1 -1
  178. package/build/admin/src/utils/getUrl.js +1 -1
  179. package/build/admin/src/utils/handleAPIError.js +12 -15
  180. package/build/admin/src/utils/index.js +16 -84
  181. package/build/admin/src/utils/parseRegExp.d.ts +3 -3
  182. package/build/admin/src/utils/parseRegExp.js +6 -6
  183. package/build/admin/src/utils/renderEntryTitle.js +7 -10
  184. package/build/admin/src/utils/renderInitials.d.ts +1 -1
  185. package/build/admin/src/utils/renderInitials.js +2 -3
  186. package/build/admin/src/utils/resolveCommentStatus.js +19 -25
  187. package/build/admin/src/utils/resolveCommentStatusColor.js +15 -15
  188. package/build/content-types/comment.d.ts +87 -87
  189. package/build/content-types/comment.js +87 -87
  190. package/build/content-types/index.d.ts +136 -136
  191. package/build/content-types/index.js +10 -12
  192. package/build/content-types/report.d.ts +41 -41
  193. package/build/content-types/report.js +41 -41
  194. package/build/package.json +5 -5
  195. package/build/permissions.d.ts +14 -14
  196. package/build/permissions.js +14 -14
  197. package/build/server/bootstrap.js +52 -58
  198. package/build/server/config/index.js +13 -13
  199. package/build/server/controllers/admin.js +128 -117
  200. package/build/server/controllers/client.js +15 -4
  201. package/build/server/controllers/index.js +6 -8
  202. package/build/server/controllers/utils/functions.d.ts +1 -1
  203. package/build/server/controllers/utils/parsers.d.ts +5 -10
  204. package/build/server/controllers/utils/parsers.js +46 -20
  205. package/build/server/destroy.d.ts +1 -1
  206. package/build/server/destroy.js +3 -2
  207. package/build/server/graphql/index.js +19 -29
  208. package/build/server/graphql/mutations/createAbuseReport.js +19 -23
  209. package/build/server/graphql/mutations/createComment.d.ts +1 -1
  210. package/build/server/graphql/mutations/createComment.js +19 -22
  211. package/build/server/graphql/mutations/index.js +19 -21
  212. package/build/server/graphql/mutations/removeComment.d.ts +1 -1
  213. package/build/server/graphql/mutations/removeComment.js +19 -23
  214. package/build/server/graphql/mutations/updateComment.d.ts +1 -1
  215. package/build/server/graphql/mutations/updateComment.js +19 -23
  216. package/build/server/graphql/queries/findAllFlat.d.ts +1 -1
  217. package/build/server/graphql/queries/findAllFlat.js +30 -40
  218. package/build/server/graphql/queries/findAllInHierarchy.d.ts +1 -2
  219. package/build/server/graphql/queries/findAllInHierarchy.js +25 -32
  220. package/build/server/graphql/queries/index.js +17 -19
  221. package/build/server/graphql/resolvers-config.js +10 -10
  222. package/build/server/graphql/types/comment-author.js +7 -8
  223. package/build/server/graphql/types/comment-nested.js +14 -15
  224. package/build/server/graphql/types/comment.js +13 -14
  225. package/build/server/graphql/types/create-comment-author.js +7 -8
  226. package/build/server/graphql/types/create-comment.js +7 -8
  227. package/build/server/graphql/types/create-report.js +7 -8
  228. package/build/server/graphql/types/id.js +13 -14
  229. package/build/server/graphql/types/identify-comment-author.js +4 -5
  230. package/build/server/graphql/types/index.js +21 -27
  231. package/build/server/graphql/types/remove-comment.js +6 -7
  232. package/build/server/graphql/types/report-reason.js +9 -9
  233. package/build/server/graphql/types/report.js +9 -10
  234. package/build/server/graphql/types/response-find-all.js +5 -6
  235. package/build/server/graphql/types/response-meta.js +4 -5
  236. package/build/server/graphql/types/response-pagination.js +9 -10
  237. package/build/server/graphql/types/update-comment.js +7 -8
  238. package/build/server/register.d.ts +1 -1
  239. package/build/server/register.js +3 -2
  240. package/build/server/routes/admin.d.ts +1 -1
  241. package/build/server/routes/admin.js +99 -99
  242. package/build/server/routes/client.d.ts +1 -1
  243. package/build/server/routes/client.js +79 -43
  244. package/build/server/routes/index.d.ts +4 -4
  245. package/build/server/routes/index.js +12 -14
  246. package/build/server/services/admin.js +257 -284
  247. package/build/server/services/client.js +54 -42
  248. package/build/server/services/common.js +33 -11
  249. package/build/server/services/graphql.js +113 -124
  250. package/build/server/services/utils/functions.d.ts +1 -1
  251. package/build/server/services/utils/functions.js +76 -109
  252. package/build/server/utils/constants.js +13 -14
  253. package/build/server/utils/error.d.ts +12 -16
  254. package/build/server/utils/error.js +23 -23
  255. package/build/server/utils/functions.d.ts +4 -12
  256. package/build/server/utils/functions.js +20 -34
  257. package/build/strapi-admin.js +4 -6
  258. package/build/tsconfig.tsbuildinfo +1 -1
  259. package/build/types/contentTypes.d.ts +7 -5
  260. package/content-types/comment.ts +93 -0
  261. package/content-types/index.ts +11 -0
  262. package/content-types/report.ts +50 -0
  263. package/jest.config.ts +22 -0
  264. package/package.json +45 -11
  265. package/permissions.ts +17 -0
  266. package/server/{bootstrap.js → bootstrap.ts} +12 -11
  267. package/server/config/index.ts +19 -0
  268. package/server/controllers/admin.ts +194 -0
  269. package/server/controllers/client.ts +220 -0
  270. package/server/controllers/index.ts +13 -0
  271. package/server/controllers/utils/functions.ts +27 -0
  272. package/server/controllers/utils/parsers.ts +59 -0
  273. package/server/destroy.ts +3 -0
  274. package/server/graphql/index.ts +27 -0
  275. package/server/graphql/mutations/createAbuseReport.ts +38 -0
  276. package/server/graphql/mutations/createComment.ts +41 -0
  277. package/server/graphql/mutations/index.ts +26 -0
  278. package/server/graphql/mutations/removeComment.ts +41 -0
  279. package/server/graphql/mutations/updateComment.ts +40 -0
  280. package/server/graphql/queries/findAllFlat.ts +58 -0
  281. package/server/graphql/queries/findAllInHierarchy.ts +47 -0
  282. package/server/graphql/queries/index.ts +22 -0
  283. package/server/graphql/resolvers-config.ts +13 -0
  284. package/server/graphql/types/comment-author.ts +12 -0
  285. package/server/graphql/types/comment-nested.ts +19 -0
  286. package/server/graphql/types/comment.ts +18 -0
  287. package/server/graphql/types/create-comment-author.ts +12 -0
  288. package/server/graphql/types/create-comment.ts +12 -0
  289. package/server/graphql/types/create-report.ts +12 -0
  290. package/server/graphql/types/id.ts +28 -0
  291. package/server/graphql/types/identify-comment-author.ts +9 -0
  292. package/server/graphql/types/index.ts +38 -0
  293. package/server/graphql/types/remove-comment.ts +11 -0
  294. package/server/graphql/types/report-reason.ts +12 -0
  295. package/server/graphql/types/report.ts +14 -0
  296. package/server/graphql/types/response-find-all.ts +10 -0
  297. package/server/graphql/types/response-meta.ts +9 -0
  298. package/server/graphql/types/response-pagination.ts +14 -0
  299. package/server/graphql/types/update-comment.ts +12 -0
  300. package/server/index.ts +20 -0
  301. package/server/register.ts +3 -0
  302. package/server/routes/admin.ts +118 -0
  303. package/server/routes/client.ts +95 -0
  304. package/server/routes/index.ts +25 -0
  305. package/server/services/admin.ts +406 -0
  306. package/server/services/client.ts +394 -0
  307. package/server/services/common.ts +503 -0
  308. package/server/services/{graphql.js → graphql.ts} +72 -43
  309. package/server/services/index.ts +13 -0
  310. package/server/services/utils/functions.ts +150 -0
  311. package/server/utils/constants.ts +23 -0
  312. package/server/utils/error.ts +44 -0
  313. package/server/utils/functions.ts +55 -0
  314. package/strapi-admin.ts +5 -0
  315. package/strapi-server.ts +77 -0
  316. package/tsconfig.json +38 -0
  317. package/types/common.d.ts +1 -0
  318. package/types/config.d.ts +35 -0
  319. package/types/constants.d.ts +3 -0
  320. package/types/contentTypes.ts +56 -0
  321. package/types/controllers.d.ts +125 -0
  322. package/types/graphql.d.ts +24 -0
  323. package/types/index.d.ts +7 -0
  324. package/types/services.d.ts +166 -0
  325. package/__mocks__/initSetup.js +0 -108
  326. package/admin/src/components/ActionButton/styles.js +0 -10
  327. package/admin/src/components/ConfirmationDialog/index.js +0 -56
  328. package/admin/src/components/DiscussionStatus/index.js +0 -33
  329. package/admin/src/components/DiscussionThread/index.js +0 -62
  330. package/admin/src/components/DiscussionThreadItem/index.js +0 -57
  331. package/admin/src/components/DiscussionThreadItemActions/index.js +0 -231
  332. package/admin/src/components/DiscussionThreadItemActions/styles.js +0 -7
  333. package/admin/src/components/DiscussionThreadItemApprovalFlowActions/index.js +0 -80
  334. package/admin/src/components/DiscussionThreadItemApprovalFlowActions/styles.js +0 -6
  335. package/admin/src/components/DiscussionThreadItemFooter/index.js +0 -47
  336. package/admin/src/components/DiscussionThreadItemFooter/styles.js +0 -13
  337. package/admin/src/components/DiscussionThreadItemReviewAction/index.js +0 -131
  338. package/admin/src/components/FormSwitch/index.js +0 -18
  339. package/admin/src/components/FormSwitch/styles.js +0 -8
  340. package/admin/src/components/IconButton/styles.js +0 -14
  341. package/admin/src/components/LoadingIndicatorOverlay/index.js +0 -15
  342. package/admin/src/components/LoadingIndicatorOverlay/styles.js +0 -20
  343. package/admin/src/components/Nav/index.js +0 -49
  344. package/admin/src/components/ReportsReviewModal/index.js +0 -48
  345. package/admin/src/components/ReportsReviewTable/index.js +0 -160
  346. package/admin/src/components/StatusBadge/index.js +0 -17
  347. package/admin/src/components/StatusBadge/styles.js +0 -17
  348. package/admin/src/components/icons/comments.js +0 -9
  349. package/admin/src/components/icons/index.js +0 -6
  350. package/admin/src/components/icons/review.js +0 -18
  351. package/admin/src/components/icons/unlock.js +0 -20
  352. package/admin/src/hooks/useConfig.js +0 -49
  353. package/admin/src/pages/App/index.js +0 -71
  354. package/admin/src/pages/App/reducer/actions.js +0 -8
  355. package/admin/src/pages/App/reducer/constants.js +0 -4
  356. package/admin/src/pages/App/reducer/init.js +0 -7
  357. package/admin/src/pages/App/reducer/selectors.js +0 -35
  358. package/admin/src/pages/ComingSoonPage/index.js +0 -25
  359. package/admin/src/pages/Details/components/DetailsEntity/index.js +0 -84
  360. package/admin/src/pages/Details/components/DetailsFilters/index.js +0 -35
  361. package/admin/src/pages/Details/components/DetailsFilters/styles.js +0 -8
  362. package/admin/src/pages/Details/index.js +0 -136
  363. package/admin/src/pages/Discover/components/DiscoverTableRow/index.js +0 -180
  364. package/admin/src/pages/Discover/components/DiscoverTableRow/styles.js +0 -8
  365. package/admin/src/pages/Discover/index.js +0 -173
  366. package/admin/src/pages/Discover/utils/api.js +0 -14
  367. package/admin/src/pages/Discover/utils/filtersSchema.js +0 -9
  368. package/admin/src/pages/Settings/components/RestartAlert/styles.js +0 -8
  369. package/admin/src/pages/Settings/index.js +0 -392
  370. package/admin/src/pages/utils/api.js +0 -53
  371. package/admin/src/permissions.js +0 -19
  372. package/admin/src/pluginId.js +0 -5
  373. package/admin/src/reducers.js +0 -8
  374. package/admin/src/utils/constants.js +0 -25
  375. package/admin/src/utils/getApiUrl.js +0 -5
  376. package/admin/src/utils/getMessage.js +0 -21
  377. package/admin/src/utils/getRelatedGroups.js +0 -3
  378. package/admin/src/utils/getUrl.js +0 -5
  379. package/admin/src/utils/handleAPIError.js +0 -16
  380. package/admin/src/utils/index.js +0 -11
  381. package/admin/src/utils/parseRegExp.js +0 -10
  382. package/admin/src/utils/renderEntryTitle.js +0 -14
  383. package/admin/src/utils/renderInitials.js +0 -5
  384. package/admin/src/utils/resolveCommentStatus.js +0 -30
  385. package/admin/src/utils/resolveCommentStatusColor.js +0 -22
  386. package/content-types/comment.js +0 -93
  387. package/content-types/index.js +0 -11
  388. package/content-types/report.js +0 -54
  389. package/jest.config.js +0 -7
  390. package/permissions.js +0 -19
  391. package/server/config/index.js +0 -17
  392. package/server/controllers/admin.js +0 -168
  393. package/server/controllers/client.js +0 -114
  394. package/server/controllers/index.js +0 -9
  395. package/server/controllers/utils/__tests__/functions.test.js +0 -43
  396. package/server/controllers/utils/__tests__/parsers.test.js +0 -94
  397. package/server/controllers/utils/functions.js +0 -19
  398. package/server/controllers/utils/parsers.js +0 -23
  399. package/server/destroy.js +0 -5
  400. package/server/graphql/index.js +0 -25
  401. package/server/graphql/mutations/createAbuseReport.js +0 -25
  402. package/server/graphql/mutations/createComment.js +0 -25
  403. package/server/graphql/mutations/index.js +0 -21
  404. package/server/graphql/mutations/removeComment.js +0 -25
  405. package/server/graphql/mutations/updateComment.js +0 -25
  406. package/server/graphql/queries/findAllFlat.js +0 -35
  407. package/server/graphql/queries/findAllInHierarchy.js +0 -31
  408. package/server/graphql/queries/index.js +0 -19
  409. package/server/graphql/resolvers-config.js +0 -13
  410. package/server/graphql/types/comment-author.js +0 -9
  411. package/server/graphql/types/comment-nested.js +0 -16
  412. package/server/graphql/types/comment.js +0 -15
  413. package/server/graphql/types/create-comment-author.js +0 -9
  414. package/server/graphql/types/create-comment.js +0 -9
  415. package/server/graphql/types/create-report.js +0 -9
  416. package/server/graphql/types/id.js +0 -24
  417. package/server/graphql/types/identify-comment-author.js +0 -6
  418. package/server/graphql/types/index.js +0 -19
  419. package/server/graphql/types/remove-comment.js +0 -8
  420. package/server/graphql/types/report-reason.js +0 -10
  421. package/server/graphql/types/report.js +0 -11
  422. package/server/graphql/types/response-find-all.js +0 -7
  423. package/server/graphql/types/response-meta.js +0 -6
  424. package/server/graphql/types/response-pagination.js +0 -11
  425. package/server/graphql/types/update-comment.js +0 -9
  426. package/server/index.js +0 -22
  427. package/server/register.js +0 -5
  428. package/server/routes/admin.js +0 -124
  429. package/server/routes/client.js +0 -52
  430. package/server/routes/index.js +0 -15
  431. package/server/services/__tests__/common.test.js +0 -399
  432. package/server/services/admin.js +0 -296
  433. package/server/services/client.js +0 -263
  434. package/server/services/common.js +0 -295
  435. package/server/services/index.js +0 -13
  436. package/server/services/utils/__tests__/functions.test.js +0 -53
  437. package/server/services/utils/functions.js +0 -112
  438. package/server/utils/__tests__/functions.test.js +0 -17
  439. package/server/utils/constants.js +0 -26
  440. package/server/utils/error.js +0 -24
  441. package/server/utils/functions.js +0 -19
  442. package/strapi-admin.js +0 -3
  443. package/strapi-server.js +0 -49
@@ -1,24 +1,26 @@
1
- 'use strict';
1
+ import { Primitive, StrapiContext } from "strapi-typed";
2
+ import { IServiceGraphQL, ToBeFixed } from "../../types";
2
3
 
3
- const { has, propEq, isNil, isDate, isObject } = require('lodash/fp');
4
- const { inputObjectType } = require('nexus');
4
+ import { has, propEq, isNil, isDate, isObject } from "lodash/fp";
5
+ import { inputObjectType } from "nexus";
5
6
 
6
- const virtualScalarAttributes = ['id'];
7
+ const virtualScalarAttributes = ["id"];
7
8
 
8
- module.exports = ({ strapi }) => {
9
- const { service: getService } = strapi.plugin('graphql');
9
+ export = ({ strapi }: StrapiContext): IServiceGraphQL => {
10
+ const { service: getService } = strapi.plugin("graphql");
10
11
 
11
12
  const rootLevelOperators = () => {
12
- const { operators } = strapi.plugin('graphql').service('builders').filters;
13
+ const { operators } = strapi.plugin("graphql").service("builders").filters;
13
14
 
14
15
  return [operators.and, operators.or, operators.not];
15
16
  };
16
17
 
17
- const buildContentTypeFilters = contentType => {
18
- const utils = strapi.plugin('graphql').service('utils');
19
- const extension = strapi.plugin('graphql').service('extension');
18
+ const buildContentTypeFilters = (contentType: ToBeFixed) => {
19
+ const utils = strapi.plugin("graphql").service("utils");
20
+ const extension = strapi.plugin("graphql").service("extension");
20
21
 
21
- const { getFiltersInputTypeName, getScalarFilterInputTypeName } = utils.naming;
22
+ const { getFiltersInputTypeName, getScalarFilterInputTypeName } =
23
+ utils.naming;
22
24
  const { isStrapiScalar, isRelation } = utils.attributes;
23
25
 
24
26
  const { attributes } = contentType;
@@ -29,20 +31,21 @@ module.exports = ({ strapi }) => {
29
31
  name: filtersTypeName,
30
32
 
31
33
  definition(t) {
32
- const validAttributes = Object.entries(attributes).filter(([attributeName]) =>
33
- extension
34
- .shadowCRUD(contentType.uid)
35
- .field(attributeName)
36
- .hasFiltersEnabeld()
34
+ const validAttributes = Object.entries(attributes).filter(
35
+ ([attributeName]) =>
36
+ extension
37
+ .shadowCRUD(contentType.uid)
38
+ .field(attributeName)
39
+ .hasFiltersEnabeld()
37
40
  );
38
41
 
39
42
  const isIDFilterEnabled = extension
40
43
  .shadowCRUD(contentType.uid)
41
- .field('id')
44
+ .field("id")
42
45
  .hasFiltersEnabeld();
43
46
  // Add an ID filter to the collection types
44
- if (contentType.kind === 'collectionType' && isIDFilterEnabled) {
45
- t.field('id', { type: getScalarFilterInputTypeName('ID') });
47
+ if (contentType.kind === "collectionType" && isIDFilterEnabled) {
48
+ t.field("id", { type: getScalarFilterInputTypeName("ID") });
46
49
  }
47
50
 
48
51
  // Add every defined attribute
@@ -66,21 +69,31 @@ module.exports = ({ strapi }) => {
66
69
  });
67
70
  };
68
71
 
69
- const addScalarAttribute = (builder, attributeName, attribute) => {
70
- const { naming, mappers } = strapi.plugin('graphql').service('utils');
72
+ const addScalarAttribute = (
73
+ builder: ToBeFixed,
74
+ attributeName: string,
75
+ attribute: ToBeFixed
76
+ ): void => {
77
+ const { naming, mappers } = strapi.plugin("graphql").service("utils");
71
78
 
72
79
  const gqlType = mappers.strapiScalarToGraphQLScalar(attribute.type);
73
80
 
74
- builder.field(attributeName, { type: naming.getScalarFilterInputTypeName(gqlType) });
81
+ builder.field(attributeName, {
82
+ type: naming.getScalarFilterInputTypeName(gqlType),
83
+ });
75
84
  };
76
85
 
77
- const addRelationalAttribute = (builder, attributeName, attribute) => {
78
- const utils = strapi.plugin('graphql').service('utils');
79
- const extension = strapi.plugin('graphql').service('extension');
86
+ const addRelationalAttribute = (
87
+ builder: ToBeFixed,
88
+ attributeName: string,
89
+ attribute: ToBeFixed
90
+ ): void => {
91
+ const utils = strapi.plugin("graphql").service("utils");
92
+ const extension = strapi.plugin("graphql").service("extension");
80
93
  const { getFiltersInputTypeName } = utils.naming;
81
94
  const { isMorphRelation } = utils.attributes;
82
95
 
83
- const model = strapi.getModel(attribute.target);
96
+ const model = strapi.getModel<ToBeFixed>(attribute.target);
84
97
 
85
98
  // If there is no model corresponding to the attribute configuration
86
99
  // or if the attribute is a polymorphic relation, then ignore it
@@ -92,8 +105,8 @@ module.exports = ({ strapi }) => {
92
105
  builder.field(attributeName, { type: getFiltersInputTypeName(model) });
93
106
  };
94
107
 
95
- const recursivelyReplaceScalarOperators = data => {
96
- const { operators } = getService('builders').filters;
108
+ const recursivelyReplaceScalarOperators = (data: ToBeFixed): ToBeFixed => {
109
+ const { operators } = getService("builders").filters;
97
110
 
98
111
  if (Array.isArray(data)) {
99
112
  return data.map(recursivelyReplaceScalarOperators);
@@ -105,12 +118,12 @@ module.exports = ({ strapi }) => {
105
118
  return data;
106
119
  }
107
120
 
108
- const result = {};
121
+ const result: ToBeFixed = {};
109
122
 
110
123
  for (const [key, value] of Object.entries(data)) {
111
124
  const isOperator = !!operators[key];
112
125
 
113
- const newKey = isOperator ? operators[key].strapiOperator : key;
126
+ const newKey: string = isOperator ? operators[key].strapiOperator : key;
114
127
 
115
128
  result[newKey] = recursivelyReplaceScalarOperators(value);
116
129
  }
@@ -118,9 +131,13 @@ module.exports = ({ strapi }) => {
118
131
  return result;
119
132
  };
120
133
 
121
- const graphQLFiltersToStrapiQuery = (filters, contentType = {}) => {
122
- const { isStrapiScalar, isMedia, isRelation } = getService('utils').attributes;
123
- const { operators } = getService('builders').filters;
134
+ const graphQLFiltersToStrapiQuery = (
135
+ filters: ToBeFixed,
136
+ contentType: ToBeFixed = {}
137
+ ): Array<ToBeFixed> | ToBeFixed => {
138
+ const { isStrapiScalar, isMedia, isRelation } =
139
+ getService("utils").attributes;
140
+ const { operators } = getService("builders").filters;
124
141
 
125
142
  const ROOT_LEVEL_OPERATORS = [operators.and, operators.or, operators.not];
126
143
 
@@ -131,25 +148,31 @@ module.exports = ({ strapi }) => {
131
148
 
132
149
  // If filters is a collection, then apply the transformation to every item of the list
133
150
  if (Array.isArray(filters)) {
134
- return filters.map(filtersItem =>
151
+ return filters.map((filtersItem) =>
135
152
  graphQLFiltersToStrapiQuery(filtersItem, contentType)
136
153
  );
137
154
  }
138
155
 
139
- const resultMap = {};
156
+ const resultMap: ToBeFixed = {};
140
157
  const { attributes } = contentType;
141
158
 
142
- const isAttribute = attributeName => {
143
- return virtualScalarAttributes.includes(attributeName) || has(attributeName, attributes);
159
+ const isAttribute = (attributeName: string): boolean => {
160
+ return (
161
+ virtualScalarAttributes.includes(attributeName) ||
162
+ has(attributeName, attributes)
163
+ );
144
164
  };
145
165
 
146
166
  for (const [key, value] of Object.entries(filters)) {
147
167
  // If the key is an attribute, update the value
148
168
  if (isAttribute(key)) {
149
- const attribute = attributes[key];
169
+ const attribute: Primitive | ToBeFixed = attributes[key];
150
170
 
151
171
  // If it's a scalar attribute
152
- if (virtualScalarAttributes.includes(key) || isStrapiScalar(attribute)) {
172
+ if (
173
+ virtualScalarAttributes.includes(key) ||
174
+ isStrapiScalar(attribute)
175
+ ) {
153
176
  // Replace (recursively) every GraphQL scalar operator with the associated Strapi operator
154
177
  resultMap[key] = recursivelyReplaceScalarOperators(value);
155
178
  }
@@ -167,7 +190,9 @@ module.exports = ({ strapi }) => {
167
190
 
168
191
  // Handle the case where the key is not an attribute (operator, ...)
169
192
  else {
170
- const rootLevelOperator = ROOT_LEVEL_OPERATORS.find(propEq('fieldName', key));
193
+ const rootLevelOperator = ROOT_LEVEL_OPERATORS.find(
194
+ propEq("fieldName", key)
195
+ );
171
196
 
172
197
  // If it's a root level operator (AND, NOT, OR, ...)
173
198
  if (rootLevelOperator) {
@@ -175,7 +200,10 @@ module.exports = ({ strapi }) => {
175
200
 
176
201
  // Transform the current value recursively and add it to the resultMap
177
202
  // object using the strapiOperator equivalent of the GraphQL key
178
- resultMap[strapiOperator] = graphQLFiltersToStrapiQuery(value, contentType);
203
+ resultMap[strapiOperator] = graphQLFiltersToStrapiQuery(
204
+ value,
205
+ contentType
206
+ );
179
207
  }
180
208
  }
181
209
  }
@@ -183,8 +211,9 @@ module.exports = ({ strapi }) => {
183
211
  return resultMap;
184
212
  };
185
213
 
186
- return {
214
+ const serviceMethods: IServiceGraphQL = {
187
215
  buildContentTypeFilters,
188
216
  graphQLFiltersToStrapiQuery,
189
217
  };
190
- };
218
+ return serviceMethods;
219
+ };
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+
3
+ import adminServices from "./admin";
4
+ import clientServices from "./client";
5
+ import commonServices from "./common";
6
+ import graphQLService from "./graphql";
7
+
8
+ export default {
9
+ admin: adminServices,
10
+ client: clientServices,
11
+ common: commonServices,
12
+ gql: graphQLService,
13
+ };
@@ -0,0 +1,150 @@
1
+ import { Id, IStrapi, StrapiUser } from "strapi-typed";
2
+ import { Comment, CommentAuthor, ToBeFixed } from "../../../types";
3
+
4
+ import PluginError from "./../../utils/error";
5
+ import { REGEX } from "./../../utils/constants";
6
+ import { first, get, isObject, isArray, isEmpty, isString } from "lodash";
7
+
8
+ declare var strapi: IStrapi;
9
+
10
+ export const buildNestedStructure = (
11
+ entities: Array<Comment>,
12
+ id: Id | null = null,
13
+ field: string = "threadOf",
14
+ dropBlockedThreads = false,
15
+ blockNestedThreads = false
16
+ ): Array<Comment> =>
17
+ entities
18
+ .filter((entity: Comment) => {
19
+ // mongo by default not return `null` for empty data
20
+ const entityField: any = get(entity, field);
21
+ if (entityField === null && id === null) {
22
+ return true;
23
+ }
24
+ let data = entityField;
25
+ if (data && typeof id === "string") {
26
+ data = data.toString();
27
+ }
28
+ return (
29
+ (data && data === id) ||
30
+ (isObject(entityField) && (entityField as any).id === id)
31
+ );
32
+ })
33
+ .map((entity: Comment) => ({
34
+ ...entity,
35
+ [field]: undefined,
36
+ related: undefined,
37
+ blockedThread: blockNestedThreads || entity.blockedThread,
38
+ children:
39
+ entity.blockedThread && dropBlockedThreads
40
+ ? []
41
+ : buildNestedStructure(
42
+ entities,
43
+ entity.id,
44
+ field,
45
+ dropBlockedThreads,
46
+ entity.blockedThread
47
+ ),
48
+ }));
49
+
50
+ export const isEqualEntity = (
51
+ existing: Comment,
52
+ data: ToBeFixed,
53
+ user: StrapiUser
54
+ ): boolean => {
55
+ const { author: existingAuthor = {} as CommentAuthor } = existing;
56
+ const { author } = data;
57
+
58
+ // Disallow approval status change by Client
59
+ if (data.approvalStatus && existing.approvalStatus !== data.approvalStatus) {
60
+ return false;
61
+ }
62
+
63
+ // Make sure that author is exact the same
64
+ if (user) {
65
+ const existingUserId = existingAuthor?.id || existingAuthor;
66
+ const receivedUserId = user?.id || author?.id;
67
+ return receivedUserId && existingUserId === receivedUserId;
68
+ }
69
+ return existingAuthor.id === author?.id;
70
+ };
71
+
72
+ export const getRelatedGroups = (related: string): Array<string> =>
73
+ related.split(REGEX.relatedUid).filter((s) => s && s.length > 0);
74
+
75
+ export const getModelUid = (name: string): string => {
76
+ return strapi.plugin("comments").contentTypes[name]?.uid;
77
+ };
78
+
79
+ export const filterOurResolvedReports = (item: Comment): Comment =>
80
+ item
81
+ ? {
82
+ ...item,
83
+ reports: (item.reports || []).filter((report) => !report.resolved),
84
+ }
85
+ : item;
86
+
87
+ export const convertContentTypeNameToSlug = (str: string): string => {
88
+ const plainConversion = str.replace(
89
+ /[A-Z]/g,
90
+ (letter) => `-${letter.toLowerCase()}`
91
+ );
92
+ return first(plainConversion) === "-"
93
+ ? plainConversion.slice(1, plainConversion.length)
94
+ : plainConversion;
95
+ };
96
+
97
+ export const buildAuthorModel = (
98
+ item: Comment,
99
+ fieldsToPopulate: Array<string> = []
100
+ ): Comment => {
101
+ const {
102
+ authorUser,
103
+ authorId,
104
+ authorName,
105
+ authorEmail,
106
+ authorAvatar,
107
+ ...rest
108
+ } = item;
109
+ let author: CommentAuthor = {} as CommentAuthor;
110
+ if (authorUser) {
111
+ author = fieldsToPopulate.reduce(
112
+ (prev, curr) => ({
113
+ ...prev,
114
+ [curr]: authorUser[curr],
115
+ }),
116
+ {
117
+ id: authorUser.id,
118
+ name: authorUser.username,
119
+ email: authorUser.email,
120
+ avatar:
121
+ isString(authorUser.avatar) || isObject(authorUser.avatar)
122
+ ? authorUser.avatar
123
+ : undefined,
124
+ }
125
+ );
126
+ } else if (authorId) {
127
+ author = {
128
+ id: authorId,
129
+ name: authorName,
130
+ email: authorEmail,
131
+ avatar: authorAvatar,
132
+ };
133
+ }
134
+ return {
135
+ ...rest,
136
+ author: isEmpty(author) ? undefined : author,
137
+ };
138
+ };
139
+
140
+ export const buildConfigQueryProp = (
141
+ prop: undefined | string | Array<string> = ""
142
+ ): string => (isArray(prop) ? prop.join(".") : prop ?? "");
143
+
144
+ export const resolveUserContextError = (user: StrapiUser): PluginError => {
145
+ if (user) {
146
+ throw new PluginError(401, "Not authenticated");
147
+ } else {
148
+ throw new PluginError(403, "Not authorized");
149
+ }
150
+ };
@@ -0,0 +1,23 @@
1
+ import { ConfigParamKeys, RegExpCollection } from "../../types";
2
+
3
+ export const CONFIG_PARAMS: ConfigParamKeys = {
4
+ ENABLED_COLLECTIONS: "enabledCollections",
5
+ APPROVAL_FLOW: "approvalFlow",
6
+ ENTRY_LABEL: "entryLabel",
7
+ MODERATOR_ROLES: "moderatorRoles",
8
+ BAD_WORDS: "badWords",
9
+ };
10
+
11
+ export const APPROVAL_STATUS = {
12
+ PENDING: "PENDING",
13
+ APPROVED: "APPROVED",
14
+ REJECTED: "REJECTED",
15
+ };
16
+
17
+ export const REGEX: RegExpCollection = {
18
+ uid: /^(?<type>[a-z0-9-]+)\:{2}(?<api>[a-z0-9-]+)\.{1}(?<contentType>[a-z0-9-]+)$/i,
19
+ relatedUid:
20
+ /^(?<uid>[a-z0-9-]+\:{2}[a-z0-9-]+\.[a-z0-9-]+)\:{1}(?<id>[a-z0-9-]+)$/i,
21
+ email: /\S+@\S+\.\S+/,
22
+ sorting: /^(?<path>[a-z0-9-_\:\.]+)\:+(asc|desc)$/i,
23
+ };
@@ -0,0 +1,44 @@
1
+ type ErrorPayload =
2
+ | {
3
+ [key: string]: any;
4
+ }
5
+ | undefined;
6
+
7
+ interface IPluginError extends Error {
8
+ status: number;
9
+ payload: ErrorPayload;
10
+ }
11
+
12
+ export default class PluginError extends Error implements IPluginError {
13
+ status: number;
14
+ payload: ErrorPayload;
15
+
16
+ constructor(
17
+ status: number,
18
+ message: string,
19
+ payload: ErrorPayload = undefined
20
+ ) {
21
+ super();
22
+ this.name = "Strapi:Plugin:Comments";
23
+ this.status = status || 500;
24
+ this.message = message || "Internal error";
25
+ this.payload = payload;
26
+
27
+ Object.setPrototypeOf(this, PluginError.prototype);
28
+ }
29
+
30
+ toString(e: PluginError = this): string {
31
+ return `${e.name} - ${e.message}`;
32
+ }
33
+
34
+ toJSON() {
35
+ if (this.payload) {
36
+ return {
37
+ name: this.name,
38
+ message: this.message,
39
+ ...(this.payload || {}),
40
+ };
41
+ }
42
+ return this;
43
+ }
44
+ }
@@ -0,0 +1,55 @@
1
+ import {
2
+ StrapiQueryParams,
3
+ StrapiQueryParamsParsed,
4
+ IStrapi,
5
+ } from "strapi-typed";
6
+ import PluginError from "./error";
7
+
8
+ declare var strapi: IStrapi;
9
+
10
+ export const getPluginService = <T>(name: string): T =>
11
+ strapi.plugin("comments").service(name);
12
+
13
+ export const parseParams = <T = StrapiQueryParamsParsed>(
14
+ params: StrapiQueryParams
15
+ ): T =>
16
+ Object.keys(params).reduce((prev: T, curr: string) => {
17
+ const value = params[curr];
18
+ const parsedValue = Number(value);
19
+ return {
20
+ ...prev,
21
+ [curr]: isNaN(parsedValue) ? value : parsedValue,
22
+ };
23
+ }, {} as unknown as T);
24
+
25
+ export const assertParamsPresent: <T>(
26
+ params: unknown,
27
+ keys: string[]
28
+ ) => asserts params is T = (params, keys) => {
29
+ const missingParams =
30
+ params instanceof Object
31
+ ? keys.filter((key) => !params.hasOwnProperty(key))
32
+ : keys;
33
+
34
+ if (missingParams.length === 0) {
35
+ return;
36
+ }
37
+
38
+ throw new PluginError(
39
+ 400,
40
+ `Expected params missing: ${missingParams.join(", ")}`
41
+ );
42
+ };
43
+
44
+ export const assertNotEmpty: <T>(
45
+ value: T | null | undefined,
46
+ customError?: Error
47
+ ) => asserts value is T = (value, customError) => {
48
+ if (value) {
49
+ return;
50
+ }
51
+
52
+ throw (
53
+ customError ?? new PluginError(400, "Non-empty value expected, empty given")
54
+ );
55
+ };
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+
3
+ import admin from "./admin/src";
4
+
5
+ export default admin;
@@ -0,0 +1,77 @@
1
+ import { PropType } from "strapi-typed";
2
+ import { CommentsPluginConfig } from "./types";
3
+
4
+ import { isArray, isEmpty, isString } from "lodash";
5
+
6
+ import { REGEX, CONFIG_PARAMS } from "./server/utils/constants";
7
+ import server from "./server";
8
+ import contentTypes from "./content-types";
9
+
10
+ export = () => ({
11
+ ...server,
12
+ contentTypes,
13
+ config: {
14
+ ...server.config,
15
+ default: () => ({
16
+ ...server.config.default,
17
+ }),
18
+ validator: (config: CommentsPluginConfig) => {
19
+ // Check enabledCollections values
20
+ const enabledCollections: PropType<
21
+ CommentsPluginConfig,
22
+ "enabledCollections"
23
+ > = config[CONFIG_PARAMS.ENABLED_COLLECTIONS];
24
+ const enabledCollectionsValid: boolean =
25
+ enabledCollections.filter((_: string) => !REGEX.uid.test(_)).length ===
26
+ 0;
27
+
28
+ if (!enabledCollectionsValid) {
29
+ throw new Error(
30
+ `'enabledCollections' must contain Content Types identifiers in the format like 'api::<collection name>.<content type name>'`
31
+ );
32
+ }
33
+
34
+ // Check moderatorRoles values
35
+ const moderatorRoles: PropType<CommentsPluginConfig, "moderatorRoles"> =
36
+ config[CONFIG_PARAMS.MODERATOR_ROLES];
37
+ const moderatorRolesValid: boolean =
38
+ moderatorRoles.filter((_: string) => !isString(_)).length === 0;
39
+
40
+ if (!moderatorRolesValid) {
41
+ throw new Error(`'moderatorRoles' must roles keys`);
42
+ }
43
+
44
+ // Check approvalFlow values
45
+ const approvalFlow: PropType<CommentsPluginConfig, "approvalFlow"> =
46
+ config[CONFIG_PARAMS.APPROVAL_FLOW];
47
+ const approvalFlowValid: boolean =
48
+ approvalFlow.filter((_: string) => !REGEX.uid.test(_)).length === 0;
49
+ if (!approvalFlowValid) {
50
+ throw new Error(
51
+ `'approvalFlow' must contain Content Types identifiers in the format like 'api::<collection name>.<content type name>'`
52
+ );
53
+ }
54
+
55
+ // Check entryLabel keys and values
56
+ const entryLabels: PropType<CommentsPluginConfig, "entryLabel"> =
57
+ config[CONFIG_PARAMS.ENTRY_LABEL];
58
+ const entryLabelKeysValid: boolean =
59
+ Object.keys(entryLabels)
60
+ .filter((_: string) => _ !== "*")
61
+ .filter(
62
+ (_: string) =>
63
+ !(
64
+ REGEX.uid.test(_) &&
65
+ isArray(entryLabels[_]) &&
66
+ !isEmpty(entryLabels[_])
67
+ )
68
+ ).length === 0;
69
+
70
+ if (!entryLabelKeysValid) {
71
+ throw new Error(
72
+ `'entryLabel' must contain records in the format like 'api::<collection name>.<content type name>': ['Field1', 'field_2']`
73
+ );
74
+ }
75
+ },
76
+ },
77
+ });
package/tsconfig.json ADDED
@@ -0,0 +1,38 @@
1
+ {
2
+ "compilerOptions": {
3
+ "rootDir": "./",
4
+ "outDir": "build",
5
+ "target": "esnext",
6
+ "module": "commonjs",
7
+ "jsx": "react",
8
+ "moduleResolution": "node",
9
+ "allowSyntheticDefaultImports": true,
10
+ "esModuleInterop": true,
11
+ "strict": true,
12
+ "noUnusedLocals": true,
13
+ "noUnusedParameters": true,
14
+ "removeComments": true,
15
+ "sourceMap": true,
16
+ "declaration": true,
17
+ "declarationMap": true,
18
+ "downlevelIteration": true,
19
+ "incremental": true,
20
+ "allowJs": true,
21
+ "skipLibCheck": true,
22
+ "resolveJsonModule": true
23
+ },
24
+ "include": [
25
+ "./server/**/*",
26
+ "./admin/**/*",
27
+ "./strapi-server.*",
28
+ "./strapi-admin.*",
29
+ "./setup-package.ts",
30
+ "./permissions.*"
31
+ ],
32
+ "exclude": [
33
+ "**/node_modules/**/*",
34
+ "**/__tests__/**/*",
35
+ "**/__mocks__/**/*",
36
+ "**/build/**/*"
37
+ ]
38
+ }
@@ -0,0 +1 @@
1
+ export type ToBeFixed = any;
@@ -0,0 +1,35 @@
1
+ import { StrapiPluginConfig, TypeResult } from "strapi-typed";
2
+ import { RegExpCollection } from "./constants";
3
+
4
+ export type CommentsPluginConfig = StrapiPluginConfig<{
5
+ enabledCollections: Array<string>;
6
+ moderatorRoles: Array<string>;
7
+ approvalFlow: Array<string>;
8
+ entryLabel: PluginConfigEntryLabels;
9
+ reportReasons: PluginConfigReportReasons;
10
+ badWords?: boolean;
11
+ }>;
12
+
13
+ export type PluginConfigKeys = keyof CommentsPluginConfig;
14
+
15
+ export type ViewCommentsPluginConfig = {
16
+ approvalFlow: TypeResult<SettingsCommentsPluginConfig["approvalFlow"]>;
17
+ entryLabel: TypeResult<SettingsCommentsPluginConfig["entryLabel"]>;
18
+ reportReasons: TypeResult<SettingsCommentsPluginConfig["reportReasons"]>;
19
+ regex?: RegExpCollection;
20
+ };
21
+
22
+ export type SettingsCommentsPluginConfig = CommentsPluginConfig & {
23
+ isGQLPluginEnabled?: boolean;
24
+ regex?: RegExpCollection;
25
+ };
26
+
27
+ export type AnyConfig = ViewCommentsPluginConfig | SettingsCommentsPluginConfig;
28
+
29
+ export type StrapiConfig = {
30
+ default: CommentsPluginConfig;
31
+ };
32
+
33
+ export type ConfigParamKeys = {
34
+ [key: string]: PluginConfigKeys;
35
+ };
@@ -0,0 +1,3 @@
1
+ export type RegExpCollection = {
2
+ [key: string]: RegExp;
3
+ };