mobx-route 0.0.68 → 0.0.70

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mobx-route",
3
- "version": "0.0.68",
3
+ "version": "0.0.70",
4
4
  "keywords": [
5
5
  "mobx",
6
6
  "react",
@@ -145,6 +145,11 @@
145
145
  "default": "./react/components/route-group-view.js",
146
146
  "types": "./react/components/route-group-view.d.ts"
147
147
  },
148
+ "./react/components/route-view-map": {
149
+ "import": "./react/components/route-view-map.js",
150
+ "default": "./react/components/route-view-map.js",
151
+ "types": "./react/components/route-view-map.d.ts"
152
+ },
148
153
  "./react/components/route-view": {
149
154
  "import": "./react/components/route-view.js",
150
155
  "default": "./react/components/route-view.js",
@@ -1,4 +1,5 @@
1
1
  export * from './link.js';
2
2
  export * from './route-view.js';
3
3
  export * from './route-group-view.js';
4
+ export * from './route-view-map.js';
4
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/react/components/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/react/components/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC"}
@@ -1,3 +1,4 @@
1
1
  export * from './link.js';
2
2
  export * from './route-view.js';
3
3
  export * from './route-group-view.js';
4
+ export * from './route-view-map.js';
@@ -1,3 +1,4 @@
1
+ import { ReactNode } from 'react';
1
2
  import { EmptyObject } from 'yummies/utils/types';
2
3
  import { AnyRouteEntity, AnyRouteGroup, RoutesArrayCollection, RoutesCollection, RoutesObjectCollection } from '../../core/index.js';
3
4
  import { RouteViewComponent, RouteViewConfigProps } from './route-view.js';
@@ -10,8 +11,10 @@ export type RouteGroupViews<TRoutes extends RoutesCollection> = TRoutes extends
10
11
  export interface RouteGroupViewProps<TRouteGroup extends AnyRouteGroup> {
11
12
  group: TRouteGroup;
12
13
  views: Partial<RouteGroupViews<TRouteGroup['routes']>>;
14
+ onFallback?: VoidFunction;
15
+ fallbackView?: ReactNode;
13
16
  }
14
- declare const RouteGroupViewBase: <TRouteGroup extends AnyRouteGroup>({ group, views, }: RouteGroupViewProps<TRouteGroup>) => import("react/jsx-runtime").JSX.Element;
15
- export declare const RouteGroupView: typeof RouteGroupViewBase;
16
- export {};
17
+ export declare const RouteGroupView: (<TRouteGroup extends AnyRouteGroup>({ group, views, fallbackView, onFallback, }: RouteGroupViewProps<TRouteGroup>) => string | number | boolean | Iterable<ReactNode> | import("react/jsx-runtime").JSX.Element | null) & {
18
+ displayName: string;
19
+ };
17
20
  //# sourceMappingURL=route-group-view.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"route-group-view.d.ts","sourceRoot":"","sources":["../../../src/react/components/route-group-view.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElD,OAAO,EACL,cAAc,EACd,aAAa,EACb,qBAAqB,EACrB,gBAAgB,EAChB,sBAAsB,EACvB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAEL,kBAAkB,EAClB,oBAAoB,EACrB,MAAM,iBAAiB,CAAC;AAEzB,MAAM,MAAM,cAAc,CAAC,YAAY,SAAS,cAAc,IAE1D,IAAI,CAAC,oBAAoB,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC,GAEjD,kBAAkB,CAAC,YAAY,CAAC,CAAC;AAErC,MAAM,MAAM,eAAe,CAAC,OAAO,SAAS,gBAAgB,IAC1D,OAAO,SAAS,qBAAqB,GACjC;KACG,CAAC,IAAI,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,SAAS,cAAc,GACnD,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAC1B,KAAK;CACV,GACD,OAAO,SAAS,sBAAsB,GACpC;KACG,CAAC,IAAI,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,SAAS,cAAc,GACnD,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAC1B,KAAK;CACV,GACD,WAAW,CAAC;AAEpB,MAAM,WAAW,mBAAmB,CAAC,WAAW,SAAS,aAAa;IACpE,KAAK,EAAE,WAAW,CAAC;IACnB,KAAK,EAAE,OAAO,CAAC,eAAe,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;CACxD;AAED,QAAA,MAAM,kBAAkB,GAAI,WAAW,SAAS,aAAa,EAAE,mBAG5D,mBAAmB,CAAC,WAAW,CAAC,4CAsBlC,CAAC;AAEF,eAAO,MAAM,cAAc,EAGtB,OAAO,kBAAkB,CAAC"}
1
+ {"version":3,"file":"route-group-view.d.ts","sourceRoot":"","sources":["../../../src/react/components/route-group-view.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAA4B,MAAM,OAAO,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElD,OAAO,EACL,cAAc,EACd,aAAa,EACb,qBAAqB,EACrB,gBAAgB,EAChB,sBAAsB,EACvB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAEL,kBAAkB,EAClB,oBAAoB,EACrB,MAAM,iBAAiB,CAAC;AAEzB,MAAM,MAAM,cAAc,CAAC,YAAY,SAAS,cAAc,IAE1D,IAAI,CAAC,oBAAoB,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC,GAEjD,kBAAkB,CAAC,YAAY,CAAC,CAAC;AAErC,MAAM,MAAM,eAAe,CAAC,OAAO,SAAS,gBAAgB,IAC1D,OAAO,SAAS,qBAAqB,GACjC;KACG,CAAC,IAAI,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,SAAS,cAAc,GACnD,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAC1B,KAAK;CACV,GACD,OAAO,SAAS,sBAAsB,GACpC;KACG,CAAC,IAAI,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,SAAS,cAAc,GACnD,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAC1B,KAAK;CACV,GACD,WAAW,CAAC;AAEpB,MAAM,WAAW,mBAAmB,CAAC,WAAW,SAAS,aAAa;IACpE,KAAK,EAAE,WAAW,CAAC;IACnB,KAAK,EAAE,OAAO,CAAC,eAAe,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IACvD,UAAU,CAAC,EAAE,YAAY,CAAC;IAC1B,YAAY,CAAC,EAAE,SAAS,CAAC;CAC1B;AAmDD,eAAO,MAAM,cAAc,IAjDC,WAAW,SAAS,aAAa,+CAK1D,mBAAmB,CAAC,WAAW,CAAC;;CA4CuB,CAAC"}
@@ -1,20 +1,40 @@
1
- import { jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
2
- import { memo } from 'react';
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { observer } from 'mobx-react-lite';
3
+ import { useLayoutEffect, useMemo } from 'react';
3
4
  import { RouteView, } from './route-view.js';
4
- const RouteGroupViewBase = ({ group, views, }) => {
5
- const viewEntries = Object.entries(views);
6
- return (_jsx(_Fragment, { children: viewEntries.map(([routeName, propsOrView]) => {
7
- // @ts-expect-error Object.entries is not accept types for arrays
8
- const route = group.routes[routeName];
9
- const viewProps = propsOrView &&
10
- (typeof propsOrView === 'function' ||
11
- 'contextTypes' in propsOrView ||
12
- '$$typeof' in propsOrView)
13
- ? {
14
- view: propsOrView,
15
- }
16
- : propsOrView;
17
- return _jsx(RouteView, { route: route, ...viewProps }, routeName);
18
- }) }));
5
+ const RouteGroupViewBase = ({ group, views, fallbackView, onFallback, }) => {
6
+ const viewEntries = useMemo(() => Object.entries(views), []);
7
+ const openedRouteEntry = viewEntries.find(([routeName]) => {
8
+ // @ts-expect-error Object.entries is not accept types for arrays
9
+ const route = group.routes[routeName];
10
+ return route.isOpened;
11
+ });
12
+ const openedRouteName = openedRouteEntry?.[0];
13
+ const openedRoutePropsOrView = openedRouteEntry?.[1];
14
+ const openedRoute = openedRouteName && openedRouteName in group.routes
15
+ ? // @ts-expect-error Object.entries is not accept types for arrays
16
+ group.routes[openedRouteName]
17
+ : undefined;
18
+ useLayoutEffect(() => {
19
+ if (!openedRoute) {
20
+ onFallback?.();
21
+ }
22
+ }, [openedRoute]);
23
+ if (!openedRoute) {
24
+ return fallbackView ?? null;
25
+ }
26
+ const openedRouteViewProps = openedRoutePropsOrView &&
27
+ (typeof openedRoutePropsOrView === 'function' ||
28
+ 'contextTypes' in openedRoutePropsOrView ||
29
+ '$$typeof' in openedRoutePropsOrView)
30
+ ? {
31
+ view: openedRoutePropsOrView,
32
+ fallbackView,
33
+ }
34
+ : {
35
+ ...openedRoutePropsOrView,
36
+ fallbackView: openedRoutePropsOrView?.fallbackView ?? fallbackView,
37
+ };
38
+ return _jsx(RouteView, { route: openedRoute, ...openedRouteViewProps });
19
39
  };
20
- export const RouteGroupView = memo(RouteGroupViewBase, () => true);
40
+ export const RouteGroupView = observer(RouteGroupViewBase);
@@ -0,0 +1,19 @@
1
+ import { ReactNode } from 'react';
2
+ import { AnyRouteEntity } from '../../core/index.js';
3
+ import { RouteViewComponent, RouteViewConfigProps } from './route-view.js';
4
+ export type MappedRouteView<TRouteEntity extends AnyRouteEntity> = Omit<RouteViewConfigProps<TRouteEntity>, 'route'> | RouteViewComponent<TRouteEntity>;
5
+ type RouteViewMapArrayType = [
6
+ AnyRouteEntity,
7
+ MappedRouteView<AnyRouteEntity>
8
+ ][];
9
+ export type RouteViewMapType = RouteViewMapArrayType;
10
+ export interface RouteViewMapProps<TMap extends RouteViewMapType> {
11
+ map: TMap;
12
+ onFallback?: VoidFunction;
13
+ fallbackView?: ReactNode;
14
+ }
15
+ export declare const RouteViewMap: (<TMap extends RouteViewMapType>({ map, onFallback, fallbackView, }: RouteViewMapProps<TMap>) => string | number | boolean | Iterable<ReactNode> | import("react/jsx-runtime").JSX.Element | null) & {
16
+ displayName: string;
17
+ };
18
+ export {};
19
+ //# sourceMappingURL=route-view-map.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route-view-map.d.ts","sourceRoot":"","sources":["../../../src/react/components/route-view-map.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAA4B,MAAM,OAAO,CAAC;AAE5D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,OAAO,EAEL,kBAAkB,EAClB,oBAAoB,EACrB,MAAM,iBAAiB,CAAC;AAEzB,MAAM,MAAM,eAAe,CAAC,YAAY,SAAS,cAAc,IAE3D,IAAI,CAAC,oBAAoB,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC,GAEjD,kBAAkB,CAAC,YAAY,CAAC,CAAC;AAErC,KAAK,qBAAqB,GAAG;IAC3B,cAAc;IACd,eAAe,CAAC,cAAc,CAAC;CAChC,EAAE,CAAC;AAGJ,MAAM,MAAM,gBAAgB,GAAG,qBAAqB,CAAC;AAErD,MAAM,WAAW,iBAAiB,CAAC,IAAI,SAAS,gBAAgB;IAC9D,GAAG,EAAE,IAAI,CAAC;IACV,UAAU,CAAC,EAAE,YAAY,CAAC;IAC1B,YAAY,CAAC,EAAE,SAAS,CAAC;CAC1B;AA2CD,eAAO,MAAM,YAAY,IAzCC,IAAI,SAAS,gBAAgB,sCAIpD,iBAAiB,CAAC,IAAI,CAAC;;CAqC4B,CAAC"}
@@ -0,0 +1,35 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { observer } from 'mobx-react-lite';
3
+ import { useLayoutEffect, useMemo } from 'react';
4
+ import { RouteView, } from './route-view.js';
5
+ const RouteViewMapBase = ({ map, onFallback, fallbackView, }) => {
6
+ const viewEntries = useMemo(() => Object.entries(map), []);
7
+ const openedRouteEntry = viewEntries.find(([, data]) => {
8
+ const route = data[0];
9
+ return route.isOpened;
10
+ });
11
+ const openedRoute = openedRouteEntry?.[1]?.[0];
12
+ const openedRoutePropsOrView = openedRouteEntry?.[1]?.[1];
13
+ useLayoutEffect(() => {
14
+ if (!openedRoute) {
15
+ onFallback?.();
16
+ }
17
+ }, [openedRoute]);
18
+ if (!openedRoute) {
19
+ return fallbackView ?? null;
20
+ }
21
+ const openedRouteViewProps = openedRoutePropsOrView &&
22
+ (typeof openedRoutePropsOrView === 'function' ||
23
+ 'contextTypes' in openedRoutePropsOrView ||
24
+ '$$typeof' in openedRoutePropsOrView)
25
+ ? {
26
+ view: openedRoutePropsOrView,
27
+ fallbackView,
28
+ }
29
+ : {
30
+ ...openedRoutePropsOrView,
31
+ fallbackView: openedRoutePropsOrView?.fallbackView ?? fallbackView,
32
+ };
33
+ return _jsx(RouteView, { route: openedRoute, ...openedRouteViewProps });
34
+ };
35
+ export const RouteViewMap = observer(RouteViewMapBase);
@@ -6,7 +6,7 @@ export interface RouteViewConfigProps<TRouteEntity extends AnyRouteEntity> {
6
6
  view?: RouteViewComponent<TRouteEntity>;
7
7
  lazyView?: () => Promise<ComponentType<RouteViewProps<TRouteEntity>>>;
8
8
  loader?: ComponentType;
9
- notOpenedContent?: ReactNode;
9
+ fallbackView?: ReactNode;
10
10
  children?: ReactNode;
11
11
  }
12
12
  export type RouteViewProps<TRouteEntity extends AnyRouteEntity> = {
@@ -1 +1 @@
1
- {"version":3,"file":"route-view.d.ts","sourceRoot":"","sources":["../../../src/react/components/route-view.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,SAAS,EAAU,MAAM,OAAO,CAAC;AAGzD,OAAO,KAAK,EACV,QAAQ,EACR,cAAc,EACd,eAAe,EAChB,MAAM,qBAAqB,CAAC;AAE7B,MAAM,MAAM,kBAAkB,CAAC,YAAY,SAAS,cAAc,IAChE,aAAa,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,CAAC;AAE9C,MAAM,WAAW,oBAAoB,CAAC,YAAY,SAAS,cAAc;IACvE,KAAK,EAAE,YAAY,CAAC;IACpB,IAAI,CAAC,EAAE,kBAAkB,CAAC,YAAY,CAAC,CAAC;IACxC,QAAQ,CAAC,EAAE,MAAM,OAAO,CAAC,aAAa,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IACtE,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,gBAAgB,CAAC,EAAE,SAAS,CAAC;IAC7B,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,MAAM,MAAM,cAAc,CAAC,YAAY,SAAS,cAAc,IAAI;IAChE,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,MAAM,EAAE,YAAY,SAAS,QAAQ,GACjC,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC,GACjD,YAAY,SAAS,eAAe,GAClC,YAAY,CAAC,QAAQ,CAAC,GACtB,KAAK,CAAC;CACb,CAAC;AAEF,iBAAS,aAAa,CAAC,YAAY,SAAS,cAAc,EACxD,KAAK,EAAE,oBAAoB,CAAC,YAAY,CAAC,gHA0B1C;AAED,eAAO,MAAM,SAAS;;CAA0B,CAAC"}
1
+ {"version":3,"file":"route-view.d.ts","sourceRoot":"","sources":["../../../src/react/components/route-view.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,SAAS,EAAU,MAAM,OAAO,CAAC;AAGzD,OAAO,KAAK,EACV,QAAQ,EACR,cAAc,EACd,eAAe,EAChB,MAAM,qBAAqB,CAAC;AAE7B,MAAM,MAAM,kBAAkB,CAAC,YAAY,SAAS,cAAc,IAChE,aAAa,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,CAAC;AAE9C,MAAM,WAAW,oBAAoB,CAAC,YAAY,SAAS,cAAc;IACvE,KAAK,EAAE,YAAY,CAAC;IACpB,IAAI,CAAC,EAAE,kBAAkB,CAAC,YAAY,CAAC,CAAC;IACxC,QAAQ,CAAC,EAAE,MAAM,OAAO,CAAC,aAAa,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IACtE,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,MAAM,MAAM,cAAc,CAAC,YAAY,SAAS,cAAc,IAAI;IAChE,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,MAAM,EAAE,YAAY,SAAS,QAAQ,GACjC,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC,GACjD,YAAY,SAAS,eAAe,GAClC,YAAY,CAAC,QAAQ,CAAC,GACtB,KAAK,CAAC;CACb,CAAC;AAEF,iBAAS,aAAa,CAAC,YAAY,SAAS,cAAc,EACxD,KAAK,EAAE,oBAAoB,CAAC,YAAY,CAAC,gHA0B1C;AAED,eAAO,MAAM,SAAS;;CAA0B,CAAC"}
@@ -6,7 +6,7 @@ function RouteViewBase(props) {
6
6
  const lazyViewComponentRef = useRef();
7
7
  let Component;
8
8
  if (!props.route.isOpened) {
9
- return props.notOpenedContent ?? null;
9
+ return props.fallbackView ?? null;
10
10
  }
11
11
  if (props.lazyView) {
12
12
  lazyViewComponentRef.current = loadable(props.lazyView, {