antd-crud-table 0.2.0 → 0.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.
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`./chunk-BZRuZbSa.cjs`);const e=require(`./message-C5ORE39N.cjs`);let t=require(`react`);var n=e=>{let{baseUrl:t=``,endpoints:n={},headers:r={},transform:i}=e.api,a={list:`/list`,create:`/create`,update:`/update`,delete:`/delete`,...n},o=async(e,n={})=>{let i=await fetch(`${t}${e}`,{headers:{"Content-Type":`application/json`,...r},...n});if(!i.ok)throw Error(`HTTP error! status: ${i.status}`);return i.json()};return{getList:async e=>{let n=new URL(`${t}${a.list}`,window.location.origin);Object.entries(e).forEach(([e,t])=>{t!=null&&n.searchParams.append(e,String(t))});let r=await o(n.pathname+n.search);return i?.response?i.response(r):r},create:async e=>{let t=i?.request?i.request(e):e;return o(a.create,{method:`POST`,body:JSON.stringify(t)})},update:async(e,t)=>{let n=i?.request?i.request(t):t;return o(`${a.update}/${e}`,{method:`PUT`,body:JSON.stringify(n)})},delete:async e=>{await o(`${a.delete}/${e}`,{method:`DELETE`})}}},r=(e,t)=>{let n=[...e],r=Math.max(...n.map(e=>Number(e[t])||0))+1;return{getList:async e=>{let{current:t=1,pageSize:r=10,sortBy:i,sortOrder:a,...o}=e,s=[...n];Object.entries(o).forEach(([e,t])=>{t!=null&&t!==``&&(s=s.filter(n=>String(n[e]).toLowerCase().includes(String(t).toLowerCase())))}),i&&a&&s.sort((e,t)=>{let n=e[i],r=t[i],o=n>r?1:n<r?-1:0;return a===`ascend`?o:-o});let c=(t-1)*r;return{data:s.slice(c,c+r),total:s.length,success:!0}},create:async e=>{let i={[t]:r++,...e};return n.push(i),i},update:async(e,r)=>{let i=n.findIndex(n=>n[t]===e);if(i===-1)throw Error(`Item not found`);return n[i]={...n[i],...r},n[i]},delete:async e=>{let r=n.findIndex(n=>n[t]===e);if(r===-1)throw Error(`Item not found`);n.splice(r,1)}}},i=(i,a)=>{let o=(0,t.useRef)(null),[s,c]=(0,t.useState)({loading:!1,error:null,data:[],total:0,current:1,pageSize:a.defaultPageSize||10}),l=(()=>{if(`operations`in a)return a.operations;if(`staticData`in a)return r(a.staticData,i);if(`api`in a)return n(a);throw Error(`useCrudTable: Must provide either staticData, api config, or custom operations`)})(),u=(0,t.useCallback)(async()=>{c(e=>({...e,loading:!0,error:null}));try{let e={current:s.current,pageSize:s.pageSize},t=await l.getList(e);c(e=>({...e,data:t.data,total:t.total,loading:!1}))}catch(t){let n=t instanceof Error?t.message:`Failed to fetch data`;c(e=>({...e,loading:!1,error:n})),a.onError?.(`fetch`,t),e.t.error(n)}},[s.current,s.pageSize,l,a]);return{refresh:u,create:(0,t.useCallback)(async t=>{if(!l.create)return e.t.error(`Create operation not supported`),null;try{c(e=>({...e,loading:!0}));let n=await l.create(t);return a.optimisticUpdates?c(e=>({...e,data:[...e.data,n],total:e.total+1,loading:!1})):await u(),a.onSuccess?.(`create`,n),e.t.success(`Created successfully`),n}catch(t){c(e=>({...e,loading:!1}));let n=t instanceof Error?t.message:`Create failed`;return a.onError?.(`create`,t),e.t.error(n),null}},[l,a,u]),update:(0,t.useCallback)(async(t,n)=>{if(!l.update)return e.t.error(`Update operation not supported`),null;try{c(e=>({...e,loading:!0}));let r=await l.update(t,n);return a.optimisticUpdates?c(e=>({...e,data:e.data.map(e=>e[i]===t?{...e,...r}:e),loading:!1})):await u(),a.onSuccess?.(`update`,r),e.t.success(`Updated successfully`),r}catch(t){c(e=>({...e,loading:!1}));let n=t instanceof Error?t.message:`Update failed`;return a.onError?.(`update`,t),e.t.error(n),null}},[l,a,i,u]),delete:(0,t.useCallback)(async t=>{if(!l.delete)return e.t.error(`Delete operation not supported`),!1;try{return c(e=>({...e,loading:!0})),await l.delete(t),a.optimisticUpdates?c(e=>({...e,data:e.data.filter(e=>e[i]!==t),total:e.total-1,loading:!1})):await u(),a.onSuccess?.(`delete`,t),e.t.success(`Deleted successfully`),!0}catch(t){c(e=>({...e,loading:!1}));let n=t instanceof Error?t.message:`Delete failed`;return a.onError?.(`delete`,t),e.t.error(n),!1}},[l,a,i,u]),setPageSize:(0,t.useCallback)(e=>{c(t=>({...t,pageSize:e,current:1}))},[]),setCurrentPage:(0,t.useCallback)(e=>{c(t=>({...t,current:e}))},[]),state:s,actionRef:o}};exports.useCrudTable=i;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`./CrudTable.cjs`);let e=require(`antd`),t=require(`react`);var n=e=>{let{baseUrl:t=``,endpoints:n={},headers:r={},transform:i}=e.api,a={list:`/list`,create:`/create`,update:`/update`,delete:`/delete`,...n},o=async(e,n={})=>{let i=await fetch(`${t}${e}`,{headers:{"Content-Type":`application/json`,...r},...n});if(!i.ok)throw Error(`HTTP error! status: ${i.status}`);return i.json()};return{getList:async e=>{let n=new URL(`${t}${a.list}`,window.location.origin);Object.entries(e).forEach(([e,t])=>{t!=null&&n.searchParams.append(e,String(t))});let r=await o(n.pathname+n.search);return i?.response?i.response(r):r},create:async e=>{let t=i?.request?i.request(e):e;return o(a.create,{method:`POST`,body:JSON.stringify(t)})},update:async(e,t)=>{let n=i?.request?i.request(t):t;return o(`${a.update}/${e}`,{method:`PUT`,body:JSON.stringify(n)})},delete:async e=>{await o(`${a.delete}/${e}`,{method:`DELETE`})}}},r=(e,t)=>{let n=[...e],r=Math.max(...n.map(e=>Number(e[t])||0))+1;return{getList:async e=>{let{current:t=1,pageSize:r=10,sortBy:i,sortOrder:a,...o}=e,s=[...n];Object.entries(o).forEach(([e,t])=>{t!=null&&t!==``&&(s=s.filter(n=>String(n[e]).toLowerCase().includes(String(t).toLowerCase())))}),i&&a&&s.sort((e,t)=>{let n=e[i],r=t[i],o=n>r?1:n<r?-1:0;return a===`ascend`?o:-o});let c=(t-1)*r;return{data:s.slice(c,c+r),total:s.length,success:!0}},create:async e=>{let i={[t]:r++,...e};return n.push(i),i},update:async(e,r)=>{let i=n.findIndex(n=>n[t]===e);if(i===-1)throw Error(`Item not found`);return n[i]={...n[i],...r},n[i]},delete:async e=>{let r=n.findIndex(n=>n[t]===e);if(r===-1)throw Error(`Item not found`);n.splice(r,1)}}},i=(i,a)=>{let o=(0,t.useRef)(null),[s,c]=(0,t.useState)({loading:!1,error:null,data:[],total:0,current:1,pageSize:a.defaultPageSize||10}),l=(()=>{if(`operations`in a)return a.operations;if(`staticData`in a)return r(a.staticData,i);if(`api`in a)return n(a);throw Error(`useCrudTable: Must provide either staticData, api config, or custom operations`)})(),u=(0,t.useCallback)(async()=>{c(e=>({...e,loading:!0,error:null}));try{let e={current:s.current,pageSize:s.pageSize},t=await l.getList(e);c(e=>({...e,data:t.data,total:t.total,loading:!1}))}catch(t){let n=t instanceof Error?t.message:`Failed to fetch data`;c(e=>({...e,loading:!1,error:n})),a.onError?.(`fetch`,t),e.message.error(n)}},[s.current,s.pageSize,l,a]);return{refresh:u,create:(0,t.useCallback)(async t=>{if(!l.create)return e.message.error(`Create operation not supported`),null;try{c(e=>({...e,loading:!0}));let n=await l.create(t);return a.optimisticUpdates?c(e=>({...e,data:[...e.data,n],total:e.total+1,loading:!1})):await u(),a.onSuccess?.(`create`,n),e.message.success(`Created successfully`),n}catch(t){c(e=>({...e,loading:!1}));let n=t instanceof Error?t.message:`Create failed`;return a.onError?.(`create`,t),e.message.error(n),null}},[l,a,u]),update:(0,t.useCallback)(async(t,n)=>{if(!l.update)return e.message.error(`Update operation not supported`),null;try{c(e=>({...e,loading:!0}));let r=await l.update(t,n);return a.optimisticUpdates?c(e=>({...e,data:e.data.map(e=>e[i]===t?{...e,...r}:e),loading:!1})):await u(),a.onSuccess?.(`update`,r),e.message.success(`Updated successfully`),r}catch(t){c(e=>({...e,loading:!1}));let n=t instanceof Error?t.message:`Update failed`;return a.onError?.(`update`,t),e.message.error(n),null}},[l,a,i,u]),delete:(0,t.useCallback)(async t=>{if(!l.delete)return e.message.error(`Delete operation not supported`),!1;try{return c(e=>({...e,loading:!0})),await l.delete(t),a.optimisticUpdates?c(e=>({...e,data:e.data.filter(e=>e[i]!==t),total:e.total-1,loading:!1})):await u(),a.onSuccess?.(`delete`,t),e.message.success(`Deleted successfully`),!0}catch(t){c(e=>({...e,loading:!1}));let n=t instanceof Error?t.message:`Delete failed`;return a.onError?.(`delete`,t),e.message.error(n),!1}},[l,a,i,u]),setPageSize:(0,t.useCallback)(e=>{c(t=>({...t,pageSize:e,current:1}))},[]),setCurrentPage:(0,t.useCallback)(e=>{c(t=>({...t,current:e}))},[]),state:s,actionRef:o}};exports.useCrudTable=i;
@@ -1,4 +1,4 @@
1
- import { t as e } from "./message-C9NNC2sM.js";
1
+ import { message as e } from "antd";
2
2
  import { useCallback as t, useRef as n, useState as r } from "react";
3
3
  //#region lib/hooks/useCrudTable.ts
4
4
  var i = (e) => {
@@ -0,0 +1 @@
1
+ Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}}),require(`./CrudTable.cjs`);let e=require(`antd`),t=require(`react`);var n=(e,t=[])=>{try{let n=localStorage.getItem(e);return n?JSON.parse(n):t}catch{return t}},r=(e,t)=>{try{localStorage.setItem(e,JSON.stringify(t))}catch(e){console.error(`Failed to save to localStorage:`,e)}},i=(e,t,i=[])=>({getList:async t=>{let{current:r=1,pageSize:a=10,sortBy:o,sortOrder:s,...c}=t,l=n(e,i);Object.entries(c).forEach(([e,t])=>{t!=null&&t!==``&&e!==`current`&&e!==`pageSize`&&(l=l.filter(n=>{let r=n[e];return r==null?!1:String(r).toLowerCase().includes(String(t).toLowerCase())}))}),o&&s&&l.sort((e,t)=>{let n=e[o],r=t[o];if(n==null)return 1;if(r==null)return-1;let i=n>r?1:n<r?-1:0;return s===`ascend`?i:-i});let u=(r-1)*a;return{data:l.slice(u,u+a),total:l.length,success:!0}},create:async a=>{let o=n(e,i),s=o.length>0?Math.max(...o.map(e=>Number(e[t])||0),0):0,c={[t]:s+1,...a,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()};return o.push(c),r(e,o),c},update:async(a,o)=>{let s=n(e,i),c=s.findIndex(e=>e[t]===a);if(c===-1)throw Error(`Item not found`);return s[c]={...s[c],...o,updatedAt:new Date().toISOString()},r(e,s),s[c]},delete:async a=>{r(e,n(e,i).filter(e=>e[t]!==a))}}),a=(n,r,a=[],o)=>{let s=(0,t.useRef)(null),[c,l]=(0,t.useState)({loading:!1,error:null,data:[],total:0,current:1,pageSize:o?.defaultPageSize||10}),u=i(r,n,a),d=(0,t.useCallback)(async()=>{l(e=>({...e,loading:!0,error:null}));try{let e={current:c.current,pageSize:c.pageSize},t=await u.getList(e);l(e=>({...e,data:t.data,total:t.total,loading:!1}))}catch(t){let n=t instanceof Error?t.message:`Failed to fetch data`;l(e=>({...e,loading:!1,error:n})),o?.onError?.(`fetch`,t),e.message.error(n)}},[c.current,c.pageSize,u,o]);return(0,t.useEffect)(()=>{d()},[]),{refresh:d,create:(0,t.useCallback)(async t=>{try{l(e=>({...e,loading:!0}));let n=await u.create(t);return o?.optimisticUpdates?l(e=>({...e,data:[...e.data,n],total:e.total+1,loading:!1})):await d(),o?.onSuccess?.(`create`,n),e.message.success(`Created successfully`),s.current?.reload(),n}catch(t){l(e=>({...e,loading:!1}));let n=t instanceof Error?t.message:`Create failed`;return o?.onError?.(`create`,t),e.message.error(n),null}},[u,o,d]),update:(0,t.useCallback)(async(t,r)=>{try{l(e=>({...e,loading:!0}));let i=await u.update(t,r);return o?.optimisticUpdates?l(e=>({...e,data:e.data.map(e=>e[n]===t?{...e,...i}:e),loading:!1})):await d(),o?.onSuccess?.(`update`,i),e.message.success(`Updated successfully`),s.current?.reload(),i}catch(t){l(e=>({...e,loading:!1}));let n=t instanceof Error?t.message:`Update failed`;return o?.onError?.(`update`,t),e.message.error(n),null}},[u,o,n,d]),delete:(0,t.useCallback)(async t=>{try{return l(e=>({...e,loading:!0})),await u.delete(t),o?.optimisticUpdates?l(e=>({...e,data:e.data.filter(e=>e[n]!==t),total:e.total-1,loading:!1})):await d(),o?.onSuccess?.(`delete`,t),e.message.success(`Deleted successfully`),s.current?.reload(),!0}catch(t){l(e=>({...e,loading:!1}));let n=t instanceof Error?t.message:`Delete failed`;return o?.onError?.(`delete`,t),e.message.error(n),!1}},[u,o,n,d]),setPageSize:(0,t.useCallback)(e=>{l(t=>({...t,pageSize:e,current:1}))},[]),setCurrentPage:(0,t.useCallback)(e=>{l(t=>({...t,current:e}))},[]),state:c,actionRef:s}};exports.default=a,exports.useLocalStorageCrud=a;
@@ -0,0 +1,201 @@
1
+ import { message as e } from "antd";
2
+ import { useCallback as t, useEffect as n, useRef as r, useState as i } from "react";
3
+ //#region lib/hooks/useLocalStorageCrud.ts
4
+ var a = (e, t = []) => {
5
+ try {
6
+ let n = localStorage.getItem(e);
7
+ return n ? JSON.parse(n) : t;
8
+ } catch {
9
+ return t;
10
+ }
11
+ }, o = (e, t) => {
12
+ try {
13
+ localStorage.setItem(e, JSON.stringify(t));
14
+ } catch (e) {
15
+ console.error("Failed to save to localStorage:", e);
16
+ }
17
+ }, s = (e, t, n = []) => ({
18
+ getList: async (t) => {
19
+ let { current: r = 1, pageSize: i = 10, sortBy: o, sortOrder: s, ...c } = t, l = a(e, n);
20
+ Object.entries(c).forEach(([e, t]) => {
21
+ t != null && t !== "" && e !== "current" && e !== "pageSize" && (l = l.filter((n) => {
22
+ let r = n[e];
23
+ return r == null ? !1 : String(r).toLowerCase().includes(String(t).toLowerCase());
24
+ }));
25
+ }), o && s && l.sort((e, t) => {
26
+ let n = e[o], r = t[o];
27
+ if (n == null) return 1;
28
+ if (r == null) return -1;
29
+ let i = n > r ? 1 : n < r ? -1 : 0;
30
+ return s === "ascend" ? i : -i;
31
+ });
32
+ let u = (r - 1) * i;
33
+ return {
34
+ data: l.slice(u, u + i),
35
+ total: l.length,
36
+ success: !0
37
+ };
38
+ },
39
+ create: async (r) => {
40
+ let i = a(e, n), s = i.length > 0 ? Math.max(...i.map((e) => Number(e[t]) || 0), 0) : 0, c = {
41
+ [t]: s + 1,
42
+ ...r,
43
+ createdAt: (/* @__PURE__ */ new Date()).toISOString(),
44
+ updatedAt: (/* @__PURE__ */ new Date()).toISOString()
45
+ };
46
+ return i.push(c), o(e, i), c;
47
+ },
48
+ update: async (r, i) => {
49
+ let s = a(e, n), c = s.findIndex((e) => e[t] === r);
50
+ if (c === -1) throw Error("Item not found");
51
+ return s[c] = {
52
+ ...s[c],
53
+ ...i,
54
+ updatedAt: (/* @__PURE__ */ new Date()).toISOString()
55
+ }, o(e, s), s[c];
56
+ },
57
+ delete: async (r) => {
58
+ o(e, a(e, n).filter((e) => e[t] !== r));
59
+ }
60
+ }), c = (a, o, c = [], l) => {
61
+ let u = r(null), [d, f] = i({
62
+ loading: !1,
63
+ error: null,
64
+ data: [],
65
+ total: 0,
66
+ current: 1,
67
+ pageSize: l?.defaultPageSize || 10
68
+ }), p = s(o, a, c), m = t(async () => {
69
+ f((e) => ({
70
+ ...e,
71
+ loading: !0,
72
+ error: null
73
+ }));
74
+ try {
75
+ let e = {
76
+ current: d.current,
77
+ pageSize: d.pageSize
78
+ }, t = await p.getList(e);
79
+ f((e) => ({
80
+ ...e,
81
+ data: t.data,
82
+ total: t.total,
83
+ loading: !1
84
+ }));
85
+ } catch (t) {
86
+ let n = t instanceof Error ? t.message : "Failed to fetch data";
87
+ f((e) => ({
88
+ ...e,
89
+ loading: !1,
90
+ error: n
91
+ })), l?.onError?.("fetch", t), e.error(n);
92
+ }
93
+ }, [
94
+ d.current,
95
+ d.pageSize,
96
+ p,
97
+ l
98
+ ]);
99
+ return n(() => {
100
+ m();
101
+ }, []), {
102
+ refresh: m,
103
+ create: t(async (t) => {
104
+ try {
105
+ f((e) => ({
106
+ ...e,
107
+ loading: !0
108
+ }));
109
+ let n = await p.create(t);
110
+ return l?.optimisticUpdates ? f((e) => ({
111
+ ...e,
112
+ data: [...e.data, n],
113
+ total: e.total + 1,
114
+ loading: !1
115
+ })) : await m(), l?.onSuccess?.("create", n), e.success("Created successfully"), u.current?.reload(), n;
116
+ } catch (t) {
117
+ f((e) => ({
118
+ ...e,
119
+ loading: !1
120
+ }));
121
+ let n = t instanceof Error ? t.message : "Create failed";
122
+ return l?.onError?.("create", t), e.error(n), null;
123
+ }
124
+ }, [
125
+ p,
126
+ l,
127
+ m
128
+ ]),
129
+ update: t(async (t, n) => {
130
+ try {
131
+ f((e) => ({
132
+ ...e,
133
+ loading: !0
134
+ }));
135
+ let r = await p.update(t, n);
136
+ return l?.optimisticUpdates ? f((e) => ({
137
+ ...e,
138
+ data: e.data.map((e) => e[a] === t ? {
139
+ ...e,
140
+ ...r
141
+ } : e),
142
+ loading: !1
143
+ })) : await m(), l?.onSuccess?.("update", r), e.success("Updated successfully"), u.current?.reload(), r;
144
+ } catch (t) {
145
+ f((e) => ({
146
+ ...e,
147
+ loading: !1
148
+ }));
149
+ let n = t instanceof Error ? t.message : "Update failed";
150
+ return l?.onError?.("update", t), e.error(n), null;
151
+ }
152
+ }, [
153
+ p,
154
+ l,
155
+ a,
156
+ m
157
+ ]),
158
+ delete: t(async (t) => {
159
+ try {
160
+ return f((e) => ({
161
+ ...e,
162
+ loading: !0
163
+ })), await p.delete(t), l?.optimisticUpdates ? f((e) => ({
164
+ ...e,
165
+ data: e.data.filter((e) => e[a] !== t),
166
+ total: e.total - 1,
167
+ loading: !1
168
+ })) : await m(), l?.onSuccess?.("delete", t), e.success("Deleted successfully"), u.current?.reload(), !0;
169
+ } catch (t) {
170
+ f((e) => ({
171
+ ...e,
172
+ loading: !1
173
+ }));
174
+ let n = t instanceof Error ? t.message : "Delete failed";
175
+ return l?.onError?.("delete", t), e.error(n), !1;
176
+ }
177
+ }, [
178
+ p,
179
+ l,
180
+ a,
181
+ m
182
+ ]),
183
+ setPageSize: t((e) => {
184
+ f((t) => ({
185
+ ...t,
186
+ pageSize: e,
187
+ current: 1
188
+ }));
189
+ }, []),
190
+ setCurrentPage: t((e) => {
191
+ f((t) => ({
192
+ ...t,
193
+ current: e
194
+ }));
195
+ }, []),
196
+ state: d,
197
+ actionRef: u
198
+ };
199
+ };
200
+ //#endregion
201
+ export { c as default, c as useLocalStorageCrud };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "antd-crud-table",
3
3
  "private": false,
4
- "version": "0.2.0",
4
+ "version": "0.4.0",
5
5
  "type": "module",
6
6
  "homepage": "https://github.com/maifeeulasad/antd-crud-table",
7
7
  "repository": {
@@ -56,6 +56,17 @@
56
56
  "types": "./dist/CrudTableLazy.d.ts",
57
57
  "import": "./dist/CrudTableLazy.js",
58
58
  "require": "./dist/CrudTableLazy.cjs"
59
+ },
60
+ "./hooks/useCrudTable": {
61
+ "types": "./dist/hooks/useCrudTable.d.ts",
62
+ "import": "./dist/useCrudTable.js",
63
+ "require": "./dist/useCrudTable.cjs"
64
+ },
65
+ "./hooks/useLocalStorageCrud": {
66
+ "types": "./dist/hooks/useLocalStorageCrud.d.ts"
67
+ },
68
+ "./utils/exportData": {
69
+ "types": "./dist/utils/exportData.d.ts"
59
70
  }
60
71
  },
61
72
  "files": [
@@ -66,6 +77,7 @@
66
77
  "build:static": "tsc -b && vite build",
67
78
  "build:lib": "tsc --p ./tsconfig.build.json && vite build --config vite.config.lib.ts",
68
79
  "lint": "eslint .",
80
+ "lint:fix": "eslint . --fix",
69
81
  "preview": "vite preview"
70
82
  }
71
83
  }