@momo-kits/foundation 0.81.43-beta.1 → 0.81.43-beta.12
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/Application/BottomTab.tsx +10 -26
- package/Application/Components.tsx +77 -43
- package/Application/Navigator.ts +7 -0
- package/Application/types.ts +10 -6
- package/Application/utils.tsx +15 -0
- package/Badge/styles.ts +5 -2
- package/Layout/Card.tsx +8 -8
- package/Layout/ItemList.tsx +33 -39
- package/Layout/Section.tsx +3 -4
- package/package.json +1 -1
|
@@ -3,45 +3,29 @@ import {Platform} from 'react-native';
|
|
|
3
3
|
import {BottomTabProps, NavigationScreenProps} from './types';
|
|
4
4
|
import {createBottomTabNavigator} from '@react-navigation/bottom-tabs';
|
|
5
5
|
import {createStackNavigator} from '@react-navigation/stack';
|
|
6
|
-
import {useSafeAreaInsets} from 'react-native-safe-area-context';
|
|
7
|
-
import {NavigationContainer} from '@react-navigation/native';
|
|
8
6
|
import {Icon} from '../Icon';
|
|
9
7
|
import {Text} from '../Text';
|
|
10
8
|
import {ApplicationContext} from './index';
|
|
11
9
|
import {getStackOptions} from './utils';
|
|
12
10
|
import StackScreen from './StackScreen';
|
|
11
|
+
import {useSafeAreaInsets} from 'react-native-safe-area-context';
|
|
13
12
|
|
|
14
13
|
const Tab = createBottomTabNavigator();
|
|
15
14
|
const Stack = createStackNavigator();
|
|
16
15
|
|
|
17
16
|
const TabScreen: React.FC<NavigationScreenProps> = ({route}) => {
|
|
18
|
-
if (route.params?.nested) {
|
|
19
|
-
return (
|
|
20
|
-
<Stack.Navigator>
|
|
21
|
-
<Stack.Screen
|
|
22
|
-
name="Stack"
|
|
23
|
-
component={StackScreen}
|
|
24
|
-
initialParams={{screen: route.params?.screen}}
|
|
25
|
-
options={{...getStackOptions(), ...route.params?.options}}
|
|
26
|
-
/>
|
|
27
|
-
</Stack.Navigator>
|
|
28
|
-
);
|
|
29
|
-
}
|
|
30
17
|
return (
|
|
31
|
-
<
|
|
32
|
-
<Stack.
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
</Stack.Navigator>
|
|
40
|
-
</NavigationContainer>
|
|
18
|
+
<Stack.Navigator>
|
|
19
|
+
<Stack.Screen
|
|
20
|
+
name="Stack"
|
|
21
|
+
component={StackScreen}
|
|
22
|
+
initialParams={{screen: route.params?.screen}}
|
|
23
|
+
options={{...getStackOptions(), ...route.params?.options}}
|
|
24
|
+
/>
|
|
25
|
+
</Stack.Navigator>
|
|
41
26
|
);
|
|
42
27
|
};
|
|
43
28
|
const BottomTab: React.FC<BottomTabProps> = ({
|
|
44
|
-
nested,
|
|
45
29
|
tabs,
|
|
46
30
|
listeners,
|
|
47
31
|
navigation,
|
|
@@ -77,7 +61,7 @@ const BottomTab: React.FC<BottomTabProps> = ({
|
|
|
77
61
|
key={item.name}
|
|
78
62
|
name={item.name}
|
|
79
63
|
component={TabScreen}
|
|
80
|
-
initialParams={
|
|
64
|
+
initialParams={item}
|
|
81
65
|
listeners={listeners}
|
|
82
66
|
options={{
|
|
83
67
|
tabBarLabel: ({color, focused}) => {
|
|
@@ -95,7 +95,7 @@ const styles = StyleSheet.create({
|
|
|
95
95
|
badge: {
|
|
96
96
|
position: 'absolute',
|
|
97
97
|
top: -8,
|
|
98
|
-
right: -
|
|
98
|
+
right: -6,
|
|
99
99
|
},
|
|
100
100
|
});
|
|
101
101
|
|
|
@@ -127,17 +127,19 @@ const NavigationButton: React.FC<NavigationButtonProps> = ({
|
|
|
127
127
|
}, [badgeType, badgeValue]);
|
|
128
128
|
|
|
129
129
|
return (
|
|
130
|
-
<
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
130
|
+
<View style={{width: scaleSize(28)}}>
|
|
131
|
+
<TouchableOpacity
|
|
132
|
+
accessibilityLabel={`NavigationButton/${accessibilityLabel}`}
|
|
133
|
+
style={[styles.navigationButton, buttonStyle]}
|
|
134
|
+
onPress={onPress}>
|
|
135
|
+
<Icon
|
|
136
|
+
source={icon}
|
|
137
|
+
color={tintColor ?? theme.colors.text.default}
|
|
138
|
+
size={20}
|
|
139
|
+
/>
|
|
140
|
+
</TouchableOpacity>
|
|
139
141
|
{renderBadge()}
|
|
140
|
-
</
|
|
142
|
+
</View>
|
|
141
143
|
);
|
|
142
144
|
};
|
|
143
145
|
|
|
@@ -347,10 +349,14 @@ const HeaderRightAction: React.FC<any> = ({children, ...restProps}) => {
|
|
|
347
349
|
return <View style={styles.headerRightButton}>{renderAction()}</View>;
|
|
348
350
|
};
|
|
349
351
|
|
|
350
|
-
const HeaderToolkitAction: React.FC<any> = ({
|
|
352
|
+
const HeaderToolkitAction: React.FC<any> = ({
|
|
353
|
+
tintColor,
|
|
354
|
+
pinnedTool = {key: '', badgeValue: undefined, badgeTye: undefined},
|
|
355
|
+
preventBack,
|
|
356
|
+
}) => {
|
|
351
357
|
const {theme, navigator} = useContext(ApplicationContext);
|
|
352
|
-
const [toolConfig, setToolConfig] = useState<
|
|
353
|
-
const {appCode,
|
|
358
|
+
const [toolConfig, setToolConfig] = useState<any>();
|
|
359
|
+
const {appCode, onAction} = toolConfig ?? {};
|
|
354
360
|
|
|
355
361
|
let backgroundColor;
|
|
356
362
|
if (tintColor != Colors.black_01) {
|
|
@@ -361,20 +367,21 @@ const HeaderToolkitAction: React.FC<any> = ({tintColor}) => {
|
|
|
361
367
|
if (navigator?.toolkitConfig) {
|
|
362
368
|
setToolConfig(navigator?.toolkitConfig);
|
|
363
369
|
} else {
|
|
364
|
-
navigator?.requestApi('
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
370
|
+
navigator?.requestApi('getToolkitConfig', [undefined], (config: any) => {
|
|
371
|
+
navigator.toolkitConfig = {
|
|
372
|
+
configs: [
|
|
373
|
+
...config?.miniappTools?.customTools,
|
|
374
|
+
...config?.defaultTools,
|
|
375
|
+
],
|
|
376
|
+
appCode: config?.appCode,
|
|
377
|
+
};
|
|
378
|
+
setToolConfig({
|
|
379
|
+
configs: [
|
|
380
|
+
...config?.miniappTools?.customTools,
|
|
381
|
+
...config?.defaultTools,
|
|
382
|
+
],
|
|
383
|
+
appCode: config?.appCode,
|
|
384
|
+
});
|
|
378
385
|
});
|
|
379
386
|
}
|
|
380
387
|
}, []);
|
|
@@ -417,39 +424,66 @@ const HeaderToolkitAction: React.FC<any> = ({tintColor}) => {
|
|
|
417
424
|
};
|
|
418
425
|
}, [appCode]);
|
|
419
426
|
|
|
420
|
-
const onUtilityTool = () => {
|
|
421
|
-
onAction?.('onUtilityTool');
|
|
422
|
-
navigator?.requestApi(type, undefined, undefined);
|
|
423
|
-
};
|
|
424
|
-
|
|
425
427
|
const onMore = () => {
|
|
426
428
|
onAction?.('onMore');
|
|
427
|
-
navigator?.requestApi(
|
|
429
|
+
navigator?.requestApi(
|
|
430
|
+
'showTools',
|
|
431
|
+
[toolConfig],
|
|
432
|
+
(res: {item: {action?: string; key: string}}) => {
|
|
433
|
+
const {item} = res;
|
|
434
|
+
navigator?.toolkitCallback?.(item);
|
|
435
|
+
},
|
|
436
|
+
);
|
|
428
437
|
};
|
|
429
438
|
|
|
430
439
|
const onClose = () => {
|
|
431
|
-
|
|
432
|
-
|
|
440
|
+
if (preventBack) {
|
|
441
|
+
navigator?.showModal({
|
|
442
|
+
screen: () => (
|
|
443
|
+
<PopupNotify
|
|
444
|
+
{...preventBack}
|
|
445
|
+
primary={{
|
|
446
|
+
title: preventBack.primary.title,
|
|
447
|
+
onPress: () => {
|
|
448
|
+
preventBack?.primary.onPress();
|
|
449
|
+
navigator?.requestApi('dismiss', undefined, undefined);
|
|
450
|
+
},
|
|
451
|
+
}}
|
|
452
|
+
/>
|
|
453
|
+
),
|
|
454
|
+
});
|
|
455
|
+
} else {
|
|
456
|
+
navigator?.requestApi('dismiss', undefined, undefined);
|
|
457
|
+
}
|
|
433
458
|
};
|
|
434
459
|
|
|
435
|
-
const
|
|
436
|
-
|
|
460
|
+
const renderPinnedTool = () => {
|
|
461
|
+
const pinTool = toolConfig?.configs?.find(
|
|
462
|
+
(i: any) => i.key === pinnedTool.key,
|
|
463
|
+
);
|
|
464
|
+
|
|
465
|
+
const {badgeValue, badgeType} = pinnedTool;
|
|
466
|
+
const {icon} = pinTool || '';
|
|
467
|
+
|
|
468
|
+
if (pinTool && pinnedTool)
|
|
437
469
|
return (
|
|
438
470
|
<NavigationButton
|
|
439
471
|
accessibilityLabel={'UtilityTool'}
|
|
440
|
-
icon={
|
|
472
|
+
icon={icon as string}
|
|
441
473
|
tintColor={tintColor}
|
|
442
|
-
|
|
474
|
+
badgeValue={badgeValue}
|
|
475
|
+
badgeType={badgeType}
|
|
476
|
+
onPress={() => {
|
|
477
|
+
navigator?.toolkitCallback?.(pinnedTool.key);
|
|
478
|
+
}}
|
|
443
479
|
/>
|
|
444
480
|
);
|
|
445
|
-
}
|
|
446
|
-
return null;
|
|
447
481
|
};
|
|
448
482
|
|
|
449
483
|
if (toolConfig) {
|
|
450
484
|
return (
|
|
451
485
|
<View style={styles.headerRightButton}>
|
|
452
|
-
{
|
|
486
|
+
{renderPinnedTool()}
|
|
453
487
|
<View
|
|
454
488
|
style={[
|
|
455
489
|
styles.toolkitContainer,
|
package/Application/Navigator.ts
CHANGED
|
@@ -13,6 +13,7 @@ class Navigator {
|
|
|
13
13
|
maxApi?: any;
|
|
14
14
|
trackingInfo?: TrackingInfo;
|
|
15
15
|
dismissData?: any;
|
|
16
|
+
toolkitCallback?: (item: any) => void;
|
|
16
17
|
|
|
17
18
|
constructor(navigation: any) {
|
|
18
19
|
this.ref = navigation;
|
|
@@ -121,6 +122,12 @@ class Navigator {
|
|
|
121
122
|
this.maxApi[func]?.(...args, callback);
|
|
122
123
|
}
|
|
123
124
|
};
|
|
125
|
+
|
|
126
|
+
setToolkitCallback = (
|
|
127
|
+
callback: (item: {key: string; action: string}) => void,
|
|
128
|
+
) => {
|
|
129
|
+
this.toolkitCallback = callback;
|
|
130
|
+
};
|
|
124
131
|
}
|
|
125
132
|
|
|
126
133
|
export default Navigator;
|
package/Application/types.ts
CHANGED
|
@@ -128,8 +128,14 @@ export type NavigationButtonProps = {
|
|
|
128
128
|
useBorder?: boolean;
|
|
129
129
|
onPress: () => void;
|
|
130
130
|
accessibilityLabel?: string;
|
|
131
|
-
badgeType?: 'dot' | 'number'
|
|
132
|
-
badgeValue?: number
|
|
131
|
+
badgeType?: 'dot' | 'number';
|
|
132
|
+
badgeValue?: number;
|
|
133
|
+
};
|
|
134
|
+
|
|
135
|
+
export type PinnedToolType = {
|
|
136
|
+
key: string;
|
|
137
|
+
badgeValue?: number;
|
|
138
|
+
badgeType?: 'number' | 'dot';
|
|
133
139
|
};
|
|
134
140
|
|
|
135
141
|
export interface NavigationOptions extends StackNavigationOptions {
|
|
@@ -138,6 +144,7 @@ export interface NavigationOptions extends StackNavigationOptions {
|
|
|
138
144
|
surface?: boolean;
|
|
139
145
|
hiddenBack?: boolean;
|
|
140
146
|
customTitle?: TitleCustomProps;
|
|
147
|
+
pinnedTool?: PinnedToolType;
|
|
141
148
|
}
|
|
142
149
|
|
|
143
150
|
export interface HeaderBackProps extends NavigationButtonProps {
|
|
@@ -166,9 +173,7 @@ export type TitleCustomProps = {
|
|
|
166
173
|
export type HeaderToolkitProps = {
|
|
167
174
|
[key: string]: any;
|
|
168
175
|
appCode: string;
|
|
169
|
-
|
|
170
|
-
type: string;
|
|
171
|
-
onAction?: (action: string) => void;
|
|
176
|
+
configs: any[];
|
|
172
177
|
};
|
|
173
178
|
|
|
174
179
|
export type HeaderAnimatedProps = {
|
|
@@ -188,7 +193,6 @@ export type BottomTabItemProps = {
|
|
|
188
193
|
};
|
|
189
194
|
|
|
190
195
|
export type BottomTabProps = {
|
|
191
|
-
nested?: boolean;
|
|
192
196
|
tabs: BottomTabItemProps[];
|
|
193
197
|
initialRouteName?: string;
|
|
194
198
|
navigation: Navigation;
|
package/Application/utils.tsx
CHANGED
|
@@ -126,6 +126,21 @@ const getOptions = (params: NavigationOptions, theme: Theme) => {
|
|
|
126
126
|
};
|
|
127
127
|
}
|
|
128
128
|
|
|
129
|
+
if (params.pinnedTool) {
|
|
130
|
+
options = {
|
|
131
|
+
...options,
|
|
132
|
+
headerRight: (props: any) => {
|
|
133
|
+
return (
|
|
134
|
+
<HeaderToolkitAction
|
|
135
|
+
preventBack={params.preventBack}
|
|
136
|
+
pinnedTool={params.pinnedTool}
|
|
137
|
+
{...props}
|
|
138
|
+
/>
|
|
139
|
+
);
|
|
140
|
+
},
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
|
|
129
144
|
return {
|
|
130
145
|
...params,
|
|
131
146
|
...options,
|
package/Badge/styles.ts
CHANGED
|
@@ -4,13 +4,16 @@ import {scaleSize} from '../Text';
|
|
|
4
4
|
|
|
5
5
|
export default StyleSheet.create({
|
|
6
6
|
badge: {
|
|
7
|
+
paddingHorizontal: Spacing.XS,
|
|
7
8
|
borderRadius: Radius.M,
|
|
8
9
|
justifyContent: 'center',
|
|
10
|
+
alignItems: 'center',
|
|
9
11
|
height: scaleSize(16),
|
|
12
|
+
minWidth: scaleSize(16),
|
|
10
13
|
flexDirection: 'row',
|
|
14
|
+
borderWidth: 1,
|
|
11
15
|
borderColor: Colors.black_01,
|
|
12
|
-
|
|
13
|
-
alignItems: 'center',
|
|
16
|
+
alignSelf: 'baseline',
|
|
14
17
|
},
|
|
15
18
|
dot: {
|
|
16
19
|
width: 16,
|
package/Layout/Card.tsx
CHANGED
|
@@ -29,7 +29,7 @@ const Card: React.FC<CardProps> = ({
|
|
|
29
29
|
useShadow = false,
|
|
30
30
|
...props
|
|
31
31
|
}) => {
|
|
32
|
-
const {showGrid
|
|
32
|
+
const {showGrid} = useContext(ApplicationContext);
|
|
33
33
|
const {numberOfColumns} = useGridSystem();
|
|
34
34
|
|
|
35
35
|
const gutterSize = 8;
|
|
@@ -47,7 +47,6 @@ const Card: React.FC<CardProps> = ({
|
|
|
47
47
|
return span * sizePerSpan + (span - 1) * gutterSize;
|
|
48
48
|
},
|
|
49
49
|
};
|
|
50
|
-
|
|
51
50
|
/**
|
|
52
51
|
* render overlay only dev mode
|
|
53
52
|
*/
|
|
@@ -108,9 +107,8 @@ const Card: React.FC<CardProps> = ({
|
|
|
108
107
|
if (Array.isArray(children)) {
|
|
109
108
|
let cursor = 0;
|
|
110
109
|
let rows: any[] = [];
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
const item = arrayChild[i];
|
|
110
|
+
for (let i = 0; i < children.length; ++i) {
|
|
111
|
+
const item = children[i];
|
|
114
112
|
const totalSpan = rows
|
|
115
113
|
.concat([item])
|
|
116
114
|
.map(i => i.props?.widthSpan)
|
|
@@ -126,7 +124,7 @@ const Card: React.FC<CardProps> = ({
|
|
|
126
124
|
rows = [item];
|
|
127
125
|
}
|
|
128
126
|
|
|
129
|
-
if (i ==
|
|
127
|
+
if (i == children.length - 1) {
|
|
130
128
|
cursor += 1;
|
|
131
129
|
element.push(addRowView(rows, cursor, true));
|
|
132
130
|
}
|
|
@@ -140,21 +138,23 @@ const Card: React.FC<CardProps> = ({
|
|
|
140
138
|
return element;
|
|
141
139
|
};
|
|
142
140
|
|
|
141
|
+
const {theme} = useContext(ApplicationContext);
|
|
143
142
|
return (
|
|
144
143
|
<GridContext.Provider value={gridContext}>
|
|
145
144
|
<View
|
|
146
145
|
{...props}
|
|
147
146
|
accessibilityLabel={`Card`}
|
|
148
147
|
style={[
|
|
149
|
-
{backgroundColor: theme.colors.background.surface},
|
|
150
148
|
style,
|
|
151
149
|
styles.protectedStyle,
|
|
152
150
|
styles.card,
|
|
153
151
|
{
|
|
154
152
|
width: widthSection,
|
|
155
153
|
marginHorizontal: margin,
|
|
154
|
+
backgroundColor: backgroundImage
|
|
155
|
+
? undefined
|
|
156
|
+
: theme.colors.background.surface,
|
|
156
157
|
},
|
|
157
|
-
!!backgroundImage && {backgroundColor: undefined},
|
|
158
158
|
useShadow && Shadow.Light,
|
|
159
159
|
]}>
|
|
160
160
|
{!!backgroundImage && (
|
package/Layout/ItemList.tsx
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React, {
|
|
1
|
+
import React, {FC, useContext} from 'react';
|
|
2
2
|
import {FlatList, FlatListProps, View} from 'react-native';
|
|
3
3
|
import Item, {SpanNumber} from './Item';
|
|
4
4
|
import {GridContext} from './index';
|
|
@@ -11,45 +11,39 @@ export interface ItemListProps extends FlatListProps<any> {
|
|
|
11
11
|
widthSpan?: SpanNumber;
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
-
const ItemList =
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
) =>
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
const _renderItem = (item: any) => {
|
|
30
|
-
if (indexBegin?.includes(item?.index)) {
|
|
31
|
-
return <Item widthSpan={widthItem}>{renderItem?.(item)}</Item>;
|
|
32
|
-
}
|
|
33
|
-
return (
|
|
34
|
-
<View style={{paddingLeft: gutterSize}}>
|
|
35
|
-
<Item widthSpan={widthItem}>{renderItem?.(item)}</Item>
|
|
36
|
-
</View>
|
|
37
|
-
);
|
|
38
|
-
};
|
|
39
|
-
|
|
14
|
+
const ItemList: FC<ItemListProps> = ({
|
|
15
|
+
renderItem,
|
|
16
|
+
widthSpan,
|
|
17
|
+
style,
|
|
18
|
+
contentContainerStyle,
|
|
19
|
+
...props
|
|
20
|
+
}) => {
|
|
21
|
+
const {gutterSize, numberOfColumns} = useContext(GridContext);
|
|
22
|
+
const widthItem = (widthSpan ?? numberOfColumns) as SpanNumber;
|
|
23
|
+
const numColumns = Math.floor(numberOfColumns / widthItem);
|
|
24
|
+
const indexBegin = props?.data?.map((_i, index) => index * numColumns);
|
|
25
|
+
const _renderItem = (item: any) => {
|
|
26
|
+
if (indexBegin?.includes(item?.index)) {
|
|
27
|
+
return <Item widthSpan={widthItem}>{renderItem?.(item)}</Item>;
|
|
28
|
+
}
|
|
40
29
|
return (
|
|
41
|
-
<
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
numColumns={numColumns}
|
|
45
|
-
renderItem={_renderItem}
|
|
46
|
-
horizontal={false}
|
|
47
|
-
ItemSeparatorComponent={() => <View style={{height: gutterSize}} />}
|
|
48
|
-
style={[style, styles.protectedStyle]}
|
|
49
|
-
contentContainerStyle={[contentContainerStyle, styles.protectedStyle]}
|
|
50
|
-
/>
|
|
30
|
+
<View style={{paddingLeft: gutterSize}}>
|
|
31
|
+
<Item widthSpan={widthItem}>{renderItem?.(item)}</Item>
|
|
32
|
+
</View>
|
|
51
33
|
);
|
|
52
|
-
}
|
|
53
|
-
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
return (
|
|
37
|
+
<FlatList
|
|
38
|
+
{...props}
|
|
39
|
+
numColumns={numColumns}
|
|
40
|
+
renderItem={_renderItem}
|
|
41
|
+
horizontal={false}
|
|
42
|
+
ItemSeparatorComponent={() => <View style={{height: gutterSize}} />}
|
|
43
|
+
style={[style, styles.protectedStyle]}
|
|
44
|
+
contentContainerStyle={[contentContainerStyle, styles.protectedStyle]}
|
|
45
|
+
/>
|
|
46
|
+
);
|
|
47
|
+
};
|
|
54
48
|
|
|
55
49
|
export default ItemList;
|
package/Layout/Section.tsx
CHANGED
|
@@ -107,9 +107,8 @@ const Section: React.FC<SectionProps> = ({
|
|
|
107
107
|
if (Array.isArray(children)) {
|
|
108
108
|
let cursor = 0;
|
|
109
109
|
let rows: any[] = [];
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
const item = arrayChild[i];
|
|
110
|
+
for (let i = 0; i < children.length; ++i) {
|
|
111
|
+
const item = children[i];
|
|
113
112
|
const totalSpan = rows
|
|
114
113
|
.concat([item])
|
|
115
114
|
.map(i => i.props?.widthSpan)
|
|
@@ -125,7 +124,7 @@ const Section: React.FC<SectionProps> = ({
|
|
|
125
124
|
rows = [item];
|
|
126
125
|
}
|
|
127
126
|
|
|
128
|
-
if (i ==
|
|
127
|
+
if (i == children.length - 1) {
|
|
129
128
|
cursor += 1;
|
|
130
129
|
element.push(addRowView(rows, cursor, true));
|
|
131
130
|
}
|