@akemona-org/strapi-plugin-content-manager 3.7.0

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 (401) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +27 -0
  3. package/admin/src/InjectedComponents/ContentTypeBuilder/ConfigureViewButton/index.js +78 -0
  4. package/admin/src/assets/images/background_input.svg +1 -0
  5. package/admin/src/assets/images/icon-cross-blue.svg +1 -0
  6. package/admin/src/assets/images/icon_remove.svg +19 -0
  7. package/admin/src/assets/images/logo.svg +1 -0
  8. package/admin/src/components/AddDropdown/components.js +113 -0
  9. package/admin/src/components/AddDropdown/index.js +76 -0
  10. package/admin/src/components/Block/components.js +28 -0
  11. package/admin/src/components/Block/index.js +45 -0
  12. package/admin/src/components/ComponentInitializer/P.js +9 -0
  13. package/admin/src/components/ComponentInitializer/index.js +43 -0
  14. package/admin/src/components/Container/index.js +7 -0
  15. package/admin/src/components/CustomInputCheckbox/components.js +77 -0
  16. package/admin/src/components/CustomInputCheckbox/index.js +53 -0
  17. package/admin/src/components/CustomTable/ActionCollapse/Delete.js +14 -0
  18. package/admin/src/components/CustomTable/ActionCollapse/DeleteAll.js +18 -0
  19. package/admin/src/components/CustomTable/ActionCollapse/Wrapper.js +20 -0
  20. package/admin/src/components/CustomTable/ActionCollapse/index.js +38 -0
  21. package/admin/src/components/CustomTable/Headers/Header.js +59 -0
  22. package/admin/src/components/CustomTable/Headers/Thead.js +35 -0
  23. package/admin/src/components/CustomTable/Headers/index.js +46 -0
  24. package/admin/src/components/CustomTable/Row/ActionContainer.js +19 -0
  25. package/admin/src/components/CustomTable/Row/Cell.js +55 -0
  26. package/admin/src/components/CustomTable/Row/index.js +112 -0
  27. package/admin/src/components/CustomTable/index.js +162 -0
  28. package/admin/src/components/CustomTable/styledComponents.js +85 -0
  29. package/admin/src/components/DragLayer/index.js +102 -0
  30. package/admin/src/components/DraggedField/Close/index.js +10 -0
  31. package/admin/src/components/DraggedField/GrabWrapper.js +38 -0
  32. package/admin/src/components/DraggedField/Link.js +17 -0
  33. package/admin/src/components/DraggedField/NameWrapper.js +29 -0
  34. package/admin/src/components/DraggedField/RemoveWrapper.js +32 -0
  35. package/admin/src/components/DraggedField/SubWrapper.js +36 -0
  36. package/admin/src/components/DraggedField/Wrapper.js +134 -0
  37. package/admin/src/components/DraggedField/index.js +196 -0
  38. package/admin/src/components/DraggedField/utils/getColor.js +12 -0
  39. package/admin/src/components/DraggedField/utils/getHeight.js +3 -0
  40. package/admin/src/components/DraggedFieldWithPreview/Carret.js +24 -0
  41. package/admin/src/components/DraggedFieldWithPreview/DynamicComponent.js +70 -0
  42. package/admin/src/components/DraggedFieldWithPreview/DynamicZoneWrapper.js +10 -0
  43. package/admin/src/components/DraggedFieldWithPreview/Tooltip.js +19 -0
  44. package/admin/src/components/DraggedFieldWithPreview/Wrapper.js +24 -0
  45. package/admin/src/components/DraggedFieldWithPreview/index.js +194 -0
  46. package/admin/src/components/DynamicComponentCard/Wrapper.js +63 -0
  47. package/admin/src/components/DynamicComponentCard/index.js +49 -0
  48. package/admin/src/components/DynamicZone/BaselineAlignement.js +11 -0
  49. package/admin/src/components/DynamicZone/Button.js +31 -0
  50. package/admin/src/components/DynamicZone/Component/RoundCTA.js +45 -0
  51. package/admin/src/components/DynamicZone/Component/index.js +79 -0
  52. package/admin/src/components/DynamicZone/ComponentWrapper.js +44 -0
  53. package/admin/src/components/DynamicZone/DynamicZoneWrapper.js +12 -0
  54. package/admin/src/components/DynamicZone/Label.js +42 -0
  55. package/admin/src/components/DynamicZone/Picker/Category/Banner/Wrapper.js +78 -0
  56. package/admin/src/components/DynamicZone/Picker/Category/Banner/index.js +33 -0
  57. package/admin/src/components/DynamicZone/Picker/Category/index.js +53 -0
  58. package/admin/src/components/DynamicZone/Picker/Wrapper.js +32 -0
  59. package/admin/src/components/DynamicZone/Picker/index.js +88 -0
  60. package/admin/src/components/DynamicZone/Wrapper.js +34 -0
  61. package/admin/src/components/DynamicZone/index.js +238 -0
  62. package/admin/src/components/DynamicZone/utils/connect.js +12 -0
  63. package/admin/src/components/DynamicZone/utils/select.js +49 -0
  64. package/admin/src/components/FieldComponent/ComponentIcon.js +44 -0
  65. package/admin/src/components/FieldComponent/EmptyComponent.js +19 -0
  66. package/admin/src/components/FieldComponent/Label.js +10 -0
  67. package/admin/src/components/FieldComponent/ResetComponent.js +41 -0
  68. package/admin/src/components/FieldComponent/Wrapper.js +18 -0
  69. package/admin/src/components/FieldComponent/index.js +171 -0
  70. package/admin/src/components/FieldComponent/utils/connect.js +12 -0
  71. package/admin/src/components/FieldComponent/utils/select.js +123 -0
  72. package/admin/src/components/FieldsReorder/Item.js +249 -0
  73. package/admin/src/components/FieldsReorder/components.js +8 -0
  74. package/admin/src/components/FieldsReorder/index.js +102 -0
  75. package/admin/src/components/FilterOptionsCTA/index.js +14 -0
  76. package/admin/src/components/FilterPicker/components.js +56 -0
  77. package/admin/src/components/FilterPicker/index.js +258 -0
  78. package/admin/src/components/FilterPicker/init.js +25 -0
  79. package/admin/src/components/FilterPicker/reducer.js +58 -0
  80. package/admin/src/components/FilterPickerOption/Input.js +58 -0
  81. package/admin/src/components/FilterPickerOption/Option.js +18 -0
  82. package/admin/src/components/FilterPickerOption/components.js +60 -0
  83. package/admin/src/components/FilterPickerOption/index.js +101 -0
  84. package/admin/src/components/FormTitle/index.js +26 -0
  85. package/admin/src/components/FormWrapper/index.js +20 -0
  86. package/admin/src/components/InputJSON/components.js +30 -0
  87. package/admin/src/components/InputJSON/index.js +184 -0
  88. package/admin/src/components/InputJSON/jsonlint.js +424 -0
  89. package/admin/src/components/InputJSONWithErrors/Wrapper.js +32 -0
  90. package/admin/src/components/InputJSONWithErrors/index.js +168 -0
  91. package/admin/src/components/InputUID/InputUID.js +26 -0
  92. package/admin/src/components/InputUID/Options/Option.js +22 -0
  93. package/admin/src/components/InputUID/Options/OptionsTitle.js +12 -0
  94. package/admin/src/components/InputUID/Options/RightOptionLabel.js +10 -0
  95. package/admin/src/components/InputUID/Options/index.js +34 -0
  96. package/admin/src/components/InputUID/Options/wrapper.js +13 -0
  97. package/admin/src/components/InputUID/RegenerateButton.js +18 -0
  98. package/admin/src/components/InputUID/RightContent.js +14 -0
  99. package/admin/src/components/InputUID/RightContentLabel.js +10 -0
  100. package/admin/src/components/InputUID/RightLabel.js +42 -0
  101. package/admin/src/components/InputUID/SubLabel.js +9 -0
  102. package/admin/src/components/InputUID/Wrapper.js +8 -0
  103. package/admin/src/components/InputUID/index.js +325 -0
  104. package/admin/src/components/InputUID/regex.js +3 -0
  105. package/admin/src/components/Inputs/index.js +283 -0
  106. package/admin/src/components/Inputs/utils/VALIDATIONS_TO_OMIT.js +12 -0
  107. package/admin/src/components/Inputs/utils/connect.js +12 -0
  108. package/admin/src/components/Inputs/utils/generateOptions.js +19 -0
  109. package/admin/src/components/Inputs/utils/getInputType.js +44 -0
  110. package/admin/src/components/Inputs/utils/getStep.js +15 -0
  111. package/admin/src/components/Inputs/utils/index.js +6 -0
  112. package/admin/src/components/Inputs/utils/select.js +38 -0
  113. package/admin/src/components/LayoutTitle/index.js +19 -0
  114. package/admin/src/components/MediaPreviewList/StyledMediaPreviewList.js +171 -0
  115. package/admin/src/components/MediaPreviewList/index.js +110 -0
  116. package/admin/src/components/NonRepeatableComponent/index.js +73 -0
  117. package/admin/src/components/NonRepeatableWrapper/index.js +73 -0
  118. package/admin/src/components/PlusButton/index.js +52 -0
  119. package/admin/src/components/PopupForm/index.js +93 -0
  120. package/admin/src/components/PreviewCarret/components.js +27 -0
  121. package/admin/src/components/PreviewCarret/index.js +22 -0
  122. package/admin/src/components/PreviewWysiwyg/Wrapper.js +133 -0
  123. package/admin/src/components/PreviewWysiwyg/index.js +34 -0
  124. package/admin/src/components/PreviewWysiwyg/utils/mdRenderer.js +72 -0
  125. package/admin/src/components/PreviewWysiwyg/utils/satinizeHtml.js +16 -0
  126. package/admin/src/components/RelationPreviewList/CountWrapper.js +7 -0
  127. package/admin/src/components/RelationPreviewList/RelationPreviewTooltip.js +117 -0
  128. package/admin/src/components/RelationPreviewList/index.js +111 -0
  129. package/admin/src/components/RepeatableComponent/AddFieldButton.js +64 -0
  130. package/admin/src/components/RepeatableComponent/Banner.js +112 -0
  131. package/admin/src/components/RepeatableComponent/BannerWrapper.js +194 -0
  132. package/admin/src/components/RepeatableComponent/CarretTop.js +14 -0
  133. package/admin/src/components/RepeatableComponent/DraggedItem/index.js +245 -0
  134. package/admin/src/components/RepeatableComponent/DraggedItem/utils/connect.js +11 -0
  135. package/admin/src/components/RepeatableComponent/DraggedItem/utils/index.js +2 -0
  136. package/admin/src/components/RepeatableComponent/DraggedItem/utils/select.js +30 -0
  137. package/admin/src/components/RepeatableComponent/EmptyComponent.js +27 -0
  138. package/admin/src/components/RepeatableComponent/FormWrapper.js +27 -0
  139. package/admin/src/components/RepeatableComponent/index.js +187 -0
  140. package/admin/src/components/RepeatableComponent/reducer.js +73 -0
  141. package/admin/src/components/RepeatableComponent/utils/connect.js +11 -0
  142. package/admin/src/components/RepeatableComponent/utils/select.js +12 -0
  143. package/admin/src/components/Search/index.js +88 -0
  144. package/admin/src/components/SectionTitle/Title.js +11 -0
  145. package/admin/src/components/SectionTitle/index.js +29 -0
  146. package/admin/src/components/SelectMany/ListItem.js +107 -0
  147. package/admin/src/components/SelectMany/Relation.js +106 -0
  148. package/admin/src/components/SelectMany/components.js +153 -0
  149. package/admin/src/components/SelectMany/index.js +159 -0
  150. package/admin/src/components/SelectOne/SingleValue.js +58 -0
  151. package/admin/src/components/SelectOne/index.js +71 -0
  152. package/admin/src/components/SelectWrapper/ClearIndicator.js +15 -0
  153. package/admin/src/components/SelectWrapper/IndicatorSeparator.js +3 -0
  154. package/admin/src/components/SelectWrapper/Option.js +76 -0
  155. package/admin/src/components/SelectWrapper/components.js +14 -0
  156. package/admin/src/components/SelectWrapper/index.js +393 -0
  157. package/admin/src/components/SelectWrapper/utils/connect.js +12 -0
  158. package/admin/src/components/SelectWrapper/utils/index.js +3 -0
  159. package/admin/src/components/SelectWrapper/utils/select.js +45 -0
  160. package/admin/src/components/SelectWrapper/utils/styles.js +105 -0
  161. package/admin/src/components/Separator/index.js +9 -0
  162. package/admin/src/components/SettingFormWrapper/index.js +9 -0
  163. package/admin/src/components/SettingsViewWrapper/index.js +283 -0
  164. package/admin/src/components/SortWrapper/index.js +9 -0
  165. package/admin/src/components/SortableList/Item.js +126 -0
  166. package/admin/src/components/SortableList/index.js +60 -0
  167. package/admin/src/components/State/Wrapper.js +30 -0
  168. package/admin/src/components/State/index.js +26 -0
  169. package/admin/src/components/Truncate/index.js +5 -0
  170. package/admin/src/components/Truncated/index.js +10 -0
  171. package/admin/src/components/Wysiwyg/EditorWrapper.js +122 -0
  172. package/admin/src/components/Wysiwyg/MediaLib.js +71 -0
  173. package/admin/src/components/Wysiwyg/PreviewControlWrapper.js +30 -0
  174. package/admin/src/components/Wysiwyg/SelectWrapper.js +24 -0
  175. package/admin/src/components/Wysiwyg/ToggleModeWrapper.js +30 -0
  176. package/admin/src/components/Wysiwyg/constants.js +98 -0
  177. package/admin/src/components/Wysiwyg/customSelect.js +39 -0
  178. package/admin/src/components/Wysiwyg/helpers.js +116 -0
  179. package/admin/src/components/Wysiwyg/index.js +819 -0
  180. package/admin/src/components/Wysiwyg/previewControl.js +29 -0
  181. package/admin/src/components/Wysiwyg/toggleMode.js +44 -0
  182. package/admin/src/components/Wysiwyg/utils.js +70 -0
  183. package/admin/src/components/WysiwygBottomControls/components.js +44 -0
  184. package/admin/src/components/WysiwygBottomControls/index.js +33 -0
  185. package/admin/src/components/WysiwygDropUpload/Label.js +16 -0
  186. package/admin/src/components/WysiwygDropUpload/index.js +18 -0
  187. package/admin/src/components/WysiwygEditor/index.js +26 -0
  188. package/admin/src/components/WysiwygInlineControls/Button.js +77 -0
  189. package/admin/src/components/WysiwygInlineControls/StyledButton.js +54 -0
  190. package/admin/src/components/WysiwygInlineControls/Wrapper.js +25 -0
  191. package/admin/src/components/WysiwygInlineControls/index.js +66 -0
  192. package/admin/src/components/WysiwygWithErrors/Wrapper.js +38 -0
  193. package/admin/src/components/WysiwygWithErrors/index.js +158 -0
  194. package/admin/src/containers/CollectionTypeFormWrapper/index.js +376 -0
  195. package/admin/src/containers/CollectionTypeFormWrapper/utils/getRequestUrl.js +5 -0
  196. package/admin/src/containers/CollectionTypeFormWrapper/utils/index.js +2 -0
  197. package/admin/src/containers/CollectionTypeRecursivePath/index.js +125 -0
  198. package/admin/src/containers/ComponentSetttingsView/index.js +55 -0
  199. package/admin/src/containers/EditSettingsView/index.js +408 -0
  200. package/admin/src/containers/EditSettingsView/init.js +18 -0
  201. package/admin/src/containers/EditSettingsView/reducer.js +126 -0
  202. package/admin/src/containers/EditSettingsView/utils/createPossibleMainFieldsForModelsAndComponents.js +26 -0
  203. package/admin/src/containers/EditSettingsView/utils/getInputProps.js +30 -0
  204. package/admin/src/containers/EditSettingsView/utils/index.js +2 -0
  205. package/admin/src/containers/EditSettingsView/utils/layout.js +98 -0
  206. package/admin/src/containers/EditView/DeleteLink/index.js +94 -0
  207. package/admin/src/containers/EditView/DeleteLink/utils/connect.js +12 -0
  208. package/admin/src/containers/EditView/DeleteLink/utils/index.js +2 -0
  209. package/admin/src/containers/EditView/DeleteLink/utils/select.js +21 -0
  210. package/admin/src/containers/EditView/Header/index.js +258 -0
  211. package/admin/src/containers/EditView/Header/utils/connect.js +12 -0
  212. package/admin/src/containers/EditView/Header/utils/getDraftRelations.js +62 -0
  213. package/admin/src/containers/EditView/Header/utils/index.js +3 -0
  214. package/admin/src/containers/EditView/Header/utils/select.js +31 -0
  215. package/admin/src/containers/EditView/InformationCard.js +100 -0
  216. package/admin/src/containers/EditView/components.js +74 -0
  217. package/admin/src/containers/EditView/index.js +297 -0
  218. package/admin/src/containers/EditView/utils/createAttributesLayout.js +39 -0
  219. package/admin/src/containers/EditView/utils/getFieldsActionMatchingPermissions.js +23 -0
  220. package/admin/src/containers/EditView/utils/index.js +3 -0
  221. package/admin/src/containers/EditViewDataManagerProvider/index.js +519 -0
  222. package/admin/src/containers/EditViewDataManagerProvider/reducer.js +218 -0
  223. package/admin/src/containers/EditViewDataManagerProvider/utils/cleanData.js +88 -0
  224. package/admin/src/containers/EditViewDataManagerProvider/utils/getYupInnerErrors.js +17 -0
  225. package/admin/src/containers/EditViewDataManagerProvider/utils/index.js +3 -0
  226. package/admin/src/containers/EditViewDataManagerProvider/utils/schema.js +368 -0
  227. package/admin/src/containers/EditViewLayoutManager/Permissions.js +30 -0
  228. package/admin/src/containers/EditViewLayoutManager/actions.js +9 -0
  229. package/admin/src/containers/EditViewLayoutManager/constants.js +2 -0
  230. package/admin/src/containers/EditViewLayoutManager/index.js +44 -0
  231. package/admin/src/containers/EditViewLayoutManager/reducer.js +30 -0
  232. package/admin/src/containers/EditViewLayoutManager/selectors.js +5 -0
  233. package/admin/src/containers/LayoutDndProvider/index.js +75 -0
  234. package/admin/src/containers/ListSettingsView/DragWrapper.js +21 -0
  235. package/admin/src/containers/ListSettingsView/DropdownButton.js +8 -0
  236. package/admin/src/containers/ListSettingsView/Label.js +91 -0
  237. package/admin/src/containers/ListSettingsView/MenuDropdown.js +41 -0
  238. package/admin/src/containers/ListSettingsView/Toggle.js +51 -0
  239. package/admin/src/containers/ListSettingsView/forms.json +64 -0
  240. package/admin/src/containers/ListSettingsView/index.js +298 -0
  241. package/admin/src/containers/ListSettingsView/init.js +11 -0
  242. package/admin/src/containers/ListSettingsView/reducer.js +77 -0
  243. package/admin/src/containers/ListView/FieldPicker/ConfigureLink/StyledLink.js +28 -0
  244. package/admin/src/containers/ListView/FieldPicker/ConfigureLink/Wrapper.js +8 -0
  245. package/admin/src/containers/ListView/FieldPicker/ConfigureLink/index.js +29 -0
  246. package/admin/src/containers/ListView/FieldPicker/Field/Wrapper.js +15 -0
  247. package/admin/src/containers/ListView/FieldPicker/Field/index.js +24 -0
  248. package/admin/src/containers/ListView/FieldPicker/Fields/Wrapper.js +18 -0
  249. package/admin/src/containers/ListView/FieldPicker/Fields/index.js +27 -0
  250. package/admin/src/containers/ListView/FieldPicker/Header/Reset.js +8 -0
  251. package/admin/src/containers/ListView/FieldPicker/Header/index.js +42 -0
  252. package/admin/src/containers/ListView/FieldPicker/Wrapper.js +9 -0
  253. package/admin/src/containers/ListView/FieldPicker/index.js +46 -0
  254. package/admin/src/containers/ListView/Filter.js +83 -0
  255. package/admin/src/containers/ListView/Footer.js +60 -0
  256. package/admin/src/containers/ListView/actions.js +91 -0
  257. package/admin/src/containers/ListView/components.js +138 -0
  258. package/admin/src/containers/ListView/constants.js +16 -0
  259. package/admin/src/containers/ListView/index.js +573 -0
  260. package/admin/src/containers/ListView/reducer.js +182 -0
  261. package/admin/src/containers/ListView/selectors.js +24 -0
  262. package/admin/src/containers/ListView/utils/buildQueryString.js +26 -0
  263. package/admin/src/containers/ListView/utils/createPluginsFilter.js +13 -0
  264. package/admin/src/containers/ListView/utils/getAllAllowedHeaders.js +17 -0
  265. package/admin/src/containers/ListView/utils/getFirstSortableHeader.js +14 -0
  266. package/admin/src/containers/ListView/utils/index.js +3 -0
  267. package/admin/src/containers/ListViewLayoutManager/Permissions.js +29 -0
  268. package/admin/src/containers/ListViewLayoutManager/index.js +60 -0
  269. package/admin/src/containers/ListViewProvider/index.js +16 -0
  270. package/admin/src/containers/Main/actions.js +13 -0
  271. package/admin/src/containers/Main/constants.js +3 -0
  272. package/admin/src/containers/Main/index.js +100 -0
  273. package/admin/src/containers/Main/reducer.js +37 -0
  274. package/admin/src/containers/Main/selectors.js +20 -0
  275. package/admin/src/containers/RBACManager/actions.js +14 -0
  276. package/admin/src/containers/RBACManager/constants.js +2 -0
  277. package/admin/src/containers/RBACManager/reducer.js +32 -0
  278. package/admin/src/containers/RBACManager/useSyncRbac.js +28 -0
  279. package/admin/src/containers/SingleTypeFormWrapper/index.js +317 -0
  280. package/admin/src/containers/SingleTypeFormWrapper/utils/getRequestUrl.js +5 -0
  281. package/admin/src/containers/SingleTypeFormWrapper/utils/index.js +2 -0
  282. package/admin/src/containers/SingleTypeRecursivePath/index.js +84 -0
  283. package/admin/src/containers/WysiwygProvider/index.js +16 -0
  284. package/admin/src/contexts/ContentTypeLayout.js +5 -0
  285. package/admin/src/contexts/LayoutDnd.js +5 -0
  286. package/admin/src/contexts/ListView.js +5 -0
  287. package/admin/src/contexts/Wysiwyg.js +5 -0
  288. package/admin/src/contexts/index.js +4 -0
  289. package/admin/src/hooks/index.js +6 -0
  290. package/admin/src/hooks/useContentTypeLayout/index.js +19 -0
  291. package/admin/src/hooks/useFetchContentTypeLayout/index.js +83 -0
  292. package/admin/src/hooks/useFetchContentTypeLayout/reducer.js +56 -0
  293. package/admin/src/hooks/useFetchContentTypeLayout/utils/formatLayouts.js +235 -0
  294. package/admin/src/hooks/useFindRedirectionLink/index.js +14 -0
  295. package/admin/src/hooks/useFindRedirectionLink/selectors.js +7 -0
  296. package/admin/src/hooks/useFindRedirectionLink/utils/getRedirectionLink.js +45 -0
  297. package/admin/src/hooks/useLayoutDnd.js +6 -0
  298. package/admin/src/hooks/useListView.js +6 -0
  299. package/admin/src/hooks/useWysiwyg.js +6 -0
  300. package/admin/src/icons/Bold/index.js +22 -0
  301. package/admin/src/icons/Code/index.js +13 -0
  302. package/admin/src/icons/Cross/index.js +33 -0
  303. package/admin/src/icons/Italic/index.js +23 -0
  304. package/admin/src/icons/Link/index.js +21 -0
  305. package/admin/src/icons/Media/index.js +14 -0
  306. package/admin/src/icons/Na/index.js +58 -0
  307. package/admin/src/icons/Ol/index.js +13 -0
  308. package/admin/src/icons/Quote/index.js +13 -0
  309. package/admin/src/icons/Striked/index.js +24 -0
  310. package/admin/src/icons/Ul/index.js +15 -0
  311. package/admin/src/icons/Underline/index.js +22 -0
  312. package/admin/src/index.js +52 -0
  313. package/admin/src/lifecycles.js +19 -0
  314. package/admin/src/permissions.js +27 -0
  315. package/admin/src/pluginId.js +5 -0
  316. package/admin/src/reducers.js +16 -0
  317. package/admin/src/selectors.js +6 -0
  318. package/admin/src/sharedReducers/crudReducer/actions.js +44 -0
  319. package/admin/src/sharedReducers/crudReducer/constants.js +7 -0
  320. package/admin/src/sharedReducers/crudReducer/reducer.js +75 -0
  321. package/admin/src/sharedReducers/crudReducer/selectors.js +5 -0
  322. package/admin/src/testUtils/data.js +305 -0
  323. package/admin/src/testUtils/index.js +4 -0
  324. package/admin/src/translations/ar.json +94 -0
  325. package/admin/src/translations/cs.json +130 -0
  326. package/admin/src/translations/de.json +177 -0
  327. package/admin/src/translations/dk.json +180 -0
  328. package/admin/src/translations/en.json +177 -0
  329. package/admin/src/translations/es.json +177 -0
  330. package/admin/src/translations/fr.json +162 -0
  331. package/admin/src/translations/id.json +175 -0
  332. package/admin/src/translations/index.js +53 -0
  333. package/admin/src/translations/it.json +177 -0
  334. package/admin/src/translations/ja.json +94 -0
  335. package/admin/src/translations/ko.json +110 -0
  336. package/admin/src/translations/ms.json +148 -0
  337. package/admin/src/translations/nl.json +94 -0
  338. package/admin/src/translations/pl.json +142 -0
  339. package/admin/src/translations/pt-BR.json +94 -0
  340. package/admin/src/translations/pt.json +94 -0
  341. package/admin/src/translations/ru.json +177 -0
  342. package/admin/src/translations/sk.json +172 -0
  343. package/admin/src/translations/th.json +155 -0
  344. package/admin/src/translations/tr.json +177 -0
  345. package/admin/src/translations/uk.json +148 -0
  346. package/admin/src/translations/vi.json +110 -0
  347. package/admin/src/translations/zh-Hans.json +177 -0
  348. package/admin/src/translations/zh.json +94 -0
  349. package/admin/src/utils/ItemTypes.js +7 -0
  350. package/admin/src/utils/checkIfAttributeIsDisplayable.js +13 -0
  351. package/admin/src/utils/createDefaultForm.js +50 -0
  352. package/admin/src/utils/dateFormats.js +18 -0
  353. package/admin/src/utils/formatFiltersFromQuery.js +55 -0
  354. package/admin/src/utils/formatFiltersToQuery.js +27 -0
  355. package/admin/src/utils/formatLayoutToApi.js +44 -0
  356. package/admin/src/utils/generatePermissionsObject.js +20 -0
  357. package/admin/src/utils/getComponents.js +50 -0
  358. package/admin/src/utils/getDisplayedValue.js +61 -0
  359. package/admin/src/utils/getFieldName.js +6 -0
  360. package/admin/src/utils/getMaxTempKey.js +12 -0
  361. package/admin/src/utils/getRequestUrl.js +5 -0
  362. package/admin/src/utils/getTrad.js +5 -0
  363. package/admin/src/utils/index.js +17 -0
  364. package/admin/src/utils/mergeMetasWithSchema.js +20 -0
  365. package/admin/src/utils/removeKeyInObject.js +45 -0
  366. package/admin/src/utils/removePasswordFieldsFromData.js +54 -0
  367. package/config/admin.json +5 -0
  368. package/config/functions/bootstrap.js +9 -0
  369. package/config/policies/has-draft-and-publish.js +19 -0
  370. package/config/policies/hasPermissions.js +34 -0
  371. package/config/policies/routing.js +27 -0
  372. package/config/routes.json +275 -0
  373. package/controllers/collection-types.js +282 -0
  374. package/controllers/components.js +66 -0
  375. package/controllers/content-types.js +112 -0
  376. package/controllers/relations.js +63 -0
  377. package/controllers/single-types.js +170 -0
  378. package/controllers/uid.js +41 -0
  379. package/controllers/validation/index.js +104 -0
  380. package/controllers/validation/model-configuration.js +114 -0
  381. package/oas.yml +757 -0
  382. package/package.json +77 -0
  383. package/services/components.js +92 -0
  384. package/services/configuration.js +79 -0
  385. package/services/content-types.js +73 -0
  386. package/services/data-mapper.js +98 -0
  387. package/services/entity-manager.js +140 -0
  388. package/services/metrics.js +34 -0
  389. package/services/permission-checker.js +69 -0
  390. package/services/permission.js +95 -0
  391. package/services/uid.js +63 -0
  392. package/services/utils/configuration/attributes.js +175 -0
  393. package/services/utils/configuration/index.js +43 -0
  394. package/services/utils/configuration/layouts.js +185 -0
  395. package/services/utils/configuration/metadatas.js +142 -0
  396. package/services/utils/configuration/settings.js +52 -0
  397. package/services/utils/store.js +93 -0
  398. package/utils/index.js +16 -0
  399. package/utils/pick-writable-attributes.js +6 -0
  400. package/utils/wrap-bad-request.js +15 -0
  401. package/validation/policies/hasPermissions.js +17 -0
@@ -0,0 +1,38 @@
1
+ import React, { memo } from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import { FormattedMessage } from 'react-intl';
4
+ import pluginId from '../../../pluginId';
5
+ import useListView from '../../../hooks/useListView';
6
+ import DeleteAll from './DeleteAll';
7
+ import Delete from './Delete';
8
+ import Wrapper from './Wrapper';
9
+
10
+ function ActionCollapse({ colSpan }) {
11
+ const { data, entriesToDelete, toggleModalDeleteAll } = useListView();
12
+
13
+ const number = entriesToDelete.length;
14
+ const suffix = number > 1 ? 'plural' : 'singular';
15
+ const deleteMessageId = number === data.length ? 'delete' : 'deleteSelected';
16
+
17
+ return (
18
+ <Wrapper colSpan={colSpan}>
19
+ <td colSpan={colSpan}>
20
+ <FormattedMessage
21
+ id={`${pluginId}.components.TableDelete.entries.${suffix}`}
22
+ values={{ number }}
23
+ >
24
+ {message => <Delete>{message}</Delete>}
25
+ </FormattedMessage>
26
+ <FormattedMessage id={`${pluginId}.components.TableDelete.${deleteMessageId}`}>
27
+ {message => <DeleteAll onClick={toggleModalDeleteAll}>{message}</DeleteAll>}
28
+ </FormattedMessage>
29
+ </td>
30
+ </Wrapper>
31
+ );
32
+ }
33
+
34
+ ActionCollapse.propTypes = {
35
+ colSpan: PropTypes.number.isRequired,
36
+ };
37
+
38
+ export default memo(ActionCollapse);
@@ -0,0 +1,59 @@
1
+ import React, { memo } from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import { Carret, useGlobalContext } from 'strapi-helper-plugin';
4
+ import { useListView } from '../../../hooks';
5
+
6
+ const Header = ({ fieldSchema: { type }, metadatas: { label, sortable, mainField }, name }) => {
7
+ const { _sort, firstSortableHeader, setQuery } = useListView();
8
+ const { emitEvent } = useGlobalContext();
9
+ const [sortBy, sortOrder] = _sort.split(':');
10
+
11
+ let sortField = name;
12
+ let useRelation = false;
13
+
14
+ if (type === 'relation') {
15
+ useRelation = true;
16
+ sortField = `${name}.${mainField.name}`;
17
+ }
18
+
19
+ const handleClick = () => {
20
+ if (sortable) {
21
+ emitEvent('didSortEntries', { useRelation });
22
+
23
+ const isCurrentSort = sortField === sortBy;
24
+ const nextOrder = isCurrentSort && sortOrder === 'ASC' ? 'DESC' : 'ASC';
25
+ let value = `${sortField}:${nextOrder}`;
26
+
27
+ if (isCurrentSort && sortOrder === 'DESC') {
28
+ value = `${firstSortableHeader}:ASC`;
29
+ }
30
+
31
+ setQuery({
32
+ _sort: value,
33
+ });
34
+ }
35
+ };
36
+
37
+ return (
38
+ <th onClick={handleClick}>
39
+ <span className={sortable ? 'sortable' : ''}>
40
+ {label}
41
+ {sortBy === sortField && <Carret fill="#212529" isUp={sortOrder === 'ASC' && 'isAsc'} />}
42
+ </span>
43
+ </th>
44
+ );
45
+ };
46
+
47
+ Header.propTypes = {
48
+ fieldSchema: PropTypes.shape({
49
+ type: PropTypes.string.isRequired,
50
+ }).isRequired,
51
+ metadatas: PropTypes.shape({
52
+ label: PropTypes.string.isRequired,
53
+ sortable: PropTypes.bool.isRequired,
54
+ mainField: PropTypes.object,
55
+ }).isRequired,
56
+ name: PropTypes.string.isRequired,
57
+ };
58
+
59
+ export default memo(Header);
@@ -0,0 +1,35 @@
1
+ import styled, { css } from 'styled-components';
2
+
3
+ /* eslint-disable consistent-return */
4
+
5
+ const Thead = styled.thead`
6
+ background: #f3f3f3;
7
+ height: 43px;
8
+ overflow: hidden;
9
+
10
+ th {
11
+ height: 43px;
12
+ border: none !important;
13
+ font-size: 1.3rem;
14
+ vertical-align: middle !important;
15
+ > span {
16
+ position: relative;
17
+ &.sortable {
18
+ cursor: pointer;
19
+ }
20
+ }
21
+ }
22
+ ${({ isBulkable }) => {
23
+ if (isBulkable) {
24
+ return css`
25
+ > tr {
26
+ th:first-child {
27
+ width: 50px;
28
+ }
29
+ }
30
+ `;
31
+ }
32
+ }}
33
+ `;
34
+
35
+ export default Thead;
@@ -0,0 +1,46 @@
1
+ /* eslint-disable jsx-a11y/control-has-associated-label */
2
+ import React, { memo } from 'react';
3
+ import PropTypes from 'prop-types';
4
+ import { useListView } from '../../../hooks';
5
+ import CustomInputCheckbox from '../../CustomInputCheckbox';
6
+ import Thead from './Thead';
7
+ import Header from './Header';
8
+
9
+ function Headers({ headers, isBulkable }) {
10
+ const { data, entriesToDelete, onChangeBulkSelectall } = useListView();
11
+
12
+ return (
13
+ <Thead isBulkable={isBulkable}>
14
+ <tr>
15
+ {isBulkable && (
16
+ <th>
17
+ <CustomInputCheckbox
18
+ entriesToDelete={entriesToDelete}
19
+ isAll
20
+ name="all"
21
+ onChange={onChangeBulkSelectall}
22
+ value={data.length === entriesToDelete.length && entriesToDelete.length > 0}
23
+ />
24
+ </th>
25
+ )}
26
+ {headers.map(({ key, name, fieldSchema, metadatas }) => {
27
+ return <Header key={key} name={name} fieldSchema={fieldSchema} metadatas={metadatas} />;
28
+ })}
29
+
30
+ <th />
31
+ </tr>
32
+ </Thead>
33
+ );
34
+ }
35
+
36
+ Headers.defaultProps = {
37
+ isBulkable: true,
38
+ headers: [],
39
+ };
40
+
41
+ Headers.propTypes = {
42
+ headers: PropTypes.array,
43
+ isBulkable: PropTypes.bool,
44
+ };
45
+
46
+ export default memo(Headers);
@@ -0,0 +1,19 @@
1
+ import styled from 'styled-components';
2
+
3
+ const ActionContainer = styled.td`
4
+ text-align: right;
5
+
6
+ i,
7
+ svg {
8
+ margin-left: 15px;
9
+ font-size: 1rem;
10
+
11
+ color: #333740;
12
+
13
+ &:first-of-type {
14
+ margin-left: 0px;
15
+ }
16
+ }
17
+ `;
18
+
19
+ export default ActionContainer;
@@ -0,0 +1,55 @@
1
+ import React, { memo, useState } from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import { Tooltip } from '@buffetjs/styles';
4
+ import MediaPreviewList from '../../MediaPreviewList';
5
+ import RelationPreviewList from '../../RelationPreviewList';
6
+ import Truncate from '../../Truncate';
7
+ import Truncated from '../../Truncated';
8
+
9
+ const Cell = ({ options }) => {
10
+ const [tooltipIsDisplayed, setDisplayTooltip] = useState(false);
11
+
12
+ const handleTooltipToggle = () => {
13
+ setDisplayTooltip(prev => !prev);
14
+ };
15
+
16
+ const { type, cellId, value } = options;
17
+
18
+ if (type === 'media') {
19
+ return <MediaPreviewList files={value} />;
20
+ }
21
+
22
+ if (type === 'relation') {
23
+ return <RelationPreviewList options={options} />;
24
+ }
25
+
26
+ return (
27
+ <Truncate onMouseEnter={handleTooltipToggle} onMouseLeave={handleTooltipToggle}>
28
+ <Truncated>
29
+ <span data-for={cellId} data-tip={value}>
30
+ {value}
31
+ </span>
32
+ </Truncated>
33
+ {tooltipIsDisplayed && <Tooltip id={cellId} />}
34
+ </Truncate>
35
+ );
36
+ };
37
+
38
+ Cell.propTypes = {
39
+ options: PropTypes.shape({
40
+ cellId: PropTypes.string.isRequired,
41
+ metadatas: PropTypes.shape({
42
+ mainField: PropTypes.object,
43
+ }).isRequired,
44
+ name: PropTypes.string.isRequired,
45
+ relationType: PropTypes.string,
46
+ rowId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,
47
+ type: PropTypes.string,
48
+ queryInfos: PropTypes.shape({
49
+ endPoint: PropTypes.string.isRequired,
50
+ }),
51
+ value: PropTypes.any,
52
+ }).isRequired,
53
+ };
54
+
55
+ export default memo(Cell);
@@ -0,0 +1,112 @@
1
+ import React, { memo, useCallback, useRef } from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import { toString } from 'lodash';
4
+ import { useGlobalContext } from 'strapi-helper-plugin';
5
+ import { IconLinks } from '@buffetjs/core';
6
+ import { Duplicate } from '@buffetjs/icons';
7
+ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
8
+ import { useListView } from '../../../hooks';
9
+ import { getDisplayedValue } from '../../../utils';
10
+ import CustomInputCheckbox from '../../CustomInputCheckbox';
11
+ import ActionContainer from './ActionContainer';
12
+ import Cell from './Cell';
13
+
14
+ /* eslint-disable jsx-a11y/no-noninteractive-element-interactions */
15
+
16
+ function Row({ canCreate, canDelete, canUpdate, isBulkable, row, headers, goTo }) {
17
+ const { entriesToDelete, onChangeBulk, onClickDelete } = useListView();
18
+ const { emitEvent } = useGlobalContext();
19
+ const emitEventRef = useRef(emitEvent);
20
+
21
+ const memoizedDisplayedValue = useCallback(
22
+ (name, type) => {
23
+ return getDisplayedValue(type, row[name], name);
24
+ },
25
+ [row]
26
+ );
27
+
28
+ const links = [
29
+ {
30
+ icon: canCreate ? <Duplicate fill="black" /> : null,
31
+ onClick: e => {
32
+ e.stopPropagation();
33
+ goTo(`create/clone/${row.id}`);
34
+ },
35
+ },
36
+ {
37
+ icon: canUpdate ? <FontAwesomeIcon icon="pencil-alt" /> : null,
38
+ onClick: e => {
39
+ e.stopPropagation();
40
+ emitEventRef.current('willDeleteEntryFromList');
41
+ goTo(row.id);
42
+ },
43
+ },
44
+ {
45
+ icon: canDelete ? <FontAwesomeIcon icon="trash-alt" /> : null,
46
+ onClick: e => {
47
+ e.stopPropagation();
48
+ emitEventRef.current('willDeleteEntryFromList');
49
+ onClickDelete(row.id);
50
+ },
51
+ },
52
+ ].filter(icon => icon);
53
+
54
+ return (
55
+ <>
56
+ {isBulkable && (
57
+ // eslint-disable-next-line jsx-a11y/click-events-have-key-events
58
+ <td key="i" onClick={e => e.stopPropagation()}>
59
+ <CustomInputCheckbox
60
+ name={row.id}
61
+ onChange={onChangeBulk}
62
+ value={entriesToDelete.filter(id => toString(id) === toString(row.id)).length > 0}
63
+ />
64
+ </td>
65
+ )}
66
+ {headers.map(
67
+ ({
68
+ key,
69
+ name,
70
+ fieldSchema: { type, relationType },
71
+ cellFormatter,
72
+ metadatas,
73
+ queryInfos,
74
+ }) => (
75
+ <td key={key}>
76
+ {cellFormatter ? (
77
+ cellFormatter(row)
78
+ ) : (
79
+ <Cell
80
+ options={{
81
+ rowId: row.id,
82
+ relationType,
83
+ type,
84
+ name,
85
+ value: memoizedDisplayedValue(name, type),
86
+ cellId: key,
87
+ metadatas,
88
+ queryInfos,
89
+ }}
90
+ />
91
+ )}
92
+ </td>
93
+ )
94
+ )}
95
+ <ActionContainer>
96
+ <IconLinks links={links} />
97
+ </ActionContainer>
98
+ </>
99
+ );
100
+ }
101
+
102
+ Row.propTypes = {
103
+ canCreate: PropTypes.bool.isRequired,
104
+ canDelete: PropTypes.bool.isRequired,
105
+ canUpdate: PropTypes.bool.isRequired,
106
+ headers: PropTypes.array.isRequired,
107
+ isBulkable: PropTypes.bool.isRequired,
108
+ row: PropTypes.object.isRequired,
109
+ goTo: PropTypes.func.isRequired,
110
+ };
111
+
112
+ export default memo(Row);
@@ -0,0 +1,162 @@
1
+ import React, { memo, useMemo } from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import { useLocation, useHistory } from 'react-router-dom';
4
+ import { FormattedMessage, useIntl } from 'react-intl';
5
+ import { upperFirst, isEmpty } from 'lodash';
6
+ import { LoadingIndicator, useGlobalContext } from 'strapi-helper-plugin';
7
+ import { parse, stringify } from 'qs';
8
+ import useListView from '../../hooks/useListView';
9
+ import { getTrad } from '../../utils';
10
+ import State from '../State';
11
+ import { LoadingContainer, LoadingWrapper, Table, TableEmpty, TableRow } from './styledComponents';
12
+ import ActionCollapse from './ActionCollapse';
13
+ import Headers from './Headers';
14
+ import Row from './Row';
15
+
16
+ const CustomTable = ({
17
+ canCreate,
18
+ canUpdate,
19
+ canDelete,
20
+ data,
21
+ displayedHeaders,
22
+ hasDraftAndPublish,
23
+ isBulkable,
24
+ showLoader,
25
+ }) => {
26
+ const { formatMessage } = useIntl();
27
+ const { entriesToDelete, label, filters, _q } = useListView();
28
+ const { emitEvent } = useGlobalContext();
29
+ const { pathname, search } = useLocation();
30
+ const query = search ? parse(search.substring(1)) : {};
31
+ const { push } = useHistory();
32
+ const searchToPersist = query.plugins
33
+ ? stringify({ plugins: query.plugins }, { encode: false })
34
+ : '';
35
+
36
+ const headers = useMemo(() => {
37
+ if (hasDraftAndPublish) {
38
+ return [
39
+ ...displayedHeaders,
40
+ {
41
+ key: '__published_at_temp_key__',
42
+ name: 'published_at',
43
+ fieldSchema: {
44
+ type: 'custom',
45
+ },
46
+ metadatas: {
47
+ label: formatMessage({ id: getTrad('containers.ListPage.table-headers.published_at') }),
48
+ searchable: false,
49
+ sortable: true,
50
+ },
51
+ cellFormatter: cellData => {
52
+ const isPublished = !isEmpty(cellData.published_at);
53
+
54
+ return <State isPublished={isPublished} />;
55
+ },
56
+ },
57
+ ];
58
+ }
59
+
60
+ return displayedHeaders;
61
+ }, [formatMessage, hasDraftAndPublish, displayedHeaders]);
62
+
63
+ const colSpanLength = isBulkable && canDelete ? headers.length + 2 : headers.length + 1;
64
+
65
+ const handleRowGoTo = id => {
66
+ emitEvent('willEditEntryFromList');
67
+ push({
68
+ pathname: `${pathname}/${id}`,
69
+ state: { from: pathname },
70
+ search: searchToPersist,
71
+ });
72
+ };
73
+ const handleEditGoTo = id => {
74
+ emitEvent('willEditEntryFromButton');
75
+ push({
76
+ pathname: `${pathname}/${id}`,
77
+ state: { from: pathname },
78
+ search: searchToPersist,
79
+ });
80
+ };
81
+
82
+ const values = { contentType: upperFirst(label), search: _q };
83
+ let tableEmptyMsgId = filters.length > 0 ? 'withFilters' : 'withoutFilter';
84
+
85
+ if (_q !== '') {
86
+ tableEmptyMsgId = 'withSearch';
87
+ }
88
+
89
+ const content =
90
+ data.length === 0 ? (
91
+ <TableEmpty>
92
+ <td colSpan={colSpanLength}>
93
+ <FormattedMessage
94
+ id={`content-manager.components.TableEmpty.${tableEmptyMsgId}`}
95
+ values={values}
96
+ />
97
+ </td>
98
+ </TableEmpty>
99
+ ) : (
100
+ data.map(row => {
101
+ return (
102
+ <TableRow
103
+ key={row.id}
104
+ onClick={e => {
105
+ e.preventDefault();
106
+ e.stopPropagation();
107
+
108
+ handleRowGoTo(row.id);
109
+ }}
110
+ >
111
+ <Row
112
+ canCreate={canCreate}
113
+ canDelete={canDelete}
114
+ canUpdate={canUpdate}
115
+ isBulkable={isBulkable && canDelete}
116
+ headers={headers}
117
+ row={row}
118
+ goTo={handleEditGoTo}
119
+ />
120
+ </TableRow>
121
+ );
122
+ })
123
+ );
124
+
125
+ if (showLoader) {
126
+ return (
127
+ <>
128
+ <Table className="table">
129
+ <Headers headers={headers} isBulkable={isBulkable && canDelete} />
130
+ </Table>
131
+ <LoadingWrapper>
132
+ <LoadingContainer>
133
+ <LoadingIndicator />
134
+ </LoadingContainer>
135
+ </LoadingWrapper>
136
+ </>
137
+ );
138
+ }
139
+
140
+ return (
141
+ <Table className="table">
142
+ <Headers headers={headers} isBulkable={isBulkable && canDelete} />
143
+ <tbody>
144
+ {entriesToDelete.length > 0 && <ActionCollapse colSpan={colSpanLength} />}
145
+ {content}
146
+ </tbody>
147
+ </Table>
148
+ );
149
+ };
150
+
151
+ CustomTable.propTypes = {
152
+ canCreate: PropTypes.bool.isRequired,
153
+ canDelete: PropTypes.bool.isRequired,
154
+ canUpdate: PropTypes.bool.isRequired,
155
+ data: PropTypes.array.isRequired,
156
+ displayedHeaders: PropTypes.array.isRequired,
157
+ hasDraftAndPublish: PropTypes.bool.isRequired,
158
+ isBulkable: PropTypes.bool.isRequired,
159
+ showLoader: PropTypes.bool.isRequired,
160
+ };
161
+
162
+ export default memo(CustomTable);
@@ -0,0 +1,85 @@
1
+ import styled from 'styled-components';
2
+ import { themePropTypes } from 'strapi-helper-plugin';
3
+
4
+ const Table = styled.table`
5
+ border-radius: 3px;
6
+ border-collapse: initial;
7
+ box-shadow: 0 2px 4px #e3e9f3;
8
+ table-layout: fixed;
9
+ margin-bottom: 0;
10
+
11
+ tr,
12
+ th,
13
+ td {
14
+ border: none;
15
+ padding: 0;
16
+ white-space: nowrap;
17
+ }
18
+
19
+ th,
20
+ td {
21
+ padding: 0 25px;
22
+
23
+ label {
24
+ display: inline;
25
+ }
26
+ }
27
+ `;
28
+
29
+ const TableEmpty = styled.tr`
30
+ width: 100%;
31
+ height: 108px;
32
+ background: #ffffff;
33
+
34
+ td {
35
+ height: 106px;
36
+ line-height: 90px;
37
+ font-size: 1.3rem;
38
+ font-weight: 400;
39
+ color: #333740;
40
+ text-align: center;
41
+ border-collapse: collapse;
42
+ border-top: 1px solid #f1f1f2 !important;
43
+ }
44
+ `;
45
+
46
+ const TableRow = styled.tr`
47
+ height: 54px;
48
+ background: #ffffff;
49
+
50
+ &:hover {
51
+ cursor: pointer;
52
+ background: #f7f8f8;
53
+ }
54
+
55
+ td {
56
+ height: 53px;
57
+ font-size: 1.3rem;
58
+ line-height: 1.8rem;
59
+ font-weight: 400;
60
+ color: #333740;
61
+ vertical-align: middle;
62
+ border-collapse: collapse;
63
+ border-top: 1px solid #f1f1f2 !important;
64
+ }
65
+ `;
66
+
67
+ const LoadingContainer = styled.div`
68
+ display: block;
69
+ margin: auto;
70
+ `;
71
+
72
+ const LoadingWrapper = styled.div`
73
+ width: 100%;
74
+ height: 108px;
75
+ display: flex;
76
+ background: ${props => props.theme.main.colors.white};
77
+ box-shadow: 0 2px 4px ${props => props.theme.main.colors.darkGrey};
78
+ clip-path: inset(0px -5px -5px -5px);
79
+ `;
80
+
81
+ LoadingWrapper.propTypes = {
82
+ ...themePropTypes,
83
+ };
84
+
85
+ export { LoadingContainer, LoadingWrapper, Table, TableEmpty, TableRow };