@teambit/react-router 0.0.650 → 0.0.651

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.
@@ -2,10 +2,11 @@
2
2
  import { RouteProps } from 'react-router-dom';
3
3
  import { History, LocationListener, LocationDescriptor, Action } from 'history';
4
4
  import { SlotRegistry } from '@teambit/harmony';
5
+ import { RenderPlugins } from '@teambit/ui';
5
6
  import { RouteSlot } from '@teambit/ui-foundation.ui.react-router.slot-router';
6
7
  import { Routing } from './routing-method';
7
8
  declare type RouteChangeSlot = SlotRegistry<LocationListener>;
8
- declare type RenderRoutesOptions = {
9
+ declare type RenderContext = {
9
10
  initialLocation?: string;
10
11
  };
11
12
  export declare class ReactRouterUI {
@@ -31,7 +32,7 @@ export declare class ReactRouterUI {
31
32
  /**
32
33
  * render all slot routes.
33
34
  */
34
- renderRoutes(routes: RouteProps[], options?: RenderRoutesOptions): JSX.Element;
35
+ renderRoutes(routes: RouteProps[]): JSX.Element;
35
36
  private unregisterListener?;
36
37
  /** (internal method) sets the routing engine for navigation methods */
37
38
  setRouter: (routerHistory: History) => void;
@@ -49,11 +50,9 @@ export declare class ReactRouterUI {
49
50
  /**
50
51
  * change browser location
51
52
  */
52
- navigateTo: (path: LocationDescriptor, action?: Record<string, any> | Action | undefined) => void;
53
- /**
54
- * change browser location
55
- */
56
- private legacyNavigateTo;
53
+ navigateTo: (path: LocationDescriptor, action?: Action | undefined) => void;
54
+ private AppRoutingContext;
55
+ renderPlugin: RenderPlugins<RenderContext>;
57
56
  static slots: (((registerFn: () => string) => SlotRegistry<RouteProps<string, {
58
57
  [x: string]: string | undefined;
59
58
  }>>) | ((registerFn: () => string) => SlotRegistry<LocationListener<unknown>>))[];
@@ -122,11 +122,6 @@ class ReactRouterUI {
122
122
  (0, _defineProperty2().default)(this, "navigateTo", (path, action) => {
123
123
  var _this$routerHistory, _this$routerHistory2;
124
124
 
125
- if (typeof action !== 'string') {
126
- this.legacyNavigateTo(path, action);
127
- return;
128
- }
129
-
130
125
  switch (action) {
131
126
  case 'POP':
132
127
  return;
@@ -141,10 +136,32 @@ class ReactRouterUI {
141
136
  (_this$routerHistory2 = this.routerHistory) === null || _this$routerHistory2 === void 0 ? void 0 : _this$routerHistory2.push(path);
142
137
  }
143
138
  });
144
- (0, _defineProperty2().default)(this, "legacyNavigateTo", (path, state) => {
145
- var _this$routerHistory3;
146
-
147
- (_this$routerHistory3 = this.routerHistory) === null || _this$routerHistory3 === void 0 ? void 0 : _this$routerHistory3.push(path, state);
139
+ (0, _defineProperty2().default)(this, "AppRoutingContext", ({
140
+ children,
141
+ renderCtx
142
+ }) => {
143
+ return /*#__PURE__*/_react().default.createElement(_routeContext().RouteContext, {
144
+ reactRouterUi: this,
145
+ routing: this.routingMode,
146
+ location: renderCtx === null || renderCtx === void 0 ? void 0 : renderCtx.initialLocation
147
+ }, children);
148
+ });
149
+ (0, _defineProperty2().default)(this, "renderPlugin", {
150
+ browserInit: () => {
151
+ const initialLocation = `${window.location.pathname}${window.location.search}${window.location.hash}`;
152
+ return {
153
+ initialLocation
154
+ };
155
+ },
156
+ serverInit: ({
157
+ browser
158
+ }) => {
159
+ const initialLocation = browser === null || browser === void 0 ? void 0 : browser.location.url;
160
+ return {
161
+ initialLocation
162
+ };
163
+ },
164
+ reactContext: this.AppRoutingContext
148
165
  });
149
166
  }
150
167
  /**
@@ -152,15 +169,11 @@ class ReactRouterUI {
152
169
  */
153
170
 
154
171
 
155
- renderRoutes(routes, options = {}) {
156
- return /*#__PURE__*/_react().default.createElement(_routeContext().RouteContext, {
157
- reactRouterUi: this,
158
- routing: this.routingMode,
159
- location: options.initialLocation
160
- }, /*#__PURE__*/_react().default.createElement(_routeContext().RootRoute, {
172
+ renderRoutes(routes) {
173
+ return /*#__PURE__*/_react().default.createElement(_routeContext().RootRoute, {
161
174
  routeSlot: this.routeSlot,
162
175
  rootRoutes: routes
163
- }));
176
+ });
164
177
  }
165
178
 
166
179
  /** decides how navigation is stored and applied.
@@ -1 +1 @@
1
- {"version":3,"sources":["react-router.ui.runtime.tsx"],"names":["ReactRouterUI","constructor","routeSlot","routeChangeListener","isBrowser","Routing","url","static","undefined","routerHistory","unregisterListener","listen","args","values","forEach","listener","path","action","legacyNavigateTo","replace","push","state","renderRoutes","routes","options","routingMode","initialLocation","setRoutingMode","routing","register","route","registerListener","provider","deps","config","routeChangeSlot","Slot","withType","UIRuntime","ReactRouterAspect","addRuntime"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { RouteProps } from 'react-router-dom';\nimport { History, UnregisterCallback, LocationListener, LocationDescriptor, Action } from 'history';\nimport { Slot, SlotRegistry } from '@teambit/harmony';\nimport { UIRuntime } from '@teambit/ui';\nimport { RouteSlot } from '@teambit/ui-foundation.ui.react-router.slot-router';\nimport { isBrowser } from '@teambit/ui-foundation.ui.is-browser';\n\nimport { ReactRouterAspect } from './react-router.aspect';\nimport { RouteContext, RootRoute } from './route-context';\nimport { Routing } from './routing-method';\n\ntype RouteChangeSlot = SlotRegistry<LocationListener>;\ntype RenderRoutesOptions = {\n initialLocation?: string;\n};\n\nexport class ReactRouterUI {\n private routerHistory?: History;\n private routingMode = isBrowser ? Routing.url : Routing.static;\n\n constructor(\n /**\n * route slot.\n */\n private routeSlot: RouteSlot,\n /**\n *\n */\n private routeChangeListener: RouteChangeSlot\n ) {}\n\n /**\n * render all slot routes.\n */\n renderRoutes(routes: RouteProps[], options: RenderRoutesOptions = {}): JSX.Element {\n return (\n <RouteContext reactRouterUi={this} routing={this.routingMode} location={options.initialLocation}>\n <RootRoute routeSlot={this.routeSlot} rootRoutes={routes}></RootRoute>\n </RouteContext>\n );\n }\n\n private unregisterListener?: UnregisterCallback = undefined;\n /** (internal method) sets the routing engine for navigation methods */\n setRouter = (routerHistory: History) => {\n this.routerHistory = routerHistory;\n\n this.unregisterListener?.();\n this.unregisterListener = routerHistory.listen((...args) => {\n this.routeChangeListener.values().forEach((listener) => listener(...args));\n });\n };\n\n /** decides how navigation is stored and applied.\n * Url - updates the `window.location.pathname`.\n * Hash - updates `window.location.hash`.\n * InMemory - store state internally and don't update the browser.\n */\n setRoutingMode(routing: Routing) {\n this.routingMode = routing;\n }\n\n /**\n * register a new route.\n */\n register(route: RouteProps) {\n this.routeSlot.register(route);\n return this;\n }\n\n registerListener(listener: LocationListener) {\n this.routeChangeListener.register(listener);\n }\n\n /**\n * change browser location\n */\n navigateTo = (\n /** destination */\n path: LocationDescriptor,\n /**\n * type of history action to execute (pop / push / replace).\n * Supports state-object for legacy calls. (this will be removed when supported by symphony)\n */\n action?: Action | Record<string, any>\n ) => {\n if (typeof action !== 'string') {\n this.legacyNavigateTo(path as string, action);\n return;\n }\n\n switch (action) {\n case 'POP':\n return; // TBD;\n case 'REPLACE':\n this.routerHistory?.replace(path);\n return;\n case 'PUSH':\n default:\n this.routerHistory?.push(path);\n }\n };\n\n /**\n * change browser location\n */\n private legacyNavigateTo = (\n /** destination */\n path: string,\n state?: Record<string, any>\n ) => {\n this.routerHistory?.push(path, state);\n };\n\n static slots = [Slot.withType<RouteProps>(), Slot.withType<LocationListener>()];\n static runtime = UIRuntime;\n\n static async provider(deps, config, [routeSlot, routeChangeSlot]: [RouteSlot, RouteChangeSlot]) {\n return new ReactRouterUI(routeSlot, routeChangeSlot);\n }\n}\n\nReactRouterAspect.addRuntime(ReactRouterUI);\n"]}
1
+ {"version":3,"sources":["react-router.ui.runtime.tsx"],"names":["ReactRouterUI","constructor","routeSlot","routeChangeListener","isBrowser","Routing","url","static","undefined","routerHistory","unregisterListener","listen","args","values","forEach","listener","path","action","replace","push","children","renderCtx","routingMode","initialLocation","browserInit","window","location","pathname","search","hash","serverInit","browser","reactContext","AppRoutingContext","renderRoutes","routes","setRoutingMode","routing","register","route","registerListener","provider","deps","config","routeChangeSlot","Slot","withType","UIRuntime","ReactRouterAspect","addRuntime"],"mappings":"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","sourcesContent":["import React, { ReactNode } from 'react';\nimport { RouteProps } from 'react-router-dom';\nimport { History, UnregisterCallback, LocationListener, LocationDescriptor, Action } from 'history';\nimport { Slot, SlotRegistry } from '@teambit/harmony';\nimport { RenderPlugins, UIRuntime } from '@teambit/ui';\nimport { RouteSlot } from '@teambit/ui-foundation.ui.react-router.slot-router';\nimport { isBrowser } from '@teambit/ui-foundation.ui.is-browser';\n\nimport { ReactRouterAspect } from './react-router.aspect';\nimport { RouteContext, RootRoute } from './route-context';\nimport { Routing } from './routing-method';\n\ntype RouteChangeSlot = SlotRegistry<LocationListener>;\ntype RenderContext = { initialLocation?: string };\n\nexport class ReactRouterUI {\n private routerHistory?: History;\n private routingMode = isBrowser ? Routing.url : Routing.static;\n\n constructor(\n /**\n * route slot.\n */\n private routeSlot: RouteSlot,\n /**\n *\n */\n private routeChangeListener: RouteChangeSlot\n ) {}\n\n /**\n * render all slot routes.\n */\n renderRoutes(routes: RouteProps[]) {\n return <RootRoute routeSlot={this.routeSlot} rootRoutes={routes} />;\n }\n\n private unregisterListener?: UnregisterCallback = undefined;\n /** (internal method) sets the routing engine for navigation methods */\n setRouter = (routerHistory: History) => {\n this.routerHistory = routerHistory;\n\n this.unregisterListener?.();\n this.unregisterListener = routerHistory.listen((...args) => {\n this.routeChangeListener.values().forEach((listener) => listener(...args));\n });\n };\n\n /** decides how navigation is stored and applied.\n * Url - updates the `window.location.pathname`.\n * Hash - updates `window.location.hash`.\n * InMemory - store state internally and don't update the browser.\n */\n setRoutingMode(routing: Routing) {\n this.routingMode = routing;\n }\n\n /**\n * register a new route.\n */\n register(route: RouteProps) {\n this.routeSlot.register(route);\n return this;\n }\n\n registerListener(listener: LocationListener) {\n this.routeChangeListener.register(listener);\n }\n\n /**\n * change browser location\n */\n navigateTo = (\n /** destination */\n path: LocationDescriptor,\n /** history action to execute (pop / push / replace) */\n action?: Action\n ) => {\n switch (action) {\n case 'POP':\n return; // TBD;\n case 'REPLACE':\n this.routerHistory?.replace(path);\n return;\n case 'PUSH':\n default:\n this.routerHistory?.push(path);\n }\n };\n\n private AppRoutingContext = ({ children, renderCtx }: { children: ReactNode; renderCtx?: RenderContext }) => {\n return (\n <RouteContext reactRouterUi={this} routing={this.routingMode} location={renderCtx?.initialLocation}>\n {children}\n </RouteContext>\n );\n };\n\n public renderPlugin: RenderPlugins<RenderContext> = {\n browserInit: () => {\n const initialLocation = `${window.location.pathname}${window.location.search}${window.location.hash}`;\n return { initialLocation };\n },\n serverInit: ({ browser }) => {\n const initialLocation = browser?.location.url;\n return { initialLocation };\n },\n reactContext: this.AppRoutingContext,\n };\n\n static slots = [Slot.withType<RouteProps>(), Slot.withType<LocationListener>()];\n static runtime = UIRuntime;\n\n static async provider(deps, config, [routeSlot, routeChangeSlot]: [RouteSlot, RouteChangeSlot]) {\n return new ReactRouterUI(routeSlot, routeChangeSlot);\n }\n}\n\nReactRouterAspect.addRuntime(ReactRouterUI);\n"]}
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@teambit/react-router",
3
- "version": "0.0.650",
3
+ "version": "0.0.651",
4
4
  "homepage": "https://bit.dev/teambit/ui-foundation/react-router",
5
5
  "main": "dist/index.js",
6
6
  "componentId": {
7
7
  "scope": "teambit.ui-foundation",
8
8
  "name": "react-router",
9
- "version": "0.0.650"
9
+ "version": "0.0.651"
10
10
  },
11
11
  "dependencies": {
12
12
  "react-router": "5.2.0",
@@ -18,25 +18,25 @@
18
18
  "@teambit/base-ui.routing.link": "1.0.0",
19
19
  "@teambit/base-ui.routing.nav-link": "1.0.0",
20
20
  "@teambit/base-ui.routing.routing-provider": "1.0.0",
21
- "@teambit/ui-foundation.ui.react-router.link-anchor": "0.0.122",
22
- "@teambit/ui-foundation.ui.is-browser": "0.0.485",
23
- "@teambit/ui-foundation.ui.react-router.slot-router": "0.0.487",
24
- "@teambit/ui": "0.0.650",
25
- "@teambit/ui-foundation.ui.react-router.link": "0.0.488",
26
- "@teambit/ui-foundation.ui.react-router.nav-link": "0.0.488"
21
+ "@teambit/ui-foundation.ui.react-router.link-anchor": "0.0.123",
22
+ "@teambit/ui-foundation.ui.is-browser": "0.0.486",
23
+ "@teambit/ui-foundation.ui.react-router.slot-router": "0.0.488",
24
+ "@teambit/ui": "0.0.651",
25
+ "@teambit/ui-foundation.ui.react-router.link": "0.0.489",
26
+ "@teambit/ui-foundation.ui.react-router.nav-link": "0.0.489"
27
27
  },
28
28
  "devDependencies": {
29
29
  "@types/history": "4.7.8",
30
30
  "@types/react-router-dom": "5.1.7",
31
31
  "@types/react": "^17.0.8",
32
- "@types/mocha": "5.2.7",
32
+ "@types/mocha": "9.1.0",
33
33
  "@types/testing-library__jest-dom": "5.9.5",
34
34
  "@types/jest": "^26.0.0",
35
35
  "@types/react-dom": "^17.0.5",
36
36
  "@types/node": "12.20.4"
37
37
  },
38
38
  "peerDependencies": {
39
- "@teambit/legacy": "1.0.222",
39
+ "@teambit/legacy": "1.0.223",
40
40
  "react-dom": "^16.8.0 || ^17.0.0",
41
41
  "react": "^16.8.0 || ^17.0.0"
42
42
  },
@@ -54,7 +54,7 @@
54
54
  },
55
55
  "devDependencies": {
56
56
  "@teambit/legacy": "-",
57
- "@types/mocha": "5.2.7",
57
+ "@types/mocha": "9.1.0",
58
58
  "@types/testing-library__jest-dom": "5.9.5",
59
59
  "@types/jest": "^26.0.0",
60
60
  "@types/react-dom": "^17.0.5",
@@ -64,7 +64,7 @@
64
64
  "react": "-"
65
65
  },
66
66
  "peerDependencies": {
67
- "@teambit/legacy": "1.0.222",
67
+ "@teambit/legacy": "1.0.223",
68
68
  "react-dom": "^16.8.0 || ^17.0.0",
69
69
  "react": "^16.8.0 || ^17.0.0"
70
70
  }
@@ -1,8 +1,8 @@
1
- import React from 'react';
1
+ import React, { ReactNode } from 'react';
2
2
  import { RouteProps } from 'react-router-dom';
3
3
  import { History, UnregisterCallback, LocationListener, LocationDescriptor, Action } from 'history';
4
4
  import { Slot, SlotRegistry } from '@teambit/harmony';
5
- import { UIRuntime } from '@teambit/ui';
5
+ import { RenderPlugins, UIRuntime } from '@teambit/ui';
6
6
  import { RouteSlot } from '@teambit/ui-foundation.ui.react-router.slot-router';
7
7
  import { isBrowser } from '@teambit/ui-foundation.ui.is-browser';
8
8
 
@@ -11,9 +11,7 @@ import { RouteContext, RootRoute } from './route-context';
11
11
  import { Routing } from './routing-method';
12
12
 
13
13
  type RouteChangeSlot = SlotRegistry<LocationListener>;
14
- type RenderRoutesOptions = {
15
- initialLocation?: string;
16
- };
14
+ type RenderContext = { initialLocation?: string };
17
15
 
18
16
  export class ReactRouterUI {
19
17
  private routerHistory?: History;
@@ -33,12 +31,8 @@ export class ReactRouterUI {
33
31
  /**
34
32
  * render all slot routes.
35
33
  */
36
- renderRoutes(routes: RouteProps[], options: RenderRoutesOptions = {}): JSX.Element {
37
- return (
38
- <RouteContext reactRouterUi={this} routing={this.routingMode} location={options.initialLocation}>
39
- <RootRoute routeSlot={this.routeSlot} rootRoutes={routes}></RootRoute>
40
- </RouteContext>
41
- );
34
+ renderRoutes(routes: RouteProps[]) {
35
+ return <RootRoute routeSlot={this.routeSlot} rootRoutes={routes} />;
42
36
  }
43
37
 
44
38
  private unregisterListener?: UnregisterCallback = undefined;
@@ -79,17 +73,9 @@ export class ReactRouterUI {
79
73
  navigateTo = (
80
74
  /** destination */
81
75
  path: LocationDescriptor,
82
- /**
83
- * type of history action to execute (pop / push / replace).
84
- * Supports state-object for legacy calls. (this will be removed when supported by symphony)
85
- */
86
- action?: Action | Record<string, any>
76
+ /** history action to execute (pop / push / replace) */
77
+ action?: Action
87
78
  ) => {
88
- if (typeof action !== 'string') {
89
- this.legacyNavigateTo(path as string, action);
90
- return;
91
- }
92
-
93
79
  switch (action) {
94
80
  case 'POP':
95
81
  return; // TBD;
@@ -102,15 +88,24 @@ export class ReactRouterUI {
102
88
  }
103
89
  };
104
90
 
105
- /**
106
- * change browser location
107
- */
108
- private legacyNavigateTo = (
109
- /** destination */
110
- path: string,
111
- state?: Record<string, any>
112
- ) => {
113
- this.routerHistory?.push(path, state);
91
+ private AppRoutingContext = ({ children, renderCtx }: { children: ReactNode; renderCtx?: RenderContext }) => {
92
+ return (
93
+ <RouteContext reactRouterUi={this} routing={this.routingMode} location={renderCtx?.initialLocation}>
94
+ {children}
95
+ </RouteContext>
96
+ );
97
+ };
98
+
99
+ public renderPlugin: RenderPlugins<RenderContext> = {
100
+ browserInit: () => {
101
+ const initialLocation = `${window.location.pathname}${window.location.search}${window.location.hash}`;
102
+ return { initialLocation };
103
+ },
104
+ serverInit: ({ browser }) => {
105
+ const initialLocation = browser?.location.url;
106
+ return { initialLocation };
107
+ },
108
+ reactContext: this.AppRoutingContext,
114
109
  };
115
110
 
116
111
  static slots = [Slot.withType<RouteProps>(), Slot.withType<LocationListener>()];