@finema/core 3.18.0 → 3.20.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,6 +1,6 @@
1
1
  {
2
2
  "name": "@finema/core",
3
- "version": "3.18.0",
3
+ "version": "3.20.0",
4
4
  "configKey": "core",
5
5
  "builder": {
6
6
  "@nuxt/module-builder": "1.0.2",
package/dist/module.mjs CHANGED
@@ -4,7 +4,7 @@ import * as lodash from 'lodash-es';
4
4
  import * as theme from '../dist/runtime/theme/index.js';
5
5
 
6
6
  const name = "@finema/core";
7
- const version = "3.18.0";
7
+ const version = "3.20.0";
8
8
 
9
9
  const nuxtAppOptions = {
10
10
  head: {
@@ -13,9 +13,18 @@ export interface IRequestContext {
13
13
  data?: any;
14
14
  options: AxiosRequestConfig;
15
15
  }
16
+ type StateRequestOptions = Partial<AxiosRequestConfig>;
16
17
  export declare const checkExpiration: (timestamp: number | undefined, expire?: number) => boolean;
17
18
  export declare const bindParamsToUrl: (urlTemplate: string, urlParams?: Record<string, any>) => string;
18
19
  export declare const prepareRequestOptions: (baseOptions?: AxiosRequestConfig, requestOptions?: AxiosRequestConfig, params?: Record<string, any>, signal?: AbortSignal) => AxiosRequestConfig;
20
+ export declare const toSerializableRequestOptions: (options: AxiosRequestConfig) => StateRequestOptions;
21
+ export declare const prepareLoaderRequestOptions: (baseOptions?: AxiosRequestConfig, requestOptions?: AxiosRequestConfig, params?: Record<string, any>, signal?: AbortSignal) => {
22
+ requestOptions: AxiosRequestConfig<any>;
23
+ stateRequestOptions: Partial<AxiosRequestConfig<any>>;
24
+ };
25
+ export declare const createSuccessOptions: (status: number | undefined, request: StateRequestOptions) => IAPIOptions;
26
+ export declare const createErrorOptions: (error: any, request: StateRequestOptions) => IAPIOptions;
27
+ export declare const toSerializableLoaderOptions: <T extends Record<string, any>>(opts: T) => Partial<T>;
19
28
  export declare const handleApiRequest: <T>(requestContext: IRequestContext, mockData: T | T[] | null, callbacks: {
20
29
  onSuccess: (data: T, status?: number) => void;
21
30
  onError: (error: any) => void;
@@ -28,3 +37,4 @@ export declare const updateLoaderState: {
28
37
  setComplete: (status: IStatus) => IStatus;
29
38
  setOptions: (options: IAPIOptions, updates: Partial<IAPIOptions>) => IAPIOptions;
30
39
  };
40
+ export {};
@@ -22,6 +22,47 @@ export const prepareRequestOptions = (baseOptions, requestOptions, params, signa
22
22
  });
23
23
  return options;
24
24
  };
25
+ export const toSerializableRequestOptions = (options) => {
26
+ const {
27
+ adapter: _adapter,
28
+ cancelToken: _cancelToken,
29
+ paramsSerializer: _paramsSerializer,
30
+ signal: _signal,
31
+ transformRequest: _transformRequest,
32
+ transformResponse: _transformResponse,
33
+ validateStatus: _validateStatus,
34
+ ...serializableOptions
35
+ } = options;
36
+ return JSON.parse(JSON.stringify(serializableOptions));
37
+ };
38
+ export const prepareLoaderRequestOptions = (baseOptions, requestOptions, params, signal) => {
39
+ const options = prepareRequestOptions(baseOptions, requestOptions, params, signal);
40
+ return {
41
+ requestOptions: options,
42
+ stateRequestOptions: toSerializableRequestOptions(options)
43
+ };
44
+ };
45
+ export const createSuccessOptions = (status, request) => ({
46
+ _timestamp: Date.now(),
47
+ _status: status,
48
+ request
49
+ });
50
+ export const createErrorOptions = (error, request) => ({
51
+ _status: error.response?.status,
52
+ request
53
+ });
54
+ export const toSerializableLoaderOptions = (opts) => {
55
+ const {
56
+ request,
57
+ signal: _signal,
58
+ ...rest
59
+ } = opts;
60
+ const serializableOptions = JSON.parse(JSON.stringify(rest));
61
+ if (request) {
62
+ serializableOptions.request = toSerializableRequestOptions(request);
63
+ }
64
+ return serializableOptions;
65
+ };
25
66
  const createAbortError = () => ({
26
67
  code: "ERR_CANCELED",
27
68
  name: "AbortError",
@@ -1,8 +1,10 @@
1
1
  import { bindParamsToUrl } from "./apiBaseHelper.js";
2
2
  import {
3
3
  checkExpiration,
4
- prepareRequestOptions,
4
+ createErrorOptions,
5
+ createSuccessOptions,
5
6
  handleApiRequest,
7
+ prepareLoaderRequestOptions,
6
8
  updateLoaderState
7
9
  } from "./apiBaseHelper.js";
8
10
  export const apiListHelper = async (state, onUpdateStatus, onUpdateOptions, onUpdateItems, opts) => {
@@ -12,7 +14,10 @@ export const apiListHelper = async (state, onUpdateStatus, onUpdateOptions, onUp
12
14
  }
13
15
  onUpdateStatus(updateLoaderState.setLoading(state().status));
14
16
  onUpdateOptions({});
15
- const requestOptions = prepareRequestOptions(
17
+ const {
18
+ requestOptions,
19
+ stateRequestOptions
20
+ } = prepareLoaderRequestOptions(
16
21
  {},
17
22
  opts.getRequestOptions?.(opts),
18
23
  opts.params,
@@ -30,18 +35,11 @@ export const apiListHelper = async (state, onUpdateStatus, onUpdateOptions, onUp
30
35
  onSuccess: (items, status) => {
31
36
  onUpdateItems(items);
32
37
  onUpdateStatus(updateLoaderState.setSuccess(state().status));
33
- onUpdateOptions({
34
- _timestamp: Date.now(),
35
- _status: status,
36
- request: requestOptions
37
- });
38
+ onUpdateOptions(createSuccessOptions(status, stateRequestOptions));
38
39
  },
39
40
  onError: (error) => {
40
41
  onUpdateStatus(updateLoaderState.setError(state().status, error));
41
- onUpdateOptions({
42
- _status: error.response?.status,
43
- request: requestOptions
44
- });
42
+ onUpdateOptions(createErrorOptions(error, stateRequestOptions));
45
43
  },
46
44
  onComplete: () => {
47
45
  onUpdateStatus(updateLoaderState.setComplete(state().status));
@@ -1,8 +1,10 @@
1
1
  import { bindParamsToUrl } from "./apiBaseHelper.js";
2
2
  import {
3
3
  checkExpiration,
4
+ createErrorOptions,
5
+ createSuccessOptions,
4
6
  handleApiRequest,
5
- prepareRequestOptions,
7
+ prepareLoaderRequestOptions,
6
8
  updateLoaderState
7
9
  } from "./apiBaseHelper.js";
8
10
  export const apiObjectHelper = async (state, onUpdateStatus, onUpdateOptions, onUpdateData, payload, opts) => {
@@ -12,7 +14,10 @@ export const apiObjectHelper = async (state, onUpdateStatus, onUpdateOptions, on
12
14
  }
13
15
  onUpdateStatus(updateLoaderState.setLoading(state().status));
14
16
  onUpdateOptions({});
15
- const requestOptions = prepareRequestOptions(
17
+ const {
18
+ requestOptions,
19
+ stateRequestOptions
20
+ } = prepareLoaderRequestOptions(
16
21
  {},
17
22
  opts.getRequestOptions?.(payload, opts),
18
23
  opts.params,
@@ -31,18 +36,11 @@ export const apiObjectHelper = async (state, onUpdateStatus, onUpdateOptions, on
31
36
  onSuccess: (item, status) => {
32
37
  onUpdateData(item);
33
38
  onUpdateStatus(updateLoaderState.setSuccess(state().status));
34
- onUpdateOptions({
35
- request: requestOptions,
36
- _timestamp: Date.now(),
37
- _status: status
38
- });
39
+ onUpdateOptions(createSuccessOptions(status, stateRequestOptions));
39
40
  },
40
41
  onError: (error) => {
41
42
  onUpdateStatus(updateLoaderState.setError(state().status, error));
42
- onUpdateOptions({
43
- request: requestOptions,
44
- _status: error.response?.status
45
- });
43
+ onUpdateOptions(createErrorOptions(error, stateRequestOptions));
46
44
  },
47
45
  onComplete: () => {
48
46
  onUpdateStatus(updateLoaderState.setComplete(state().status));
@@ -3,15 +3,21 @@ import { _get } from "../utils/lodash.js";
3
3
  import { bindParamsToUrl } from "./apiBaseHelper.js";
4
4
  import {
5
5
  checkExpiration,
6
+ createErrorOptions,
7
+ createSuccessOptions,
6
8
  handleApiRequest,
7
- prepareRequestOptions,
9
+ prepareLoaderRequestOptions,
10
+ toSerializableLoaderOptions,
8
11
  updateLoaderState
9
12
  } from "./apiBaseHelper.js";
10
13
  import { _findIndex, _shuffle } from "#imports";
11
14
  export const apiAddHelper = async (state, onUpdateStatus, onUpdateOptions, onUpdateData, onUpdateItems, data, opts) => {
12
15
  onUpdateStatus(updateLoaderState.setLoading(state().status));
13
16
  onUpdateOptions({});
14
- const requestOptions = prepareRequestOptions(
17
+ const {
18
+ requestOptions,
19
+ stateRequestOptions
20
+ } = prepareLoaderRequestOptions(
15
21
  opts.getBaseRequestOptions?.() || {},
16
22
  opts.add?.getRequestOptions?.(data, opts),
17
23
  opts.params,
@@ -30,18 +36,11 @@ export const apiAddHelper = async (state, onUpdateStatus, onUpdateOptions, onUpd
30
36
  onSuccess: (item, status) => {
31
37
  onUpdateData(item);
32
38
  onUpdateStatus(updateLoaderState.setSuccess(state().status));
33
- onUpdateOptions({
34
- _timestamp: Date.now(),
35
- _status: status,
36
- request: requestOptions
37
- });
39
+ onUpdateOptions(createSuccessOptions(status, stateRequestOptions));
38
40
  },
39
41
  onError: (error) => {
40
42
  onUpdateStatus(updateLoaderState.setError(state().status, error));
41
- onUpdateOptions({
42
- _status: error.response?.status,
43
- request: requestOptions
44
- });
43
+ onUpdateOptions(createErrorOptions(error, stateRequestOptions));
45
44
  },
46
45
  onComplete: () => {
47
46
  onUpdateStatus(updateLoaderState.setComplete(state().status));
@@ -54,7 +53,10 @@ export const apiDeleteHelper = async (state, onUpdateStatus, onUpdateOptions, _o
54
53
  const getPrimaryKey = (item) => _get(item, primaryKey, "");
55
54
  onUpdateStatus(updateLoaderState.setLoading(state().status));
56
55
  onUpdateOptions({});
57
- const requestOptions = prepareRequestOptions(
56
+ const {
57
+ requestOptions,
58
+ stateRequestOptions
59
+ } = prepareLoaderRequestOptions(
58
60
  opts.getBaseRequestOptions?.() || {},
59
61
  opts.delete?.getRequestOptions?.(id, opts),
60
62
  opts.params,
@@ -77,18 +79,11 @@ export const apiDeleteHelper = async (state, onUpdateStatus, onUpdateOptions, _o
77
79
  );
78
80
  }
79
81
  onUpdateStatus(updateLoaderState.setSuccess(state().status));
80
- onUpdateOptions({
81
- _timestamp: Date.now(),
82
- _status: status,
83
- request: requestOptions
84
- });
82
+ onUpdateOptions(createSuccessOptions(status, stateRequestOptions));
85
83
  },
86
84
  onError: (error) => {
87
85
  onUpdateStatus(updateLoaderState.setError(state().status, error));
88
- onUpdateOptions({
89
- _status: error.response?.status,
90
- request: requestOptions
91
- });
86
+ onUpdateOptions(createErrorOptions(error, stateRequestOptions));
92
87
  },
93
88
  onComplete: () => {
94
89
  onUpdateStatus(updateLoaderState.setComplete(state().status));
@@ -102,10 +97,12 @@ export const apiFetchHelper = async (state, onUpdateStatus, onUpdateOptions, onU
102
97
  onUpdateStatus(updateLoaderState.setComplete(state().status));
103
98
  return;
104
99
  }
100
+ const loaderStateOptions = toSerializableLoaderOptions(opts);
101
+ const currentStateOptions = toSerializableLoaderOptions(state().options);
105
102
  onUpdateStatus(updateLoaderState.setLoading(state().status));
106
103
  onUpdateOptions({
107
- ...state().options,
108
- ...opts,
104
+ ...currentStateOptions,
105
+ ...loaderStateOptions,
109
106
  currentPage: page,
110
107
  search: query,
111
108
  primary: opts.primary ?? "id",
@@ -119,7 +116,7 @@ export const apiFetchHelper = async (state, onUpdateStatus, onUpdateOptions, onU
119
116
  ...more
120
117
  } = data;
121
118
  return {
122
- ...state().options,
119
+ ...toSerializableLoaderOptions(state().options),
123
120
  ...more,
124
121
  currentPageCount: state().items?.length || 0,
125
122
  currentPage: page2,
@@ -134,7 +131,10 @@ export const apiFetchHelper = async (state, onUpdateStatus, onUpdateOptions, onU
134
131
  ...opts.fetch?.getRequestOptions?.(page, query, opts) || {}
135
132
  };
136
133
  const limit = Number(state().options.limit || baseRequestOptions.params?.limit || config.limit_per_page);
137
- const requestOptions = prepareRequestOptions(
134
+ const {
135
+ requestOptions,
136
+ stateRequestOptions
137
+ } = prepareLoaderRequestOptions(
138
138
  baseRequestOptions,
139
139
  {
140
140
  params: {
@@ -165,21 +165,18 @@ export const apiFetchHelper = async (state, onUpdateStatus, onUpdateOptions, onU
165
165
  ...moreOptions
166
166
  } = response;
167
167
  onUpdateItems(items);
168
- onUpdateOptions(JSON.parse(JSON.stringify({
168
+ onUpdateOptions({
169
169
  ...getOptions(moreOptions),
170
- _timestamp: Date.now(),
171
- _status: status,
172
- request: requestOptions
173
- })));
170
+ ...createSuccessOptions(status, stateRequestOptions)
171
+ });
174
172
  onUpdateStatus(updateLoaderState.setSuccess(state().status));
175
173
  },
176
174
  onError: (error) => {
177
175
  onUpdateStatus(updateLoaderState.setError(state().status, error));
178
- onUpdateOptions(JSON.parse(JSON.stringify({
179
- ...state().options,
180
- _status: error.response?.status,
181
- request: requestOptions
182
- })));
176
+ onUpdateOptions({
177
+ ...toSerializableLoaderOptions(state().options),
178
+ ...createErrorOptions(error, stateRequestOptions)
179
+ });
183
180
  },
184
181
  onComplete: () => {
185
182
  onUpdateStatus(updateLoaderState.setComplete(state().status));
@@ -194,7 +191,10 @@ export const apiFindHelper = async (state, onUpdateStatus, onUpdateOptions, onUp
194
191
  }
195
192
  onUpdateStatus(updateLoaderState.setLoading(state().status));
196
193
  onUpdateOptions({});
197
- const requestOptions = prepareRequestOptions(
194
+ const {
195
+ requestOptions,
196
+ stateRequestOptions
197
+ } = prepareLoaderRequestOptions(
198
198
  opts.getBaseRequestOptions?.() || {},
199
199
  opts.find?.getRequestOptions?.(id, opts),
200
200
  opts.params,
@@ -212,18 +212,11 @@ export const apiFindHelper = async (state, onUpdateStatus, onUpdateOptions, onUp
212
212
  onSuccess: (item, status) => {
213
213
  onUpdateData(item);
214
214
  onUpdateStatus(updateLoaderState.setSuccess(state().status));
215
- onUpdateOptions({
216
- _timestamp: Date.now(),
217
- _status: status,
218
- request: requestOptions
219
- });
215
+ onUpdateOptions(createSuccessOptions(status, stateRequestOptions));
220
216
  },
221
217
  onError: (error) => {
222
218
  onUpdateStatus(updateLoaderState.setError(state().status, error));
223
- onUpdateOptions({
224
- _status: error.response?.status,
225
- request: requestOptions
226
- });
219
+ onUpdateOptions(createErrorOptions(error, stateRequestOptions));
227
220
  },
228
221
  onComplete: () => {
229
222
  onUpdateStatus(updateLoaderState.setComplete(state().status));
@@ -238,7 +231,10 @@ export const updateHelper = async (state, onUpdateStatus, onUpdateOptions, onUpd
238
231
  }
239
232
  onUpdateStatus(updateLoaderState.setLoading(state().status));
240
233
  onUpdateOptions({});
241
- const requestOptions = prepareRequestOptions(
234
+ const {
235
+ requestOptions,
236
+ stateRequestOptions
237
+ } = prepareLoaderRequestOptions(
242
238
  opts.getBaseRequestOptions?.() || {},
243
239
  opts.update?.getRequestOptions?.(id, data, opts),
244
240
  opts.params,
@@ -270,18 +266,11 @@ export const updateHelper = async (state, onUpdateStatus, onUpdateOptions, onUpd
270
266
  }
271
267
  }
272
268
  onUpdateStatus(updateLoaderState.setSuccess(state().status));
273
- onUpdateOptions({
274
- _timestamp: Date.now(),
275
- _status: status,
276
- request: requestOptions
277
- });
269
+ onUpdateOptions(createSuccessOptions(status, stateRequestOptions));
278
270
  },
279
271
  onError: (error) => {
280
272
  onUpdateStatus(updateLoaderState.setError(state().status, error));
281
- onUpdateOptions({
282
- _status: error.response?.status,
283
- request: requestOptions
284
- });
273
+ onUpdateOptions(createErrorOptions(error, stateRequestOptions));
285
274
  },
286
275
  onComplete: () => {
287
276
  onUpdateStatus(updateLoaderState.setComplete(state().status));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@finema/core",
3
- "version": "3.18.0",
3
+ "version": "3.20.0",
4
4
  "repository": "https://gitlab.finema.co/finema/ui-kit",
5
5
  "license": "MIT",
6
6
  "author": "Finema Dev Core Team",