@axelor/aos-mobile-ui 9.0.13 → 9.1.0

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.
Files changed (61) hide show
  1. package/lib/components/atoms/KeyboardAvoidingScrollView/KeyboardAvoidingScrollView.js +7 -2
  2. package/lib/components/atoms/KeyboardAvoidingScrollView/KeyboardAvoidingScrollView.js.map +1 -1
  3. package/lib/components/molecules/BottomSheet/BottomSheet.d.ts +10 -0
  4. package/lib/components/molecules/BottomSheet/BottomSheet.js +157 -0
  5. package/lib/components/molecules/BottomSheet/BottomSheet.js.map +1 -0
  6. package/lib/components/molecules/CardIconButton/CardIconButton.d.ts +4 -3
  7. package/lib/components/molecules/CardIconButton/CardIconButton.js +5 -4
  8. package/lib/components/molecules/CardIconButton/CardIconButton.js.map +1 -1
  9. package/lib/components/molecules/IconInput/IconInput.d.ts +2 -2
  10. package/lib/components/molecules/IconInput/IconInput.js +8 -8
  11. package/lib/components/molecules/IconInput/IconInput.js.map +1 -1
  12. package/lib/components/molecules/Image/Image.d.ts +1 -1
  13. package/lib/components/molecules/UnorderedList/UnorderedList.d.ts +2 -1
  14. package/lib/components/molecules/UnorderedList/UnorderedList.js +2 -2
  15. package/lib/components/molecules/UnorderedList/UnorderedList.js.map +1 -1
  16. package/lib/components/molecules/ViewAllContainer/ViewAllContainer.d.ts +1 -1
  17. package/lib/components/molecules/index.d.ts +1 -0
  18. package/lib/components/molecules/index.js +1 -0
  19. package/lib/components/molecules/index.js.map +1 -1
  20. package/lib/components/organisms/ActionSheet/ActionSheet.d.ts +14 -0
  21. package/lib/components/organisms/ActionSheet/ActionSheet.js +65 -0
  22. package/lib/components/organisms/ActionSheet/ActionSheet.js.map +1 -0
  23. package/lib/components/organisms/GridView/CellView.js +3 -1
  24. package/lib/components/organisms/GridView/CellView.js.map +1 -1
  25. package/lib/components/organisms/GridView/GridHeader.d.ts +12 -0
  26. package/lib/components/organisms/GridView/GridHeader.js +58 -0
  27. package/lib/components/organisms/GridView/GridHeader.js.map +1 -0
  28. package/lib/components/organisms/GridView/GridView.d.ts +12 -7
  29. package/lib/components/organisms/GridView/GridView.js +31 -36
  30. package/lib/components/organisms/GridView/GridView.js.map +1 -1
  31. package/lib/components/organisms/GridView/display.helpers.d.ts +3 -0
  32. package/lib/components/organisms/GridView/display.helpers.js +38 -0
  33. package/lib/components/organisms/GridView/display.helpers.js.map +1 -0
  34. package/lib/components/organisms/GridView/index.d.ts +4 -0
  35. package/lib/components/organisms/GridView/index.js +21 -0
  36. package/lib/components/organisms/GridView/index.js.map +1 -0
  37. package/lib/components/organisms/GridView/type.d.ts +10 -0
  38. package/lib/components/organisms/GridView/type.js +19 -0
  39. package/lib/components/organisms/GridView/type.js.map +1 -0
  40. package/lib/components/organisms/ImageBubble/ImageBubble.d.ts +1 -1
  41. package/lib/components/organisms/InfoButton/InfoButton.d.ts +2 -1
  42. package/lib/components/organisms/InfoButton/InfoButton.js +2 -2
  43. package/lib/components/organisms/InfoButton/InfoButton.js.map +1 -1
  44. package/lib/components/organisms/MultiValuePicker/MultiValuePicker.js +1 -0
  45. package/lib/components/organisms/MultiValuePicker/MultiValuePicker.js.map +1 -1
  46. package/lib/components/organisms/ScrollGridView/ScrollGridView.d.ts +23 -0
  47. package/lib/components/organisms/ScrollGridView/ScrollGridView.js +134 -0
  48. package/lib/components/organisms/ScrollGridView/ScrollGridView.js.map +1 -0
  49. package/lib/components/organisms/ScrollGridView/useGridSelection.d.ts +2 -0
  50. package/lib/components/organisms/ScrollGridView/useGridSelection.js +66 -0
  51. package/lib/components/organisms/ScrollGridView/useGridSelection.js.map +1 -0
  52. package/lib/components/organisms/ScrollList/ScrollList.js +1 -1
  53. package/lib/components/organisms/ScrollList/ScrollList.js.map +1 -1
  54. package/lib/components/organisms/index.d.ts +3 -1
  55. package/lib/components/organisms/index.js +3 -1
  56. package/lib/components/organisms/index.js.map +1 -1
  57. package/lib/components/templates/ObjectCard/ObjectCard.d.ts +3 -3
  58. package/lib/components/templates/index.d.ts +1 -1
  59. package/lib/components/templates/index.js +1 -1
  60. package/lib/components/templates/index.js.map +1 -1
  61. package/package.json +1 -1
@@ -1,15 +1,20 @@
1
1
  import React from 'react';
2
- interface Column {
3
- key: string;
4
- title: string;
5
- width?: number;
6
- getValue?: (row: any) => any;
7
- }
8
- declare const GridView: ({ style, title, columns, data, translator, }: {
2
+ import { Column } from './type';
3
+ declare const GridView: ({ styleContainer, style, title, columns, data, transparent, translator, onRowPress, sortable, sortField, sortOrder, onSortChange, hideHeader, onHorizontalScroll, containerWidth, }: {
4
+ styleContainer?: any;
9
5
  style?: any;
10
6
  title?: string;
11
7
  columns: Column[];
12
8
  data: any[];
9
+ transparent?: boolean;
13
10
  translator?: (value: string) => string;
11
+ onRowPress?: (row: any) => void;
12
+ sortable?: boolean;
13
+ sortField?: string;
14
+ sortOrder?: "asc" | "desc";
15
+ onSortChange?: (field: string) => void;
16
+ hideHeader?: boolean;
17
+ onHorizontalScroll?: (x: number) => void;
18
+ containerWidth?: number;
14
19
  }) => React.JSX.Element;
15
20
  export default GridView;
@@ -16,51 +16,49 @@
16
16
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
17
17
  */
18
18
  import React, { useCallback, useMemo } from 'react';
19
- import { Dimensions, ScrollView, StyleSheet, View } from 'react-native';
19
+ import { ScrollView, StyleSheet, TouchableOpacity, View } from 'react-native';
20
20
  import { checkNullString } from '../../../utils';
21
21
  import { Card, Text } from '../../atoms';
22
22
  import CellView from './CellView';
23
- const COLUMN_DEFAULT_WIDTH = 70;
23
+ import GridHeader from './GridHeader';
24
+ import { computeColumnWidth, computeColumnScale } from './display.helpers';
25
+ import { ROW_MIN_HEIGHT } from './type';
24
26
  const CARD_PADDING = '2.5%';
25
- const GridView = ({ style, title, columns, data, translator = t => t, }) => {
26
- const columnWidth = useMemo(() => {
27
- if (!Array.isArray(columns) || columns.length === 0) {
28
- return COLUMN_DEFAULT_WIDTH;
29
- }
30
- const width = (Dimensions.get('window').width * 0.85) / columns.length;
31
- return width < COLUMN_DEFAULT_WIDTH ? COLUMN_DEFAULT_WIDTH : width;
32
- }, [columns]);
33
- const renderHeader = useCallback(() => {
34
- return (<View style={styles.rowContainer} testID="gridViewHeaderContainer">
35
- {columns.map((_c, idx, self) => (<CellView key={_c.key} showRight={idx < self.length - 1} showBottom={true} width={_c.width ?? columnWidth}>
36
- <Text writingType="title" fontSize={16} style={styles.cellTitle}>
37
- {_c.title}
38
- </Text>
39
- </CellView>))}
40
- </View>);
41
- }, [columnWidth, columns]);
27
+ const GridView = ({ styleContainer, style, title, columns, data, transparent = false, translator = t => t, onRowPress, sortable = false, sortField, sortOrder, onSortChange, hideHeader = false, onHorizontalScroll, containerWidth, }) => {
28
+ const columnWidth = useMemo(() => computeColumnWidth(columns, transparent, containerWidth), [columns, containerWidth, transparent]);
29
+ const scale = useMemo(() => containerWidth != null
30
+ ? computeColumnScale(columns, transparent, containerWidth)
31
+ : 1, [columns, containerWidth, transparent]);
32
+ const totalColumnWidth = useMemo(() => columns.reduce((sum, c) => sum + Math.round((c.width ?? columnWidth) * scale), 0), [columnWidth, columns, scale]);
42
33
  const renderRow = useCallback((row, rowIdx, dataArray) => {
43
- return (<View key={rowIdx} style={styles.rowContainer} testID="gridViewRowContainer">
44
- {columns.map((_c, idx, self) => (<CellView key={`${_c.key} - ${rowIdx}`} showRight={idx < self.length - 1} showBottom={rowIdx < dataArray.length - 1} width={_c.width ?? columnWidth}>
45
- <Text>{_c?.getValue?.(row) ?? row?.[_c.key] ?? ''}</Text>
34
+ return (<TouchableOpacity key={rowIdx} style={styles.rowContainer} testID="gridViewRowContainer" activeOpacity={0.9} disabled={!onRowPress} onPress={() => onRowPress?.(row)}>
35
+ {columns.map((_c, idx, self) => (<CellView key={`${_c.key} - ${rowIdx}`} showRight={idx < self.length - 1} showBottom={rowIdx < dataArray.length - 1} width={Math.round((_c.width ?? columnWidth) * scale)}>
36
+ {_c.renderCell ? (_c.renderCell(row)) : (<Text numberOfLines={1}>
37
+ {_c?.getValue?.(row) ?? row?.[_c.key] ?? ''}
38
+ </Text>)}
46
39
  </CellView>))}
47
- </View>);
48
- }, [columnWidth, columns]);
40
+ </TouchableOpacity>);
41
+ }, [columnWidth, columns, onRowPress, scale]);
42
+ const WrapperComponent = useMemo(() => (transparent ? View : Card), [transparent]);
49
43
  if (!Array.isArray(columns) || columns.length === 0) {
50
44
  return null;
51
45
  }
52
- return (<View style={styles.container} testID="gridViewContainer">
46
+ return (<View style={[styles.container, styleContainer]} testID="gridViewContainer">
53
47
  {!checkNullString(title) && <Text style={styles.title}>{title}</Text>}
54
- <Card style={[styles.cardContainer, style]}>
55
- <ScrollView horizontal contentContainerStyle={styles.scrollView}>
48
+ <WrapperComponent style={[!transparent && styles.cardContainer, style]}>
49
+ <ScrollView horizontal contentContainerStyle={styles.scrollView} onScroll={onHorizontalScroll
50
+ ? ({ nativeEvent }) => onHorizontalScroll(nativeEvent.contentOffset.x)
51
+ : undefined} scrollEventThrottle={onHorizontalScroll ? 16 : undefined}>
56
52
  <View>
57
- {renderHeader()}
58
- {!Array.isArray(data) || data.length === 0 ? (<Text writingType="details" fontSize={14} style={styles.noDataText}>
59
- {translator('Base_NoData')}
60
- </Text>) : (data.map(renderRow))}
53
+ {!hideHeader && (<GridHeader columns={columns} sortable={sortable} sortField={sortField} sortOrder={sortOrder} onSortChange={onSortChange} transparent={transparent} containerWidth={containerWidth}/>)}
54
+ {!Array.isArray(data) || data.length === 0 ? (<View style={{ width: totalColumnWidth }}>
55
+ <Text writingType="details" fontSize={14} style={styles.noDataText}>
56
+ {translator('Base_NoData')}
57
+ </Text>
58
+ </View>) : (data.map(renderRow))}
61
59
  </View>
62
60
  </ScrollView>
63
- </Card>
61
+ </WrapperComponent>
64
62
  </View>);
65
63
  };
66
64
  const styles = StyleSheet.create({
@@ -84,10 +82,7 @@ const styles = StyleSheet.create({
84
82
  },
85
83
  rowContainer: {
86
84
  flexDirection: 'row',
87
- width: '100%',
88
- },
89
- cellTitle: {
90
- textAlign: 'center',
85
+ minHeight: ROW_MIN_HEIGHT,
91
86
  },
92
87
  noDataText: {
93
88
  textAlign: 'center',
@@ -1 +1 @@
1
- {"version":3,"file":"GridView.js","sourceRoot":"","sources":["../../../../src/components/organisms/GridView/GridView.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"GridView.js","sourceRoot":"","sources":["../../../../src/components/organisms/GridView/GridView.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,EAAC,WAAW,EAAE,OAAO,EAAC,MAAM,OAAO,CAAC;AAClD,OAAO,EAAC,UAAU,EAAE,UAAU,EAAE,gBAAgB,EAAE,IAAI,EAAC,MAAM,cAAc,CAAC;AAC5E,OAAO,EAAC,eAAe,EAAC,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAC,IAAI,EAAE,IAAI,EAAC,MAAM,aAAa,CAAC;AACvC,OAAO,QAAQ,MAAM,YAAY,CAAC;AAClC,OAAO,UAAU,MAAM,cAAc,CAAC;AACtC,OAAO,EAAC,kBAAkB,EAAE,kBAAkB,EAAC,MAAM,mBAAmB,CAAC;AACzE,OAAO,EAAS,cAAc,EAAC,MAAM,QAAQ,CAAC;AAE9C,MAAM,YAAY,GAAG,MAAM,CAAC;AAE5B,MAAM,QAAQ,GAAG,CAAC,EAChB,cAAc,EACd,KAAK,EACL,KAAK,EACL,OAAO,EACP,IAAI,EACJ,WAAW,GAAG,KAAK,EACnB,UAAU,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EACnB,UAAU,EACV,QAAQ,GAAG,KAAK,EAChB,SAAS,EACT,SAAS,EACT,YAAY,EACZ,UAAU,GAAG,KAAK,EAClB,kBAAkB,EAClB,cAAc,GAiBf,EAAE,EAAE;IACH,MAAM,WAAW,GAAG,OAAO,CACzB,GAAG,EAAE,CAAC,kBAAkB,CAAC,OAAO,EAAE,WAAW,EAAE,cAAc,CAAC,EAC9D,CAAC,OAAO,EAAE,cAAc,EAAE,WAAW,CAAC,CACvC,CAAC;IAEF,MAAM,KAAK,GAAG,OAAO,CACnB,GAAG,EAAE,CACH,cAAc,IAAI,IAAI;QACpB,CAAC,CAAC,kBAAkB,CAAC,OAAO,EAAE,WAAW,EAAE,cAAc,CAAC;QAC1D,CAAC,CAAC,CAAC,EACP,CAAC,OAAO,EAAE,cAAc,EAAE,WAAW,CAAC,CACvC,CAAC;IAEF,MAAM,gBAAgB,GAAG,OAAO,CAC9B,GAAG,EAAE,CACH,OAAO,CAAC,MAAM,CACZ,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,WAAW,CAAC,GAAG,KAAK,CAAC,EAC9D,CAAC,CACF,EACH,CAAC,WAAW,EAAE,OAAO,EAAE,KAAK,CAAC,CAC9B,CAAC;IAEF,MAAM,SAAS,GAAG,WAAW,CAC3B,CAAC,GAAQ,EAAE,MAAc,EAAE,SAAgB,EAAE,EAAE;QAC7C,OAAO,CACL,CAAC,gBAAgB,CACf,GAAG,CAAC,CAAC,MAAM,CAAC,CACZ,KAAK,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAC3B,MAAM,CAAC,sBAAsB,CAC7B,aAAa,CAAC,CAAC,GAAG,CAAC,CACnB,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CACtB,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,CAAC,CACjC;UAAA,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,CAC9B,CAAC,QAAQ,CACP,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,MAAM,MAAM,EAAE,CAAC,CAC7B,SAAS,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CACjC,UAAU,CAAC,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAC1C,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,WAAW,CAAC,GAAG,KAAK,CAAC,CAAC,CACrD;cAAA,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CACf,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CACnB,CAAC,CAAC,CAAC,CACF,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CACrB;kBAAA,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAC7C;gBAAA,EAAE,IAAI,CAAC,CACR,CACH;YAAA,EAAE,QAAQ,CAAC,CACZ,CAAC,CACJ;QAAA,EAAE,gBAAgB,CAAC,CACpB,CAAC;IACJ,CAAC,EACD,CAAC,WAAW,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,CAAC,CAC1C,CAAC;IAEF,MAAM,gBAAgB,GAAG,OAAO,CAC9B,GAAG,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EACjC,CAAC,WAAW,CAAC,CACd,CAAC;IAEF,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CACL,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,mBAAmB,CACzE;MAAA,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CACrE;MAAA,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,IAAI,MAAM,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC,CACrE;QAAA,CAAC,UAAU,CACT,UAAU,CACV,qBAAqB,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CACzC,QAAQ,CAAC,CACP,kBAAkB;YAChB,CAAC,CAAC,CAAC,EAAC,WAAW,EAAC,EAAE,EAAE,CAChB,kBAAkB,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC;YACnD,CAAC,CAAC,SACN,CAAC,CACD,mBAAmB,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CACzD;UAAA,CAAC,IAAI,CACH;YAAA,CAAC,CAAC,UAAU,IAAI,CACd,CAAC,UAAU,CACT,OAAO,CAAC,CAAC,OAAO,CAAC,CACjB,QAAQ,CAAC,CAAC,QAAQ,CAAC,CACnB,SAAS,CAAC,CAAC,SAAS,CAAC,CACrB,SAAS,CAAC,CAAC,SAAS,CAAC,CACrB,YAAY,CAAC,CAAC,YAAY,CAAC,CAC3B,WAAW,CAAC,CAAC,WAAW,CAAC,CACzB,cAAc,CAAC,CAAC,cAAc,CAAC,EAC/B,CACH,CACD;YAAA,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAC3C,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAC,KAAK,EAAE,gBAAgB,EAAC,CAAC,CACrC;gBAAA,CAAC,IAAI,CACH,WAAW,CAAC,SAAS,CACrB,QAAQ,CAAC,CAAC,EAAE,CAAC,CACb,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CACzB;kBAAA,CAAC,UAAU,CAAC,aAAa,CAAC,CAC5B;gBAAA,EAAE,IAAI,CACR;cAAA,EAAE,IAAI,CAAC,CACR,CAAC,CAAC,CAAC,CACF,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CACpB,CACH;UAAA,EAAE,IAAI,CACR;QAAA,EAAE,UAAU,CACd;MAAA,EAAE,gBAAgB,CACpB;IAAA,EAAE,IAAI,CAAC,CACR,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;IAC/B,SAAS,EAAE;QACT,KAAK,EAAE,KAAK;QACZ,SAAS,EAAE,QAAQ;QACnB,MAAM,EAAE,CAAC;KACV;IACD,KAAK,EAAE;QACL,UAAU,EAAE,EAAE;QACd,YAAY,EAAE,CAAC;KAChB;IACD,aAAa,EAAE;QACb,iBAAiB,EAAE,YAAY;QAC/B,YAAY,EAAE,YAAY;QAC1B,eAAe,EAAE,YAAY;KAC9B;IACD,UAAU,EAAE;QACV,aAAa,EAAE,QAAQ;QACvB,MAAM,EAAE,IAAI;KACb;IACD,YAAY,EAAE;QACZ,aAAa,EAAE,KAAK;QACpB,SAAS,EAAE,cAAc;KAC1B;IACD,UAAU,EAAE;QACV,SAAS,EAAE,QAAQ;QACnB,cAAc,EAAE,CAAC;KAClB;CACF,CAAC,CAAC;AAEH,eAAe,QAAQ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Column } from './type';
2
+ export declare const computeColumnWidth: (columns: Column[], transparent: boolean, containerWidth?: number) => number;
3
+ export declare const computeColumnScale: (columns: Column[], transparent: boolean, containerWidth: number) => number;
@@ -0,0 +1,38 @@
1
+ /*
2
+ * Axelor Business Solutions
3
+ *
4
+ * Copyright (C) 2026 Axelor (<http://axelor.com>).
5
+ *
6
+ * This program is free software: you can redistribute it and/or modify
7
+ * it under the terms of the GNU Affero General Public License, version 3,
8
+ * as published by the Free Software Foundation.
9
+ *
10
+ * This program is distributed in the hope that it will be useful,
11
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ * GNU Affero General Public License for more details.
14
+ *
15
+ * You should have received a copy of the GNU Affero General Public License
16
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
17
+ */
18
+ import { Dimensions } from 'react-native';
19
+ const COLUMN_DEFAULT_WIDTH = 70;
20
+ export const computeColumnWidth = (columns, transparent, containerWidth) => {
21
+ if (!Array.isArray(columns) || columns.length === 0) {
22
+ return COLUMN_DEFAULT_WIDTH;
23
+ }
24
+ const fixedTotal = columns.reduce((sum, c) => sum + (c.width != null ? c.width : 0), 0);
25
+ const flexCount = columns.filter(c => c.width == null).length;
26
+ if (flexCount === 0)
27
+ return COLUMN_DEFAULT_WIDTH;
28
+ const base = containerWidth ?? Dimensions.get('window').width;
29
+ const usableWidth = transparent ? base : base * 0.85;
30
+ const width = (usableWidth - fixedTotal) / flexCount;
31
+ return width < COLUMN_DEFAULT_WIDTH ? COLUMN_DEFAULT_WIDTH : width;
32
+ };
33
+ export const computeColumnScale = (columns, transparent, containerWidth) => {
34
+ const defaultWidth = computeColumnWidth(columns, transparent, containerWidth);
35
+ const total = columns.reduce((sum, c) => sum + (c.width ?? defaultWidth), 0);
36
+ return total > 0 && total < containerWidth ? containerWidth / total : 1;
37
+ };
38
+ //# sourceMappingURL=display.helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"display.helpers.js","sourceRoot":"","sources":["../../../../src/components/organisms/GridView/display.helpers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAC,UAAU,EAAC,MAAM,cAAc,CAAC;AAGxC,MAAM,oBAAoB,GAAG,EAAE,CAAC;AAEhC,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,OAAiB,EACjB,WAAoB,EACpB,cAAuB,EACf,EAAE;IACV,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpD,OAAO,oBAAoB,CAAC;IAC9B,CAAC;IACD,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAC/B,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EACjD,CAAC,CACF,CAAC;IACF,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,MAAM,CAAC;IAC9D,IAAI,SAAS,KAAK,CAAC;QAAE,OAAO,oBAAoB,CAAC;IACjD,MAAM,IAAI,GAAG,cAAc,IAAI,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC;IAC9D,MAAM,WAAW,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC;IACrD,MAAM,KAAK,GAAG,CAAC,WAAW,GAAG,UAAU,CAAC,GAAG,SAAS,CAAC;IACrD,OAAO,KAAK,GAAG,oBAAoB,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,KAAK,CAAC;AACrE,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,OAAiB,EACjB,WAAoB,EACpB,cAAsB,EACd,EAAE;IACV,MAAM,YAAY,GAAG,kBAAkB,CAAC,OAAO,EAAE,WAAW,EAAE,cAAc,CAAC,CAAC;IAC9E,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7E,OAAO,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,cAAc,CAAC,CAAC,CAAC,cAAc,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1E,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { default as GridHeader } from './GridHeader';
2
+ export { default as GridView } from './GridView';
3
+ export { Column as GridViewColumn } from './type';
4
+ export { computeColumnWidth } from './display.helpers';
@@ -0,0 +1,21 @@
1
+ /*
2
+ * Axelor Business Solutions
3
+ *
4
+ * Copyright (C) 2026 Axelor (<http://axelor.com>).
5
+ *
6
+ * This program is free software: you can redistribute it and/or modify
7
+ * it under the terms of the GNU Affero General Public License, version 3,
8
+ * as published by the Free Software Foundation.
9
+ *
10
+ * This program is distributed in the hope that it will be useful,
11
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ * GNU Affero General Public License for more details.
14
+ *
15
+ * You should have received a copy of the GNU Affero General Public License
16
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
17
+ */
18
+ export { default as GridHeader } from './GridHeader';
19
+ export { default as GridView } from './GridView';
20
+ export { computeColumnWidth } from './display.helpers';
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/organisms/GridView/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAC,OAAO,IAAI,UAAU,EAAC,MAAM,cAAc,CAAC;AACnD,OAAO,EAAC,OAAO,IAAI,QAAQ,EAAC,MAAM,YAAY,CAAC;AAE/C,OAAO,EAAC,kBAAkB,EAAC,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,10 @@
1
+ export interface Column {
2
+ key: string;
3
+ title: string;
4
+ width?: number;
5
+ sortable?: boolean;
6
+ getValue?: (row: any) => any;
7
+ renderCell?: (row: any) => React.ReactElement | null;
8
+ renderHeader?: () => React.ReactElement | null;
9
+ }
10
+ export declare const ROW_MIN_HEIGHT = 44;
@@ -0,0 +1,19 @@
1
+ /*
2
+ * Axelor Business Solutions
3
+ *
4
+ * Copyright (C) 2026 Axelor (<http://axelor.com>).
5
+ *
6
+ * This program is free software: you can redistribute it and/or modify
7
+ * it under the terms of the GNU Affero General Public License, version 3,
8
+ * as published by the Free Software Foundation.
9
+ *
10
+ * This program is distributed in the hope that it will be useful,
11
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ * GNU Affero General Public License for more details.
14
+ *
15
+ * You should have received a copy of the GNU Affero General Public License
16
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
17
+ */
18
+ export const ROW_MIN_HEIGHT = 44;
19
+ //# sourceMappingURL=type.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"type.js","sourceRoot":"","sources":["../../../../src/components/organisms/GridView/type.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAYH,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,CAAC"}
@@ -3,7 +3,7 @@ import { ImageSourcePropType } from 'react-native';
3
3
  interface ImageBubbleProps {
4
4
  style?: any;
5
5
  listComponent?: any;
6
- source: ImageSourcePropType;
6
+ source: ImageSourcePropType | undefined;
7
7
  imageSize?: number;
8
8
  defaultIconSize?: number;
9
9
  }
@@ -9,6 +9,7 @@ interface InfoButtonProps {
9
9
  disabled?: boolean;
10
10
  onPress: () => void;
11
11
  space?: number;
12
+ displayCard?: boolean;
12
13
  }
13
- declare const InfoButton: ({ style, textIndicationStyle, iconName, iconColor, indication, position, disabled, onPress, space, }: InfoButtonProps) => React.JSX.Element;
14
+ declare const InfoButton: ({ style, textIndicationStyle, iconName, iconColor, indication, position, disabled, onPress, space, displayCard, }: InfoButtonProps) => React.JSX.Element;
14
15
  export default InfoButton;
@@ -18,10 +18,10 @@
18
18
  import React, { useState } from 'react';
19
19
  import { Dimensions } from 'react-native';
20
20
  import { CardIconButton, CardIndicator } from '../../molecules';
21
- const InfoButton = ({ style, textIndicationStyle, iconName, iconColor, indication, position = 'left', disabled = false, onPress = () => { }, space = Dimensions.get('window').width * 0.15, }) => {
21
+ const InfoButton = ({ style, textIndicationStyle, iconName, iconColor, indication, position = 'left', disabled = false, onPress, space = Dimensions.get('window').width * 0.15, displayCard = true, }) => {
22
22
  const [isVisible, setIsVisible] = useState(false);
23
23
  return (<CardIndicator indication={indication} position={position} isVisible={isVisible} style={style} textIndicationStyle={textIndicationStyle} handleClose={() => setIsVisible(false)} space={space}>
24
- <CardIconButton iconName={iconName} iconColor={iconColor} disabled={disabled} onPress={() => {
24
+ <CardIconButton iconName={iconName} iconColor={iconColor} disabled={disabled} displayCard={displayCard} onPress={() => {
25
25
  onPress();
26
26
  setIsVisible(false);
27
27
  }} onLongPress={() => setIsVisible(current => !current)}/>
@@ -1 +1 @@
1
- {"version":3,"file":"InfoButton.js","sourceRoot":"","sources":["../../../../src/components/organisms/InfoButton/InfoButton.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,EAAC,QAAQ,EAAC,MAAM,OAAO,CAAC;AACtC,OAAO,EAAC,UAAU,EAAC,MAAM,cAAc,CAAC;AACxC,OAAO,EAAC,cAAc,EAAE,aAAa,EAAC,MAAM,iBAAiB,CAAC;AAc9D,MAAM,UAAU,GAAG,CAAC,EAClB,KAAK,EACL,mBAAmB,EACnB,QAAQ,EACR,SAAS,EACT,UAAU,EACV,QAAQ,GAAG,MAAM,EACjB,QAAQ,GAAG,KAAK,EAChB,OAAO,GAAG,GAAG,EAAE,GAAE,CAAC,EAClB,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,KAAK,GAAG,IAAI,GAC7B,EAAE,EAAE;IACpB,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAElD,OAAO,CACL,CAAC,aAAa,CACZ,UAAU,CAAC,CAAC,UAAU,CAAC,CACvB,QAAQ,CAAC,CAAC,QAAQ,CAAC,CACnB,SAAS,CAAC,CAAC,SAAS,CAAC,CACrB,KAAK,CAAC,CAAC,KAAK,CAAC,CACb,mBAAmB,CAAC,CAAC,mBAAmB,CAAC,CACzC,WAAW,CAAC,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CACvC,KAAK,CAAC,CAAC,KAAK,CAAC,CACb;MAAA,CAAC,cAAc,CACb,QAAQ,CAAC,CAAC,QAAQ,CAAC,CACnB,SAAS,CAAC,CAAC,SAAS,CAAC,CACrB,QAAQ,CAAC,CAAC,QAAQ,CAAC,CACnB,OAAO,CAAC,CAAC,GAAG,EAAE;YACZ,OAAO,EAAE,CAAC;YACV,YAAY,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC,CAAC,CACF,WAAW,CAAC,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,EAEzD;IAAA,EAAE,aAAa,CAAC,CACjB,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"InfoButton.js","sourceRoot":"","sources":["../../../../src/components/organisms/InfoButton/InfoButton.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,EAAC,QAAQ,EAAC,MAAM,OAAO,CAAC;AACtC,OAAO,EAAC,UAAU,EAAC,MAAM,cAAc,CAAC;AACxC,OAAO,EAAC,cAAc,EAAE,aAAa,EAAC,MAAM,iBAAiB,CAAC;AAe9D,MAAM,UAAU,GAAG,CAAC,EAClB,KAAK,EACL,mBAAmB,EACnB,QAAQ,EACR,SAAS,EACT,UAAU,EACV,QAAQ,GAAG,MAAM,EACjB,QAAQ,GAAG,KAAK,EAChB,OAAO,EACP,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,KAAK,GAAG,IAAI,EAC7C,WAAW,GAAG,IAAI,GACF,EAAE,EAAE;IACpB,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAElD,OAAO,CACL,CAAC,aAAa,CACZ,UAAU,CAAC,CAAC,UAAU,CAAC,CACvB,QAAQ,CAAC,CAAC,QAAQ,CAAC,CACnB,SAAS,CAAC,CAAC,SAAS,CAAC,CACrB,KAAK,CAAC,CAAC,KAAK,CAAC,CACb,mBAAmB,CAAC,CAAC,mBAAmB,CAAC,CACzC,WAAW,CAAC,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CACvC,KAAK,CAAC,CAAC,KAAK,CAAC,CACb;MAAA,CAAC,cAAc,CACb,QAAQ,CAAC,CAAC,QAAQ,CAAC,CACnB,SAAS,CAAC,CAAC,SAAS,CAAC,CACrB,QAAQ,CAAC,CAAC,QAAQ,CAAC,CACnB,WAAW,CAAC,CAAC,WAAW,CAAC,CACzB,OAAO,CAAC,CAAC,GAAG,EAAE;YACZ,OAAO,EAAE,CAAC;YACV,YAAY,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC,CAAC,CACF,WAAW,CAAC,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,EAEzD;IAAA,EAAE,aAAa,CAAC,CACjB,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,UAAU,CAAC"}
@@ -78,6 +78,7 @@ const MultiValuePicker = ({ style, pickerStyle, styleTxt, title, placeholder, on
78
78
  const getStyles = (Colors, _required) => StyleSheet.create({
79
79
  container: {
80
80
  width: '90%',
81
+ alignSelf: 'center',
81
82
  },
82
83
  containerZIndex: {
83
84
  zIndex: 100,
@@ -1 +1 @@
1
- {"version":3,"file":"MultiValuePicker.js","sourceRoot":"","sources":["../../../../src/components/organisms/MultiValuePicker/MultiValuePicker.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,EAAC,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAC,MAAM,OAAO,CAAC;AACpE,OAAO,EAAC,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAC,MAAM,cAAc,CAAC;AACxD,OAAO,EAAqB,aAAa,EAAC,MAAM,gBAAgB,CAAC;AACjE,OAAO,EAAC,eAAe,EAAE,eAAe,EAAC,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAAC,sBAAsB,EAAC,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAC,kBAAkB,EAAE,sBAAsB,EAAC,MAAM,iBAAiB,CAAC;AAC3E,OAAO,EAAC,IAAI,EAAC,MAAM,aAAa,CAAC;AAsBjC,MAAM,gBAAgB,GAAG,CAAC,EACxB,KAAK,EACL,WAAW,EACX,QAAQ,EACR,KAAK,EACL,WAAW,EACX,aAAa,EACb,YAAY,GAAG,EAAE,EACjB,SAAS,GAAG,EAAE,EACd,QAAQ,GAAG,KAAK,EAChB,QAAQ,GAAG,KAAK,EAChB,UAAU,GACY,EAAE,EAAE;IAC1B,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;IAE/B,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACxD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClD,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,QAAQ,CAAC,YAAmB,CAAC,CAAC;IAE9E,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IAChC,MAAM,mBAAmB,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IACzC,sBAAsB,CAAC;QACrB,UAAU,EAAE,CAAC,UAAU,EAAE,mBAAmB,CAAC;QAC7C,kBAAkB,EAAE,GAAG,EAAE;YACvB,eAAe,CAAC,KAAK,CAAC,CAAC;YACvB,YAAY,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;QACD,mBAAmB,EAAE,YAAY;KAClC,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,WAAW,CAAC,GAAG,EAAE;QACpC,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;QACrC,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,iBAAiB,GAAG,WAAW,CACnC,CAAC,SAAe,EAAE,EAAE;QAClB,IAAI,SAAS,IAAI,IAAI,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,mBAAmB,GAAG,EAAE,CAAC;QAC7B,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC,IAAU,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,KAAK,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;YACtE,mBAAmB,GAAG,gBAAgB,CAAC,MAAM,CAC3C,CAAC,CAAO,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,SAAS,CAAC,GAAG,CACrC,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,mBAAmB,GAAG,CAAC,GAAG,gBAAgB,EAAE,SAAS,CAAC,CAAC;QACzD,CAAC;QACD,mBAAmB,CAAC,mBAAmB,CAAC,CAAC;QACzC,aAAa,CAAC,mBAAmB,CAAC,CAAC;IACrC,CAAC,EACD,CAAC,aAAa,EAAE,gBAAgB,CAAC,CAClC,CAAC;IAEF,MAAM,SAAS,GAAG,OAAO,CACvB,GAAG,EAAE,CACH,QAAQ,IAAI,CAAC,gBAAgB,IAAI,IAAI,IAAI,gBAAgB,EAAE,MAAM,KAAK,CAAC,CAAC,EAC1E,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAC7B,CAAC;IAEF,MAAM,YAAY,GAAG,OAAO,CAC1B,GAAG,EAAE,CAAC,eAAe,CAAC,MAAM,EAAE,SAAS,CAAC,EACxC,CAAC,MAAM,EAAE,SAAS,CAAC,CACpB,CAAC;IAEF,MAAM,MAAM,GAAG,OAAO,CACpB,GAAG,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,EAClC,CAAC,MAAM,EAAE,SAAS,CAAC,CACpB,CAAC;IAEF,OAAO,CACL,CAAC,IAAI,CACH,GAAG,CAAC,CAAC,UAAU,CAAC,CAChB,KAAK,CAAC,CAAC;YACL,MAAM,CAAC,SAAS;YAChB,QAAQ,CAAC,EAAE,KAAK,KAAK,IAAI,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI;YACrE,KAAK;SACN,CAAC,CACF,MAAM,CAAC,2BAA2B,CAClC;MAAA,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,CAC1B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CACtD,CACD;MAAA,CAAC,sBAAsB,CACrB,OAAO,CAAC,CAAC,YAAY,CAAC,CACtB,QAAQ,CAAC,CAAC,gBAAgB,CAAC,CAC3B,WAAW,CAAC,CAAC,WAAW,CAAC,CACzB,KAAK,CAAC,CAAC;YACL,YAAY,CAAC,MAAM;YACnB,YAAY,CAAC,UAAU;YACvB,YAAY,CAAC,WAAW;YACxB,SAAS,IAAI,YAAY,CAAC,YAAY;YACtC,MAAM,CAAC,OAAO;YACd,WAAW;SACZ,CAAC,CACF,WAAW,CAAC,CAAC,iBAAiB,CAAC,CAC/B,QAAQ,CAAC,CAAC,QAAQ,CAAC,EAErB;MAAA,CAAC,YAAY,CAAC,CAAC,CAAC,CACd,CAAC,kBAAkB,CACjB,UAAU,CAAC,CAAC,mBAAmB,CAAC,CAChC,UAAU,CAAC,CAAC,SAAS,CAAC,CACtB,QAAQ,CAAC,KAAK,CACd,YAAY,CAAC,CAAC,CAAC,IAAU,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CACzC,YAAY,CAAC,CAAC,iBAAiB,CAAC,CAChC,QAAQ,CAAC,CAAC,IAAI,CAAC,CACf,YAAY,CAAC,CAAC,gBAAgB,CAAC,CAC/B,QAAQ,CAAC,CAAC,QAAQ,CAAC,CACnB,KAAK,CAAC,CAAC,KAAK,CAAC,CACb,UAAU,CAAC,CAAC,UAAU,CAAC,EACvB,CACH,CAAC,CAAC,CAAC,IAAI,CACV;IAAA,EAAE,IAAI,CAAC,CACR,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,CAAC,MAAmB,EAAE,SAAkB,EAAE,EAAE,CAC5D,UAAU,CAAC,MAAM,CAAC;IAChB,SAAS,EAAE;QACT,KAAK,EAAE,KAAK;KACb;IACD,eAAe,EAAE;QACf,MAAM,EAAE,GAAG;KACZ;IACD,KAAK,EAAE;QACL,UAAU,EAAE,EAAE;KACf;IACD,OAAO,EAAE;QACP,KAAK,EAAE,MAAM;QACb,WAAW,EAAE,SAAS;YACpB,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU;YAC9B,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,UAAU;QACpC,WAAW,EAAE,CAAC;QACd,gBAAgB,EAAE,CAAC;QACnB,SAAS,EAAE,EAAE;KACd;CACF,CAAC,CAAC;AAEL,eAAe,gBAAgB,CAAC"}
1
+ {"version":3,"file":"MultiValuePicker.js","sourceRoot":"","sources":["../../../../src/components/organisms/MultiValuePicker/MultiValuePicker.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,EAAC,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAC,MAAM,OAAO,CAAC;AACpE,OAAO,EAAC,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAC,MAAM,cAAc,CAAC;AACxD,OAAO,EAAqB,aAAa,EAAC,MAAM,gBAAgB,CAAC;AACjE,OAAO,EAAC,eAAe,EAAE,eAAe,EAAC,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAAC,sBAAsB,EAAC,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAC,kBAAkB,EAAE,sBAAsB,EAAC,MAAM,iBAAiB,CAAC;AAC3E,OAAO,EAAC,IAAI,EAAC,MAAM,aAAa,CAAC;AAsBjC,MAAM,gBAAgB,GAAG,CAAC,EACxB,KAAK,EACL,WAAW,EACX,QAAQ,EACR,KAAK,EACL,WAAW,EACX,aAAa,EACb,YAAY,GAAG,EAAE,EACjB,SAAS,GAAG,EAAE,EACd,QAAQ,GAAG,KAAK,EAChB,QAAQ,GAAG,KAAK,EAChB,UAAU,GACY,EAAE,EAAE;IAC1B,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;IAE/B,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACxD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClD,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,QAAQ,CAAC,YAAmB,CAAC,CAAC;IAE9E,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IAChC,MAAM,mBAAmB,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IACzC,sBAAsB,CAAC;QACrB,UAAU,EAAE,CAAC,UAAU,EAAE,mBAAmB,CAAC;QAC7C,kBAAkB,EAAE,GAAG,EAAE;YACvB,eAAe,CAAC,KAAK,CAAC,CAAC;YACvB,YAAY,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;QACD,mBAAmB,EAAE,YAAY;KAClC,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,WAAW,CAAC,GAAG,EAAE;QACpC,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;QACrC,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,iBAAiB,GAAG,WAAW,CACnC,CAAC,SAAe,EAAE,EAAE;QAClB,IAAI,SAAS,IAAI,IAAI,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,mBAAmB,GAAG,EAAE,CAAC;QAC7B,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC,IAAU,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,KAAK,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;YACtE,mBAAmB,GAAG,gBAAgB,CAAC,MAAM,CAC3C,CAAC,CAAO,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,SAAS,CAAC,GAAG,CACrC,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,mBAAmB,GAAG,CAAC,GAAG,gBAAgB,EAAE,SAAS,CAAC,CAAC;QACzD,CAAC;QACD,mBAAmB,CAAC,mBAAmB,CAAC,CAAC;QACzC,aAAa,CAAC,mBAAmB,CAAC,CAAC;IACrC,CAAC,EACD,CAAC,aAAa,EAAE,gBAAgB,CAAC,CAClC,CAAC;IAEF,MAAM,SAAS,GAAG,OAAO,CACvB,GAAG,EAAE,CACH,QAAQ,IAAI,CAAC,gBAAgB,IAAI,IAAI,IAAI,gBAAgB,EAAE,MAAM,KAAK,CAAC,CAAC,EAC1E,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAC7B,CAAC;IAEF,MAAM,YAAY,GAAG,OAAO,CAC1B,GAAG,EAAE,CAAC,eAAe,CAAC,MAAM,EAAE,SAAS,CAAC,EACxC,CAAC,MAAM,EAAE,SAAS,CAAC,CACpB,CAAC;IAEF,MAAM,MAAM,GAAG,OAAO,CACpB,GAAG,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,EAClC,CAAC,MAAM,EAAE,SAAS,CAAC,CACpB,CAAC;IAEF,OAAO,CACL,CAAC,IAAI,CACH,GAAG,CAAC,CAAC,UAAU,CAAC,CAChB,KAAK,CAAC,CAAC;YACL,MAAM,CAAC,SAAS;YAChB,QAAQ,CAAC,EAAE,KAAK,KAAK,IAAI,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI;YACrE,KAAK;SACN,CAAC,CACF,MAAM,CAAC,2BAA2B,CAClC;MAAA,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,CAC1B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CACtD,CACD;MAAA,CAAC,sBAAsB,CACrB,OAAO,CAAC,CAAC,YAAY,CAAC,CACtB,QAAQ,CAAC,CAAC,gBAAgB,CAAC,CAC3B,WAAW,CAAC,CAAC,WAAW,CAAC,CACzB,KAAK,CAAC,CAAC;YACL,YAAY,CAAC,MAAM;YACnB,YAAY,CAAC,UAAU;YACvB,YAAY,CAAC,WAAW;YACxB,SAAS,IAAI,YAAY,CAAC,YAAY;YACtC,MAAM,CAAC,OAAO;YACd,WAAW;SACZ,CAAC,CACF,WAAW,CAAC,CAAC,iBAAiB,CAAC,CAC/B,QAAQ,CAAC,CAAC,QAAQ,CAAC,EAErB;MAAA,CAAC,YAAY,CAAC,CAAC,CAAC,CACd,CAAC,kBAAkB,CACjB,UAAU,CAAC,CAAC,mBAAmB,CAAC,CAChC,UAAU,CAAC,CAAC,SAAS,CAAC,CACtB,QAAQ,CAAC,KAAK,CACd,YAAY,CAAC,CAAC,CAAC,IAAU,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CACzC,YAAY,CAAC,CAAC,iBAAiB,CAAC,CAChC,QAAQ,CAAC,CAAC,IAAI,CAAC,CACf,YAAY,CAAC,CAAC,gBAAgB,CAAC,CAC/B,QAAQ,CAAC,CAAC,QAAQ,CAAC,CACnB,KAAK,CAAC,CAAC,KAAK,CAAC,CACb,UAAU,CAAC,CAAC,UAAU,CAAC,EACvB,CACH,CAAC,CAAC,CAAC,IAAI,CACV;IAAA,EAAE,IAAI,CAAC,CACR,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,CAAC,MAAmB,EAAE,SAAkB,EAAE,EAAE,CAC5D,UAAU,CAAC,MAAM,CAAC;IAChB,SAAS,EAAE;QACT,KAAK,EAAE,KAAK;QACZ,SAAS,EAAE,QAAQ;KACpB;IACD,eAAe,EAAE;QACf,MAAM,EAAE,GAAG;KACZ;IACD,KAAK,EAAE;QACL,UAAU,EAAE,EAAE;KACf;IACD,OAAO,EAAE;QACP,KAAK,EAAE,MAAM;QACb,WAAW,EAAE,SAAS;YACpB,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU;YAC9B,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,UAAU;QACpC,WAAW,EAAE,CAAC;QACd,gBAAgB,EAAE,CAAC;QACnB,SAAS,EAAE,EAAE;KACd;CACF,CAAC,CAAC;AAEL,eAAe,gBAAgB,CAAC"}
@@ -0,0 +1,23 @@
1
+ import React from 'react';
2
+ import { GridViewColumn } from '../GridView';
3
+ interface ScrollGridViewProps {
4
+ style?: any;
5
+ columns: GridViewColumn[];
6
+ loadingList: boolean;
7
+ moreLoading: boolean;
8
+ isListEnd: boolean;
9
+ data: any[];
10
+ fetchData: (page: number) => void;
11
+ translator?: (key: string) => string;
12
+ onRowPress?: (row: any) => void;
13
+ sortable?: boolean;
14
+ sortField?: string;
15
+ sortOrder?: 'asc' | 'desc';
16
+ onSortChange?: (field: string) => void;
17
+ stickyHeader?: boolean;
18
+ mode?: 'simple' | 'checkbox';
19
+ onSelectionChange?: (items: any[]) => void;
20
+ gridContainerWidth?: number;
21
+ }
22
+ declare const ScrollGridView: ({ style, loadingList, moreLoading, isListEnd, data, fetchData, translator, stickyHeader, columns, mode, onSelectionChange, gridContainerWidth, ...props }: ScrollGridViewProps) => React.JSX.Element;
23
+ export default ScrollGridView;
@@ -0,0 +1,134 @@
1
+ /*
2
+ * Axelor Business Solutions
3
+ *
4
+ * Copyright (C) 2026 Axelor (<http://axelor.com>).
5
+ *
6
+ * This program is free software: you can redistribute it and/or modify
7
+ * it under the terms of the GNU Affero General Public License, version 3,
8
+ * as published by the Free Software Foundation.
9
+ *
10
+ * This program is distributed in the hope that it will be useful,
11
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ * GNU Affero General Public License for more details.
14
+ *
15
+ * You should have received a copy of the GNU Affero General Public License
16
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
17
+ */
18
+ import React, { useCallback, useEffect, useRef, useState } from 'react';
19
+ import { ActivityIndicator, Animated, RefreshControl, ScrollView, StyleSheet, View, } from 'react-native';
20
+ import { Text } from '../../atoms';
21
+ import { GridHeader, GridView } from '../GridView';
22
+ import { useGridSelection } from './useGridSelection';
23
+ const LOADING_DELAY_MS = 1500;
24
+ const ScrollGridView = ({ style, loadingList, moreLoading, isListEnd, data, fetchData, translator = t => t, stickyHeader = false, columns, mode = 'simple', onSelectionChange, gridContainerWidth, ...props }) => {
25
+ const [, setPage] = useState(0);
26
+ const [isLoading, setIsLoading] = useState(false);
27
+ const [contentHeight, setContentHeight] = useState(0);
28
+ const [layoutHeight, setLayoutHeight] = useState(0);
29
+ const scrollXAnim = useRef(new Animated.Value(0)).current;
30
+ const headerTranslateX = useRef(Animated.multiply(scrollXAnim, -1)).current;
31
+ const resolvedColumns = useGridSelection(columns, data, mode, onSelectionChange);
32
+ const initialize = useCallback(() => {
33
+ setPage(0);
34
+ fetchData(0);
35
+ }, [fetchData]);
36
+ useEffect(() => {
37
+ initialize();
38
+ }, [initialize]);
39
+ const handleMoreData = useCallback(() => {
40
+ if (!isListEnd && !moreLoading) {
41
+ setPage(current => {
42
+ const next = current + 1;
43
+ fetchData(next);
44
+ return next;
45
+ });
46
+ }
47
+ }, [fetchData, isListEnd, moreLoading]);
48
+ useEffect(() => {
49
+ if (!loadingList &&
50
+ !moreLoading &&
51
+ !isListEnd &&
52
+ contentHeight > 0 &&
53
+ layoutHeight > 0 &&
54
+ contentHeight <= layoutHeight) {
55
+ handleMoreData();
56
+ }
57
+ }, [
58
+ contentHeight,
59
+ handleMoreData,
60
+ isListEnd,
61
+ layoutHeight,
62
+ loadingList,
63
+ moreLoading,
64
+ ]);
65
+ useEffect(() => {
66
+ let timer;
67
+ if (loadingList && !moreLoading) {
68
+ timer = setTimeout(() => setIsLoading(true), LOADING_DELAY_MS);
69
+ }
70
+ else {
71
+ setIsLoading(false);
72
+ }
73
+ return () => clearTimeout(timer);
74
+ }, [loadingList, moreLoading]);
75
+ const handleScroll = useCallback(({ nativeEvent }) => {
76
+ const { layoutMeasurement, contentOffset, contentSize } = nativeEvent;
77
+ if (layoutMeasurement.height + contentOffset.y >=
78
+ contentSize.height - 20) {
79
+ handleMoreData();
80
+ }
81
+ }, [handleMoreData]);
82
+ const syncHeaderScroll = useCallback((x) => scrollXAnim.setValue(x), [scrollXAnim]);
83
+ if (isLoading) {
84
+ return <ActivityIndicator style={styles.loader}/>;
85
+ }
86
+ return (<View style={[
87
+ styles.container,
88
+ style,
89
+ gridContainerWidth != null && { width: gridContainerWidth },
90
+ ]}>
91
+ {stickyHeader && (<View style={styles.stickyHeaderWrapper}>
92
+ <Animated.View style={{ transform: [{ translateX: headerTranslateX }] }}>
93
+ <GridHeader columns={resolvedColumns} transparent containerWidth={gridContainerWidth} {...props}/>
94
+ </Animated.View>
95
+ </View>)}
96
+ <ScrollView style={styles.scrollFlex} contentContainerStyle={styles.scrollContent} onScroll={handleScroll} scrollEventThrottle={400} onContentSizeChange={(_, h) => setContentHeight(h)} onLayout={e => setLayoutHeight(e.nativeEvent.layout.height)} refreshControl={<RefreshControl refreshing={false} onRefresh={initialize}/>}>
97
+ <GridView styleContainer={styles.gridContainer} columns={resolvedColumns} data={data} transparent translator={translator} hideHeader={stickyHeader} onHorizontalScroll={stickyHeader ? syncHeaderScroll : undefined} containerWidth={gridContainerWidth} {...props}/>
98
+ <View style={styles.footer}>
99
+ {moreLoading && <ActivityIndicator size="large" color="black"/>}
100
+ {isListEnd && data?.length > 0 && (<Text writingType="details" fontSize={14}>
101
+ {translator('Base_NoMoreItems')}
102
+ </Text>)}
103
+ </View>
104
+ </ScrollView>
105
+ </View>);
106
+ };
107
+ const styles = StyleSheet.create({
108
+ container: {
109
+ flex: 1,
110
+ },
111
+ scrollFlex: {
112
+ flex: 1,
113
+ },
114
+ stickyHeaderWrapper: {
115
+ overflow: 'hidden',
116
+ },
117
+ scrollContent: {
118
+ flexGrow: 1,
119
+ },
120
+ gridContainer: {
121
+ width: '100%',
122
+ },
123
+ loader: {
124
+ flex: 1,
125
+ alignSelf: 'center',
126
+ marginTop: 20,
127
+ },
128
+ footer: {
129
+ alignItems: 'center',
130
+ marginVertical: 10,
131
+ },
132
+ });
133
+ export default ScrollGridView;
134
+ //# sourceMappingURL=ScrollGridView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ScrollGridView.js","sourceRoot":"","sources":["../../../../src/components/organisms/ScrollGridView/ScrollGridView.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { GridViewColumn } from '../GridView';
2
+ export declare function useGridSelection(columns: GridViewColumn[], data: any[], mode?: 'simple' | 'checkbox', onSelectionChange?: (items: any[]) => void): GridViewColumn[];
@@ -0,0 +1,66 @@
1
+ /*
2
+ * Axelor Business Solutions
3
+ *
4
+ * Copyright (C) 2026 Axelor (<http://axelor.com>).
5
+ *
6
+ * This program is free software: you can redistribute it and/or modify
7
+ * it under the terms of the GNU Affero General Public License, version 3,
8
+ * as published by the Free Software Foundation.
9
+ *
10
+ * This program is distributed in the hope that it will be useful,
11
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ * GNU Affero General Public License for more details.
14
+ *
15
+ * You should have received a copy of the GNU Affero General Public License
16
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
17
+ */
18
+ import React, { useCallback, useEffect, useMemo, useState } from 'react';
19
+ import { Checkbox } from '../../molecules';
20
+ const CHECKBOX_COL_WIDTH = 44;
21
+ export function useGridSelection(columns, data, mode = 'simple', onSelectionChange) {
22
+ const [selectedItems, setSelectedItems] = useState([]);
23
+ useEffect(() => {
24
+ onSelectionChange?.(selectedItems);
25
+ }, [onSelectionChange, selectedItems]);
26
+ const allSelected = useMemo(() => data.length > 0 &&
27
+ data.every(r => selectedItems.some(s => s.id === r.id)), [data, selectedItems]);
28
+ const someSelected = useMemo(() => selectedItems.length > 0 && !allSelected, [allSelected, selectedItems.length]);
29
+ const handleToggleItem = useCallback((row, checked) => {
30
+ setSelectedItems(prev => checked ? [...prev, row] : prev.filter(s => s.id !== row.id));
31
+ }, []);
32
+ const handleToggleAll = useCallback((checked) => {
33
+ setSelectedItems(checked ? [...data] : []);
34
+ }, [data]);
35
+ return useMemo(() => {
36
+ if (mode !== 'checkbox' || !Array.isArray(columns))
37
+ return columns ?? [];
38
+ const checkboxColumn = {
39
+ key: '__checkbox__',
40
+ title: '',
41
+ width: CHECKBOX_COL_WIDTH,
42
+ sortable: false,
43
+ renderHeader: () => React.createElement(Checkbox, {
44
+ iconSize: 18,
45
+ isDefaultChecked: allSelected,
46
+ isDefaultPartialChecked: someSelected,
47
+ onChange: handleToggleAll,
48
+ }),
49
+ renderCell: (row) => React.createElement(Checkbox, {
50
+ iconSize: 18,
51
+ isDefaultChecked: selectedItems.some((s) => s.id === row.id),
52
+ onChange: (checked) => handleToggleItem(row, checked),
53
+ }),
54
+ };
55
+ return [checkboxColumn, ...columns];
56
+ }, [
57
+ allSelected,
58
+ columns,
59
+ handleToggleAll,
60
+ handleToggleItem,
61
+ mode,
62
+ selectedItems,
63
+ someSelected,
64
+ ]);
65
+ }
66
+ //# sourceMappingURL=useGridSelection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useGridSelection.js","sourceRoot":"","sources":["../../../../src/components/organisms/ScrollGridView/useGridSelection.ts"],"names":[],"mappings":"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"}
@@ -139,7 +139,7 @@ const ScrollList = ({ style, styleFooter, loadingList = false, data = [], render
139
139
  {!Array.isArray(data) || data.length === 0 ? renderActions() : null}
140
140
  <AnimatedFlatList testID="scrollListAnimatedList" ref={flatList} style={[styles.scrollView, style]} data={data} onRefresh={disabledRefresh ? null : updateData} refreshing={false} horizontal={horizontal} onEndReached={onEndReached} ListFooterComponent={renderFooter} renderItem={_renderItem} onScroll={handleScroll} onViewableItemsChanged={onViewableItemsChanged} viewabilityConfig={{
141
141
  itemVisiblePercentThreshold: 1,
142
- }} scrollEnabled={isScrollEnabled}/>
142
+ }} scrollEnabled={isScrollEnabled} nestedScrollEnabled/>
143
143
  </View>);
144
144
  };
145
145
  const styles = StyleSheet.create({