@movalib/movalib-commons 1.68.28 → 1.68.30
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/dist/src/components/MovaTableBack/MovaTableBack.d.ts +6 -1
- package/dist/src/components/MovaTableBack/MovaTableBack.js +12 -7
- package/dist/src/models/Settings.d.ts +2 -1
- package/dist/src/models/Settings.js +1 -0
- package/package.json +1 -1
- package/src/components/MovaTableBack/MovaTableBack.tsx +42 -1
- package/src/models/Settings.ts +2 -1
|
@@ -21,7 +21,12 @@ type TMovaTable<T> = {
|
|
|
21
21
|
onRowDoubleClick?: (data: T) => void;
|
|
22
22
|
filterChildren?: React.ReactNode;
|
|
23
23
|
asSearchSection?: boolean;
|
|
24
|
+
cardRenderer?: ComponentType<{
|
|
25
|
+
element: T;
|
|
26
|
+
onClick?: () => void;
|
|
27
|
+
}>;
|
|
28
|
+
forceCardRender?: boolean;
|
|
24
29
|
placeHolderNoData?: React.ReactNode;
|
|
25
30
|
};
|
|
26
|
-
export default function MovaTableBack<T>({ useDataHook, displayedColumns, pagination, compact, onRowClick, onRowRightClick, onRowDoubleClick, isClickable, filterChildren, asSearchSection, placeHolderNoData, }: TMovaTable<T>): import("react/jsx-runtime").JSX.Element;
|
|
31
|
+
export default function MovaTableBack<T>({ useDataHook, displayedColumns, pagination, compact, onRowClick, onRowRightClick, onRowDoubleClick, isClickable, filterChildren, asSearchSection, placeHolderNoData, cardRenderer, forceCardRender, }: TMovaTable<T>): import("react/jsx-runtime").JSX.Element;
|
|
27
32
|
export {};
|
|
@@ -9,13 +9,18 @@ var icons_material_1 = require("@mui/icons-material");
|
|
|
9
9
|
var Search_1 = __importDefault(require("@mui/icons-material/Search"));
|
|
10
10
|
var material_1 = require("@mui/material");
|
|
11
11
|
var react_1 = require("react");
|
|
12
|
+
var material_2 = require("@mui/material");
|
|
12
13
|
function MovaTableBack(_a) {
|
|
13
|
-
var useDataHook = _a.useDataHook, displayedColumns = _a.displayedColumns, pagination = _a.pagination, compact = _a.compact, onRowClick = _a.onRowClick, onRowRightClick = _a.onRowRightClick, onRowDoubleClick = _a.onRowDoubleClick, isClickable = _a.isClickable, filterChildren = _a.filterChildren, _b = _a.asSearchSection, asSearchSection = _b === void 0 ? true : _b, placeHolderNoData = _a.placeHolderNoData;
|
|
14
|
-
var
|
|
15
|
-
var
|
|
16
|
-
var
|
|
14
|
+
var useDataHook = _a.useDataHook, displayedColumns = _a.displayedColumns, pagination = _a.pagination, compact = _a.compact, onRowClick = _a.onRowClick, onRowRightClick = _a.onRowRightClick, onRowDoubleClick = _a.onRowDoubleClick, isClickable = _a.isClickable, filterChildren = _a.filterChildren, _b = _a.asSearchSection, asSearchSection = _b === void 0 ? true : _b, placeHolderNoData = _a.placeHolderNoData, cardRenderer = _a.cardRenderer, _c = _a.forceCardRender, forceCardRender = _c === void 0 ? false : _c;
|
|
15
|
+
var _d = (0, react_1.useState)(0), currentPageIndex = _d[0], setCurrentPageIndex = _d[1];
|
|
16
|
+
var _e = (0, react_1.useState)(25), rowsPerPage = _e[0], setRowsPerPage = _e[1];
|
|
17
|
+
var _f = (0, react_1.useState)(""), search = _f[0], setSearch = _f[1];
|
|
17
18
|
var clickTimeout = (0, react_1.useRef)(null);
|
|
18
|
-
var
|
|
19
|
+
var theme = (0, material_2.useTheme)();
|
|
20
|
+
var isMobile = (0, material_2.useMediaQuery)(theme.breakpoints.down("md"));
|
|
21
|
+
var showCards = (isMobile || forceCardRender) && !!cardRenderer;
|
|
22
|
+
var CardComponent = cardRenderer;
|
|
23
|
+
var _g = useDataHook(currentPageIndex, rowsPerPage, search), data = _g.data, totalElements = _g.totalElements, isLoading = _g.isLoading, refresh = _g.refresh;
|
|
19
24
|
var handleDoubleClick = (0, react_1.useCallback)(function (element) {
|
|
20
25
|
if (!onRowDoubleClick)
|
|
21
26
|
return;
|
|
@@ -61,7 +66,7 @@ function MovaTableBack(_a) {
|
|
|
61
66
|
gap: 2,
|
|
62
67
|
}, children: [(0, jsx_runtime_1.jsx)(material_1.TextField, { size: "small", type: "search", onChange: handleSearchChange, inputProps: {
|
|
63
68
|
startAdornment: ((0, jsx_runtime_1.jsx)(material_1.InputAdornment, { position: "start", children: (0, jsx_runtime_1.jsx)(Search_1.default, {}) })),
|
|
64
|
-
}, sx: { width: "100%" }, placeholder: "Rechercher" }), refresh && ((0, jsx_runtime_1.jsx)(material_1.Button, { size: "small", onClick: refresh, variant: "contained", children: (0, jsx_runtime_1.jsx)(icons_material_1.Refresh, {}) }))] }), filterChildren && filterChildren, (0, jsx_runtime_1.jsx)(material_1.TableContainer, { sx: { height: "100%" }, component: material_1.Paper, children: (0, jsx_runtime_1.jsxs)(material_1.Table, { size: compact ? "small" : "medium", sx: { height: "100%" }, stickyHeader: true, children: [(0, jsx_runtime_1.jsx)(material_1.TableHead, { children: (0, jsx_runtime_1.jsx)(material_1.TableRow, { children: displayedColumns.map(function (column, index) { return ((0, jsx_runtime_1.jsx)(material_1.TableCell, { children: column.displayName }, index)); }) }) }), (0, jsx_runtime_1.jsxs)(material_1.TableBody, { sx: { overflowY: "auto" }, children: [isLoading && ((0, jsx_runtime_1.jsx)(material_1.TableRow, { children: (0, jsx_runtime_1.jsx)(material_1.TableCell, { colSpan: 5, sx: { padding: 0 }, children: (0, jsx_runtime_1.jsx)(material_1.LinearProgress, {}) }) })), !isLoading && (data === null || data === void 0 ? void 0 : data.length) === 0 && placeHolderNoData && ((0, jsx_runtime_1.jsx)(material_1.TableRow, { children: (0, jsx_runtime_1.jsx)(material_1.TableCell, { colSpan: displayedColumns.length, sx: { textAlign: "center", color: "grey.400" }, children: placeHolderNoData }) })), (data === null || data === void 0 ? void 0 : data.length) !== 0 &&
|
|
69
|
+
}, sx: { width: "100%" }, placeholder: "Rechercher" }), refresh && ((0, jsx_runtime_1.jsx)(material_1.Button, { size: "small", onClick: refresh, variant: "contained", children: (0, jsx_runtime_1.jsx)(icons_material_1.Refresh, {}) }))] }), filterChildren && filterChildren, showCards ? ((0, jsx_runtime_1.jsxs)(material_1.Box, { sx: { flex: 1, minHeight: 0, display: "flex", flexDirection: "column" }, children: [(0, jsx_runtime_1.jsxs)(material_1.Box, { sx: { flex: 1, minHeight: 0, overflow: "auto", display: "flex", flexDirection: "column", gap: 1, p: 1 }, children: [isLoading && (0, jsx_runtime_1.jsx)(material_1.LinearProgress, {}), !isLoading && (data === null || data === void 0 ? void 0 : data.length) === 0 && placeHolderNoData, data === null || data === void 0 ? void 0 : data.map(function (element, index) { return ((0, jsx_runtime_1.jsx)(CardComponent, { element: element, onClick: function () { return onRowClick === null || onRowClick === void 0 ? void 0 : onRowClick(element); } }, index)); })] }), pagination && pagination.length > 0 && ((0, jsx_runtime_1.jsx)(material_1.Box, { sx: { flexShrink: 0, borderTop: 1, borderColor: "divider", backgroundColor: "white" }, children: (0, jsx_runtime_1.jsx)(material_1.TablePagination, { sx: { minHeight: "52px" }, component: "div", count: totalElements, onPageChange: handlePageChange, page: currentPageIndex, rowsPerPage: rowsPerPage, labelRowsPerPage: "Par page :", onRowsPerPageChange: handleRowsPerPageChange, rowsPerPageOptions: pagination }) }))] })) : ((0, jsx_runtime_1.jsx)(material_1.TableContainer, { sx: { height: "100%" }, component: material_1.Paper, children: (0, jsx_runtime_1.jsxs)(material_1.Table, { size: compact ? "small" : "medium", sx: { height: "100%" }, stickyHeader: true, children: [(0, jsx_runtime_1.jsx)(material_1.TableHead, { children: (0, jsx_runtime_1.jsx)(material_1.TableRow, { children: displayedColumns.map(function (column, index) { return ((0, jsx_runtime_1.jsx)(material_1.TableCell, { children: column.displayName }, index)); }) }) }), (0, jsx_runtime_1.jsxs)(material_1.TableBody, { sx: { overflowY: "auto" }, children: [isLoading && ((0, jsx_runtime_1.jsx)(material_1.TableRow, { children: (0, jsx_runtime_1.jsx)(material_1.TableCell, { colSpan: 5, sx: { padding: 0 }, children: (0, jsx_runtime_1.jsx)(material_1.LinearProgress, {}) }) })), !isLoading && (data === null || data === void 0 ? void 0 : data.length) === 0 && placeHolderNoData && ((0, jsx_runtime_1.jsx)(material_1.TableRow, { children: (0, jsx_runtime_1.jsx)(material_1.TableCell, { colSpan: displayedColumns.length, sx: { textAlign: "center", color: "grey.400" }, children: placeHolderNoData }) })), (data === null || data === void 0 ? void 0 : data.length) !== 0 &&
|
|
65
70
|
(data === null || data === void 0 ? void 0 : data.map(function (element, index) { return ((0, jsx_runtime_1.jsx)(material_1.TableRow, { onDoubleClick: function () {
|
|
66
71
|
handleDoubleClick(element);
|
|
67
72
|
}, onClick: function () { return handleRowClick(element); }, onContextMenu: function (event) {
|
|
@@ -80,5 +85,5 @@ function MovaTableBack(_a) {
|
|
|
80
85
|
width: "1%",
|
|
81
86
|
maxWidth: "fit-content",
|
|
82
87
|
}
|
|
83
|
-
: {}, children: column.component && ((0, jsx_runtime_1.jsx)(column.component, { element: element })) }, index)); }) }, index)); })), (0, jsx_runtime_1.jsx)(material_1.TableRow, { sx: { height: "100%" } })] }), pagination && pagination.length > 0 && ((0, jsx_runtime_1.jsx)(material_1.TableFooter, { sx: { position: "sticky", bottom: 0, backgroundColor: "white" }, children: (0, jsx_runtime_1.jsx)(material_1.TableRow, { children: (0, jsx_runtime_1.jsx)(material_1.TablePagination, { count: totalElements, onPageChange: handlePageChange, page: currentPageIndex, rowsPerPage: rowsPerPage, labelRowsPerPage: "Lignes par page :", onRowsPerPageChange: handleRowsPerPageChange, rowsPerPageOptions: pagination }) }) }))] }) })] }));
|
|
88
|
+
: {}, children: column.component && ((0, jsx_runtime_1.jsx)(column.component, { element: element })) }, index)); }) }, index)); })), (0, jsx_runtime_1.jsx)(material_1.TableRow, { sx: { height: "100%" } })] }), pagination && pagination.length > 0 && ((0, jsx_runtime_1.jsx)(material_1.TableFooter, { sx: { position: "sticky", bottom: 0, backgroundColor: "white" }, children: (0, jsx_runtime_1.jsx)(material_1.TableRow, { children: (0, jsx_runtime_1.jsx)(material_1.TablePagination, { count: totalElements, onPageChange: handlePageChange, page: currentPageIndex, rowsPerPage: rowsPerPage, labelRowsPerPage: "Lignes par page :", onRowsPerPageChange: handleRowsPerPageChange, rowsPerPageOptions: pagination }) }) }))] }) }))] }));
|
|
84
89
|
}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
export declare enum SettingsEnumCode {
|
|
2
2
|
STOCK_MODULE_ENABLED = "STOCK_MODULE_ENABLED",
|
|
3
3
|
NO_PHONE_CUSTOMER_CREATION = "NO_PHONE_CUSTOMER_CREATION",
|
|
4
|
-
DOCUMENT_PRODUCT_CREATION = "DOCUMENT_PRODUCT_CREATION"
|
|
4
|
+
DOCUMENT_PRODUCT_CREATION = "DOCUMENT_PRODUCT_CREATION",
|
|
5
|
+
DOCUMENT_PRODUCT_UPDATE = "DOCUMENT_PRODUCT_UPDATE"
|
|
5
6
|
}
|
|
6
7
|
export default class Settings {
|
|
7
8
|
code: SettingsEnumCode;
|
|
@@ -6,6 +6,7 @@ var SettingsEnumCode;
|
|
|
6
6
|
SettingsEnumCode["STOCK_MODULE_ENABLED"] = "STOCK_MODULE_ENABLED";
|
|
7
7
|
SettingsEnumCode["NO_PHONE_CUSTOMER_CREATION"] = "NO_PHONE_CUSTOMER_CREATION";
|
|
8
8
|
SettingsEnumCode["DOCUMENT_PRODUCT_CREATION"] = "DOCUMENT_PRODUCT_CREATION";
|
|
9
|
+
SettingsEnumCode["DOCUMENT_PRODUCT_UPDATE"] = "DOCUMENT_PRODUCT_UPDATE";
|
|
9
10
|
})(SettingsEnumCode || (exports.SettingsEnumCode = SettingsEnumCode = {}));
|
|
10
11
|
var Settings = /** @class */ (function () {
|
|
11
12
|
function Settings(code, valueBoolean, valueText, valueNumber) {
|
package/package.json
CHANGED
|
@@ -25,6 +25,7 @@ import {
|
|
|
25
25
|
useRef,
|
|
26
26
|
useState,
|
|
27
27
|
} from "react";
|
|
28
|
+
import { useMediaQuery, useTheme } from "@mui/material";
|
|
28
29
|
|
|
29
30
|
type TMovaTable<T> = {
|
|
30
31
|
useDataHook: (
|
|
@@ -50,6 +51,8 @@ type TMovaTable<T> = {
|
|
|
50
51
|
onRowDoubleClick?: (data: T) => void;
|
|
51
52
|
filterChildren?: React.ReactNode;
|
|
52
53
|
asSearchSection?: boolean;
|
|
54
|
+
cardRenderer?: ComponentType<{ element: T; onClick?: () => void }>;
|
|
55
|
+
forceCardRender?:boolean;
|
|
53
56
|
placeHolderNoData?: React.ReactNode;
|
|
54
57
|
};
|
|
55
58
|
|
|
@@ -65,12 +68,17 @@ export default function MovaTableBack<T>({
|
|
|
65
68
|
filterChildren,
|
|
66
69
|
asSearchSection = true,
|
|
67
70
|
placeHolderNoData,
|
|
71
|
+
cardRenderer,
|
|
72
|
+
forceCardRender = false,
|
|
68
73
|
}: TMovaTable<T>) {
|
|
69
74
|
const [currentPageIndex, setCurrentPageIndex] = useState<number>(0);
|
|
70
75
|
const [rowsPerPage, setRowsPerPage] = useState<number>(25);
|
|
71
76
|
const [search, setSearch] = useState("");
|
|
72
77
|
const clickTimeout = useRef<ReturnType<typeof setTimeout> | null>(null);
|
|
73
|
-
|
|
78
|
+
const theme = useTheme();
|
|
79
|
+
const isMobile = useMediaQuery(theme.breakpoints.down("md"));
|
|
80
|
+
const showCards = (isMobile || forceCardRender) && !!cardRenderer;
|
|
81
|
+
const CardComponent = cardRenderer as ComponentType<{ element: T; onClick?: () => void }>;
|
|
74
82
|
const { data, totalElements, isLoading, refresh } = useDataHook(
|
|
75
83
|
currentPageIndex,
|
|
76
84
|
rowsPerPage,
|
|
@@ -161,6 +169,38 @@ export default function MovaTableBack<T>({
|
|
|
161
169
|
)}
|
|
162
170
|
</Box>}
|
|
163
171
|
{filterChildren && filterChildren}
|
|
172
|
+
|
|
173
|
+
{showCards ? (
|
|
174
|
+
<Box sx={{ flex: 1, minHeight: 0, display: "flex", flexDirection: "column" }}>
|
|
175
|
+
{/* Zone scrollable */}
|
|
176
|
+
<Box sx={{ flex: 1, minHeight: 0, overflow: "auto", display: "flex", flexDirection: "column", gap: 1, p: 1 }}>
|
|
177
|
+
{isLoading && <LinearProgress />}
|
|
178
|
+
{!isLoading && data?.length === 0 && placeHolderNoData}
|
|
179
|
+
{data?.map((element, index) => (
|
|
180
|
+
<CardComponent key={index} element={element} onClick={() => onRowClick?.(element)} />
|
|
181
|
+
))}
|
|
182
|
+
</Box>
|
|
183
|
+
|
|
184
|
+
{/* Pagination fixe en bas */}
|
|
185
|
+
{pagination && pagination.length > 0 && (
|
|
186
|
+
<Box sx={{ flexShrink: 0, borderTop: 1, borderColor: "divider", backgroundColor: "white" }}>
|
|
187
|
+
<TablePagination
|
|
188
|
+
sx={{ minHeight: "52px" }}
|
|
189
|
+
component="div"
|
|
190
|
+
count={totalElements}
|
|
191
|
+
onPageChange={handlePageChange}
|
|
192
|
+
page={currentPageIndex}
|
|
193
|
+
rowsPerPage={rowsPerPage}
|
|
194
|
+
labelRowsPerPage="Par page :"
|
|
195
|
+
onRowsPerPageChange={handleRowsPerPageChange}
|
|
196
|
+
rowsPerPageOptions={pagination}
|
|
197
|
+
/>
|
|
198
|
+
</Box>
|
|
199
|
+
)}
|
|
200
|
+
</Box>
|
|
201
|
+
) : (
|
|
202
|
+
|
|
203
|
+
|
|
164
204
|
<TableContainer sx={{ height: "100%" }} component={Paper}>
|
|
165
205
|
<Table
|
|
166
206
|
size={compact ? "small" : "medium"}
|
|
@@ -258,6 +298,7 @@ export default function MovaTableBack<T>({
|
|
|
258
298
|
)}
|
|
259
299
|
</Table>
|
|
260
300
|
</TableContainer>
|
|
301
|
+
)}
|
|
261
302
|
</div>
|
|
262
303
|
);
|
|
263
304
|
}
|
package/src/models/Settings.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
export enum SettingsEnumCode {
|
|
2
2
|
STOCK_MODULE_ENABLED = "STOCK_MODULE_ENABLED",
|
|
3
3
|
NO_PHONE_CUSTOMER_CREATION = "NO_PHONE_CUSTOMER_CREATION",
|
|
4
|
-
DOCUMENT_PRODUCT_CREATION = "DOCUMENT_PRODUCT_CREATION"
|
|
4
|
+
DOCUMENT_PRODUCT_CREATION = "DOCUMENT_PRODUCT_CREATION",
|
|
5
|
+
DOCUMENT_PRODUCT_UPDATE ="DOCUMENT_PRODUCT_UPDATE"
|
|
5
6
|
}
|
|
6
7
|
export default class Settings {
|
|
7
8
|
|