@react-native-aria/overlays 0.3.2 → 0.3.3

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.
@@ -24,11 +24,11 @@ let globalOverlayCounter = 0;
24
24
  function PortalProvider(props) {
25
25
  const [items, setItems] = _react.default.useState([]);
26
26
 
27
- const setOverlayItem = item => {
27
+ const setOverlayItem = element => {
28
28
  const overlayId = ++globalOverlayCounter;
29
29
  setItems(prev => prev.concat([{
30
30
  id: overlayId,
31
- node: item
31
+ node: element
32
32
  }]));
33
33
  return overlayId;
34
34
  };
@@ -58,7 +58,8 @@ function PortalProvider(props) {
58
58
  items,
59
59
  setOverlayItem,
60
60
  removeOverlayItem,
61
- updateOverlayItem
61
+ updateOverlayItem,
62
+ isSSR: props === null || props === void 0 ? void 0 : props.isSSR
62
63
  }
63
64
  }, props.children, items.map(item => {
64
65
  return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, {
@@ -67,10 +68,13 @@ function PortalProvider(props) {
67
68
  }));
68
69
  }
69
70
 
70
- function OverlayView(props) {
71
+ function OverlayView({
72
+ style,
73
+ ...props
74
+ }) {
71
75
  return /*#__PURE__*/_react.default.createElement(_reactNative.View, _extends({
72
76
  pointerEvents: "box-none",
73
- style: _reactNative.StyleSheet.absoluteFill,
77
+ style: [_reactNative.StyleSheet.absoluteFill, style],
74
78
  collapsable: false
75
79
  }, props));
76
80
  }
@@ -83,16 +87,16 @@ function OverlayContainer(props) {
83
87
 
84
88
  const overlayId = _react.default.useRef(undefined);
85
89
 
86
- let contents = /*#__PURE__*/_react.default.createElement(OverlayView, props);
90
+ const element = /*#__PURE__*/_react.default.createElement(OverlayView, props);
87
91
 
88
92
  (0, _react.useEffect)(() => {
89
93
  // Mount
90
94
  if (overlayId.current === undefined) {
91
- overlayId.current = context === null || context === void 0 ? void 0 : context.setOverlayItem(contents);
95
+ overlayId.current = context === null || context === void 0 ? void 0 : context.setOverlayItem(element);
92
96
  } // Update
93
97
  else {
94
98
  if (overlayId.current) {
95
- context === null || context === void 0 ? void 0 : context.updateOverlayItem(overlayId.current, contents);
99
+ context === null || context === void 0 ? void 0 : context.updateOverlayItem(overlayId.current, element);
96
100
  }
97
101
  }
98
102
  }, // To re-render the child
@@ -104,7 +108,16 @@ function OverlayContainer(props) {
104
108
  context === null || context === void 0 ? void 0 : context.removeOverlayItem(overlayId.current);
105
109
  }
106
110
  };
107
- }, []);
111
+ }, []); // Rendering elements for SSR
112
+
113
+ if (context !== null && context !== void 0 && context.isSSR && !overlayId.current) {
114
+ return /*#__PURE__*/_react.default.createElement(_reactNative.View, {
115
+ style: {
116
+ display: 'none'
117
+ }
118
+ }, element);
119
+ }
120
+
108
121
  return null;
109
122
  }
110
123
 
@@ -1 +1 @@
1
- {"version":3,"sources":["Portal.tsx"],"names":["PortalContext","React","createContext","globalOverlayCounter","PortalProvider","props","items","setItems","useState","setOverlayItem","item","overlayId","prev","concat","id","node","updateOverlayItem","map","removeOverlayItem","newItems","filter","children","OverlayView","StyleSheet","absoluteFill","OverlayProvider","OverlayContainer","context","usePortalProvider","useRef","undefined","contents","current","useContext"],"mappings":"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","sourcesContent":["import React, { useEffect } from 'react';\nimport type { ReactNode } from 'react';\nimport { StyleSheet, View, ViewProps } from 'react-native';\n\ntype OverlayItem = {\n id: number;\n node: ReactNode;\n};\n\ninterface PortalContext {\n items: Array<OverlayItem>;\n setOverlayItem: (node: ReactNode) => number;\n removeOverlayItem: (id: number) => void;\n updateOverlayItem: (id: number, node: ReactNode) => void;\n}\n\ninterface ModalProviderProps extends ViewProps {\n children: ReactNode;\n provider?: boolean;\n}\n\nconst PortalContext = React.createContext<PortalContext | null>(null);\n\nlet globalOverlayCounter = 0;\n\nexport function PortalProvider(props: { children: ReactNode }) {\n const [items, setItems] = React.useState<Array<OverlayItem>>([]);\n\n const setOverlayItem = (item: ReactNode) => {\n const overlayId = ++globalOverlayCounter;\n setItems((prev) => prev.concat([{ id: overlayId, node: item }]));\n return overlayId;\n };\n\n const updateOverlayItem = (id: number, node: ReactNode) => {\n setItems((prev) =>\n prev.map((item) => {\n if (item.id === id) {\n return { id, node };\n }\n return item;\n })\n );\n };\n\n const removeOverlayItem = (id: number) => {\n setItems((prev) => {\n const newItems = prev.filter((item) => item.id !== id);\n return newItems;\n });\n };\n\n return (\n <PortalContext.Provider\n value={{ items, setOverlayItem, removeOverlayItem, updateOverlayItem }}\n >\n {props.children}\n\n {/* Render Overlays */}\n {items.map((item) => {\n return <React.Fragment key={item.id}>{item.node}</React.Fragment>;\n })}\n </PortalContext.Provider>\n );\n}\n\nfunction OverlayView(props: ModalProviderProps) {\n return (\n <View\n pointerEvents=\"box-none\"\n style={StyleSheet.absoluteFill}\n collapsable={false}\n {...props}\n />\n );\n}\n\nexport const OverlayProvider = PortalProvider;\n\nexport function OverlayContainer(props: ModalProviderProps) {\n const context = usePortalProvider();\n const overlayId = React.useRef<number | undefined>(undefined);\n let contents = <OverlayView {...props} />;\n\n useEffect(\n () => {\n // Mount\n if (overlayId.current === undefined) {\n overlayId.current = context?.setOverlayItem(contents);\n }\n // Update\n else {\n if (overlayId.current) {\n context?.updateOverlayItem(overlayId.current, contents);\n }\n }\n },\n // To re-render the child\n [props]\n );\n\n // Unmount\n useEffect(() => {\n return () => {\n if (overlayId.current) {\n context?.removeOverlayItem(overlayId.current);\n }\n };\n }, []);\n\n return null;\n}\n\nfunction usePortalProvider() {\n const context = React.useContext(PortalContext);\n return context;\n}\n"]}
1
+ {"version":3,"sources":["Portal.tsx"],"names":["PortalContext","React","createContext","globalOverlayCounter","PortalProvider","props","items","setItems","useState","setOverlayItem","element","overlayId","prev","concat","id","node","updateOverlayItem","map","item","removeOverlayItem","newItems","filter","isSSR","children","OverlayView","style","StyleSheet","absoluteFill","OverlayProvider","OverlayContainer","context","usePortalProvider","useRef","undefined","current","display","useContext"],"mappings":"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","sourcesContent":["import React, { useEffect } from 'react';\nimport type { ReactNode } from 'react';\nimport { StyleSheet, View, ViewProps } from 'react-native';\n\ntype OverlayItem = {\n id: number;\n node: ReactNode;\n};\n\ninterface PortalContext {\n items: Array<OverlayItem>;\n setOverlayItem: (node: ReactNode) => number;\n removeOverlayItem: (id: number) => void;\n updateOverlayItem: (id: number, node: ReactNode) => void;\n isSSR?: boolean;\n}\n\ninterface ModalProviderProps extends ViewProps {\n children: ReactNode;\n provider?: boolean;\n}\n\nconst PortalContext = React.createContext<PortalContext | null>(null);\n\nlet globalOverlayCounter = 0;\n\nexport function PortalProvider(props: {\n children: ReactNode;\n isSSR?: boolean;\n}) {\n const [items, setItems] = React.useState<Array<OverlayItem>>([]);\n\n const setOverlayItem = (element: ReactNode) => {\n const overlayId = ++globalOverlayCounter;\n setItems((prev) => prev.concat([{ id: overlayId, node: element }]));\n return overlayId;\n };\n\n const updateOverlayItem = (id: number, node: ReactNode) => {\n setItems((prev) =>\n prev.map((item) => {\n if (item.id === id) {\n return { id, node };\n }\n return item;\n })\n );\n };\n\n const removeOverlayItem = (id: number) => {\n setItems((prev) => {\n const newItems = prev.filter((item) => item.id !== id);\n return newItems;\n });\n };\n\n return (\n <PortalContext.Provider\n value={{\n items,\n setOverlayItem,\n removeOverlayItem,\n updateOverlayItem,\n isSSR: props?.isSSR,\n }}\n >\n {props.children}\n\n {/* Render Overlays */}\n {items.map((item) => {\n return <React.Fragment key={item.id}>{item.node}</React.Fragment>;\n })}\n </PortalContext.Provider>\n );\n}\n\nfunction OverlayView({ style, ...props }: ModalProviderProps) {\n return (\n <View\n pointerEvents=\"box-none\"\n style={[StyleSheet.absoluteFill, style]}\n collapsable={false}\n {...props}\n />\n );\n}\n\nexport const OverlayProvider = PortalProvider;\n\nexport function OverlayContainer(props: ModalProviderProps) {\n const context = usePortalProvider();\n const overlayId = React.useRef<number | undefined>(undefined);\n const element = <OverlayView {...props} />;\n\n useEffect(\n () => {\n // Mount\n if (overlayId.current === undefined) {\n overlayId.current = context?.setOverlayItem(element);\n }\n // Update\n else {\n if (overlayId.current) {\n context?.updateOverlayItem(overlayId.current, element);\n }\n }\n },\n // To re-render the child\n [props]\n );\n\n // Unmount\n useEffect(() => {\n return () => {\n if (overlayId.current) {\n context?.removeOverlayItem(overlayId.current);\n }\n };\n }, []);\n\n // Rendering elements for SSR\n if (context?.isSSR && !overlayId.current) {\n return <View style={{ display: 'none' }}>{element}</View>;\n }\n return null;\n}\n\nfunction usePortalProvider() {\n const context = React.useContext(PortalContext);\n return context;\n}\n"]}
@@ -7,11 +7,11 @@ let globalOverlayCounter = 0;
7
7
  export function PortalProvider(props) {
8
8
  const [items, setItems] = React.useState([]);
9
9
 
10
- const setOverlayItem = item => {
10
+ const setOverlayItem = element => {
11
11
  const overlayId = ++globalOverlayCounter;
12
12
  setItems(prev => prev.concat([{
13
13
  id: overlayId,
14
- node: item
14
+ node: element
15
15
  }]));
16
16
  return overlayId;
17
17
  };
@@ -41,7 +41,8 @@ export function PortalProvider(props) {
41
41
  items,
42
42
  setOverlayItem,
43
43
  removeOverlayItem,
44
- updateOverlayItem
44
+ updateOverlayItem,
45
+ isSSR: props === null || props === void 0 ? void 0 : props.isSSR
45
46
  }
46
47
  }, props.children, items.map(item => {
47
48
  return /*#__PURE__*/React.createElement(React.Fragment, {
@@ -50,10 +51,13 @@ export function PortalProvider(props) {
50
51
  }));
51
52
  }
52
53
 
53
- function OverlayView(props) {
54
+ function OverlayView({
55
+ style,
56
+ ...props
57
+ }) {
54
58
  return /*#__PURE__*/React.createElement(View, _extends({
55
59
  pointerEvents: "box-none",
56
- style: StyleSheet.absoluteFill,
60
+ style: [StyleSheet.absoluteFill, style],
57
61
  collapsable: false
58
62
  }, props));
59
63
  }
@@ -62,15 +66,15 @@ export const OverlayProvider = PortalProvider;
62
66
  export function OverlayContainer(props) {
63
67
  const context = usePortalProvider();
64
68
  const overlayId = React.useRef(undefined);
65
- let contents = /*#__PURE__*/React.createElement(OverlayView, props);
69
+ const element = /*#__PURE__*/React.createElement(OverlayView, props);
66
70
  useEffect(() => {
67
71
  // Mount
68
72
  if (overlayId.current === undefined) {
69
- overlayId.current = context === null || context === void 0 ? void 0 : context.setOverlayItem(contents);
73
+ overlayId.current = context === null || context === void 0 ? void 0 : context.setOverlayItem(element);
70
74
  } // Update
71
75
  else {
72
76
  if (overlayId.current) {
73
- context === null || context === void 0 ? void 0 : context.updateOverlayItem(overlayId.current, contents);
77
+ context === null || context === void 0 ? void 0 : context.updateOverlayItem(overlayId.current, element);
74
78
  }
75
79
  }
76
80
  }, // To re-render the child
@@ -82,7 +86,16 @@ export function OverlayContainer(props) {
82
86
  context === null || context === void 0 ? void 0 : context.removeOverlayItem(overlayId.current);
83
87
  }
84
88
  };
85
- }, []);
89
+ }, []); // Rendering elements for SSR
90
+
91
+ if (context !== null && context !== void 0 && context.isSSR && !overlayId.current) {
92
+ return /*#__PURE__*/React.createElement(View, {
93
+ style: {
94
+ display: 'none'
95
+ }
96
+ }, element);
97
+ }
98
+
86
99
  return null;
87
100
  }
88
101
 
@@ -1 +1 @@
1
- {"version":3,"sources":["Portal.tsx"],"names":["React","useEffect","StyleSheet","View","PortalContext","createContext","globalOverlayCounter","PortalProvider","props","items","setItems","useState","setOverlayItem","item","overlayId","prev","concat","id","node","updateOverlayItem","map","removeOverlayItem","newItems","filter","children","OverlayView","absoluteFill","OverlayProvider","OverlayContainer","context","usePortalProvider","useRef","undefined","contents","current","useContext"],"mappings":"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","sourcesContent":["import React, { useEffect } from 'react';\nimport type { ReactNode } from 'react';\nimport { StyleSheet, View, ViewProps } from 'react-native';\n\ntype OverlayItem = {\n id: number;\n node: ReactNode;\n};\n\ninterface PortalContext {\n items: Array<OverlayItem>;\n setOverlayItem: (node: ReactNode) => number;\n removeOverlayItem: (id: number) => void;\n updateOverlayItem: (id: number, node: ReactNode) => void;\n}\n\ninterface ModalProviderProps extends ViewProps {\n children: ReactNode;\n provider?: boolean;\n}\n\nconst PortalContext = React.createContext<PortalContext | null>(null);\n\nlet globalOverlayCounter = 0;\n\nexport function PortalProvider(props: { children: ReactNode }) {\n const [items, setItems] = React.useState<Array<OverlayItem>>([]);\n\n const setOverlayItem = (item: ReactNode) => {\n const overlayId = ++globalOverlayCounter;\n setItems((prev) => prev.concat([{ id: overlayId, node: item }]));\n return overlayId;\n };\n\n const updateOverlayItem = (id: number, node: ReactNode) => {\n setItems((prev) =>\n prev.map((item) => {\n if (item.id === id) {\n return { id, node };\n }\n return item;\n })\n );\n };\n\n const removeOverlayItem = (id: number) => {\n setItems((prev) => {\n const newItems = prev.filter((item) => item.id !== id);\n return newItems;\n });\n };\n\n return (\n <PortalContext.Provider\n value={{ items, setOverlayItem, removeOverlayItem, updateOverlayItem }}\n >\n {props.children}\n\n {/* Render Overlays */}\n {items.map((item) => {\n return <React.Fragment key={item.id}>{item.node}</React.Fragment>;\n })}\n </PortalContext.Provider>\n );\n}\n\nfunction OverlayView(props: ModalProviderProps) {\n return (\n <View\n pointerEvents=\"box-none\"\n style={StyleSheet.absoluteFill}\n collapsable={false}\n {...props}\n />\n );\n}\n\nexport const OverlayProvider = PortalProvider;\n\nexport function OverlayContainer(props: ModalProviderProps) {\n const context = usePortalProvider();\n const overlayId = React.useRef<number | undefined>(undefined);\n let contents = <OverlayView {...props} />;\n\n useEffect(\n () => {\n // Mount\n if (overlayId.current === undefined) {\n overlayId.current = context?.setOverlayItem(contents);\n }\n // Update\n else {\n if (overlayId.current) {\n context?.updateOverlayItem(overlayId.current, contents);\n }\n }\n },\n // To re-render the child\n [props]\n );\n\n // Unmount\n useEffect(() => {\n return () => {\n if (overlayId.current) {\n context?.removeOverlayItem(overlayId.current);\n }\n };\n }, []);\n\n return null;\n}\n\nfunction usePortalProvider() {\n const context = React.useContext(PortalContext);\n return context;\n}\n"]}
1
+ {"version":3,"sources":["Portal.tsx"],"names":["React","useEffect","StyleSheet","View","PortalContext","createContext","globalOverlayCounter","PortalProvider","props","items","setItems","useState","setOverlayItem","element","overlayId","prev","concat","id","node","updateOverlayItem","map","item","removeOverlayItem","newItems","filter","isSSR","children","OverlayView","style","absoluteFill","OverlayProvider","OverlayContainer","context","usePortalProvider","useRef","undefined","current","display","useContext"],"mappings":"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","sourcesContent":["import React, { useEffect } from 'react';\nimport type { ReactNode } from 'react';\nimport { StyleSheet, View, ViewProps } from 'react-native';\n\ntype OverlayItem = {\n id: number;\n node: ReactNode;\n};\n\ninterface PortalContext {\n items: Array<OverlayItem>;\n setOverlayItem: (node: ReactNode) => number;\n removeOverlayItem: (id: number) => void;\n updateOverlayItem: (id: number, node: ReactNode) => void;\n isSSR?: boolean;\n}\n\ninterface ModalProviderProps extends ViewProps {\n children: ReactNode;\n provider?: boolean;\n}\n\nconst PortalContext = React.createContext<PortalContext | null>(null);\n\nlet globalOverlayCounter = 0;\n\nexport function PortalProvider(props: {\n children: ReactNode;\n isSSR?: boolean;\n}) {\n const [items, setItems] = React.useState<Array<OverlayItem>>([]);\n\n const setOverlayItem = (element: ReactNode) => {\n const overlayId = ++globalOverlayCounter;\n setItems((prev) => prev.concat([{ id: overlayId, node: element }]));\n return overlayId;\n };\n\n const updateOverlayItem = (id: number, node: ReactNode) => {\n setItems((prev) =>\n prev.map((item) => {\n if (item.id === id) {\n return { id, node };\n }\n return item;\n })\n );\n };\n\n const removeOverlayItem = (id: number) => {\n setItems((prev) => {\n const newItems = prev.filter((item) => item.id !== id);\n return newItems;\n });\n };\n\n return (\n <PortalContext.Provider\n value={{\n items,\n setOverlayItem,\n removeOverlayItem,\n updateOverlayItem,\n isSSR: props?.isSSR,\n }}\n >\n {props.children}\n\n {/* Render Overlays */}\n {items.map((item) => {\n return <React.Fragment key={item.id}>{item.node}</React.Fragment>;\n })}\n </PortalContext.Provider>\n );\n}\n\nfunction OverlayView({ style, ...props }: ModalProviderProps) {\n return (\n <View\n pointerEvents=\"box-none\"\n style={[StyleSheet.absoluteFill, style]}\n collapsable={false}\n {...props}\n />\n );\n}\n\nexport const OverlayProvider = PortalProvider;\n\nexport function OverlayContainer(props: ModalProviderProps) {\n const context = usePortalProvider();\n const overlayId = React.useRef<number | undefined>(undefined);\n const element = <OverlayView {...props} />;\n\n useEffect(\n () => {\n // Mount\n if (overlayId.current === undefined) {\n overlayId.current = context?.setOverlayItem(element);\n }\n // Update\n else {\n if (overlayId.current) {\n context?.updateOverlayItem(overlayId.current, element);\n }\n }\n },\n // To re-render the child\n [props]\n );\n\n // Unmount\n useEffect(() => {\n return () => {\n if (overlayId.current) {\n context?.removeOverlayItem(overlayId.current);\n }\n };\n }, []);\n\n // Rendering elements for SSR\n if (context?.isSSR && !overlayId.current) {\n return <View style={{ display: 'none' }}>{element}</View>;\n }\n return null;\n}\n\nfunction usePortalProvider() {\n const context = React.useContext(PortalContext);\n return context;\n}\n"]}
@@ -6,7 +6,8 @@ interface ModalProviderProps extends ViewProps {
6
6
  }
7
7
  export declare function PortalProvider(props: {
8
8
  children: ReactNode;
9
+ isSSR?: boolean;
9
10
  }): JSX.Element;
10
11
  export declare const OverlayProvider: typeof PortalProvider;
11
- export declare function OverlayContainer(props: ModalProviderProps): any;
12
+ export declare function OverlayContainer(props: ModalProviderProps): JSX.Element;
12
13
  export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@react-native-aria/overlays",
3
- "version": "0.3.2",
3
+ "version": "0.3.3",
4
4
  "description": "Overlay utilities. Part of react-native-aria",
5
5
  "main": "lib/commonjs/index",
6
6
  "module": "lib/module/index",
@@ -34,7 +34,7 @@
34
34
  "dependencies": {
35
35
  "@react-aria/interactions": "^3.3.2",
36
36
  "@react-aria/overlays": "^3.7.0",
37
- "@react-native-aria/utils": "^0.2.6",
37
+ "@react-native-aria/utils": "^0.2.8",
38
38
  "@react-stately/overlays": "^3.1.1",
39
39
  "@react-types/overlays": "^3.4.0",
40
40
  "dom-helpers": "^5.0.0"
package/src/Portal.tsx CHANGED
@@ -12,6 +12,7 @@ interface PortalContext {
12
12
  setOverlayItem: (node: ReactNode) => number;
13
13
  removeOverlayItem: (id: number) => void;
14
14
  updateOverlayItem: (id: number, node: ReactNode) => void;
15
+ isSSR?: boolean;
15
16
  }
16
17
 
17
18
  interface ModalProviderProps extends ViewProps {
@@ -23,12 +24,15 @@ const PortalContext = React.createContext<PortalContext | null>(null);
23
24
 
24
25
  let globalOverlayCounter = 0;
25
26
 
26
- export function PortalProvider(props: { children: ReactNode }) {
27
+ export function PortalProvider(props: {
28
+ children: ReactNode;
29
+ isSSR?: boolean;
30
+ }) {
27
31
  const [items, setItems] = React.useState<Array<OverlayItem>>([]);
28
32
 
29
- const setOverlayItem = (item: ReactNode) => {
33
+ const setOverlayItem = (element: ReactNode) => {
30
34
  const overlayId = ++globalOverlayCounter;
31
- setItems((prev) => prev.concat([{ id: overlayId, node: item }]));
35
+ setItems((prev) => prev.concat([{ id: overlayId, node: element }]));
32
36
  return overlayId;
33
37
  };
34
38
 
@@ -52,7 +56,13 @@ export function PortalProvider(props: { children: ReactNode }) {
52
56
 
53
57
  return (
54
58
  <PortalContext.Provider
55
- value={{ items, setOverlayItem, removeOverlayItem, updateOverlayItem }}
59
+ value={{
60
+ items,
61
+ setOverlayItem,
62
+ removeOverlayItem,
63
+ updateOverlayItem,
64
+ isSSR: props?.isSSR,
65
+ }}
56
66
  >
57
67
  {props.children}
58
68
 
@@ -64,11 +74,11 @@ export function PortalProvider(props: { children: ReactNode }) {
64
74
  );
65
75
  }
66
76
 
67
- function OverlayView(props: ModalProviderProps) {
77
+ function OverlayView({ style, ...props }: ModalProviderProps) {
68
78
  return (
69
79
  <View
70
80
  pointerEvents="box-none"
71
- style={StyleSheet.absoluteFill}
81
+ style={[StyleSheet.absoluteFill, style]}
72
82
  collapsable={false}
73
83
  {...props}
74
84
  />
@@ -80,18 +90,18 @@ export const OverlayProvider = PortalProvider;
80
90
  export function OverlayContainer(props: ModalProviderProps) {
81
91
  const context = usePortalProvider();
82
92
  const overlayId = React.useRef<number | undefined>(undefined);
83
- let contents = <OverlayView {...props} />;
93
+ const element = <OverlayView {...props} />;
84
94
 
85
95
  useEffect(
86
96
  () => {
87
97
  // Mount
88
98
  if (overlayId.current === undefined) {
89
- overlayId.current = context?.setOverlayItem(contents);
99
+ overlayId.current = context?.setOverlayItem(element);
90
100
  }
91
101
  // Update
92
102
  else {
93
103
  if (overlayId.current) {
94
- context?.updateOverlayItem(overlayId.current, contents);
104
+ context?.updateOverlayItem(overlayId.current, element);
95
105
  }
96
106
  }
97
107
  },
@@ -108,6 +118,10 @@ export function OverlayContainer(props: ModalProviderProps) {
108
118
  };
109
119
  }, []);
110
120
 
121
+ // Rendering elements for SSR
122
+ if (context?.isSSR && !overlayId.current) {
123
+ return <View style={{ display: 'none' }}>{element}</View>;
124
+ }
111
125
  return null;
112
126
  }
113
127
 
package/.DS_Store DELETED
Binary file