@uxf/data-grid 11.2.6 → 11.4.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.
- package/_generator/index.js +12 -83
- package/_store/actions.d.ts +3 -3
- package/_store/actions.js +2 -2
- package/_store/reducer.d.ts +4 -4
- package/_store/reducer.js +24 -23
- package/_story-utils/loader.js +4 -4
- package/_story-utils/schema.js +12 -3
- package/data-grid.stories.js +8 -0
- package/export-button/export-button.js +1 -1
- package/package.json +2 -2
- package/table/hooks/use-react-data-grid-columns.d.ts +1 -1
- package/table/table.js +2 -2
- package/toolbar-tabs/toolbar-tabs.js +2 -2
- package/types/api.d.ts +2 -3
- package/types/schema.d.ts +6 -2
- package/types/state.d.ts +6 -7
- package/use-data-grid-control/actions-factory.d.ts +2 -1
- package/use-data-grid-control/actions-factory.js +1 -1
- package/use-data-grid-control/use-data-grid-control.d.ts +7 -7
- package/use-data-grid-fetching/use-data-grid-fetching.js +3 -3
- package/utils.d.ts +1 -2
- package/utils.js +3 -6
package/_generator/index.js
CHANGED
|
@@ -14,90 +14,23 @@ function writeFile(filename, value) {
|
|
|
14
14
|
writeFileSync(filename, value);
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
-
function generateSchemaFile(gridName, schemaRelativeImport) {
|
|
17
|
+
function generateSchemaFile(gridName, schema, schemaRelativeImport) {
|
|
18
18
|
return `import { Schema } from "@uxf/data-grid";
|
|
19
19
|
import json from "${schemaRelativeImport}";
|
|
20
20
|
|
|
21
|
-
|
|
21
|
+
type DataGrid_${camelize(gridName)} = {
|
|
22
|
+
columns: {
|
|
23
|
+
${schema.columns.map((column) => `"${column.name}": "${column.type}",`).join("\n ")}
|
|
24
|
+
},
|
|
25
|
+
filters: {
|
|
26
|
+
${schema.filters.map((filter) => `"${filter.name}": "${filter.type}",`).join("\n ")}
|
|
27
|
+
}
|
|
22
28
|
}
|
|
23
29
|
|
|
24
|
-
|
|
25
|
-
return `import { useDataGridControl, UseDataGridControlConfig } from "@uxf/data-grid/use-data-grid-control";
|
|
26
|
-
import { dataGridSchema_${camelize(gridName)} as schema } from "./schema";
|
|
27
|
-
|
|
28
|
-
export function useDataGridControl_${camelize(gridName)}(config: Omit<UseDataGridControlConfig, "schema">) {
|
|
29
|
-
return useDataGridControl({
|
|
30
|
-
schema,
|
|
31
|
-
...config,
|
|
32
|
-
});
|
|
33
|
-
}
|
|
34
|
-
`;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
function generateUseDataGridFetching(gridName, isLoaderRequired) {
|
|
38
|
-
return `import { Loader } from "@uxf/data-grid/types/core";
|
|
39
|
-
import { useDataGridFetching, UseDataGridFetchingConfig } from "@uxf/data-grid/use-data-grid-fetching";
|
|
40
|
-
import { dataGridSchema_${camelize(gridName)} as schema } from "./schema";
|
|
41
|
-
|
|
42
|
-
export function useDataGridFetching_${camelize(gridName)}(
|
|
43
|
-
config: Omit<UseDataGridFetchingConfig, "gridName" | "loader" | "schema"> & { loader${
|
|
44
|
-
isLoaderRequired ? "" : "?"
|
|
45
|
-
}: Loader },
|
|
46
|
-
) {
|
|
47
|
-
return useDataGridFetching({ gridName: "${gridName}", schema, ...config });
|
|
48
|
-
}
|
|
49
|
-
`;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
function generateDataGridFile(gridName, isLoaderRequired) {
|
|
53
|
-
return `import { Nullish } from "@uxf/core/types";
|
|
54
|
-
import { DataGrid, DataGridProps, DataGridUserConfig, Loader, Request } from "@uxf/data-grid";
|
|
55
|
-
import { useDataGridControl } from "@uxf/data-grid/use-data-grid-control";
|
|
56
|
-
import { useDataGridFetching } from "@uxf/data-grid/use-data-grid-fetching";
|
|
57
|
-
import React from "react";
|
|
58
|
-
import { dataGridSchema_${camelize(gridName)} as schema } from "./schema";
|
|
59
|
-
|
|
60
|
-
type Props = Omit<
|
|
61
|
-
DataGridProps<any, any>,
|
|
62
|
-
"gridName" | "schema" | "state" | "actions" | "data" | "isLoading" | "onReload"
|
|
63
|
-
> & {
|
|
64
|
-
loader${isLoaderRequired ? "" : "?"}: Loader;
|
|
65
|
-
initialUserConfig?: DataGridUserConfig | Nullish;
|
|
66
|
-
initialState?: Request | string | Nullish;
|
|
67
|
-
};
|
|
68
|
-
|
|
69
|
-
export function DataGrid_${camelize(gridName)}(props: Props) {
|
|
70
|
-
const { state, actions } = useDataGridControl({
|
|
71
|
-
schema,
|
|
72
|
-
initialState: props.initialState,
|
|
73
|
-
initialUserConfig: props.initialUserConfig,
|
|
74
|
-
});
|
|
75
|
-
|
|
76
|
-
const { data, error, onReload, isLoading } = useDataGridFetching({
|
|
77
|
-
gridName: "${gridName}",
|
|
78
|
-
schema,
|
|
79
|
-
state,
|
|
80
|
-
loader: props.loader,
|
|
81
|
-
});
|
|
82
|
-
|
|
83
|
-
return (
|
|
84
|
-
<DataGrid<any>
|
|
85
|
-
state={state}
|
|
86
|
-
actions={actions}
|
|
87
|
-
data={data}
|
|
88
|
-
isLoading={isLoading}
|
|
89
|
-
error={error}
|
|
90
|
-
onReload={onReload}
|
|
91
|
-
{...props}
|
|
92
|
-
gridName="admin-club"
|
|
93
|
-
schema={schema}
|
|
94
|
-
/>
|
|
95
|
-
);
|
|
96
|
-
}
|
|
97
|
-
`;
|
|
30
|
+
export const dataGridSchema_${camelize(gridName)}: Schema<DataGrid_${camelize(gridName)}> = json as any;`;
|
|
98
31
|
}
|
|
99
32
|
|
|
100
|
-
function generate(
|
|
33
|
+
function generate(schema, filename, outputDirectory) {
|
|
101
34
|
const gridName = parse(filename).name;
|
|
102
35
|
const generatedPath = join(process.cwd(), outputDirectory, gridName);
|
|
103
36
|
|
|
@@ -105,16 +38,12 @@ function generate(jsonSchema, filename, outputDirectory, isLoaderRequired) {
|
|
|
105
38
|
|
|
106
39
|
writeFile(
|
|
107
40
|
generatedSchemaFilename,
|
|
108
|
-
generateSchemaFile(gridName, relative(dirname(generatedSchemaFilename), filename)),
|
|
41
|
+
generateSchemaFile(gridName, schema, relative(dirname(generatedSchemaFilename), filename)),
|
|
109
42
|
);
|
|
110
|
-
|
|
111
|
-
// writeFile(`${generatedPath}/data-grid.tsx`, generateDataGridFile(gridName, isLoaderRequired));
|
|
112
|
-
// writeFile(`${generatedPath}/use-data-grid-control.ts`, generateUseDataGridControl(gridName));
|
|
113
|
-
// writeFile(`${generatedPath}/use-data-grid-fetching.ts`, generateUseDataGridFetching(gridName, isLoaderRequired));
|
|
114
43
|
}
|
|
115
44
|
|
|
116
45
|
module.exports = (schemaDirectory, outputDirectory, requiredLoader) => {
|
|
117
46
|
globSync(schemaDirectory + "/*.json")
|
|
118
47
|
.map((path) => process.cwd() + "/" + path)
|
|
119
|
-
.forEach((filename) => generate(readFileSync(filename), filename, outputDirectory, requiredLoader));
|
|
48
|
+
.forEach((filename) => generate(JSON.parse(readFileSync(filename)), filename, outputDirectory, requiredLoader));
|
|
120
49
|
};
|
package/_store/actions.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { DataGridSortDir, RequestFilter, Response } from "../types";
|
|
1
|
+
import { DataGridSortDir, RequestFilter, Response, Tab } from "../types";
|
|
2
2
|
export declare const dataGridActions: {
|
|
3
3
|
filter: (filterValue: RequestFilter) => {
|
|
4
4
|
type: string;
|
|
@@ -15,9 +15,9 @@ export declare const dataGridActions: {
|
|
|
15
15
|
type: string;
|
|
16
16
|
perPage: number;
|
|
17
17
|
};
|
|
18
|
-
changeTab: (
|
|
18
|
+
changeTab: (tab: Tab) => {
|
|
19
19
|
type: string;
|
|
20
|
-
|
|
20
|
+
tab: Tab;
|
|
21
21
|
};
|
|
22
22
|
reload: () => {
|
|
23
23
|
type: string;
|
package/_store/actions.js
CHANGED
package/_store/reducer.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { Nullish } from "@uxf/core/types";
|
|
2
2
|
import { Reducer } from "react";
|
|
3
3
|
import { Request } from "../types/api";
|
|
4
|
-
import { Schema } from "../types/schema";
|
|
4
|
+
import { BaseGridType, Schema } from "../types/schema";
|
|
5
5
|
import { DataGridState, DataGridUserConfig } from "../types/state";
|
|
6
|
-
export declare
|
|
7
|
-
export declare const reducer: Reducer<DataGridState
|
|
8
|
-
export declare const debugReducer: Reducer<DataGridState
|
|
6
|
+
export declare function getInitialState<GridType extends BaseGridType>(schema: Schema<GridType>, init?: Request | string | Nullish, initialUserConfig?: DataGridUserConfig<GridType> | Nullish): DataGridState<GridType>;
|
|
7
|
+
export declare const reducer: Reducer<DataGridState<any>, any>;
|
|
8
|
+
export declare const debugReducer: Reducer<DataGridState<any>, any>;
|
package/_store/reducer.js
CHANGED
|
@@ -3,26 +3,27 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.debugReducer = exports.reducer = exports.getInitialState = void 0;
|
|
4
4
|
const is_nil_1 = require("@uxf/core/utils/is-nil");
|
|
5
5
|
const utils_1 = require("../utils");
|
|
6
|
-
|
|
7
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;
|
|
6
|
+
function getInitialState(schema, init, initialUserConfig) {
|
|
7
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r;
|
|
8
8
|
const initialState = (0, is_nil_1.isNil)(init) ? {} : typeof init === "string" ? (_a = (0, utils_1.decodeFilter)(init)) !== null && _a !== void 0 ? _a : {} : init;
|
|
9
|
+
const tabName = (_e = (_b = initialState.tab) !== null && _b !== void 0 ? _b : (_d = (_c = schema.tabs) === null || _c === void 0 ? void 0 : _c[0]) === null || _d === void 0 ? void 0 : _d.name) !== null && _e !== void 0 ? _e : null;
|
|
10
|
+
const tabSort = tabName !== null ? (_g = (_f = schema.tabs) === null || _f === void 0 ? void 0 : _f.find((t) => t.name === tabName)) === null || _g === void 0 ? void 0 : _g.s : null;
|
|
9
11
|
return {
|
|
10
12
|
request: {
|
|
11
|
-
f: (
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
search: (_m = initialState.search) !== null && _m !== void 0 ? _m : "",
|
|
13
|
+
f: (_h = initialState.f) !== null && _h !== void 0 ? _h : [],
|
|
14
|
+
s: (_k = (_j = initialState.s) !== null && _j !== void 0 ? _j : tabSort) !== null && _k !== void 0 ? _k : schema.s,
|
|
15
|
+
page: (_l = initialState.page) !== null && _l !== void 0 ? _l : 0,
|
|
16
|
+
perPage: (_o = (_m = initialState.perPage) !== null && _m !== void 0 ? _m : initialUserConfig === null || initialUserConfig === void 0 ? void 0 : initialUserConfig.perPage) !== null && _o !== void 0 ? _o : schema.perPage,
|
|
17
|
+
tab: tabName,
|
|
18
|
+
search: (_p = initialState.search) !== null && _p !== void 0 ? _p : "",
|
|
18
19
|
},
|
|
19
20
|
userConfig: {
|
|
20
|
-
columns: (
|
|
21
|
-
perPage: (
|
|
21
|
+
columns: (_q = initialUserConfig === null || initialUserConfig === void 0 ? void 0 : initialUserConfig.columns) !== null && _q !== void 0 ? _q : {},
|
|
22
|
+
perPage: (_r = initialUserConfig === null || initialUserConfig === void 0 ? void 0 : initialUserConfig.perPage) !== null && _r !== void 0 ? _r : schema.perPage,
|
|
22
23
|
},
|
|
23
24
|
tabRequests: {},
|
|
24
25
|
};
|
|
25
|
-
}
|
|
26
|
+
}
|
|
26
27
|
exports.getInitialState = getInitialState;
|
|
27
28
|
// eslint-disable-next-line complexity
|
|
28
29
|
const reducer = (state, action) => {
|
|
@@ -75,8 +76,10 @@ const reducer = (state, action) => {
|
|
|
75
76
|
...state,
|
|
76
77
|
request: {
|
|
77
78
|
...state.request,
|
|
78
|
-
|
|
79
|
-
|
|
79
|
+
s: {
|
|
80
|
+
name: action.columnName,
|
|
81
|
+
dir: action.direction,
|
|
82
|
+
},
|
|
80
83
|
},
|
|
81
84
|
};
|
|
82
85
|
case "SORT_CLEAR":
|
|
@@ -84,8 +87,7 @@ const reducer = (state, action) => {
|
|
|
84
87
|
...state,
|
|
85
88
|
request: {
|
|
86
89
|
...state.request,
|
|
87
|
-
|
|
88
|
-
dir: null,
|
|
90
|
+
s: null,
|
|
89
91
|
},
|
|
90
92
|
};
|
|
91
93
|
case "FULLTEXT":
|
|
@@ -99,21 +101,20 @@ const reducer = (state, action) => {
|
|
|
99
101
|
};
|
|
100
102
|
case "CHANGE_TAB":
|
|
101
103
|
// eslint-disable-next-line no-case-declarations,@typescript-eslint/no-unnecessary-condition
|
|
102
|
-
const tabHistory = (_a = state.tabRequests[action.name]) !== null && _a !== void 0 ? _a : {};
|
|
104
|
+
const tabHistory = (_a = state.tabRequests[action.tab.name]) !== null && _a !== void 0 ? _a : {};
|
|
103
105
|
return {
|
|
104
106
|
...state,
|
|
105
107
|
request: {
|
|
106
108
|
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
107
109
|
f: (_b = tabHistory.f) !== null && _b !== void 0 ? _b : [],
|
|
110
|
+
s: (_d = (_c = tabHistory.s) !== null && _c !== void 0 ? _c : action.tab.s) !== null && _d !== void 0 ? _d : state.request.s,
|
|
108
111
|
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
109
|
-
search: (
|
|
112
|
+
search: (_e = tabHistory.search) !== null && _e !== void 0 ? _e : "",
|
|
110
113
|
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
111
|
-
page: (
|
|
114
|
+
page: (_f = tabHistory.page) !== null && _f !== void 0 ? _f : 0,
|
|
112
115
|
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
113
|
-
perPage: (
|
|
114
|
-
|
|
115
|
-
sort: (_g = tabHistory.sort) !== null && _g !== void 0 ? _g : state.request.sort,
|
|
116
|
-
tab: action.name,
|
|
116
|
+
perPage: (_g = tabHistory.perPage) !== null && _g !== void 0 ? _g : state.request.perPage,
|
|
117
|
+
tab: action.tab.name,
|
|
117
118
|
},
|
|
118
119
|
tabRequests: {
|
|
119
120
|
...state.tabRequests,
|
package/_story-utils/loader.js
CHANGED
|
@@ -3,14 +3,14 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.loader = void 0;
|
|
4
4
|
const data_1 = require("./data");
|
|
5
5
|
const loader = async (_, request) => {
|
|
6
|
-
const { page = 1, perPage = 10, tab,
|
|
6
|
+
const { page = 1, perPage = 10, tab, s, f } = request;
|
|
7
7
|
// eslint-disable-next-line no-console
|
|
8
8
|
console.log("filter", f === null || f === void 0 ? void 0 : f.length);
|
|
9
9
|
const filteredData = data_1.data
|
|
10
10
|
.filter((item) => tab !== "only-odd-ids" || item.id % 2 === 0)
|
|
11
11
|
.filter((item) => { var _a; return (request.search ? (_a = item.text) === null || _a === void 0 ? void 0 : _a.match(new RegExp(request.search, "i")) : true); })
|
|
12
12
|
.sort((a, b) => {
|
|
13
|
-
if (!
|
|
13
|
+
if (!s) {
|
|
14
14
|
return 1;
|
|
15
15
|
}
|
|
16
16
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
@@ -20,9 +20,9 @@ const loader = async (_, request) => {
|
|
|
20
20
|
// @ts-ignore
|
|
21
21
|
const second = b[sort];
|
|
22
22
|
if (typeof first === "number") {
|
|
23
|
-
return dir === "asc" ? first - second : second - first;
|
|
23
|
+
return s.dir === "asc" ? first - second : second - first;
|
|
24
24
|
}
|
|
25
|
-
return dir === "asc" ? first.localeCompare(second) : second.localeCompare(first);
|
|
25
|
+
return s.dir === "asc" ? first.localeCompare(second) : second.localeCompare(first);
|
|
26
26
|
});
|
|
27
27
|
// eslint-disable-next-line no-console
|
|
28
28
|
console.log("loader", request);
|
package/_story-utils/schema.js
CHANGED
|
@@ -55,11 +55,20 @@ exports.schema = {
|
|
|
55
55
|
],
|
|
56
56
|
tabs: [
|
|
57
57
|
{ name: "all", label: "All" },
|
|
58
|
-
{
|
|
58
|
+
{
|
|
59
|
+
name: "only-odd-ids",
|
|
60
|
+
label: "Only odd ids blablabla",
|
|
61
|
+
s: {
|
|
62
|
+
name: "id",
|
|
63
|
+
dir: types_1.DataGridSortDir.Desc,
|
|
64
|
+
},
|
|
65
|
+
},
|
|
59
66
|
// { name: "only-odd-ids", label: "Only odd ids" },
|
|
60
67
|
],
|
|
61
|
-
|
|
62
|
-
|
|
68
|
+
s: {
|
|
69
|
+
name: "id",
|
|
70
|
+
dir: types_1.DataGridSortDir.Asc,
|
|
71
|
+
},
|
|
63
72
|
perPage: 10,
|
|
64
73
|
fullText: true,
|
|
65
74
|
};
|
package/data-grid.stories.js
CHANGED
|
@@ -38,6 +38,14 @@ function Default() {
|
|
|
38
38
|
const [noBorder, setNoBorder] = (0, react_1.useState)(false);
|
|
39
39
|
const { state, actions } = (0, use_data_grid_control_1.useDataGridControl)({
|
|
40
40
|
schema: schema_1.schema,
|
|
41
|
+
initialUserConfig: {
|
|
42
|
+
columns: {
|
|
43
|
+
id: { minWidth: 50 },
|
|
44
|
+
text: { minWidth: 300 },
|
|
45
|
+
mail: { minWidth: 300 },
|
|
46
|
+
tel: { minWidth: 300 },
|
|
47
|
+
},
|
|
48
|
+
},
|
|
41
49
|
});
|
|
42
50
|
const { isLoading, error, data, onReload } = (0, use_data_grid_fetching_1.useDataGridFetching)({
|
|
43
51
|
loader: loader_1.loader,
|
|
@@ -9,7 +9,7 @@ const icon_1 = require("@uxf/ui/icon");
|
|
|
9
9
|
const react_1 = __importDefault(require("react"));
|
|
10
10
|
const utils_1 = require("../utils");
|
|
11
11
|
function ExportButton(props) {
|
|
12
|
-
return (react_1.default.createElement(button_1.Button, { isIconButton: true, variant: "white", onClick: () => props.onCsvDownload((0, utils_1.createRequest)(props.state.request
|
|
12
|
+
return (react_1.default.createElement(button_1.Button, { isIconButton: true, variant: "white", onClick: () => props.onCsvDownload((0, utils_1.createRequest)(props.state.request)), title: "St\u00E1hnout CSV", className: "uxf-data-grid__plugin-button" },
|
|
13
13
|
react_1.default.createElement(icon_1.Icon, { name: "file-arrow-down" })));
|
|
14
14
|
}
|
|
15
15
|
exports.ExportButton = ExportButton;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@uxf/data-grid",
|
|
3
|
-
"version": "11.
|
|
3
|
+
"version": "11.4.0",
|
|
4
4
|
"description": "UXF DataGrid",
|
|
5
5
|
"homepage": "https://gitlab.com/uxf-npm/data-grid#readme",
|
|
6
6
|
"main": "index.js",
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
"typecheck": "tsc --noEmit --skipLibCheck"
|
|
32
32
|
},
|
|
33
33
|
"dependencies": {
|
|
34
|
-
"@uxf/ui": "11.
|
|
34
|
+
"@uxf/ui": "11.4.0",
|
|
35
35
|
"dayjs": "1.11.10",
|
|
36
36
|
"fast-glob": "^3.3.2",
|
|
37
37
|
"qs": "6.11.2",
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { Column } from "react-data-grid";
|
|
2
2
|
import { DataGridState } from "../../types";
|
|
3
3
|
import { TableProps } from "../types";
|
|
4
|
-
export declare function useReactDataGridColumns(props: TableProps<any>, state: DataGridState): Column<any>[];
|
|
4
|
+
export declare function useReactDataGridColumns(props: TableProps<any>, state: DataGridState<any>): Column<any>[];
|
package/table/table.js
CHANGED
|
@@ -74,8 +74,8 @@ function Table(props) {
|
|
|
74
74
|
props.actions.sortClear();
|
|
75
75
|
}
|
|
76
76
|
};
|
|
77
|
-
const sortColumns = props.state.request.
|
|
78
|
-
? [{ columnKey: props.state.request.
|
|
77
|
+
const sortColumns = props.state.request.s
|
|
78
|
+
? [{ columnKey: props.state.request.s.name, direction: props.state.request.s.dir.toUpperCase() }]
|
|
79
79
|
: [];
|
|
80
80
|
const rdgVisuals = (0, use_rdg_visuals_1.useRdgVisuals)({
|
|
81
81
|
headerRowHeight: props.headerRowHeight,
|
|
@@ -17,13 +17,13 @@ function ToolbarTabs(props) {
|
|
|
17
17
|
var _a, _b, _c, _d;
|
|
18
18
|
return (react_1.default.createElement(show_1.Show, { when: !!((_a = props.schema.tabs) === null || _a === void 0 ? void 0 : _a.length) },
|
|
19
19
|
react_1.default.createElement("div", { className: "uxf-data-grid__toolbar-tabs" },
|
|
20
|
-
react_1.default.createElement("nav", { className: "uxf-data-grid__toolbar-tabs-nav uxf-data-grid__toolbar-tabs-nav--desktop", "aria-label": "Tabs" }, (_b = props.schema.tabs) === null || _b === void 0 ? void 0 : _b.map((t) => (react_1.default.createElement(Tab, { key: t.name, title: t.label, isActive: props.state.request.tab === t.name, onClick: () => props.actions.changeTab(t
|
|
20
|
+
react_1.default.createElement("nav", { className: "uxf-data-grid__toolbar-tabs-nav uxf-data-grid__toolbar-tabs-nav--desktop", "aria-label": "Tabs" }, (_b = props.schema.tabs) === null || _b === void 0 ? void 0 : _b.map((t) => (react_1.default.createElement(Tab, { key: t.name, title: t.label, isActive: props.state.request.tab === t.name, onClick: () => props.actions.changeTab(t) })))),
|
|
21
21
|
react_1.default.createElement("nav", { className: "uxf-data-grid__toolbar-tabs-nav uxf-data-grid__toolbar-tabs-nav--mobile" },
|
|
22
22
|
react_1.default.createElement(button_1.Button, { variant: "text", className: "uxf-data-grid__toolbar-tabs-button", size: "sm", onClick: () => {
|
|
23
23
|
var _a;
|
|
24
24
|
return (0, modal_service_1.openModal)({
|
|
25
25
|
children: (react_1.default.createElement("div", { className: "uxf-data-grid__toolbar-tabs-modal-content" }, (_a = props.schema.tabs) === null || _a === void 0 ? void 0 : _a.map((item) => (react_1.default.createElement(button_1.Button, { className: "uxf-data-grid__toolbar-tabs-modal-button", key: item.name, variant: "text", size: "xl", onClick: () => {
|
|
26
|
-
props.actions.changeTab(item
|
|
26
|
+
props.actions.changeTab(item);
|
|
27
27
|
(0, modal_service_1.closeModal)();
|
|
28
28
|
} },
|
|
29
29
|
item.name === props.state.request.tab && (react_1.default.createElement(icon_1.Icon, { className: "uxf-data-grid__toolbar-tabs-modal-active-tab-icon", name: "check", size: 20 })),
|
package/types/api.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { DataGridSort } from "./schema";
|
|
2
2
|
export type ResultItem = any;
|
|
3
3
|
export interface RequestFilter<T = any> {
|
|
4
4
|
name: string;
|
|
@@ -8,8 +8,7 @@ export interface RequestFilter<T = any> {
|
|
|
8
8
|
}
|
|
9
9
|
export interface Request {
|
|
10
10
|
f?: RequestFilter[];
|
|
11
|
-
|
|
12
|
-
dir?: DataGridSortDir;
|
|
11
|
+
s?: DataGridSort;
|
|
13
12
|
page?: number;
|
|
14
13
|
perPage?: number;
|
|
15
14
|
search?: string;
|
package/types/schema.d.ts
CHANGED
|
@@ -3,10 +3,15 @@ export declare enum DataGridSortDir {
|
|
|
3
3
|
Asc = "asc",
|
|
4
4
|
Desc = "desc"
|
|
5
5
|
}
|
|
6
|
+
export interface DataGridSort {
|
|
7
|
+
name: string;
|
|
8
|
+
dir: DataGridSortDir;
|
|
9
|
+
}
|
|
6
10
|
export interface Tab {
|
|
7
11
|
name: string;
|
|
8
12
|
label: string;
|
|
9
13
|
icon?: string;
|
|
14
|
+
s?: DataGridSort;
|
|
10
15
|
}
|
|
11
16
|
export type BaseGridType = {
|
|
12
17
|
columns: any;
|
|
@@ -44,8 +49,7 @@ export interface Schema<GritType extends BaseGridType> {
|
|
|
44
49
|
columns: Columns<GritType["columns"]>[];
|
|
45
50
|
filters: Filters<GritType["filters"]>[];
|
|
46
51
|
tabs?: Tab[];
|
|
47
|
-
|
|
48
|
-
dir: DataGridSortDir;
|
|
52
|
+
s: DataGridSort;
|
|
49
53
|
perPage: number;
|
|
50
54
|
fullText?: boolean;
|
|
51
55
|
}
|
package/types/state.d.ts
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import { RequestFilter } from "./api";
|
|
2
|
-
import {
|
|
2
|
+
import { BaseGridType, DataGridSort } from "./schema";
|
|
3
3
|
export type GridRequest = {
|
|
4
4
|
f: RequestFilter[];
|
|
5
|
-
|
|
6
|
-
dir: DataGridSortDir | null;
|
|
5
|
+
s: DataGridSort | null;
|
|
7
6
|
page: number;
|
|
8
7
|
perPage: number;
|
|
9
8
|
search: string;
|
|
@@ -14,14 +13,14 @@ interface ColumnConfig {
|
|
|
14
13
|
width?: number;
|
|
15
14
|
minWidth?: number;
|
|
16
15
|
}
|
|
17
|
-
export interface DataGridUserConfig {
|
|
18
|
-
columns?: Record<
|
|
16
|
+
export interface DataGridUserConfig<GridType extends BaseGridType> {
|
|
17
|
+
columns?: Partial<Record<keyof GridType["columns"], ColumnConfig>>;
|
|
19
18
|
perPage?: number;
|
|
20
19
|
}
|
|
21
|
-
export interface DataGridState {
|
|
20
|
+
export interface DataGridState<GridType extends BaseGridType> {
|
|
22
21
|
request: GridRequest;
|
|
23
22
|
selectedRows?: any[];
|
|
24
|
-
userConfig: DataGridUserConfig
|
|
23
|
+
userConfig: DataGridUserConfig<GridType>;
|
|
25
24
|
tabRequests: {
|
|
26
25
|
[tab: string]: GridRequest;
|
|
27
26
|
};
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Dispatch } from "react";
|
|
2
2
|
import { RequestFilter } from "../types/api";
|
|
3
|
+
import { Tab } from "../types/schema";
|
|
3
4
|
export declare function createActions(dispatch: Dispatch<any>): {
|
|
4
5
|
changePage: (page: number) => void;
|
|
5
6
|
changePerPage: (perPage: number) => void;
|
|
@@ -7,7 +8,7 @@ export declare function createActions(dispatch: Dispatch<any>): {
|
|
|
7
8
|
sort: (columnName: string, direction: string) => void;
|
|
8
9
|
sortClear: () => void;
|
|
9
10
|
search: (search: string) => void;
|
|
10
|
-
changeTab: (
|
|
11
|
+
changeTab: (tab: Tab) => void;
|
|
11
12
|
setSelectedRows: (rows: any[]) => void;
|
|
12
13
|
hideColumn: (name: string) => void;
|
|
13
14
|
showColumn: (name: string) => void;
|
|
@@ -9,7 +9,7 @@ function createActions(dispatch) {
|
|
|
9
9
|
sort: (columnName, direction) => dispatch({ type: "SORT", columnName, direction }),
|
|
10
10
|
sortClear: () => dispatch({ type: "SORT_CLEAR" }),
|
|
11
11
|
search: (search) => dispatch({ type: "FULLTEXT", search }),
|
|
12
|
-
changeTab: (
|
|
12
|
+
changeTab: (tab) => dispatch({ type: "CHANGE_TAB", tab }),
|
|
13
13
|
setSelectedRows: (rows) => dispatch({ type: "SET_SELECTED_ROWS", rows }),
|
|
14
14
|
hideColumn: (name) => dispatch({ type: "HIDE_COLUMN", name }),
|
|
15
15
|
showColumn: (name) => dispatch({ type: "SHOW_COLUMN", name }),
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { Nullish } from "@uxf/core/types";
|
|
2
2
|
import { Request } from "../types/api";
|
|
3
|
-
import { Schema } from "../types/schema";
|
|
3
|
+
import { BaseGridType, Schema } from "../types/schema";
|
|
4
4
|
import { DataGridUserConfig } from "../types/state";
|
|
5
|
-
export interface UseDataGridControlConfig {
|
|
6
|
-
schema: Schema<
|
|
5
|
+
export interface UseDataGridControlConfig<GridType extends BaseGridType> {
|
|
6
|
+
schema: Schema<GridType>;
|
|
7
7
|
initialState?: Request | string | Nullish;
|
|
8
8
|
isDebug?: boolean;
|
|
9
|
-
initialUserConfig?: DataGridUserConfig | Nullish;
|
|
9
|
+
initialUserConfig?: DataGridUserConfig<GridType> | Nullish;
|
|
10
10
|
}
|
|
11
|
-
export declare function useDataGridControl(config: UseDataGridControlConfig): {
|
|
12
|
-
state: import("../types/state").DataGridState
|
|
11
|
+
export declare function useDataGridControl<T extends BaseGridType>(config: UseDataGridControlConfig<T>): {
|
|
12
|
+
state: import("../types/state").DataGridState<any>;
|
|
13
13
|
actions: {
|
|
14
14
|
changePage: (page: number) => void;
|
|
15
15
|
changePerPage: (perPage: number) => void;
|
|
@@ -17,7 +17,7 @@ export declare function useDataGridControl(config: UseDataGridControlConfig): {
|
|
|
17
17
|
sort: (columnName: string, direction: string) => void;
|
|
18
18
|
sortClear: () => void;
|
|
19
19
|
search: (search: string) => void;
|
|
20
|
-
changeTab: (
|
|
20
|
+
changeTab: (tab: import("../types/schema").Tab) => void;
|
|
21
21
|
setSelectedRows: (rows: any[]) => void;
|
|
22
22
|
hideColumn: (name: string) => void;
|
|
23
23
|
showColumn: (name: string) => void;
|
|
@@ -5,14 +5,14 @@ const react_1 = require("react");
|
|
|
5
5
|
const utils_1 = require("../utils");
|
|
6
6
|
const loader_1 = require("./loader");
|
|
7
7
|
function useDataGridFetching(config) {
|
|
8
|
-
const { state,
|
|
8
|
+
const { state, loader = loader_1.dataGridLoader, gridName } = config;
|
|
9
9
|
const [isLoading, setIsLoading] = (0, react_1.useState)(false);
|
|
10
10
|
const [error, setError] = (0, react_1.useState)(null);
|
|
11
11
|
const [data, setData] = (0, react_1.useState)(null);
|
|
12
12
|
const stringStateRequest = JSON.stringify(state.request);
|
|
13
13
|
const reload = (0, react_1.useCallback)(() => {
|
|
14
14
|
const stateRequest = JSON.parse(stringStateRequest);
|
|
15
|
-
const request = (0, utils_1.createRequest)(stateRequest
|
|
15
|
+
const request = (0, utils_1.createRequest)(stateRequest);
|
|
16
16
|
setIsLoading(true);
|
|
17
17
|
loader(gridName, request, (0, utils_1.encodeFilter)(request))
|
|
18
18
|
.then((response) => {
|
|
@@ -27,7 +27,7 @@ function useDataGridFetching(config) {
|
|
|
27
27
|
setError(e);
|
|
28
28
|
});
|
|
29
29
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
30
|
-
}, [stringStateRequest,
|
|
30
|
+
}, [stringStateRequest, gridName]);
|
|
31
31
|
(0, react_1.useEffect)(() => {
|
|
32
32
|
reload();
|
|
33
33
|
}, [reload]);
|
package/utils.d.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { Request } from "./types/api";
|
|
2
|
-
import { DataGridSortDir } from "./types/schema";
|
|
3
2
|
import { GridRequest } from "./types/state";
|
|
4
3
|
export declare function decodeFilter(filterString: string): null | Request;
|
|
5
4
|
export declare function encodeFilter(request: Request): string;
|
|
6
|
-
export declare function createRequest(request: GridRequest
|
|
5
|
+
export declare function createRequest(request: GridRequest): Request;
|
package/utils.js
CHANGED
|
@@ -9,8 +9,7 @@ function decodeFilter(filterString) {
|
|
|
9
9
|
f: filter.f || [],
|
|
10
10
|
perPage: filter.perPage || 10,
|
|
11
11
|
page: filter.page || 0,
|
|
12
|
-
|
|
13
|
-
sort: filter.sort || "id",
|
|
12
|
+
s: filter.s,
|
|
14
13
|
tab: (_a = filter.tab) !== null && _a !== void 0 ? _a : null,
|
|
15
14
|
search: (_b = filter.search) !== null && _b !== void 0 ? _b : "",
|
|
16
15
|
};
|
|
@@ -24,14 +23,12 @@ function encodeFilter(request) {
|
|
|
24
23
|
return btoa(unescape(encodeURIComponent(JSON.stringify(request))));
|
|
25
24
|
}
|
|
26
25
|
exports.encodeFilter = encodeFilter;
|
|
27
|
-
function createRequest(request
|
|
28
|
-
var _a, _b;
|
|
26
|
+
function createRequest(request) {
|
|
29
27
|
return {
|
|
30
|
-
sort: (_a = request.sort) !== null && _a !== void 0 ? _a : defaultSort,
|
|
31
|
-
dir: (_b = request.dir) !== null && _b !== void 0 ? _b : defaultDir,
|
|
32
28
|
perPage: request.perPage,
|
|
33
29
|
page: request.page,
|
|
34
30
|
f: request.f.filter((f) => f.value !== undefined && f.value !== null && f.value !== ""),
|
|
31
|
+
s: request.s || undefined,
|
|
35
32
|
search: request.search,
|
|
36
33
|
tab: request.tab,
|
|
37
34
|
};
|