bootstrap-rn 0.3.1 → 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.
- package/lib/commonjs/Provider.js +3 -0
- package/lib/commonjs/Provider.js.map +1 -1
- package/lib/commonjs/components/Caret.js +1 -1
- package/lib/commonjs/components/badge/Badge.js +1 -1
- package/lib/commonjs/components/buttons/Button.js +3 -3
- package/lib/commonjs/components/close/CloseButton.js +2 -2
- package/lib/commonjs/components/dropdown/DropdownItem.js +1 -1
- package/lib/commonjs/components/dropdown/useToggleDropdown.js +1 -0
- package/lib/commonjs/components/dropdown/useToggleDropdown.js.map +1 -1
- package/lib/commonjs/components/forms/FormCheckInput.js +1 -1
- package/lib/commonjs/components/list-group/ListGroupItem.js +1 -1
- package/lib/commonjs/components/modal/Modal.js +3 -8
- package/lib/commonjs/components/modal/Modal.js.map +1 -1
- package/lib/commonjs/components/modal/useModal.js +13 -1
- package/lib/commonjs/components/modal/useModal.js.map +1 -1
- package/lib/commonjs/components/navbar/NavbarToggler.js +1 -1
- package/lib/commonjs/components/offcanvas/Offcanvas.js +1 -6
- package/lib/commonjs/components/offcanvas/Offcanvas.js.map +1 -1
- package/lib/commonjs/components/offcanvas/useOffcanvas.js +13 -1
- package/lib/commonjs/components/offcanvas/useOffcanvas.js.map +1 -1
- package/lib/commonjs/components/toasts/Toast.js +1 -1
- package/lib/commonjs/components/toasts/ToastContainer.js +1 -1
- package/lib/commonjs/hooks/useScrollbarEffects.js +48 -41
- package/lib/commonjs/hooks/useScrollbarEffects.js.map +1 -1
- package/lib/commonjs/theme/utilities.js +8 -8
- package/lib/commonjs/theme/utilities.js.map +1 -1
- package/lib/module/Provider.js +3 -0
- package/lib/module/Provider.js.map +1 -1
- package/lib/module/components/Caret.js +1 -1
- package/lib/module/components/badge/Badge.js +1 -1
- package/lib/module/components/buttons/Button.js +3 -3
- package/lib/module/components/close/CloseButton.js +2 -2
- package/lib/module/components/dropdown/DropdownItem.js +1 -1
- package/lib/module/components/dropdown/useToggleDropdown.js +1 -0
- package/lib/module/components/dropdown/useToggleDropdown.js.map +1 -1
- package/lib/module/components/forms/FormCheckInput.js +1 -1
- package/lib/module/components/list-group/ListGroupItem.js +1 -1
- package/lib/module/components/modal/Modal.js +3 -8
- package/lib/module/components/modal/Modal.js.map +1 -1
- package/lib/module/components/modal/useModal.js +13 -2
- package/lib/module/components/modal/useModal.js.map +1 -1
- package/lib/module/components/navbar/NavbarToggler.js +1 -1
- package/lib/module/components/offcanvas/Offcanvas.js +1 -6
- package/lib/module/components/offcanvas/Offcanvas.js.map +1 -1
- package/lib/module/components/offcanvas/useOffcanvas.js +13 -2
- package/lib/module/components/offcanvas/useOffcanvas.js.map +1 -1
- package/lib/module/components/toasts/Toast.js +1 -1
- package/lib/module/components/toasts/ToastContainer.js +1 -1
- package/lib/module/hooks/useScrollbarEffects.js +49 -41
- package/lib/module/hooks/useScrollbarEffects.js.map +1 -1
- package/lib/module/theme/utilities.js +8 -8
- package/lib/module/theme/utilities.js.map +1 -1
- package/package.json +69 -69
- package/src/Provider.js +63 -59
- package/src/components/Caret.js +127 -127
- package/src/components/badge/Badge.js +52 -52
- package/src/components/buttons/Button.js +381 -381
- package/src/components/close/CloseButton.js +146 -146
- package/src/components/dropdown/DropdownItem.js +151 -151
- package/src/components/dropdown/useToggleDropdown.js +1 -0
- package/src/components/forms/FormCheckInput.js +247 -247
- package/src/components/list-group/ListGroupItem.js +1 -1
- package/src/components/modal/Modal.js +235 -241
- package/src/components/modal/useModal.js +25 -10
- package/src/components/navbar/NavbarToggler.js +132 -132
- package/src/components/offcanvas/Offcanvas.js +252 -258
- package/src/components/offcanvas/useOffcanvas.js +20 -5
- package/src/components/toasts/Toast.js +1 -1
- package/src/components/toasts/ToastContainer.js +43 -43
- package/src/hooks/useScrollbarEffects.js +61 -41
- package/src/theme/utilities.js +4 -4
|
@@ -1,241 +1,235 @@
|
|
|
1
|
-
import React, { useRef } from 'react';
|
|
2
|
-
import { Modal as BaseModal, SafeAreaView } from 'react-native';
|
|
3
|
-
import PropTypes from 'prop-types';
|
|
4
|
-
import { OverlayProvider } from '@react-native-aria/overlays';
|
|
5
|
-
import StyleSheet from '../../style/StyleSheet';
|
|
6
|
-
import { getStyles } from '../../utils';
|
|
7
|
-
import css from '../../style/css';
|
|
8
|
-
import ScrollView from '../ScrollView';
|
|
9
|
-
import View from '../View';
|
|
10
|
-
import BackdropHandler from '../helpers/BackdropHandler';
|
|
11
|
-
import
|
|
12
|
-
import
|
|
13
|
-
import
|
|
14
|
-
import
|
|
15
|
-
import
|
|
16
|
-
import
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
// overflow-
|
|
55
|
-
//
|
|
56
|
-
//
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
//
|
|
62
|
-
//
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
width:
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
//
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
background-
|
|
99
|
-
|
|
100
|
-
border: $modal-content-border-
|
|
101
|
-
|
|
102
|
-
//
|
|
103
|
-
//
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
const
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
Modal.
|
|
233
|
-
Modal.
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
Modal.Header = ModalHeader;
|
|
237
|
-
Modal.Title = ModalTitle;
|
|
238
|
-
Modal.Body = ModalBody;
|
|
239
|
-
Modal.Footer = ModalFooter;
|
|
240
|
-
|
|
241
|
-
export default Modal;
|
|
1
|
+
import React, { useRef } from 'react';
|
|
2
|
+
import { Modal as BaseModal, SafeAreaView } from 'react-native';
|
|
3
|
+
import PropTypes from 'prop-types';
|
|
4
|
+
import { OverlayProvider } from '@react-native-aria/overlays';
|
|
5
|
+
import StyleSheet from '../../style/StyleSheet';
|
|
6
|
+
import { getStyles } from '../../utils';
|
|
7
|
+
import css from '../../style/css';
|
|
8
|
+
import ScrollView from '../ScrollView';
|
|
9
|
+
import View from '../View';
|
|
10
|
+
import BackdropHandler from '../helpers/BackdropHandler';
|
|
11
|
+
import useModal from './useModal';
|
|
12
|
+
import ModalContext from './ModalContext';
|
|
13
|
+
import ModalHeader from './ModalHeader';
|
|
14
|
+
import ModalTitle from './ModalTitle';
|
|
15
|
+
import ModalBody from './ModalBody';
|
|
16
|
+
import ModalFooter from './ModalFooter';
|
|
17
|
+
|
|
18
|
+
const MODAL_SIZES = ['sm', 'lg', 'xl'];
|
|
19
|
+
|
|
20
|
+
const propTypes = {
|
|
21
|
+
children: PropTypes.node.isRequired,
|
|
22
|
+
visible: PropTypes.bool.isRequired,
|
|
23
|
+
size: PropTypes.oneOf(MODAL_SIZES),
|
|
24
|
+
backdrop: PropTypes.oneOfType([PropTypes.bool, PropTypes.oneOf(['static'])]),
|
|
25
|
+
scrollable: PropTypes.bool,
|
|
26
|
+
centered: PropTypes.bool,
|
|
27
|
+
onToggle: PropTypes.func.isRequired,
|
|
28
|
+
// eslint-disable-next-line react/forbid-prop-types
|
|
29
|
+
style: PropTypes.any,
|
|
30
|
+
// eslint-disable-next-line react/forbid-prop-types
|
|
31
|
+
contentContainerStyle: PropTypes.any,
|
|
32
|
+
// eslint-disable-next-line react/forbid-prop-types
|
|
33
|
+
dialogStyle: PropTypes.any,
|
|
34
|
+
// eslint-disable-next-line react/forbid-prop-types
|
|
35
|
+
contentStyle: PropTypes.any,
|
|
36
|
+
// eslint-disable-next-line react/forbid-prop-types
|
|
37
|
+
textStyle: PropTypes.any,
|
|
38
|
+
// eslint-disable-next-line react/forbid-prop-types
|
|
39
|
+
dialogTextStyle: PropTypes.any,
|
|
40
|
+
// eslint-disable-next-line react/forbid-prop-types
|
|
41
|
+
contentTextStyle: PropTypes.any,
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
const styles = StyleSheet.create({
|
|
45
|
+
'.modal': css`
|
|
46
|
+
position: absolute; // fixed;
|
|
47
|
+
top: 0;
|
|
48
|
+
left: 0;
|
|
49
|
+
z-index: $zindex-modal;
|
|
50
|
+
// display: none;
|
|
51
|
+
width: 100%;
|
|
52
|
+
height: 100%;
|
|
53
|
+
// overflow-x: hidden;
|
|
54
|
+
// overflow-y: auto;
|
|
55
|
+
// Prevent Chrome on Windows from adding a focus outline. For details, see
|
|
56
|
+
// https://github.com/twbs/bootstrap/pull/10951.
|
|
57
|
+
@include platform(web) {
|
|
58
|
+
outline-width: 0; // outline: 0;
|
|
59
|
+
}
|
|
60
|
+
// We deliberately don't use "-webkit-overflow-scrolling: touch;" due to a
|
|
61
|
+
// gnarly iOS Safari bug: https://bugs.webkit.org/show_bug.cgi?id=158342
|
|
62
|
+
// See also https://github.com/twbs/bootstrap/issues/17695
|
|
63
|
+
`,
|
|
64
|
+
'.modal-dialog': css`
|
|
65
|
+
position: relative;
|
|
66
|
+
width: auto;
|
|
67
|
+
margin: $modal-dialog-margin;
|
|
68
|
+
// allow clicks to pass through for custom click handling to close modal
|
|
69
|
+
pointer-events: auto; // pointer-events: none;
|
|
70
|
+
|
|
71
|
+
@include media-breakpoint-up(sm) {
|
|
72
|
+
width: 100%; // added for bootstrap-rn
|
|
73
|
+
max-width: $modal-md;
|
|
74
|
+
margin: $modal-dialog-margin-y-sm-up auto;
|
|
75
|
+
}
|
|
76
|
+
`,
|
|
77
|
+
'.modal-dialog-scrollable': css`
|
|
78
|
+
flex-shrink: 1; // added for bootstrap-rn
|
|
79
|
+
// height: calc(100% - var(--#{$prefix}modal-margin) * 2);
|
|
80
|
+
`,
|
|
81
|
+
'.modal-dialog-scrollable .modal-content': css`
|
|
82
|
+
max-height: 100%;
|
|
83
|
+
overflow: hidden;
|
|
84
|
+
`,
|
|
85
|
+
'.modal-dialog-centered': css`
|
|
86
|
+
display: flex;
|
|
87
|
+
// align-items: center;
|
|
88
|
+
// min-height: calc(100% - var(--#{$prefix}modal-margin) * 2);
|
|
89
|
+
`,
|
|
90
|
+
'.modal-content': css`
|
|
91
|
+
position: relative;
|
|
92
|
+
display: flex;
|
|
93
|
+
flex-direction: column;
|
|
94
|
+
width: 100%; // Ensure ".modal-content" extends the full width of the parent ".modal-dialog"
|
|
95
|
+
// counteract the pointer-events: none; in the .modal-dialog
|
|
96
|
+
pointer-events: auto;
|
|
97
|
+
background-color: $modal-content-bg;
|
|
98
|
+
// background-clip: padding-box;
|
|
99
|
+
border: $modal-content-border-width solid $modal-content-border-color;
|
|
100
|
+
border-radius: $modal-content-border-radius;
|
|
101
|
+
// @include box-shadow($modal-content-box-shadow-xs);
|
|
102
|
+
// Remove focus outline from opened modal
|
|
103
|
+
// outline: 0;
|
|
104
|
+
|
|
105
|
+
@include media-breakpoint-up(sm) {
|
|
106
|
+
// @include box-shadow($modal-content-box-shadow-sm-up);
|
|
107
|
+
}
|
|
108
|
+
`,
|
|
109
|
+
'.modal-content --text': css`
|
|
110
|
+
color: $modal-content-color;
|
|
111
|
+
`,
|
|
112
|
+
'.modal-backdrop': css`
|
|
113
|
+
position: absolute;
|
|
114
|
+
top: 0;
|
|
115
|
+
left: 0;
|
|
116
|
+
z-index: $zindex-modal-backdrop;
|
|
117
|
+
width: 100%;
|
|
118
|
+
height: 100%;
|
|
119
|
+
background-color: $modal-backdrop-bg;
|
|
120
|
+
opacity: $modal-backdrop-opacity;
|
|
121
|
+
`,
|
|
122
|
+
'.modal-sm': css`
|
|
123
|
+
@include media-breakpoint-up(sm) {
|
|
124
|
+
max-width: $modal-sm;
|
|
125
|
+
}
|
|
126
|
+
`,
|
|
127
|
+
'.modal-lg': css`
|
|
128
|
+
@include media-breakpoint-up(lg) {
|
|
129
|
+
max-width: $modal-lg;
|
|
130
|
+
}
|
|
131
|
+
`,
|
|
132
|
+
'.modal-xl': css`
|
|
133
|
+
@include media-breakpoint-up(lg) {
|
|
134
|
+
max-width: $modal-lg;
|
|
135
|
+
}
|
|
136
|
+
@include media-breakpoint-up(xl) {
|
|
137
|
+
max-width: $modal-xl;
|
|
138
|
+
}
|
|
139
|
+
`,
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
const Modal = React.forwardRef((props, ref) => {
|
|
143
|
+
const {
|
|
144
|
+
children,
|
|
145
|
+
visible,
|
|
146
|
+
size,
|
|
147
|
+
backdrop = true,
|
|
148
|
+
scrollable = false,
|
|
149
|
+
centered = false,
|
|
150
|
+
onToggle: handleToggle,
|
|
151
|
+
style,
|
|
152
|
+
contentContainerStyle,
|
|
153
|
+
dialogStyle,
|
|
154
|
+
contentStyle,
|
|
155
|
+
textStyle,
|
|
156
|
+
dialogTextStyle,
|
|
157
|
+
contentTextStyle,
|
|
158
|
+
...elementProps
|
|
159
|
+
} = props;
|
|
160
|
+
|
|
161
|
+
const dialogRef = useRef();
|
|
162
|
+
|
|
163
|
+
const modal = useModal(visible, scrollable);
|
|
164
|
+
|
|
165
|
+
const backdropClasses = getStyles(styles, ['.modal-backdrop']);
|
|
166
|
+
const classes = getStyles(styles, ['.modal']);
|
|
167
|
+
const dialogClasses = getStyles(styles, [
|
|
168
|
+
'.modal-dialog',
|
|
169
|
+
size === 'sm' && '.modal-sm',
|
|
170
|
+
size === 'lg' && '.modal-lg',
|
|
171
|
+
size === 'xl' && '.modal-xl',
|
|
172
|
+
scrollable && '.modal-dialog-scrollable',
|
|
173
|
+
centered && '.modal-dialog-centered',
|
|
174
|
+
]);
|
|
175
|
+
const contentClasses = getStyles(styles, [
|
|
176
|
+
'.modal-content',
|
|
177
|
+
scrollable && '.modal-dialog-scrollable .modal-content',
|
|
178
|
+
]);
|
|
179
|
+
const contentTextClasses = getStyles(styles, ['.modal-content --text']);
|
|
180
|
+
|
|
181
|
+
// If scrollable we use a ScrollView in ModalBody, so we can use a View here.
|
|
182
|
+
const FlexView = scrollable ? View : ScrollView;
|
|
183
|
+
|
|
184
|
+
const centeredStyle = centered && { justifyContent: 'center' };
|
|
185
|
+
|
|
186
|
+
return (
|
|
187
|
+
<BaseModal transparent visible={visible} onRequestClose={handleToggle}>
|
|
188
|
+
{backdrop && <View style={backdropClasses} />}
|
|
189
|
+
<FlexView
|
|
190
|
+
{...elementProps}
|
|
191
|
+
ref={ref}
|
|
192
|
+
style={[classes, scrollable && centeredStyle, style]}
|
|
193
|
+
textStyle={textStyle}
|
|
194
|
+
contentContainerStyle={
|
|
195
|
+
scrollable
|
|
196
|
+
? undefined
|
|
197
|
+
: [{ flexGrow: 1 }, centeredStyle, contentContainerStyle]
|
|
198
|
+
}
|
|
199
|
+
>
|
|
200
|
+
<BackdropHandler
|
|
201
|
+
dialogRef={dialogRef}
|
|
202
|
+
onClose={handleToggle}
|
|
203
|
+
backdrop={backdrop}
|
|
204
|
+
/>
|
|
205
|
+
<SafeAreaView style={{ flexShrink: 1 }}>
|
|
206
|
+
<View
|
|
207
|
+
ref={dialogRef}
|
|
208
|
+
style={[dialogClasses, dialogStyle]}
|
|
209
|
+
textStyle={dialogTextStyle}
|
|
210
|
+
>
|
|
211
|
+
<View
|
|
212
|
+
style={[contentClasses, contentStyle]}
|
|
213
|
+
textStyle={[contentTextClasses, contentTextStyle]}
|
|
214
|
+
>
|
|
215
|
+
<ModalContext.Provider value={modal}>
|
|
216
|
+
<OverlayProvider>{children}</OverlayProvider>
|
|
217
|
+
</ModalContext.Provider>
|
|
218
|
+
</View>
|
|
219
|
+
</View>
|
|
220
|
+
</SafeAreaView>
|
|
221
|
+
</FlexView>
|
|
222
|
+
</BaseModal>
|
|
223
|
+
);
|
|
224
|
+
});
|
|
225
|
+
|
|
226
|
+
Modal.displayName = 'Modal';
|
|
227
|
+
Modal.propTypes = propTypes;
|
|
228
|
+
|
|
229
|
+
Modal.Context = ModalContext;
|
|
230
|
+
Modal.Header = ModalHeader;
|
|
231
|
+
Modal.Title = ModalTitle;
|
|
232
|
+
Modal.Body = ModalBody;
|
|
233
|
+
Modal.Footer = ModalFooter;
|
|
234
|
+
|
|
235
|
+
export default Modal;
|
|
@@ -1,10 +1,25 @@
|
|
|
1
|
-
import { useMemo } from 'react';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
}
|
|
1
|
+
import { useContext, useEffect, useMemo } from 'react';
|
|
2
|
+
import Context from '../../Context';
|
|
3
|
+
|
|
4
|
+
export default function useModal(visible, scrollable) {
|
|
5
|
+
const context = useContext(Context);
|
|
6
|
+
|
|
7
|
+
useEffect(() => {
|
|
8
|
+
if (!visible) {
|
|
9
|
+
return undefined;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
context.scrollbars.hide();
|
|
13
|
+
|
|
14
|
+
return () => {
|
|
15
|
+
context.scrollbars.show();
|
|
16
|
+
};
|
|
17
|
+
}, [visible]);
|
|
18
|
+
|
|
19
|
+
return useMemo(
|
|
20
|
+
() => ({
|
|
21
|
+
scrollable,
|
|
22
|
+
}),
|
|
23
|
+
[scrollable],
|
|
24
|
+
);
|
|
25
|
+
}
|