piral-core 0.15.0-alpha.4036 → 0.15.0-alpha.4122

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 (284) hide show
  1. package/esm/Piral.d.ts +2 -2
  2. package/esm/Piral.js +14 -12
  3. package/esm/Piral.js.map +1 -1
  4. package/esm/PiralContext.d.ts +21 -0
  5. package/esm/PiralContext.js +34 -0
  6. package/esm/PiralContext.js.map +1 -0
  7. package/esm/actions/app.d.ts +1 -2
  8. package/esm/actions/app.js +0 -3
  9. package/esm/actions/app.js.map +1 -1
  10. package/esm/actions/state.js +5 -1
  11. package/esm/actions/state.js.map +1 -1
  12. package/esm/components/ErrorBoundary.d.ts +4 -0
  13. package/esm/components/ErrorBoundary.js +3 -3
  14. package/esm/components/ErrorBoundary.js.map +1 -1
  15. package/esm/components/ForeignComponentContainer.d.ts +1 -1
  16. package/esm/components/ForeignComponentContainer.js.map +1 -1
  17. package/esm/components/PiralGlobals.d.ts +6 -0
  18. package/esm/components/PiralGlobals.js +13 -0
  19. package/esm/components/PiralGlobals.js.map +1 -0
  20. package/esm/components/PiralSuspense.d.ts +5 -0
  21. package/esm/components/PiralSuspense.js +8 -0
  22. package/esm/components/PiralSuspense.js.map +1 -0
  23. package/esm/components/PiralView.d.ts +10 -1
  24. package/esm/components/PiralView.js +12 -24
  25. package/esm/components/PiralView.js.map +1 -1
  26. package/esm/components/ResponsiveLayout.d.ts +9 -1
  27. package/esm/components/ResponsiveLayout.js +5 -12
  28. package/esm/components/ResponsiveLayout.js.map +1 -1
  29. package/esm/components/components.d.ts +13 -6
  30. package/esm/components/components.js +13 -6
  31. package/esm/components/components.js.map +1 -1
  32. package/esm/components/index.d.ts +2 -12
  33. package/esm/components/index.js +2 -12
  34. package/esm/components/index.js.map +1 -1
  35. package/esm/components/wrapComponent.d.ts +1 -1
  36. package/esm/{components → defaults}/DefaultErrorInfo.d.ts +0 -0
  37. package/esm/{components → defaults}/DefaultErrorInfo.js +1 -2
  38. package/esm/defaults/DefaultErrorInfo.js.map +1 -0
  39. package/esm/{components → defaults}/DefaultLayout.d.ts +0 -0
  40. package/esm/{components → defaults}/DefaultLayout.js +0 -0
  41. package/esm/defaults/DefaultLayout.js.map +1 -0
  42. package/esm/{components/DefaultLoader.d.ts → defaults/DefaultLoadingIndicator.d.ts} +0 -0
  43. package/esm/{components/DefaultLoader.js → defaults/DefaultLoadingIndicator.js} +1 -1
  44. package/esm/defaults/DefaultLoadingIndicator.js.map +1 -0
  45. package/esm/{components → defaults}/DefaultRouteSwitch.d.ts +0 -0
  46. package/esm/{components → defaults}/DefaultRouteSwitch.js +0 -0
  47. package/esm/defaults/DefaultRouteSwitch.js.map +1 -0
  48. package/esm/defaults/DefaultRouter.d.ts +3 -0
  49. package/esm/{components → defaults}/DefaultRouter.js +0 -0
  50. package/esm/defaults/DefaultRouter.js.map +1 -0
  51. package/esm/defaults/index.d.ts +5 -0
  52. package/esm/defaults/index.js +6 -0
  53. package/esm/defaults/index.js.map +1 -0
  54. package/esm/index.d.ts +1 -0
  55. package/esm/index.js +1 -0
  56. package/esm/index.js.map +1 -1
  57. package/esm/{components → setters}/SetComponent.d.ts +0 -0
  58. package/esm/{components → setters}/SetComponent.js +0 -0
  59. package/esm/setters/SetComponent.js.map +1 -0
  60. package/esm/{components → setters}/SetError.d.ts +0 -0
  61. package/esm/{components → setters}/SetError.js +0 -0
  62. package/esm/setters/SetError.js.map +1 -0
  63. package/esm/{components → setters}/SetErrors.d.ts +0 -0
  64. package/esm/{components → setters}/SetErrors.js +0 -0
  65. package/esm/setters/SetErrors.js.map +1 -0
  66. package/esm/{components → setters}/SetLayout.d.ts +0 -0
  67. package/esm/{components → setters}/SetLayout.js +0 -0
  68. package/esm/setters/SetLayout.js.map +1 -0
  69. package/esm/{components → setters}/SetProvider.d.ts +0 -0
  70. package/esm/{components → setters}/SetProvider.js +0 -0
  71. package/esm/setters/SetProvider.js.map +1 -0
  72. package/esm/{components → setters}/SetRedirect.d.ts +0 -0
  73. package/esm/{components → setters}/SetRedirect.js +0 -0
  74. package/esm/setters/SetRedirect.js.map +1 -0
  75. package/esm/{components → setters}/SetRoute.d.ts +0 -0
  76. package/esm/{components → setters}/SetRoute.js +0 -0
  77. package/esm/setters/SetRoute.js.map +1 -0
  78. package/esm/setters/index.d.ts +7 -0
  79. package/esm/setters/index.js +8 -0
  80. package/esm/setters/index.js.map +1 -0
  81. package/esm/state/createGlobalState.js +1 -2
  82. package/esm/state/createGlobalState.js.map +1 -1
  83. package/esm/state/withApi.js.map +1 -1
  84. package/esm/types/components.d.ts +9 -1
  85. package/esm/types/instance.d.ts +10 -3
  86. package/esm/types/state.d.ts +2 -12
  87. package/esm/utils/compare.d.ts +1 -1
  88. package/esm/utils/compare.js +20 -3
  89. package/esm/utils/compare.js.map +1 -1
  90. package/esm/utils/media.js +1 -1
  91. package/esm/utils/media.js.map +1 -1
  92. package/lib/Piral.d.ts +2 -2
  93. package/lib/Piral.js +13 -11
  94. package/lib/Piral.js.map +1 -1
  95. package/lib/PiralContext.d.ts +21 -0
  96. package/lib/PiralContext.js +38 -0
  97. package/lib/PiralContext.js.map +1 -0
  98. package/lib/actions/app.d.ts +1 -2
  99. package/lib/actions/app.js +1 -5
  100. package/lib/actions/app.js.map +1 -1
  101. package/lib/actions/index.js +6 -6
  102. package/lib/actions/index.js.map +1 -1
  103. package/lib/actions/state.js +5 -1
  104. package/lib/actions/state.js.map +1 -1
  105. package/lib/components/ErrorBoundary.d.ts +4 -0
  106. package/lib/components/ErrorBoundary.js +3 -3
  107. package/lib/components/ErrorBoundary.js.map +1 -1
  108. package/lib/components/ForeignComponentContainer.d.ts +1 -1
  109. package/lib/components/ForeignComponentContainer.js.map +1 -1
  110. package/lib/components/PiralGlobals.d.ts +6 -0
  111. package/lib/components/PiralGlobals.js +17 -0
  112. package/lib/components/PiralGlobals.js.map +1 -0
  113. package/lib/components/PiralRoutes.js +1 -1
  114. package/lib/components/PiralRoutes.js.map +1 -1
  115. package/lib/components/PiralSuspense.d.ts +5 -0
  116. package/lib/components/PiralSuspense.js +12 -0
  117. package/lib/components/PiralSuspense.js.map +1 -0
  118. package/lib/components/PiralView.d.ts +10 -1
  119. package/lib/components/PiralView.js +11 -23
  120. package/lib/components/PiralView.js.map +1 -1
  121. package/lib/components/ResponsiveLayout.d.ts +9 -1
  122. package/lib/components/ResponsiveLayout.js +3 -10
  123. package/lib/components/ResponsiveLayout.js.map +1 -1
  124. package/lib/components/components.d.ts +13 -6
  125. package/lib/components/components.js +14 -7
  126. package/lib/components/components.js.map +1 -1
  127. package/lib/components/index.d.ts +2 -12
  128. package/lib/components/index.js +12 -22
  129. package/lib/components/index.js.map +1 -1
  130. package/lib/components/wrapComponent.d.ts +1 -1
  131. package/lib/{components → defaults}/DefaultErrorInfo.d.ts +0 -0
  132. package/lib/{components → defaults}/DefaultErrorInfo.js +2 -3
  133. package/lib/defaults/DefaultErrorInfo.js.map +1 -0
  134. package/lib/{components → defaults}/DefaultLayout.d.ts +0 -0
  135. package/lib/{components → defaults}/DefaultLayout.js +0 -0
  136. package/lib/defaults/DefaultLayout.js.map +1 -0
  137. package/lib/{components/DefaultLoader.d.ts → defaults/DefaultLoadingIndicator.d.ts} +0 -0
  138. package/lib/{components/DefaultLoader.js → defaults/DefaultLoadingIndicator.js} +1 -1
  139. package/lib/defaults/DefaultLoadingIndicator.js.map +1 -0
  140. package/lib/{components → defaults}/DefaultRouteSwitch.d.ts +0 -0
  141. package/lib/{components → defaults}/DefaultRouteSwitch.js +1 -1
  142. package/lib/defaults/DefaultRouteSwitch.js.map +1 -0
  143. package/lib/defaults/DefaultRouter.d.ts +3 -0
  144. package/lib/{components → defaults}/DefaultRouter.js +0 -0
  145. package/lib/defaults/DefaultRouter.js.map +1 -0
  146. package/lib/defaults/index.d.ts +5 -0
  147. package/lib/defaults/index.js +9 -0
  148. package/lib/defaults/index.js.map +1 -0
  149. package/lib/hooks/actions.js +1 -1
  150. package/lib/hooks/actions.js.map +1 -1
  151. package/lib/hooks/index.js +6 -6
  152. package/lib/hooks/index.js.map +1 -1
  153. package/lib/index.d.ts +1 -0
  154. package/lib/index.js +9 -8
  155. package/lib/index.js.map +1 -1
  156. package/lib/modules/index.js +3 -3
  157. package/lib/modules/index.js.map +1 -1
  158. package/lib/{components → setters}/SetComponent.d.ts +0 -0
  159. package/lib/{components → setters}/SetComponent.js +0 -0
  160. package/lib/setters/SetComponent.js.map +1 -0
  161. package/lib/{components → setters}/SetError.d.ts +0 -0
  162. package/lib/{components → setters}/SetError.js +0 -0
  163. package/lib/setters/SetError.js.map +1 -0
  164. package/lib/{components → setters}/SetErrors.d.ts +0 -0
  165. package/lib/{components → setters}/SetErrors.js +0 -0
  166. package/lib/setters/SetErrors.js.map +1 -0
  167. package/lib/{components → setters}/SetLayout.d.ts +0 -0
  168. package/lib/{components → setters}/SetLayout.js +0 -0
  169. package/lib/setters/SetLayout.js.map +1 -0
  170. package/lib/{components → setters}/SetProvider.d.ts +0 -0
  171. package/lib/{components → setters}/SetProvider.js +0 -0
  172. package/lib/setters/SetProvider.js.map +1 -0
  173. package/lib/{components → setters}/SetRedirect.d.ts +0 -0
  174. package/lib/{components → setters}/SetRedirect.js +0 -0
  175. package/lib/setters/SetRedirect.js.map +1 -0
  176. package/lib/{components → setters}/SetRoute.d.ts +0 -0
  177. package/lib/{components → setters}/SetRoute.js +0 -0
  178. package/lib/setters/SetRoute.js.map +1 -0
  179. package/lib/setters/index.d.ts +7 -0
  180. package/lib/setters/index.js +11 -0
  181. package/lib/setters/index.js.map +1 -0
  182. package/lib/state/createGlobalState.js +6 -7
  183. package/lib/state/createGlobalState.js.map +1 -1
  184. package/lib/state/index.js +4 -4
  185. package/lib/state/index.js.map +1 -1
  186. package/lib/state/withApi.js.map +1 -1
  187. package/lib/types/components.d.ts +9 -1
  188. package/lib/types/index.js +12 -12
  189. package/lib/types/index.js.map +1 -1
  190. package/lib/types/instance.d.ts +10 -3
  191. package/lib/types/state.d.ts +2 -12
  192. package/lib/utils/compare.d.ts +1 -1
  193. package/lib/utils/compare.js +22 -5
  194. package/lib/utils/compare.js.map +1 -1
  195. package/lib/utils/helpers.js +1 -1
  196. package/lib/utils/helpers.js.map +1 -1
  197. package/lib/utils/index.js +10 -10
  198. package/lib/utils/index.js.map +1 -1
  199. package/lib/utils/media.js +1 -1
  200. package/lib/utils/media.js.map +1 -1
  201. package/package.json +33 -8
  202. package/src/Piral.test.tsx +3 -3
  203. package/src/Piral.tsx +18 -14
  204. package/src/PiralContext.tsx +43 -0
  205. package/src/RootListener.test.tsx +7 -5
  206. package/src/actions/app.test.ts +1 -19
  207. package/src/actions/app.ts +0 -8
  208. package/src/actions/state.ts +6 -1
  209. package/src/components/ErrorBoundary.tsx +7 -3
  210. package/src/components/ForeignComponentContainer.test.tsx +25 -16
  211. package/src/components/ForeignComponentContainer.tsx +1 -2
  212. package/src/components/PiralGlobals.tsx +16 -0
  213. package/src/components/PiralRoutes.test.tsx +1 -1
  214. package/src/components/PiralSuspense.tsx +19 -0
  215. package/src/components/PiralView-server.test.tsx +27 -26
  216. package/src/components/PiralView.test.tsx +1 -0
  217. package/src/components/PiralView.tsx +28 -47
  218. package/src/components/ResponsiveLayout.test.tsx +14 -43
  219. package/src/components/ResponsiveLayout.tsx +18 -15
  220. package/src/components/components.tsx +13 -6
  221. package/src/components/index.ts +2 -12
  222. package/src/components/wrapComponent.tsx +1 -1
  223. package/src/{components → defaults}/DefaultErrorInfo.test.tsx +0 -0
  224. package/src/{components → defaults}/DefaultErrorInfo.tsx +1 -2
  225. package/src/{components → defaults}/DefaultLayout.test.tsx +0 -0
  226. package/src/{components → defaults}/DefaultLayout.tsx +1 -1
  227. package/src/{components/DefaultLoader.test.tsx → defaults/DefaultLoadingIndicator.test.tsx} +2 -2
  228. package/src/{components/DefaultLoader.tsx → defaults/DefaultLoadingIndicator.tsx} +0 -0
  229. package/src/{components → defaults}/DefaultRouteSwitch.tsx +0 -0
  230. package/src/{components → defaults}/DefaultRouter.tsx +2 -1
  231. package/src/defaults/index.ts +5 -0
  232. package/src/hooks/setter.test.ts +3 -2
  233. package/src/index.tsx +1 -0
  234. package/src/{components → setters}/SetComponent.test.tsx +0 -0
  235. package/src/{components → setters}/SetComponent.tsx +0 -0
  236. package/src/{components → setters}/SetError.test.tsx +0 -0
  237. package/src/{components → setters}/SetError.tsx +0 -0
  238. package/src/{components → setters}/SetErrors.test.tsx +0 -0
  239. package/src/{components → setters}/SetErrors.tsx +0 -0
  240. package/src/{components → setters}/SetLayout.test.tsx +0 -0
  241. package/src/{components → setters}/SetLayout.tsx +0 -0
  242. package/src/{components → setters}/SetProvider.test.tsx +0 -0
  243. package/src/{components → setters}/SetProvider.tsx +0 -0
  244. package/src/{components → setters}/SetRedirect.test.tsx +0 -0
  245. package/src/{components → setters}/SetRedirect.tsx +0 -0
  246. package/src/{components → setters}/SetRoute.test.tsx +0 -0
  247. package/src/{components → setters}/SetRoute.tsx +0 -0
  248. package/src/setters/index.ts +7 -0
  249. package/src/state/createGlobalState.test.ts +1 -10
  250. package/src/state/createGlobalState.ts +2 -3
  251. package/src/state/withApi.tsx +2 -3
  252. package/src/types/components.ts +11 -2
  253. package/src/types/instance.ts +11 -3
  254. package/src/types/state.ts +2 -12
  255. package/src/utils/compare.test.ts +15 -15
  256. package/src/utils/compare.ts +23 -3
  257. package/src/utils/foreign.test.ts +1 -1
  258. package/src/utils/media.ts +1 -1
  259. package/esm/components/DefaultErrorInfo.js.map +0 -1
  260. package/esm/components/DefaultLayout.js.map +0 -1
  261. package/esm/components/DefaultLoader.js.map +0 -1
  262. package/esm/components/DefaultRouteSwitch.js.map +0 -1
  263. package/esm/components/DefaultRouter.d.ts +0 -2
  264. package/esm/components/DefaultRouter.js.map +0 -1
  265. package/esm/components/SetComponent.js.map +0 -1
  266. package/esm/components/SetError.js.map +0 -1
  267. package/esm/components/SetErrors.js.map +0 -1
  268. package/esm/components/SetLayout.js.map +0 -1
  269. package/esm/components/SetProvider.js.map +0 -1
  270. package/esm/components/SetRedirect.js.map +0 -1
  271. package/esm/components/SetRoute.js.map +0 -1
  272. package/lib/components/DefaultErrorInfo.js.map +0 -1
  273. package/lib/components/DefaultLayout.js.map +0 -1
  274. package/lib/components/DefaultLoader.js.map +0 -1
  275. package/lib/components/DefaultRouteSwitch.js.map +0 -1
  276. package/lib/components/DefaultRouter.d.ts +0 -2
  277. package/lib/components/DefaultRouter.js.map +0 -1
  278. package/lib/components/SetComponent.js.map +0 -1
  279. package/lib/components/SetError.js.map +0 -1
  280. package/lib/components/SetErrors.js.map +0 -1
  281. package/lib/components/SetLayout.js.map +0 -1
  282. package/lib/components/SetProvider.js.map +0 -1
  283. package/lib/components/SetRedirect.js.map +0 -1
  284. package/lib/components/SetRoute.js.map +0 -1
@@ -6,25 +6,15 @@ import { defaultBreakpoints } from '../utils';
6
6
 
7
7
  jest.mock('../hooks');
8
8
 
9
- (hooks as any).useGlobalState = (select: any) =>
10
- select({
11
- app: {
12
- layout: 'desktop',
13
- },
14
- });
15
-
16
- const StubComponent: React.FC = () => <div />;
17
- StubComponent.displayName = 'StubComponent';
18
-
19
9
  describe('Responsive Module', () => {
20
10
  it('always renders the given children', () => {
21
- const changeTo = jest.fn();
22
- (hooks as any).useGlobalStateContext = () => ({
23
- changeLayout: changeTo,
24
- });
25
11
  (hooks as any).useMedia = () => 'desktop';
12
+ const Layout: React.FC = jest.fn().mockImplementation(({ children }) => <div>{children}</div>);
13
+ Layout.displayName = 'Layout';
14
+ const StubComponent: React.FC = () => <div />;
15
+ StubComponent.displayName = 'StubComponent';
26
16
  const node = mount(
27
- <ResponsiveLayout breakpoints={defaultBreakpoints}>
17
+ <ResponsiveLayout Layout={Layout} breakpoints={defaultBreakpoints}>
28
18
  <StubComponent />)
29
19
  </ResponsiveLayout>,
30
20
  );
@@ -32,42 +22,23 @@ describe('Responsive Module', () => {
32
22
  });
33
23
 
34
24
  it('does not call changeTo when nothing changed', () => {
35
- const changeTo = jest.fn();
36
- (hooks as any).useGlobalStateContext = () => ({
37
- changeLayout: changeTo,
38
- });
39
- (hooks as any).useMedia = () => 'desktop';
40
- mount(<ResponsiveLayout breakpoints={defaultBreakpoints} />);
41
- expect(changeTo).not.toHaveBeenCalled();
42
- });
43
-
44
- it('does not call changeTo when nothing changed', () => {
45
- const changeTo = jest.fn();
46
- (hooks as any).useGlobalStateContext = () => ({
47
- changeLayout: changeTo,
48
- });
49
25
  (hooks as any).useMedia = () => 'desktop';
50
- mount(<ResponsiveLayout breakpoints={defaultBreakpoints} />);
51
- expect(changeTo).not.toHaveBeenCalled();
26
+ const Layout = jest.fn().mockImplementation(({ children }) => <div>{children}</div>);
27
+ mount(<ResponsiveLayout Layout={Layout} breakpoints={defaultBreakpoints} />);
28
+ expect(Layout).toHaveBeenCalledWith({ currentLayout: 'desktop' }, {});
52
29
  });
53
30
 
54
31
  it('does calls changeTo when someething changed (desktop -> tablet)', () => {
55
- const changeTo = jest.fn();
56
- (hooks as any).useGlobalStateContext = () => ({
57
- changeLayout: changeTo,
58
- });
59
32
  (hooks as any).useMedia = () => 'tablet';
60
- mount(<ResponsiveLayout breakpoints={defaultBreakpoints} />);
61
- expect(changeTo).toHaveBeenCalledWith('tablet');
33
+ const Layout = jest.fn().mockImplementation(({ children }) => <div>{children}</div>);
34
+ mount(<ResponsiveLayout Layout={Layout} breakpoints={defaultBreakpoints} />);
35
+ expect(Layout).toHaveBeenCalledWith({ currentLayout: 'tablet' }, {});
62
36
  });
63
37
 
64
38
  it('does calls changeTo when someething changed (desktop -> mobile)', () => {
65
- const changeTo = jest.fn();
66
- (hooks as any).useGlobalStateContext = () => ({
67
- changeLayout: changeTo,
68
- });
69
39
  (hooks as any).useMedia = () => 'mobile';
70
- mount(<ResponsiveLayout breakpoints={defaultBreakpoints} />);
71
- expect(changeTo).toHaveBeenCalledWith('mobile');
40
+ const Layout = jest.fn().mockImplementation(({ children }) => <div>{children}</div>);
41
+ mount(<ResponsiveLayout Layout={Layout} breakpoints={defaultBreakpoints} />);
42
+ expect(Layout).toHaveBeenCalledWith({ currentLayout: 'mobile' }, {});
72
43
  });
73
44
  });
@@ -1,7 +1,7 @@
1
1
  import * as React from 'react';
2
- import { useMedia, useGlobalState, useGlobalStateContext } from '../hooks';
3
- import { defaultLayouts, defaultRender, defaultBreakpoints } from '../utils';
4
- import { LayoutBreakpoints } from '../types';
2
+ import { useMedia } from '../hooks';
3
+ import { defaultLayouts, defaultBreakpoints } from '../utils';
4
+ import { LayoutBreakpoints, LayoutProps } from '../types';
5
5
 
6
6
  /**
7
7
  * The props for the ResponsiveLayout component.
@@ -11,22 +11,25 @@ export interface ResponsiveLayoutProps {
11
11
  * The individual breakpoints to be used for the different layouts.
12
12
  */
13
13
  breakpoints?: LayoutBreakpoints;
14
+ /**
15
+ * The actual layout component to render to transport.
16
+ */
17
+ Layout: React.ComponentType<LayoutProps>;
18
+ /**
19
+ * The content to display.
20
+ */
21
+ children: React.ReactNode;
14
22
  }
15
23
 
16
24
  /**
17
25
  * The component capable of identifying and switching the currently used layout.
18
26
  */
19
- export const ResponsiveLayout: React.FC<ResponsiveLayoutProps> = ({ breakpoints = defaultBreakpoints, children }) => {
20
- const current = useGlobalState((m) => m.app.layout) || 'desktop';
21
- const { changeLayout } = useGlobalStateContext();
22
- const selected = useMedia(breakpoints, defaultLayouts, current);
23
-
24
- React.useEffect(() => {
25
- if (selected !== current) {
26
- changeLayout(selected);
27
- }
28
- }, [selected]);
29
-
30
- return defaultRender(children);
27
+ export const ResponsiveLayout: React.FC<ResponsiveLayoutProps> = ({
28
+ breakpoints = defaultBreakpoints,
29
+ Layout,
30
+ children,
31
+ }) => {
32
+ const selected = useMedia(breakpoints, defaultLayouts, 'desktop');
33
+ return <Layout currentLayout={selected}>{children}</Layout>;
31
34
  };
32
35
  ResponsiveLayout.displayName = 'ResponsiveLayout';
@@ -2,6 +2,13 @@ import * as React from 'react';
2
2
  import { useGlobalState } from '../hooks';
3
3
  import { ComponentsState } from '../types';
4
4
 
5
+ /**
6
+ * Gets a registered layout component by its name.
7
+ * This will always return a valid component. If nothing is found
8
+ * then the returned component will just return null.
9
+ * @param name The name of the registered layout component.
10
+ * @returns The registered layout component or an empty stub component.
11
+ */
5
12
  export function getPiralComponent<TKey extends keyof ComponentsState>(name: TKey): ComponentsState[TKey] {
6
13
  return (props) => {
7
14
  const Component = useGlobalState((s) => s.components[name]);
@@ -14,34 +21,34 @@ export function getPiralComponent<TKey extends keyof ComponentsState>(name: TKey
14
21
  * Gets the currently registered ErrorInfo component.
15
22
  * By default the DefaultErrorInfo component is used.
16
23
  */
17
- export const PiralError = getPiralComponent('ErrorInfo');
24
+ export const RegisteredErrorInfo = getPiralComponent('ErrorInfo');
18
25
 
19
26
  /**
20
27
  * Gets the currently registered LoadingIndicator component.
21
28
  * By default only Loading is rendered.
22
29
  */
23
- export const PiralLoadingIndicator = getPiralComponent('LoadingIndicator');
30
+ export const RegisteredLoadingIndicator = getPiralComponent('LoadingIndicator');
24
31
 
25
32
  /**
26
33
  * Gets the currently registered Router component.
27
34
  * By default the BrowserRouter is used.
28
35
  */
29
- export const PiralRouter = getPiralComponent('Router');
36
+ export const RegisteredRouter = getPiralComponent('Router');
30
37
 
31
38
  /**
32
39
  * Gets the currently registered Route Switch component.
33
40
  * By default the DefaultRouteSwitch component is used.
34
41
  */
35
- export const PiralRouteSwitch = getPiralComponent('RouteSwitch');
42
+ export const RegisteredRouteSwitch = getPiralComponent('RouteSwitch');
36
43
 
37
44
  /**
38
45
  * Gets the currently registered Layout component.
39
46
  * By default the children are rendered.
40
47
  */
41
- export const PiralLayout = getPiralComponent('Layout');
48
+ export const RegisteredLayout = getPiralComponent('Layout');
42
49
 
43
50
  /**
44
51
  * Gets the currently registered Debug component.
45
52
  * By default nothing is used.
46
53
  */
47
- export const PiralDebug = getPiralComponent('Debug');
54
+ export const RegisteredDebug = getPiralComponent('Debug');
@@ -1,22 +1,12 @@
1
1
  export * from './components';
2
- export * from './DefaultErrorInfo';
3
- export * from './DefaultLayout';
4
- export * from './DefaultLoader';
5
- export * from './DefaultRouter';
6
- export * from './DefaultRouteSwitch';
7
2
  export * from './ErrorBoundary';
8
3
  export * from './ExtensionSlot';
9
4
  export * from './Mediator';
5
+ export * from './PiralGlobals';
10
6
  export * from './PiralRoutes';
7
+ export * from './PiralSuspense';
11
8
  export * from './PiralView';
12
9
  export * from './PortalRenderer';
13
10
  export * from './ResponsiveLayout';
14
- export * from './SetComponent';
15
- export * from './SetError';
16
- export * from './SetErrors';
17
- export * from './SetLayout';
18
- export * from './SetProvider';
19
- export * from './SetRedirect';
20
- export * from './SetRoute';
21
11
  export * from './SwitchErrorInfo';
22
12
  export * from './wrapComponent';
@@ -4,7 +4,7 @@ import { PortalRenderer } from './PortalRenderer';
4
4
  import { ForeignComponentContainer } from './ForeignComponentContainer';
5
5
  import { useGlobalStateContext } from '../hooks';
6
6
  import { convertComponent, none } from '../utils';
7
- import { AnyComponent, ComponentConverters, ForeignComponent, PiletApi, BaseComponentProps } from '../types';
7
+ import type { AnyComponent, ComponentConverters, ForeignComponent, PiletApi, BaseComponentProps } from '../types';
8
8
 
9
9
  // this is an arbitrary start number to have 6 digits
10
10
  let portalIdBase = 123456;
@@ -1,6 +1,5 @@
1
1
  import * as React from 'react';
2
- import { ExtensionSlot } from './ExtensionSlot';
3
- import { SwitchErrorInfo } from './SwitchErrorInfo';
2
+ import { ExtensionSlot, SwitchErrorInfo } from '../components';
4
3
  import { ErrorInfoProps } from '../types';
5
4
 
6
5
  /**
@@ -1,6 +1,6 @@
1
1
  import * as React from 'react';
2
- import { LayoutProps } from '../types';
3
2
  import { defaultRender } from '../utils';
3
+ import { LayoutProps } from '../types';
4
4
 
5
5
  /**
6
6
  * The default layout only rendering the provided children.
@@ -1,8 +1,8 @@
1
1
  import * as React from 'react';
2
- import { DefaultLoadingIndicator } from './DefaultLoader';
2
+ import { DefaultLoadingIndicator } from './DefaultLoadingIndicator';
3
3
  import { mount } from 'enzyme';
4
4
 
5
- describe('Default Loader Component', () => {
5
+ describe('Default Loading Indicator Component', () => {
6
6
  it('renders correctly', () => {
7
7
  const node = mount(<DefaultLoadingIndicator />);
8
8
  expect(node.find('div').length).toBe(1);
@@ -1,8 +1,9 @@
1
1
  import * as React from 'react';
2
2
  import { BrowserRouter } from 'react-router-dom';
3
3
  import { useGlobalState } from '../hooks';
4
+ import { RouterProps } from '../types';
4
5
 
5
- export const DefaultRouter: React.FC = ({ children }) => {
6
+ export const DefaultRouter: React.FC<RouterProps> = ({ children }) => {
6
7
  const publicPath = useGlobalState((s) => s.app.publicPath);
7
8
  return <BrowserRouter basename={publicPath}>{children}</BrowserRouter>;
8
9
  };
@@ -0,0 +1,5 @@
1
+ export * from './DefaultErrorInfo';
2
+ export * from './DefaultLayout';
3
+ export * from './DefaultLoadingIndicator';
4
+ export * from './DefaultRouter';
5
+ export * from './DefaultRouteSwitch';
@@ -1,6 +1,6 @@
1
1
  import * as React from 'react';
2
2
  import { act } from 'react-dom/test-utils';
3
- import { render } from 'react-dom';
3
+ import { createRoot } from 'react-dom/client';
4
4
  import { useSetter } from './setter';
5
5
 
6
6
  describe('UseSetter Hook Module', () => {
@@ -12,7 +12,8 @@ describe('UseSetter Hook Module', () => {
12
12
  return null;
13
13
  };
14
14
 
15
- render(React.createElement(MyComponent), document.body.appendChild(document.createElement('div')));
15
+ const root = createRoot(document.body.appendChild(document.createElement('div')));
16
+ root.render(React.createElement(MyComponent));
16
17
  await act(() => Promise.resolve());
17
18
  expect(cb).toHaveBeenCalled();
18
19
  });
package/src/index.tsx CHANGED
@@ -3,6 +3,7 @@ export * from './Piral';
3
3
  export * from './helpers';
4
4
  export * from './components';
5
5
  export * from './hooks';
6
+ export * from './setters';
6
7
  export * from './state';
7
8
  export * from './utils';
8
9
  export * from './types';
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -0,0 +1,7 @@
1
+ export * from './SetComponent';
2
+ export * from './SetError';
3
+ export * from './SetErrors';
4
+ export * from './SetLayout';
5
+ export * from './SetProvider';
6
+ export * from './SetRedirect';
7
+ export * from './SetRoute';
@@ -6,7 +6,7 @@ import {
6
6
  DefaultLayout,
7
7
  DefaultRouter,
8
8
  DefaultRouteSwitch,
9
- } from '../components';
9
+ } from '../defaults';
10
10
 
11
11
  process.env.PIRAL_PUBLIC_PATH = '/';
12
12
 
@@ -17,7 +17,6 @@ describe('Create Global State Module', () => {
17
17
  const globalState = createGlobalState({});
18
18
  expect(deref(globalState)).toEqual({
19
19
  app: {
20
- layout: 'desktop',
21
20
  loading: true,
22
21
  error: undefined,
23
22
  publicPath: '/',
@@ -46,7 +45,6 @@ describe('Create Global State Module', () => {
46
45
  const globalState = createGlobalState({});
47
46
  expect(deref(globalState)).toEqual({
48
47
  app: {
49
- layout: 'desktop',
50
48
  loading: true,
51
49
  error: undefined,
52
50
  publicPath: '/',
@@ -80,7 +78,6 @@ describe('Create Global State Module', () => {
80
78
  expect(deref(globalState)).toEqual({
81
79
  app: {
82
80
  error: undefined,
83
- layout: 'desktop',
84
81
  loading: true,
85
82
  publicPath: '/',
86
83
  },
@@ -108,7 +105,6 @@ describe('Create Global State Module', () => {
108
105
  const globalState = createGlobalState();
109
106
  expect(deref(globalState)).toEqual({
110
107
  app: {
111
- layout: 'desktop',
112
108
  loading: true,
113
109
  error: undefined,
114
110
  publicPath: '/',
@@ -139,7 +135,6 @@ describe('Create Global State Module', () => {
139
135
  });
140
136
  expect(deref(globalState)).toEqual({
141
137
  app: {
142
- layout: 'desktop',
143
138
  loading: true,
144
139
  error: undefined,
145
140
  publicPath: '/',
@@ -170,7 +165,6 @@ describe('Create Global State Module', () => {
170
165
  });
171
166
  expect(deref(globalState)).toEqual({
172
167
  app: {
173
- layout: 'desktop',
174
168
  loading: true,
175
169
  error: undefined,
176
170
  publicPath: '/',
@@ -198,7 +192,6 @@ describe('Create Global State Module', () => {
198
192
  it('global state with non-default breakpoints and more routes', () => {
199
193
  const globalState = createGlobalState({
200
194
  app: {
201
- layout: 'desktop',
202
195
  },
203
196
  routes: {
204
197
  '/': '...' as any,
@@ -207,7 +200,6 @@ describe('Create Global State Module', () => {
207
200
  });
208
201
  expect(deref(globalState)).toEqual({
209
202
  app: {
210
- layout: 'desktop',
211
203
  loading: true,
212
204
  error: undefined,
213
205
  publicPath: '/',
@@ -243,7 +235,6 @@ describe('Create Global State Module', () => {
243
235
  });
244
236
  expect(deref(globalState)).toEqual({
245
237
  app: {
246
- layout: 'desktop',
247
238
  loading: false,
248
239
  error: undefined,
249
240
  publicPath: '/',
@@ -1,12 +1,12 @@
1
1
  import { Atom } from '@dbeining/react-atom';
2
+ import { GlobalState, NestedPartial } from '../types';
2
3
  import {
3
4
  DefaultErrorInfo,
4
5
  DefaultLoadingIndicator,
5
6
  DefaultLayout,
6
7
  DefaultRouter,
7
8
  DefaultRouteSwitch,
8
- } from '../components';
9
- import { GlobalState, NestedPartial } from '../types';
9
+ } from '../defaults';
10
10
 
11
11
  function extend<T>(defaultState: T, customState: NestedPartial<T>) {
12
12
  for (const key of Object.keys(customState)) {
@@ -28,7 +28,6 @@ export function createGlobalState(customState: NestedPartial<GlobalState> = {})
28
28
  app: {
29
29
  error: undefined,
30
30
  loading: typeof window !== 'undefined',
31
- layout: 'desktop',
32
31
  publicPath: process.env.PIRAL_PUBLIC_PATH || '/',
33
32
  },
34
33
  components: {
@@ -1,10 +1,9 @@
1
1
  import * as React from 'react';
2
- import { __RouterContext } from 'react-router';
3
2
  import { ErrorBoundary, wrapComponent } from '../components';
4
3
  import { defaultRender } from '../utils';
5
4
  import { AnyComponent, Errors, PiletApi, BaseComponentProps, GlobalStateContext } from '../types';
6
5
 
7
- const DefaultWrapper: React.FC = (props) => defaultRender(props.children);
6
+ const DefaultWrapper: React.FC<React.PropsWithChildren<{}>> = (props) => defaultRender(props.children);
8
7
 
9
8
  function getWrapper(wrappers: Record<string, React.ComponentType<any>>, wrapperType: string) {
10
9
  const WrapAll = wrappers['*'];
@@ -26,7 +25,7 @@ function makeWrapper<TProps>(
26
25
  outerProps: any,
27
26
  wrapperType: string,
28
27
  errorType: keyof Errors,
29
- ): React.FC<TProps> {
28
+ ): React.FC<React.PropsWithChildren<TProps>> {
30
29
  const OuterWrapper = context.readState((m) => getWrapper(m.registry.wrappers, wrapperType));
31
30
 
32
31
  return (props) => (
@@ -1,4 +1,4 @@
1
- import type { ComponentType } from 'react';
1
+ import type { ComponentType, ReactNode } from 'react';
2
2
  import type { RouteComponentProps, SwitchProps } from 'react-router';
3
3
  import type { FirstParametersOf, UnionOf } from './common';
4
4
  import type { PiralCustomErrors, PiralCustomComponentConverters } from './custom';
@@ -191,12 +191,21 @@ export interface LayoutProps {
191
191
  * The currently selected layout type.
192
192
  */
193
193
  currentLayout: LayoutType;
194
+ /**
195
+ * The page's content.
196
+ */
197
+ children: ReactNode;
194
198
  }
195
199
 
196
200
  /**
197
201
  * The props of a Router component.
198
202
  */
199
- export interface RouterProps {}
203
+ export interface RouterProps {
204
+ /**
205
+ * The content to be rendered inside the router.
206
+ */
207
+ children?: ReactNode;
208
+ }
200
209
 
201
210
  /**
202
211
  * The props of the RouteSwitch component.
@@ -1,16 +1,24 @@
1
+ import type { ReactNode } from 'react';
1
2
  import type { PiletApi, PiletApiCreator, LoadPiletsOptions, EventEmitter } from 'piral-base';
2
3
  import type { GlobalStateContext } from './state';
3
4
  import type { LayoutBreakpoints } from './layout';
4
- import { PiralConfiguration } from './config';
5
+ import type { PiralConfiguration } from './config';
5
6
 
6
7
  /**
7
- * The props of the Piral component.
8
+ * The props of the Piral context.
8
9
  */
9
- export interface PiralProps {
10
+ export interface PiralContextProps {
10
11
  /**
11
12
  * The specific Piral instance to be used.
12
13
  */
13
14
  instance?: PiralInstance;
15
+ children?: ReactNode;
16
+ }
17
+
18
+ /**
19
+ * The props of the Piral component.
20
+ */
21
+ export interface PiralProps extends PiralContextProps {
14
22
  /**
15
23
  * The custom breakpoints for the different layout modi.
16
24
  */
@@ -1,9 +1,8 @@
1
- import type { ComponentType, ReactPortal } from 'react';
1
+ import type { ComponentType, ReactPortal, PropsWithChildren } from 'react';
2
2
  import type { RouteComponentProps } from 'react-router';
3
3
  import type { Atom } from '@dbeining/react-atom';
4
4
  import type { LoadPiletsOptions } from 'piral-base';
5
5
  import type { Dict, Without } from './common';
6
- import type { LayoutType } from './layout';
7
6
  import type { SharedDataItem, DataStoreTarget } from './data';
8
7
  import type {
9
8
  PiralCustomActions,
@@ -42,7 +41,7 @@ declare module './components' {
42
41
  }
43
42
  }
44
43
 
45
- export type WrappedComponent<TProps> = ComponentType<Without<TProps, keyof BaseComponentProps>>;
44
+ export type WrappedComponent<TProps> = ComponentType<PropsWithChildren<Without<TProps, keyof BaseComponentProps>>>;
46
45
 
47
46
  /**
48
47
  * The base type for pilet component registration in the global state context.
@@ -102,10 +101,6 @@ export interface ComponentsState extends PiralCustomComponentsState {
102
101
  * The Piral global app sub-state container for app information.
103
102
  */
104
103
  export interface AppState {
105
- /**
106
- * Information for the layout computation.
107
- */
108
- layout: LayoutType;
109
104
  /**
110
105
  * Gets if the application is currently performing a background loading
111
106
  * activity, e.g., for loading modules asynchronously or fetching
@@ -254,11 +249,6 @@ export interface PiralActions extends PiralCustomActions {
254
249
  * @param expiration The time for when to dispose the shared item.
255
250
  */
256
251
  tryWriteDataItem(name: string, value: any, owner: string, target: DataStoreTarget, expiration: number): boolean;
257
- /**
258
- * Performs a layout change.
259
- * @param current The layout to take.
260
- */
261
- changeLayout(current: LayoutType): void;
262
252
  /**
263
253
  * Registers a new route to be resolved.
264
254
  * @param route The route to register.