@fctc/widget-logic 1.1.0 → 1.3.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/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.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,
@@ -55,7 +55,7 @@ var UseOnChangeFormHandler = ({
55
55
  return handleOnChangeForm;
56
56
  };
57
57
 
58
- // src/widget/form/use-save-form.tsx
58
+ // src/widget/form/use-save-form.ts
59
59
  var import_interface_logic2 = require("@fctc/interface-logic");
60
60
  var useSaveFormHandler = ({
61
61
  data,
@@ -83,7 +83,7 @@ var useSaveFormHandler = ({
83
83
  return handleSaveForm;
84
84
  };
85
85
 
86
- // src/widget/form/use-remove-row.tsx
86
+ // src/widget/form/use-remove-row.ts
87
87
  var import_interface_logic3 = require("@fctc/interface-logic");
88
88
  var useRemoveRowHandler = ({
89
89
  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,
@@ -27,7 +27,7 @@ var UseOnChangeFormHandler = ({
27
27
  return handleOnChangeForm;
28
28
  };
29
29
 
30
- // src/widget/form/use-save-form.tsx
30
+ // src/widget/form/use-save-form.ts
31
31
  import { useSave } from "@fctc/interface-logic";
32
32
  var useSaveFormHandler = ({
33
33
  data,
@@ -55,7 +55,7 @@ var useSaveFormHandler = ({
55
55
  return handleSaveForm;
56
56
  };
57
57
 
58
- // src/widget/form/use-remove-row.tsx
58
+ // src/widget/form/use-remove-row.ts
59
59
  import { useRemoveRow } from "@fctc/interface-logic";
60
60
  var useRemoveRowHandler = ({
61
61
  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,
@@ -177,7 +178,7 @@ var UseOnChangeFormHandler = ({
177
178
  return handleOnChangeForm;
178
179
  };
179
180
 
180
- // src/widget/form/use-save-form.tsx
181
+ // src/widget/form/use-save-form.ts
181
182
  var import_interface_logic6 = require("@fctc/interface-logic");
182
183
  var useSaveFormHandler = ({
183
184
  data,
@@ -205,7 +206,7 @@ var useSaveFormHandler = ({
205
206
  return handleSaveForm;
206
207
  };
207
208
 
208
- // src/widget/form/use-remove-row.tsx
209
+ // src/widget/form/use-remove-row.ts
209
210
  var import_interface_logic7 = require("@fctc/interface-logic");
210
211
  var useRemoveRowHandler = ({
211
212
  data,
@@ -231,7 +232,7 @@ var useRemoveRowHandler = ({
231
232
  return handleRemoveRow;
232
233
  };
233
234
 
234
- // src/widget/table/use-table.tsx
235
+ // src/widget/table/use-table.ts
235
236
  var import_interface_logic8 = require("@fctc/interface-logic");
236
237
  var import_react = require("react");
237
238
  function mergeButtons(fields) {
@@ -245,20 +246,14 @@ function mergeButtons(fields) {
245
246
  }
246
247
  return others;
247
248
  }
248
- var useTableHandler = ({
249
- fields,
250
- data,
251
- dataModel,
252
- context,
253
- typeTable
254
- }) => {
249
+ var useTableHandler = ({ data }) => {
255
250
  const [rows, setRows] = (0, import_react.useState)(data || []);
256
251
  const [columns, setColumns] = (0, import_react.useState)([]);
257
- const dataModelFields = fields?.map((field) => {
252
+ const dataModelFields = data.fields?.map((field) => {
258
253
  return {
259
- ...dataModel?.[field?.name],
254
+ ...data.dataModel?.[field?.name],
260
255
  ...field,
261
- string: field?.string || dataModel?.[field?.name]?.string
256
+ string: field?.string || data.dataModel?.[field?.name]?.string
262
257
  };
263
258
  });
264
259
  const mergeFields = mergeButtons(dataModelFields);
@@ -271,7 +266,7 @@ var useTableHandler = ({
271
266
  if (item[field] && typeof item[field] === "object" && item[field].display_name) {
272
267
  transformedItem[field] = item[field];
273
268
  } else if (Array.isArray(item[field]) && item[field].length > 0) {
274
- if (typeTable === "group" && item[field]?.length === 2 && typeof item[field]?.[1] === "string") {
269
+ if (data.typeTable === "group" && item[field]?.length === 2 && typeof item[field]?.[1] === "string") {
275
270
  transformedItem["string"] = item[field]?.[1];
276
271
  }
277
272
  transformedItem[field] = item[field];
@@ -288,7 +283,7 @@ var useTableHandler = ({
288
283
  let cols = [];
289
284
  try {
290
285
  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);
286
+ 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
287
  })?.map((field) => {
293
288
  return {
294
289
  name: field?.name,
@@ -322,13 +317,45 @@ var useTableHandler = ({
322
317
  rows,
323
318
  columns,
324
319
  onToggleColumnOptional,
325
- typeTable
320
+ typeTable: data.typeTable
326
321
  };
327
322
  };
323
+
324
+ // src/common/use-click-outside.ts
325
+ var import_react2 = require("react");
326
+ var DEFAULT_EVENTS = ["mousedown", "touchstart"];
327
+ var useClickOutside = ({
328
+ handler,
329
+ events = DEFAULT_EVENTS,
330
+ nodes = [],
331
+ refs
332
+ }) => {
333
+ const ref = (0, import_react2.useRef)(null);
334
+ (0, import_react2.useEffect)(() => {
335
+ const listener = (event) => {
336
+ const { target } = event;
337
+ if (refs && refs?.length > 0 && refs?.some((r) => r.current?.contains(target))) {
338
+ return;
339
+ }
340
+ if (!(target instanceof HTMLElement)) return;
341
+ const shouldIgnore = target.hasAttribute("data-ignore-outside-clicks") || !document.body.contains(target) && target.tagName !== "HTML";
342
+ const shouldTrigger = nodes.length > 0 ? nodes.every((node) => node && !event.composedPath().includes(node)) : ref.current && !ref.current.contains(target);
343
+ if (shouldTrigger && !shouldIgnore) {
344
+ handler(event);
345
+ }
346
+ };
347
+ events.forEach((event) => document.addEventListener(event, listener));
348
+ return () => {
349
+ events.forEach((event) => document.removeEventListener(event, listener));
350
+ };
351
+ }, [handler, nodes, events]);
352
+ return ref;
353
+ };
328
354
  // Annotate the CommonJS export names for ESM import in node:
329
355
  0 && (module.exports = {
330
356
  UseOnChangeFormHandler,
331
357
  useArchieveHandler,
358
+ useClickOutside,
332
359
  useDuplicateRowHandler,
333
360
  useExportExcelHandler,
334
361
  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,
@@ -144,7 +144,7 @@ var UseOnChangeFormHandler = ({
144
144
  return handleOnChangeForm;
145
145
  };
146
146
 
147
- // src/widget/form/use-save-form.tsx
147
+ // src/widget/form/use-save-form.ts
148
148
  import { useSave } from "@fctc/interface-logic";
149
149
  var useSaveFormHandler = ({
150
150
  data,
@@ -172,7 +172,7 @@ var useSaveFormHandler = ({
172
172
  return handleSaveForm;
173
173
  };
174
174
 
175
- // src/widget/form/use-remove-row.tsx
175
+ // src/widget/form/use-remove-row.ts
176
176
  import { useRemoveRow } from "@fctc/interface-logic";
177
177
  var useRemoveRowHandler = ({
178
178
  data,
@@ -198,7 +198,7 @@ var useRemoveRowHandler = ({
198
198
  return handleRemoveRow;
199
199
  };
200
200
 
201
- // src/widget/table/use-table.tsx
201
+ // src/widget/table/use-table.ts
202
202
  import { domainHelper } from "@fctc/interface-logic";
203
203
  import { useEffect, useState } from "react";
204
204
  function mergeButtons(fields) {
@@ -212,20 +212,14 @@ function mergeButtons(fields) {
212
212
  }
213
213
  return others;
214
214
  }
215
- var useTableHandler = ({
216
- fields,
217
- data,
218
- dataModel,
219
- context,
220
- typeTable
221
- }) => {
215
+ var useTableHandler = ({ data }) => {
222
216
  const [rows, setRows] = useState(data || []);
223
217
  const [columns, setColumns] = useState([]);
224
- const dataModelFields = fields?.map((field) => {
218
+ const dataModelFields = data.fields?.map((field) => {
225
219
  return {
226
- ...dataModel?.[field?.name],
220
+ ...data.dataModel?.[field?.name],
227
221
  ...field,
228
- string: field?.string || dataModel?.[field?.name]?.string
222
+ string: field?.string || data.dataModel?.[field?.name]?.string
229
223
  };
230
224
  });
231
225
  const mergeFields = mergeButtons(dataModelFields);
@@ -238,7 +232,7 @@ var useTableHandler = ({
238
232
  if (item[field] && typeof item[field] === "object" && item[field].display_name) {
239
233
  transformedItem[field] = item[field];
240
234
  } else if (Array.isArray(item[field]) && item[field].length > 0) {
241
- if (typeTable === "group" && item[field]?.length === 2 && typeof item[field]?.[1] === "string") {
235
+ if (data.typeTable === "group" && item[field]?.length === 2 && typeof item[field]?.[1] === "string") {
242
236
  transformedItem["string"] = item[field]?.[1];
243
237
  }
244
238
  transformedItem[field] = item[field];
@@ -255,7 +249,7 @@ var useTableHandler = ({
255
249
  let cols = [];
256
250
  try {
257
251
  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);
252
+ 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
253
  })?.map((field) => {
260
254
  return {
261
255
  name: field?.name,
@@ -289,12 +283,44 @@ var useTableHandler = ({
289
283
  rows,
290
284
  columns,
291
285
  onToggleColumnOptional,
292
- typeTable
286
+ typeTable: data.typeTable
293
287
  };
294
288
  };
289
+
290
+ // src/common/use-click-outside.ts
291
+ import { useEffect as useEffect2, useRef } from "react";
292
+ var DEFAULT_EVENTS = ["mousedown", "touchstart"];
293
+ var useClickOutside = ({
294
+ handler,
295
+ events = DEFAULT_EVENTS,
296
+ nodes = [],
297
+ refs
298
+ }) => {
299
+ const ref = useRef(null);
300
+ useEffect2(() => {
301
+ const listener = (event) => {
302
+ const { target } = event;
303
+ if (refs && refs?.length > 0 && refs?.some((r) => r.current?.contains(target))) {
304
+ return;
305
+ }
306
+ if (!(target instanceof HTMLElement)) return;
307
+ const shouldIgnore = target.hasAttribute("data-ignore-outside-clicks") || !document.body.contains(target) && target.tagName !== "HTML";
308
+ const shouldTrigger = nodes.length > 0 ? nodes.every((node) => node && !event.composedPath().includes(node)) : ref.current && !ref.current.contains(target);
309
+ if (shouldTrigger && !shouldIgnore) {
310
+ handler(event);
311
+ }
312
+ };
313
+ events.forEach((event) => document.addEventListener(event, listener));
314
+ return () => {
315
+ events.forEach((event) => document.removeEventListener(event, listener));
316
+ };
317
+ }, [handler, nodes, events]);
318
+ return ref;
319
+ };
295
320
  export {
296
321
  UseOnChangeFormHandler,
297
322
  useArchieveHandler,
323
+ useClickOutside,
298
324
  useDuplicateRowHandler,
299
325
  useExportExcelHandler,
300
326
  useGetFieldExportHandler,
package/dist/table.d.mts CHANGED
@@ -1,8 +1,33 @@
1
- declare const useTableHandler: ({ fields, data, dataModel, context, typeTable, }: any) => {
2
- rows: any;
1
+ interface UseTableProps {
2
+ data: {
3
+ fields: any[];
4
+ data: 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: {
17
+ fields: any[];
18
+ data: any[];
19
+ dataModel: {
20
+ [fieldName: string]: {
21
+ string?: string;
22
+ [key: string]: any;
23
+ };
24
+ };
25
+ context: any;
26
+ typeTable?: "list" | "group" | "calendar";
27
+ };
3
28
  columns: any;
4
29
  onToggleColumnOptional: (item: any) => void;
5
- typeTable: any;
30
+ typeTable: "list" | "group" | "calendar" | undefined;
6
31
  };
7
32
 
8
33
  export { useTableHandler };
package/dist/table.d.ts CHANGED
@@ -1,8 +1,33 @@
1
- declare const useTableHandler: ({ fields, data, dataModel, context, typeTable, }: any) => {
2
- rows: any;
1
+ interface UseTableProps {
2
+ data: {
3
+ fields: any[];
4
+ data: 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: {
17
+ fields: any[];
18
+ data: any[];
19
+ dataModel: {
20
+ [fieldName: string]: {
21
+ string?: string;
22
+ [key: string]: any;
23
+ };
24
+ };
25
+ context: any;
26
+ typeTable?: "list" | "group" | "calendar";
27
+ };
3
28
  columns: any;
4
29
  onToggleColumnOptional: (item: any) => void;
5
- typeTable: any;
30
+ typeTable: "list" | "group" | "calendar" | undefined;
6
31
  };
7
32
 
8
33
  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
- }) => {
41
+ var useTableHandler = ({ data }) => {
48
42
  const [rows, setRows] = (0, import_react.useState)(data || []);
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];
@@ -81,7 +75,7 @@ var useTableHandler = ({
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,
@@ -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
- }) => {
15
+ var useTableHandler = ({ data }) => {
22
16
  const [rows, setRows] = useState(data || []);
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];
@@ -55,7 +49,7 @@ var useTableHandler = ({
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,
@@ -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.3.0",
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": [