@fctc/widget-logic 2.3.6 → 2.3.7

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/hooks.mjs CHANGED
@@ -131,24 +131,10 @@ var useDetail = (accessToken, sub) => {
131
131
  };
132
132
 
133
133
  // src/hooks/core/use-list-data.ts
134
- import { useMemo as useMemo3, useState as useState3 } from "react";
135
-
136
- // src/utils/function.ts
137
- import {
138
- useCallback,
139
- useEffect as useEffect3,
140
- useMemo as useMemo2,
141
- useReducer,
142
- useRef,
143
- useState as useState2
144
- } from "react";
145
-
146
- // src/store.ts
147
- var store_exports = {};
148
- __reExport(store_exports, store_star);
149
- import * as store_star from "@fctc/interface-logic/store";
134
+ import { useMemo as useMemo2, useState as useState2 } from "react";
150
135
 
151
136
  // src/utils/function.ts
137
+ import { useCallback, useEffect as useEffect3, useReducer } from "react";
152
138
  var countSum = (data, field) => {
153
139
  if (!data || !field) return 0;
154
140
  return data.reduce(
@@ -167,91 +153,6 @@ function mergeButtons(fields) {
167
153
  }
168
154
  return others;
169
155
  }
170
- function isElementVisible(el) {
171
- const style = window.getComputedStyle(el);
172
- return style.display !== "none" && style.visibility !== "hidden" && style.opacity !== "0";
173
- }
174
- function arraysAreEqual(a, b) {
175
- if (a.length !== b.length) return false;
176
- const setA = new Set(a);
177
- const setB = new Set(b);
178
- if (setA.size !== setB.size) return false;
179
- for (const val of setA) {
180
- if (!setB.has(val)) return false;
181
- }
182
- return true;
183
- }
184
- function useGetRowIds(tableRef) {
185
- const [rowIds, setRowIds] = useState2([]);
186
- const lastRowIdsRef = useRef([]);
187
- const updateVisibleRowIds = useCallback(() => {
188
- const table = tableRef?.current;
189
- if (!table) return;
190
- const rows = table.querySelectorAll("tr[data-row-id]");
191
- const ids = [];
192
- rows.forEach((row) => {
193
- const el = row;
194
- if (isElementVisible(el)) {
195
- const id = el.getAttribute("data-row-id");
196
- if (id) ids.push(id);
197
- }
198
- });
199
- const uniqueIds = Array.from(new Set(ids));
200
- if (!arraysAreEqual(lastRowIdsRef.current, uniqueIds)) {
201
- lastRowIdsRef.current = uniqueIds;
202
- setRowIds(uniqueIds);
203
- }
204
- }, [tableRef]);
205
- useEffect3(() => {
206
- const table = tableRef?.current;
207
- if (!table) return;
208
- const observer = new MutationObserver(() => {
209
- updateVisibleRowIds();
210
- });
211
- observer.observe(table, {
212
- childList: true,
213
- subtree: true,
214
- attributes: true,
215
- attributeFilter: ["style", "class"]
216
- });
217
- updateVisibleRowIds();
218
- return () => {
219
- observer.disconnect();
220
- };
221
- }, [updateVisibleRowIds, tableRef]);
222
- return { rowIds, refresh: updateVisibleRowIds };
223
- }
224
- var useSelectionState = ({
225
- typeTable,
226
- tableRef,
227
- rows
228
- }) => {
229
- const { groupByDomain } = (0, store_exports.useAppSelector)(store_exports.selectSearch);
230
- const { selectedRowKeys } = (0, store_exports.useAppSelector)(store_exports.selectList);
231
- const { rowIds: recordIds } = useGetRowIds(tableRef);
232
- const selectedRowKeysRef = useRef(recordIds);
233
- const isGroupTable = typeTable === "group";
234
- const recordsCheckedGroup = useMemo2(() => {
235
- if (!rows || !groupByDomain) return 0;
236
- const groupBy = typeof groupByDomain === "object" ? groupByDomain?.contexts?.[0]?.group_by : void 0;
237
- return countSum(rows, groupBy);
238
- }, [rows, groupByDomain]);
239
- const isAllGroupChecked = useMemo2(() => {
240
- if (!isGroupTable || !selectedRowKeys?.length) return false;
241
- const selectedLength = selectedRowKeys.filter((id) => id !== -1).length;
242
- const allRecordsSelected = recordIds.length === selectedRowKeys.length ? recordIds.length === selectedLength : false;
243
- const allGroupsSelected = recordsCheckedGroup === selectedRowKeys.length;
244
- return allGroupsSelected || allRecordsSelected;
245
- }, [isGroupTable, selectedRowKeys, recordIds, recordsCheckedGroup]);
246
- const isAllNormalChecked = useMemo2(() => {
247
- if (isGroupTable || !selectedRowKeys?.length || !rows?.length) return false;
248
- return selectedRowKeys.length === rows.length && selectedRowKeys.every(
249
- (id) => rows.some((record) => record.id === id)
250
- );
251
- }, [isGroupTable, selectedRowKeys, rows]);
252
- const checkedAll = isAllGroupChecked || isAllNormalChecked;
253
- return { checkedAll, selectedRowKeysRef };
254
- };
255
156
  var getDateRange = (currentDate, unit) => {
256
157
  const date = new Date(currentDate);
257
158
  let dateStart, dateEnd;
@@ -393,9 +294,9 @@ function useStorageState(key) {
393
294
  // src/hooks/core/use-list-data.ts
394
295
  import { useModel, useGetListData } from "@fctc/interface-logic/hooks";
395
296
  import {
396
- useAppSelector as useAppSelector2,
397
- selectSearch as selectSearch2,
398
- selectList as selectList2
297
+ useAppSelector,
298
+ selectSearch,
299
+ selectList
399
300
  } from "@fctc/interface-logic/store";
400
301
  import {
401
302
  evalJSONDomain,
@@ -406,13 +307,13 @@ var useListData = ({
406
307
  context,
407
308
  viewResponse
408
309
  }) => {
409
- const { groupByDomain } = useAppSelector2(selectSearch2);
310
+ const { groupByDomain } = useAppSelector(selectSearch);
410
311
  const initModel = useModel();
411
- const [type, setType] = useState3("list");
412
- const [mode, setMode] = useState3("month");
413
- const [currentDate, setCurrentDate] = useState3(/* @__PURE__ */ new Date());
414
- const { pageLimit, page, order } = useAppSelector2(selectList2);
415
- const listDataProps = useMemo3(() => {
312
+ const [type, setType] = useState2("list");
313
+ const [mode, setMode] = useState2("month");
314
+ const [currentDate, setCurrentDate] = useState2(/* @__PURE__ */ new Date());
315
+ const { pageLimit, page, order } = useAppSelector(selectList);
316
+ const listDataProps = useMemo2(() => {
416
317
  const actData = action?.result;
417
318
  if (!viewResponse || !actData || !context) {
418
319
  return null;
@@ -473,7 +374,7 @@ var useListData = ({
473
374
  };
474
375
 
475
376
  // src/hooks/core/use-menu.ts
476
- import { useEffect as useEffect4, useMemo as useMemo4, useState as useState4 } from "react";
377
+ import { useEffect as useEffect4, useMemo as useMemo3, useState as useState3 } from "react";
477
378
 
478
379
  // src/utils/constants.ts
479
380
  var languages = [
@@ -493,9 +394,9 @@ var API_APP_URL = {
493
394
  import { useGetMenu } from "@fctc/interface-logic/hooks";
494
395
  var useMenu = ({ context }) => {
495
396
  const menuData = useGetMenu(context, !!context);
496
- const [menuid, setMenuId] = useState4(void 0);
397
+ const [menuid, setMenuId] = useState3(void 0);
497
398
  const [action, setAction] = useCallAction();
498
- const configedIconData = useMemo4(() => {
399
+ const configedIconData = useMemo3(() => {
499
400
  const data = menuData.data;
500
401
  return data?.map((item) => {
501
402
  return {
@@ -542,7 +443,7 @@ var useMenu = ({ context }) => {
542
443
 
543
444
  // src/hooks/core/use-profile.ts
544
445
  import { useQuery as useQuery2 } from "@tanstack/react-query";
545
- import { useEffect as useEffect5, useMemo as useMemo5 } from "react";
446
+ import { useEffect as useEffect5, useMemo as useMemo4 } from "react";
546
447
  import { useTranslation } from "react-i18next";
547
448
  import { getEnv as getEnv3 } from "@fctc/interface-logic/environment";
548
449
  import { useGetProfile } from "@fctc/interface-logic/hooks";
@@ -570,7 +471,7 @@ var useProfile = (accessToken) => {
570
471
  i18n.changeLanguage(userLocale?.id.split("_")[0]);
571
472
  }
572
473
  }, [dispatch, userInfoQuery.data]);
573
- const context = useMemo5(() => {
474
+ const context = useMemo4(() => {
574
475
  if (userInfoQuery.data?.sub && userInfoQuery.data?.locale) {
575
476
  return {
576
477
  uid: Number(userInfoQuery.data.sub),
@@ -592,13 +493,13 @@ var useUser = (accessToken) => {
592
493
  };
593
494
 
594
495
  // src/hooks/core/use-view-v2.ts
595
- import { useMemo as useMemo6 } from "react";
496
+ import { useMemo as useMemo5 } from "react";
596
497
  import { useGetView } from "@fctc/interface-logic/hooks";
597
498
  var useViewV2 = ({
598
499
  action,
599
500
  context
600
501
  }) => {
601
- const viewParams = useMemo6(() => {
502
+ const viewParams = useMemo5(() => {
602
503
  if (!action?.result) {
603
504
  return void 0;
604
505
  }
@@ -673,11 +574,11 @@ var useAuth = () => {
673
574
  };
674
575
 
675
576
  // src/hooks/core/use-app-provider.tsx
676
- import { createContext, useContext, useMemo as useMemo8 } from "react";
577
+ import { createContext, useContext, useMemo as useMemo7 } from "react";
677
578
 
678
579
  // src/hooks/core/use-company.ts
679
580
  import { useQuery as useQuery3 } from "@tanstack/react-query";
680
- import { useEffect as useEffect6, useMemo as useMemo7 } from "react";
581
+ import { useEffect as useEffect6, useMemo as useMemo6 } from "react";
681
582
  import { getEnv as getEnv4 } from "@fctc/interface-logic/environment";
682
583
  import {
683
584
  useGetCurrentCompany,
@@ -693,7 +594,7 @@ var useCompany = (accessToken) => {
693
594
  queryFn: fetchCurrentCompany,
694
595
  enabled: !!accessToken
695
596
  });
696
- const current_company_id = useMemo7(() => {
597
+ const current_company_id = useMemo6(() => {
697
598
  return currentCompany.data?.current_company_id;
698
599
  }, [currentCompany.data]);
699
600
  useEffect6(() => {
@@ -746,14 +647,14 @@ var AppProvider = ({ children }) => {
746
647
  const auth = useAuth();
747
648
  const user = useUser(auth.accessToken);
748
649
  const company = use_company_default(auth.accessToken);
749
- const menuContext = useMemo8(() => {
650
+ const menuContext = useMemo7(() => {
750
651
  return combineContexts([user.context, company.context]);
751
652
  }, [user.context, company.context]);
752
653
  const menu = useMenu({ context: menuContext });
753
- const action = useMemo8(() => {
654
+ const action = useMemo7(() => {
754
655
  return menu.state.action;
755
656
  }, [menu.state.action]);
756
- const viewContext = useMemo8(() => {
657
+ const viewContext = useMemo7(() => {
757
658
  return combineContexts([
758
659
  menuContext,
759
660
  { ...evalJSONContext(action?.result?.context) }
@@ -796,7 +697,7 @@ var useAppProvider = () => {
796
697
  // src/hooks/core/use-menu-item.tsx
797
698
  import { getEnv as getEnv5 } from "@fctc/interface-logic/environment";
798
699
  import { useGetActionDetail } from "@fctc/interface-logic/hooks";
799
- import { useState as useState5 } from "react";
700
+ import { useState as useState4 } from "react";
800
701
 
801
702
  // src/utils.ts
802
703
  var utils_exports = {};
@@ -811,8 +712,6 @@ __export(utils_exports, {
811
712
  languages: () => languages,
812
713
  mergeButtons: () => mergeButtons,
813
714
  setStorageItemAsync: () => setStorageItemAsync,
814
- useGetRowIds: () => useGetRowIds,
815
- useSelectionState: () => useSelectionState,
816
715
  useStorageState: () => useStorageState
817
716
  });
818
717
  __reExport(utils_exports, utils_star);
@@ -833,7 +732,7 @@ var useMenuItem = (props) => {
833
732
  enabled: true,
834
733
  queryKey: [`action-${aid}`]
835
734
  }).data;
836
- const [path, setPath] = useState5("");
735
+ const [path, setPath] = useState4("");
837
736
  const handleClick = () => {
838
737
  if (location?.pathname === "/list/menu" && activeMenuId === menu?.id) {
839
738
  return;
@@ -855,8 +754,74 @@ var useMenuItem = (props) => {
855
754
  return { handleClick, path, queryActionDetail };
856
755
  };
857
756
 
757
+ // src/hooks/core/use-get-rowids.ts
758
+ import { useCallback as useCallback2, useEffect as useEffect7, useRef, useState as useState5 } from "react";
759
+ var useGetRowIds = (tableRef) => {
760
+ function isElementVisible(el) {
761
+ const style = window.getComputedStyle(el);
762
+ return style.display !== "none" && style.visibility !== "hidden" && style.opacity !== "0";
763
+ }
764
+ function arraysAreEqual(a, b) {
765
+ if (a.length !== b.length) return false;
766
+ if (a.length === 0 && b.length === 0) return true;
767
+ const setA = new Set(a);
768
+ const setB = new Set(b);
769
+ if (setA.size !== setB.size) return false;
770
+ for (const val of setA) {
771
+ if (!setB.has(val)) return false;
772
+ }
773
+ return true;
774
+ }
775
+ const [rowIds, setRowIds] = useState5([]);
776
+ const lastRowIdsRef = useRef([]);
777
+ const updateVisibleRowIds = useCallback2(() => {
778
+ const table = tableRef.current;
779
+ if (!table) return;
780
+ const rows = table.querySelectorAll("tr[data-row-id]");
781
+ const ids = [];
782
+ rows.forEach((row) => {
783
+ const el = row;
784
+ if (isElementVisible(el)) {
785
+ const id = el.getAttribute("data-row-id");
786
+ if (id) ids.push(id);
787
+ }
788
+ });
789
+ const uniqueIds = Array.from(new Set(ids));
790
+ if (!arraysAreEqual(lastRowIdsRef.current, uniqueIds)) {
791
+ lastRowIdsRef.current = uniqueIds;
792
+ setRowIds(uniqueIds);
793
+ }
794
+ }, [tableRef]);
795
+ useEffect7(() => {
796
+ const table = tableRef.current;
797
+ if (!table) return;
798
+ const mutationObserver = new MutationObserver(() => {
799
+ updateVisibleRowIds();
800
+ });
801
+ mutationObserver.observe(table, {
802
+ childList: true,
803
+ subtree: true,
804
+ attributes: true,
805
+ attributeFilter: ["style", "class"]
806
+ });
807
+ const resizeObserver = new ResizeObserver(() => {
808
+ updateVisibleRowIds();
809
+ });
810
+ resizeObserver.observe(table);
811
+ const handleScroll = () => updateVisibleRowIds();
812
+ table.addEventListener("scroll", handleScroll, true);
813
+ updateVisibleRowIds();
814
+ return () => {
815
+ mutationObserver.disconnect();
816
+ resizeObserver.disconnect();
817
+ table.removeEventListener("scroll", handleScroll, true);
818
+ };
819
+ }, [updateVisibleRowIds, tableRef?.current]);
820
+ return { rowIds, refresh: updateVisibleRowIds };
821
+ };
822
+
858
823
  // src/hooks/utils/use-click-outside.ts
859
- import { useEffect as useEffect7, useRef as useRef2 } from "react";
824
+ import { useEffect as useEffect8, useRef as useRef2 } from "react";
860
825
  var DEFAULT_EVENTS = ["mousedown", "touchstart"];
861
826
  var useClickOutside = ({
862
827
  handler,
@@ -865,7 +830,7 @@ var useClickOutside = ({
865
830
  refs
866
831
  }) => {
867
832
  const ref = useRef2(null);
868
- useEffect7(() => {
833
+ useEffect8(() => {
869
834
  const listener = (event) => {
870
835
  const { target } = event;
871
836
  if (refs && refs?.length > 0 && refs?.some((r) => r.current?.contains(target))) {
@@ -887,10 +852,10 @@ var useClickOutside = ({
887
852
  };
888
853
 
889
854
  // src/hooks/utils/use-debounce.ts
890
- import { useEffect as useEffect8, useState as useState6 } from "react";
855
+ import { useEffect as useEffect9, useState as useState6 } from "react";
891
856
  function useDebounce(value, delay) {
892
857
  const [debouncedValue, setDebouncedValue] = useState6(value);
893
- useEffect8(() => {
858
+ useEffect9(() => {
894
859
  const handler = setTimeout(() => {
895
860
  setDebouncedValue(value);
896
861
  }, delay);
@@ -912,6 +877,7 @@ export {
912
877
  useConfig,
913
878
  useDebounce,
914
879
  useDetail,
880
+ useGetRowIds,
915
881
  useListData,
916
882
  useMenu,
917
883
  useMenuItem,
package/dist/index.d.mts CHANGED
@@ -1,11 +1,11 @@
1
- export { ActionResultType, AppProvider, ContextProfile, Record, ViewResponse, useAppProvider, useAuth, useAuthType, useCallAction, useCallActionType, useClickOutside, useConfig, useConfigType, useDebounce, useDetail, useListData, useListDataType, useMenu, useMenuItem, useMenuType, useProfile, useUser, useUserType, useViewV2, useViewV2Type } from './hooks.mjs';
1
+ export { ActionResultType, AppProvider, ContextProfile, Record, ViewResponse, useAppProvider, useAuth, useAuthType, useCallAction, useCallActionType, useClickOutside, useConfig, useConfigType, useDebounce, useDetail, useGetRowIds, useListData, useListDataType, useMenu, useMenuItem, useMenuType, useProfile, useUser, useUserType, useViewV2, useViewV2Type } from './hooks.mjs';
2
2
  export * from '@fctc/interface-logic/hooks';
3
3
  export * from '@fctc/interface-logic/configs';
4
4
  export { CheckIcon, ChevronBottomIcon, CloseIcon, EyeIcon, FilterIcon, GroupByIcon, LoadingIcon, SearchIcon } from './icons.mjs';
5
5
  export { ISelctionStateProps, ITableHeadProps, ITableProps, binaryFieldController, colorFieldController, copyLinkButtonController, dateFieldController, downLoadBinaryController, downloadFileController, durationController, many2manyFieldController, many2manyTagsController, many2oneButtonController, many2oneFieldController, priorityFieldController, searchController, statusDropdownController, tableController, tableGroupController, tableHeadController } from './widget.mjs';
6
6
  export * from '@fctc/interface-logic/types';
7
7
  export { IInputFieldProps, ValuePropsType } from './types.mjs';
8
- export { API_APP_URL, API_PRESCHOOL_URL, STORAGES, combineContexts, convertFieldsToArray, countSum, getDateRange, languages, mergeButtons, setStorageItemAsync, useGetRowIds, useSelectionState, useStorageState } from './utils.mjs';
8
+ export { API_APP_URL, API_PRESCHOOL_URL, STORAGES, combineContexts, convertFieldsToArray, countSum, getDateRange, languages, mergeButtons, setStorageItemAsync, useStorageState } from './utils.mjs';
9
9
  export * from '@fctc/interface-logic/utils';
10
10
  export * from '@fctc/interface-logic/store';
11
11
  export * from '@fctc/interface-logic/constants';
package/dist/index.d.ts CHANGED
@@ -1,11 +1,11 @@
1
- export { ActionResultType, AppProvider, ContextProfile, Record, ViewResponse, useAppProvider, useAuth, useAuthType, useCallAction, useCallActionType, useClickOutside, useConfig, useConfigType, useDebounce, useDetail, useListData, useListDataType, useMenu, useMenuItem, useMenuType, useProfile, useUser, useUserType, useViewV2, useViewV2Type } from './hooks.js';
1
+ export { ActionResultType, AppProvider, ContextProfile, Record, ViewResponse, useAppProvider, useAuth, useAuthType, useCallAction, useCallActionType, useClickOutside, useConfig, useConfigType, useDebounce, useDetail, useGetRowIds, useListData, useListDataType, useMenu, useMenuItem, useMenuType, useProfile, useUser, useUserType, useViewV2, useViewV2Type } from './hooks.js';
2
2
  export * from '@fctc/interface-logic/hooks';
3
3
  export * from '@fctc/interface-logic/configs';
4
4
  export { CheckIcon, ChevronBottomIcon, CloseIcon, EyeIcon, FilterIcon, GroupByIcon, LoadingIcon, SearchIcon } from './icons.js';
5
5
  export { ISelctionStateProps, ITableHeadProps, ITableProps, binaryFieldController, colorFieldController, copyLinkButtonController, dateFieldController, downLoadBinaryController, downloadFileController, durationController, many2manyFieldController, many2manyTagsController, many2oneButtonController, many2oneFieldController, priorityFieldController, searchController, statusDropdownController, tableController, tableGroupController, tableHeadController } from './widget.js';
6
6
  export * from '@fctc/interface-logic/types';
7
7
  export { IInputFieldProps, ValuePropsType } from './types.js';
8
- export { API_APP_URL, API_PRESCHOOL_URL, STORAGES, combineContexts, convertFieldsToArray, countSum, getDateRange, languages, mergeButtons, setStorageItemAsync, useGetRowIds, useSelectionState, useStorageState } from './utils.js';
8
+ export { API_APP_URL, API_PRESCHOOL_URL, STORAGES, combineContexts, convertFieldsToArray, countSum, getDateRange, languages, mergeButtons, setStorageItemAsync, useStorageState } from './utils.js';
9
9
  export * from '@fctc/interface-logic/utils';
10
10
  export * from '@fctc/interface-logic/store';
11
11
  export * from '@fctc/interface-logic/constants';