@wavemaker/app-rn-runtime 11.10.5-rc.6100 → 11.11.0-rc.209
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/actions/notification-action.js +3 -1
- package/actions/notification-action.js.map +1 -1
- package/components/basic/animatedview.component.js +3 -2
- package/components/basic/animatedview.component.js.map +1 -1
- package/components/basic/audio/audio.component.js.map +1 -1
- package/components/basic/label/label.component.js +78 -33
- package/components/basic/label/label.component.js.map +1 -1
- package/components/basic/message/message.component.js +1 -1
- package/components/basic/message/message.component.js.map +1 -1
- package/components/basic/message/message.props.js +1 -0
- package/components/basic/message/message.props.js.map +1 -1
- package/components/basic/picture/picture.component.js +20 -13
- package/components/basic/picture/picture.component.js.map +1 -1
- package/components/basic/picture/picture.styles.js.map +1 -1
- package/components/basic/search/search.component.js +49 -28
- package/components/basic/search/search.component.js.map +1 -1
- package/components/basic/search/search.props.js +1 -0
- package/components/basic/search/search.props.js.map +1 -1
- package/components/basic/skeleton/skeleton.component.js.map +1 -1
- package/components/basic/skeleton/skeleton.styles.js.map +1 -1
- package/components/chart/bar-chart/bar-chart.component.js +4 -2
- package/components/chart/bar-chart/bar-chart.component.js.map +1 -1
- package/components/chart/bar-chart/bar-chart.props.js +1 -0
- package/components/chart/bar-chart/bar-chart.props.js.map +1 -1
- package/components/chart/basechart.component.js +9 -2
- package/components/chart/basechart.component.js.map +1 -1
- package/components/chart/basechart.props.js +3 -1
- package/components/chart/basechart.props.js.map +1 -1
- package/components/container/container.component.js +10 -2
- package/components/container/container.component.js.map +1 -1
- package/components/container/container.props.js +1 -0
- package/components/container/container.props.js.map +1 -1
- package/components/container/container.styles.js +3 -0
- package/components/container/container.styles.js.map +1 -1
- package/components/data/list/list.component.js +58 -15
- package/components/data/list/list.component.js.map +1 -1
- package/components/data/list/list.props.js +3 -0
- package/components/data/list/list.props.js.map +1 -1
- package/components/input/calendar/views/month-view.js.map +1 -1
- package/components/input/epoch/datetime/datetime.styles.js.map +1 -1
- package/components/navigation/appnavbar/appnavbar.component.js +123 -38
- package/components/navigation/appnavbar/appnavbar.component.js.map +1 -1
- package/components/navigation/appnavbar/appnavbar.props.js +1 -0
- package/components/navigation/appnavbar/appnavbar.props.js.map +1 -1
- package/components/navigation/appnavbar/appnavbar.styles.js.map +1 -1
- package/components/page/left-panel/left-panel.component.js +3 -2
- package/components/page/left-panel/left-panel.component.js.map +1 -1
- package/components/page/page-content/page-content.component.js +13 -25
- package/components/page/page-content/page-content.component.js.map +1 -1
- package/components/page/page.component.js +51 -4
- package/components/page/page.component.js.map +1 -1
- package/components/page/page.props.js +11 -1
- package/components/page/page.props.js.map +1 -1
- package/components/page/tabbar/tabbar.component.js +140 -40
- package/components/page/tabbar/tabbar.component.js.map +1 -1
- package/components/page/tabbar/tabbar.props.js +1 -0
- package/components/page/tabbar/tabbar.props.js.map +1 -1
- package/core/AppConfig.js.map +1 -1
- package/core/base.component.js +38 -5
- package/core/base.component.js.map +1 -1
- package/core/components/floatinglabel.component.js.map +1 -1
- package/core/components/textinput.component.js +18 -2
- package/core/components/textinput.component.js.map +1 -1
- package/core/fixed-view.component.js +5 -3
- package/core/fixed-view.component.js.map +1 -1
- package/core/sticky-container.component.js +175 -0
- package/core/sticky-container.component.js.map +1 -0
- package/core/toast.service.js.map +1 -1
- package/core/utils.js +51 -5
- package/core/utils.js.map +1 -1
- package/npm-shrinkwrap.json +145 -128
- package/package-lock.json +145 -128
- package/package.json +6 -3
- package/runtime/App.js +61 -10
- package/runtime/App.js.map +1 -1
- package/runtime/base-fragment.component.js +2 -1
- package/runtime/base-fragment.component.js.map +1 -1
- package/runtime/services/app-toast.service.js +4 -0
- package/runtime/services/app-toast.service.js.map +1 -1
@@ -1,2 +1,12 @@
|
|
1
|
-
|
1
|
+
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
2
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
3
|
+
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
4
|
+
import { BaseProps } from '@wavemaker/app-rn-runtime/core/base.component';
|
5
|
+
export default class WmPageProps extends BaseProps {
|
6
|
+
constructor(...args) {
|
7
|
+
super(...args);
|
8
|
+
_defineProperty(this, "children", []);
|
9
|
+
_defineProperty(this, "scrollable", false);
|
10
|
+
}
|
11
|
+
}
|
2
12
|
//# sourceMappingURL=page.props.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":[],"sources":["page.props.ts"],"sourcesContent":["import { BaseProps } from '@wavemaker/app-rn-runtime/core/base.component';\
|
1
|
+
{"version":3,"names":["BaseProps","WmPageProps","constructor","args","_defineProperty"],"sources":["page.props.ts"],"sourcesContent":["import { BaseProps } from '@wavemaker/app-rn-runtime/core/base.component';\nexport default class WmPageProps extends BaseProps{\n children: any[] = [];\n scrollable: boolean = false;\n}"],"mappings":";;;AAAA,SAASA,SAAS,QAAQ,+CAA+C;AACzE,eAAe,MAAMC,WAAW,SAASD,SAAS;EAAAE,YAAA,GAAAC,IAAA;IAAA,SAAAA,IAAA;IAAAC,eAAA,mBAC9B,EAAE;IAAAA,eAAA,qBACE,KAAK;EAAA;AAC7B","ignoreList":[]}
|
@@ -3,7 +3,7 @@ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object
|
|
3
3
|
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
4
4
|
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
5
5
|
import React from 'react';
|
6
|
-
import { Text, View, TouchableOpacity, Dimensions, Keyboard } from 'react-native';
|
6
|
+
import { Text, View, TouchableOpacity, Dimensions, Keyboard, Animated, Easing } from 'react-native';
|
7
7
|
import { ThemeProvider } from '@wavemaker/app-rn-runtime/styles/theme';
|
8
8
|
import { ModalConsumer } from '@wavemaker/app-rn-runtime/core/modal.service';
|
9
9
|
import WmIcon from '@wavemaker/app-rn-runtime/components/basic/icon/icon.component';
|
@@ -15,6 +15,9 @@ import Svg, { Path } from 'react-native-svg';
|
|
15
15
|
import { getPathDown } from './curve';
|
16
16
|
// import { scale } from 'react-native-size-scaling';
|
17
17
|
import ThemeVariables from '@wavemaker/app-rn-runtime/styles/theme.variables';
|
18
|
+
import { FixedView } from '@wavemaker/app-rn-runtime/core/fixed-view.component';
|
19
|
+
import { SafeAreaInsetsContext } from 'react-native-safe-area-context';
|
20
|
+
import injector from '@wavemaker/app-rn-runtime/core/injector';
|
18
21
|
const scale = n => n;
|
19
22
|
class WmTabbarState extends BaseNavState {
|
20
23
|
constructor(...args) {
|
@@ -29,6 +32,11 @@ export default class WmTabbar extends BaseNavComponent {
|
|
29
32
|
super(props, DEFAULT_CLASS, new WmTabbarProps(), new WmTabbarState());
|
30
33
|
_defineProperty(this, "tabbarHeight", 0);
|
31
34
|
_defineProperty(this, "keyBoardShown", false);
|
35
|
+
_defineProperty(this, "destroyScrollListner", null);
|
36
|
+
_defineProperty(this, "translateY", new Animated.Value(0));
|
37
|
+
_defineProperty(this, "insets", null);
|
38
|
+
_defineProperty(this, "appConfig", injector.get('APP_CONFIG'));
|
39
|
+
_defineProperty(this, "tabbarHeightWithInsets", 0);
|
32
40
|
_defineProperty(this, "maxWidth", Dimensions.get("window").width);
|
33
41
|
_defineProperty(this, "returnpathDown", void 0);
|
34
42
|
this.cleanup.push(Keyboard.addListener('keyboardWillShow', () => {
|
@@ -40,6 +48,17 @@ export default class WmTabbar extends BaseNavComponent {
|
|
40
48
|
this.forceUpdate();
|
41
49
|
}).remove);
|
42
50
|
}
|
51
|
+
onPropertyChange(name, $new, $old) {
|
52
|
+
super.onPropertyChange(name, $new, $old);
|
53
|
+
switch (name) {
|
54
|
+
case 'hideonscroll':
|
55
|
+
this.destroyScrollListner && this.destroyScrollListner();
|
56
|
+
if ($new) {
|
57
|
+
this.subscribeToPageScroll();
|
58
|
+
}
|
59
|
+
break;
|
60
|
+
}
|
61
|
+
}
|
43
62
|
renderTabItem(item, testId, props, onSelect, floating = false) {
|
44
63
|
const isActive = props.isActive && props.isActive(item);
|
45
64
|
const getDisplayLabel = this.props.getDisplayExpression || (label => label);
|
@@ -78,7 +97,45 @@ export default class WmTabbar extends BaseNavComponent {
|
|
78
97
|
isVisible() {
|
79
98
|
return super.isVisible() && !this.keyBoardShown;
|
80
99
|
}
|
81
|
-
|
100
|
+
animateWithTiming(value, duratiion) {
|
101
|
+
Animated.timing(this.translateY, {
|
102
|
+
toValue: value,
|
103
|
+
easing: Easing.linear,
|
104
|
+
duration: duratiion,
|
105
|
+
useNativeDriver: false
|
106
|
+
}).start();
|
107
|
+
}
|
108
|
+
subscribeToPageScroll() {
|
109
|
+
this.tabbarHeightWithInsets = 0;
|
110
|
+
this.destroyScrollListner = this.subscribe('scroll', event => {
|
111
|
+
var _this$getLayout, _this$insets;
|
112
|
+
const {
|
113
|
+
contentOffset,
|
114
|
+
layoutMeasurement,
|
115
|
+
contentSize
|
116
|
+
} = event.nativeEvent;
|
117
|
+
const scrollPosition = contentOffset.y;
|
118
|
+
this.tabbarHeightWithInsets = this.tabbarHeightWithInsets ? this.tabbarHeightWithInsets : (_this$getLayout = this.getLayout()) === null || _this$getLayout === void 0 ? void 0 : _this$getLayout.height;
|
119
|
+
const visibleContentHeight = layoutMeasurement.height;
|
120
|
+
const endReached = scrollPosition + visibleContentHeight + this.tabbarHeightWithInsets >= contentSize.height;
|
121
|
+
const bottomInsets = ((_this$insets = this.insets) === null || _this$insets === void 0 ? void 0 : _this$insets.bottom) || 0;
|
122
|
+
const e = event;
|
123
|
+
if (e.scrollDelta >= 2) {
|
124
|
+
if (e.scrollDirection < 0) {
|
125
|
+
this.animateWithTiming(0, 100);
|
126
|
+
} else if (e.scrollDirection > 0) {
|
127
|
+
this.animateWithTiming(this.tabbarHeightWithInsets + bottomInsets, 100);
|
128
|
+
}
|
129
|
+
}
|
130
|
+
if (endReached) {
|
131
|
+
this.animateWithTiming(0, 0);
|
132
|
+
}
|
133
|
+
});
|
134
|
+
}
|
135
|
+
componentWillUnmount() {
|
136
|
+
this.destroyScrollListner && this.destroyScrollListner();
|
137
|
+
}
|
138
|
+
renderContent(props) {
|
82
139
|
let max = 5;
|
83
140
|
const tabItems = this.state.dataItems;
|
84
141
|
const tabItemsLength = tabItems.length;
|
@@ -104,46 +161,89 @@ export default class WmTabbar extends BaseNavComponent {
|
|
104
161
|
}
|
105
162
|
max = max - 1;
|
106
163
|
}
|
107
|
-
return /*#__PURE__*/React.createElement(
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
164
|
+
return /*#__PURE__*/React.createElement(SafeAreaInsetsContext.Consumer, null, (insets = {
|
165
|
+
top: 0,
|
166
|
+
bottom: 0,
|
167
|
+
left: 0,
|
168
|
+
right: 0
|
169
|
+
}) => {
|
170
|
+
var _this$appConfig;
|
171
|
+
this.insets = insets;
|
172
|
+
const paddingBottomVal = this.styles.root.paddingBottom || this.styles.root.padding;
|
173
|
+
const statusBarCustomisation = (_this$appConfig = this.appConfig) === null || _this$appConfig === void 0 || (_this$appConfig = _this$appConfig.preferences) === null || _this$appConfig === void 0 ? void 0 : _this$appConfig.statusbarStyles;
|
174
|
+
const isFullScreenMode = !!(statusBarCustomisation !== null && statusBarCustomisation !== void 0 && statusBarCustomisation.translucent);
|
175
|
+
const stylesWithFs = isFullScreenMode ? {
|
176
|
+
height: this.styles.root.height + ((insets === null || insets === void 0 ? void 0 : insets.bottom) || 0),
|
177
|
+
paddingBottom: (paddingBottomVal || 0) + ((insets === null || insets === void 0 ? void 0 : insets.bottom) || 0)
|
178
|
+
} : {};
|
179
|
+
return /*#__PURE__*/React.createElement(NavigationServiceConsumer, null, navigationService => /*#__PURE__*/React.createElement(View, {
|
180
|
+
style: [this.styles.root, stylesWithFs],
|
181
|
+
ref: ref => {
|
182
|
+
this.baseView = ref;
|
183
|
+
},
|
184
|
+
onLayout: event => this.handleLayout(event)
|
185
|
+
}, isClippedTabbar ? /*#__PURE__*/React.createElement(Svg, {
|
186
|
+
width: this.maxWidth,
|
187
|
+
height: scale(this.styles.root.height),
|
188
|
+
style: {
|
189
|
+
zIndex: -1,
|
190
|
+
position: 'absolute',
|
191
|
+
backgroundColor: ThemeVariables.INSTANCE.transparent
|
192
|
+
}
|
193
|
+
}, /*#__PURE__*/React.createElement(Path, {
|
194
|
+
fill: ThemeVariables.INSTANCE.tabbarBackgroundColor,
|
195
|
+
d: this.returnpathDown
|
196
|
+
})) : /*#__PURE__*/React.createElement(React.Fragment, null), /*#__PURE__*/React.createElement(ModalConsumer, null, modalService => {
|
197
|
+
if (this.state.showMore) {
|
198
|
+
modalService.showModal(this.prepareModalOptions(/*#__PURE__*/React.createElement(ThemeProvider, {
|
199
|
+
value: this.theme
|
200
|
+
}, /*#__PURE__*/React.createElement(View, {
|
201
|
+
style: this.styles.moreMenu
|
202
|
+
}, moreItems.map((a, i) => /*#__PURE__*/React.createElement(View, {
|
203
|
+
key: i,
|
204
|
+
style: this.styles.moreMenuRow
|
205
|
+
}, a.map((item, index) => this.renderTabItem(item, i + '', props, () => this.onItemSelect(item, navigationService)))))))));
|
206
|
+
} else {
|
207
|
+
modalService.hideModal(this.state.modalOptions);
|
208
|
+
}
|
209
|
+
return null;
|
210
|
+
}), /*#__PURE__*/React.createElement(View, {
|
211
|
+
style: this.styles.menu,
|
212
|
+
onLayout: e => {
|
213
|
+
this.tabbarHeight = e.nativeEvent.layout.height;
|
214
|
+
}
|
215
|
+
}, tabItems.filter((item, i) => i < max).map((item, i) => this.renderTabItem(item, i + '', props, () => this.onItemSelect(item, navigationService), item.floating)), tabItems.length > max && this.renderTabItem({
|
216
|
+
label: props.morebuttonlabel,
|
217
|
+
icon: props.morebuttoniconclass
|
218
|
+
}, 6666 + '', props, () => {
|
219
|
+
this.updateState({
|
220
|
+
showMore: !this.state.showMore
|
221
|
+
});
|
222
|
+
}))));
|
223
|
+
});
|
224
|
+
}
|
225
|
+
renderWidget(props) {
|
226
|
+
this.isFixed = true;
|
227
|
+
const animateStyle = props.hideonscroll ? {
|
228
|
+
transform: [{
|
229
|
+
translateY: this.translateY
|
230
|
+
}]
|
231
|
+
} : {};
|
232
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(FixedView, {
|
112
233
|
style: {
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
}, /*#__PURE__*/React.createElement(View, {
|
125
|
-
style: this.styles.moreMenu
|
126
|
-
}, moreItems.map((a, i) => /*#__PURE__*/React.createElement(View, {
|
127
|
-
key: i,
|
128
|
-
style: this.styles.moreMenuRow
|
129
|
-
}, a.map((item, index) => this.renderTabItem(item, i + '', props, () => this.onItemSelect(item, navigationService)))))))));
|
130
|
-
} else {
|
131
|
-
modalService.hideModal(this.state.modalOptions);
|
132
|
-
}
|
133
|
-
return null;
|
134
|
-
}), /*#__PURE__*/React.createElement(View, {
|
135
|
-
style: this.styles.menu,
|
136
|
-
onLayout: e => {
|
137
|
-
this.tabbarHeight = e.nativeEvent.layout.height;
|
234
|
+
...{
|
235
|
+
bottom: 0,
|
236
|
+
width: '100%'
|
237
|
+
},
|
238
|
+
...animateStyle
|
239
|
+
},
|
240
|
+
theme: this.theme,
|
241
|
+
animated: props.hideonscroll || false
|
242
|
+
}, this.renderContent(props)), /*#__PURE__*/React.createElement(View, {
|
243
|
+
style: {
|
244
|
+
opacity: 0
|
138
245
|
}
|
139
|
-
},
|
140
|
-
label: props.morebuttonlabel,
|
141
|
-
icon: props.morebuttoniconclass
|
142
|
-
}, 6666 + '', props, () => {
|
143
|
-
this.updateState({
|
144
|
-
showMore: !this.state.showMore
|
145
|
-
});
|
146
|
-
}))));
|
246
|
+
}, this.renderContent(props)));
|
147
247
|
}
|
148
248
|
}
|
149
249
|
//# sourceMappingURL=tabbar.component.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["React","Text","View","TouchableOpacity","Dimensions","Keyboard","ThemeProvider","ModalConsumer","WmIcon","NavigationServiceConsumer","BaseNavComponent","BaseNavState","WmTabbarProps","DEFAULT_CLASS","Svg","Path","getPathDown","ThemeVariables","scale","n","WmTabbarState","constructor","args","_defineProperty","WmTabbar","props","get","width","cleanup","push","addListener","keyBoardShown","forceUpdate","remove","renderTabItem","item","testId","onSelect","floating","isActive","getDisplayLabel","getDisplayExpression","label","increasedGap","Number","indexBeforeMid","state","dataItems","length","classname","indexOf","styles","tabItem","paddingRight","createElement","_extends","getTestPropsForAction","style","centerHubItem","key","onPress","activeTabItem","theme","mergeStyle","tabIcon","centerHubIcon","activeTabIcon","iconclass","icon","tabLabel","centerHubLabel","activeTabLabel","numberOfLines","onItemSelect","navigationService","link","openUrl","invokeEventCallback","proxy","prepareModalOptions","content","o","modalOptions","modalStyle","bottom","tabbarHeight","contentStyle","modalContent","isVisible","renderWidget","max","tabItems","tabItemsLength","isClippedTabbar","middleIndex","Math","floor","returnpathDown","maxWidth","root","height","moreItems","moreItemsCount","ceil","j","i","row","zIndex","position","backgroundColor","INSTANCE","transparent","fill","tabbarBackgroundColor","d","Fragment","modalService","showMore","showModal","value","moreMenu","map","a","moreMenuRow","index","hideModal","menu","onLayout","e","nativeEvent","layout","filter","morebuttonlabel","morebuttoniconclass","updateState"],"sources":["tabbar.component.tsx"],"sourcesContent":["import React, { ReactNode } from 'react';\nimport { Text, View, TouchableOpacity, Dimensions, Keyboard } from 'react-native';\n\nimport { ThemeProvider } from '@wavemaker/app-rn-runtime/styles/theme';\nimport { ModalConsumer, ModalOptions, ModalService } from '@wavemaker/app-rn-runtime/core/modal.service';\nimport WmIcon from '@wavemaker/app-rn-runtime/components/basic/icon/icon.component';\nimport NavigationService, { NavigationServiceConsumer } from '@wavemaker/app-rn-runtime/core/navigation.service';\nimport { BaseNavProps } from '@wavemaker/app-rn-runtime/components/navigation/basenav/basenav.props';\nimport { BaseNavComponent, BaseNavState, NavigationDataItem } from '@wavemaker/app-rn-runtime/components/navigation/basenav/basenav.component';\n\nimport WmTabbarProps from './tabbar.props';\nimport { DEFAULT_CLASS, WmTabbarStyles } from './tabbar.styles';\nimport Svg, { Path } from 'react-native-svg';\nimport { getPathDown } from './curve';\n// import { scale } from 'react-native-size-scaling';\nimport ThemeVariables from '@wavemaker/app-rn-runtime/styles/theme.variables';\n\ninterface TabDataItem extends NavigationDataItem {\n floating: boolean;\n indexBeforeMid: number;\n}\n\nconst scale = (n: number) => n;\n\nclass WmTabbarState<T extends BaseNavProps> extends BaseNavState<T> {\n showMore = false;\n modalOptions = {} as ModalOptions;\n dataItems: TabDataItem[] = [];\n}\n\nexport default class WmTabbar extends BaseNavComponent<WmTabbarProps, WmTabbarState<WmTabbarProps>, WmTabbarStyles> {\n\n private tabbarHeight = 0;\n private keyBoardShown = false;\n\n constructor(props: WmTabbarProps) {\n super(props, DEFAULT_CLASS, new WmTabbarProps(), new WmTabbarState());\n this.cleanup.push(Keyboard.addListener('keyboardWillShow', () => {\n this.keyBoardShown = true;\n this.forceUpdate();\n }).remove);\n this.cleanup.push(Keyboard.addListener('keyboardWillHide', () => {\n this.keyBoardShown = false;\n this.forceUpdate();\n }).remove);\n }\n\n private maxWidth = Dimensions.get(\"window\").width; \n private returnpathDown: any;\n\n renderTabItem(item: TabDataItem, testId: string, props: WmTabbarProps, onSelect: Function, floating = false) {\n\n const isActive = props.isActive && props.isActive(item);\n const getDisplayLabel = this.props.getDisplayExpression || ((label: string) => label);\n let increasedGap = Number(testId) === item?.indexBeforeMid && (this.state.dataItems.length % 2!=0) && ((props.classname || '').indexOf('clipped-tabbar') >= 0)\n ? [this.styles.tabItem, { paddingRight: 70 }]\n : [this.styles.tabItem];\n \n return (\n <TouchableOpacity \n {...this.getTestPropsForAction('item' + testId)}\n style={[increasedGap, floating? this.styles.centerHubItem: {}]}\n key={`${item.label}_${testId}`}\n onPress={() => onSelect && onSelect()}>\n <View key={item.key}>\n <View style={[isActive && !floating ? this.styles.activeTabItem : {}]}>\n <WmIcon\n styles={this.theme.mergeStyle({}, this.styles.tabIcon, floating? this.styles.centerHubIcon: {}, isActive ? this.styles.activeTabIcon : {})}\n iconclass={item.icon}\n ></WmIcon>\n </View>\n </View>\n <Text style={[this.styles.tabLabel, floating? this.styles.centerHubLabel: {}, isActive ? this.styles.activeTabLabel : {}]} numberOfLines={1}>\n {getDisplayLabel(item.label)}\n </Text>\n </TouchableOpacity>\n );\n }\n \n onItemSelect(item: NavigationDataItem, navigationService: NavigationService) {\n item.link && navigationService.openUrl(item.link);\n this.invokeEventCallback('onSelect', [null, this.proxy, item]);\n }\n\n prepareModalOptions(content: ReactNode) {\n const o = this.state.modalOptions;\n o.content = content;\n o.modalStyle = {\n bottom: this.tabbarHeight\n };\n o.contentStyle = this.styles.modalContent; \n return o;\n }\n\n isVisible(): boolean {\n return super.isVisible() && !this.keyBoardShown;\n }\n\n renderWidget(props: WmTabbarProps) {\n let max = 5;\n const tabItems = this.state.dataItems;\n const tabItemsLength = tabItems.length;\n const isClippedTabbar = ((props.classname || '').indexOf('clipped-tabbar') >= 0) && (tabItemsLength % 2 !== 0);\n if (isClippedTabbar && tabItemsLength % 2 !== 0) {\n const middleIndex = Math.floor(tabItemsLength / 2);\n tabItems[middleIndex]['floating'] = true;\n tabItems[middleIndex - 1]['indexBeforeMid'] = middleIndex-1;\n }\n this.returnpathDown = getPathDown(this.maxWidth, 65 ,60,this.styles.root.height as number);\n const moreItems = [] as any[][];\n if (tabItems.length > max) {\n const moreItemsCount = Math.ceil((tabItems.length + 1 - max)/ max) * max;\n let j = 0;\n for (let i = max-1; i < moreItemsCount;) {\n const row = [];\n for (let j = 0; j < max; j++) {\n row[j] = tabItems[i++] || {key: 'tabItem' + i} as TabDataItem;\n }\n moreItems.push(row);\n }\n max = max - 1;\n }\n return (\n <NavigationServiceConsumer>\n {(navigationService) =>\n (<View style={this.styles.root}>\n {isClippedTabbar ? (\n <Svg width={this.maxWidth} height={scale(this.styles.root.height as number)} style={{zIndex: -1,position: 'absolute',backgroundColor: ThemeVariables.INSTANCE.transparent}}>\n <Path fill={ThemeVariables.INSTANCE.tabbarBackgroundColor} {...{ d: this.returnpathDown }}/>\n </Svg>\n ): <></>} \n <ModalConsumer>\n {(modalService: ModalService) => {\n if (this.state.showMore) {\n modalService.showModal(this.prepareModalOptions((\n <ThemeProvider value={this.theme} >\n <View style={this.styles.moreMenu}>\n {moreItems.map((a, i) =>\n (<View key={i} style={this.styles.moreMenuRow}>\n {a.map((item, index) => this.renderTabItem(item, i + '', props, () => this.onItemSelect(item, navigationService)))}\n </View>)\n )}\n </View>\n </ThemeProvider>)));\n } else {\n modalService.hideModal(this.state.modalOptions);\n }\n return null;\n }}\n </ModalConsumer>\n <View style={this.styles.menu}\n onLayout={e => { this.tabbarHeight = e.nativeEvent.layout.height}}> \n {tabItems.filter((item, i) => i < max)\n .map((item, i) => this.renderTabItem(item, i + '', props, () => this.onItemSelect(item, navigationService), item.floating))}\n {tabItems.length > max && (\n this.renderTabItem({\n label: props.morebuttonlabel,\n icon: props.morebuttoniconclass\n } as TabDataItem, 6666 +'', props, () => {\n this.updateState({showMore: !this.state.showMore} as WmTabbarState<WmTabbarProps>);\n })\n )}\n </View>\n </View>)}\n </NavigationServiceConsumer>\n );\n }\n}\n"],"mappings":";;;;AAAA,OAAOA,KAAK,MAAqB,OAAO;AACxC,SAASC,IAAI,EAAEC,IAAI,EAAEC,gBAAgB,EAAEC,UAAU,EAAEC,QAAQ,QAAQ,cAAc;AAEjF,SAASC,aAAa,QAAQ,wCAAwC;AACtE,SAASC,aAAa,QAAoC,8CAA8C;AACxG,OAAOC,MAAM,MAAM,gEAAgE;AACnF,SAA4BC,yBAAyB,QAAQ,mDAAmD;AAEhH,SAASC,gBAAgB,EAAEC,YAAY,QAA4B,2EAA2E;AAE9I,OAAOC,aAAa,MAAM,gBAAgB;AAC1C,SAASC,aAAa,QAAwB,iBAAiB;AAC/D,OAAOC,GAAG,IAAIC,IAAI,QAAQ,kBAAkB;AAC5C,SAASC,WAAW,QAAQ,SAAS;AACrC;AACA,OAAOC,cAAc,MAAM,kDAAkD;AAO7E,MAAMC,KAAK,GAAIC,CAAS,IAAKA,CAAC;AAE9B,MAAMC,aAAa,SAAiCT,YAAY,CAAI;EAAAU,YAAA,GAAAC,IAAA;IAAA,SAAAA,IAAA;IAAAC,eAAA,mBACvD,KAAK;IAAAA,eAAA,uBACD,CAAC,CAAC;IAAAA,eAAA,oBACU,EAAE;EAAA;AAC/B;AAEA,eAAe,MAAMC,QAAQ,SAASd,gBAAgB,CAA8D;EAKlHW,WAAWA,CAACI,KAAoB,EAAE;IAChC,KAAK,CAACA,KAAK,EAAEZ,aAAa,EAAE,IAAID,aAAa,CAAC,CAAC,EAAE,IAAIQ,aAAa,CAAC,CAAC,CAAC;IAACG,eAAA,uBAJjD,CAAC;IAAAA,eAAA,wBACA,KAAK;IAAAA,eAAA,mBAcVnB,UAAU,CAACsB,GAAG,CAAC,QAAQ,CAAC,CAACC,KAAK;IAAAJ,eAAA;IAV/C,IAAI,CAACK,OAAO,CAACC,IAAI,CAACxB,QAAQ,CAACyB,WAAW,CAAC,kBAAkB,EAAE,MAAM;MAC/D,IAAI,CAACC,aAAa,GAAG,IAAI;MACzB,IAAI,CAACC,WAAW,CAAC,CAAC;IACpB,CAAC,CAAC,CAACC,MAAM,CAAC;IACV,IAAI,CAACL,OAAO,CAACC,IAAI,CAACxB,QAAQ,CAACyB,WAAW,CAAC,kBAAkB,EAAE,MAAM;MAC/D,IAAI,CAACC,aAAa,GAAG,KAAK;MAC1B,IAAI,CAACC,WAAW,CAAC,CAAC;IACpB,CAAC,CAAC,CAACC,MAAM,CAAC;EACZ;EAKAC,aAAaA,CAACC,IAAiB,EAAEC,MAAc,EAAEX,KAAoB,EAAEY,QAAkB,EAAEC,QAAQ,GAAG,KAAK,EAAE;IAE3G,MAAMC,QAAQ,GAAGd,KAAK,CAACc,QAAQ,IAAId,KAAK,CAACc,QAAQ,CAACJ,IAAI,CAAC;IACvD,MAAMK,eAAe,GAAG,IAAI,CAACf,KAAK,CAACgB,oBAAoB,KAAMC,KAAa,IAAKA,KAAK,CAAC;IACrF,IAAIC,YAAY,GAAGC,MAAM,CAACR,MAAM,CAAC,MAAKD,IAAI,aAAJA,IAAI,uBAAJA,IAAI,CAAEU,cAAc,KAAK,IAAI,CAACC,KAAK,CAACC,SAAS,CAACC,MAAM,GAAG,CAAC,IAAE,CAAE,IAAM,CAACvB,KAAK,CAACwB,SAAS,IAAI,EAAE,EAAEC,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAE,GAC7J,CAAC,IAAI,CAACC,MAAM,CAACC,OAAO,EAAE;MAAEC,YAAY,EAAE;IAAG,CAAC,CAAC,GAC3C,CAAC,IAAI,CAACF,MAAM,CAACC,OAAO,CAAC;IAEvB,oBACEpD,KAAA,CAAAsD,aAAA,CAACnD,gBAAgB,EAAAoD,QAAA,KACX,IAAI,CAACC,qBAAqB,CAAC,MAAM,GAAGpB,MAAM,CAAC;MAC/CqB,KAAK,EAAE,CAACd,YAAY,EAAEL,QAAQ,GAAE,IAAI,CAACa,MAAM,CAACO,aAAa,GAAE,CAAC,CAAC,CAAE;MAC/DC,GAAG,EAAE,GAAGxB,IAAI,CAACO,KAAK,IAAIN,MAAM,EAAG;MAC/BwB,OAAO,EAAEA,CAAA,KAAMvB,QAAQ,IAAIA,QAAQ,CAAC;IAAE,iBACtCrC,KAAA,CAAAsD,aAAA,CAACpD,IAAI;MAACyD,GAAG,EAAExB,IAAI,CAACwB;IAAI,gBAClB3D,KAAA,CAAAsD,aAAA,CAACpD,IAAI;MAACuD,KAAK,EAAE,CAAClB,QAAQ,IAAI,CAACD,QAAQ,GAAI,IAAI,CAACa,MAAM,CAACU,aAAa,GAAG,CAAC,CAAC;IAAE,gBACrE7D,KAAA,CAAAsD,aAAA,CAAC9C,MAAM;MACL2C,MAAM,EAAE,IAAI,CAACW,KAAK,CAACC,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI,CAACZ,MAAM,CAACa,OAAO,EAAE1B,QAAQ,GAAE,IAAI,CAACa,MAAM,CAACc,aAAa,GAAE,CAAC,CAAC,EAAE1B,QAAQ,GAAG,IAAI,CAACY,MAAM,CAACe,aAAa,GAAG,CAAC,CAAC,CAAE;MAC3IC,SAAS,EAAEhC,IAAI,CAACiC;IAAK,CACd,CACL,CACF,CAAC,eACPpE,KAAA,CAAAsD,aAAA,CAACrD,IAAI;MAACwD,KAAK,EAAE,CAAC,IAAI,CAACN,MAAM,CAACkB,QAAQ,EAAE/B,QAAQ,GAAE,IAAI,CAACa,MAAM,CAACmB,cAAc,GAAE,CAAC,CAAC,EAAG/B,QAAQ,GAAG,IAAI,CAACY,MAAM,CAACoB,cAAc,GAAG,CAAC,CAAC,CAAE;MAACC,aAAa,EAAE;IAAE,GAC1IhC,eAAe,CAACL,IAAI,CAACO,KAAK,CACvB,CACU,CAAC;EAEvB;EAEA+B,YAAYA,CAACtC,IAAwB,EAAEuC,iBAAoC,EAAE;IAC3EvC,IAAI,CAACwC,IAAI,IAAID,iBAAiB,CAACE,OAAO,CAACzC,IAAI,CAACwC,IAAI,CAAC;IACjD,IAAI,CAACE,mBAAmB,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,IAAI,CAACC,KAAK,EAAE3C,IAAI,CAAC,CAAC;EAChE;EAEA4C,mBAAmBA,CAACC,OAAkB,EAAE;IACtC,MAAMC,CAAC,GAAG,IAAI,CAACnC,KAAK,CAACoC,YAAY;IACjCD,CAAC,CAACD,OAAO,GAAGA,OAAO;IACnBC,CAAC,CAACE,UAAU,GAAG;MACbC,MAAM,EAAE,IAAI,CAACC;IACf,CAAC;IACDJ,CAAC,CAACK,YAAY,GAAG,IAAI,CAACnC,MAAM,CAACoC,YAAY;IACzC,OAAON,CAAC;EACV;EAEAO,SAASA,CAAA,EAAY;IACnB,OAAO,KAAK,CAACA,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAACzD,aAAa;EACjD;EAEA0D,YAAYA,CAAChE,KAAoB,EAAE;IACjC,IAAIiE,GAAG,GAAG,CAAC;IACX,MAAMC,QAAQ,GAAG,IAAI,CAAC7C,KAAK,CAACC,SAAS;IACrC,MAAM6C,cAAc,GAAGD,QAAQ,CAAC3C,MAAM;IACtC,MAAM6C,eAAe,GAAI,CAACpE,KAAK,CAACwB,SAAS,IAAI,EAAE,EAAEC,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAM0C,cAAc,GAAG,CAAC,KAAK,CAAE;IAC9G,IAAIC,eAAe,IAAID,cAAc,GAAG,CAAC,KAAK,CAAC,EAAE;MAC/C,MAAME,WAAW,GAAGC,IAAI,CAACC,KAAK,CAACJ,cAAc,GAAG,CAAC,CAAC;MAClDD,QAAQ,CAACG,WAAW,CAAC,CAAC,UAAU,CAAC,GAAG,IAAI;MACxCH,QAAQ,CAACG,WAAW,GAAG,CAAC,CAAC,CAAC,gBAAgB,CAAC,GAAGA,WAAW,GAAC,CAAC;IAC7D;IACD,IAAI,CAACG,cAAc,GAAGjF,WAAW,CAAC,IAAI,CAACkF,QAAQ,EAAE,EAAE,EAAE,EAAE,EAAC,IAAI,CAAC/C,MAAM,CAACgD,IAAI,CAACC,MAAgB,CAAC;IACzF,MAAMC,SAAS,GAAG,EAAa;IAC/B,IAAIV,QAAQ,CAAC3C,MAAM,GAAG0C,GAAG,EAAE;MACzB,MAAMY,cAAc,GAAGP,IAAI,CAACQ,IAAI,CAAC,CAACZ,QAAQ,CAAC3C,MAAM,GAAG,CAAC,GAAG0C,GAAG,IAAGA,GAAG,CAAC,GAAGA,GAAG;MACxE,IAAIc,CAAC,GAAG,CAAC;MACT,KAAK,IAAIC,CAAC,GAAGf,GAAG,GAAC,CAAC,EAAEe,CAAC,GAAGH,cAAc,GAAG;QACvC,MAAMI,GAAG,GAAG,EAAE;QACd,KAAK,IAAIF,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGd,GAAG,EAAEc,CAAC,EAAE,EAAE;UAC5BE,GAAG,CAACF,CAAC,CAAC,GAAGb,QAAQ,CAACc,CAAC,EAAE,CAAC,IAAI;YAAC9C,GAAG,EAAE,SAAS,GAAG8C;UAAC,CAAgB;QAC/D;QACAJ,SAAS,CAACxE,IAAI,CAAC6E,GAAG,CAAC;MACrB;MACAhB,GAAG,GAAGA,GAAG,GAAG,CAAC;IACf;IACA,oBACE1F,KAAA,CAAAsD,aAAA,CAAC7C,yBAAyB,QACtBiE,iBAAiB,iBAClB1E,KAAA,CAAAsD,aAAA,CAACpD,IAAI;MAACuD,KAAK,EAAE,IAAI,CAACN,MAAM,CAACgD;IAAK,GAC7BN,eAAe,gBACjB7F,KAAA,CAAAsD,aAAA,CAACxC,GAAG;MAACa,KAAK,EAAE,IAAI,CAACuE,QAAS;MAACE,MAAM,EAAElF,KAAK,CAAC,IAAI,CAACiC,MAAM,CAACgD,IAAI,CAACC,MAAgB,CAAE;MAAC3C,KAAK,EAAE;QAACkD,MAAM,EAAE,CAAC,CAAC;QAACC,QAAQ,EAAE,UAAU;QAACC,eAAe,EAAE5F,cAAc,CAAC6F,QAAQ,CAACC;MAAW;IAAE,gBAC3K/G,KAAA,CAAAsD,aAAA,CAACvC,IAAI;MAACiG,IAAI,EAAE/F,cAAc,CAAC6F,QAAQ,CAACG,qBAAsB;MAAOC,CAAC,EAAE,IAAI,CAACjB;IAAc,CAAI,CACtF,CAAC,gBACAjG,KAAA,CAAAsD,aAAA,CAAAtD,KAAA,CAAAmH,QAAA,MAAI,CAAC,eACTnH,KAAA,CAAAsD,aAAA,CAAC/C,aAAa,QACV6G,YAA0B,IAAK;MAC/B,IAAI,IAAI,CAACtE,KAAK,CAACuE,QAAQ,EAAE;QACvBD,YAAY,CAACE,SAAS,CAAC,IAAI,CAACvC,mBAAmB,cAC/C/E,KAAA,CAAAsD,aAAA,CAAChD,aAAa;UAACiH,KAAK,EAAE,IAAI,CAACzD;QAAM,gBAC/B9D,KAAA,CAAAsD,aAAA,CAACpD,IAAI;UAACuD,KAAK,EAAE,IAAI,CAACN,MAAM,CAACqE;QAAS,GAC/BnB,SAAS,CAACoB,GAAG,CAAC,CAACC,CAAC,EAAEjB,CAAC,kBACjBzG,KAAA,CAAAsD,aAAA,CAACpD,IAAI;UAACyD,GAAG,EAAE8C,CAAE;UAAChD,KAAK,EAAE,IAAI,CAACN,MAAM,CAACwE;QAAY,GAC3CD,CAAC,CAACD,GAAG,CAAC,CAACtF,IAAI,EAAEyF,KAAK,KAAK,IAAI,CAAC1F,aAAa,CAACC,IAAI,EAAEsE,CAAC,GAAG,EAAE,EAAEhF,KAAK,EAAG,MAAM,IAAI,CAACgD,YAAY,CAACtC,IAAI,EAAEuC,iBAAiB,CAAC,CAAC,CAC9G,CACR,CACI,CACO,CAAE,CAAC,CAAC;MACrB,CAAC,MAAM;QACL0C,YAAY,CAACS,SAAS,CAAC,IAAI,CAAC/E,KAAK,CAACoC,YAAY,CAAC;MACjD;MACA,OAAO,IAAI;IACb,CACa,CAAC,eAChBlF,KAAA,CAAAsD,aAAA,CAACpD,IAAI;MAACuD,KAAK,EAAE,IAAI,CAACN,MAAM,CAAC2E,IAAK;MAC5BC,QAAQ,EAAEC,CAAC,IAAI;QAAE,IAAI,CAAC3C,YAAY,GAAG2C,CAAC,CAACC,WAAW,CAACC,MAAM,CAAC9B,MAAM;MAAA;IAAE,GACjET,QAAQ,CAACwC,MAAM,CAAC,CAAChG,IAAI,EAAEsE,CAAC,KAAKA,CAAC,GAAGf,GAAG,CAAC,CACnC+B,GAAG,CAAC,CAACtF,IAAI,EAAEsE,CAAC,KAAK,IAAI,CAACvE,aAAa,CAACC,IAAI,EAAEsE,CAAC,GAAG,EAAE,EAAEhF,KAAK,EAAE,MAAM,IAAI,CAACgD,YAAY,CAACtC,IAAI,EAAEuC,iBAAiB,CAAC,EAAEvC,IAAI,CAACG,QAAQ,CAAC,CAAC,EAC5HqD,QAAQ,CAAC3C,MAAM,GAAG0C,GAAG,IACpB,IAAI,CAACxD,aAAa,CAAC;MACjBQ,KAAK,EAAEjB,KAAK,CAAC2G,eAAe;MAC5BhE,IAAI,EAAE3C,KAAK,CAAC4G;IACd,CAAC,EAAiB,IAAI,GAAE,EAAE,EAAE5G,KAAK,EAAG,MAAM;MACxC,IAAI,CAAC6G,WAAW,CAAC;QAACjB,QAAQ,EAAE,CAAC,IAAI,CAACvE,KAAK,CAACuE;MAAQ,CAAiC,CAAC;IACpF,CAAC,CAEC,CACF,CACmB,CAAC;EAEhC;AACF","ignoreList":[]}
|
1
|
+
{"version":3,"names":["React","Text","View","TouchableOpacity","Dimensions","Keyboard","Animated","Easing","ThemeProvider","ModalConsumer","WmIcon","NavigationServiceConsumer","BaseNavComponent","BaseNavState","WmTabbarProps","DEFAULT_CLASS","Svg","Path","getPathDown","ThemeVariables","FixedView","SafeAreaInsetsContext","injector","scale","n","WmTabbarState","constructor","args","_defineProperty","WmTabbar","props","Value","get","width","cleanup","push","addListener","keyBoardShown","forceUpdate","remove","onPropertyChange","name","$new","$old","destroyScrollListner","subscribeToPageScroll","renderTabItem","item","testId","onSelect","floating","isActive","getDisplayLabel","getDisplayExpression","label","increasedGap","Number","indexBeforeMid","state","dataItems","length","classname","indexOf","styles","tabItem","paddingRight","createElement","_extends","getTestPropsForAction","style","centerHubItem","key","onPress","activeTabItem","theme","mergeStyle","tabIcon","centerHubIcon","activeTabIcon","iconclass","icon","tabLabel","centerHubLabel","activeTabLabel","numberOfLines","onItemSelect","navigationService","link","openUrl","invokeEventCallback","proxy","prepareModalOptions","content","o","modalOptions","modalStyle","bottom","tabbarHeight","contentStyle","modalContent","isVisible","animateWithTiming","value","duratiion","timing","translateY","toValue","easing","linear","duration","useNativeDriver","start","tabbarHeightWithInsets","subscribe","event","_this$getLayout","_this$insets","contentOffset","layoutMeasurement","contentSize","nativeEvent","scrollPosition","y","getLayout","height","visibleContentHeight","endReached","bottomInsets","insets","e","scrollDelta","scrollDirection","componentWillUnmount","renderContent","max","tabItems","tabItemsLength","isClippedTabbar","middleIndex","Math","floor","returnpathDown","maxWidth","root","moreItems","moreItemsCount","ceil","j","i","row","Consumer","top","left","right","_this$appConfig","paddingBottomVal","paddingBottom","padding","statusBarCustomisation","appConfig","preferences","statusbarStyles","isFullScreenMode","translucent","stylesWithFs","ref","baseView","onLayout","handleLayout","zIndex","position","backgroundColor","INSTANCE","transparent","fill","tabbarBackgroundColor","d","Fragment","modalService","showMore","showModal","moreMenu","map","a","moreMenuRow","index","hideModal","menu","layout","filter","morebuttonlabel","morebuttoniconclass","updateState","renderWidget","isFixed","animateStyle","hideonscroll","transform","animated","opacity"],"sources":["tabbar.component.tsx"],"sourcesContent":["import React, { ReactNode } from 'react';\nimport { Text, View, TouchableOpacity, Dimensions, Keyboard, Animated, Easing, LayoutChangeEvent, \n NativeSyntheticEvent, NativeScrollEvent\n} from 'react-native';\nimport { ThemeProvider } from '@wavemaker/app-rn-runtime/styles/theme';\nimport { ModalConsumer, ModalOptions, ModalService } from '@wavemaker/app-rn-runtime/core/modal.service';\nimport WmIcon from '@wavemaker/app-rn-runtime/components/basic/icon/icon.component';\nimport NavigationService, { NavigationServiceConsumer } from '@wavemaker/app-rn-runtime/core/navigation.service';\nimport { BaseNavProps } from '@wavemaker/app-rn-runtime/components/navigation/basenav/basenav.props';\nimport { BaseNavComponent, BaseNavState, NavigationDataItem } from '@wavemaker/app-rn-runtime/components/navigation/basenav/basenav.component';\n\nimport WmTabbarProps from './tabbar.props';\nimport { DEFAULT_CLASS, WmTabbarStyles } from './tabbar.styles';\nimport Svg, { Path } from 'react-native-svg';\nimport { getPathDown } from './curve';\n// import { scale } from 'react-native-size-scaling';\nimport ThemeVariables from '@wavemaker/app-rn-runtime/styles/theme.variables';\nimport { FixedView } from '@wavemaker/app-rn-runtime/core/fixed-view.component';\nimport { EdgeInsets, SafeAreaInsetsContext } from 'react-native-safe-area-context';\nimport injector from '@wavemaker/app-rn-runtime/core/injector';\nimport AppConfig from '@wavemaker/app-rn-runtime/core/AppConfig';\n\ninterface TabDataItem extends NavigationDataItem {\n floating: boolean;\n indexBeforeMid: number;\n}\n\ninterface CustomScrollEvent {\n scrollDirection: number;\n scrollDelta: number;\n}\n\nconst scale = (n: number) => n;\n\nclass WmTabbarState<T extends BaseNavProps> extends BaseNavState<T> {\n showMore = false;\n modalOptions = {} as ModalOptions;\n dataItems: TabDataItem[] = [];\n}\n\nexport default class WmTabbar extends BaseNavComponent<WmTabbarProps, WmTabbarState<WmTabbarProps>, WmTabbarStyles> {\n\n private tabbarHeight = 0;\n private keyBoardShown = false;\n private destroyScrollListner: Function = null as any;\n private translateY = new Animated.Value(0);\n private insets: EdgeInsets | null = null;\n private appConfig = injector.get<AppConfig>('APP_CONFIG');\n private tabbarHeightWithInsets: number = 0;\n\n constructor(props: WmTabbarProps) {\n super(props, DEFAULT_CLASS, new WmTabbarProps(), new WmTabbarState());\n this.cleanup.push(Keyboard.addListener('keyboardWillShow', () => {\n this.keyBoardShown = true;\n this.forceUpdate();\n }).remove);\n this.cleanup.push(Keyboard.addListener('keyboardWillHide', () => {\n this.keyBoardShown = false;\n this.forceUpdate();\n }).remove);\n }\n\n private maxWidth = Dimensions.get(\"window\").width; \n private returnpathDown: any;\n\n onPropertyChange(name: string, $new: any, $old: any): void {\n super.onPropertyChange(name, $new, $old);\n switch(name){\n case 'hideonscroll':\n this.destroyScrollListner && this.destroyScrollListner();\n if($new) {\n this.subscribeToPageScroll();\n }\n break;\n }\n }\n\n renderTabItem(item: TabDataItem, testId: string, props: WmTabbarProps, onSelect: Function, floating = false) {\n\n const isActive = props.isActive && props.isActive(item);\n const getDisplayLabel = this.props.getDisplayExpression || ((label: string) => label);\n let increasedGap = Number(testId) === item?.indexBeforeMid && (this.state.dataItems.length % 2!=0) && ((props.classname || '').indexOf('clipped-tabbar') >= 0)\n ? [this.styles.tabItem, { paddingRight: 70 }]\n : [this.styles.tabItem];\n \n return (\n <TouchableOpacity \n {...this.getTestPropsForAction('item' + testId)}\n style={[increasedGap, floating? this.styles.centerHubItem: {}]}\n key={`${item.label}_${testId}`}\n onPress={() => onSelect && onSelect()}>\n <View key={item.key}>\n <View style={[isActive && !floating ? this.styles.activeTabItem : {}]}>\n <WmIcon\n styles={this.theme.mergeStyle({}, this.styles.tabIcon, floating? this.styles.centerHubIcon: {}, isActive ? this.styles.activeTabIcon : {})}\n iconclass={item.icon}\n ></WmIcon>\n </View>\n </View>\n <Text style={[this.styles.tabLabel, floating? this.styles.centerHubLabel: {}, isActive ? this.styles.activeTabLabel : {}]} numberOfLines={1}>\n {getDisplayLabel(item.label)}\n </Text>\n </TouchableOpacity>\n );\n }\n \n onItemSelect(item: NavigationDataItem, navigationService: NavigationService) {\n item.link && navigationService.openUrl(item.link);\n this.invokeEventCallback('onSelect', [null, this.proxy, item]);\n }\n\n prepareModalOptions(content: ReactNode) {\n const o = this.state.modalOptions;\n o.content = content;\n o.modalStyle = {\n bottom: this.tabbarHeight\n };\n o.contentStyle = this.styles.modalContent; \n return o;\n }\n\n isVisible(): boolean {\n return super.isVisible() && !this.keyBoardShown;\n }\n\n animateWithTiming(value: number, duratiion: number): void {\n Animated.timing(this.translateY, {\n toValue: value, \n easing: Easing.linear,\n duration: duratiion, \n useNativeDriver: false\n }).start()\n }\n\n subscribeToPageScroll(){\n this.tabbarHeightWithInsets = 0;\n this.destroyScrollListner = this.subscribe('scroll', (event: NativeSyntheticEvent<NativeScrollEvent>)=>{\n const { contentOffset, layoutMeasurement, contentSize } = event.nativeEvent ;\n const scrollPosition = contentOffset.y ;\n this.tabbarHeightWithInsets = this.tabbarHeightWithInsets ? this.tabbarHeightWithInsets : this.getLayout()?.height ;\n const visibleContentHeight = layoutMeasurement.height ;\n const endReached = (scrollPosition + visibleContentHeight + this.tabbarHeightWithInsets) >= contentSize.height ;\n const bottomInsets = this.insets?.bottom || 0\n const e = event as unknown as CustomScrollEvent;\n if(e.scrollDelta >= 2){\n if(e.scrollDirection < 0){\n this.animateWithTiming(0, 100)\n }else if(e.scrollDirection > 0) {\n this.animateWithTiming(this.tabbarHeightWithInsets + bottomInsets, 100)\n }\n }\n if(endReached){\n this.animateWithTiming(0, 0)\n }\n })\n }\n\n componentWillUnmount(): void {\n this.destroyScrollListner && this.destroyScrollListner();\n }\n\n renderContent(props: WmTabbarProps){\n let max = 5;\n const tabItems = this.state.dataItems;\n const tabItemsLength = tabItems.length;\n const isClippedTabbar = ((props.classname || '').indexOf('clipped-tabbar') >= 0) && (tabItemsLength % 2 !== 0);\n if (isClippedTabbar && tabItemsLength % 2 !== 0) {\n const middleIndex = Math.floor(tabItemsLength / 2);\n tabItems[middleIndex]['floating'] = true;\n tabItems[middleIndex - 1]['indexBeforeMid'] = middleIndex-1;\n }\n this.returnpathDown = getPathDown(this.maxWidth, 65 ,60,this.styles.root.height as number);\n const moreItems = [] as any[][];\n if (tabItems.length > max) {\n const moreItemsCount = Math.ceil((tabItems.length + 1 - max)/ max) * max;\n let j = 0;\n for (let i = max-1; i < moreItemsCount;) {\n const row = [];\n for (let j = 0; j < max; j++) {\n row[j] = tabItems[i++] || {key: 'tabItem' + i} as TabDataItem;\n }\n moreItems.push(row);\n }\n max = max - 1;\n }\n return (\n <SafeAreaInsetsContext.Consumer>\n {(insets = { top: 0, bottom: 0, left: 0, right: 0 }) => {\n this.insets = insets;\n const paddingBottomVal = this.styles.root.paddingBottom || this.styles.root.padding;\n const statusBarCustomisation = this.appConfig?.preferences?.statusbarStyles;\n const isFullScreenMode = !!statusBarCustomisation?.translucent;\n const stylesWithFs = isFullScreenMode ? {height: this.styles.root.height as number + (insets?.bottom || 0) as number, \n paddingBottom: (paddingBottomVal || 0) as number + (insets?.bottom || 0) as number} : {}\n return (\n <NavigationServiceConsumer>\n {(navigationService) =>(\n <View style={[this.styles.root, stylesWithFs]} \n ref={(ref)=> {this.baseView = ref as any}}\n onLayout={(event: LayoutChangeEvent) => this.handleLayout(event)} \n >\n {isClippedTabbar ? (\n <Svg width={this.maxWidth} height={scale(this.styles.root.height as number)} style={{zIndex: -1,position: 'absolute',backgroundColor: ThemeVariables.INSTANCE.transparent}}>\n <Path fill={ThemeVariables.INSTANCE.tabbarBackgroundColor} {...{ d: this.returnpathDown }}/>\n </Svg>\n ): <></>} \n <ModalConsumer>\n {(modalService: ModalService) => {\n if (this.state.showMore) {\n modalService.showModal(this.prepareModalOptions((\n <ThemeProvider value={this.theme} >\n <View style={this.styles.moreMenu}>\n {moreItems.map((a, i) =>\n (<View key={i} style={this.styles.moreMenuRow}>\n {a.map((item, index) => this.renderTabItem(item, i + '', props, () => this.onItemSelect(item, navigationService)))}\n </View>)\n )}\n </View>\n </ThemeProvider>)));\n } else {\n modalService.hideModal(this.state.modalOptions);\n }\n return null;\n }}\n </ModalConsumer>\n <View style={this.styles.menu}\n onLayout={e => { this.tabbarHeight = e.nativeEvent.layout.height}}> \n {tabItems.filter((item, i) => i < max)\n .map((item, i) => this.renderTabItem(item, i + '', props, () => this.onItemSelect(item, navigationService), item.floating))}\n {tabItems.length > max && (\n this.renderTabItem({\n label: props.morebuttonlabel,\n icon: props.morebuttoniconclass\n } as TabDataItem, 6666 +'', props, () => {\n this.updateState({showMore: !this.state.showMore} as WmTabbarState<WmTabbarProps>);\n })\n )}\n </View>\n </View>)}\n </NavigationServiceConsumer>\n )}}\n </SafeAreaInsetsContext.Consumer>\n )\n }\n\n renderWidget(props: WmTabbarProps) {\n this.isFixed = true;\n const animateStyle = props.hideonscroll ? {transform: [{translateY: this.translateY}]} : {};\n return <>\n <FixedView \n style={{...{bottom: 0, width:'100%'}, ...animateStyle}} \n theme={this.theme}\n animated={props.hideonscroll || false}>\n {this.renderContent(props)}\n </FixedView>\n <View style={{ opacity: 0}}>\n {this.renderContent(props)}\n </View>\n </>\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["BaseNavProps","WmTabbarProps","constructor","args","_defineProperty","item"],"sources":["tabbar.props.ts"],"sourcesContent":["import { BaseNavProps } from '../../navigation/basenav/basenav.props';\nimport WmTabbar from './tabbar.component';\n\nexport default class WmTabbarProps extends BaseNavProps {\n morebuttoniconclass? = 'wi wi-more-horiz';\n morebuttonlabel? = 'more';\n itemchildren?: string = 'children';\n isActive? = (item: any) => false;\n onSelect? : (event: any, widget: WmTabbar) => any;\n dataset?: any = [{\n 'label' : 'Home',\n 'icon' : 'wm-sl-r sl-home'\n },{\n 'label' : 'Analytics',\n 'icon' : 'wm-sl-r sl-graph-ascend'\n },{\n 'label' : 'Alerts',\n 'icon' : 'wm-sl-r sl-alarm-bell'\n },{\n 'label' : 'Settings',\n 'icon' : 'wm-sl-r sl-settings'\n
|
1
|
+
{"version":3,"names":["BaseNavProps","WmTabbarProps","constructor","args","_defineProperty","item"],"sources":["tabbar.props.ts"],"sourcesContent":["import { BaseNavProps } from '../../navigation/basenav/basenav.props';\nimport WmTabbar from './tabbar.component';\n\nexport default class WmTabbarProps extends BaseNavProps {\n morebuttoniconclass? = 'wi wi-more-horiz';\n morebuttonlabel? = 'more';\n itemchildren?: string = 'children';\n isActive? = (item: any) => false;\n onSelect? : (event: any, widget: WmTabbar) => any;\n dataset?: any = [{\n 'label' : 'Home',\n 'icon' : 'wm-sl-r sl-home'\n },{\n 'label' : 'Analytics',\n 'icon' : 'wm-sl-r sl-graph-ascend'\n },{\n 'label' : 'Alerts',\n 'icon' : 'wm-sl-r sl-alarm-bell'\n },{\n 'label' : 'Settings',\n 'icon' : 'wm-sl-r sl-settings'\n }];\n hideonscroll: boolean = false;\n}\n"],"mappings":";;;AAAA,SAASA,YAAY,QAAQ,wCAAwC;AAGrE,eAAe,MAAMC,aAAa,SAASD,YAAY,CAAC;EAAAE,YAAA,GAAAC,IAAA;IAAA,SAAAA,IAAA;IAAAC,eAAA,8BAC/B,kBAAkB;IAAAA,eAAA,0BACtB,MAAM;IAAAA,eAAA,uBACD,UAAU;IAAAA,eAAA,mBACrBC,IAAS,IAAK,KAAK;IAAAD,eAAA;IAAAA,eAAA,kBAEhB,CAAC;MACb,OAAO,EAAG,MAAM;MAChB,MAAM,EAAI;IACZ,CAAC,EAAC;MACA,OAAO,EAAG,WAAW;MACrB,MAAM,EAAI;IACZ,CAAC,EAAC;MACA,OAAO,EAAG,QAAQ;MAClB,MAAM,EAAI;IACZ,CAAC,EAAC;MACA,OAAO,EAAG,UAAU;MACpB,MAAM,EAAI;IACd,CAAC,CAAC;IAAAA,eAAA,uBACsB,KAAK;EAAA;AAC/B","ignoreList":[]}
|
package/core/AppConfig.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":[],"sources":["AppConfig.ts"],"sourcesContent":["export interface Drawer {\n setContent: (c: React.ReactNode) => void;\n getContent: () => React.ReactNode;\n setAnimation: (animation: string) => void;\n getAnimation: () => string;\n}\n\nexport default interface AppConfig {\n appId: string;\n assets: any;\n appProperties: any;\n appLocale: any;\n url: string;\n leftNavWidth: any;\n loadApp: boolean;\n refresh: (complete?: boolean) => void,\n currentPage?: any;\n pages?: any[];\n landingPage: string;\n partials?: any[];\n drawer: Drawer;\n app: any;\n spinner: any;\n setDrawerContent: any;\n theme: any;\n drawerType: any;\n preferences:any;\n getServiceDefinitions: any;\n loggedInUser: any;\n selectedLocale: string;\n revertLayoutToExpo50: boolean,\n diagnostics: {\n appStartTime: number,\n appReadyTime: number,\n pageStartTime: number,\n pageReadyTime: number\n }\n}"],"mappings":"","ignoreList":[]}
|
1
|
+
{"version":3,"names":[],"sources":["AppConfig.ts"],"sourcesContent":["export interface Drawer {\n setContent: (c: React.ReactNode) => void;\n getContent: () => React.ReactNode;\n setAnimation: (animation: string) => void;\n getAnimation: () => string;\n}\n\nexport default interface AppConfig {\n appId: string;\n assets: any;\n appProperties: any;\n appLocale: any;\n url: string;\n leftNavWidth: any;\n loadApp: boolean;\n refresh: (complete?: boolean) => void,\n currentPage?: any;\n pages?: any[];\n landingPage: string;\n partials?: any[];\n drawer: Drawer;\n app: any;\n spinner: any;\n setDrawerContent: any;\n theme: any;\n drawerType: any;\n preferences:any;\n getServiceDefinitions: any;\n loggedInUser: any;\n selectedLocale: string;\n revertLayoutToExpo50: boolean,\n diagnostics: {\n appStartTime: number,\n appReadyTime: number,\n pageStartTime: number,\n pageReadyTime: number\n }, \n pageScrollTopThreshold: number;\n}"],"mappings":"","ignoreList":[]}
|
package/core/base.component.js
CHANGED
@@ -4,7 +4,7 @@ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol"
|
|
4
4
|
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
5
5
|
import { assign, isUndefined, isNil } from 'lodash';
|
6
6
|
import React from 'react';
|
7
|
-
import { AccessibilityInfo, Platform, StyleSheet, View } from 'react-native';
|
7
|
+
import { AccessibilityInfo, Platform, StyleSheet, View, InteractionManager } from 'react-native';
|
8
8
|
import * as Animatable from 'react-native-animatable';
|
9
9
|
import ThemeVariables from '@wavemaker/app-rn-runtime/styles/theme.variables';
|
10
10
|
import { StyleProps, getStyleName } from '@wavemaker/app-rn-runtime/styles/style-props';
|
@@ -77,6 +77,7 @@ export class BaseComponent extends React.Component {
|
|
77
77
|
_defineProperty(this, "destroyed", false);
|
78
78
|
_defineProperty(this, "_showSkeleton", false);
|
79
79
|
_defineProperty(this, "isFixed", false);
|
80
|
+
_defineProperty(this, "isSticky", false);
|
80
81
|
_defineProperty(this, "notifier", new EventNotifier());
|
81
82
|
_defineProperty(this, "parentListenerDestroyers", []);
|
82
83
|
_defineProperty(this, "_background", /*#__PURE__*/React.createElement(React.Fragment, null));
|
@@ -87,6 +88,15 @@ export class BaseComponent extends React.Component {
|
|
87
88
|
_defineProperty(this, "_showView", true);
|
88
89
|
_defineProperty(this, "closestTappable", void 0);
|
89
90
|
_defineProperty(this, "componentNode", void 0);
|
91
|
+
_defineProperty(this, "layout", {
|
92
|
+
x: 0,
|
93
|
+
y: 0,
|
94
|
+
width: 0,
|
95
|
+
height: 0,
|
96
|
+
px: 0,
|
97
|
+
py: 0
|
98
|
+
});
|
99
|
+
_defineProperty(this, "baseView", View);
|
90
100
|
_defineProperty(this, "hideSkeletonInPageContentWhenDisabledInPage", () => {
|
91
101
|
var _this$parent$state;
|
92
102
|
const isPageContentWidget = this.defaultClass && this.defaultClass === 'app-page-content';
|
@@ -252,14 +262,14 @@ export class BaseComponent extends React.Component {
|
|
252
262
|
this.initialized = true;
|
253
263
|
}
|
254
264
|
componentWillAttach() {
|
255
|
-
if (this.isFixed) {
|
265
|
+
if (this.isFixed || this.isSticky) {
|
256
266
|
this.setState({
|
257
267
|
hide: false
|
258
268
|
});
|
259
269
|
}
|
260
270
|
}
|
261
271
|
componentWillDetach() {
|
262
|
-
if (this.isFixed) {
|
272
|
+
if (this.isFixed || this.isSticky) {
|
263
273
|
this.setState({
|
264
274
|
hide: true
|
265
275
|
});
|
@@ -318,7 +328,7 @@ export class BaseComponent extends React.Component {
|
|
318
328
|
this.parent.componentNode.add(this.componentNode);
|
319
329
|
this.notifier.setParent(parent.notifier);
|
320
330
|
this.parentListenerDestroyers = [this.parent.subscribe('forceUpdate', () => {
|
321
|
-
this.
|
331
|
+
this.forceUpdate();
|
322
332
|
}), this.parent.subscribe('destroy', () => {
|
323
333
|
this.destroyParentListeners();
|
324
334
|
})];
|
@@ -327,7 +337,7 @@ export class BaseComponent extends React.Component {
|
|
327
337
|
getName() {
|
328
338
|
return this.props.name;
|
329
339
|
}
|
330
|
-
handleLayout(event) {
|
340
|
+
handleLayout(event, ref = null) {
|
331
341
|
const key = this.getName && this.getName();
|
332
342
|
if (key) {
|
333
343
|
const newLayoutPosition = {
|
@@ -337,6 +347,26 @@ export class BaseComponent extends React.Component {
|
|
337
347
|
}
|
338
348
|
};
|
339
349
|
setPosition(newLayoutPosition);
|
350
|
+
const componentRef = ref !== null ? ref : this.baseView;
|
351
|
+
// Layout values by measure
|
352
|
+
if (componentRef !== null && componentRef !== void 0 && componentRef.measure) {
|
353
|
+
const updateLayout = () => {
|
354
|
+
componentRef.measure((x = 0, y = 0, width = 0, height = 0, px = 0, py = 0) => {
|
355
|
+
this.layout = {
|
356
|
+
x,
|
357
|
+
y,
|
358
|
+
width,
|
359
|
+
height,
|
360
|
+
px,
|
361
|
+
py
|
362
|
+
};
|
363
|
+
});
|
364
|
+
};
|
365
|
+
updateLayout();
|
366
|
+
InteractionManager.runAfterInteractions(() => {
|
367
|
+
requestAnimationFrame(updateLayout);
|
368
|
+
});
|
369
|
+
}
|
340
370
|
}
|
341
371
|
}
|
342
372
|
copyStyles(property, from, to) {
|
@@ -450,6 +480,9 @@ export class BaseComponent extends React.Component {
|
|
450
480
|
getLayoutOfWidget(name) {
|
451
481
|
return getPosition(name);
|
452
482
|
}
|
483
|
+
getLayout() {
|
484
|
+
return this.layout;
|
485
|
+
}
|
453
486
|
scrollToTop() {
|
454
487
|
this.notify('scrollToPosition', [{
|
455
488
|
x: 0,
|