@starter-solutions/inertia-data-table-vue 0.3.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.
@@ -3,8 +3,8 @@ import { MaybeRefOrGetter } from 'vue';
3
3
 
4
4
  export declare const useDataTable: <T>(tableKey: MaybeRefOrGetter<string>, options?: MaybeRefOrGetter<InertiaDataTableOptions>) => {
5
5
  data: import('vue').ComputedRef<T[]>;
6
+ reload: (pagination?: Partial<PaginatedRequest>) => void;
6
7
  pagination: import('vue').ComputedRef<Required<import('../types').NormalizedPagination>>;
7
- reloadData: (request?: Partial<PaginatedRequest>) => void;
8
8
  firstPage: () => void;
9
9
  previousPage: () => void;
10
10
  nextPage: () => void;
@@ -12,4 +12,12 @@ export declare const useDataTable: <T>(tableKey: MaybeRefOrGetter<string>, optio
12
12
  goToPage: (newPage: number) => void;
13
13
  itemsPerPage: (perPage: number) => void;
14
14
  sortBy: (sort_by: string, descending?: boolean) => void;
15
+ filter: Record<string, any>;
16
+ setFilter: (key: string, value: any) => void;
17
+ setFilters: (filters: Array<{
18
+ key: string;
19
+ value: any;
20
+ }>) => void;
21
+ removeFilter: (key: string) => void;
22
+ resetFilters: () => void;
15
23
  };
package/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const _=require("@inertiajs/vue3"),r=require("vue"),b=(e,o)=>{const n=_.usePage(),t=r.computed(()=>{const a=r.toValue(o);return{tableKey:r.toValue(e),pagePropsKey:r.toValue(a==null?void 0:a.pagePropsKey)??r.toValue(e),useUrlQuery:r.toValue(a==null?void 0:a.useUrlQuery)??!1}}),u=r.computed(()=>n.props.inertiaDataTable.stateRoutes),p=r.computed(()=>n.props.inertiaDataTable.queryParams),s=r.computed(()=>n.props.inertiaDataTable.defaults);return{settings:t,stateRoutes:u,queryParams:p,defaults:s}},f=e=>{const o=r.computed(()=>D(r.toValue(e))),n=r.computed(()=>o.value.data),t=r.computed(()=>o.value.pagination);return{data:n,pagination:t,getPaginatedRequest:(s={})=>({page:s.page??t.value.current_page,per_page:s.per_page??t.value.per_page,sort_by:s.sort_by??t.value.sort_by,descending:s.descending??t.value.descending}),validPage:s=>s>0&&s<=t.value.last_page}},D=e=>({data:(e==null?void 0:e.data)??[],pagination:T(e)}),K=e=>"meta"in e&&typeof e.meta=="object"&&e.meta!==null,T=e=>{if(!e)return{current_page:1,last_page:1,per_page:10,total:0,from:null,to:null,path:"",links:[],first_page_url:null,last_page_url:null,next_page_url:null,prev_page_url:null,sort_by:"id",descending:!1};if(K(e))return{current_page:e.meta.current_page,last_page:e.meta.last_page,per_page:e.meta.per_page,total:e.meta.total,from:e.meta.from,to:e.meta.to,path:e.meta.path,links:e.meta.links,first_page_url:e.links.first,last_page_url:e.links.last,next_page_url:e.links.next,prev_page_url:e.links.prev,sort_by:e.meta.sort_by??"id",descending:e.meta.descending??!1};const{current_page:o,last_page:n,per_page:t,total:u,from:p,to:s,path:a,links:c,first_page_url:v,last_page_url:g,next_page_url:m,prev_page_url:d,sort_by:y,descending:P}=e;return{current_page:o,last_page:n,per_page:t,total:u,from:p,to:s,path:a,links:c,first_page_url:v,last_page_url:g,next_page_url:m,prev_page_url:d,sort_by:y??"id",descending:P??!1}},S=(e,o)=>{const{stateRoutes:n,settings:t}=b(e,o);r.onBeforeUnmount(()=>{_.router.delete(n.value.drop,{preserveScroll:!0,preserveState:!0,data:{tableKey:t.value.tableKey}})});const u=_.usePage(),p=r.computed(()=>u.props[t.value.pagePropsKey]??null),{data:s,pagination:a,getPaginatedRequest:c,validPage:v}=f(p),g=l=>{l=c(l),t.value.useUrlQuery?_.router.reload({only:[t.value.pagePropsKey],data:{tableKey:t.value.tableKey,...l}}):_.router.post(n.value.set,{tableKey:t.value.tableKey,data:{...l}},{preserveState:!0,preserveScroll:!0,only:[t.value.pagePropsKey]})},m=()=>{i(1)},d=()=>{i(a.value.current_page-1)},y=()=>{i(a.value.current_page+1)},P=()=>{i(a.value.last_page)},i=l=>{if(!v(l)){console.error(`Invalid page: ${l}`);return}g(c({page:l}))};return{data:s,pagination:a,reloadData:g,firstPage:m,previousPage:d,nextPage:y,lastPage:P,goToPage:i,itemsPerPage:l=>{g(c({per_page:l,page:1}))},sortBy:(l,k)=>{const R=k??a.value.sort_by===l?!a.value.descending:!1;g(c({sort_by:l,descending:R}))}}};function V(){return{install(e){}}}exports.createInertiaDataTable=V;exports.getPaginationMeta=T;exports.isResource=K;exports.normalizePagination=D;exports.useDataTable=S;exports.useInertiaDataTableConfig=b;exports.useLaravelPagination=f;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const m=require("@inertiajs/vue3"),l=require("vue"),D=(e,u)=>{const o=m.usePage(),r=l.computed(()=>{const t=l.toValue(u),_=l.toValue(e),g=l.toValue(t==null?void 0:t.pagePropsKey)??_,n=l.toValue(t==null?void 0:t.useUrlQuery)??!1,d=l.toValue(t==null?void 0:t.reloadOnly)?[g,...l.toValue(t==null?void 0:t.reloadOnly)]:[g];return{tableKey:_,pagePropsKey:g,useUrlQuery:n,reloadOnly:d}}),i=l.computed(()=>o.props.inertiaDataTable.stateRoutes),p=l.computed(()=>o.props.inertiaDataTable.queryParams),s=l.computed(()=>o.props.inertiaDataTable.defaults);return{settings:r,stateRoutes:i,queryParams:p,defaults:s}},T=e=>{const u=l.computed(()=>k(l.toValue(e))),o=l.computed(()=>u.value.data),r=l.computed(()=>u.value.pagination);return{data:o,pagination:r,getPaginatedRequest:(s={})=>({page:s.page??r.value.current_page,per_page:s.per_page??r.value.per_page,sort_by:s.sort_by??r.value.sort_by,descending:s.descending??r.value.descending}),validPage:s=>s>0&&s<=r.value.last_page}},k=e=>({data:(e==null?void 0:e.data)??[],pagination:O(e)}),F=e=>"meta"in e&&typeof e.meta=="object"&&e.meta!==null,O=e=>{if(!e)return{current_page:1,last_page:1,per_page:10,total:0,from:null,to:null,path:"",links:[],first_page_url:null,last_page_url:null,next_page_url:null,prev_page_url:null,sort_by:"id",descending:!1};if(F(e))return{current_page:e.meta.current_page,last_page:e.meta.last_page,per_page:e.meta.per_page,total:e.meta.total,from:e.meta.from,to:e.meta.to,path:e.meta.path,links:e.meta.links,first_page_url:e.links.first,last_page_url:e.links.last,next_page_url:e.links.next,prev_page_url:e.links.prev,sort_by:e.meta.sort_by??"id",descending:e.meta.descending??!1};const{current_page:u,last_page:o,per_page:r,total:i,from:p,to:s,path:t,links:_,first_page_url:g,last_page_url:n,next_page_url:d,prev_page_url:b,sort_by:f,descending:P}=e;return{current_page:u,last_page:o,per_page:r,total:i,from:p,to:s,path:t,links:_,first_page_url:g,last_page_url:n,next_page_url:d,prev_page_url:b,sort_by:f??"id",descending:P??!1}},V=(e,u)=>{const{stateRoutes:o,settings:r}=D(e,u);l.onBeforeUnmount(()=>{m.router.delete(o.value.drop,{preserveScroll:!0,preserveState:!0,data:{tableKey:r.value.tableKey}})});const i=m.usePage(),p=l.computed(()=>i.props[r.value.pagePropsKey]??null),{data:s,pagination:t,getPaginatedRequest:_,validPage:g}=T(p),n=a=>{a=_(a),r.value.useUrlQuery?m.router.reload({only:r.value.reloadOnly,data:{tableKey:r.value.tableKey,filter:c,...a}}):m.router.post(o.value.set,{tableKey:r.value.tableKey,filter:c,pagination:a},{preserveState:!0,preserveScroll:!0,only:r.value.reloadOnly})},d=()=>{v(1)},b=()=>{v(t.value.current_page-1)},f=()=>{v(t.value.current_page+1)},P=()=>{v(t.value.last_page)},v=a=>{if(!g(a)){console.error(`Invalid page: ${a}`);return}n({page:a})},R=a=>{n({per_page:a,page:1})},q=(a,y)=>{const K=y??t.value.sort_by===a?!t.value.descending:!1;n({sort_by:a,descending:K})},c=l.reactive({});return{data:s,reload:n,pagination:t,firstPage:d,previousPage:b,nextPage:f,lastPage:P,goToPage:v,itemsPerPage:R,sortBy:q,filter:c,setFilter:(a,y)=>{c[a]=y,n()},setFilters:a=>{a.forEach(({key:y,value:K})=>{c[y]=K}),n()},removeFilter:a=>{delete c[a],n()},resetFilters:()=>{Object.keys(c).forEach(a=>delete c[a]),n()}}};function h(){return{install(e){}}}exports.createInertiaDataTable=h;exports.getPaginationMeta=O;exports.isResource=F;exports.normalizePagination=k;exports.useDataTable=V;exports.useInertiaDataTableConfig=D;exports.useLaravelPagination=T;
package/dist/index.js CHANGED
@@ -1,45 +1,46 @@
1
- import { usePage as b, router as P } from "@inertiajs/vue3";
2
- import { computed as o, toValue as _, onBeforeUnmount as k } from "vue";
3
- const R = (e, n) => {
4
- const l = b(), t = o(() => {
5
- const a = _(n);
1
+ import { usePage as D, router as k } from "@inertiajs/vue3";
2
+ import { computed as c, toValue as p, onBeforeUnmount as R, reactive as T } from "vue";
3
+ const h = (e, o) => {
4
+ const n = D(), r = c(() => {
5
+ const t = p(o), y = p(e), g = p(t == null ? void 0 : t.pagePropsKey) ?? y, s = p(t == null ? void 0 : t.useUrlQuery) ?? !1, v = p(t == null ? void 0 : t.reloadOnly) ? [g, ...p(t == null ? void 0 : t.reloadOnly)] : [g];
6
6
  return {
7
- tableKey: _(e),
8
- pagePropsKey: _(a == null ? void 0 : a.pagePropsKey) ?? _(e),
9
- useUrlQuery: _(a == null ? void 0 : a.useUrlQuery) ?? !1
7
+ tableKey: y,
8
+ pagePropsKey: g,
9
+ useUrlQuery: s,
10
+ reloadOnly: v
10
11
  };
11
- }), u = o(
12
- () => l.props.inertiaDataTable.stateRoutes
13
- ), p = o(
14
- () => l.props.inertiaDataTable.queryParams
15
- ), r = o(
16
- () => l.props.inertiaDataTable.defaults
12
+ }), _ = c(
13
+ () => n.props.inertiaDataTable.stateRoutes
14
+ ), i = c(
15
+ () => n.props.inertiaDataTable.queryParams
16
+ ), l = c(
17
+ () => n.props.inertiaDataTable.defaults
17
18
  );
18
19
  return {
19
- settings: t,
20
- stateRoutes: u,
21
- queryParams: p,
22
- defaults: r
20
+ settings: r,
21
+ stateRoutes: _,
22
+ queryParams: i,
23
+ defaults: l
23
24
  };
24
- }, T = (e) => {
25
- const n = o(() => x(_(e))), l = o(() => n.value.data), t = o(
26
- () => n.value.pagination
25
+ }, x = (e) => {
26
+ const o = c(() => q(p(e))), n = c(() => o.value.data), r = c(
27
+ () => o.value.pagination
27
28
  );
28
29
  return {
29
- data: l,
30
- pagination: t,
31
- getPaginatedRequest: (r = {}) => ({
32
- page: r.page ?? t.value.current_page,
33
- per_page: r.per_page ?? t.value.per_page,
34
- sort_by: r.sort_by ?? t.value.sort_by,
35
- descending: r.descending ?? t.value.descending
30
+ data: n,
31
+ pagination: r,
32
+ getPaginatedRequest: (l = {}) => ({
33
+ page: l.page ?? r.value.current_page,
34
+ per_page: l.per_page ?? r.value.per_page,
35
+ sort_by: l.sort_by ?? r.value.sort_by,
36
+ descending: l.descending ?? r.value.descending
36
37
  }),
37
- validPage: (r) => r > 0 && r <= t.value.last_page
38
+ validPage: (l) => l > 0 && l <= r.value.last_page
38
39
  };
39
- }, x = (e) => ({
40
+ }, q = (e) => ({
40
41
  data: (e == null ? void 0 : e.data) ?? [],
41
- pagination: S(e)
42
- }), h = (e) => "meta" in e && typeof e.meta == "object" && e.meta !== null, S = (e) => {
42
+ pagination: Q(e)
43
+ }), U = (e) => "meta" in e && typeof e.meta == "object" && e.meta !== null, Q = (e) => {
43
44
  if (!e)
44
45
  return {
45
46
  current_page: 1,
@@ -59,7 +60,7 @@ const R = (e, n) => {
59
60
  sort_by: "id",
60
61
  descending: !1
61
62
  };
62
- if (h(e))
63
+ if (U(e))
63
64
  return {
64
65
  current_page: e.meta.current_page,
65
66
  last_page: e.meta.last_page,
@@ -79,116 +80,136 @@ const R = (e, n) => {
79
80
  descending: e.meta.descending ?? !1
80
81
  };
81
82
  const {
82
- current_page: n,
83
- last_page: l,
84
- per_page: t,
85
- total: u,
86
- from: p,
87
- to: r,
88
- path: a,
89
- links: g,
83
+ current_page: o,
84
+ last_page: n,
85
+ per_page: r,
86
+ total: _,
87
+ from: i,
88
+ to: l,
89
+ path: t,
90
+ links: y,
90
91
  //links
91
- first_page_url: v,
92
- last_page_url: c,
93
- next_page_url: m,
94
- prev_page_url: y,
92
+ first_page_url: g,
93
+ last_page_url: s,
94
+ next_page_url: v,
95
+ prev_page_url: f,
95
96
  //custom
96
- sort_by: f,
97
- descending: d
97
+ sort_by: b,
98
+ descending: P
98
99
  } = e;
99
100
  return {
100
- current_page: n,
101
- last_page: l,
102
- per_page: t,
103
- total: u,
104
- from: p,
105
- to: r,
106
- path: a,
107
- links: g,
101
+ current_page: o,
102
+ last_page: n,
103
+ per_page: r,
104
+ total: _,
105
+ from: i,
106
+ to: l,
107
+ path: t,
108
+ links: y,
108
109
  //links
109
- first_page_url: v,
110
- last_page_url: c,
111
- next_page_url: m,
112
- prev_page_url: y,
110
+ first_page_url: g,
111
+ last_page_url: s,
112
+ next_page_url: v,
113
+ prev_page_url: f,
113
114
  //custom
114
- sort_by: f ?? "id",
115
- descending: d ?? !1
115
+ sort_by: b ?? "id",
116
+ descending: P ?? !1
116
117
  };
117
- }, q = (e, n) => {
118
- const { stateRoutes: l, settings: t } = R(
118
+ }, C = (e, o) => {
119
+ const { stateRoutes: n, settings: r } = h(
119
120
  e,
120
- n
121
+ o
121
122
  );
122
- k(() => {
123
- P.delete(l.value.drop, {
123
+ R(() => {
124
+ k.delete(n.value.drop, {
124
125
  preserveScroll: !0,
125
126
  preserveState: !0,
126
- data: { tableKey: t.value.tableKey }
127
+ data: { tableKey: r.value.tableKey }
127
128
  });
128
129
  });
129
- const u = b(), p = o(
130
- () => u.props[t.value.pagePropsKey] ?? null
131
- ), { data: r, pagination: a, getPaginatedRequest: g, validPage: v } = T(p), c = (s) => {
132
- s = g(s), t.value.useUrlQuery ? P.reload({
133
- only: [t.value.pagePropsKey],
134
- data: { tableKey: t.value.tableKey, ...s }
135
- }) : P.post(
136
- l.value.set,
130
+ const _ = D(), i = c(
131
+ () => _.props[r.value.pagePropsKey] ?? null
132
+ ), { data: l, pagination: t, getPaginatedRequest: y, validPage: g } = x(i), s = (a) => {
133
+ a = y(a), r.value.useUrlQuery ? k.reload({
134
+ only: r.value.reloadOnly,
135
+ data: {
136
+ tableKey: r.value.tableKey,
137
+ filter: u,
138
+ ...a
139
+ }
140
+ }) : k.post(
141
+ n.value.set,
137
142
  {
138
- tableKey: t.value.tableKey,
139
- data: { ...s }
143
+ tableKey: r.value.tableKey,
144
+ filter: u,
145
+ pagination: a
140
146
  },
141
147
  {
142
148
  preserveState: !0,
143
149
  preserveScroll: !0,
144
- only: [t.value.pagePropsKey]
150
+ only: r.value.reloadOnly
145
151
  }
146
152
  );
147
- }, m = () => {
148
- i(1);
149
- }, y = () => {
150
- i(a.value.current_page - 1);
153
+ }, v = () => {
154
+ d(1);
151
155
  }, f = () => {
152
- i(a.value.current_page + 1);
153
- }, d = () => {
154
- i(a.value.last_page);
155
- }, i = (s) => {
156
- if (!v(s)) {
157
- console.error(`Invalid page: ${s}`);
156
+ d(t.value.current_page - 1);
157
+ }, b = () => {
158
+ d(t.value.current_page + 1);
159
+ }, P = () => {
160
+ d(t.value.last_page);
161
+ }, d = (a) => {
162
+ if (!g(a)) {
163
+ console.error(`Invalid page: ${a}`);
158
164
  return;
159
165
  }
160
- c(g({ page: s }));
161
- };
166
+ s({ page: a });
167
+ }, F = (a) => {
168
+ s({ per_page: a, page: 1 });
169
+ }, O = (a, m) => {
170
+ const K = m ?? t.value.sort_by === a ? !t.value.descending : !1;
171
+ s({ sort_by: a, descending: K });
172
+ }, u = T({});
162
173
  return {
163
- data: r,
164
- pagination: a,
165
- reloadData: c,
166
- firstPage: m,
167
- previousPage: y,
168
- nextPage: f,
169
- lastPage: d,
170
- goToPage: i,
171
- itemsPerPage: (s) => {
172
- c(g({ per_page: s, page: 1 }));
174
+ data: l,
175
+ reload: s,
176
+ pagination: t,
177
+ firstPage: v,
178
+ previousPage: f,
179
+ nextPage: b,
180
+ lastPage: P,
181
+ goToPage: d,
182
+ itemsPerPage: F,
183
+ sortBy: O,
184
+ filter: u,
185
+ setFilter: (a, m) => {
186
+ u[a] = m, s();
187
+ },
188
+ setFilters: (a) => {
189
+ a.forEach(({ key: m, value: K }) => {
190
+ u[m] = K;
191
+ }), s();
192
+ },
193
+ removeFilter: (a) => {
194
+ delete u[a], s();
173
195
  },
174
- sortBy: (s, K) => {
175
- const D = K ?? a.value.sort_by === s ? !a.value.descending : !1;
176
- c(g({ sort_by: s, descending: D }));
196
+ resetFilters: () => {
197
+ Object.keys(u).forEach((a) => delete u[a]), s();
177
198
  }
178
199
  };
179
200
  };
180
- function z() {
201
+ function L() {
181
202
  return {
182
203
  install(e) {
183
204
  }
184
205
  };
185
206
  }
186
207
  export {
187
- z as createInertiaDataTable,
188
- S as getPaginationMeta,
189
- h as isResource,
190
- x as normalizePagination,
191
- q as useDataTable,
192
- R as useInertiaDataTableConfig,
193
- T as useLaravelPagination
208
+ L as createInertiaDataTable,
209
+ Q as getPaginationMeta,
210
+ U as isResource,
211
+ q as normalizePagination,
212
+ C as useDataTable,
213
+ h as useInertiaDataTableConfig,
214
+ x as useLaravelPagination
194
215
  };
@@ -33,9 +33,14 @@ export type InertiaDataTableOptions = {
33
33
  * The key in which the paginated data is stored in the page props. Defaults to the tableKey if not provided.
34
34
  */
35
35
  pagePropsKey?: MaybeRefOrGetter<string>;
36
+ /**
37
+ * Defines page props that should be reloaded along with the table data.
38
+ */
39
+ reloadOnly?: MaybeRefOrGetter<Array<string>>;
36
40
  };
37
41
  export type InertiaDataTableSettings = {
38
42
  tableKey: string;
39
43
  pagePropsKey: string;
40
44
  useUrlQuery: boolean;
45
+ reloadOnly: Array<string>;
41
46
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@starter-solutions/inertia-data-table-vue",
3
- "version": "0.3.0",
3
+ "version": "0.4.0",
4
4
  "license": "MIT",
5
5
  "description": "Vue 3 + Inertia.js data table utilities with Laravel backend integration.",
6
6
  "type": "module",