@finema/core 3.19.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.19.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.19.0";
7
+ const version = "3.20.0";
8
8
 
9
9
  const nuxtAppOptions = {
10
10
  head: {
@@ -13,11 +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;
19
- export declare const omitLoaderSignal: <T extends Record<string, any>>(opts: T) => Omit<T, "signal">;
20
- export declare const toSerializableRequestOptions: (options: AxiosRequestConfig) => Partial<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>;
21
28
  export declare const handleApiRequest: <T>(requestContext: IRequestContext, mockData: T | T[] | null, callbacks: {
22
29
  onSuccess: (data: T, status?: number) => void;
23
30
  onError: (error: any) => void;
@@ -30,3 +37,4 @@ export declare const updateLoaderState: {
30
37
  setComplete: (status: IStatus) => IStatus;
31
38
  setOptions: (options: IAPIOptions, updates: Partial<IAPIOptions>) => IAPIOptions;
32
39
  };
40
+ export {};
@@ -22,13 +22,6 @@ export const prepareRequestOptions = (baseOptions, requestOptions, params, signa
22
22
  });
23
23
  return options;
24
24
  };
25
- export const omitLoaderSignal = (opts) => {
26
- const {
27
- signal: _signal,
28
- ...rest
29
- } = opts;
30
- return rest;
31
- };
32
25
  export const toSerializableRequestOptions = (options) => {
33
26
  const {
34
27
  adapter: _adapter,
@@ -42,6 +35,34 @@ export const toSerializableRequestOptions = (options) => {
42
35
  } = options;
43
36
  return JSON.parse(JSON.stringify(serializableOptions));
44
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
+ };
45
66
  const createAbortError = () => ({
46
67
  code: "ERR_CANCELED",
47
68
  name: "AbortError",
@@ -1,9 +1,10 @@
1
1
  import { bindParamsToUrl } from "./apiBaseHelper.js";
2
2
  import {
3
3
  checkExpiration,
4
- prepareRequestOptions,
4
+ createErrorOptions,
5
+ createSuccessOptions,
5
6
  handleApiRequest,
6
- toSerializableRequestOptions,
7
+ prepareLoaderRequestOptions,
7
8
  updateLoaderState
8
9
  } from "./apiBaseHelper.js";
9
10
  export const apiListHelper = async (state, onUpdateStatus, onUpdateOptions, onUpdateItems, opts) => {
@@ -13,13 +14,15 @@ export const apiListHelper = async (state, onUpdateStatus, onUpdateOptions, onUp
13
14
  }
14
15
  onUpdateStatus(updateLoaderState.setLoading(state().status));
15
16
  onUpdateOptions({});
16
- const requestOptions = prepareRequestOptions(
17
+ const {
18
+ requestOptions,
19
+ stateRequestOptions
20
+ } = prepareLoaderRequestOptions(
17
21
  {},
18
22
  opts.getRequestOptions?.(opts),
19
23
  opts.params,
20
24
  opts.signal
21
25
  );
22
- const serializableRequestOptions = toSerializableRequestOptions(requestOptions);
23
26
  const url = bindParamsToUrl(opts.getURL ? opts.getURL(opts) : opts.url, opts.urlBind || {});
24
27
  await handleApiRequest(
25
28
  {
@@ -32,18 +35,11 @@ export const apiListHelper = async (state, onUpdateStatus, onUpdateOptions, onUp
32
35
  onSuccess: (items, status) => {
33
36
  onUpdateItems(items);
34
37
  onUpdateStatus(updateLoaderState.setSuccess(state().status));
35
- onUpdateOptions({
36
- _timestamp: Date.now(),
37
- _status: status,
38
- request: serializableRequestOptions
39
- });
38
+ onUpdateOptions(createSuccessOptions(status, stateRequestOptions));
40
39
  },
41
40
  onError: (error) => {
42
41
  onUpdateStatus(updateLoaderState.setError(state().status, error));
43
- onUpdateOptions({
44
- _status: error.response?.status,
45
- request: serializableRequestOptions
46
- });
42
+ onUpdateOptions(createErrorOptions(error, stateRequestOptions));
47
43
  },
48
44
  onComplete: () => {
49
45
  onUpdateStatus(updateLoaderState.setComplete(state().status));
@@ -1,9 +1,10 @@
1
1
  import { bindParamsToUrl } from "./apiBaseHelper.js";
2
2
  import {
3
3
  checkExpiration,
4
+ createErrorOptions,
5
+ createSuccessOptions,
4
6
  handleApiRequest,
5
- prepareRequestOptions,
6
- toSerializableRequestOptions,
7
+ prepareLoaderRequestOptions,
7
8
  updateLoaderState
8
9
  } from "./apiBaseHelper.js";
9
10
  export const apiObjectHelper = async (state, onUpdateStatus, onUpdateOptions, onUpdateData, payload, opts) => {
@@ -13,13 +14,15 @@ export const apiObjectHelper = async (state, onUpdateStatus, onUpdateOptions, on
13
14
  }
14
15
  onUpdateStatus(updateLoaderState.setLoading(state().status));
15
16
  onUpdateOptions({});
16
- const requestOptions = prepareRequestOptions(
17
+ const {
18
+ requestOptions,
19
+ stateRequestOptions
20
+ } = prepareLoaderRequestOptions(
17
21
  {},
18
22
  opts.getRequestOptions?.(payload, opts),
19
23
  opts.params,
20
24
  opts.signal
21
25
  );
22
- const serializableRequestOptions = toSerializableRequestOptions(requestOptions);
23
26
  const url = bindParamsToUrl(opts.getURL ? opts.getURL(payload, opts) : opts.url, opts.urlBind || {});
24
27
  await handleApiRequest(
25
28
  {
@@ -33,18 +36,11 @@ export const apiObjectHelper = async (state, onUpdateStatus, onUpdateOptions, on
33
36
  onSuccess: (item, status) => {
34
37
  onUpdateData(item);
35
38
  onUpdateStatus(updateLoaderState.setSuccess(state().status));
36
- onUpdateOptions({
37
- request: serializableRequestOptions,
38
- _timestamp: Date.now(),
39
- _status: status
40
- });
39
+ onUpdateOptions(createSuccessOptions(status, stateRequestOptions));
41
40
  },
42
41
  onError: (error) => {
43
42
  onUpdateStatus(updateLoaderState.setError(state().status, error));
44
- onUpdateOptions({
45
- request: serializableRequestOptions,
46
- _status: error.response?.status
47
- });
43
+ onUpdateOptions(createErrorOptions(error, stateRequestOptions));
48
44
  },
49
45
  onComplete: () => {
50
46
  onUpdateStatus(updateLoaderState.setComplete(state().status));
@@ -3,23 +3,26 @@ 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
- omitLoaderSignal,
8
- prepareRequestOptions,
9
- toSerializableRequestOptions,
9
+ prepareLoaderRequestOptions,
10
+ toSerializableLoaderOptions,
10
11
  updateLoaderState
11
12
  } from "./apiBaseHelper.js";
12
13
  import { _findIndex, _shuffle } from "#imports";
13
14
  export const apiAddHelper = async (state, onUpdateStatus, onUpdateOptions, onUpdateData, onUpdateItems, data, opts) => {
14
15
  onUpdateStatus(updateLoaderState.setLoading(state().status));
15
16
  onUpdateOptions({});
16
- const requestOptions = prepareRequestOptions(
17
+ const {
18
+ requestOptions,
19
+ stateRequestOptions
20
+ } = prepareLoaderRequestOptions(
17
21
  opts.getBaseRequestOptions?.() || {},
18
22
  opts.add?.getRequestOptions?.(data, opts),
19
23
  opts.params,
20
24
  opts.signal
21
25
  );
22
- const serializableRequestOptions = toSerializableRequestOptions(requestOptions);
23
26
  const url = bindParamsToUrl(opts.add?.getURL ? opts.add.getURL(data, opts) : opts.baseURL, opts.pathBind);
24
27
  await handleApiRequest(
25
28
  {
@@ -33,18 +36,11 @@ export const apiAddHelper = async (state, onUpdateStatus, onUpdateOptions, onUpd
33
36
  onSuccess: (item, status) => {
34
37
  onUpdateData(item);
35
38
  onUpdateStatus(updateLoaderState.setSuccess(state().status));
36
- onUpdateOptions({
37
- _timestamp: Date.now(),
38
- _status: status,
39
- request: serializableRequestOptions
40
- });
39
+ onUpdateOptions(createSuccessOptions(status, stateRequestOptions));
41
40
  },
42
41
  onError: (error) => {
43
42
  onUpdateStatus(updateLoaderState.setError(state().status, error));
44
- onUpdateOptions({
45
- _status: error.response?.status,
46
- request: serializableRequestOptions
47
- });
43
+ onUpdateOptions(createErrorOptions(error, stateRequestOptions));
48
44
  },
49
45
  onComplete: () => {
50
46
  onUpdateStatus(updateLoaderState.setComplete(state().status));
@@ -57,13 +53,15 @@ export const apiDeleteHelper = async (state, onUpdateStatus, onUpdateOptions, _o
57
53
  const getPrimaryKey = (item) => _get(item, primaryKey, "");
58
54
  onUpdateStatus(updateLoaderState.setLoading(state().status));
59
55
  onUpdateOptions({});
60
- const requestOptions = prepareRequestOptions(
56
+ const {
57
+ requestOptions,
58
+ stateRequestOptions
59
+ } = prepareLoaderRequestOptions(
61
60
  opts.getBaseRequestOptions?.() || {},
62
61
  opts.delete?.getRequestOptions?.(id, opts),
63
62
  opts.params,
64
63
  opts.signal
65
64
  );
66
- const serializableRequestOptions = toSerializableRequestOptions(requestOptions);
67
65
  const url = bindParamsToUrl(opts.delete?.getURL ? opts.delete.getURL(id, opts) : `${opts.baseURL}/${id}`, opts.pathBind);
68
66
  await handleApiRequest(
69
67
  {
@@ -81,18 +79,11 @@ export const apiDeleteHelper = async (state, onUpdateStatus, onUpdateOptions, _o
81
79
  );
82
80
  }
83
81
  onUpdateStatus(updateLoaderState.setSuccess(state().status));
84
- onUpdateOptions({
85
- _timestamp: Date.now(),
86
- _status: status,
87
- request: serializableRequestOptions
88
- });
82
+ onUpdateOptions(createSuccessOptions(status, stateRequestOptions));
89
83
  },
90
84
  onError: (error) => {
91
85
  onUpdateStatus(updateLoaderState.setError(state().status, error));
92
- onUpdateOptions({
93
- _status: error.response?.status,
94
- request: serializableRequestOptions
95
- });
86
+ onUpdateOptions(createErrorOptions(error, stateRequestOptions));
96
87
  },
97
88
  onComplete: () => {
98
89
  onUpdateStatus(updateLoaderState.setComplete(state().status));
@@ -106,10 +97,11 @@ export const apiFetchHelper = async (state, onUpdateStatus, onUpdateOptions, onU
106
97
  onUpdateStatus(updateLoaderState.setComplete(state().status));
107
98
  return;
108
99
  }
109
- const loaderStateOptions = omitLoaderSignal(opts);
100
+ const loaderStateOptions = toSerializableLoaderOptions(opts);
101
+ const currentStateOptions = toSerializableLoaderOptions(state().options);
110
102
  onUpdateStatus(updateLoaderState.setLoading(state().status));
111
103
  onUpdateOptions({
112
- ...state().options,
104
+ ...currentStateOptions,
113
105
  ...loaderStateOptions,
114
106
  currentPage: page,
115
107
  search: query,
@@ -124,7 +116,7 @@ export const apiFetchHelper = async (state, onUpdateStatus, onUpdateOptions, onU
124
116
  ...more
125
117
  } = data;
126
118
  return {
127
- ...state().options,
119
+ ...toSerializableLoaderOptions(state().options),
128
120
  ...more,
129
121
  currentPageCount: state().items?.length || 0,
130
122
  currentPage: page2,
@@ -139,7 +131,10 @@ export const apiFetchHelper = async (state, onUpdateStatus, onUpdateOptions, onU
139
131
  ...opts.fetch?.getRequestOptions?.(page, query, opts) || {}
140
132
  };
141
133
  const limit = Number(state().options.limit || baseRequestOptions.params?.limit || config.limit_per_page);
142
- const requestOptions = prepareRequestOptions(
134
+ const {
135
+ requestOptions,
136
+ stateRequestOptions
137
+ } = prepareLoaderRequestOptions(
143
138
  baseRequestOptions,
144
139
  {
145
140
  params: {
@@ -151,7 +146,6 @@ export const apiFetchHelper = async (state, onUpdateStatus, onUpdateOptions, onU
151
146
  opts.params,
152
147
  opts.signal
153
148
  );
154
- const serializableRequestOptions = toSerializableRequestOptions(requestOptions);
155
149
  const url = bindParamsToUrl(opts.fetch?.getURL ? opts.fetch.getURL(page, query, opts) : opts.baseURL, opts.pathBind);
156
150
  await handleApiRequest(
157
151
  {
@@ -171,21 +165,18 @@ export const apiFetchHelper = async (state, onUpdateStatus, onUpdateOptions, onU
171
165
  ...moreOptions
172
166
  } = response;
173
167
  onUpdateItems(items);
174
- onUpdateOptions(JSON.parse(JSON.stringify({
168
+ onUpdateOptions({
175
169
  ...getOptions(moreOptions),
176
- _timestamp: Date.now(),
177
- _status: status,
178
- request: serializableRequestOptions
179
- })));
170
+ ...createSuccessOptions(status, stateRequestOptions)
171
+ });
180
172
  onUpdateStatus(updateLoaderState.setSuccess(state().status));
181
173
  },
182
174
  onError: (error) => {
183
175
  onUpdateStatus(updateLoaderState.setError(state().status, error));
184
- onUpdateOptions(JSON.parse(JSON.stringify({
185
- ...state().options,
186
- _status: error.response?.status,
187
- request: serializableRequestOptions
188
- })));
176
+ onUpdateOptions({
177
+ ...toSerializableLoaderOptions(state().options),
178
+ ...createErrorOptions(error, stateRequestOptions)
179
+ });
189
180
  },
190
181
  onComplete: () => {
191
182
  onUpdateStatus(updateLoaderState.setComplete(state().status));
@@ -200,13 +191,15 @@ export const apiFindHelper = async (state, onUpdateStatus, onUpdateOptions, onUp
200
191
  }
201
192
  onUpdateStatus(updateLoaderState.setLoading(state().status));
202
193
  onUpdateOptions({});
203
- const requestOptions = prepareRequestOptions(
194
+ const {
195
+ requestOptions,
196
+ stateRequestOptions
197
+ } = prepareLoaderRequestOptions(
204
198
  opts.getBaseRequestOptions?.() || {},
205
199
  opts.find?.getRequestOptions?.(id, opts),
206
200
  opts.params,
207
201
  opts.signal
208
202
  );
209
- const serializableRequestOptions = toSerializableRequestOptions(requestOptions);
210
203
  const url = bindParamsToUrl(opts.find?.getURL ? opts.find.getURL(id, opts) : `${opts.baseURL}/${id}`, opts.pathBind);
211
204
  await handleApiRequest(
212
205
  {
@@ -219,18 +212,11 @@ export const apiFindHelper = async (state, onUpdateStatus, onUpdateOptions, onUp
219
212
  onSuccess: (item, status) => {
220
213
  onUpdateData(item);
221
214
  onUpdateStatus(updateLoaderState.setSuccess(state().status));
222
- onUpdateOptions({
223
- _timestamp: Date.now(),
224
- _status: status,
225
- request: serializableRequestOptions
226
- });
215
+ onUpdateOptions(createSuccessOptions(status, stateRequestOptions));
227
216
  },
228
217
  onError: (error) => {
229
218
  onUpdateStatus(updateLoaderState.setError(state().status, error));
230
- onUpdateOptions({
231
- _status: error.response?.status,
232
- request: serializableRequestOptions
233
- });
219
+ onUpdateOptions(createErrorOptions(error, stateRequestOptions));
234
220
  },
235
221
  onComplete: () => {
236
222
  onUpdateStatus(updateLoaderState.setComplete(state().status));
@@ -245,13 +231,15 @@ export const updateHelper = async (state, onUpdateStatus, onUpdateOptions, onUpd
245
231
  }
246
232
  onUpdateStatus(updateLoaderState.setLoading(state().status));
247
233
  onUpdateOptions({});
248
- const requestOptions = prepareRequestOptions(
234
+ const {
235
+ requestOptions,
236
+ stateRequestOptions
237
+ } = prepareLoaderRequestOptions(
249
238
  opts.getBaseRequestOptions?.() || {},
250
239
  opts.update?.getRequestOptions?.(id, data, opts),
251
240
  opts.params,
252
241
  opts.signal
253
242
  );
254
- const serializableRequestOptions = toSerializableRequestOptions(requestOptions);
255
243
  const url = bindParamsToUrl(opts.update?.getURL ? opts.update.getURL(id, data, opts) : `${opts.baseURL}/${id}`, opts.pathBind);
256
244
  await handleApiRequest(
257
245
  {
@@ -278,18 +266,11 @@ export const updateHelper = async (state, onUpdateStatus, onUpdateOptions, onUpd
278
266
  }
279
267
  }
280
268
  onUpdateStatus(updateLoaderState.setSuccess(state().status));
281
- onUpdateOptions({
282
- _timestamp: Date.now(),
283
- _status: status,
284
- request: serializableRequestOptions
285
- });
269
+ onUpdateOptions(createSuccessOptions(status, stateRequestOptions));
286
270
  },
287
271
  onError: (error) => {
288
272
  onUpdateStatus(updateLoaderState.setError(state().status, error));
289
- onUpdateOptions({
290
- _status: error.response?.status,
291
- request: serializableRequestOptions
292
- });
273
+ onUpdateOptions(createErrorOptions(error, stateRequestOptions));
293
274
  },
294
275
  onComplete: () => {
295
276
  onUpdateStatus(updateLoaderState.setComplete(state().status));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@finema/core",
3
- "version": "3.19.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",