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