@fctc/widget-logic 1.1.0 → 1.1.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.
package/dist/action.js CHANGED
@@ -27,7 +27,7 @@ __export(action_exports, {
27
27
  });
28
28
  module.exports = __toCommonJS(action_exports);
29
29
 
30
- // src/action/use-archieve-row.tsx
30
+ // src/action/use-archieve-row.ts
31
31
  var import_interface_logic = require("@fctc/interface-logic");
32
32
  var useArchieveHandler = ({
33
33
  data,
@@ -54,7 +54,7 @@ var useArchieveHandler = ({
54
54
  return handleDuplicateRecord;
55
55
  };
56
56
 
57
- // src/action/use-duplicate-row.tsx
57
+ // src/action/use-duplicate-row.ts
58
58
  var import_interface_logic2 = require("@fctc/interface-logic");
59
59
  var useDuplicateRowHandler = ({
60
60
  data,
@@ -80,7 +80,7 @@ var useDuplicateRowHandler = ({
80
80
  return handleDuplicateRecord;
81
81
  };
82
82
 
83
- // src/action/use-get-field-export.tsx
83
+ // src/action/use-get-field-export.ts
84
84
  var import_interface_logic3 = require("@fctc/interface-logic");
85
85
  var useGetFieldExportHandler = ({
86
86
  data,
@@ -113,7 +113,7 @@ var useGetFieldExportHandler = ({
113
113
  return handleGetFieldExport;
114
114
  };
115
115
 
116
- // src/action/use-export-excel.tsx
116
+ // src/action/use-export-excel.ts
117
117
  var import_interface_logic4 = require("@fctc/interface-logic");
118
118
  var useExportExcelHandler = ({
119
119
  data,
package/dist/action.mjs CHANGED
@@ -1,4 +1,4 @@
1
- // src/action/use-archieve-row.tsx
1
+ // src/action/use-archieve-row.ts
2
2
  import { useButton } from "@fctc/interface-logic";
3
3
  var useArchieveHandler = ({
4
4
  data,
@@ -25,7 +25,7 @@ var useArchieveHandler = ({
25
25
  return handleDuplicateRecord;
26
26
  };
27
27
 
28
- // src/action/use-duplicate-row.tsx
28
+ // src/action/use-duplicate-row.ts
29
29
  import { useDuplicateRecord } from "@fctc/interface-logic";
30
30
  var useDuplicateRowHandler = ({
31
31
  data,
@@ -51,7 +51,7 @@ var useDuplicateRowHandler = ({
51
51
  return handleDuplicateRecord;
52
52
  };
53
53
 
54
- // src/action/use-get-field-export.tsx
54
+ // src/action/use-get-field-export.ts
55
55
  import { useGetFieldExport } from "@fctc/interface-logic";
56
56
  var useGetFieldExportHandler = ({
57
57
  data,
@@ -84,7 +84,7 @@ var useGetFieldExportHandler = ({
84
84
  return handleGetFieldExport;
85
85
  };
86
86
 
87
- // src/action/use-export-excel.tsx
87
+ // src/action/use-export-excel.ts
88
88
  import { evalJSONDomain, useExportExcel } from "@fctc/interface-logic";
89
89
  var useExportExcelHandler = ({
90
90
  data,
@@ -0,0 +1,13 @@
1
+ import { RefObject } from 'react';
2
+
3
+ declare const DEFAULT_EVENTS: readonly ["mousedown", "touchstart"];
4
+ type EventType = (typeof DEFAULT_EVENTS)[number];
5
+ interface UseClickOutsideOptions {
6
+ handler: (event?: Event) => void;
7
+ events?: readonly EventType[];
8
+ nodes?: (HTMLDivElement | null)[];
9
+ refs?: any;
10
+ }
11
+ declare const useClickOutside: ({ handler, events, nodes, refs, }: UseClickOutsideOptions) => RefObject<HTMLDivElement | null>;
12
+
13
+ export { useClickOutside };
@@ -0,0 +1,13 @@
1
+ import { RefObject } from 'react';
2
+
3
+ declare const DEFAULT_EVENTS: readonly ["mousedown", "touchstart"];
4
+ type EventType = (typeof DEFAULT_EVENTS)[number];
5
+ interface UseClickOutsideOptions {
6
+ handler: (event?: Event) => void;
7
+ events?: readonly EventType[];
8
+ nodes?: (HTMLDivElement | null)[];
9
+ refs?: any;
10
+ }
11
+ declare const useClickOutside: ({ handler, events, nodes, refs, }: UseClickOutsideOptions) => RefObject<HTMLDivElement | null>;
12
+
13
+ export { useClickOutside };
package/dist/common.js ADDED
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/common.ts
21
+ var common_exports = {};
22
+ __export(common_exports, {
23
+ useClickOutside: () => useClickOutside
24
+ });
25
+ module.exports = __toCommonJS(common_exports);
26
+
27
+ // src/common/use-click-outside.ts
28
+ var import_react = require("react");
29
+ var DEFAULT_EVENTS = ["mousedown", "touchstart"];
30
+ var useClickOutside = ({
31
+ handler,
32
+ events = DEFAULT_EVENTS,
33
+ nodes = [],
34
+ refs
35
+ }) => {
36
+ const ref = (0, import_react.useRef)(null);
37
+ (0, import_react.useEffect)(() => {
38
+ const listener = (event) => {
39
+ const { target } = event;
40
+ if (refs && refs?.length > 0 && refs?.some((r) => r.current?.contains(target))) {
41
+ return;
42
+ }
43
+ if (!(target instanceof HTMLElement)) return;
44
+ const shouldIgnore = target.hasAttribute("data-ignore-outside-clicks") || !document.body.contains(target) && target.tagName !== "HTML";
45
+ const shouldTrigger = nodes.length > 0 ? nodes.every((node) => node && !event.composedPath().includes(node)) : ref.current && !ref.current.contains(target);
46
+ if (shouldTrigger && !shouldIgnore) {
47
+ handler(event);
48
+ }
49
+ };
50
+ events.forEach((event) => document.addEventListener(event, listener));
51
+ return () => {
52
+ events.forEach((event) => document.removeEventListener(event, listener));
53
+ };
54
+ }, [handler, nodes, events]);
55
+ return ref;
56
+ };
57
+ // Annotate the CommonJS export names for ESM import in node:
58
+ 0 && (module.exports = {
59
+ useClickOutside
60
+ });
@@ -0,0 +1,33 @@
1
+ // src/common/use-click-outside.ts
2
+ import { useEffect, useRef } from "react";
3
+ var DEFAULT_EVENTS = ["mousedown", "touchstart"];
4
+ var useClickOutside = ({
5
+ handler,
6
+ events = DEFAULT_EVENTS,
7
+ nodes = [],
8
+ refs
9
+ }) => {
10
+ const ref = useRef(null);
11
+ useEffect(() => {
12
+ const listener = (event) => {
13
+ const { target } = event;
14
+ if (refs && refs?.length > 0 && refs?.some((r) => r.current?.contains(target))) {
15
+ return;
16
+ }
17
+ if (!(target instanceof HTMLElement)) return;
18
+ const shouldIgnore = target.hasAttribute("data-ignore-outside-clicks") || !document.body.contains(target) && target.tagName !== "HTML";
19
+ const shouldTrigger = nodes.length > 0 ? nodes.every((node) => node && !event.composedPath().includes(node)) : ref.current && !ref.current.contains(target);
20
+ if (shouldTrigger && !shouldIgnore) {
21
+ handler(event);
22
+ }
23
+ };
24
+ events.forEach((event) => document.addEventListener(event, listener));
25
+ return () => {
26
+ events.forEach((event) => document.removeEventListener(event, listener));
27
+ };
28
+ }, [handler, nodes, events]);
29
+ return ref;
30
+ };
31
+ export {
32
+ useClickOutside
33
+ };
package/dist/form.d.mts CHANGED
@@ -3,22 +3,23 @@ interface UseSaveFormProps$1 {
3
3
  context: any;
4
4
  model: string;
5
5
  specification: any;
6
- id: any;
7
- nameField: any;
8
- object: any;
6
+ ids: any;
7
+ nameField?: any;
8
+ object?: any;
9
9
  };
10
10
  onSuccess?: (res: any) => void;
11
11
  onError?: (err: any) => void;
12
12
  onSettled?: (err: any) => void;
13
13
  }
14
- declare const UseOnChangeFormHandler: ({ data, onSuccess, onError, onSettled, }: UseSaveFormProps$1) => () => void;
14
+ declare const UseOnChangeFormHandler: ({ data, onSuccess, onError, onSettled, }: UseSaveFormProps$1) => Promise<any>;
15
15
 
16
16
  interface UseSaveFormProps {
17
17
  data: {
18
18
  context: any;
19
19
  model: string;
20
- specification: any;
21
- id: number | string;
20
+ specification?: any;
21
+ ids: any;
22
+ records: any;
22
23
  };
23
24
  onSuccess?: (res: any) => void;
24
25
  onError?: (err: any) => void;
package/dist/form.d.ts CHANGED
@@ -3,22 +3,23 @@ interface UseSaveFormProps$1 {
3
3
  context: any;
4
4
  model: string;
5
5
  specification: any;
6
- id: any;
7
- nameField: any;
8
- object: any;
6
+ ids: any;
7
+ nameField?: any;
8
+ object?: any;
9
9
  };
10
10
  onSuccess?: (res: any) => void;
11
11
  onError?: (err: any) => void;
12
12
  onSettled?: (err: any) => void;
13
13
  }
14
- declare const UseOnChangeFormHandler: ({ data, onSuccess, onError, onSettled, }: UseSaveFormProps$1) => () => void;
14
+ declare const UseOnChangeFormHandler: ({ data, onSuccess, onError, onSettled, }: UseSaveFormProps$1) => Promise<any>;
15
15
 
16
16
  interface UseSaveFormProps {
17
17
  data: {
18
18
  context: any;
19
19
  model: string;
20
- specification: any;
21
- id: number | string;
20
+ specification?: any;
21
+ ids: any;
22
+ records: any;
22
23
  };
23
24
  onSuccess?: (res: any) => void;
24
25
  onError?: (err: any) => void;
package/dist/form.js CHANGED
@@ -26,7 +26,7 @@ __export(form_exports, {
26
26
  });
27
27
  module.exports = __toCommonJS(form_exports);
28
28
 
29
- // src/widget/form/use-on-change-form.tsx
29
+ // src/widget/form/use-on-change-form.ts
30
30
  var import_interface_logic = require("@fctc/interface-logic");
31
31
  var UseOnChangeFormHandler = ({
32
32
  data,
@@ -35,27 +35,32 @@ var UseOnChangeFormHandler = ({
35
35
  onSettled
36
36
  }) => {
37
37
  const fetchOnchange = (0, import_interface_logic.useOnChangeForm)();
38
- const handleOnChangeForm = () => {
38
+ return new Promise((resolve, reject) => {
39
39
  fetchOnchange.mutate(
40
40
  {
41
- ids: data.id ? data.id : [],
41
+ ids: data.ids ? data.ids : [],
42
42
  model: data.model,
43
43
  specification: data.specification,
44
44
  context: data.context,
45
45
  object: data.object,
46
- fieldChange: [data.nameField]
46
+ fieldChange: data.nameField
47
47
  },
48
48
  {
49
- onSuccess,
50
- onError,
49
+ onSuccess: (res) => {
50
+ onSuccess?.(res);
51
+ resolve(res);
52
+ },
53
+ onError: (err) => {
54
+ onError?.(err);
55
+ reject(err);
56
+ },
51
57
  onSettled
52
58
  }
53
59
  );
54
- };
55
- return handleOnChangeForm;
60
+ });
56
61
  };
57
62
 
58
- // src/widget/form/use-save-form.tsx
63
+ // src/widget/form/use-save-form.ts
59
64
  var import_interface_logic2 = require("@fctc/interface-logic");
60
65
  var useSaveFormHandler = ({
61
66
  data,
@@ -67,9 +72,9 @@ var useSaveFormHandler = ({
67
72
  const handleSaveForm = () => {
68
73
  fetchSave.mutate(
69
74
  {
70
- ids: data.id ? [data.id] : [],
75
+ ids: data.ids ? [data.ids] : [],
71
76
  model: data.model,
72
- data,
77
+ data: data.records,
73
78
  specification: data.specification,
74
79
  context: data.context
75
80
  },
@@ -83,7 +88,7 @@ var useSaveFormHandler = ({
83
88
  return handleSaveForm;
84
89
  };
85
90
 
86
- // src/widget/form/use-remove-row.tsx
91
+ // src/widget/form/use-remove-row.ts
87
92
  var import_interface_logic3 = require("@fctc/interface-logic");
88
93
  var useRemoveRowHandler = ({
89
94
  data,
package/dist/form.mjs CHANGED
@@ -1,4 +1,4 @@
1
- // src/widget/form/use-on-change-form.tsx
1
+ // src/widget/form/use-on-change-form.ts
2
2
  import { useOnChangeForm } from "@fctc/interface-logic";
3
3
  var UseOnChangeFormHandler = ({
4
4
  data,
@@ -7,27 +7,32 @@ var UseOnChangeFormHandler = ({
7
7
  onSettled
8
8
  }) => {
9
9
  const fetchOnchange = useOnChangeForm();
10
- const handleOnChangeForm = () => {
10
+ return new Promise((resolve, reject) => {
11
11
  fetchOnchange.mutate(
12
12
  {
13
- ids: data.id ? data.id : [],
13
+ ids: data.ids ? data.ids : [],
14
14
  model: data.model,
15
15
  specification: data.specification,
16
16
  context: data.context,
17
17
  object: data.object,
18
- fieldChange: [data.nameField]
18
+ fieldChange: data.nameField
19
19
  },
20
20
  {
21
- onSuccess,
22
- onError,
21
+ onSuccess: (res) => {
22
+ onSuccess?.(res);
23
+ resolve(res);
24
+ },
25
+ onError: (err) => {
26
+ onError?.(err);
27
+ reject(err);
28
+ },
23
29
  onSettled
24
30
  }
25
31
  );
26
- };
27
- return handleOnChangeForm;
32
+ });
28
33
  };
29
34
 
30
- // src/widget/form/use-save-form.tsx
35
+ // src/widget/form/use-save-form.ts
31
36
  import { useSave } from "@fctc/interface-logic";
32
37
  var useSaveFormHandler = ({
33
38
  data,
@@ -39,9 +44,9 @@ var useSaveFormHandler = ({
39
44
  const handleSaveForm = () => {
40
45
  fetchSave.mutate(
41
46
  {
42
- ids: data.id ? [data.id] : [],
47
+ ids: data.ids ? [data.ids] : [],
43
48
  model: data.model,
44
- data,
49
+ data: data.records,
45
50
  specification: data.specification,
46
51
  context: data.context
47
52
  },
@@ -55,7 +60,7 @@ var useSaveFormHandler = ({
55
60
  return handleSaveForm;
56
61
  };
57
62
 
58
- // src/widget/form/use-remove-row.tsx
63
+ // src/widget/form/use-remove-row.ts
59
64
  import { useRemoveRow } from "@fctc/interface-logic";
60
65
  var useRemoveRowHandler = ({
61
66
  data,
package/dist/index.d.mts CHANGED
@@ -1,3 +1,5 @@
1
1
  export { useArchieveHandler, useDuplicateRowHandler, useExportExcelHandler, useGetFieldExportHandler } from './action.mjs';
2
2
  export { UseOnChangeFormHandler, useRemoveRowHandler, useSaveFormHandler } from './form.mjs';
3
3
  export { useTableHandler } from './table.mjs';
4
+ export { useClickOutside } from './common.mjs';
5
+ import 'react';
package/dist/index.d.ts CHANGED
@@ -1,3 +1,5 @@
1
1
  export { useArchieveHandler, useDuplicateRowHandler, useExportExcelHandler, useGetFieldExportHandler } from './action.js';
2
2
  export { UseOnChangeFormHandler, useRemoveRowHandler, useSaveFormHandler } from './form.js';
3
3
  export { useTableHandler } from './table.js';
4
+ export { useClickOutside } from './common.js';
5
+ import 'react';
package/dist/index.js CHANGED
@@ -22,6 +22,7 @@ var index_exports = {};
22
22
  __export(index_exports, {
23
23
  UseOnChangeFormHandler: () => UseOnChangeFormHandler,
24
24
  useArchieveHandler: () => useArchieveHandler,
25
+ useClickOutside: () => useClickOutside,
25
26
  useDuplicateRowHandler: () => useDuplicateRowHandler,
26
27
  useExportExcelHandler: () => useExportExcelHandler,
27
28
  useGetFieldExportHandler: () => useGetFieldExportHandler,
@@ -31,7 +32,7 @@ __export(index_exports, {
31
32
  });
32
33
  module.exports = __toCommonJS(index_exports);
33
34
 
34
- // src/action/use-archieve-row.tsx
35
+ // src/action/use-archieve-row.ts
35
36
  var import_interface_logic = require("@fctc/interface-logic");
36
37
  var useArchieveHandler = ({
37
38
  data,
@@ -58,7 +59,7 @@ var useArchieveHandler = ({
58
59
  return handleDuplicateRecord;
59
60
  };
60
61
 
61
- // src/action/use-duplicate-row.tsx
62
+ // src/action/use-duplicate-row.ts
62
63
  var import_interface_logic2 = require("@fctc/interface-logic");
63
64
  var useDuplicateRowHandler = ({
64
65
  data,
@@ -84,7 +85,7 @@ var useDuplicateRowHandler = ({
84
85
  return handleDuplicateRecord;
85
86
  };
86
87
 
87
- // src/action/use-get-field-export.tsx
88
+ // src/action/use-get-field-export.ts
88
89
  var import_interface_logic3 = require("@fctc/interface-logic");
89
90
  var useGetFieldExportHandler = ({
90
91
  data,
@@ -117,7 +118,7 @@ var useGetFieldExportHandler = ({
117
118
  return handleGetFieldExport;
118
119
  };
119
120
 
120
- // src/action/use-export-excel.tsx
121
+ // src/action/use-export-excel.ts
121
122
  var import_interface_logic4 = require("@fctc/interface-logic");
122
123
  var useExportExcelHandler = ({
123
124
  data,
@@ -148,7 +149,7 @@ var useExportExcelHandler = ({
148
149
  return handleExport;
149
150
  };
150
151
 
151
- // src/widget/form/use-on-change-form.tsx
152
+ // src/widget/form/use-on-change-form.ts
152
153
  var import_interface_logic5 = require("@fctc/interface-logic");
153
154
  var UseOnChangeFormHandler = ({
154
155
  data,
@@ -157,27 +158,32 @@ var UseOnChangeFormHandler = ({
157
158
  onSettled
158
159
  }) => {
159
160
  const fetchOnchange = (0, import_interface_logic5.useOnChangeForm)();
160
- const handleOnChangeForm = () => {
161
+ return new Promise((resolve, reject) => {
161
162
  fetchOnchange.mutate(
162
163
  {
163
- ids: data.id ? data.id : [],
164
+ ids: data.ids ? data.ids : [],
164
165
  model: data.model,
165
166
  specification: data.specification,
166
167
  context: data.context,
167
168
  object: data.object,
168
- fieldChange: [data.nameField]
169
+ fieldChange: data.nameField
169
170
  },
170
171
  {
171
- onSuccess,
172
- onError,
172
+ onSuccess: (res) => {
173
+ onSuccess?.(res);
174
+ resolve(res);
175
+ },
176
+ onError: (err) => {
177
+ onError?.(err);
178
+ reject(err);
179
+ },
173
180
  onSettled
174
181
  }
175
182
  );
176
- };
177
- return handleOnChangeForm;
183
+ });
178
184
  };
179
185
 
180
- // src/widget/form/use-save-form.tsx
186
+ // src/widget/form/use-save-form.ts
181
187
  var import_interface_logic6 = require("@fctc/interface-logic");
182
188
  var useSaveFormHandler = ({
183
189
  data,
@@ -189,9 +195,9 @@ var useSaveFormHandler = ({
189
195
  const handleSaveForm = () => {
190
196
  fetchSave.mutate(
191
197
  {
192
- ids: data.id ? [data.id] : [],
198
+ ids: data.ids ? [data.ids] : [],
193
199
  model: data.model,
194
- data,
200
+ data: data.records,
195
201
  specification: data.specification,
196
202
  context: data.context
197
203
  },
@@ -205,7 +211,7 @@ var useSaveFormHandler = ({
205
211
  return handleSaveForm;
206
212
  };
207
213
 
208
- // src/widget/form/use-remove-row.tsx
214
+ // src/widget/form/use-remove-row.ts
209
215
  var import_interface_logic7 = require("@fctc/interface-logic");
210
216
  var useRemoveRowHandler = ({
211
217
  data,
@@ -231,7 +237,7 @@ var useRemoveRowHandler = ({
231
237
  return handleRemoveRow;
232
238
  };
233
239
 
234
- // src/widget/table/use-table.tsx
240
+ // src/widget/table/use-table.ts
235
241
  var import_interface_logic8 = require("@fctc/interface-logic");
236
242
  var import_react = require("react");
237
243
  function mergeButtons(fields) {
@@ -245,20 +251,14 @@ function mergeButtons(fields) {
245
251
  }
246
252
  return others;
247
253
  }
248
- var useTableHandler = ({
249
- fields,
250
- data,
251
- dataModel,
252
- context,
253
- typeTable
254
- }) => {
255
- const [rows, setRows] = (0, import_react.useState)(data || []);
254
+ var useTableHandler = ({ data }) => {
255
+ const [rows, setRows] = (0, import_react.useState)(data.records || []);
256
256
  const [columns, setColumns] = (0, import_react.useState)([]);
257
- const dataModelFields = fields?.map((field) => {
257
+ const dataModelFields = data.fields?.map((field) => {
258
258
  return {
259
- ...dataModel?.[field?.name],
259
+ ...data.dataModel?.[field?.name],
260
260
  ...field,
261
- string: field?.string || dataModel?.[field?.name]?.string
261
+ string: field?.string || data.dataModel?.[field?.name]?.string
262
262
  };
263
263
  });
264
264
  const mergeFields = mergeButtons(dataModelFields);
@@ -271,7 +271,7 @@ var useTableHandler = ({
271
271
  if (item[field] && typeof item[field] === "object" && item[field].display_name) {
272
272
  transformedItem[field] = item[field];
273
273
  } else if (Array.isArray(item[field]) && item[field].length > 0) {
274
- if (typeTable === "group" && item[field]?.length === 2 && typeof item[field]?.[1] === "string") {
274
+ if (data.typeTable === "group" && item[field]?.length === 2 && typeof item[field]?.[1] === "string") {
275
275
  transformedItem["string"] = item[field]?.[1];
276
276
  }
277
277
  transformedItem[field] = item[field];
@@ -282,13 +282,13 @@ var useTableHandler = ({
282
282
  });
283
283
  };
284
284
  (0, import_react.useEffect)(() => {
285
- setRows(transformData(data || null));
286
- }, [data]);
285
+ setRows(transformData(data.records || null));
286
+ }, [data.records]);
287
287
  const handleGetColumns = () => {
288
288
  let cols = [];
289
289
  try {
290
290
  cols = mergeFields?.filter((item) => {
291
- return item?.widget !== "details_Receive_money" && !(item?.column_invisible ? import_interface_logic8.domainHelper.matchDomains(context, item?.column_invisible) : item?.invisible ? import_interface_logic8.domainHelper.matchDomains(context, item?.invisible) : false);
291
+ return item?.widget !== "details_Receive_money" && !(item?.column_invisible ? import_interface_logic8.domainHelper.matchDomains(data.context, item?.column_invisible) : item?.invisible ? import_interface_logic8.domainHelper.matchDomains(data.context, item?.invisible) : false);
292
292
  })?.map((field) => {
293
293
  return {
294
294
  name: field?.name,
@@ -305,7 +305,7 @@ var useTableHandler = ({
305
305
  (0, import_react.useEffect)(() => {
306
306
  const columns2 = handleGetColumns();
307
307
  setColumns(columns2);
308
- }, [data]);
308
+ }, [data.records]);
309
309
  const onToggleColumnOptional = (item) => {
310
310
  const tempColumn = [...columns]?.map((val) => {
311
311
  if (item?.name === val?.name) {
@@ -322,13 +322,45 @@ var useTableHandler = ({
322
322
  rows,
323
323
  columns,
324
324
  onToggleColumnOptional,
325
- typeTable
325
+ typeTable: data.typeTable
326
326
  };
327
327
  };
328
+
329
+ // src/common/use-click-outside.ts
330
+ var import_react2 = require("react");
331
+ var DEFAULT_EVENTS = ["mousedown", "touchstart"];
332
+ var useClickOutside = ({
333
+ handler,
334
+ events = DEFAULT_EVENTS,
335
+ nodes = [],
336
+ refs
337
+ }) => {
338
+ const ref = (0, import_react2.useRef)(null);
339
+ (0, import_react2.useEffect)(() => {
340
+ const listener = (event) => {
341
+ const { target } = event;
342
+ if (refs && refs?.length > 0 && refs?.some((r) => r.current?.contains(target))) {
343
+ return;
344
+ }
345
+ if (!(target instanceof HTMLElement)) return;
346
+ const shouldIgnore = target.hasAttribute("data-ignore-outside-clicks") || !document.body.contains(target) && target.tagName !== "HTML";
347
+ const shouldTrigger = nodes.length > 0 ? nodes.every((node) => node && !event.composedPath().includes(node)) : ref.current && !ref.current.contains(target);
348
+ if (shouldTrigger && !shouldIgnore) {
349
+ handler(event);
350
+ }
351
+ };
352
+ events.forEach((event) => document.addEventListener(event, listener));
353
+ return () => {
354
+ events.forEach((event) => document.removeEventListener(event, listener));
355
+ };
356
+ }, [handler, nodes, events]);
357
+ return ref;
358
+ };
328
359
  // Annotate the CommonJS export names for ESM import in node:
329
360
  0 && (module.exports = {
330
361
  UseOnChangeFormHandler,
331
362
  useArchieveHandler,
363
+ useClickOutside,
332
364
  useDuplicateRowHandler,
333
365
  useExportExcelHandler,
334
366
  useGetFieldExportHandler,
package/dist/index.mjs CHANGED
@@ -1,4 +1,4 @@
1
- // src/action/use-archieve-row.tsx
1
+ // src/action/use-archieve-row.ts
2
2
  import { useButton } from "@fctc/interface-logic";
3
3
  var useArchieveHandler = ({
4
4
  data,
@@ -25,7 +25,7 @@ var useArchieveHandler = ({
25
25
  return handleDuplicateRecord;
26
26
  };
27
27
 
28
- // src/action/use-duplicate-row.tsx
28
+ // src/action/use-duplicate-row.ts
29
29
  import { useDuplicateRecord } from "@fctc/interface-logic";
30
30
  var useDuplicateRowHandler = ({
31
31
  data,
@@ -51,7 +51,7 @@ var useDuplicateRowHandler = ({
51
51
  return handleDuplicateRecord;
52
52
  };
53
53
 
54
- // src/action/use-get-field-export.tsx
54
+ // src/action/use-get-field-export.ts
55
55
  import { useGetFieldExport } from "@fctc/interface-logic";
56
56
  var useGetFieldExportHandler = ({
57
57
  data,
@@ -84,7 +84,7 @@ var useGetFieldExportHandler = ({
84
84
  return handleGetFieldExport;
85
85
  };
86
86
 
87
- // src/action/use-export-excel.tsx
87
+ // src/action/use-export-excel.ts
88
88
  import { evalJSONDomain, useExportExcel } from "@fctc/interface-logic";
89
89
  var useExportExcelHandler = ({
90
90
  data,
@@ -115,7 +115,7 @@ var useExportExcelHandler = ({
115
115
  return handleExport;
116
116
  };
117
117
 
118
- // src/widget/form/use-on-change-form.tsx
118
+ // src/widget/form/use-on-change-form.ts
119
119
  import { useOnChangeForm } from "@fctc/interface-logic";
120
120
  var UseOnChangeFormHandler = ({
121
121
  data,
@@ -124,27 +124,32 @@ var UseOnChangeFormHandler = ({
124
124
  onSettled
125
125
  }) => {
126
126
  const fetchOnchange = useOnChangeForm();
127
- const handleOnChangeForm = () => {
127
+ return new Promise((resolve, reject) => {
128
128
  fetchOnchange.mutate(
129
129
  {
130
- ids: data.id ? data.id : [],
130
+ ids: data.ids ? data.ids : [],
131
131
  model: data.model,
132
132
  specification: data.specification,
133
133
  context: data.context,
134
134
  object: data.object,
135
- fieldChange: [data.nameField]
135
+ fieldChange: data.nameField
136
136
  },
137
137
  {
138
- onSuccess,
139
- onError,
138
+ onSuccess: (res) => {
139
+ onSuccess?.(res);
140
+ resolve(res);
141
+ },
142
+ onError: (err) => {
143
+ onError?.(err);
144
+ reject(err);
145
+ },
140
146
  onSettled
141
147
  }
142
148
  );
143
- };
144
- return handleOnChangeForm;
149
+ });
145
150
  };
146
151
 
147
- // src/widget/form/use-save-form.tsx
152
+ // src/widget/form/use-save-form.ts
148
153
  import { useSave } from "@fctc/interface-logic";
149
154
  var useSaveFormHandler = ({
150
155
  data,
@@ -156,9 +161,9 @@ var useSaveFormHandler = ({
156
161
  const handleSaveForm = () => {
157
162
  fetchSave.mutate(
158
163
  {
159
- ids: data.id ? [data.id] : [],
164
+ ids: data.ids ? [data.ids] : [],
160
165
  model: data.model,
161
- data,
166
+ data: data.records,
162
167
  specification: data.specification,
163
168
  context: data.context
164
169
  },
@@ -172,7 +177,7 @@ var useSaveFormHandler = ({
172
177
  return handleSaveForm;
173
178
  };
174
179
 
175
- // src/widget/form/use-remove-row.tsx
180
+ // src/widget/form/use-remove-row.ts
176
181
  import { useRemoveRow } from "@fctc/interface-logic";
177
182
  var useRemoveRowHandler = ({
178
183
  data,
@@ -198,7 +203,7 @@ var useRemoveRowHandler = ({
198
203
  return handleRemoveRow;
199
204
  };
200
205
 
201
- // src/widget/table/use-table.tsx
206
+ // src/widget/table/use-table.ts
202
207
  import { domainHelper } from "@fctc/interface-logic";
203
208
  import { useEffect, useState } from "react";
204
209
  function mergeButtons(fields) {
@@ -212,20 +217,14 @@ function mergeButtons(fields) {
212
217
  }
213
218
  return others;
214
219
  }
215
- var useTableHandler = ({
216
- fields,
217
- data,
218
- dataModel,
219
- context,
220
- typeTable
221
- }) => {
222
- const [rows, setRows] = useState(data || []);
220
+ var useTableHandler = ({ data }) => {
221
+ const [rows, setRows] = useState(data.records || []);
223
222
  const [columns, setColumns] = useState([]);
224
- const dataModelFields = fields?.map((field) => {
223
+ const dataModelFields = data.fields?.map((field) => {
225
224
  return {
226
- ...dataModel?.[field?.name],
225
+ ...data.dataModel?.[field?.name],
227
226
  ...field,
228
- string: field?.string || dataModel?.[field?.name]?.string
227
+ string: field?.string || data.dataModel?.[field?.name]?.string
229
228
  };
230
229
  });
231
230
  const mergeFields = mergeButtons(dataModelFields);
@@ -238,7 +237,7 @@ var useTableHandler = ({
238
237
  if (item[field] && typeof item[field] === "object" && item[field].display_name) {
239
238
  transformedItem[field] = item[field];
240
239
  } else if (Array.isArray(item[field]) && item[field].length > 0) {
241
- if (typeTable === "group" && item[field]?.length === 2 && typeof item[field]?.[1] === "string") {
240
+ if (data.typeTable === "group" && item[field]?.length === 2 && typeof item[field]?.[1] === "string") {
242
241
  transformedItem["string"] = item[field]?.[1];
243
242
  }
244
243
  transformedItem[field] = item[field];
@@ -249,13 +248,13 @@ var useTableHandler = ({
249
248
  });
250
249
  };
251
250
  useEffect(() => {
252
- setRows(transformData(data || null));
253
- }, [data]);
251
+ setRows(transformData(data.records || null));
252
+ }, [data.records]);
254
253
  const handleGetColumns = () => {
255
254
  let cols = [];
256
255
  try {
257
256
  cols = mergeFields?.filter((item) => {
258
- return item?.widget !== "details_Receive_money" && !(item?.column_invisible ? domainHelper.matchDomains(context, item?.column_invisible) : item?.invisible ? domainHelper.matchDomains(context, item?.invisible) : false);
257
+ return item?.widget !== "details_Receive_money" && !(item?.column_invisible ? domainHelper.matchDomains(data.context, item?.column_invisible) : item?.invisible ? domainHelper.matchDomains(data.context, item?.invisible) : false);
259
258
  })?.map((field) => {
260
259
  return {
261
260
  name: field?.name,
@@ -272,7 +271,7 @@ var useTableHandler = ({
272
271
  useEffect(() => {
273
272
  const columns2 = handleGetColumns();
274
273
  setColumns(columns2);
275
- }, [data]);
274
+ }, [data.records]);
276
275
  const onToggleColumnOptional = (item) => {
277
276
  const tempColumn = [...columns]?.map((val) => {
278
277
  if (item?.name === val?.name) {
@@ -289,12 +288,44 @@ var useTableHandler = ({
289
288
  rows,
290
289
  columns,
291
290
  onToggleColumnOptional,
292
- typeTable
291
+ typeTable: data.typeTable
293
292
  };
294
293
  };
294
+
295
+ // src/common/use-click-outside.ts
296
+ import { useEffect as useEffect2, useRef } from "react";
297
+ var DEFAULT_EVENTS = ["mousedown", "touchstart"];
298
+ var useClickOutside = ({
299
+ handler,
300
+ events = DEFAULT_EVENTS,
301
+ nodes = [],
302
+ refs
303
+ }) => {
304
+ const ref = useRef(null);
305
+ useEffect2(() => {
306
+ const listener = (event) => {
307
+ const { target } = event;
308
+ if (refs && refs?.length > 0 && refs?.some((r) => r.current?.contains(target))) {
309
+ return;
310
+ }
311
+ if (!(target instanceof HTMLElement)) return;
312
+ const shouldIgnore = target.hasAttribute("data-ignore-outside-clicks") || !document.body.contains(target) && target.tagName !== "HTML";
313
+ const shouldTrigger = nodes.length > 0 ? nodes.every((node) => node && !event.composedPath().includes(node)) : ref.current && !ref.current.contains(target);
314
+ if (shouldTrigger && !shouldIgnore) {
315
+ handler(event);
316
+ }
317
+ };
318
+ events.forEach((event) => document.addEventListener(event, listener));
319
+ return () => {
320
+ events.forEach((event) => document.removeEventListener(event, listener));
321
+ };
322
+ }, [handler, nodes, events]);
323
+ return ref;
324
+ };
295
325
  export {
296
326
  UseOnChangeFormHandler,
297
327
  useArchieveHandler,
328
+ useClickOutside,
298
329
  useDuplicateRowHandler,
299
330
  useExportExcelHandler,
300
331
  useGetFieldExportHandler,
package/dist/table.d.mts CHANGED
@@ -1,8 +1,22 @@
1
- declare const useTableHandler: ({ fields, data, dataModel, context, typeTable, }: any) => {
2
- rows: any;
1
+ interface UseTableProps {
2
+ data: {
3
+ fields: any[];
4
+ records: any[];
5
+ dataModel: {
6
+ [fieldName: string]: {
7
+ string?: string;
8
+ [key: string]: any;
9
+ };
10
+ };
11
+ context: any;
12
+ typeTable?: 'list' | 'group' | 'calendar';
13
+ };
14
+ }
15
+ declare const useTableHandler: ({ data }: UseTableProps) => {
16
+ rows: any[];
3
17
  columns: any;
4
18
  onToggleColumnOptional: (item: any) => void;
5
- typeTable: any;
19
+ typeTable: "list" | "group" | "calendar" | undefined;
6
20
  };
7
21
 
8
22
  export { useTableHandler };
package/dist/table.d.ts CHANGED
@@ -1,8 +1,22 @@
1
- declare const useTableHandler: ({ fields, data, dataModel, context, typeTable, }: any) => {
2
- rows: any;
1
+ interface UseTableProps {
2
+ data: {
3
+ fields: any[];
4
+ records: any[];
5
+ dataModel: {
6
+ [fieldName: string]: {
7
+ string?: string;
8
+ [key: string]: any;
9
+ };
10
+ };
11
+ context: any;
12
+ typeTable?: 'list' | 'group' | 'calendar';
13
+ };
14
+ }
15
+ declare const useTableHandler: ({ data }: UseTableProps) => {
16
+ rows: any[];
3
17
  columns: any;
4
18
  onToggleColumnOptional: (item: any) => void;
5
- typeTable: any;
19
+ typeTable: "list" | "group" | "calendar" | undefined;
6
20
  };
7
21
 
8
22
  export { useTableHandler };
package/dist/table.js CHANGED
@@ -24,7 +24,7 @@ __export(table_exports, {
24
24
  });
25
25
  module.exports = __toCommonJS(table_exports);
26
26
 
27
- // src/widget/table/use-table.tsx
27
+ // src/widget/table/use-table.ts
28
28
  var import_interface_logic = require("@fctc/interface-logic");
29
29
  var import_react = require("react");
30
30
  function mergeButtons(fields) {
@@ -38,20 +38,14 @@ function mergeButtons(fields) {
38
38
  }
39
39
  return others;
40
40
  }
41
- var useTableHandler = ({
42
- fields,
43
- data,
44
- dataModel,
45
- context,
46
- typeTable
47
- }) => {
48
- const [rows, setRows] = (0, import_react.useState)(data || []);
41
+ var useTableHandler = ({ data }) => {
42
+ const [rows, setRows] = (0, import_react.useState)(data.records || []);
49
43
  const [columns, setColumns] = (0, import_react.useState)([]);
50
- const dataModelFields = fields?.map((field) => {
44
+ const dataModelFields = data.fields?.map((field) => {
51
45
  return {
52
- ...dataModel?.[field?.name],
46
+ ...data.dataModel?.[field?.name],
53
47
  ...field,
54
- string: field?.string || dataModel?.[field?.name]?.string
48
+ string: field?.string || data.dataModel?.[field?.name]?.string
55
49
  };
56
50
  });
57
51
  const mergeFields = mergeButtons(dataModelFields);
@@ -64,7 +58,7 @@ var useTableHandler = ({
64
58
  if (item[field] && typeof item[field] === "object" && item[field].display_name) {
65
59
  transformedItem[field] = item[field];
66
60
  } else if (Array.isArray(item[field]) && item[field].length > 0) {
67
- if (typeTable === "group" && item[field]?.length === 2 && typeof item[field]?.[1] === "string") {
61
+ if (data.typeTable === "group" && item[field]?.length === 2 && typeof item[field]?.[1] === "string") {
68
62
  transformedItem["string"] = item[field]?.[1];
69
63
  }
70
64
  transformedItem[field] = item[field];
@@ -75,13 +69,13 @@ var useTableHandler = ({
75
69
  });
76
70
  };
77
71
  (0, import_react.useEffect)(() => {
78
- setRows(transformData(data || null));
79
- }, [data]);
72
+ setRows(transformData(data.records || null));
73
+ }, [data.records]);
80
74
  const handleGetColumns = () => {
81
75
  let cols = [];
82
76
  try {
83
77
  cols = mergeFields?.filter((item) => {
84
- return item?.widget !== "details_Receive_money" && !(item?.column_invisible ? import_interface_logic.domainHelper.matchDomains(context, item?.column_invisible) : item?.invisible ? import_interface_logic.domainHelper.matchDomains(context, item?.invisible) : false);
78
+ return item?.widget !== "details_Receive_money" && !(item?.column_invisible ? import_interface_logic.domainHelper.matchDomains(data.context, item?.column_invisible) : item?.invisible ? import_interface_logic.domainHelper.matchDomains(data.context, item?.invisible) : false);
85
79
  })?.map((field) => {
86
80
  return {
87
81
  name: field?.name,
@@ -98,7 +92,7 @@ var useTableHandler = ({
98
92
  (0, import_react.useEffect)(() => {
99
93
  const columns2 = handleGetColumns();
100
94
  setColumns(columns2);
101
- }, [data]);
95
+ }, [data.records]);
102
96
  const onToggleColumnOptional = (item) => {
103
97
  const tempColumn = [...columns]?.map((val) => {
104
98
  if (item?.name === val?.name) {
@@ -115,7 +109,7 @@ var useTableHandler = ({
115
109
  rows,
116
110
  columns,
117
111
  onToggleColumnOptional,
118
- typeTable
112
+ typeTable: data.typeTable
119
113
  };
120
114
  };
121
115
  // Annotate the CommonJS export names for ESM import in node:
package/dist/table.mjs CHANGED
@@ -1,4 +1,4 @@
1
- // src/widget/table/use-table.tsx
1
+ // src/widget/table/use-table.ts
2
2
  import { domainHelper } from "@fctc/interface-logic";
3
3
  import { useEffect, useState } from "react";
4
4
  function mergeButtons(fields) {
@@ -12,20 +12,14 @@ function mergeButtons(fields) {
12
12
  }
13
13
  return others;
14
14
  }
15
- var useTableHandler = ({
16
- fields,
17
- data,
18
- dataModel,
19
- context,
20
- typeTable
21
- }) => {
22
- const [rows, setRows] = useState(data || []);
15
+ var useTableHandler = ({ data }) => {
16
+ const [rows, setRows] = useState(data.records || []);
23
17
  const [columns, setColumns] = useState([]);
24
- const dataModelFields = fields?.map((field) => {
18
+ const dataModelFields = data.fields?.map((field) => {
25
19
  return {
26
- ...dataModel?.[field?.name],
20
+ ...data.dataModel?.[field?.name],
27
21
  ...field,
28
- string: field?.string || dataModel?.[field?.name]?.string
22
+ string: field?.string || data.dataModel?.[field?.name]?.string
29
23
  };
30
24
  });
31
25
  const mergeFields = mergeButtons(dataModelFields);
@@ -38,7 +32,7 @@ var useTableHandler = ({
38
32
  if (item[field] && typeof item[field] === "object" && item[field].display_name) {
39
33
  transformedItem[field] = item[field];
40
34
  } else if (Array.isArray(item[field]) && item[field].length > 0) {
41
- if (typeTable === "group" && item[field]?.length === 2 && typeof item[field]?.[1] === "string") {
35
+ if (data.typeTable === "group" && item[field]?.length === 2 && typeof item[field]?.[1] === "string") {
42
36
  transformedItem["string"] = item[field]?.[1];
43
37
  }
44
38
  transformedItem[field] = item[field];
@@ -49,13 +43,13 @@ var useTableHandler = ({
49
43
  });
50
44
  };
51
45
  useEffect(() => {
52
- setRows(transformData(data || null));
53
- }, [data]);
46
+ setRows(transformData(data.records || null));
47
+ }, [data.records]);
54
48
  const handleGetColumns = () => {
55
49
  let cols = [];
56
50
  try {
57
51
  cols = mergeFields?.filter((item) => {
58
- return item?.widget !== "details_Receive_money" && !(item?.column_invisible ? domainHelper.matchDomains(context, item?.column_invisible) : item?.invisible ? domainHelper.matchDomains(context, item?.invisible) : false);
52
+ return item?.widget !== "details_Receive_money" && !(item?.column_invisible ? domainHelper.matchDomains(data.context, item?.column_invisible) : item?.invisible ? domainHelper.matchDomains(data.context, item?.invisible) : false);
59
53
  })?.map((field) => {
60
54
  return {
61
55
  name: field?.name,
@@ -72,7 +66,7 @@ var useTableHandler = ({
72
66
  useEffect(() => {
73
67
  const columns2 = handleGetColumns();
74
68
  setColumns(columns2);
75
- }, [data]);
69
+ }, [data.records]);
76
70
  const onToggleColumnOptional = (item) => {
77
71
  const tempColumn = [...columns]?.map((val) => {
78
72
  if (item?.name === val?.name) {
@@ -89,7 +83,7 @@ var useTableHandler = ({
89
83
  rows,
90
84
  columns,
91
85
  onToggleColumnOptional,
92
- typeTable
86
+ typeTable: data.typeTable
93
87
  };
94
88
  };
95
89
  export {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fctc/widget-logic",
3
- "version": "1.1.0",
3
+ "version": "1.1.1",
4
4
  "main": "dist/index.cjs",
5
5
  "module": "dist/index.mjs",
6
6
  "types": "dist/index.d.ts",
@@ -24,6 +24,11 @@
24
24
  "types": "./dist/table.d.ts",
25
25
  "import": "./dist/table.mjs",
26
26
  "require": "./dist/table.cjs"
27
+ },
28
+ "./common": {
29
+ "types": "./dist/common.d.ts",
30
+ "import": "./dist/common.mjs",
31
+ "require": "./dist/common.cjs"
27
32
  }
28
33
  },
29
34
  "files": [