@fctc/widget-logic 4.6.6 → 4.6.8

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.js CHANGED
@@ -155,12 +155,8 @@ var useCallAction = () => {
155
155
  context
156
156
  }) => {
157
157
  try {
158
- const stableEnvContext = (0, import_react.useMemo)(
159
- () => env?.context,
160
- [env?.context?.lang]
161
- );
162
158
  const menuContext = {
163
- ...stableEnvContext,
159
+ ...env?.context,
164
160
  ...context
165
161
  };
166
162
  const loadRes = await queryLoadAction.mutateAsync({
package/dist/hooks.mjs CHANGED
@@ -105,13 +105,13 @@ import {
105
105
  } from "@fctc/interface-logic/hooks";
106
106
 
107
107
  // src/hooks/core/use-app-provider.tsx
108
- import { createContext, useContext, useMemo as useMemo6 } from "react";
108
+ import { createContext, useContext, useMemo as useMemo5 } from "react";
109
109
 
110
110
  // src/hooks/core/use-menu.ts
111
- import { useMemo as useMemo2, useState as useState2 } from "react";
111
+ import { useMemo, useState as useState2 } from "react";
112
112
 
113
113
  // src/hooks/core/use-call-action.ts
114
- import { useCallback, useMemo, useState } from "react";
114
+ import { useCallback, useState } from "react";
115
115
 
116
116
  // src/provider.ts
117
117
  var provider_exports = {};
@@ -135,12 +135,8 @@ var useCallAction = () => {
135
135
  context
136
136
  }) => {
137
137
  try {
138
- const stableEnvContext = useMemo(
139
- () => env?.context,
140
- [env?.context?.lang]
141
- );
142
138
  const menuContext = {
143
- ...stableEnvContext,
139
+ ...env?.context,
144
140
  ...context
145
141
  };
146
142
  const loadRes = await queryLoadAction.mutateAsync({
@@ -374,7 +370,7 @@ var useMenu = ({
374
370
  defaultService
375
371
  );
376
372
  const [menuId, setMenuId] = useState2(void 0);
377
- const configedIconData = useMemo2(() => {
373
+ const configedIconData = useMemo(() => {
378
374
  const data = menuData.data;
379
375
  return data?.map((item) => {
380
376
  return {
@@ -456,7 +452,7 @@ var useDetail = (sub) => {
456
452
 
457
453
  // src/hooks/core/use-profile.ts
458
454
  import { useQuery as useQuery2 } from "@tanstack/react-query";
459
- import { useEffect as useEffect3, useMemo as useMemo3 } from "react";
455
+ import { useEffect as useEffect3, useMemo as useMemo2 } from "react";
460
456
  import { useTranslation } from "react-i18next";
461
457
  var useProfile = ({ service }) => {
462
458
  const { setUid, setLang, setUserInfo, env } = (0, provider_exports.useEnv)();
@@ -479,7 +475,7 @@ var useProfile = ({ service }) => {
479
475
  i18n.changeLanguage(userLocale?.id.split("_")[0]);
480
476
  }
481
477
  }, [userInfoQuery.isFetched]);
482
- const context = useMemo3(() => {
478
+ const context = useMemo2(() => {
483
479
  if (userInfoQuery.data?.sub && userInfoQuery.data?.locale) {
484
480
  return {
485
481
  uid: Number(userInfoQuery.data.sub),
@@ -503,7 +499,7 @@ var useUser = ({ service }) => {
503
499
  };
504
500
 
505
501
  // src/hooks/core/use-view-v2.ts
506
- import { useMemo as useMemo4 } from "react";
502
+ import { useMemo as useMemo3 } from "react";
507
503
  var useViewV2 = ({
508
504
  action,
509
505
  context,
@@ -512,7 +508,7 @@ var useViewV2 = ({
512
508
  xNode
513
509
  }) => {
514
510
  const { useGetView: useGetView2 } = (0, provider_exports.useService)();
515
- const viewParams = useMemo4(() => {
511
+ const viewParams = useMemo3(() => {
516
512
  if (!action || !action?.res_model) {
517
513
  return void 0;
518
514
  }
@@ -546,7 +542,7 @@ var useViewV2 = ({
546
542
 
547
543
  // src/hooks/core/use-company.ts
548
544
  import { useQuery as useQuery3 } from "@tanstack/react-query";
549
- import { useEffect as useEffect4, useMemo as useMemo5 } from "react";
545
+ import { useEffect as useEffect4, useMemo as useMemo4 } from "react";
550
546
  var useCompany = ({ service }) => {
551
547
  const { setAllowCompanies, setCompanies, setDefaultCompany, env } = (0, provider_exports.useEnv)();
552
548
  const { useGetCurrentCompany: useGetCurrentCompany2, useGetCompanyInfo: useGetCompanyInfo2 } = (0, provider_exports.useService)();
@@ -561,7 +557,7 @@ var useCompany = ({ service }) => {
561
557
  queryFn: fetchCurrentCompany,
562
558
  enabled: !!env?.defaultCompany
563
559
  });
564
- const current_company_id = useMemo5(() => {
560
+ const current_company_id = useMemo4(() => {
565
561
  return currentCompany.data?.current_company_id;
566
562
  }, [currentCompany.data]);
567
563
  useEffect4(() => {
@@ -612,7 +608,7 @@ var AppProvider = ({
612
608
  const { env } = (0, provider_exports.useEnv)();
613
609
  const user = useUser({ service: env.default_service });
614
610
  const company = useCompany({ service: env.default_service });
615
- const menuContext = useMemo6(() => {
611
+ const menuContext = useMemo5(() => {
616
612
  return combineContexts([
617
613
  {
618
614
  ...user?.context,
@@ -629,10 +625,10 @@ var AppProvider = ({
629
625
  domain: menuParams?.domain,
630
626
  defaultService: env.default_service
631
627
  });
632
- const action = useMemo6(() => {
628
+ const action = useMemo5(() => {
633
629
  return menu?.state?.action;
634
630
  }, [menu?.state?.action, env?.context?.lang]);
635
- const viewContext = useMemo6(() => {
631
+ const viewContext = useMemo5(() => {
636
632
  return combineContexts([
637
633
  menuContext,
638
634
  { ...(0, utils_exports.evalJSONContext)(action?.context) }
@@ -736,7 +732,7 @@ var useGetAction = ({
736
732
  };
737
733
 
738
734
  // src/hooks/core/use-get-specification.ts
739
- import { useMemo as useMemo7 } from "react";
735
+ import { useMemo as useMemo6 } from "react";
740
736
  var useGetSpecification = ({
741
737
  model,
742
738
  viewData,
@@ -748,13 +744,13 @@ var useGetSpecification = ({
748
744
  fields
749
745
  };
750
746
  const initModel = useModel();
751
- const modelInstance = useMemo7(() => {
747
+ const modelInstance = useMemo6(() => {
752
748
  if (viewData) {
753
749
  return initModel.initModel(baseModel);
754
750
  }
755
751
  return null;
756
752
  }, [baseModel, viewData, model]);
757
- const specification = useMemo7(() => {
753
+ const specification = useMemo6(() => {
758
754
  if (modelInstance) {
759
755
  return modelInstance.getSpecification();
760
756
  }
@@ -764,7 +760,7 @@ var useGetSpecification = ({
764
760
  };
765
761
 
766
762
  // src/hooks/core/use-list-data.ts
767
- import { useMemo as useMemo8, useState as useState5 } from "react";
763
+ import { useMemo as useMemo7, useState as useState5 } from "react";
768
764
  import {
769
765
  evalJSONDomain,
770
766
  formatSortingString,
@@ -908,7 +904,7 @@ var useListData = ({
908
904
  viewData,
909
905
  fields: mode === "kanban" ? viewData?.views?.kanban?.fields : viewData?.views?.list?.fields
910
906
  });
911
- const listDataProps = useMemo8(() => {
907
+ const listDataProps = useMemo7(() => {
912
908
  if (!viewData || !action || !context) {
913
909
  return null;
914
910
  }
package/dist/index.js CHANGED
@@ -4205,12 +4205,8 @@ var useCallAction = () => {
4205
4205
  context
4206
4206
  }) => {
4207
4207
  try {
4208
- const stableEnvContext = (0, import_react.useMemo)(
4209
- () => env?.context,
4210
- [env?.context?.lang]
4211
- );
4212
4208
  const menuContext = {
4213
- ...stableEnvContext,
4209
+ ...env?.context,
4214
4210
  ...context
4215
4211
  };
4216
4212
  const loadRes = await queryLoadAction.mutateAsync({
@@ -6627,10 +6623,14 @@ var tableGroupController = (props) => {
6627
6623
  };
6628
6624
 
6629
6625
  // src/widget/advance/search/controller.ts
6630
- var import_constants3 = require("@fctc/interface-logic/constants");
6631
- var import_utils20 = require("@fctc/interface-logic/utils");
6632
6626
  var import_moment2 = __toESM(require_moment());
6633
6627
  var import_react26 = require("react");
6628
+
6629
+ // src/constants.ts
6630
+ var constants_exports = {};
6631
+ __reExport(constants_exports, require("@fctc/interface-logic/constants"));
6632
+
6633
+ // src/widget/advance/search/controller.ts
6634
6634
  var searchController = ({
6635
6635
  viewData,
6636
6636
  model,
@@ -6645,9 +6645,11 @@ var searchController = ({
6645
6645
  const [selectedTags, setSelectedTags] = (0, import_react26.useState)(null);
6646
6646
  const [searchString, setSearchString] = (0, import_react26.useState)("");
6647
6647
  const [searchMap, setSearchMap] = (0, import_react26.useState)({});
6648
- const actionContext = typeof context === "string" ? (0, import_utils20.evalJSONContext)(context) : context;
6648
+ const [hoveredIndex, setHoveredIndex] = (0, import_react26.useState)(0);
6649
+ const [hoveredIndexSearchList, setHoveredIndexSearchList] = (0, import_react26.useState)(0);
6650
+ const actionContext = typeof context === "string" ? (0, utils_exports.evalJSONContext)(context) : context;
6649
6651
  const contextSearch = { ...env.context, ...actionContext };
6650
- const domainAction = domain ? Array.isArray(domain) ? [...domain] : (0, import_utils20.evalJSONDomain)(domain, contextSearch) : [];
6652
+ const domainAction = domain ? Array.isArray(domain) ? [...domain] : (0, utils_exports.evalJSONDomain)(domain, contextSearch) : [];
6651
6653
  const clearSearch = () => {
6652
6654
  setFilterBy([]);
6653
6655
  setGroupBy([]);
@@ -6662,23 +6664,23 @@ var searchController = ({
6662
6664
  const dataModel = viewData?.models?.[model];
6663
6665
  const searchViews = viewData?.views?.search;
6664
6666
  const searchByItems = searchViews?.search_by?.filter(
6665
- (item) => !import_utils20.domainHelper.matchDomains(contextSearch, item.invisible)
6667
+ (item) => !utils_exports.domainHelper.matchDomains(contextSearch, item.invisible)
6666
6668
  )?.map(
6667
6669
  ({ string, name, filter_domain, operator, widget }, index) => ({
6668
6670
  dataIndex: index,
6669
- title: string ?? dataModel[name]?.string,
6670
- name: name ?? dataModel[name]?.name,
6671
+ title: string ?? dataModel?.[name]?.string,
6672
+ name: name ?? dataModel?.[name]?.name,
6671
6673
  filter_domain,
6672
6674
  operator,
6673
6675
  widget,
6674
- type: dataModel[name]?.type
6676
+ type: dataModel?.[name]?.type
6675
6677
  })
6676
6678
  );
6677
6679
  const filterByItems = searchViews?.filter_by.filter((item) => {
6678
- return !import_utils20.domainHelper.matchDomains(contextSearch, item?.invisible);
6680
+ return !utils_exports.domainHelper.matchDomains(contextSearch, item?.invisible);
6679
6681
  })?.map((item) => ({ ...item, active: false }));
6680
6682
  const groupByItems = searchViews?.group_by.filter(
6681
- (item) => !import_utils20.domainHelper.matchDomains(contextSearch, item?.invisible)
6683
+ (item) => !utils_exports.domainHelper.matchDomains(contextSearch, item?.invisible)
6682
6684
  ).map((item) => ({
6683
6685
  ...item,
6684
6686
  string: item.string ?? viewData?.models?.[model]?.[item?.name?.split("group_by_")?.[1]]?.string
@@ -6732,7 +6734,7 @@ var searchController = ({
6732
6734
  if (domainAction) {
6733
6735
  const domain2 = [];
6734
6736
  if (Array.isArray(domainAction) && domainAction.length > 0) {
6735
- if (Object.keys(searchMap).some((key) => !key.includes(import_constants3.SearchType.GROUP))) {
6737
+ if (Object.keys(searchMap).some((key) => !key.includes(constants_exports.SearchType.GROUP))) {
6736
6738
  domain2.push("&");
6737
6739
  }
6738
6740
  domainAction.forEach((domainItem) => {
@@ -6740,7 +6742,7 @@ var searchController = ({
6740
6742
  });
6741
6743
  }
6742
6744
  Object.keys(searchMap).forEach((key, keyIndex, keys) => {
6743
- if (!key?.includes(import_constants3.SearchType.GROUP)) {
6745
+ if (!key?.includes(constants_exports.SearchType.GROUP)) {
6744
6746
  if (keys.length > 1 && keyIndex < keys.length - 1) {
6745
6747
  domain2.push("&");
6746
6748
  }
@@ -6755,14 +6757,14 @@ var searchController = ({
6755
6757
  }
6756
6758
  let valueDomainItem = value?.value;
6757
6759
  if (value?.modelType === "date") {
6758
- valueDomainItem = (0, import_utils20.validateAndParseDate)(value?.value);
6760
+ valueDomainItem = (0, utils_exports.validateAndParseDate)(value?.value);
6759
6761
  } else if (value?.modelType === "datetime") {
6760
6762
  if (value?.operator === "<=" || value?.operator === "<") {
6761
- const parsedDate = (0, import_utils20.validateAndParseDate)(value?.value, true);
6763
+ const parsedDate = (0, utils_exports.validateAndParseDate)(value?.value, true);
6762
6764
  const hasTime = (0, import_moment2.default)(value?.value).format("HH:mm:ss") !== "00:00:00";
6763
6765
  valueDomainItem = hasTime ? (0, import_moment2.default)(parsedDate).format("YYYY-MM-DD HH:mm:ss") : (0, import_moment2.default)(parsedDate).add(1, "day").subtract(1, "second").format("YYYY-MM-DD HH:mm:ss");
6764
6766
  } else {
6765
- valueDomainItem = (0, import_utils20.validateAndParseDate)(value?.value, true);
6767
+ valueDomainItem = (0, utils_exports.validateAndParseDate)(value?.value, true);
6766
6768
  }
6767
6769
  }
6768
6770
  const operator = value?.modelType === "date" || value?.modelType === "datetime" || value?.modelType === "boolean" || value?.modelType === "integer" ? value?.operator ?? "=" : value.operator ?? "ilike";
@@ -6787,11 +6789,11 @@ var searchController = ({
6787
6789
  modelType,
6788
6790
  dataIndex
6789
6791
  } = objValues[0];
6790
- if (!key?.includes(import_constants3.SearchType.GROUP)) {
6792
+ if (!key?.includes(constants_exports.SearchType.GROUP)) {
6791
6793
  const values = objValues?.map((objValue) => objValue.value);
6792
6794
  return {
6793
6795
  title,
6794
- name: type === import_constants3.SearchType.SEARCH ? `${import_constants3.SearchType.SEARCH}_${String(dataIndex)}` : groupIndex ?? name,
6796
+ name: type === constants_exports.SearchType.SEARCH ? `${constants_exports.SearchType.SEARCH}_${String(dataIndex)}` : groupIndex ?? name,
6795
6797
  values,
6796
6798
  type,
6797
6799
  widget,
@@ -6841,22 +6843,22 @@ var searchController = ({
6841
6843
  }, [searchMap]);
6842
6844
  const handleAddTagSearch = (tag) => {
6843
6845
  const { domain: domain2, groupIndex, value, type, context: context2, dataIndex } = tag;
6844
- const domainFormat = new import_utils20.domainHelper.Domain(domain2);
6845
- if (type === import_constants3.SearchType.FILTER) {
6846
- addSearchItems(`${import_constants3.SearchType.FILTER}_${groupIndex}`, {
6846
+ const domainFormat = new utils_exports.domainHelper.Domain(domain2);
6847
+ if (type === constants_exports.SearchType.FILTER) {
6848
+ addSearchItems(`${constants_exports.SearchType.FILTER}_${groupIndex}`, {
6847
6849
  ...tag,
6848
6850
  domain: domain2 ? domainFormat.toList(context2) : null
6849
6851
  });
6850
- } else if (type === import_constants3.SearchType.SEARCH) {
6851
- addSearchItems(`${import_constants3.SearchType.SEARCH}_${String(dataIndex)}`, {
6852
+ } else if (type === constants_exports.SearchType.SEARCH) {
6853
+ addSearchItems(`${constants_exports.SearchType.SEARCH}_${String(dataIndex)}`, {
6852
6854
  ...tag,
6853
6855
  domain: domain2 ? domainFormat.toList({
6854
6856
  ...context2,
6855
6857
  self: value
6856
6858
  }) : null
6857
6859
  });
6858
- } else if (type === import_constants3.SearchType.GROUP) {
6859
- addSearchItems(`${import_constants3.SearchType.GROUP}`, {
6860
+ } else if (type === constants_exports.SearchType.GROUP) {
6861
+ addSearchItems(`${constants_exports.SearchType.GROUP}`, {
6860
6862
  ...tag,
6861
6863
  domain: domain2 ? domainFormat.toList({
6862
6864
  context: context2,
@@ -6865,6 +6867,65 @@ var searchController = ({
6865
6867
  });
6866
6868
  }
6867
6869
  };
6870
+ const onKeyDown = (e) => {
6871
+ if (!searchBy || searchBy.length === 0) return;
6872
+ switch (e.key) {
6873
+ case "Backspace": {
6874
+ if (!searchString && selectedTags && selectedTags.length > 0) {
6875
+ const lastTag = selectedTags[selectedTags.length - 1];
6876
+ if (!lastTag) return;
6877
+ const key = lastTag.type === constants_exports.SearchType.GROUP ? constants_exports.SearchType.GROUP : lastTag.name;
6878
+ removeKeyFromSearchMap({ key: String(key) });
6879
+ }
6880
+ break;
6881
+ }
6882
+ case "ArrowDown": {
6883
+ e.preventDefault();
6884
+ setHoveredIndex((prev) => {
6885
+ const maxIndex = searchBy.length - 1;
6886
+ const next = prev < maxIndex ? prev + 1 : prev;
6887
+ setHoveredIndexSearchList(next);
6888
+ return next;
6889
+ });
6890
+ break;
6891
+ }
6892
+ case "ArrowUp": {
6893
+ e.preventDefault();
6894
+ setHoveredIndex((prev) => {
6895
+ const next = prev > 0 ? prev - 1 : prev;
6896
+ setHoveredIndexSearchList(next);
6897
+ return next;
6898
+ });
6899
+ break;
6900
+ }
6901
+ case "Enter": {
6902
+ e.preventDefault();
6903
+ if (!searchString.trim()) return;
6904
+ const head = searchBy[hoveredIndex];
6905
+ if (!head) return;
6906
+ handleAddTagSearch({
6907
+ title: head.title,
6908
+ name: head.name,
6909
+ value: searchString,
6910
+ type: constants_exports.SearchType.SEARCH,
6911
+ domain: head.filter_domain,
6912
+ operator: head.operator,
6913
+ dataIndex: head.dataIndex,
6914
+ widget: head.widget,
6915
+ modelType: head.type
6916
+ });
6917
+ break;
6918
+ }
6919
+ default:
6920
+ break;
6921
+ }
6922
+ };
6923
+ const handleMouseEnter = (index) => {
6924
+ setHoveredIndexSearchList(index);
6925
+ };
6926
+ const handleMouseLeave = () => {
6927
+ setHoveredIndexSearchList(null);
6928
+ };
6868
6929
  return {
6869
6930
  groupBy,
6870
6931
  searchBy,
@@ -6880,7 +6941,11 @@ var searchController = ({
6880
6941
  onSearchString: onChangeSearchInput,
6881
6942
  handleAddTagSearch,
6882
6943
  domain: formatDomain(),
6883
- context: contextSearch
6944
+ context: contextSearch,
6945
+ onKeyDown,
6946
+ handleMouseEnter,
6947
+ handleMouseLeave,
6948
+ hoveredIndexSearchList
6884
6949
  };
6885
6950
  };
6886
6951
 
@@ -6893,12 +6958,6 @@ __reExport(store_exports, require("@fctc/interface-logic/store"));
6893
6958
 
6894
6959
  // src/index.ts
6895
6960
  __reExport(index_exports, store_exports, module.exports);
6896
-
6897
- // src/constants.ts
6898
- var constants_exports = {};
6899
- __reExport(constants_exports, require("@fctc/interface-logic/constants"));
6900
-
6901
- // src/index.ts
6902
6961
  __reExport(index_exports, constants_exports, module.exports);
6903
6962
 
6904
6963
  // src/environment.ts