@iyulab/flex-table 0.30.0 → 0.31.1

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.
@@ -1,2 +1,2 @@
1
- import { a as e, i as t, n, r, t as i } from "./flex-table-DuQWDNlT.js";
1
+ import { a as e, i as t, n, r, t as i } from "./flex-table-BH1lOINr.js";
2
2
  export { i as FlexTable, t as RowSelectionState, r as UndoStack, n as exportData, e as renderCell };
@@ -1,83 +1,2 @@
1
- import { useCallback as e, useEffect as t, useRef as n, useState as r } from "react";
2
- import i from "odata-query";
3
- //#region src/odata/use-odata-source.ts
4
- function a(e) {
5
- let t = e.split(/\s+/).map((e) => e.replace(/"/g, "")).filter((e) => e.length > 0);
6
- if (t.length !== 0) return t.map((e) => `"${e}"`).join(" AND ");
7
- }
8
- function o(o, c = {}) {
9
- let { pageSize: l = 20, defaultOrderBy: u, fixedFilter: d, baseUrl: f, fetcher: p = fetch, onUnauthorized: m } = c, h = d ? JSON.stringify(d) : "", [g, _] = r([]), [v, y] = r(0), [b, x] = r(!1), [S, C] = r(null), [w, T] = r(0), [E, D] = r(() => u ? s(u) : []), [O, k] = r(""), [A, j] = r(0), M = n(null), N = e(() => {
10
- j((e) => e + 1);
11
- }, []), P = e((e) => {
12
- k(e), T(0);
13
- }, []), F = e((e) => {
14
- let t = e.detail?.criteria;
15
- t && (D(t), T(0));
16
- }, []);
17
- return t(() => {
18
- M.current?.abort();
19
- let e = new AbortController();
20
- M.current = e, x(!0), C(null);
21
- let t = E.length > 0 ? E.map((e) => `${e.key} ${e.direction}`).join(", ") : u, n = {
22
- top: l,
23
- skip: w * l,
24
- count: !0
25
- };
26
- if (t && (n.orderBy = t), d && (n.filter = d), O) {
27
- let e = a(O);
28
- e && (n.search = e);
29
- }
30
- let r = i(n), s = `${f ?? window.location.origin}${o}${r}`;
31
- return p(s, { signal: e.signal }).then(async (e) => {
32
- if (!e.ok) {
33
- (e.status === 401 || e.status === 403) && m && m(e);
34
- let t = await e.text().catch(() => ""), n = `Request failed (${e.status})`;
35
- try {
36
- let e = JSON.parse(t);
37
- n = e?.error?.message ?? e?.message ?? n;
38
- } catch {}
39
- throw Error(n);
40
- }
41
- return e.json();
42
- }).then((t) => {
43
- e.signal.aborted || (_(t.value ?? t), y(t["@odata.count"] ?? 0), C(null));
44
- }).catch((t) => {
45
- e.signal.aborted || t.name !== "AbortError" && (C(t.message), _([]), y(0));
46
- }).finally(() => {
47
- e.signal.aborted || x(!1);
48
- }), () => e.abort();
49
- }, [
50
- o,
51
- w,
52
- l,
53
- E,
54
- O,
55
- h,
56
- u,
57
- A,
58
- f
59
- ]), {
60
- data: g,
61
- totalCount: v,
62
- loading: b,
63
- error: S,
64
- page: w,
65
- setPage: T,
66
- sortCriteria: E,
67
- onSortChange: F,
68
- search: O,
69
- setSearch: P,
70
- refresh: N
71
- };
72
- }
73
- function s(e) {
74
- return e.split(",").map((e) => {
75
- let t = e.trim().split(/\s+/);
76
- return {
77
- key: t[0],
78
- direction: t[1]?.toLowerCase() === "desc" ? "desc" : "asc"
79
- };
80
- });
81
- }
82
- //#endregion
83
- export { a as buildSearchExpression, s as parseOrderBy, o as useODataSource };
1
+ import { n as e, r as t, t as n } from "../use-odata-source-5gOJiMFj.js";
2
+ export { n as buildSearchExpression, e as parseOrderBy, t as useODataSource };
package/dist/react.js CHANGED
@@ -1,4 +1,4 @@
1
- import { t as e } from "./flex-table-DuQWDNlT.js";
1
+ import { t as e } from "./flex-table-BH1lOINr.js";
2
2
  import t from "react";
3
3
  import { createComponent as n } from "@lit/react";
4
4
  var r = n({
@@ -0,0 +1,51 @@
1
+ //#region src/core/sorting.ts
2
+ function e(e, n, r) {
3
+ let i = Array.from({ length: e.length }, (e, t) => t);
4
+ if (n.length === 0) return i;
5
+ let a = /* @__PURE__ */ new Map();
6
+ for (let e of r) a.set(e.key, e.type ?? "text");
7
+ return i.sort((r, i) => {
8
+ for (let { key: o, direction: s } of n) {
9
+ let n = e[r][o], c = e[i][o], l = n == null, u = c == null;
10
+ if (l && u) continue;
11
+ if (l) return 1;
12
+ if (u) return -1;
13
+ let d = t(n, c, a.get(o) ?? "text");
14
+ if (d !== 0) return s === "asc" ? d : -d;
15
+ }
16
+ return r - i;
17
+ }), i;
18
+ }
19
+ function t(e, t, n) {
20
+ switch (n) {
21
+ case "number": {
22
+ let n = Number(e), r = Number(t);
23
+ return isNaN(n) && isNaN(r) ? 0 : isNaN(n) ? 1 : isNaN(r) ? -1 : n - r;
24
+ }
25
+ case "boolean": return !!e - +!!t;
26
+ case "date":
27
+ case "datetime": {
28
+ let n = new Date(e).getTime(), r = new Date(t).getTime();
29
+ return (isNaN(n) ? 0 : n) - (isNaN(r) ? 0 : r);
30
+ }
31
+ default: return String(e).localeCompare(String(t));
32
+ }
33
+ }
34
+ function n(e, t, n) {
35
+ let r = e.find((e) => e.key === t);
36
+ return n ? r ? r.direction === "asc" ? e.map((e) => e.key === t ? {
37
+ ...e,
38
+ direction: "desc"
39
+ } : e) : e.filter((e) => e.key !== t) : [...e, {
40
+ key: t,
41
+ direction: "asc"
42
+ }] : r ? r.direction === "asc" ? [{
43
+ key: t,
44
+ direction: "desc"
45
+ }] : [] : [{
46
+ key: t,
47
+ direction: "asc"
48
+ }];
49
+ }
50
+ //#endregion
51
+ export { n, e as t };
@@ -0,0 +1,83 @@
1
+ import { useCallback as e, useEffect as t, useRef as n, useState as r } from "react";
2
+ import i from "odata-query";
3
+ //#region src/odata/use-odata-source.ts
4
+ function a(e) {
5
+ let t = e.split(/\s+/).map((e) => e.replace(/"/g, "")).filter((e) => e.length > 0);
6
+ if (t.length !== 0) return t.map((e) => `"${e}"`).join(" AND ");
7
+ }
8
+ function o(o, c = {}) {
9
+ let { pageSize: l = 20, defaultOrderBy: u, fixedFilter: d, baseUrl: f, fetcher: p = fetch, onUnauthorized: m } = c, h = d ? JSON.stringify(d) : "", [g, _] = r([]), [v, y] = r(0), [b, x] = r(!1), [S, C] = r(null), [w, T] = r(0), [E, D] = r(() => u ? s(u) : []), [O, k] = r(""), [A, j] = r(0), M = n(null), N = e(() => {
10
+ j((e) => e + 1);
11
+ }, []), P = e((e) => {
12
+ k(e), T(0);
13
+ }, []), F = e((e) => {
14
+ let t = e.detail?.criteria;
15
+ t && (D(t), T(0));
16
+ }, []);
17
+ return t(() => {
18
+ M.current?.abort();
19
+ let e = new AbortController();
20
+ M.current = e, x(!0), C(null);
21
+ let t = E.length > 0 ? E.map((e) => `${e.key} ${e.direction}`).join(", ") : u, n = {
22
+ top: l,
23
+ skip: w * l,
24
+ count: !0
25
+ };
26
+ if (t && (n.orderBy = t), d && (n.filter = d), O) {
27
+ let e = a(O);
28
+ e && (n.search = e);
29
+ }
30
+ let r = i(n), s = `${f ?? window.location.origin}${o}${r}`;
31
+ return p(s, { signal: e.signal }).then(async (e) => {
32
+ if (!e.ok) {
33
+ (e.status === 401 || e.status === 403) && m && m(e);
34
+ let t = await e.text().catch(() => ""), n = `Request failed (${e.status})`;
35
+ try {
36
+ let e = JSON.parse(t);
37
+ n = e?.error?.message ?? e?.message ?? n;
38
+ } catch {}
39
+ throw Error(n);
40
+ }
41
+ return e.json();
42
+ }).then((t) => {
43
+ e.signal.aborted || (_(t.value ?? t), y(t["@odata.count"] ?? 0), C(null));
44
+ }).catch((t) => {
45
+ e.signal.aborted || t.name !== "AbortError" && (C(t.message), _([]), y(0));
46
+ }).finally(() => {
47
+ e.signal.aborted || x(!1);
48
+ }), () => e.abort();
49
+ }, [
50
+ o,
51
+ w,
52
+ l,
53
+ E,
54
+ O,
55
+ h,
56
+ u,
57
+ A,
58
+ f
59
+ ]), {
60
+ data: g,
61
+ totalCount: v,
62
+ loading: b,
63
+ error: S,
64
+ page: w,
65
+ setPage: T,
66
+ sortCriteria: E,
67
+ onSortChange: F,
68
+ search: O,
69
+ setSearch: P,
70
+ refresh: N
71
+ };
72
+ }
73
+ function s(e) {
74
+ return e.split(",").map((e) => {
75
+ let t = e.trim().split(/\s+/);
76
+ return {
77
+ key: t[0],
78
+ direction: t[1]?.toLowerCase() === "desc" ? "desc" : "asc"
79
+ };
80
+ });
81
+ }
82
+ //#endregion
83
+ export { s as n, o as r, a as t };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@iyulab/flex-table",
3
- "version": "0.30.0",
3
+ "version": "0.31.1",
4
4
  "description": "A minimalist, input-centric data grid web component",
5
5
  "type": "module",
6
6
  "main": "./dist/flex-table.js",
@@ -18,6 +18,10 @@
18
18
  "./odata": {
19
19
  "types": "./dist/odata/index.d.ts",
20
20
  "import": "./dist/odata/index.js"
21
+ },
22
+ "./array": {
23
+ "types": "./dist/array/index.d.ts",
24
+ "import": "./dist/array/index.js"
21
25
  }
22
26
  },
23
27
  "sideEffects": [
@@ -35,6 +39,7 @@
35
39
  "LICENSE"
36
40
  ],
37
41
  "scripts": {
42
+ "preversion": "node -e \"if(require('fs').existsSync('../../scripts/preversion-check.mjs'))require('child_process').execFileSync('node',['../../scripts/preversion-check.mjs'],{stdio:'inherit'})\"",
38
43
  "dev": "vite serve demo",
39
44
  "build": "npm run typecheck && vite build && tsc --emitDeclarationOnly",
40
45
  "build:demo": "vite build --config vite.config.demo.ts",