jb-grid 0.4.1 → 0.5.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 (117) hide show
  1. package/README.md +138 -11
  2. package/package.json +5 -8
  3. package/react/README.md +207 -202
  4. package/react/dist/Content.d.ts +1 -2
  5. package/react/dist/Footer.d.ts +1 -2
  6. package/react/dist/Header.d.ts +3 -16
  7. package/react/dist/JBGrid.cjs.js +3631 -1
  8. package/react/dist/JBGrid.cjs.js.map +1 -1
  9. package/react/dist/JBGrid.d.ts +288 -26
  10. package/react/dist/JBGrid.js +3624 -1
  11. package/react/dist/JBGrid.js.map +1 -1
  12. package/react/dist/JBGrid.umd.js +3641 -1
  13. package/react/dist/JBGrid.umd.js.map +1 -1
  14. package/react/dist/JBGridData.d.ts +1 -5
  15. package/react/dist/JBGridViewModel.d.ts +28 -25
  16. package/react/dist/types.d.ts +17 -49
  17. package/react/lib/Components/Cell.tsx +17 -15
  18. package/react/lib/Components/ColumnHeader.tsx +44 -0
  19. package/react/lib/Components/ExpandToggle.tsx +14 -10
  20. package/react/lib/Components/FullscreenIcon.tsx +28 -0
  21. package/react/lib/Components/JBLoading.tsx +5 -4
  22. package/react/lib/Components/Pagination.tsx +1 -1
  23. package/react/lib/Components/PaginationInfo.tsx +71 -0
  24. package/react/lib/Components/RefreshIcon.tsx +11 -0
  25. package/react/lib/Components/Row.tsx +17 -15
  26. package/react/lib/Components/TableHeader.tsx +21 -0
  27. package/react/lib/Components/blob-loading.css +27 -23
  28. package/react/lib/Components/cell.css +7 -7
  29. package/react/lib/Components/content-error/ContentError.tsx +19 -16
  30. package/react/lib/Components/content-error/content-error.css +5 -11
  31. package/react/lib/Components/module-declaration.ts +61 -13
  32. package/react/lib/Content.tsx +23 -47
  33. package/react/lib/Footer.tsx +52 -79
  34. package/react/lib/Header.tsx +11 -24
  35. package/react/lib/JBGrid.tsx +129 -70
  36. package/react/lib/JBGridViewModel.ts +189 -452
  37. package/react/lib/footer.css +25 -55
  38. package/react/lib/header.css +20 -20
  39. package/react/lib/jb-grid.css +69 -55
  40. package/react/lib/types.ts +32 -129
  41. package/react/lib/variables.css +6 -0
  42. package/react/package.json +14 -10
  43. package/react/tsconfig.json +5 -4
  44. package/web-component/dist/index.cjs.js +559 -1
  45. package/web-component/dist/index.cjs.js.br +0 -0
  46. package/web-component/dist/index.cjs.js.gz +0 -0
  47. package/web-component/dist/index.cjs.js.map +1 -1
  48. package/web-component/dist/index.d.ts +161 -4
  49. package/web-component/dist/index.d.ts.map +1 -1
  50. package/web-component/dist/index.js +561 -1
  51. package/web-component/dist/index.js.br +0 -0
  52. package/web-component/dist/index.js.gz +0 -0
  53. package/web-component/dist/index.js.map +1 -1
  54. package/web-component/dist/index.umd.js +567 -1
  55. package/web-component/dist/index.umd.js.br +0 -0
  56. package/web-component/dist/index.umd.js.gz +0 -0
  57. package/web-component/dist/index.umd.js.map +1 -1
  58. package/web-component/dist/row/row.d.ts.map +1 -1
  59. package/web-component/dist/row/types.d.ts +3 -5
  60. package/web-component/dist/row/types.d.ts.map +1 -1
  61. package/web-component/dist/row/utils.d.ts +1 -2
  62. package/web-component/dist/row/utils.d.ts.map +1 -1
  63. package/web-component/dist/table-header/render.d.ts +2 -0
  64. package/web-component/dist/table-header/render.d.ts.map +1 -0
  65. package/web-component/dist/table-header/table-header.d.ts +9 -0
  66. package/web-component/dist/table-header/table-header.d.ts.map +1 -0
  67. package/web-component/dist/table-header/types.d.ts +4 -0
  68. package/web-component/dist/table-header/types.d.ts.map +1 -0
  69. package/web-component/dist/types.d.ts +6 -0
  70. package/web-component/dist/types.d.ts.map +1 -0
  71. package/web-component/dist/utils.d.ts +8 -0
  72. package/web-component/dist/utils.d.ts.map +1 -0
  73. package/web-component/lib/cell/cell.ts +10 -5
  74. package/web-component/lib/cell/style.css +2 -1
  75. package/web-component/lib/column-header/column-header.ts +117 -0
  76. package/web-component/lib/column-header/render.ts +14 -0
  77. package/web-component/lib/column-header/style.css +60 -0
  78. package/web-component/lib/column-header/types.ts +10 -0
  79. package/web-component/lib/fullscreen-icon/fullscreen-icon.ts +72 -0
  80. package/web-component/lib/fullscreen-icon/render.ts +23 -0
  81. package/web-component/lib/fullscreen-icon/style.css +44 -0
  82. package/web-component/lib/fullscreen-icon/types.ts +1 -0
  83. package/web-component/lib/i18n.ts +38 -0
  84. package/web-component/lib/index.ts +9 -4
  85. package/web-component/lib/pagination/README.md +4 -0
  86. package/web-component/lib/pagination/pagination.ts +25 -15
  87. package/web-component/lib/pagination/render.ts +13 -10
  88. package/web-component/lib/pagination/style.css +43 -31
  89. package/web-component/lib/pagination/types.ts +1 -1
  90. package/web-component/lib/pagination/variables.css +10 -0
  91. package/web-component/lib/pagination-info/pagination-info.ts +191 -0
  92. package/web-component/lib/pagination-info/render.ts +16 -0
  93. package/web-component/lib/pagination-info/style.css +47 -0
  94. package/web-component/lib/pagination-info/types.ts +12 -0
  95. package/web-component/lib/refresh-icon/refresh-icon.ts +79 -0
  96. package/web-component/lib/refresh-icon/render.ts +10 -0
  97. package/web-component/lib/refresh-icon/style.css +21 -0
  98. package/web-component/lib/row/render.ts +3 -3
  99. package/web-component/lib/row/row.ts +29 -15
  100. package/web-component/lib/row/style.css +30 -30
  101. package/web-component/lib/row/types.ts +7 -8
  102. package/web-component/lib/row/utils.ts +1 -40
  103. package/web-component/lib/row/variables.css +13 -0
  104. package/web-component/lib/table-header/render.ts +9 -0
  105. package/web-component/lib/table-header/style.css +29 -0
  106. package/web-component/lib/table-header/table-header.ts +50 -0
  107. package/web-component/lib/table-header/types.ts +4 -0
  108. package/web-component/lib/toggle/expand-toggle.ts +17 -13
  109. package/web-component/lib/toggle/render.ts +18 -13
  110. package/web-component/lib/toggle/style.css +18 -5
  111. package/web-component/lib/types.ts +6 -0
  112. package/web-component/lib/utils.ts +46 -0
  113. package/react/lib/JBGridBridgeExample.js +0 -90
  114. package/react/lib/JBGridData.ts +0 -51
  115. package/react/lib/global.d.ts +0 -15
  116. package/web-component/lib/global.d.ts +0 -15
  117. package/web-component/tsconfig.json +0 -17
@@ -1,70 +1,129 @@
1
- import React, { type ReactNode, useEffect } from 'react';
2
- import JBGridViewModel, { JBGridContext } from './JBGridViewModel.js';
3
- import { observer } from 'mobx-react';
4
- import CSS from './jb-grid.css';
5
- import BlobCSS from './Components/blob-loading.css';
6
- export { JBGridData } from './JBGridData.js';
7
- import 'jb-searchbar';
8
- import type { AnyObject, JBGridBridgeClassInterface, JBGridConfig, JBGridI18nConfig, SearchbarConfig } from './types.js';
9
- import Footer from './Footer.js';
10
- import Header from './Header.js';
11
- import Content from './Content.js';
12
- import { useInstance } from 'jb-core/react';
13
- import { injectCss } from 'jb-core';
14
-
15
- export {JBPagination, type Props as PaginationProps} from './Components/Pagination.js';
16
- export * from './Components/Row.js';
17
- export * from './Components/Cell.js';
18
- export * from './Components/ExpandRow.js';
19
- export * from './Components/ExpandToggle.js';
20
- export * from './types.js';
21
- export type Props<T extends AnyObject> = {
22
- searchbarConfig?: SearchbarConfig | null | undefined,
23
- config: JBGridConfig<T>,
24
- bridge: JBGridBridgeClassInterface,
25
- isFullscreen?: boolean,
26
- className?: string,
27
- style?: React.CSSProperties,
28
- onFullscreenChange?: (isFullscreen: boolean) => void,
29
- title: string,
30
- i18n?: JBGridI18nConfig | null | undefined,
31
- contentError?: ReactNode,
32
- headerEndComponents?: ReactNode[] | ReactNode,
33
- children?: React.ReactNode | React.ReactNode[]
34
- }
35
-
36
- injectCss(CSS as unknown as string);
37
- injectCss(BlobCSS as unknown as string);
38
-
39
- function JBGridComponent<T extends AnyObject>(props: Props<T>) {
40
- const vm = useInstance(JBGridViewModel<AnyObject>, [props.onFullscreenChange, props.config, props.bridge]);
41
- useEffect(() => {
42
- vm.onComponentDidMount(props.searchbarConfig || null);
43
- }, []);
44
-
45
- useEffect(() => {
46
- if(props.i18n){
47
- vm.setI18n(props.i18n);
48
- }
49
- }, [props.i18n]);
50
-
51
- useEffect(() => {
52
- if (props.isFullscreen !== null && props.isFullscreen !== undefined) {
53
- vm.onFullscreenChanged(props.isFullscreen);
54
- }
55
- }, [props.isFullscreen]);
56
- if (!vm.config) {
57
- return (<></>);
58
- }
59
- return (
60
- <JBGridContext.Provider value={vm} key={"jb-grid-context"}>
61
- <div className={`jb-grid-wrapper ${props.className ?? ""}`} ref={vm.JBGridComponentDom} style={props.style}>
62
- <Header title={props.title} vm={vm} searchbarConfig={props.searchbarConfig} headerEndComponents={props.headerEndComponents}></Header>
63
- <Content i18n={vm.i18n} config={vm.config} isErrorOccurred={vm.isErrorOccurred} isLoading={vm.isLoading} refreshBtnClick={vm.refreshBtnClick} setSortColumn={vm.setSortColumn} styles={vm.styles} errorComponent={props.contentError}>{props.children}</Content>
64
- <Footer isFullscreen={props.isFullscreen ?? false} vm={vm}></Footer>
65
- </div>
66
- </JBGridContext.Provider>
67
- );
68
- }
69
-
70
- export const JBGrid = observer(JBGridComponent);
1
+ import React, { type ReactNode, useEffect, useReducer } from 'react';
2
+ import JBGridViewModel, { JBGridContext } from './JBGridViewModel.js';
3
+ import CSS from './jb-grid.css?inline';
4
+ import VariablesCSS from './variables.css?inline';
5
+ import BlobCSS from './Components/blob-loading.css?inline';
6
+ import type { AnyObject, JBGridCallbacks, JBGridI18nConfig, JBGridRenderContext, JBGridRowData } from './types.js';
7
+ import Footer from './Footer.js';
8
+ import Header from './Header.js';
9
+ import Content from './Content.js';
10
+ import { useInstance } from 'jb-core/react';
11
+ import { injectCss } from 'jb-core';
12
+
13
+ export {JBPagination, type Props as PaginationProps} from './Components/Pagination.js';
14
+ export * from './Components/PaginationInfo.js';
15
+ export * from './Components/RefreshIcon.js';
16
+ export * from './Components/FullscreenIcon.js';
17
+ export * from './Components/Row.js';
18
+ export * from './Components/TableHeader.js';
19
+ export * from './Components/ColumnHeader.js';
20
+ export * from './Components/Cell.js';
21
+ export * from './Components/ExpandRow.js';
22
+ export * from './Components/ExpandToggle.js';
23
+ export * from './types.js';
24
+ export type Props<T extends AnyObject> = {
25
+ searchbarComponent?: ReactNode,
26
+ tableHeader?: ReactNode,
27
+ data: JBGridRowData<T>[],
28
+ pageIndex: number,
29
+ pageSize: number,
30
+ totalItemsCount: number,
31
+ totalPages?: number,
32
+ startItemIndex?: number,
33
+ endItemIndex?: number,
34
+ isLoading?: boolean,
35
+ isErrorOccurred?: boolean,
36
+ isFullscreen?: boolean,
37
+ className?: string,
38
+ style?: React.CSSProperties,
39
+ onFullscreen?: JBGridCallbacks["onFullscreen"],
40
+ onPageIndexChange?: JBGridCallbacks["onPageIndexChange"],
41
+ onPageSizeChange?: JBGridCallbacks["onPageSizeChange"],
42
+ onRefresh?: JBGridCallbacks["onRefresh"],
43
+ onExitFullscreen?: JBGridCallbacks["onExitFullscreen"],
44
+ /**
45
+ * @deprecated use onFullscreen and onExitFullscreen instead
46
+ */
47
+ onFullscreenChange?: JBGridCallbacks["onFullscreenChange"],
48
+ title: string,
49
+ i18n?: JBGridI18nConfig | null | undefined,
50
+ contentError?: ReactNode,
51
+ headerEndComponents?: ReactNode[] | ReactNode,
52
+ children?: React.ReactNode | React.ReactNode[] | ((data: JBGridRowData<T>[], context: JBGridRenderContext) => React.ReactNode | React.ReactNode[])
53
+ }
54
+
55
+ injectCss(VariablesCSS as unknown as string);
56
+ injectCss(CSS as unknown as string);
57
+ injectCss(BlobCSS as unknown as string);
58
+
59
+ function JBGridComponent<T extends AnyObject>(props: Props<T>) {
60
+ const [, forceUpdate] = useReducer((version: number) => version + 1, 0);
61
+ const vm = useInstance(JBGridViewModel, [{
62
+ onFullscreen: props.onFullscreen,
63
+ onPageIndexChange: props.onPageIndexChange,
64
+ onPageSizeChange: props.onPageSizeChange,
65
+ onRefresh: props.onRefresh,
66
+ onExitFullscreen: props.onExitFullscreen,
67
+ onFullscreenChange: props.onFullscreenChange
68
+ }, forceUpdate]);
69
+
70
+ const totalPages = props.totalPages ?? Math.max(1, Math.ceil(props.totalItemsCount / props.pageSize));
71
+ const startItemIndex = props.startItemIndex ?? ((props.pageIndex - 1) * props.pageSize) + (props.data.length > 0 ? 1 : 0);
72
+ const endItemIndex = props.endItemIndex ?? ((props.pageIndex - 1) * props.pageSize) + props.data.length;
73
+
74
+ vm.setGridState({
75
+ pageIndex: props.pageIndex,
76
+ pageSize: props.pageSize,
77
+ totalPages,
78
+ metaData: {
79
+ startItemIndex,
80
+ endItemIndex,
81
+ totalItemsCount: props.totalItemsCount
82
+ }
83
+ });
84
+
85
+ useEffect(() => {
86
+ vm.setCallbacks({
87
+ onFullscreen: props.onFullscreen,
88
+ onPageIndexChange: props.onPageIndexChange,
89
+ onPageSizeChange: props.onPageSizeChange,
90
+ onRefresh: props.onRefresh,
91
+ onExitFullscreen: props.onExitFullscreen,
92
+ onFullscreenChange: props.onFullscreenChange
93
+ });
94
+ }, [vm, props.onFullscreen, props.onPageIndexChange, props.onPageSizeChange, props.onRefresh, props.onExitFullscreen, props.onFullscreenChange]);
95
+
96
+ useEffect(() => {
97
+ vm.setStateChangeCallback(forceUpdate);
98
+ return () => {
99
+ vm.setStateChangeCallback(undefined);
100
+ };
101
+ }, [vm, forceUpdate]);
102
+
103
+ useEffect(() => {
104
+ if(props.i18n){
105
+ vm.setI18n(props.i18n);
106
+ }
107
+ }, [props.i18n]);
108
+
109
+ useEffect(() => {
110
+ if (props.isFullscreen !== null && props.isFullscreen !== undefined) {
111
+ vm.onFullscreenChanged(props.isFullscreen);
112
+ }
113
+ }, [props.isFullscreen]);
114
+ const renderContext: JBGridRenderContext = {
115
+ refreshView: () => vm.notifyStateChange()
116
+ };
117
+ const contentChildren = typeof props.children === "function" ? props.children(props.data, renderContext) : props.children;
118
+ return (
119
+ <JBGridContext.Provider value={vm} key={"jb-grid-context"}>
120
+ <div className={`jb-grid-wrapper ${props.className ?? ""}`} ref={vm.JBGridComponentDom} style={props.style}>
121
+ <Header title={props.title} vm={vm} searchbarComponent={props.searchbarComponent} headerEndComponents={props.headerEndComponents}></Header>
122
+ <Content i18n={vm.i18n} tableHeader={props.tableHeader} isErrorOccurred={props.isErrorOccurred ?? false} isLoading={props.isLoading ?? false} refreshBtnClick={vm.refreshBtnClick} errorComponent={props.contentError}>{contentChildren}</Content>
123
+ <Footer isFullscreen={props.isFullscreen ?? false} vm={vm}></Footer>
124
+ </div>
125
+ </JBGridContext.Provider>
126
+ );
127
+ }
128
+
129
+ export const JBGrid = JBGridComponent;