@pautena/react-design-system 0.0.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 (409) hide show
  1. package/.eslintrc.js +26 -0
  2. package/.github/workflows/ci.yml +23 -0
  3. package/.github/workflows/deploy-storybook.yaml +23 -0
  4. package/.github/workflows/publish.yml +31 -0
  5. package/.husky/pre-commit +5 -0
  6. package/.prettierignore +4 -0
  7. package/.prettierrc.js +5 -0
  8. package/.storybook/main.js +10 -0
  9. package/.storybook/preview.js +36 -0
  10. package/README.md +7 -0
  11. package/babel.config.js +3 -0
  12. package/dist/cjs/index.js +278 -0
  13. package/dist/cjs/index.js.map +1 -0
  14. package/dist/cjs/types/components/app-bar/app-bar.d.ts +2 -0
  15. package/dist/cjs/types/components/app-bar/app-bar.types.d.ts +13 -0
  16. package/dist/cjs/types/components/app-bar/index.d.ts +3 -0
  17. package/dist/cjs/types/components/app-bar/mini-app-bar/index.d.ts +1 -0
  18. package/dist/cjs/types/components/app-bar/mini-app-bar/mini-app-bar.d.ts +2 -0
  19. package/dist/cjs/types/components/bullet/bullet.d.ts +14 -0
  20. package/dist/cjs/types/components/bullet/index.d.ts +1 -0
  21. package/dist/cjs/types/components/center-container/center-container.d.ts +9 -0
  22. package/dist/cjs/types/components/center-container/index.d.ts +1 -0
  23. package/dist/cjs/types/components/drawer/drawer.context.d.ts +9 -0
  24. package/dist/cjs/types/components/drawer/drawer.d.ts +2 -0
  25. package/dist/cjs/types/components/drawer/drawer.mixins.d.ts +4 -0
  26. package/dist/cjs/types/components/drawer/drawer.mock.d.ts +3 -0
  27. package/dist/cjs/types/components/drawer/drawer.provider.d.ts +6 -0
  28. package/dist/cjs/types/components/drawer/drawer.types.d.ts +44 -0
  29. package/dist/cjs/types/components/drawer/index.d.ts +5 -0
  30. package/dist/cjs/types/components/drawer/mini-drawer/index.d.ts +1 -0
  31. package/dist/cjs/types/components/drawer/mini-drawer/mini-drawer.d.ts +1 -0
  32. package/dist/cjs/types/components/drawer-content/drawer-content.d.ts +5 -0
  33. package/dist/cjs/types/components/drawer-content/index.d.ts +1 -0
  34. package/dist/cjs/types/components/drawer-item/drawer-item.d.ts +33 -0
  35. package/dist/cjs/types/components/drawer-item/index.d.ts +1 -0
  36. package/dist/cjs/types/components/drawer-section/drawer-section.d.ts +16 -0
  37. package/dist/cjs/types/components/drawer-section/drawer-section.mock.d.ts +2 -0
  38. package/dist/cjs/types/components/drawer-section/index.d.ts +1 -0
  39. package/dist/cjs/types/components/header/header.d.ts +65 -0
  40. package/dist/cjs/types/components/header/header.dummy.d.ts +4 -0
  41. package/dist/cjs/types/components/header/index.d.ts +1 -0
  42. package/dist/cjs/types/components/index.d.ts +17 -0
  43. package/dist/cjs/types/components/label/index.d.ts +1 -0
  44. package/dist/cjs/types/components/label/label.d.ts +18 -0
  45. package/dist/cjs/types/components/link/index.d.ts +1 -0
  46. package/dist/cjs/types/components/link/link.d.ts +7 -0
  47. package/dist/cjs/types/components/loading-area/index.d.ts +1 -0
  48. package/dist/cjs/types/components/loading-area/loading-area.d.ts +4 -0
  49. package/dist/cjs/types/components/placeholder/index.d.ts +1 -0
  50. package/dist/cjs/types/components/placeholder/placeholder.d.ts +21 -0
  51. package/dist/cjs/types/components/placeholder/placeholder.mock.d.ts +2 -0
  52. package/dist/cjs/types/components/query-container/index.d.ts +1 -0
  53. package/dist/cjs/types/components/query-container/query-container.d.ts +39 -0
  54. package/dist/cjs/types/components/sign-in/index.d.ts +1 -0
  55. package/dist/cjs/types/components/sign-in/sign-in.d.ts +9 -0
  56. package/dist/cjs/types/components/tab/index.d.ts +3 -0
  57. package/dist/cjs/types/components/tab/tab-card/index.d.ts +1 -0
  58. package/dist/cjs/types/components/tab/tab-card/tab-card.d.ts +7 -0
  59. package/dist/cjs/types/components/tab/tab-card/tab-card.dummy.d.ts +7 -0
  60. package/dist/cjs/types/components/tab/tab-panel/index.d.ts +1 -0
  61. package/dist/cjs/types/components/tab/tab-panel/tab-panel.d.ts +7 -0
  62. package/dist/cjs/types/components/tab/tab.context.d.ts +4 -0
  63. package/dist/cjs/types/components/table/enhanced-remote-table/enhanced-remote-table.d.ts +13 -0
  64. package/dist/cjs/types/components/table/enhanced-remote-table/enhanced-remote-table.mock.d.ts +11 -0
  65. package/dist/cjs/types/components/table/enhanced-remote-table/index.d.ts +1 -0
  66. package/dist/cjs/types/components/table/enhanced-table/enhanced-table-head.d.ts +16 -0
  67. package/dist/cjs/types/components/table/enhanced-table/enhanced-table.d.ts +18 -0
  68. package/dist/cjs/types/components/table/enhanced-table/enhanced-table.mock.d.ts +17 -0
  69. package/dist/cjs/types/components/table/enhanced-table/index.d.ts +2 -0
  70. package/dist/cjs/types/components/table/index.d.ts +2 -0
  71. package/dist/cjs/types/components/table-list/index.d.ts +1 -0
  72. package/dist/cjs/types/components/table-list/table-list.d.ts +21 -0
  73. package/dist/cjs/types/components/value-displays/group-value-card/group-value-card.d.ts +15 -0
  74. package/dist/cjs/types/components/value-displays/group-value-card/group-value-card.mock.d.ts +1 -0
  75. package/dist/cjs/types/components/value-displays/group-value-card/index.d.ts +1 -0
  76. package/dist/cjs/types/components/value-displays/index.d.ts +4 -0
  77. package/dist/cjs/types/components/value-displays/value-boolean/index.d.ts +1 -0
  78. package/dist/cjs/types/components/value-displays/value-boolean/value-boolean.d.ts +14 -0
  79. package/dist/cjs/types/components/value-displays/value-card/index.d.ts +1 -0
  80. package/dist/cjs/types/components/value-displays/value-card/value-card.d.ts +6 -0
  81. package/dist/cjs/types/components/value-displays/value-text/index.d.ts +1 -0
  82. package/dist/cjs/types/components/value-displays/value-text/value-text.d.ts +14 -0
  83. package/dist/cjs/types/generators/generators.mock.d.ts +3 -0
  84. package/dist/cjs/types/generators/generators.model.d.ts +33 -0
  85. package/dist/cjs/types/generators/index.d.ts +4 -0
  86. package/dist/cjs/types/generators/model-form/index.d.ts +1 -0
  87. package/dist/cjs/types/generators/model-form/model-form.d.ts +8 -0
  88. package/dist/cjs/types/generators/model-router/index.d.ts +1 -0
  89. package/dist/cjs/types/generators/model-router/model-router.d.ts +35 -0
  90. package/dist/cjs/types/generators/model-router/screens/add-screen.d.ts +2 -0
  91. package/dist/cjs/types/generators/model-router/screens/details-screen.d.ts +2 -0
  92. package/dist/cjs/types/generators/model-router/screens/index.d.ts +4 -0
  93. package/dist/cjs/types/generators/model-router/screens/list-screen.d.ts +2 -0
  94. package/dist/cjs/types/generators/model-router/screens/update-screen.d.ts +2 -0
  95. package/dist/cjs/types/generators/object-details/index.d.ts +1 -0
  96. package/dist/cjs/types/generators/object-details/object-details.d.ts +6 -0
  97. package/dist/cjs/types/index.d.ts +4 -0
  98. package/dist/cjs/types/layouts/app-bar-with-drawer-layout/app-bar-with-drawer-layout.d.ts +10 -0
  99. package/dist/cjs/types/layouts/app-bar-with-drawer-layout/index.d.ts +1 -0
  100. package/dist/cjs/types/layouts/data-table-layout/data-table-layout.d.ts +12 -0
  101. package/dist/cjs/types/layouts/data-table-layout/index.d.ts +1 -0
  102. package/dist/cjs/types/layouts/details-layout/details-layout.d.ts +12 -0
  103. package/dist/cjs/types/layouts/details-layout/index.d.ts +1 -0
  104. package/dist/cjs/types/layouts/form-layout/form-layout.d.ts +8 -0
  105. package/dist/cjs/types/layouts/form-layout/index.d.ts +1 -0
  106. package/dist/cjs/types/layouts/header-layout/header-layout.d.ts +8 -0
  107. package/dist/cjs/types/layouts/header-layout/index.d.ts +1 -0
  108. package/dist/cjs/types/layouts/index.d.ts +7 -0
  109. package/dist/cjs/types/layouts/list-layout/index.d.ts +1 -0
  110. package/dist/cjs/types/layouts/list-layout/list-layout.d.ts +8 -0
  111. package/dist/cjs/types/layouts/tab-layout/index.d.ts +1 -0
  112. package/dist/cjs/types/layouts/tab-layout/tab-layout.d.ts +7 -0
  113. package/dist/cjs/types/providers/index.d.ts +1 -0
  114. package/dist/cjs/types/providers/notification-center/index.d.ts +1 -0
  115. package/dist/cjs/types/providers/notification-center/notification-center.context.d.ts +16 -0
  116. package/dist/cjs/types/providers/notification-center/notification-center.provider.d.ts +5 -0
  117. package/dist/cjs/types/utils/arrays.d.ts +5 -0
  118. package/dist/cjs/types/utils/arrays.test.d.ts +1 -0
  119. package/dist/cjs/types/utils/index.d.ts +2 -0
  120. package/dist/cjs/types/utils/theme.d.ts +4 -0
  121. package/dist/esm/index.js +278 -0
  122. package/dist/esm/index.js.map +1 -0
  123. package/dist/esm/types/components/app-bar/app-bar.d.ts +2 -0
  124. package/dist/esm/types/components/app-bar/app-bar.types.d.ts +13 -0
  125. package/dist/esm/types/components/app-bar/index.d.ts +3 -0
  126. package/dist/esm/types/components/app-bar/mini-app-bar/index.d.ts +1 -0
  127. package/dist/esm/types/components/app-bar/mini-app-bar/mini-app-bar.d.ts +2 -0
  128. package/dist/esm/types/components/bullet/bullet.d.ts +14 -0
  129. package/dist/esm/types/components/bullet/index.d.ts +1 -0
  130. package/dist/esm/types/components/center-container/center-container.d.ts +9 -0
  131. package/dist/esm/types/components/center-container/index.d.ts +1 -0
  132. package/dist/esm/types/components/drawer/drawer.context.d.ts +9 -0
  133. package/dist/esm/types/components/drawer/drawer.d.ts +2 -0
  134. package/dist/esm/types/components/drawer/drawer.mixins.d.ts +4 -0
  135. package/dist/esm/types/components/drawer/drawer.mock.d.ts +3 -0
  136. package/dist/esm/types/components/drawer/drawer.provider.d.ts +6 -0
  137. package/dist/esm/types/components/drawer/drawer.types.d.ts +44 -0
  138. package/dist/esm/types/components/drawer/index.d.ts +5 -0
  139. package/dist/esm/types/components/drawer/mini-drawer/index.d.ts +1 -0
  140. package/dist/esm/types/components/drawer/mini-drawer/mini-drawer.d.ts +1 -0
  141. package/dist/esm/types/components/drawer-content/drawer-content.d.ts +5 -0
  142. package/dist/esm/types/components/drawer-content/index.d.ts +1 -0
  143. package/dist/esm/types/components/drawer-item/drawer-item.d.ts +33 -0
  144. package/dist/esm/types/components/drawer-item/index.d.ts +1 -0
  145. package/dist/esm/types/components/drawer-section/drawer-section.d.ts +16 -0
  146. package/dist/esm/types/components/drawer-section/drawer-section.mock.d.ts +2 -0
  147. package/dist/esm/types/components/drawer-section/index.d.ts +1 -0
  148. package/dist/esm/types/components/header/header.d.ts +65 -0
  149. package/dist/esm/types/components/header/header.dummy.d.ts +4 -0
  150. package/dist/esm/types/components/header/index.d.ts +1 -0
  151. package/dist/esm/types/components/index.d.ts +17 -0
  152. package/dist/esm/types/components/label/index.d.ts +1 -0
  153. package/dist/esm/types/components/label/label.d.ts +18 -0
  154. package/dist/esm/types/components/link/index.d.ts +1 -0
  155. package/dist/esm/types/components/link/link.d.ts +7 -0
  156. package/dist/esm/types/components/loading-area/index.d.ts +1 -0
  157. package/dist/esm/types/components/loading-area/loading-area.d.ts +4 -0
  158. package/dist/esm/types/components/placeholder/index.d.ts +1 -0
  159. package/dist/esm/types/components/placeholder/placeholder.d.ts +21 -0
  160. package/dist/esm/types/components/placeholder/placeholder.mock.d.ts +2 -0
  161. package/dist/esm/types/components/query-container/index.d.ts +1 -0
  162. package/dist/esm/types/components/query-container/query-container.d.ts +39 -0
  163. package/dist/esm/types/components/sign-in/index.d.ts +1 -0
  164. package/dist/esm/types/components/sign-in/sign-in.d.ts +9 -0
  165. package/dist/esm/types/components/tab/index.d.ts +3 -0
  166. package/dist/esm/types/components/tab/tab-card/index.d.ts +1 -0
  167. package/dist/esm/types/components/tab/tab-card/tab-card.d.ts +7 -0
  168. package/dist/esm/types/components/tab/tab-card/tab-card.dummy.d.ts +7 -0
  169. package/dist/esm/types/components/tab/tab-panel/index.d.ts +1 -0
  170. package/dist/esm/types/components/tab/tab-panel/tab-panel.d.ts +7 -0
  171. package/dist/esm/types/components/tab/tab.context.d.ts +4 -0
  172. package/dist/esm/types/components/table/enhanced-remote-table/enhanced-remote-table.d.ts +13 -0
  173. package/dist/esm/types/components/table/enhanced-remote-table/enhanced-remote-table.mock.d.ts +11 -0
  174. package/dist/esm/types/components/table/enhanced-remote-table/index.d.ts +1 -0
  175. package/dist/esm/types/components/table/enhanced-table/enhanced-table-head.d.ts +16 -0
  176. package/dist/esm/types/components/table/enhanced-table/enhanced-table.d.ts +18 -0
  177. package/dist/esm/types/components/table/enhanced-table/enhanced-table.mock.d.ts +17 -0
  178. package/dist/esm/types/components/table/enhanced-table/index.d.ts +2 -0
  179. package/dist/esm/types/components/table/index.d.ts +2 -0
  180. package/dist/esm/types/components/table-list/index.d.ts +1 -0
  181. package/dist/esm/types/components/table-list/table-list.d.ts +21 -0
  182. package/dist/esm/types/components/value-displays/group-value-card/group-value-card.d.ts +15 -0
  183. package/dist/esm/types/components/value-displays/group-value-card/group-value-card.mock.d.ts +1 -0
  184. package/dist/esm/types/components/value-displays/group-value-card/index.d.ts +1 -0
  185. package/dist/esm/types/components/value-displays/index.d.ts +4 -0
  186. package/dist/esm/types/components/value-displays/value-boolean/index.d.ts +1 -0
  187. package/dist/esm/types/components/value-displays/value-boolean/value-boolean.d.ts +14 -0
  188. package/dist/esm/types/components/value-displays/value-card/index.d.ts +1 -0
  189. package/dist/esm/types/components/value-displays/value-card/value-card.d.ts +6 -0
  190. package/dist/esm/types/components/value-displays/value-text/index.d.ts +1 -0
  191. package/dist/esm/types/components/value-displays/value-text/value-text.d.ts +14 -0
  192. package/dist/esm/types/generators/generators.mock.d.ts +3 -0
  193. package/dist/esm/types/generators/generators.model.d.ts +33 -0
  194. package/dist/esm/types/generators/index.d.ts +4 -0
  195. package/dist/esm/types/generators/model-form/index.d.ts +1 -0
  196. package/dist/esm/types/generators/model-form/model-form.d.ts +8 -0
  197. package/dist/esm/types/generators/model-router/index.d.ts +1 -0
  198. package/dist/esm/types/generators/model-router/model-router.d.ts +35 -0
  199. package/dist/esm/types/generators/model-router/screens/add-screen.d.ts +2 -0
  200. package/dist/esm/types/generators/model-router/screens/details-screen.d.ts +2 -0
  201. package/dist/esm/types/generators/model-router/screens/index.d.ts +4 -0
  202. package/dist/esm/types/generators/model-router/screens/list-screen.d.ts +2 -0
  203. package/dist/esm/types/generators/model-router/screens/update-screen.d.ts +2 -0
  204. package/dist/esm/types/generators/object-details/index.d.ts +1 -0
  205. package/dist/esm/types/generators/object-details/object-details.d.ts +6 -0
  206. package/dist/esm/types/index.d.ts +4 -0
  207. package/dist/esm/types/layouts/app-bar-with-drawer-layout/app-bar-with-drawer-layout.d.ts +10 -0
  208. package/dist/esm/types/layouts/app-bar-with-drawer-layout/index.d.ts +1 -0
  209. package/dist/esm/types/layouts/data-table-layout/data-table-layout.d.ts +12 -0
  210. package/dist/esm/types/layouts/data-table-layout/index.d.ts +1 -0
  211. package/dist/esm/types/layouts/details-layout/details-layout.d.ts +12 -0
  212. package/dist/esm/types/layouts/details-layout/index.d.ts +1 -0
  213. package/dist/esm/types/layouts/form-layout/form-layout.d.ts +8 -0
  214. package/dist/esm/types/layouts/form-layout/index.d.ts +1 -0
  215. package/dist/esm/types/layouts/header-layout/header-layout.d.ts +8 -0
  216. package/dist/esm/types/layouts/header-layout/index.d.ts +1 -0
  217. package/dist/esm/types/layouts/index.d.ts +7 -0
  218. package/dist/esm/types/layouts/list-layout/index.d.ts +1 -0
  219. package/dist/esm/types/layouts/list-layout/list-layout.d.ts +8 -0
  220. package/dist/esm/types/layouts/tab-layout/index.d.ts +1 -0
  221. package/dist/esm/types/layouts/tab-layout/tab-layout.d.ts +7 -0
  222. package/dist/esm/types/providers/index.d.ts +1 -0
  223. package/dist/esm/types/providers/notification-center/index.d.ts +1 -0
  224. package/dist/esm/types/providers/notification-center/notification-center.context.d.ts +16 -0
  225. package/dist/esm/types/providers/notification-center/notification-center.provider.d.ts +5 -0
  226. package/dist/esm/types/utils/arrays.d.ts +5 -0
  227. package/dist/esm/types/utils/arrays.test.d.ts +1 -0
  228. package/dist/esm/types/utils/index.d.ts +2 -0
  229. package/dist/esm/types/utils/theme.d.ts +4 -0
  230. package/dist/index.d.ts +594 -0
  231. package/jest.config.js +14 -0
  232. package/jest.setup.ts +5 -0
  233. package/package.json +98 -0
  234. package/rollup.config.js +40 -0
  235. package/src/components/app-bar/app-bar.stories.tsx +54 -0
  236. package/src/components/app-bar/app-bar.test.tsx +142 -0
  237. package/src/components/app-bar/app-bar.tsx +150 -0
  238. package/src/components/app-bar/app-bar.types.ts +16 -0
  239. package/src/components/app-bar/index.ts +3 -0
  240. package/src/components/app-bar/mini-app-bar/index.ts +1 -0
  241. package/src/components/app-bar/mini-app-bar/mini-app-bar.tsx +31 -0
  242. package/src/components/bullet/bullet.stories.tsx +43 -0
  243. package/src/components/bullet/bullet.test.tsx +24 -0
  244. package/src/components/bullet/bullet.tsx +30 -0
  245. package/src/components/bullet/index.ts +1 -0
  246. package/src/components/center-container/center-container.stories.tsx +50 -0
  247. package/src/components/center-container/center-container.test.tsx +16 -0
  248. package/src/components/center-container/center-container.tsx +32 -0
  249. package/src/components/center-container/index.ts +1 -0
  250. package/src/components/drawer/__snapshots__/drawer.test.tsx.snap +20 -0
  251. package/src/components/drawer/drawer.context.ts +20 -0
  252. package/src/components/drawer/drawer.mixins.ts +24 -0
  253. package/src/components/drawer/drawer.mock.tsx +100 -0
  254. package/src/components/drawer/drawer.provider.tsx +23 -0
  255. package/src/components/drawer/drawer.test.tsx +97 -0
  256. package/src/components/drawer/drawer.tsx +30 -0
  257. package/src/components/drawer/drawer.types.ts +53 -0
  258. package/src/components/drawer/index.ts +5 -0
  259. package/src/components/drawer/mini-drawer/index.ts +1 -0
  260. package/src/components/drawer/mini-drawer/mini-drawer.stories.tsx +34 -0
  261. package/src/components/drawer/mini-drawer/mini-drawer.tsx +67 -0
  262. package/src/components/drawer-content/drawer-content.stories.tsx +29 -0
  263. package/src/components/drawer-content/drawer-content.test.tsx +34 -0
  264. package/src/components/drawer-content/drawer-content.tsx +18 -0
  265. package/src/components/drawer-content/index.ts +1 -0
  266. package/src/components/drawer-item/drawer-item.stories.tsx +62 -0
  267. package/src/components/drawer-item/drawer-item.test.tsx +119 -0
  268. package/src/components/drawer-item/drawer-item.tsx +69 -0
  269. package/src/components/drawer-item/index.ts +1 -0
  270. package/src/components/drawer-section/drawer-section.mock.tsx +39 -0
  271. package/src/components/drawer-section/drawer-section.stories.tsx +28 -0
  272. package/src/components/drawer-section/drawer-section.test.tsx +44 -0
  273. package/src/components/drawer-section/drawer-section.tsx +40 -0
  274. package/src/components/drawer-section/index.ts +1 -0
  275. package/src/components/header/header.dummy.ts +55 -0
  276. package/src/components/header/header.stories.tsx +116 -0
  277. package/src/components/header/header.test.tsx +167 -0
  278. package/src/components/header/header.tsx +185 -0
  279. package/src/components/header/index.ts +1 -0
  280. package/src/components/index.ts +17 -0
  281. package/src/components/label/index.ts +1 -0
  282. package/src/components/label/label.stories.tsx +49 -0
  283. package/src/components/label/label.test.tsx +30 -0
  284. package/src/components/label/label.tsx +60 -0
  285. package/src/components/link/index.ts +1 -0
  286. package/src/components/link/link.tsx +17 -0
  287. package/src/components/loading-area/index.ts +1 -0
  288. package/src/components/loading-area/loading-area.stories.tsx +17 -0
  289. package/src/components/loading-area/loading-area.test.tsx +11 -0
  290. package/src/components/loading-area/loading-area.tsx +13 -0
  291. package/src/components/placeholder/index.ts +1 -0
  292. package/src/components/placeholder/placeholder.mock.ts +15 -0
  293. package/src/components/placeholder/placeholder.stories.tsx +44 -0
  294. package/src/components/placeholder/placeholder.test.tsx +76 -0
  295. package/src/components/placeholder/placeholder.tsx +75 -0
  296. package/src/components/query-container/index.ts +1 -0
  297. package/src/components/query-container/query-container.stories.tsx +68 -0
  298. package/src/components/query-container/query-container.test.tsx +95 -0
  299. package/src/components/query-container/query-container.tsx +71 -0
  300. package/src/components/sign-in/index.ts +1 -0
  301. package/src/components/sign-in/sign-in.stories.tsx +36 -0
  302. package/src/components/sign-in/sign-in.test.tsx +95 -0
  303. package/src/components/sign-in/sign-in.tsx +97 -0
  304. package/src/components/tab/index.ts +3 -0
  305. package/src/components/tab/tab-card/index.ts +1 -0
  306. package/src/components/tab/tab-card/tab-card.dummy.tsx +27 -0
  307. package/src/components/tab/tab-card/tab-card.stories.tsx +22 -0
  308. package/src/components/tab/tab-card/tab-card.test.tsx +53 -0
  309. package/src/components/tab/tab-card/tab-card.tsx +30 -0
  310. package/src/components/tab/tab-panel/index.ts +1 -0
  311. package/src/components/tab/tab-panel/tab-panel.test.tsx +26 -0
  312. package/src/components/tab/tab-panel/tab-panel.tsx +27 -0
  313. package/src/components/tab/tab.context.ts +5 -0
  314. package/src/components/table/enhanced-remote-table/enhanced-remote-table.mock.tsx +27 -0
  315. package/src/components/table/enhanced-remote-table/enhanced-remote-table.stories.tsx +24 -0
  316. package/src/components/table/enhanced-remote-table/enhanced-remote-table.test.tsx +77 -0
  317. package/src/components/table/enhanced-remote-table/enhanced-remote-table.tsx +74 -0
  318. package/src/components/table/enhanced-remote-table/index.ts +1 -0
  319. package/src/components/table/enhanced-table/enhanced-table-head.tsx +58 -0
  320. package/src/components/table/enhanced-table/enhanced-table.mock.tsx +93 -0
  321. package/src/components/table/enhanced-table/enhanced-table.stories.tsx +21 -0
  322. package/src/components/table/enhanced-table/enhanced-table.test.tsx +107 -0
  323. package/src/components/table/enhanced-table/enhanced-table.tsx +136 -0
  324. package/src/components/table/enhanced-table/index.ts +2 -0
  325. package/src/components/table/index.ts +2 -0
  326. package/src/components/table-list/index.ts +1 -0
  327. package/src/components/table-list/table-list.stories.tsx +75 -0
  328. package/src/components/table-list/table-list.test.tsx +283 -0
  329. package/src/components/table-list/table-list.tsx +131 -0
  330. package/src/components/value-displays/group-value-card/group-value-card.mock.tsx +35 -0
  331. package/src/components/value-displays/group-value-card/group-value-card.stories.tsx +26 -0
  332. package/src/components/value-displays/group-value-card/group-value-card.test.tsx +58 -0
  333. package/src/components/value-displays/group-value-card/group-value-card.tsx +65 -0
  334. package/src/components/value-displays/group-value-card/index.ts +1 -0
  335. package/src/components/value-displays/index.ts +4 -0
  336. package/src/components/value-displays/value-boolean/index.ts +1 -0
  337. package/src/components/value-displays/value-boolean/value-boolean.stories.tsx +25 -0
  338. package/src/components/value-displays/value-boolean/value-boolean.test.tsx +27 -0
  339. package/src/components/value-displays/value-boolean/value-boolean.tsx +33 -0
  340. package/src/components/value-displays/value-card/index.ts +1 -0
  341. package/src/components/value-displays/value-card/value-card.stories.tsx +22 -0
  342. package/src/components/value-displays/value-card/value-card.test.tsx +18 -0
  343. package/src/components/value-displays/value-card/value-card.tsx +12 -0
  344. package/src/components/value-displays/value-text/index.ts +1 -0
  345. package/src/components/value-displays/value-text/value-test.test.tsx +21 -0
  346. package/src/components/value-displays/value-text/value-text.stories.tsx +26 -0
  347. package/src/components/value-displays/value-text/value-text.tsx +32 -0
  348. package/src/generators/generators.mock.ts +215 -0
  349. package/src/generators/generators.model.ts +41 -0
  350. package/src/generators/index.ts +4 -0
  351. package/src/generators/model-form/index.ts +1 -0
  352. package/src/generators/model-form/model-form.stories.tsx +30 -0
  353. package/src/generators/model-form/model-form.test.tsx +98 -0
  354. package/src/generators/model-form/model-form.tsx +97 -0
  355. package/src/generators/model-router/index.ts +1 -0
  356. package/src/generators/model-router/model-router.stories.tsx +160 -0
  357. package/src/generators/model-router/model-router.test.tsx +633 -0
  358. package/src/generators/model-router/model-router.tsx +54 -0
  359. package/src/generators/model-router/screens/add-screen.tsx +52 -0
  360. package/src/generators/model-router/screens/details-screen.tsx +53 -0
  361. package/src/generators/model-router/screens/index.ts +4 -0
  362. package/src/generators/model-router/screens/list-screen.tsx +81 -0
  363. package/src/generators/model-router/screens/update-screen.tsx +62 -0
  364. package/src/generators/object-details/index.ts +1 -0
  365. package/src/generators/object-details/object-details.stories.tsx +20 -0
  366. package/src/generators/object-details/object-details.test.tsx +21 -0
  367. package/src/generators/object-details/object-details.tsx +70 -0
  368. package/src/index.ts +4 -0
  369. package/src/layouts/app-bar-with-drawer-layout/app-bar-with-drawer-layout.stories.tsx +29 -0
  370. package/src/layouts/app-bar-with-drawer-layout/app-bar-with-drawer-layout.tsx +34 -0
  371. package/src/layouts/app-bar-with-drawer-layout/index.ts +1 -0
  372. package/src/layouts/data-table-layout/data-table-layout.stories.tsx +94 -0
  373. package/src/layouts/data-table-layout/data-table-layout.tsx +30 -0
  374. package/src/layouts/data-table-layout/index.ts +1 -0
  375. package/src/layouts/details-layout/details-layout.stories.tsx +81 -0
  376. package/src/layouts/details-layout/details-layout.tsx +33 -0
  377. package/src/layouts/details-layout/index.ts +1 -0
  378. package/src/layouts/form-layout/form-layout.stories.tsx +65 -0
  379. package/src/layouts/form-layout/form-layout.tsx +18 -0
  380. package/src/layouts/form-layout/index.ts +1 -0
  381. package/src/layouts/header-layout/header-layout.stories.tsx +68 -0
  382. package/src/layouts/header-layout/header-layout.tsx +24 -0
  383. package/src/layouts/header-layout/index.ts +1 -0
  384. package/src/layouts/index.ts +7 -0
  385. package/src/layouts/list-layout/index.ts +1 -0
  386. package/src/layouts/list-layout/list-layout.stories.tsx +102 -0
  387. package/src/layouts/list-layout/list-layout.tsx +36 -0
  388. package/src/layouts/tab-layout/index.ts +1 -0
  389. package/src/layouts/tab-layout/tab-layout.stories.tsx +88 -0
  390. package/src/layouts/tab-layout/tab-layout.tsx +11 -0
  391. package/src/providers/index.ts +1 -0
  392. package/src/providers/notification-center/index.ts +1 -0
  393. package/src/providers/notification-center/notification-center.context.ts +37 -0
  394. package/src/providers/notification-center/notification-center.provider.tsx +51 -0
  395. package/src/providers/notification-center/notification-center.stories.tsx +52 -0
  396. package/src/providers/notification-center/notification-center.test.tsx +112 -0
  397. package/src/storybook.tsx +56 -0
  398. package/src/tests/assertions.ts +72 -0
  399. package/src/tests/components.tsx +60 -0
  400. package/src/tests/content-placeholder.stories.tsx +16 -0
  401. package/src/tests/index.ts +3 -0
  402. package/src/tests/skeleton-card.stories.tsx +18 -0
  403. package/src/tests/testing-library.tsx +65 -0
  404. package/src/utils/arrays.test.ts +9 -0
  405. package/src/utils/arrays.ts +7 -0
  406. package/src/utils/index.ts +2 -0
  407. package/src/utils/theme.ts +6 -0
  408. package/tsconfig.json +27 -0
  409. package/tsconfig.rollup.json +26 -0
@@ -0,0 +1,52 @@
1
+ import React, { useEffect } from "react";
2
+ import { useNavigate } from "react-router-dom";
3
+ import { ModelRouterProps } from "../..";
4
+ import { FormLayout, FormLayoutProps } from "../../../layouts";
5
+ import { useNotificationCenter } from "../../../providers/notification-center/notification-center.context";
6
+
7
+ const getAddPropsFromModel = ({ model, modelName, add }: ModelRouterProps): FormLayoutProps => {
8
+ return {
9
+ loading: add.request.loading,
10
+ headerProps: {
11
+ title: `Add ${modelName}`,
12
+ preset: "default",
13
+ breadcrumbs: [
14
+ {
15
+ id: "list",
16
+ text: modelName,
17
+ link: "/",
18
+ },
19
+ {
20
+ id: "add",
21
+ text: `Add new ${modelName}`,
22
+ link: "/add",
23
+ },
24
+ ],
25
+ },
26
+ modelFormProps: {
27
+ model,
28
+ saveButtonText: "Save",
29
+ onSubmit: add.onSubmit,
30
+ },
31
+ };
32
+ };
33
+
34
+ export const AddScreen = (props: ModelRouterProps) => {
35
+ const navigate = useNavigate();
36
+ const { show } = useNotificationCenter();
37
+
38
+ useEffect(() => {
39
+ if (props.add.request.success) {
40
+ show({ message: "Item added successfully", severity: "success" });
41
+ navigate("/");
42
+ }
43
+ }, [props.add.request.success]);
44
+
45
+ useEffect(() => {
46
+ if (props.add.request.error) {
47
+ show({ title: "We had an error", message: props.add.request.error, severity: "error" });
48
+ }
49
+ }, [props.add.request.error]);
50
+
51
+ return <FormLayout {...getAddPropsFromModel(props)} />;
52
+ };
@@ -0,0 +1,53 @@
1
+ import React, { useEffect } from "react";
2
+ import { useParams } from "react-router-dom";
3
+ import { ModelRouterProps } from "..";
4
+ import { PlaceholderIconArgs } from "../../../components";
5
+ import { DetailsLayout, DetailsLayoutProps } from "../../../layouts";
6
+ import SentimentVeryDissatisfiedIcon from "@mui/icons-material/SentimentVeryDissatisfied";
7
+
8
+ const getDetailsPropsFromModel = (
9
+ { modelName, model, detail }: ModelRouterProps,
10
+ id: string,
11
+ ): DetailsLayoutProps => {
12
+ return {
13
+ loading: detail.request.loading,
14
+ headerProps: {
15
+ title: id,
16
+ preset: "default",
17
+ breadcrumbs: [
18
+ {
19
+ id: "list",
20
+ text: modelName,
21
+ link: "/",
22
+ },
23
+ {
24
+ id: "detail",
25
+ text: id,
26
+ link: `/${id}`,
27
+ },
28
+ ],
29
+ },
30
+ objectDetailsProps: {
31
+ model,
32
+ instance: detail.instance,
33
+ },
34
+ notFoundPlaceholderProps: {
35
+ title: "Not found",
36
+ subtitle: "There is no item with that id",
37
+ icon: ({ size, color }: PlaceholderIconArgs) => (
38
+ <SentimentVeryDissatisfiedIcon color={color} sx={{ fontSize: size }} />
39
+ ),
40
+ },
41
+ };
42
+ };
43
+
44
+ export const DetailsScreen = (props: ModelRouterProps) => {
45
+ const onScreenMount = props.detail.onScreenMount;
46
+ const { id = "" } = useParams();
47
+
48
+ useEffect(() => {
49
+ onScreenMount && onScreenMount(id);
50
+ }, [id]);
51
+
52
+ return <DetailsLayout {...getDetailsPropsFromModel(props, id)} />;
53
+ };
@@ -0,0 +1,4 @@
1
+ export * from "./update-screen";
2
+ export * from "./list-screen";
3
+ export * from "./add-screen";
4
+ export * from "./details-screen";
@@ -0,0 +1,81 @@
1
+ import React, { useEffect } from "react";
2
+ import { useNavigate } from "react-router-dom";
3
+ import { BasicData } from "../../../components";
4
+ import { ListLayoutProps, ListLayout } from "../../../layouts";
5
+ import type { ModelRouterProps } from "../model-router";
6
+
7
+ const getListPropsFromModel = <T extends BasicData>(
8
+ { model, modelName, list }: ModelRouterProps,
9
+ onClickListItem: (d: T) => void,
10
+ onClickListOption: (optionId: "edit" | "remove", item: T) => void,
11
+ ): ListLayoutProps<T> => {
12
+ return {
13
+ loading: list.listRequest.loading || list.requestDelete.loading,
14
+ headerProps: {
15
+ title: modelName,
16
+ preset: "default",
17
+ actions: [
18
+ {
19
+ id: "add",
20
+ text: "Add",
21
+ href: "/add",
22
+ },
23
+ ],
24
+ },
25
+ emptyPlaceholderProps: {
26
+ title: `There is no ${modelName}`,
27
+ subtitle: `There is no item right now`,
28
+ },
29
+ listProps: {
30
+ columns: model.fields
31
+ .filter(({ listable }) => listable)
32
+ .map(({ id, name, type }) => ({
33
+ disablePadding: false,
34
+ id,
35
+ label: name,
36
+ numeric: type === "number",
37
+ sort: false,
38
+ })),
39
+ data: list.data,
40
+ defaultSort: model.fields[0].id,
41
+ onClick: onClickListItem,
42
+ options: [
43
+ {
44
+ id: "edit",
45
+ label: "Edit",
46
+ onClick: (item) => onClickListOption("edit", item),
47
+ },
48
+ {
49
+ id: "remove",
50
+ label: "Remove",
51
+ onClick: (item) => onClickListOption("remove", item),
52
+ },
53
+ ],
54
+ },
55
+ };
56
+ };
57
+
58
+ export const ListScreen = (props: ModelRouterProps) => {
59
+ const { requestList = () => null } = props;
60
+ const navigate = useNavigate();
61
+
62
+ useEffect(() => {
63
+ requestList();
64
+ }, []);
65
+
66
+ const handleClickListItem = (item: any) => {
67
+ navigate(`/${item.id}`);
68
+ };
69
+
70
+ const handleClickListOption = (optionId: "edit" | "remove", item: BasicData) => {
71
+ if (optionId === "edit") {
72
+ navigate(`/${item.id}/update`);
73
+ } else {
74
+ props.list.onClickRemoveItem(item);
75
+ }
76
+ };
77
+
78
+ return (
79
+ <ListLayout {...getListPropsFromModel(props, handleClickListItem, handleClickListOption)} />
80
+ );
81
+ };
@@ -0,0 +1,62 @@
1
+ import React, { useEffect } from "react";
2
+ import { useNavigate, useParams } from "react-router-dom";
3
+ import { FormLayout, FormLayoutProps } from "../../../layouts";
4
+ import { useNotificationCenter } from "../../../providers/notification-center/notification-center.context";
5
+ import type { ModelRouterProps } from "../model-router";
6
+
7
+ const getUpdatePropsFromModel = (
8
+ { modelName, model, update: { instance, onSubmit, request, requestInstance } }: ModelRouterProps,
9
+ id: string,
10
+ ): FormLayoutProps => {
11
+ const loading = request.loading || requestInstance.loading;
12
+
13
+ return {
14
+ loading: loading,
15
+ headerProps: {
16
+ title: `Edit ${id}`,
17
+ preset: "default",
18
+ breadcrumbs: [
19
+ {
20
+ id: "list",
21
+ text: modelName,
22
+ link: "/",
23
+ },
24
+ {
25
+ id: "update",
26
+ text: `Edit ${id}`,
27
+ link: `/${id}/update`,
28
+ },
29
+ ],
30
+ },
31
+ modelFormProps: {
32
+ model,
33
+ initialValues: instance,
34
+ saveButtonText: "Save",
35
+ onSubmit: onSubmit,
36
+ },
37
+ };
38
+ };
39
+
40
+ export const UpdateScreen = (props: ModelRouterProps) => {
41
+ const { id = "" } = useParams();
42
+ const navigate = useNavigate();
43
+ const { show } = useNotificationCenter();
44
+ const { onRequestInstance = () => null, request } = props.update;
45
+
46
+ useEffect(() => {
47
+ onRequestInstance(id);
48
+ }, [id]);
49
+
50
+ useEffect(() => {
51
+ if (request.success) {
52
+ show({
53
+ title: "Item updated",
54
+ message: `The item ${id} has been updated successfully`,
55
+ severity: "success",
56
+ });
57
+ navigate("/");
58
+ }
59
+ }, [request.success]);
60
+
61
+ return <FormLayout {...getUpdatePropsFromModel(props, id)} />;
62
+ };
@@ -0,0 +1 @@
1
+ export * from "./object-details";
@@ -0,0 +1,20 @@
1
+ import React from "react";
2
+ import { ComponentMeta } from "@storybook/react";
3
+ import { ObjectDetails } from "./object-details";
4
+ import { withPadding } from "../../storybook";
5
+ import { createModelInstance, mockModel } from "../generators.mock";
6
+
7
+ const instance = createModelInstance(mockModel);
8
+
9
+ export default {
10
+ title: "Generators/ObjectDetails",
11
+ component: ObjectDetails,
12
+ decorators: [withPadding()],
13
+ parameters: {
14
+ layout: "fullscreen",
15
+ },
16
+ } as ComponentMeta<typeof ObjectDetails>;
17
+
18
+ export const Default = () => {
19
+ return <ObjectDetails model={mockModel} instance={instance} />;
20
+ };
@@ -0,0 +1,21 @@
1
+ import React from "react";
2
+ import { expectModelFieldValue, render } from "../../tests";
3
+ import { mockModel, createModelInstance } from "../generators.mock";
4
+ import { ObjectDetails } from "./object-details";
5
+
6
+ describe("ObjectDetails", () => {
7
+ const renderComponent = () => {
8
+ const instance = createModelInstance(mockModel);
9
+ return {
10
+ ...render(<ObjectDetails model={mockModel} instance={instance} />),
11
+ instance,
12
+ model: mockModel,
13
+ };
14
+ };
15
+
16
+ it("would render a label/value pair for each detail", () => {
17
+ const { instance, model } = renderComponent();
18
+
19
+ model.fields.forEach((detail) => expectModelFieldValue(detail, instance));
20
+ });
21
+ });
@@ -0,0 +1,70 @@
1
+ import React from "react";
2
+ import { Grid } from "@mui/material";
3
+ import {
4
+ GroupValueCard,
5
+ GroupValueItem,
6
+ ValueBoolean,
7
+ ValueCard,
8
+ ValueText,
9
+ } from "../../components";
10
+ import { ModelField, GroupField, Model } from "../generators.model";
11
+
12
+ const singleDetailValueFactory = ({ id, name, type }: ModelField, instance: object) => {
13
+ const value = instance[id];
14
+ if (type === "boolean") {
15
+ return <ValueBoolean label={name} value={value} />;
16
+ }
17
+ return <ValueText label={name} value={value?.toString()} />;
18
+ };
19
+
20
+ interface ObjectDetailGroupProps {
21
+ detail: GroupField;
22
+ instance: object;
23
+ }
24
+
25
+ const ObjectDetailGroup = ({
26
+ detail: { name, description, value },
27
+ instance,
28
+ }: ObjectDetailGroupProps) => {
29
+ return (
30
+ <GroupValueCard title={name} subtitle={description}>
31
+ {value.map((field) => {
32
+ const { id, xs, sm, md, lg, xl } = field;
33
+ return (
34
+ <GroupValueItem key={id} xs={xs} sm={sm} md={md} lg={lg} xl={xl}>
35
+ {singleDetailValueFactory(field, instance)}
36
+ </GroupValueItem>
37
+ );
38
+ })}
39
+ </GroupValueCard>
40
+ );
41
+ };
42
+
43
+ export interface ObjectDetailsProps {
44
+ model: Model;
45
+ instance: object;
46
+ }
47
+
48
+ export const ObjectDetails = ({ model, instance }: ObjectDetailsProps) => {
49
+ return (
50
+ <Grid container spacing={2}>
51
+ {model.fields.map((field) => {
52
+ const { id, type, xs = 3, sm, md, lg, xl } = field;
53
+
54
+ if (type === "group") {
55
+ return (
56
+ <Grid item key={id} xs={12}>
57
+ <ObjectDetailGroup detail={field} instance={instance[id]} />
58
+ </Grid>
59
+ );
60
+ }
61
+
62
+ return (
63
+ <Grid item key={id} xs={xs} sm={sm} md={md} lg={lg} xl={xl}>
64
+ <ValueCard>{singleDetailValueFactory(field, instance)}</ValueCard>
65
+ </Grid>
66
+ );
67
+ })}
68
+ </Grid>
69
+ );
70
+ };
package/src/index.ts ADDED
@@ -0,0 +1,4 @@
1
+ export * from "./components";
2
+ export * from "./utils";
3
+ export * from "./layouts";
4
+ export * from "./generators";
@@ -0,0 +1,29 @@
1
+ import React from "react";
2
+ import { ComponentMeta } from "@storybook/react";
3
+ import { AppBarWithDrawerLayout } from "./app-bar-with-drawer-layout";
4
+ import { ContentPlaceholder } from "../../tests";
5
+ import { mockNav } from "../../components/drawer/drawer.mock";
6
+ import { MiniAppBar } from "../../components/app-bar";
7
+ import { DrawerContent, MiniDrawer } from "../../components";
8
+
9
+ export default {
10
+ title: "Layouts/AppBarWithDrawer",
11
+ component: AppBarWithDrawerLayout,
12
+ parameters: {
13
+ layout: "fullscreen",
14
+ },
15
+ } as ComponentMeta<typeof AppBarWithDrawerLayout>;
16
+
17
+ export const MiniDrawerStory = () => (
18
+ <AppBarWithDrawerLayout
19
+ drawer={
20
+ <MiniDrawer>
21
+ <DrawerContent nav={mockNav} />
22
+ </MiniDrawer>
23
+ }
24
+ appBar={<MiniAppBar title="Lorem ipsum" onClickSignOut={() => null} />}
25
+ >
26
+ <ContentPlaceholder />
27
+ </AppBarWithDrawerLayout>
28
+ );
29
+ MiniDrawerStory.storyName = "Mini drawer";
@@ -0,0 +1,34 @@
1
+ import React, { PropsWithChildren, ReactElement } from "react";
2
+ import { styled } from "@mui/material/styles";
3
+ import { AppBarComponent } from "../../components/app-bar";
4
+ import { DrawerElement } from "../../components/drawer";
5
+ import { Box, AppBarProps } from "@mui/material";
6
+ import { DrawerProvider } from "../../components/drawer/drawer.provider";
7
+
8
+ const DrawerHeader = styled("div")(({ theme }) => ({
9
+ display: "flex",
10
+ alignItems: "center",
11
+ justifyContent: "flex-end",
12
+ padding: theme.spacing(0, 1),
13
+ ...theme.mixins.toolbar,
14
+ }));
15
+
16
+ interface Props {
17
+ drawer: DrawerElement;
18
+ appBar: ReactElement<AppBarProps, AppBarComponent>;
19
+ }
20
+
21
+ export const AppBarWithDrawerLayout = ({ drawer, appBar, children }: PropsWithChildren<Props>) => {
22
+ return (
23
+ <Box sx={{ display: "flex" }}>
24
+ <DrawerProvider>
25
+ {appBar}
26
+ {drawer}
27
+ <Box sx={{ flexGrow: 1, p: 3 }}>
28
+ <DrawerHeader />
29
+ {children}
30
+ </Box>
31
+ </DrawerProvider>
32
+ </Box>
33
+ );
34
+ };
@@ -0,0 +1 @@
1
+ export * from "./app-bar-with-drawer-layout";
@@ -0,0 +1,94 @@
1
+ import React from "react";
2
+ import { ComponentMeta } from "@storybook/react";
3
+ import { createTemplate } from "../../storybook";
4
+ import { DataTableLayout } from "./data-table-layout";
5
+ import { useDemoData } from "@mui/x-data-grid-generator";
6
+ import { withRouter } from "storybook-addon-react-router-v6";
7
+ import { PlaceholderIconArgs } from "../../components";
8
+ import BackupTableIcon from "@mui/icons-material/BackupTable";
9
+
10
+ const maxColumns = 7;
11
+ const editable = true;
12
+ const breadcrumbs = [
13
+ {
14
+ id: "list",
15
+ text: "Items",
16
+ link: "/items",
17
+ },
18
+ {
19
+ id: "item",
20
+ text: "Item 1",
21
+ link: "/items/1",
22
+ },
23
+ ];
24
+
25
+ const args = {
26
+ size: 100,
27
+ dataSetType: "Commodity",
28
+ headerProps: {
29
+ title: "Lorem ipsum",
30
+ subtitle: "Dolor sit amet",
31
+ breadcrumbs,
32
+ actions: [
33
+ {
34
+ id: "new",
35
+ text: "Add",
36
+ },
37
+ ],
38
+ },
39
+ dataGridProps: {
40
+ height: 500,
41
+ },
42
+ emptyPlaceholderProps: {
43
+ title: "No item has found",
44
+ subtitle: "First you have to create an item",
45
+ icon: ({ size, color }: PlaceholderIconArgs) => (
46
+ <BackupTableIcon color={color} sx={{ fontSize: size }} />
47
+ ),
48
+ actions: [
49
+ {
50
+ id: "add",
51
+ text: "Add",
52
+ href: "/item/add",
53
+ },
54
+ ],
55
+ },
56
+ };
57
+
58
+ export default {
59
+ title: "Layouts/DataTableLayout",
60
+ component: DataTableLayout,
61
+ decorators: [withRouter],
62
+ parameters: {
63
+ layout: "fullscreen",
64
+ },
65
+ } as ComponentMeta<typeof DataTableLayout>;
66
+
67
+ const Template = createTemplate(({ loading, dataSetType, size, dataGridProps, ...rest }) => {
68
+ const { data } = useDemoData({
69
+ dataSet: dataSetType,
70
+ rowLength: size,
71
+ maxColumns,
72
+ editable,
73
+ });
74
+ return (
75
+ <DataTableLayout loading={loading} dataGridProps={{ ...data, ...dataGridProps }} {...rest} />
76
+ );
77
+ });
78
+
79
+ export const Default = Template.bind({});
80
+ Default.args = {
81
+ ...args,
82
+ };
83
+
84
+ export const Loading = Template.bind({});
85
+ Loading.args = {
86
+ ...args,
87
+ loading: true,
88
+ };
89
+
90
+ export const Empty = Template.bind({});
91
+ Empty.args = {
92
+ ...args,
93
+ size: 0,
94
+ };
@@ -0,0 +1,30 @@
1
+ import React from "react";
2
+ import { HeaderProps, Placeholder, PlaceholderProps } from "../../components";
3
+ import { DataGrid, DataGridProps } from "@mui/x-data-grid";
4
+ import { HeaderLayout } from "../header-layout";
5
+
6
+ interface Props {
7
+ loading?: boolean;
8
+ headerProps: HeaderProps;
9
+ emptyPlaceholderProps: PlaceholderProps;
10
+ dataGridProps: DataGridProps & { height: number };
11
+ }
12
+
13
+ export const DataTableLayout = ({
14
+ loading,
15
+ headerProps,
16
+ emptyPlaceholderProps,
17
+ dataGridProps: { height, rows, ...restDataGridProps },
18
+ }: Props) => {
19
+ const isEmpty = rows.length === 0;
20
+
21
+ return (
22
+ <HeaderLayout loading={loading} headerProps={headerProps}>
23
+ {!isEmpty ? (
24
+ <DataGrid rows={rows} {...restDataGridProps} sx={{ height }} />
25
+ ) : (
26
+ <Placeholder {...emptyPlaceholderProps} />
27
+ )}
28
+ </HeaderLayout>
29
+ );
30
+ };
@@ -0,0 +1 @@
1
+ export * from "./data-table-layout";
@@ -0,0 +1,81 @@
1
+ import React from "react";
2
+ import { ComponentMeta } from "@storybook/react";
3
+ import { createTemplate } from "../../storybook";
4
+ import { DetailsLayout } from "./details-layout";
5
+ import { withRouter } from "storybook-addon-react-router-v6";
6
+ import { mockModel, createModelInstance } from "../../generators/generators.mock";
7
+ import SentimentVeryDissatisfiedIcon from "@mui/icons-material/SentimentVeryDissatisfied";
8
+ import { PlaceholderIconArgs } from "../../components";
9
+
10
+ const breadcrumbs = [
11
+ {
12
+ id: "list",
13
+ text: "Items",
14
+ link: "/items",
15
+ },
16
+ {
17
+ id: "item",
18
+ text: "Item 1",
19
+ link: "/items/1",
20
+ },
21
+ ];
22
+
23
+ const args = {
24
+ size: 100,
25
+ dataSetType: "Commodity",
26
+ headerProps: {
27
+ title: "Lorem ipsum",
28
+ subtitle: "Dolor sit amet",
29
+ breadcrumbs,
30
+ actions: [
31
+ {
32
+ id: "new",
33
+ text: "Add",
34
+ },
35
+ ],
36
+ },
37
+ notFoundPlaceholderProps: {
38
+ title: "Not found",
39
+ subtitle: "There is no item with that id",
40
+ icon: ({ size, color }: PlaceholderIconArgs) => (
41
+ <SentimentVeryDissatisfiedIcon color={color} sx={{ fontSize: size }} />
42
+ ),
43
+ },
44
+ };
45
+
46
+ export default {
47
+ title: "Layouts/DetailsLayout",
48
+ component: DetailsLayout,
49
+ decorators: [withRouter],
50
+ parameters: {
51
+ layout: "fullscreen",
52
+ },
53
+ } as ComponentMeta<typeof DetailsLayout>;
54
+
55
+ const Template = createTemplate(DetailsLayout);
56
+
57
+ export const Default = Template.bind({});
58
+ Default.args = {
59
+ ...args,
60
+ objectDetailsProps: {
61
+ model: mockModel,
62
+ instance: createModelInstance(mockModel),
63
+ },
64
+ };
65
+
66
+ export const Loading = Template.bind({});
67
+ Loading.args = {
68
+ ...args,
69
+ loading: true,
70
+ objectDetailsProps: {
71
+ model: mockModel,
72
+ },
73
+ };
74
+
75
+ export const NotFound = Template.bind({});
76
+ NotFound.args = {
77
+ ...args,
78
+ objectDetailsProps: {
79
+ model: mockModel,
80
+ },
81
+ };
@@ -0,0 +1,33 @@
1
+ import React from "react";
2
+ import { HeaderProps, Placeholder, PlaceholderProps } from "../../components";
3
+ import { Model, ObjectDetails } from "../../generators";
4
+ import { HeaderLayout } from "../header-layout";
5
+
6
+ export interface DetailsLayoutProps {
7
+ loading?: boolean;
8
+ headerProps: HeaderProps;
9
+ objectDetailsProps: {
10
+ model: Model;
11
+ instance?: object;
12
+ };
13
+ notFoundPlaceholderProps: PlaceholderProps;
14
+ }
15
+
16
+ export const DetailsLayout = ({
17
+ loading,
18
+ headerProps,
19
+ notFoundPlaceholderProps,
20
+ objectDetailsProps: { model, instance },
21
+ }: DetailsLayoutProps) => {
22
+ const notFound = !loading && !instance;
23
+
24
+ return (
25
+ <HeaderLayout loading={loading} headerProps={headerProps}>
26
+ {!notFound && instance ? (
27
+ <ObjectDetails model={model} instance={instance} />
28
+ ) : (
29
+ <Placeholder {...notFoundPlaceholderProps} />
30
+ )}
31
+ </HeaderLayout>
32
+ );
33
+ };