nuxt-outfit 1.7.0 → 1.8.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.
package/dist/module.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "@nuxt/outfit",
3
3
  "configKey": "outfit",
4
- "version": "1.7.0"
4
+ "version": "1.8.0"
5
5
  }
@@ -0,0 +1,11 @@
1
+ export declare const useDataFetch: (name: any, path: any, options?: {}) => Promise<{
2
+ pending: any;
3
+ refresh: any;
4
+ data: any;
5
+ filters: any;
6
+ currentPage: any;
7
+ changePage: (page: any) => Promise<void>;
8
+ changePerPage: (count: any) => Promise<void>;
9
+ filter: () => Promise<void>;
10
+ clearFilter: () => Promise<void>;
11
+ }>;
@@ -0,0 +1,66 @@
1
+ import { klona as deepClone } from "klona/full";
2
+ import { flatten } from "flat";
3
+ export const useDataFetch = async (name, path, options = {}) => {
4
+ const { $spaFetch } = useNuxtApp();
5
+ const { push } = useRouter();
6
+ const { getBindingQueryValues } = useQuery();
7
+ const { filters: filtersQuery, other: otherQuery } = getBindingQueryValues();
8
+ const filters = reactive({ ...deepClone(options?.filters), ...options?.isSilent ? {} : filtersQuery });
9
+ const other = reactive({ page: 1, ...options?.isSilent ? {} : otherQuery });
10
+ const currentPage = computed({
11
+ get() {
12
+ return other.page;
13
+ },
14
+ set(value) {
15
+ other.page = value;
16
+ }
17
+ });
18
+ const preparedFilters = computed(() => {
19
+ const inLine = flatten(filters);
20
+ return Object.keys(inLine).filter((key) => inLine[key] !== null).reduce((result, key) => {
21
+ result[`filter[${key}]`] = inLine[key];
22
+ return result;
23
+ }, {});
24
+ });
25
+ const validQuery = computed(() => ({ ...other, ...preparedFilters.value }));
26
+ const { data, refresh, pending } = await useAsyncData(name, () => $spaFetch(path, {
27
+ query: validQuery.value,
28
+ ...options?.fetch ?? {}
29
+ }));
30
+ const make = async () => {
31
+ await refresh();
32
+ if (options?.isSilent !== true) {
33
+ push({ query: validQuery.value });
34
+ }
35
+ };
36
+ const changePage = async (page) => {
37
+ currentPage.value = page;
38
+ await make();
39
+ };
40
+ const changePerPage = async (count) => {
41
+ other.per_page = count;
42
+ await make();
43
+ };
44
+ const filter = async () => {
45
+ currentPage.value = 1;
46
+ await make();
47
+ };
48
+ const clearFilter = async () => {
49
+ Object.assign(filters, deepClone(options?.filters));
50
+ await make();
51
+ };
52
+ watch(filters, async () => {
53
+ await filter();
54
+ }, { deep: true });
55
+ return {
56
+ pending,
57
+ refresh,
58
+ data,
59
+ filters,
60
+ currentPage,
61
+ changePage,
62
+ changePerPage,
63
+ filter,
64
+ clearFilter
65
+ };
66
+ };
@@ -0,0 +1,6 @@
1
+ export declare const useQuery: () => {
2
+ getBindingQueryValues: () => {
3
+ filters: {};
4
+ other: {};
5
+ };
6
+ };
@@ -0,0 +1,28 @@
1
+ export const useQuery = () => {
2
+ const { query } = useRoute();
3
+ const convertValue = (value) => {
4
+ if (!isNaN(value)) {
5
+ return parseFloat(value);
6
+ } else if (value === "true" || value === "false") {
7
+ return value === "true";
8
+ } else if (value.includes(",")) {
9
+ return value.split(",").map((item) => convertValue(item.trim()));
10
+ }
11
+ return value;
12
+ };
13
+ const getBindingQueryValues = () => {
14
+ return Object.keys(query).reduce((params, key) => {
15
+ const match = key.match(/^filter\[(.+)\]$/);
16
+ const value = convertValue(query[key]);
17
+ if (match) {
18
+ params.filters[match[1]] = value;
19
+ } else {
20
+ params.other[key] = value;
21
+ }
22
+ return params;
23
+ }, { filters: {}, other: {} });
24
+ };
25
+ return {
26
+ getBindingQueryValues
27
+ };
28
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nuxt-outfit",
3
- "version": "1.7.0",
3
+ "version": "1.8.0",
4
4
  "description": "Outfit - Connection Laravel and Nuxt",
5
5
  "repository": {
6
6
  "type": "git",