@uxf/data-grid 11.3.0 → 11.6.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.
@@ -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
- export const dataGridSchema_${camelize(gridName)}: Schema<any> = json as any;`;
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
- function generateUseDataGridControl(gridName) {
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(jsonSchema, filename, outputDirectory, isLoaderRequired) {
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
  };
@@ -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 const getInitialState: (schema: Schema<any>, init?: Request | string | Nullish, initialUserConfig?: DataGridUserConfig | Nullish) => DataGridState;
7
- export declare const reducer: Reducer<DataGridState, any>;
8
- export declare const debugReducer: Reducer<DataGridState, any>;
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,27 +3,24 @@ 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
- const getInitialState = (schema, init, initialUserConfig) => {
7
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r;
6
+ function getInitialState(schema, init, initialUserConfig) {
7
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;
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
+ const initialTabName = (_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 initialTabSort = initialTabName !== null ? (_g = (_f = schema.tabs) === null || _f === void 0 ? void 0 : _f.find((t) => t.name === initialTabName)) === null || _g === void 0 ? void 0 : _g.s : null;
11
11
  return {
12
12
  request: {
13
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,
14
+ s: (_k = (_j = initialState.s) !== null && _j !== void 0 ? _j : initialTabSort) !== null && _k !== void 0 ? _k : schema.s,
15
15
  page: (_l = initialState.page) !== null && _l !== void 0 ? _l : 0,
16
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,
17
+ tab: initialTabName,
18
18
  search: (_p = initialState.search) !== null && _p !== void 0 ? _p : "",
19
19
  },
20
- userConfig: {
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,
23
- },
20
+ userConfig: initialUserConfig !== null && initialUserConfig !== void 0 ? initialUserConfig : {},
24
21
  tabRequests: {},
25
22
  };
26
- };
23
+ }
27
24
  exports.getInitialState = getInitialState;
28
25
  // eslint-disable-next-line complexity
29
26
  const reducer = (state, action) => {
@@ -13,12 +13,8 @@ const loader = async (_, request) => {
13
13
  if (!s) {
14
14
  return 1;
15
15
  }
16
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
17
- // @ts-ignore
18
- const first = a[sort];
19
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
20
- // @ts-ignore
21
- const second = b[sort];
16
+ const first = a[s.name];
17
+ const second = b[s.name];
22
18
  if (typeof first === "number") {
23
19
  return s.dir === "asc" ? first - second : second - first;
24
20
  }
@@ -1,10 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.schema = void 0;
4
- const types_1 = require("../types");
5
4
  exports.schema = {
6
5
  columns: [
7
- { name: "id", type: "number", label: "Id", sort: true },
6
+ { name: "id", type: "number", label: "Id", sort: true, config: { width: 50 } },
8
7
  { name: "text", type: "string", label: "Text", sort: true },
9
8
  { name: "bool", type: "boolean", label: "Boolean" },
10
9
  { name: "mail", type: "email", label: "E-mail" },
@@ -58,17 +57,10 @@ exports.schema = {
58
57
  {
59
58
  name: "only-odd-ids",
60
59
  label: "Only odd ids blablabla",
61
- s: {
62
- name: "id",
63
- dir: types_1.DataGridSortDir.Desc,
64
- },
60
+ s: { name: "id", dir: "desc" },
65
61
  },
66
- // { name: "only-odd-ids", label: "Only odd ids" },
67
62
  ],
68
- s: {
69
- name: "id",
70
- dir: types_1.DataGridSortDir.Asc,
71
- },
63
+ s: { name: "id", dir: "asc" },
72
64
  perPage: 10,
73
65
  fullText: true,
74
66
  };
@@ -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: { width: 100 },
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,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@uxf/data-grid",
3
- "version": "11.3.0",
3
+ "version": "11.6.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.3.0",
34
+ "@uxf/ui": "11.6.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>[];
@@ -29,16 +29,17 @@ const react_1 = __importStar(require("react"));
29
29
  const react_data_grid_1 = require("react-data-grid");
30
30
  function useReactDataGridColumns(props, state) {
31
31
  const { onReload, schema, isRowSelectable, bodyCells, actionCell } = props;
32
- const columnsConfig = state.userConfig.columns;
32
+ const userConfigColumns = state.userConfig.columns;
33
33
  return (0, react_1.useMemo)(() => {
34
- var _a, _b, _c, _d, _e, _f, _g;
34
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
35
35
  const columns = [];
36
36
  if (isRowSelectable) {
37
37
  columns.push(react_data_grid_1.SelectColumn);
38
38
  }
39
39
  for (const schemaColumn of schema.columns) {
40
+ const isHidden = (_b = (_a = userConfigColumns === null || userConfigColumns === void 0 ? void 0 : userConfigColumns[schemaColumn.name]) === null || _a === void 0 ? void 0 : _a.isHidden) !== null && _b !== void 0 ? _b : (_c = schemaColumn.config) === null || _c === void 0 ? void 0 : _c.isHidden;
40
41
  // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
41
- if ((_a = columnsConfig === null || columnsConfig === void 0 ? void 0 : columnsConfig[schemaColumn.name]) === null || _a === void 0 ? void 0 : _a.isHidden) {
42
+ if (isHidden) {
42
43
  continue;
43
44
  }
44
45
  columns.push({
@@ -47,9 +48,8 @@ function useReactDataGridColumns(props, state) {
47
48
  headerCellClass: (0, cx_1.cx)("uxf-data-grid__cell", "uxf-data-grid__cell--header", `uxf-data-grid__cell--type-${schemaColumn.type}`, `uxf-data-grid__cell--name-${schemaColumn.name}`),
48
49
  resizable: true,
49
50
  sortable: schemaColumn.sort,
50
- width: (_d = (_c = (_b = state.userConfig.columns) === null || _b === void 0 ? void 0 : _b[schemaColumn.name]) === null || _c === void 0 ? void 0 : _c.width) !== null && _d !== void 0 ? _d : schemaColumn.width,
51
- minWidth: (_g = (_f = (_e = state.userConfig.columns) === null || _e === void 0 ? void 0 : _e[schemaColumn.name]) === null || _f === void 0 ? void 0 : _f.minWidth) !== null && _g !== void 0 ? _g : schemaColumn.minWidth,
52
- maxWidth: schemaColumn.maxWidth,
51
+ width: (_f = (_e = (_d = state.userConfig.columns) === null || _d === void 0 ? void 0 : _d[schemaColumn.name]) === null || _e === void 0 ? void 0 : _e.width) !== null && _f !== void 0 ? _f : (_g = schemaColumn.config) === null || _g === void 0 ? void 0 : _g.width,
52
+ minWidth: (_k = (_j = (_h = state.userConfig.columns) === null || _h === void 0 ? void 0 : _h[schemaColumn.name]) === null || _j === void 0 ? void 0 : _j.minWidth) !== null && _k !== void 0 ? _k : (_l = schemaColumn.config) === null || _l === void 0 ? void 0 : _l.minWidth,
53
53
  cellClass: (0, cx_1.cx)("uxf-data-grid__cell", `uxf-data-grid__cell--type-${schemaColumn.type}`, `uxf-data-grid__cell--name-${schemaColumn.name}`),
54
54
  renderCell: (p) => {
55
55
  var _a;
@@ -79,6 +79,6 @@ function useReactDataGridColumns(props, state) {
79
79
  });
80
80
  }
81
81
  return columns;
82
- }, [columnsConfig, actionCell, schema.columns, bodyCells, isRowSelectable, onReload, state.userConfig.columns]);
82
+ }, [userConfigColumns, actionCell, schema.columns, bodyCells, isRowSelectable, onReload, state.userConfig.columns]);
83
83
  }
84
84
  exports.useReactDataGridColumns = useReactDataGridColumns;
package/types/core.d.ts CHANGED
@@ -1,7 +1,6 @@
1
1
  import { Request, Response, ResultItem } from "./api";
2
2
  import { BaseGridType } from "./schema";
3
3
  export type KeyExtractor = (row: ResultItem) => number;
4
- export type ChangeHiddenColumnsHandler = (hiddenColumns: string[]) => void;
5
4
  export type CsvDownloadHandler = (request: Request) => void;
6
5
  export type Loader = (gridName: string | undefined, request: Request, encodedRequest: string) => Promise<Response>;
7
6
  export type CallbackRef = {
package/types/schema.d.ts CHANGED
@@ -1,11 +1,12 @@
1
1
  import { ReactElement } from "react";
2
+ /** @deprecated use 'asc' or 'desc' */
2
3
  export declare enum DataGridSortDir {
3
4
  Asc = "asc",
4
5
  Desc = "desc"
5
6
  }
6
7
  export interface DataGridSort {
7
8
  name: string;
8
- dir: DataGridSortDir;
9
+ dir: "asc" | "desc";
9
10
  }
10
11
  export interface Tab {
11
12
  name: string;
@@ -22,12 +23,12 @@ export type Column<Name, Type> = {
22
23
  label: string | ReactElement;
23
24
  type: Type;
24
25
  sort?: boolean;
25
- hint?: string;
26
- print?: boolean;
27
- width?: number | string;
26
+ config?: ColumnConfig;
27
+ };
28
+ export type ColumnConfig = {
29
+ isHidden?: boolean;
30
+ width?: number;
28
31
  minWidth?: number;
29
- maxWidth?: number;
30
- frozen?: boolean;
31
32
  };
32
33
  export type Columns<C extends BaseGridType["columns"]> = {
33
34
  [K in keyof C]: Column<K, C[K]>;
@@ -46,6 +47,7 @@ export type Filters<F extends BaseGridType["filters"]> = {
46
47
  [K in keyof F]: Filter<K, F[K]>;
47
48
  }[keyof F];
48
49
  export interface Schema<GritType extends BaseGridType> {
50
+ name?: string;
49
51
  columns: Columns<GritType["columns"]>[];
50
52
  filters: Filters<GritType["filters"]>[];
51
53
  tabs?: Tab[];
package/types/schema.js CHANGED
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.DataGridSortDir = void 0;
4
+ /** @deprecated use 'asc' or 'desc' */
4
5
  var DataGridSortDir;
5
6
  (function (DataGridSortDir) {
6
7
  DataGridSortDir["Asc"] = "asc";
package/types/state.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { RequestFilter } from "./api";
2
- import { DataGridSort } from "./schema";
2
+ import { BaseGridType, DataGridSort } from "./schema";
3
3
  export type GridRequest = {
4
4
  f: RequestFilter[];
5
5
  s: DataGridSort | null;
@@ -13,14 +13,14 @@ interface ColumnConfig {
13
13
  width?: number;
14
14
  minWidth?: number;
15
15
  }
16
- export interface DataGridUserConfig {
17
- columns?: Record<string, ColumnConfig>;
16
+ export interface DataGridUserConfig<GridType extends BaseGridType> {
17
+ columns?: Partial<Record<keyof GridType["columns"], ColumnConfig>>;
18
18
  perPage?: number;
19
19
  }
20
- export interface DataGridState {
20
+ export interface DataGridState<GridType extends BaseGridType> {
21
21
  request: GridRequest;
22
22
  selectedRows?: any[];
23
- userConfig: DataGridUserConfig;
23
+ userConfig: DataGridUserConfig<GridType>;
24
24
  tabRequests: {
25
25
  [tab: string]: GridRequest;
26
26
  };
@@ -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<any>;
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;