@pautena/react-design-system 0.0.1 → 0.1.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 (170) hide show
  1. package/.prettierignore +2 -1
  2. package/babel.config.js +10 -0
  3. package/dist/cjs/index.js +28 -28
  4. package/dist/cjs/index.js.map +1 -1
  5. package/dist/cjs/types/components/app-bar/app-bar.types.d.ts +2 -1
  6. package/dist/cjs/types/components/content/content.d.ts +2 -0
  7. package/dist/cjs/types/components/content/content.types.d.ts +4 -0
  8. package/dist/cjs/types/components/content/index.d.ts +2 -0
  9. package/dist/cjs/types/components/header/header.d.ts +2 -61
  10. package/dist/cjs/types/components/header/header.types.d.ts +55 -0
  11. package/dist/cjs/types/components/header/index.d.ts +1 -0
  12. package/dist/cjs/types/components/index.d.ts +1 -0
  13. package/dist/cjs/types/components/tab/index.d.ts +0 -1
  14. package/dist/cjs/types/components/tab/tab-card/tab-card.d.ts +1 -2
  15. package/dist/cjs/types/components/table-list/table-list.d.ts +4 -7
  16. package/dist/cjs/types/generators/generators.mock.d.ts +22 -1
  17. package/dist/cjs/types/generators/generators.model.d.ts +5 -1
  18. package/dist/cjs/types/generators/model-form/model-form.d.ts +5 -5
  19. package/dist/cjs/types/generators/model-router/model-router.d.ts +4 -35
  20. package/dist/cjs/types/generators/model-router/model-router.types.d.ts +8 -0
  21. package/dist/cjs/types/generators/model-router/screens/add-screen.d.ts +16 -2
  22. package/dist/cjs/types/generators/model-router/screens/details-screen.d.ts +20 -2
  23. package/dist/cjs/types/generators/model-router/screens/list-screen.d.ts +30 -2
  24. package/dist/cjs/types/generators/model-router/screens/screens.types.d.ts +11 -0
  25. package/dist/cjs/types/generators/model-router/screens/update-screen.d.ts +29 -2
  26. package/dist/cjs/types/generators/model-router/stories/templates.d.ts +23 -0
  27. package/dist/cjs/types/generators/object-details/object-details.d.ts +4 -4
  28. package/dist/cjs/types/layouts/app-bar-with-drawer-layout/app-bar-with-drawer-layout.d.ts +5 -8
  29. package/dist/cjs/types/layouts/header-layout/header-layout.d.ts +4 -5
  30. package/dist/cjs/types/layouts/index.d.ts +1 -6
  31. package/dist/cjs/types/providers/index.d.ts +1 -0
  32. package/dist/cjs/types/providers/notification-center/index.d.ts +1 -0
  33. package/dist/cjs/types/providers/tab-provider/index.d.ts +2 -0
  34. package/dist/cjs/types/providers/tab-provider/tab-provider.context.d.ts +4 -0
  35. package/dist/cjs/types/providers/tab-provider/tab-provider.provider.d.ts +6 -0
  36. package/dist/cjs/types/utils/theme.d.ts +7 -4
  37. package/dist/esm/index.js +28 -28
  38. package/dist/esm/index.js.map +1 -1
  39. package/dist/esm/types/components/app-bar/app-bar.types.d.ts +2 -1
  40. package/dist/esm/types/components/content/content.d.ts +2 -0
  41. package/dist/esm/types/components/content/content.types.d.ts +4 -0
  42. package/dist/esm/types/components/content/index.d.ts +2 -0
  43. package/dist/esm/types/components/header/header.d.ts +2 -61
  44. package/dist/esm/types/components/header/header.types.d.ts +55 -0
  45. package/dist/esm/types/components/header/index.d.ts +1 -0
  46. package/dist/esm/types/components/index.d.ts +1 -0
  47. package/dist/esm/types/components/tab/index.d.ts +0 -1
  48. package/dist/esm/types/components/tab/tab-card/tab-card.d.ts +1 -2
  49. package/dist/esm/types/components/table-list/table-list.d.ts +4 -7
  50. package/dist/esm/types/generators/generators.mock.d.ts +22 -1
  51. package/dist/esm/types/generators/generators.model.d.ts +5 -1
  52. package/dist/esm/types/generators/model-form/model-form.d.ts +5 -5
  53. package/dist/esm/types/generators/model-router/model-router.d.ts +4 -35
  54. package/dist/esm/types/generators/model-router/model-router.types.d.ts +8 -0
  55. package/dist/esm/types/generators/model-router/screens/add-screen.d.ts +16 -2
  56. package/dist/esm/types/generators/model-router/screens/details-screen.d.ts +20 -2
  57. package/dist/esm/types/generators/model-router/screens/list-screen.d.ts +30 -2
  58. package/dist/esm/types/generators/model-router/screens/screens.types.d.ts +11 -0
  59. package/dist/esm/types/generators/model-router/screens/update-screen.d.ts +29 -2
  60. package/dist/esm/types/generators/model-router/stories/templates.d.ts +23 -0
  61. package/dist/esm/types/generators/object-details/object-details.d.ts +4 -4
  62. package/dist/esm/types/layouts/app-bar-with-drawer-layout/app-bar-with-drawer-layout.d.ts +5 -8
  63. package/dist/esm/types/layouts/header-layout/header-layout.d.ts +4 -5
  64. package/dist/esm/types/layouts/index.d.ts +1 -6
  65. package/dist/esm/types/providers/index.d.ts +1 -0
  66. package/dist/esm/types/providers/notification-center/index.d.ts +1 -0
  67. package/dist/esm/types/providers/tab-provider/index.d.ts +2 -0
  68. package/dist/esm/types/providers/tab-provider/tab-provider.context.d.ts +4 -0
  69. package/dist/esm/types/providers/tab-provider/tab-provider.provider.d.ts +6 -0
  70. package/dist/esm/types/utils/theme.d.ts +7 -4
  71. package/dist/index.d.ts +146 -122
  72. package/jest.config.js +3 -0
  73. package/package.json +3 -1
  74. package/rollup.config.js +12 -0
  75. package/src/components/app-bar/app-bar.types.ts +2 -1
  76. package/src/components/content/content.stories.tsx +23 -0
  77. package/src/components/content/content.test.tsx +26 -0
  78. package/src/components/content/content.tsx +11 -0
  79. package/src/components/content/content.types.ts +5 -0
  80. package/src/components/content/index.ts +2 -0
  81. package/src/components/drawer-item/drawer-item.tsx +2 -0
  82. package/src/components/header/header.test.tsx +18 -16
  83. package/src/components/header/header.tsx +5 -69
  84. package/src/components/header/header.types.ts +61 -0
  85. package/src/components/header/index.ts +1 -0
  86. package/src/components/index.ts +1 -0
  87. package/src/components/tab/index.ts +0 -1
  88. package/src/components/tab/tab-card/tab-card.dummy.tsx +14 -11
  89. package/src/components/tab/tab-card/tab-card.test.tsx +2 -2
  90. package/src/components/tab/tab-card/tab-card.tsx +11 -14
  91. package/src/components/tab/tab-panel/tab-panel.test.tsx +4 -4
  92. package/src/components/tab/tab-panel/tab-panel.tsx +2 -2
  93. package/src/components/table/enhanced-table/enhanced-table.tsx +2 -2
  94. package/src/components/table-list/table-list.test.tsx +3 -2
  95. package/src/components/table-list/table-list.tsx +4 -8
  96. package/src/components/value-displays/group-value-card/group-value-card.tsx +2 -4
  97. package/src/generators/generators.mock.ts +25 -2
  98. package/src/generators/generators.model.ts +6 -1
  99. package/src/generators/model-form/model-form.test.tsx +5 -3
  100. package/src/generators/model-form/model-form.tsx +15 -15
  101. package/src/generators/model-router/model-router.test.tsx +72 -39
  102. package/src/generators/model-router/model-router.tsx +16 -41
  103. package/src/generators/model-router/model-router.types.ts +14 -0
  104. package/src/generators/model-router/screens/add-screen.tsx +53 -36
  105. package/src/generators/model-router/screens/details-screen.tsx +52 -43
  106. package/src/generators/model-router/screens/list-screen.tsx +89 -60
  107. package/src/generators/model-router/screens/screens.types.ts +13 -0
  108. package/src/generators/model-router/screens/update-screen.tsx +76 -42
  109. package/src/generators/model-router/stories/details-screen.stories.tsx +38 -0
  110. package/src/generators/model-router/stories/list-screen.stories.tsx +45 -0
  111. package/src/generators/model-router/stories/model-router.stories.tsx +164 -0
  112. package/src/generators/model-router/stories/templates.tsx +39 -0
  113. package/src/generators/object-details/object-details.tsx +18 -12
  114. package/src/layouts/app-bar-with-drawer-layout/app-bar-with-drawer-layout.stories.tsx +7 -8
  115. package/src/layouts/app-bar-with-drawer-layout/app-bar-with-drawer-layout.test.tsx +30 -0
  116. package/src/layouts/app-bar-with-drawer-layout/app-bar-with-drawer-layout.tsx +10 -7
  117. package/src/layouts/header-layout/header-layout.stories.tsx +158 -22
  118. package/src/layouts/header-layout/header-layout.test.tsx +37 -0
  119. package/src/layouts/header-layout/header-layout.tsx +12 -13
  120. package/src/layouts/index.ts +1 -6
  121. package/src/providers/index.ts +1 -0
  122. package/src/providers/notification-center/index.ts +1 -0
  123. package/src/providers/tab-provider/index.ts +2 -0
  124. package/src/providers/tab-provider/tab-provider.context.ts +8 -0
  125. package/src/providers/tab-provider/tab-provider.provider.tsx +13 -0
  126. package/src/storybook.tsx +41 -7
  127. package/src/tests/assertions.ts +4 -0
  128. package/src/tests/components.tsx +1 -1
  129. package/src/utils/theme.ts +7 -2
  130. package/tsconfig.json +8 -10
  131. package/tsconfig.rollup.json +2 -0
  132. package/dist/cjs/types/components/tab/tab.context.d.ts +0 -4
  133. package/dist/cjs/types/layouts/data-table-layout/data-table-layout.d.ts +0 -12
  134. package/dist/cjs/types/layouts/data-table-layout/index.d.ts +0 -1
  135. package/dist/cjs/types/layouts/details-layout/details-layout.d.ts +0 -12
  136. package/dist/cjs/types/layouts/details-layout/index.d.ts +0 -1
  137. package/dist/cjs/types/layouts/form-layout/form-layout.d.ts +0 -8
  138. package/dist/cjs/types/layouts/form-layout/index.d.ts +0 -1
  139. package/dist/cjs/types/layouts/list-layout/index.d.ts +0 -1
  140. package/dist/cjs/types/layouts/list-layout/list-layout.d.ts +0 -8
  141. package/dist/cjs/types/layouts/tab-layout/index.d.ts +0 -1
  142. package/dist/cjs/types/layouts/tab-layout/tab-layout.d.ts +0 -7
  143. package/dist/esm/types/components/tab/tab.context.d.ts +0 -4
  144. package/dist/esm/types/layouts/data-table-layout/data-table-layout.d.ts +0 -12
  145. package/dist/esm/types/layouts/data-table-layout/index.d.ts +0 -1
  146. package/dist/esm/types/layouts/details-layout/details-layout.d.ts +0 -12
  147. package/dist/esm/types/layouts/details-layout/index.d.ts +0 -1
  148. package/dist/esm/types/layouts/form-layout/form-layout.d.ts +0 -8
  149. package/dist/esm/types/layouts/form-layout/index.d.ts +0 -1
  150. package/dist/esm/types/layouts/list-layout/index.d.ts +0 -1
  151. package/dist/esm/types/layouts/list-layout/list-layout.d.ts +0 -8
  152. package/dist/esm/types/layouts/tab-layout/index.d.ts +0 -1
  153. package/dist/esm/types/layouts/tab-layout/tab-layout.d.ts +0 -7
  154. package/src/components/tab/tab.context.ts +0 -5
  155. package/src/generators/model-router/model-router.stories.tsx +0 -160
  156. package/src/layouts/data-table-layout/data-table-layout.stories.tsx +0 -94
  157. package/src/layouts/data-table-layout/data-table-layout.tsx +0 -30
  158. package/src/layouts/data-table-layout/index.ts +0 -1
  159. package/src/layouts/details-layout/details-layout.stories.tsx +0 -81
  160. package/src/layouts/details-layout/details-layout.tsx +0 -33
  161. package/src/layouts/details-layout/index.ts +0 -1
  162. package/src/layouts/form-layout/form-layout.stories.tsx +0 -65
  163. package/src/layouts/form-layout/form-layout.tsx +0 -18
  164. package/src/layouts/form-layout/index.ts +0 -1
  165. package/src/layouts/list-layout/index.ts +0 -1
  166. package/src/layouts/list-layout/list-layout.stories.tsx +0 -102
  167. package/src/layouts/list-layout/list-layout.tsx +0 -36
  168. package/src/layouts/tab-layout/index.ts +0 -1
  169. package/src/layouts/tab-layout/tab-layout.stories.tsx +0 -88
  170. package/src/layouts/tab-layout/tab-layout.tsx +0 -11
package/dist/index.d.ts CHANGED
@@ -1,13 +1,13 @@
1
1
  /// <reference types="react" />
2
2
  import * as _mui_material from '@mui/material';
3
- import { PropTypes, LinkProps as LinkProps$1, AppBarProps as AppBarProps$1, DrawerProps as DrawerProps$1, SxProps, Theme, GridProps } from '@mui/material';
4
- import * as _mui_material_OverridableComponent from '@mui/material/OverridableComponent';
3
+ import { PropTypes, LinkProps as LinkProps$1, AppBarProps as AppBarProps$1, DrawerProps as DrawerProps$1, SxProps, Theme, GridProps, Color } from '@mui/material';
5
4
  import * as React from 'react';
6
- import React__default, { PropsWithChildren, ReactNode, FunctionComponent, ReactElement } from 'react';
5
+ import React__default, { FunctionComponent, ReactElement, PropsWithChildren, ReactNode } from 'react';
6
+ import * as _mui_material_OverridableComponent from '@mui/material/OverridableComponent';
7
7
  import { LinkProps } from 'react-router-dom';
8
8
  import * as _emotion_styled from '@emotion/styled';
9
9
  import * as _mui_system from '@mui/system';
10
- import { DataGridProps } from '@mui/x-data-grid';
10
+ import { BasicModelInstance as BasicModelInstance$1 } from '~/generators';
11
11
 
12
12
  declare type HeaderPreset = PropTypes.Color | "transparent";
13
13
  declare type HeaderActionVariant = "text" | "outlined" | "contained";
@@ -40,7 +40,7 @@ declare type HeaderProps = {
40
40
  /**
41
41
  * Color palete used to render the component
42
42
  */
43
- preset: HeaderPreset;
43
+ preset?: HeaderPreset;
44
44
  /**
45
45
  * List of breadcumbs to represent the path to reach
46
46
  * the page that we are
@@ -59,20 +59,15 @@ declare type HeaderProps = {
59
59
  * If is set, a list of tabs is dispayed at the bottom
60
60
  */
61
61
  tabs?: HeaderTab[];
62
- /**
63
- * Tab that has to be marked as selected
64
- */
65
- selectedTab?: number;
66
- /**
67
- * Callback executed when the user click a tab
68
- */
69
- onChangeTab?: (tab: HeaderTab, index: number) => void;
70
62
  };
63
+ declare type HeaderComponent = FunctionComponent<HeaderProps>;
64
+ declare type HeaderElement = ReactElement<HeaderProps, HeaderComponent>;
65
+
71
66
  /**
72
67
  * Section used to explain give basic information about the page
73
68
  * and put the main actions
74
69
  */
75
- declare const Header: ({ title, subtitle, preset, actionsVariant, breadcrumbs, actions, tabs, selectedTab, onChangeTab, }: HeaderProps) => JSX.Element;
70
+ declare const Header: HeaderComponent;
76
71
 
77
72
  declare const LinkBehaviour: React__default.ForwardRefExoticComponent<Omit<LinkProps, "to"> & {
78
73
  href: LinkProps["to"];
@@ -118,14 +113,14 @@ declare type QueryContainerProps = PropsWithChildren<{
118
113
  */
119
114
  declare function QueryContainer({ isFetching, error, success, children }: QueryContainerProps): JSX.Element;
120
115
 
121
- interface Props$9 {
116
+ interface Props$5 {
122
117
  title: string;
123
118
  subtitle: string;
124
119
  error?: Error;
125
120
  loading?: boolean;
126
121
  onSubmitSignIn: (email: string, password: string) => void;
127
122
  }
128
- declare function SignIn({ title, subtitle, loading, error, onSubmitSignIn }: Props$9): JSX.Element;
123
+ declare function SignIn({ title, subtitle, loading, error, onSubmitSignIn }: Props$5): JSX.Element;
129
124
 
130
125
  interface TabPanelProps {
131
126
  children?: React__default.ReactNode;
@@ -133,15 +128,10 @@ interface TabPanelProps {
133
128
  }
134
129
  declare function TabPanel({ children, index }: TabPanelProps): JSX.Element;
135
130
 
136
- interface Props$8 {
131
+ interface Props$4 {
137
132
  tabs: string[];
138
- initialTab?: number;
139
133
  }
140
- declare const TabCard: ({ children, tabs, initialTab }: PropsWithChildren<Props$8>) => JSX.Element;
141
-
142
- declare const TabContext: React.Context<number>;
143
- declare const TabContextProvider: React.Provider<number>;
144
- declare const useTab: () => number;
134
+ declare const TabCard: ({ children, tabs }: PropsWithChildren<Props$4>) => JSX.Element;
145
135
 
146
136
  declare type Order = "asc" | "desc";
147
137
  interface HeadCell {
@@ -151,15 +141,15 @@ interface HeadCell {
151
141
  numeric: boolean;
152
142
  sort: boolean;
153
143
  }
154
- interface Props$7 {
144
+ interface Props$3 {
155
145
  onRequestSort: (property: string) => void;
156
146
  order: Order;
157
147
  orderBy: string;
158
148
  headCells: HeadCell[];
159
149
  }
160
- declare function EnhancedTableHead({ order, orderBy, headCells, onRequestSort }: Props$7): JSX.Element;
150
+ declare function EnhancedTableHead({ order, orderBy, headCells, onRequestSort }: Props$3): JSX.Element;
161
151
 
162
- interface Props$6<T> {
152
+ interface Props$2<T> {
163
153
  readonly data: T[];
164
154
  search?: boolean;
165
155
  defaultSort: string;
@@ -169,13 +159,13 @@ interface Props$6<T> {
169
159
  children: (data: T[]) => ReactNode;
170
160
  }
171
161
  declare const EnhancedTable: {
172
- <T>({ children, data, search, columns, defaultSort, defaultOrder, loading, }: Props$6<T>): JSX.Element;
162
+ <T>({ children, data, search, columns, defaultSort, defaultOrder, loading, }: Props$2<T>): JSX.Element;
173
163
  defaultProps: {
174
164
  defaultOrder: string;
175
165
  };
176
166
  };
177
167
 
178
- interface Props$5<T> {
168
+ interface Props$1<T> {
179
169
  data: T[];
180
170
  loading: boolean;
181
171
  defaultSort: string;
@@ -184,7 +174,7 @@ interface Props$5<T> {
184
174
  children: (data: T, index: number) => ReactNode;
185
175
  onRequestSort: (col: string, orderBy: "asc" | "desc") => void;
186
176
  }
187
- declare const EnhancedRemoteTable: <T>({ children, data, loading, columns, defaultSort, defaultOrder, onRequestSort, }: Props$5<T>) => JSX.Element;
177
+ declare const EnhancedRemoteTable: <T>({ children, data, loading, columns, defaultSort, defaultOrder, onRequestSort, }: Props$1<T>) => JSX.Element;
188
178
 
189
179
  interface AppBarProfile {
190
180
  name: string;
@@ -197,6 +187,7 @@ interface AppBarProps extends AppBarProps$1 {
197
187
  onClickSignOut: () => void;
198
188
  }
199
189
  declare type AppBarComponent = FunctionComponent<AppBarProps>;
190
+ declare type AppBarElement = ReactElement<AppBarProps, AppBarComponent>;
200
191
 
201
192
  declare const MiniAppBar: AppBarComponent;
202
193
 
@@ -279,10 +270,10 @@ declare const Drawer: DrawerComponent;
279
270
 
280
271
  declare const MiniDrawer: _emotion_styled.StyledComponent<DrawerProps & _mui_system.MUIStyledCommonProps<_mui_material.Theme>, {}, {}>;
281
272
 
282
- declare type Props$4 = PropsWithChildren<{
273
+ declare type Props = PropsWithChildren<{
283
274
  initialOpen?: boolean;
284
275
  }>;
285
- declare const DrawerProvider: ({ children, initialOpen }: Props$4) => JSX.Element;
276
+ declare const DrawerProvider: ({ children, initialOpen }: Props) => JSX.Element;
286
277
 
287
278
  interface DrawerContextProps {
288
279
  isOpen: boolean;
@@ -293,16 +284,12 @@ declare const DrawerContext: React.Context<DrawerContextProps | undefined>;
293
284
  declare const UndefinedProvider: Error;
294
285
  declare const useDrawer: () => DrawerContextProps;
295
286
 
296
- interface BasicData {
297
- id: string;
298
- [key: string]: any;
299
- }
300
- interface TableRowOption<T extends BasicData> {
287
+ interface TableRowOption<T extends BasicModelInstance$1> {
301
288
  id: string;
302
289
  label: string;
303
290
  onClick: (item: T) => void;
304
291
  }
305
- interface TableListProps<T extends BasicData> {
292
+ interface TableListProps<T extends BasicModelInstance$1> {
306
293
  columns: HeadCell[];
307
294
  data: T[];
308
295
  search?: boolean;
@@ -312,7 +299,7 @@ interface TableListProps<T extends BasicData> {
312
299
  options?: TableRowOption<T>[];
313
300
  onClick?: (d: T) => void;
314
301
  }
315
- declare const TableList: <T extends BasicData>({ columns: columnsProp, options, data, onClick, search, defaultSort, defaultOrder, loading, }: TableListProps<T>) => JSX.Element;
302
+ declare const TableList: <T extends BasicModelInstance$1>({ columns: columnsProp, options, data, onClick, search, defaultSort, defaultOrder, loading, }: TableListProps<T>) => JSX.Element;
316
303
 
317
304
  declare type IconColor = "inherit" | "action" | "disabled" | "primary" | "secondary" | "error" | "info" | "success" | "warning";
318
305
  interface PlaceholderAction {
@@ -445,51 +432,33 @@ interface GroupValueCardProps {
445
432
  }
446
433
  declare const GroupValueCard: ({ title, subtitle, children }: GroupValueCardProps) => JSX.Element;
447
434
 
435
+ declare type ContentProps = PropsWithChildren;
436
+ declare type ContentComponent = FunctionComponent<ContentProps>;
437
+ declare type ContentElement = ReactElement<ContentElement, ContentComponent>;
438
+
439
+ declare const Content: ({ children }: ContentProps) => JSX.Element;
440
+
448
441
  declare const newArrayWithSize: <T>(size: number, fillValue: T) => any[];
449
442
  declare const getRandomItem: <T>(items: T[]) => {
450
443
  index: number;
451
444
  item: T;
452
445
  };
453
446
 
454
- declare const useGetDefaultThemeColor: ({ lightWeight, darkWeight }?: {
455
- lightWeight?: number | undefined;
456
- darkWeight?: number | undefined;
457
- }) => any;
458
-
459
- interface Props$3 {
460
- loading?: boolean;
461
- headerProps: HeaderProps;
462
- emptyPlaceholderProps: PlaceholderProps;
463
- dataGridProps: DataGridProps & {
464
- height: number;
465
- };
466
- }
467
- declare const DataTableLayout: ({ loading, headerProps, emptyPlaceholderProps, dataGridProps: { height, rows, ...restDataGridProps }, }: Props$3) => JSX.Element;
468
-
469
- interface Props$2 {
470
- loading?: boolean;
471
- headerProps: HeaderProps;
472
- }
473
- declare const HeaderLayout: ({ loading, headerProps, children }: PropsWithChildren<Props$2>) => JSX.Element;
447
+ declare const useGetDefaultThemeColor: ({ lightWeight, darkWeight, }?: {
448
+ lightWeight?: keyof Color | undefined;
449
+ darkWeight?: keyof Color | undefined;
450
+ }) => string;
474
451
 
475
- interface Props$1 {
476
- headerProps: HeaderProps;
452
+ interface AppBarWithDrawerLayoutProps {
453
+ children: [DrawerElement, AppBarElement, ReactNode];
477
454
  }
478
- declare const TabLayout: ({ headerProps, children }: PropsWithChildren<Props$1>) => JSX.Element;
455
+ declare const AppBarWithDrawerLayout: ({ children: childrenProps, }: AppBarWithDrawerLayoutProps) => JSX.Element;
479
456
 
480
- interface ListLayoutProps<T extends BasicData> {
457
+ interface HeaderLayoutProps {
481
458
  loading?: boolean;
482
- headerProps: HeaderProps;
483
- listProps: TableListProps<T>;
484
- emptyPlaceholderProps: PlaceholderProps;
459
+ children: [HeaderElement, ContentElement];
485
460
  }
486
- declare const ListLayout: <T extends BasicData>({ loading, headerProps, emptyPlaceholderProps, listProps: { data, ...restListProps }, }: ListLayoutProps<T>) => JSX.Element;
487
-
488
- interface Props {
489
- drawer: DrawerElement;
490
- appBar: ReactElement<AppBarProps$1, AppBarComponent>;
491
- }
492
- declare const AppBarWithDrawerLayout: ({ drawer, appBar, children }: PropsWithChildren<Props>) => JSX.Element;
461
+ declare const HeaderLayout: ({ loading, children }: HeaderLayoutProps) => JSX.Element;
493
462
 
494
463
  declare type Base = {
495
464
  id: string;
@@ -517,18 +486,22 @@ declare type SingleFields = StringField | NumberField | BooleanField;
517
486
  declare type GroupField = {
518
487
  type: "group";
519
488
  value: (Base & Breakpoints & SingleFields)[];
520
- };
489
+ } & Base;
521
490
  declare type Fields = SingleFields | GroupField;
522
491
  declare type ModelField = Base & Breakpoints & Fields;
523
492
  declare type Model = {
524
493
  fields: ModelField[];
525
494
  };
495
+ interface BasicModelInstance {
496
+ id: string;
497
+ [key: string]: any;
498
+ }
526
499
 
527
- interface ObjectDetailsProps {
500
+ interface ObjectDetailsProps<T extends BasicModelInstance> {
528
501
  model: Model;
529
- instance: object;
502
+ instance: T;
530
503
  }
531
- declare const ObjectDetails: ({ model, instance }: ObjectDetailsProps) => JSX.Element;
504
+ declare const ObjectDetails: <T extends BasicModelInstance>({ model, instance, }: ObjectDetailsProps<T>) => JSX.Element;
532
505
 
533
506
  interface RequestState {
534
507
  idle?: boolean;
@@ -536,59 +509,110 @@ interface RequestState {
536
509
  error?: string;
537
510
  success?: boolean;
538
511
  }
539
- interface ModelRouterProps {
512
+
513
+ interface BaseScreenProps {
514
+ /**
515
+ * UI-friendly string that represents the model
516
+ */
540
517
  modelName: string;
518
+ /**
519
+ * Structure that represents the fields of the model
520
+ */
541
521
  model: Model;
542
- requestList?: () => void;
543
- list: {
544
- data: any[];
545
- onClickRemoveItem: (item: any) => void;
546
- listRequest: RequestState;
547
- requestDelete: RequestState;
548
- };
549
- add: {
550
- onSubmit: (obj: object) => void;
551
- request: RequestState;
552
- };
553
- detail: {
554
- onScreenMount?: (id: string) => void;
555
- request: RequestState;
556
- instance?: any;
557
- };
558
- update: {
559
- onSubmit: (obj: object) => void;
560
- request: RequestState;
561
- requestInstance: RequestState;
562
- onRequestInstance: (id: string) => void;
563
- instance?: any;
564
- };
565
522
  }
566
- declare const ModelRouter: (props: ModelRouterProps) => JSX.Element;
567
523
 
568
- interface ModelFormProps {
569
- model: Model;
570
- initialValues?: object;
571
- saveButtonText: string;
572
- onSubmit: (values: object) => void;
524
+ interface UpdateScreenProps<T extends BasicModelInstance$1> extends BaseScreenProps {
525
+ /**
526
+ * Callback executed when the user wants to update
527
+ * an item
528
+ */
529
+ onSubmitUpdateItem: (obj: T) => void;
530
+ /**
531
+ * Current status of the request to update an item
532
+ */
533
+ submitUpdateItemRequest: RequestState;
534
+ /**
535
+ * Current status of the request to retrieve
536
+ * the item to be updated
537
+ */
538
+ updateItemRequest: RequestState;
539
+ /**
540
+ * Callback executed to retrive the item that
541
+ * has to going tobe updated
542
+ */
543
+ onRequestUpdateItem: (id: string) => void;
544
+ /**
545
+ * Item that is going to be updated
546
+ */
547
+ updateItem?: T;
573
548
  }
574
- declare const ModelForm: ({ model, saveButtonText, onSubmit, initialValues, }: ModelFormProps) => JSX.Element;
575
549
 
576
- interface DetailsLayoutProps {
577
- loading?: boolean;
578
- headerProps: HeaderProps;
579
- objectDetailsProps: {
580
- model: Model;
581
- instance?: object;
582
- };
583
- notFoundPlaceholderProps: PlaceholderProps;
550
+ interface ListScreenProps<T extends BasicModelInstance$1> extends BaseScreenProps {
551
+ /**
552
+ * Callback executed each time the list screen
553
+ * requests for a data update
554
+ */
555
+ onRequestList: () => void;
556
+ /**
557
+ * List of items to be displayed in the list screen
558
+ */
559
+ listData: T[];
560
+ /**
561
+ * Callback executed when the user clicks an option
562
+ * to delete an item
563
+ */
564
+ onClickDeleteItem: (item: T) => void;
565
+ /**
566
+ * Current status of the request to retrieve
567
+ * the list items
568
+ */
569
+ listRequest: RequestState;
570
+ /**
571
+ * Current status of the request to delete
572
+ * an item
573
+ */
574
+ deleteRequest: RequestState;
584
575
  }
585
- declare const DetailsLayout: ({ loading, headerProps, notFoundPlaceholderProps, objectDetailsProps: { model, instance }, }: DetailsLayoutProps) => JSX.Element;
586
576
 
587
- interface FormLayoutProps {
588
- loading?: boolean;
589
- headerProps: HeaderProps;
590
- modelFormProps: ModelFormProps;
577
+ interface AddScreenProps<T extends BasicModelInstance$1> extends BaseScreenProps {
578
+ /**
579
+ * Callback executed when the user wants to
580
+ * add a new item
581
+ */
582
+ onSubmitNewItem: (obj: T) => void;
583
+ /**
584
+ * Current status of the request to retrieve
585
+ * add a new item
586
+ */
587
+ newItemRequest: RequestState;
588
+ }
589
+
590
+ interface DetailsScreenProps<T extends BasicModelInstance$1> extends BaseScreenProps {
591
+ /**
592
+ * Callback executed each time we want
593
+ * the details information of an item
594
+ */
595
+ onRequestItem: (id: string) => void;
596
+ /**
597
+ * Current status of the request to retrieve
598
+ * an item
599
+ */
600
+ itemRequest: RequestState;
601
+ /**
602
+ * Item to be displayed
603
+ */
604
+ detailsItem?: T;
605
+ }
606
+
607
+ declare type ModelRouterProps<T extends BasicModelInstance> = DetailsScreenProps<T> & ListScreenProps<T> & AddScreenProps<T> & UpdateScreenProps<T>;
608
+ declare const ModelRouter: <T extends BasicModelInstance>(props: ModelRouterProps<T>) => JSX.Element;
609
+
610
+ interface ModelFormProps<T extends BasicModelInstance> {
611
+ model: Model;
612
+ initialValues?: T;
613
+ saveButtonText: string;
614
+ onSubmit: (values: T) => void;
591
615
  }
592
- declare const FormLayout: ({ loading, headerProps, modelFormProps }: FormLayoutProps) => JSX.Element;
616
+ declare const ModelForm: <T extends BasicModelInstance>({ model, saveButtonText, onSubmit, initialValues, }: ModelFormProps<T>) => JSX.Element;
593
617
 
594
- export { AppBarComponent, AppBarProfile, AppBarProps, AppBarWithDrawerLayout, BasicData, Bullet, BulletProps, BulletVariant, CenterContainer, CenterContainerProps, DataTableLayout, DetailsLayout, DetailsLayoutProps, Drawer, DrawerComponent, DrawerContent, DrawerContentComponent, DrawerContentElement, DrawerContentProps, DrawerContext, DrawerContextProps, DrawerElement, DrawerItem, DrawerItemProps, DrawerProps, DrawerProvider, DrawerSection, DrawerSectionProps, EnhancedRemoteTable, EnhancedTable, EnhancedTableHead, FormLayout, FormLayoutProps, GroupField, GroupValueCard, GroupValueCardProps, GroupValueItem, GroupValueItemComponent, GroupValueItemElement, GroupValueItemProps, HeadCell, Header, HeaderAction, HeaderActionVariant, HeaderBreadcrumb, HeaderLayout, HeaderPreset, HeaderProps, HeaderTab, Label, LabelProps, LabelVariant, Link, LinkBehaviour, ListLayout, ListLayoutProps, MiniAppBar, MiniDrawer, Model, ModelField, ModelForm, ModelFormProps, ModelRouter, ModelRouterProps, Nav, NavItem, NavItemAvatar, NavItemBullet, NavItemLabel, NavSection, ObjectDetails, ObjectDetailsProps, Order, Placeholder, PlaceholderAction, PlaceholderIconArgs, PlaceholderProps, QueryContainer, QueryContainerError, QueryContainerProps, QueryContainerSuccess, RequestState, SignIn, TabCard, TabContext, TabContextProvider, TabLayout, TabPanel, TableList, TableListProps, TableRowOption, UndefinedProvider, ValueBoolean, ValueBooleanProps, ValueCard, ValueCardProps, ValueText, ValueTextProps, bulletClasses, getRandomItem, groupValueItemClasses, labelClasses, newArrayWithSize, useDrawer, useGetDefaultThemeColor, useTab };
618
+ export { AppBarComponent, AppBarElement, AppBarProfile, AppBarProps, AppBarWithDrawerLayout, AppBarWithDrawerLayoutProps, BasicModelInstance, Bullet, BulletProps, BulletVariant, CenterContainer, CenterContainerProps, Content, ContentComponent, ContentElement, ContentProps, Drawer, DrawerComponent, DrawerContent, DrawerContentComponent, DrawerContentElement, DrawerContentProps, DrawerContext, DrawerContextProps, DrawerElement, DrawerItem, DrawerItemProps, DrawerProps, DrawerProvider, DrawerSection, DrawerSectionProps, EnhancedRemoteTable, EnhancedTable, EnhancedTableHead, GroupField, GroupValueCard, GroupValueCardProps, GroupValueItem, GroupValueItemComponent, GroupValueItemElement, GroupValueItemProps, HeadCell, Header, HeaderAction, HeaderActionVariant, HeaderBreadcrumb, HeaderComponent, HeaderElement, HeaderLayout, HeaderPreset, HeaderProps, HeaderTab, Label, LabelProps, LabelVariant, Link, LinkBehaviour, MiniAppBar, MiniDrawer, Model, ModelField, ModelForm, ModelFormProps, ModelRouter, ModelRouterProps, Nav, NavItem, NavItemAvatar, NavItemBullet, NavItemLabel, NavSection, ObjectDetails, ObjectDetailsProps, Order, Placeholder, PlaceholderAction, PlaceholderIconArgs, PlaceholderProps, QueryContainer, QueryContainerError, QueryContainerProps, QueryContainerSuccess, SignIn, TabCard, TabPanel, TableList, TableListProps, TableRowOption, UndefinedProvider, ValueBoolean, ValueBooleanProps, ValueCard, ValueCardProps, ValueText, ValueTextProps, bulletClasses, getRandomItem, groupValueItemClasses, labelClasses, newArrayWithSize, useDrawer, useGetDefaultThemeColor };
package/jest.config.js CHANGED
@@ -11,4 +11,7 @@ module.exports = {
11
11
  "!src/tests/**",
12
12
  "!src/**/__snapshots__/**",
13
13
  ],
14
+ moduleNameMapper: {
15
+ "~/(.*)": "<rootDir>/src/$1",
16
+ },
14
17
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pautena/react-design-system",
3
- "version": "0.0.1",
3
+ "version": "0.1.0",
4
4
  "description": "My custom design system on top of MUI",
5
5
  "main": "dist/cjs/index.js",
6
6
  "module": "dist/esm/index.js",
@@ -44,6 +44,7 @@
44
44
  "@babel/preset-react": "^7.18.6",
45
45
  "@faker-js/faker": "^7.3.0",
46
46
  "@mui/x-data-grid-generator": "^5.13.0",
47
+ "@rollup/plugin-alias": "^3.1.9",
47
48
  "@rollup/plugin-commonjs": "^22.0.1",
48
49
  "@rollup/plugin-node-resolve": "^13.3.0",
49
50
  "@rollup/plugin-typescript": "^8.3.3",
@@ -66,6 +67,7 @@
66
67
  "@typescript-eslint/parser": "^5.30.6",
67
68
  "babel-jest": "^28.1.3",
68
69
  "babel-loader": "^8.2.5",
70
+ "babel-plugin-module-resolver": "^4.1.0",
69
71
  "eslint": "^8.19.0",
70
72
  "eslint-config-prettier": "^8.5.0",
71
73
  "eslint-plugin-prettier": "^4.2.1",
package/rollup.config.js CHANGED
@@ -1,11 +1,15 @@
1
1
  import resolve from "@rollup/plugin-node-resolve";
2
2
  import commonjs from "@rollup/plugin-commonjs";
3
3
  import typescript from "@rollup/plugin-typescript";
4
+ import alias from "@rollup/plugin-alias";
4
5
  import dts from "rollup-plugin-dts";
6
+ import path from "path";
5
7
  import { terser } from "rollup-plugin-terser";
6
8
  import peerDepsExternal from "rollup-plugin-peer-deps-external";
7
9
  import packageJson from "./package.json";
8
10
 
11
+ const projectRootDir = path.resolve(__dirname);
12
+
9
13
  export default [
10
14
  {
11
15
  input: "src/index.ts",
@@ -29,6 +33,14 @@ export default [
29
33
  tsconfig: "./tsconfig.rollup.json",
30
34
  }),
31
35
  terser(),
36
+ alias({
37
+ entries: [
38
+ {
39
+ find: "~",
40
+ replacement: path.resolve(projectRootDir, "src"),
41
+ },
42
+ ],
43
+ }),
32
44
  ],
33
45
  external: ["react", "react-dom"],
34
46
  },
@@ -1,4 +1,4 @@
1
- import { FunctionComponent } from "react";
1
+ import { FunctionComponent, ReactElement } from "react";
2
2
  import { AppBarProps as MuiAppBarProps } from "@mui/material";
3
3
 
4
4
  export interface AppBarProfile {
@@ -14,3 +14,4 @@ export interface AppBarProps extends MuiAppBarProps {
14
14
  }
15
15
 
16
16
  export type AppBarComponent = FunctionComponent<AppBarProps>;
17
+ export type AppBarElement = ReactElement<AppBarProps, AppBarComponent>;
@@ -0,0 +1,23 @@
1
+ import React from "react";
2
+ import { ComponentMeta } from "@storybook/react";
3
+ import { createTemplate } from "../../storybook";
4
+ import { Content } from "./content";
5
+ import { SkeletonGrid } from "../../tests";
6
+
7
+ export default {
8
+ title: "Sections/Content",
9
+ component: Content,
10
+ parameters: {
11
+ layout: "fullscreen",
12
+ },
13
+ } as ComponentMeta<typeof Content>;
14
+
15
+ const Template = createTemplate(() => {
16
+ return (
17
+ <Content>
18
+ <SkeletonGrid />
19
+ </Content>
20
+ );
21
+ });
22
+
23
+ export const Default = Template.bind({});
@@ -0,0 +1,26 @@
1
+ import React from "react";
2
+ import { Content } from "./content";
3
+ import { render, screen } from "../../tests";
4
+ import { Typography } from "@mui/material";
5
+
6
+ describe("Content", () => {
7
+ const renderComponent = () => {
8
+ return render(
9
+ <Content>
10
+ <Typography>Children content</Typography>
11
+ </Content>,
12
+ );
13
+ };
14
+
15
+ it("would render a children", () => {
16
+ renderComponent();
17
+
18
+ expect(screen.getByText(/children content/i)).toBeInTheDocument();
19
+ });
20
+
21
+ it("would render a main element", () => {
22
+ renderComponent();
23
+
24
+ expect(screen.getByRole("main")).toBeInTheDocument();
25
+ });
26
+ });
@@ -0,0 +1,11 @@
1
+ import React from "react";
2
+ import { Container } from "@mui/material";
3
+ import { ContentProps } from "./content.types";
4
+
5
+ export const Content = ({ children }: ContentProps) => {
6
+ return (
7
+ <Container component="main" sx={{ py: 3, flexGrow: 1 }}>
8
+ {children}
9
+ </Container>
10
+ );
11
+ };
@@ -0,0 +1,5 @@
1
+ import { PropsWithChildren, FunctionComponent, ReactElement } from "react";
2
+
3
+ export type ContentProps = PropsWithChildren;
4
+ export type ContentComponent = FunctionComponent<ContentProps>;
5
+ export type ContentElement = ReactElement<ContentElement, ContentComponent>;
@@ -0,0 +1,2 @@
1
+ export * from "./content";
2
+ export * from "./content.types";
@@ -41,6 +41,8 @@ export interface DrawerItemProps {
41
41
  bullet?: NavItemBullet;
42
42
  }
43
43
 
44
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
45
+ // @ts-ignore
44
46
  const DrawerItemLink = styled(Link)(({ theme }) => {
45
47
  return {
46
48
  color: theme.palette.text.primary,
@@ -1,15 +1,16 @@
1
1
  import React from "react";
2
2
  import { render, screen } from "../../tests";
3
3
  import userEvent from "@testing-library/user-event";
4
+ import { Header } from "./header";
4
5
  import {
5
- Header,
6
6
  HeaderAction,
7
7
  HeaderActionVariant,
8
8
  HeaderBreadcrumb,
9
9
  HeaderPreset,
10
10
  HeaderTab,
11
- } from "./header";
11
+ } from "./header.types";
12
12
  import { breadcrumbs, actions as actionsData, tabs } from "./header.dummy";
13
+ import { TabProvider } from "../../providers";
13
14
 
14
15
  const actions = actionsData.map((a) => ({ ...a, onClick: a.onClick && jest.fn() }));
15
16
 
@@ -35,17 +36,17 @@ function renderInstance({
35
36
  const onChangeTab = jest.fn();
36
37
 
37
38
  const instance = render(
38
- <Header
39
- title={title}
40
- subtitle={subtitle}
41
- preset={preset}
42
- breadcrumbs={breadcrumbs}
43
- actions={actions}
44
- actionsVariant={actionsVariant}
45
- tabs={tabs}
46
- selectedTab={selectedTab}
47
- onChangeTab={onChangeTab}
48
- />,
39
+ <TabProvider initialValue={selectedTab}>
40
+ <Header
41
+ title={title}
42
+ subtitle={subtitle}
43
+ preset={preset}
44
+ breadcrumbs={breadcrumbs}
45
+ actions={actions}
46
+ actionsVariant={actionsVariant}
47
+ tabs={tabs}
48
+ />
49
+ </TabProvider>,
49
50
  );
50
51
 
51
52
  return { ...instance, onChangeTab };
@@ -147,13 +148,14 @@ describe("Header", () => {
147
148
  expect(screen.getByRole("tab", { name: /tab 2/i })).toBeDisabled();
148
149
  });
149
150
 
150
- it("would call onChangeTab when a tab is clicked", async () => {
151
+ it("would change the selected tab when a tab is clicked", async () => {
151
152
  const { onChangeTab } = renderInstance({ tabs, selectedTab: 0 });
152
153
 
153
154
  await userEvent.click(screen.getByRole("tab", { name: /tab 3/i }));
154
155
 
155
- expect(onChangeTab).toHaveBeenCalledTimes(1);
156
- expect(onChangeTab).toHaveBeenCalledWith(tabs[2], 2);
156
+ expect(screen.getByRole("tab", { name: /tab 1/i, selected: false })).toBeInTheDocument();
157
+ expect(screen.getByRole("tab", { name: /tab 2/i, selected: false })).toBeInTheDocument();
158
+ expect(screen.getByRole("tab", { name: /tab 3/i, selected: true })).toBeInTheDocument();
157
159
  });
158
160
 
159
161
  it("wouldn't call onChangeTab when the clicked tab is the selectedTab", async () => {