@erpsquad/common 1.10.29 → 1.10.31

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.
Files changed (75) hide show
  1. package/dist/chunks/{ERPUIProvider-CLg_Yo12.esm.js → ERPUIProvider-CIzXMsuV.esm.js} +8 -8
  2. package/dist/chunks/{ERPUIProvider-CLg_Yo12.esm.js.map → ERPUIProvider-CIzXMsuV.esm.js.map} +1 -1
  3. package/dist/chunks/{actionCreator-C8cLIOap.esm.js → actionCreator-BzPZv2rR.esm.js} +2 -2
  4. package/dist/chunks/{actionCreator-C8cLIOap.esm.js.map → actionCreator-BzPZv2rR.esm.js.map} +1 -1
  5. package/dist/chunks/{android-12-switch-DM9s0XTb.js → android-12-switch-BILQvv4G.js} +170 -5
  6. package/dist/chunks/android-12-switch-BILQvv4G.js.map +1 -0
  7. package/dist/chunks/{android-12-switch-eTZOAHAa.esm.js → android-12-switch-DpJE56Wi.esm.js} +212 -47
  8. package/dist/chunks/android-12-switch-DpJE56Wi.esm.js.map +1 -0
  9. package/dist/chunks/{appbar-DtROOKgm.esm.js → appbar-5rP5iXcS.esm.js} +4 -4
  10. package/dist/chunks/{appbar-DtROOKgm.esm.js.map → appbar-5rP5iXcS.esm.js.map} +1 -1
  11. package/dist/chunks/{common-Nn4SUfK7.esm.js → common-D59u5rE6.esm.js} +2 -2
  12. package/dist/chunks/{common-Nn4SUfK7.esm.js.map → common-D59u5rE6.esm.js.map} +1 -1
  13. package/dist/chunks/{custom-editor-B-mleFzm.esm.js → custom-editor-UhZu0Svw.esm.js} +2 -2
  14. package/dist/chunks/{custom-editor-B-mleFzm.esm.js.map → custom-editor-UhZu0Svw.esm.js.map} +1 -1
  15. package/dist/chunks/{default-data-BjzCfuoR.js → default-data-B2-JPE4u.js} +9 -11
  16. package/dist/chunks/{default-data-BjzCfuoR.js.map → default-data-B2-JPE4u.js.map} +1 -1
  17. package/dist/chunks/{default-data-C8B-fYa8.esm.js → default-data-DLCnpyaM.esm.js} +19 -21
  18. package/dist/chunks/{default-data-C8B-fYa8.esm.js.map → default-data-DLCnpyaM.esm.js.map} +1 -1
  19. package/dist/chunks/{form-builder-conversion-yi03Elpa.esm.js → form-builder-conversion-gLJCNqSQ.esm.js} +2 -2
  20. package/dist/chunks/{form-builder-conversion-yi03Elpa.esm.js.map → form-builder-conversion-gLJCNqSQ.esm.js.map} +1 -1
  21. package/dist/chunks/{form-builder-deconversion-CFtHF1hm.esm.js → form-builder-deconversion-DNGMsAEj.esm.js} +3 -3
  22. package/dist/chunks/{form-builder-deconversion-CFtHF1hm.esm.js.map → form-builder-deconversion-DNGMsAEj.esm.js.map} +1 -1
  23. package/dist/chunks/{fullScreen-Xv8AR914.esm.js → fullScreen-C8Qnoyrr.esm.js} +2 -2
  24. package/dist/chunks/{fullScreen-Xv8AR914.esm.js.map → fullScreen-C8Qnoyrr.esm.js.map} +1 -1
  25. package/dist/chunks/{languageContext-cweJTzn0.esm.js → languageContext-ffrxXJkr.esm.js} +3 -3
  26. package/dist/chunks/{languageContext-cweJTzn0.esm.js.map → languageContext-ffrxXJkr.esm.js.map} +1 -1
  27. package/dist/chunks/{migration-utils-llqrdBh8.esm.js → migration-utils-BJsX1G2n.esm.js} +2 -2
  28. package/dist/chunks/{migration-utils-llqrdBh8.esm.js.map → migration-utils-BJsX1G2n.esm.js.map} +1 -1
  29. package/dist/chunks/{page-context-BbQNncGA.esm.js → page-context-BlGcwtdZ.esm.js} +3 -3
  30. package/dist/chunks/{page-context-BbQNncGA.esm.js.map → page-context-BlGcwtdZ.esm.js.map} +1 -1
  31. package/dist/chunks/{reducer-DRkUwBHb.esm.js → reducer-D6_f0R4C.esm.js} +2 -2
  32. package/dist/chunks/{reducer-DRkUwBHb.esm.js.map → reducer-D6_f0R4C.esm.js.map} +1 -1
  33. package/dist/chunks/{shareSlice-H0nwzQZv.esm.js → shareSlice-Bxrgfv7o.esm.js} +2 -2
  34. package/dist/chunks/{shareSlice-H0nwzQZv.esm.js.map → shareSlice-Bxrgfv7o.esm.js.map} +1 -1
  35. package/dist/chunks/{sidebar-CdhW0PKj.esm.js → sidebar-n5_ky6G7.esm.js} +4 -4
  36. package/dist/chunks/{sidebar-CdhW0PKj.esm.js.map → sidebar-n5_ky6G7.esm.js.map} +1 -1
  37. package/dist/chunks/{sidebarScreen-DbfP32Xx.esm.js → sidebarScreen-BwkiIBud.esm.js} +5 -6
  38. package/dist/chunks/sidebarScreen-BwkiIBud.esm.js.map +1 -0
  39. package/dist/chunks/{sidebarScreen-figZp_Ln.js → sidebarScreen-Cm763s1P.js} +1 -2
  40. package/dist/chunks/sidebarScreen-Cm763s1P.js.map +1 -0
  41. package/dist/chunks/{store-C2XaFCA_.esm.js → store-OqHSsVaz.esm.js} +3 -3
  42. package/dist/chunks/{store-C2XaFCA_.esm.js.map → store-OqHSsVaz.esm.js.map} +1 -1
  43. package/dist/chunks/{translations-DJZgOpfH.esm.js → translations-GFvlFdi5.esm.js} +2 -2
  44. package/dist/chunks/{translations-DJZgOpfH.esm.js.map → translations-GFvlFdi5.esm.js.map} +1 -1
  45. package/dist/chunks/{uom-field-wrapper-DKN31prP.esm.js → uom-field-wrapper-CgYTONsG.esm.js} +33 -158
  46. package/dist/chunks/uom-field-wrapper-CgYTONsG.esm.js.map +1 -0
  47. package/dist/chunks/{uom-field-wrapper-NNhtGgqI.js → uom-field-wrapper-DoyshtE9.js} +2 -127
  48. package/dist/chunks/uom-field-wrapper-DoyshtE9.js.map +1 -0
  49. package/dist/chunks/{useAccountSetting-CAUDy8rg.esm.js → useAccountSetting-D1Ze8r-T.esm.js} +3 -3
  50. package/dist/chunks/{useAccountSetting-CAUDy8rg.esm.js.map → useAccountSetting-D1Ze8r-T.esm.js.map} +1 -1
  51. package/dist/chunks/{useAdditionalDiscountAutoCalc-DbyTG80U.esm.js → useAdditionalDiscountAutoCalc-PhSfzd5X.esm.js} +5 -5
  52. package/dist/chunks/{useAdditionalDiscountAutoCalc-DbyTG80U.esm.js.map → useAdditionalDiscountAutoCalc-PhSfzd5X.esm.js.map} +1 -1
  53. package/dist/chunks/{useAuth-BaUSGWbL.esm.js → useAuth-DhzbULWV.esm.js} +2 -2
  54. package/dist/chunks/{useAuth-BaUSGWbL.esm.js.map → useAuth-DhzbULWV.esm.js.map} +1 -1
  55. package/dist/chunks/{useLangauge-BUF4epYu.esm.js → useLangauge-CbMaEsdS.esm.js} +2 -2
  56. package/dist/chunks/{useLangauge-BUF4epYu.esm.js.map → useLangauge-CbMaEsdS.esm.js.map} +1 -1
  57. package/dist/components/index.esm.js +53 -53
  58. package/dist/components/index.js +4 -4
  59. package/dist/contexts/index.esm.js +3 -3
  60. package/dist/hooks/index.esm.js +5 -5
  61. package/dist/index.esm.js +90 -90
  62. package/dist/index.js +6 -6
  63. package/dist/layout/index.esm.js +2 -2
  64. package/dist/layout/index.js +1 -1
  65. package/dist/redux/index.esm.js +4 -4
  66. package/dist/utils/index.esm.js +7 -7
  67. package/dist/views/index.esm.js +9 -9
  68. package/dist/views/index.js +2 -2
  69. package/package.json +1 -1
  70. package/dist/chunks/android-12-switch-DM9s0XTb.js.map +0 -1
  71. package/dist/chunks/android-12-switch-eTZOAHAa.esm.js.map +0 -1
  72. package/dist/chunks/sidebarScreen-DbfP32Xx.esm.js.map +0 -1
  73. package/dist/chunks/sidebarScreen-figZp_Ln.js.map +0 -1
  74. package/dist/chunks/uom-field-wrapper-DKN31prP.esm.js.map +0 -1
  75. package/dist/chunks/uom-field-wrapper-NNhtGgqI.js.map +0 -1
@@ -1,8 +1,8 @@
1
1
  import _ from "lodash";
2
2
  import { useRef, useContext, useEffect, useMemo, useState, useCallback } from "react";
3
- import { b as PermissionsContext, P as PageContext } from "./page-context-BbQNncGA.esm.js";
3
+ import { b as PermissionsContext, P as PageContext } from "./page-context-BlGcwtdZ.esm.js";
4
4
  import { c as isApiConfigInitialized, g as getApiConfig, o as onApiConfigReady } from "./api-config-GOys-syK.esm.js";
5
- import { aw as getToken } from "./common-Nn4SUfK7.esm.js";
5
+ import { aw as getToken } from "./common-D59u5rE6.esm.js";
6
6
  import { aB as getV1SettingsConfigurations, bw as setBaseUrl } from "./api-BF3CyrPB.esm.js";
7
7
  import { useSnackbar } from "notistack";
8
8
  function useDeepMemo(value) {
@@ -339,4 +339,4 @@ export {
339
339
  initializeApiBaseUrls as i,
340
340
  useAccountingSetting as u
341
341
  };
342
- //# sourceMappingURL=useAccountSetting-CAUDy8rg.esm.js.map
342
+ //# sourceMappingURL=useAccountSetting-D1Ze8r-T.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useAccountSetting-CAUDy8rg.esm.js","sources":["../../src/hooks/use-deep-memo.ts","../../src/hooks/use-permissions.ts","../../src/hooks/use-pages.ts","../../src/hooks/useLocationFilter.tsx","../../src/hooks/useApi.tsx","../../src/hooks/useAccountSetting.tsx"],"sourcesContent":["import _ from 'lodash';\nimport { useRef } from 'react';\n\nfunction useDeepMemo<T>(value: T): T {\n const ref = useRef<T>();\n\n if (!_.isEqual(ref.current, value)) {\n ref.current = value;\n }\n\n return ref.current as T;\n}\n\nexport default useDeepMemo;\n","import { useContext } from \"react\";\nimport { PermissionsContext, PermissionsContextType } from \"../contexts/permission-context\";\n\n\nexport const usePermissions = (): PermissionsContextType => {\n const context = useContext(PermissionsContext) as PermissionsContextType | null;\n\n if (!context) {\n throw new Error(\"usePermissions must be used within a PermissionsProvider\");\n }\n\n return context;\n};","import { useContext } from \"react\";\nimport { PageContext } from \"../contexts/page-context\";\nimport { MaterialTableColumnProps } from \"../components/material-table/material-table\";\n\nexport const usePages = (defaultColumns:MaterialTableColumnProps[] = []) => {\n const context = useContext(PageContext);\n\n if (!context) {\n throw new Error(\"usePages must be used within a PageProvider\");\n }\n\n if (context.initializeColumns) {\n context.initializeColumns(defaultColumns);\n }\n\n return context;\n};\n","import { useEffect, useMemo } from 'react';\n\n\nexport const useLocationFilter = ({\n selectedCompany,\n setValue,\n fieldArrayName,\n locationFieldName,\n resetValue = null,\n filterKey = '&company_id.in',\n isDirty = false\n}) => {\n\n // Reset location value when company changes\n useEffect(() => {\n if (setValue && fieldArrayName && locationFieldName && isDirty) {\n setValue(`${fieldArrayName}.${locationFieldName}`, resetValue);\n }\n }, [isDirty, setValue, fieldArrayName, locationFieldName, resetValue]);\n\n const locationFilter = useMemo(() => {\n const companyId = Array.isArray(selectedCompany) ? (selectedCompany?.length ? selectedCompany : null) : (selectedCompany || null);\n console.log(\"🚀 ~ useLocationFilter ~ companyId:\", companyId)\n\n if (companyId === null) {\n return {};\n }\n\n return {\n [filterKey]: companyId\n };\n }, [selectedCompany, filterKey]);\n\n return locationFilter;\n};\n\n\n\nexport const useMultipleLocationFilters = ({\n selectedCompany,\n setValue,\n fieldConfigs,\n resetValue = undefined,\n filterKey = '&company_id.in'\n}) => {\n return useMemo(() => {\n const companyId = selectedCompany?.length > 0 ? selectedCompany : 0;\n console.log(\"🚀 ~ useLocationFilter ~ companyId:\", companyId)\n\n // Reset all location fields\n fieldConfigs.forEach(({ fieldArrayName, locationFieldName }) => {\n if (setValue && fieldArrayName && locationFieldName) {\n setValue(`${fieldArrayName}.${locationFieldName}`, resetValue);\n }\n });\n\n return {\n [filterKey]: companyId\n };\n }, [selectedCompany, setValue, fieldConfigs, resetValue, filterKey]);\n};\n\nexport default {\n useLocationFilter,\n useMultipleLocationFilters\n}","import { useSnackbar } from 'notistack';\nimport { useCallback, useState } from 'react';\n\ninterface UseApiProps {\n apiFunc: any;\n onSuccess?: any;\n onError?: any;\n enableLoading?: any;\n successMessage?: string;\n errorMessage?: string | null;\n loadingState?: any;\n showError?: boolean;\n}\n\ntype ApiResponse = {\n meta?: {\n requestStatus?: string;\n };\n error?: {\n message?: string;\n };\n payload?: any\n};\n\ntype Callback = () => void;\n\nfunction apiHelper({\n res,\n callBack,\n showError = true,\n errorCallback,\n successMessage = null,\n enqueueSnackbar,\n}: {\n res: ApiResponse;\n callBack?: Callback;\n showError?: boolean;\n errorCallback?: (error: any) => void;\n successMessage?: string | null;\n enqueueSnackbar: any;\n}): void {\n if (res?.meta?.requestStatus === \"rejected\") {\n const errorMessage = (() => {\n try {\n const msg = res.error?.message || res?.payload?.message;\n return msg ? JSON.parse(msg) : null;\n } catch {\n return { message: res.error?.message || res?.payload?.message || \"Something went wrong\" };\n }\n })();\n\n const rawError = errorMessage?.message;\n let message = \"Something went wrong\";\n\n if (typeof rawError === \"string\") {\n message = rawError.replace(\"Error:\", \"\").trim();\n } else if (rawError && typeof rawError === \"object\") {\n message = (rawError as any).message || JSON.stringify(rawError);\n } else if (rawError) {\n message = String(rawError);\n }\n console.log(\"🚀 ~ apiHelper ~ rawError:\", rawError)\n\n console.log(\"🚀 ~ apiHelper ~ showError:\", showError)\n if (showError && typeof enqueueSnackbar === 'function') {\n enqueueSnackbar(message, { variant: \"error\" });\n }\n\n if (errorCallback && typeof errorCallback === \"function\") {\n errorCallback(message);\n }\n return;\n }\n\n if (successMessage && typeof enqueueSnackbar === 'function') {\n enqueueSnackbar(successMessage);\n }\n\n if (callBack && typeof callBack === \"function\") {\n callBack();\n }\n}\n\nexport default function useApi() {\n const { enqueueSnackbar } = useSnackbar();\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState(null);\n\n const callApi = useCallback(async ({\n apiFunc,\n onSuccess,\n onError,\n successMessage,\n errorMessage,\n loadingState,\n enableLoading = true,\n showError = true,\n }: UseApiProps) => {\n if (enableLoading) setLoading(true);\n loadingState?.(true);\n let response;\n try {\n response = await apiFunc();\n } catch (err: any) {\n response = {\n meta: { requestStatus: \"rejected\" },\n error: { message: err?.message || \"Something went wrong\" }\n };\n }\n if (enableLoading) setLoading(false);\n\n loadingState?.(false);\n apiHelper(\n {\n res: response,\n callBack: () => {\n onSuccess?.(response);\n },\n errorCallback: (err) => {\n onError?.(response);\n setError(errorMessage || err);\n },\n successMessage: successMessage,\n showError,\n enqueueSnackbar,\n }\n )\n\n return { response, error }\n\n }, [enqueueSnackbar])\n\n return { callApi, loading, error };\n}\n","import { useCallback, useEffect, useState } from \"react\";\nimport { Control, FieldValues, Path, PathValue, UseFormSetValue, useWatch } from \"react-hook-form\";\nimport { getApiConfig, getToken, isApiConfigInitialized, onApiConfigReady } from \"../utils\";\nimport { getV1SettingsConfigurations, setBaseUrl } from \"../api-client/api.accounting/api\";\nimport useApi from \"./useApi\";\n\ninterface UpdateMapping {\n [key: string]: string; // Form field name -> API config key\n}\n\ninterface UseFormFieldUpdaterConfig<T extends FieldValues = any> {\n control?: Control<T>;\n setValue?: UseFormSetValue<T>;\n watch?: any;\n fieldToUpdate: UpdateMapping;\n companyField?: string;\n locationField?: string;\n departmentField?: string;\n fieldArrayName?: string;\n transformResponse?: (data: any) => any;\n customDependencies?: any[];\n getFieldState?: any;\n isUpdateAccount?: boolean;\n}\nexport function initializeApiBaseUrls(): void {\n if (!isApiConfigInitialized()) {\n console.warn('API configuration not initialized yet. Base URLs will be set when configuration is available.');\n return;\n }\n\n const config = getApiConfig();\n const baseUrl = config.backendBaseUrl;\n\n setBaseUrl(`${baseUrl}/accounting`);\n}\n\nonApiConfigReady((config) => {\n const baseUrl = config.backendBaseUrl;\n setBaseUrl(`${baseUrl}/accounting`);\n});\n\n\nexport const useFormFieldUpdater = <T extends FieldValues = any>({\n control,\n setValue,\n fieldToUpdate,\n transformResponse,\n watch,\n fieldArrayName,\n companyField = 'company_id',\n locationField = 'location_id',\n departmentField = 'department_id',\n customDependencies = [],\n getFieldState,\n isUpdateAccount = false\n}: UseFormFieldUpdaterConfig<T>) => {\n const { callApi } = useApi();\n\n\n const [initialState, setInitialState] = useState<{\n filters: { [companyField]: any;[locationField]: any;[departmentField]: any };\n values: Record<string, any>;\n } | null>(null);\n const companyPath = fieldArrayName ? `${fieldArrayName}.${companyField}` : companyField;\n const locationPath = fieldArrayName ? `${fieldArrayName}.${locationField}` : locationField;\n const departmentPath = fieldArrayName ? `${fieldArrayName}.${departmentField}` : departmentField;\n const data = watch?.(`${fieldArrayName}`) || {};\n const isDirtyCompany = getFieldState?.(companyPath)?.isDirty;\n const isDirtyLocation = getFieldState?.(locationPath)?.isDirty;\n const isDirtyDepartment = getFieldState?.(departmentPath)?.isDirty;\n const selectedCompany = data?.[companyField] || null;\n const selectedLocation = data?.[locationField] || null;\n const selectedDepartment = data?.[departmentField] || null;\n useEffect(() => {\n if (watch && !initialState) {\n const filters = {\n [companyField]: selectedCompany,\n [locationField]: selectedLocation,\n [departmentField]: selectedDepartment,\n };\n const values: Record<string, any> = {};\n Object.keys(fieldToUpdate).forEach((key) => {\n const path = fieldArrayName ? `${fieldArrayName}.${key}` : key;\n values[key] = watch(path as any);\n });\n\n setInitialState({ filters, values });\n }\n }, [watch, selectedCompany, selectedLocation, selectedDepartment, initialState, companyPath, locationPath, departmentPath, isDirtyCompany, isDirtyLocation, isDirtyDepartment]);\n\n const updateFields = useCallback((data: any, forceUpdate: boolean = false) => {\n if (!setValue || !data) return;\n\n const transformed = transformResponse ? transformResponse(data) : data;\n if (!transformed) return;\n\n Object.entries(fieldToUpdate).forEach(([sourceField, targetField]: any) => {\n const updateValue = transformed?.find((i: any) => i?.config_key == (typeof targetField == 'object' ? targetField.key : targetField));\n if (updateValue !== undefined && updateValue !== null) {\n const path = fieldArrayName ? `${fieldArrayName}.${sourceField}` : sourceField;\n\n // Check if field already has a value - skip update only if NOT force updating (edit mode protection)\n if (!forceUpdate) {\n const existingValue = watch?.(path as any);\n if (existingValue !== undefined && existingValue !== null && existingValue !== '') {\n return; // Skip updating fields that already have values\n }\n }\n\n if (typeof targetField == 'object') {\n targetField.value(updateValue?.reference_id || updateValue?.reference_text);\n } else {\n setValue(path as any, updateValue?.reference_id || updateValue?.reference_text);\n }\n }\n });\n }, [setValue, fieldToUpdate, transformResponse, fieldArrayName, watch, ...customDependencies]);\n\n\n\n const fetchAndUpdate = useCallback(async () => {\n if (!selectedCompany || !initialState) return;\n // Helper to extract ID from array/object values\n const getFilterValue = (val: any) => {\n if (Array.isArray(val)) {\n if (val.length === 0) return null;\n const firstVal = val[0];\n if (firstVal && typeof firstVal === 'object') return firstVal.id || firstVal.value || null;\n return firstVal || null;\n }\n if (val && typeof val === 'object') return val.id || val.value || null;\n return val || null;\n };\n\n const companyId = getFilterValue(selectedCompany);\n const locationId = getFilterValue(selectedLocation);\n const departmentId = getFilterValue(selectedDepartment);\n\n if (!companyId || !initialState) return;\n\n const initialFilters = {\n companyId: getFilterValue(initialState.filters[companyField]),\n locationId: getFilterValue(initialState.filters[locationField]),\n departmentId: getFilterValue(initialState.filters[departmentField]),\n };\n\n const isFilterChanged =\n initialFilters.companyId !== companyId ||\n initialFilters.locationId !== locationId ||\n initialFilters.departmentId !== departmentId;\n\n const isTargetFieldsEmpty = Object.keys(fieldToUpdate).every((key) => {\n const path = fieldArrayName ? `${fieldArrayName}.${key}` : key;\n const val = watch?.(path as any);\n return val === undefined || val === null || val === \"\";\n });\n\n if (!isFilterChanged && !isUpdateAccount && !isTargetFieldsEmpty) {\n Object.entries(initialState.values).forEach(([key, value]) => {\n const path = fieldArrayName ? `${fieldArrayName}.${key}` : key;\n setValue?.(path as any, value as any);\n });\n return;\n }\n\n const filter = `(company_id.eq=${companyId || 1}&location_id.eq=${locationId || null}&department_id.eq=${departmentId || null})`;\n\n // In edit mode (isUpdateAccount=true): only force update if user manually changed filter (isDirty)\n // In add mode: force update when filter changes\n const isUserChangedFilter = isDirtyCompany || isDirtyLocation || isDirtyDepartment;\n const shouldForceUpdate = isUpdateAccount\n ? (isFilterChanged && isUserChangedFilter) // Edit mode: only when user changed\n : isFilterChanged; // Add mode: any filter change\n\n callApi({\n apiFunc: () => getV1SettingsConfigurations({\n ...getToken(),\n filters: filter\n }),\n onSuccess: (res: any) => {\n updateFields(res?.data?.configuration_list, shouldForceUpdate);\n },\n onError: (err) => {\n console.error('Error fetching accounting settings:', err);\n }\n });\n }, [selectedCompany, selectedLocation, selectedDepartment, initialState, callApi, setValue, isDirtyCompany, isDirtyLocation, isDirtyDepartment, isUpdateAccount]);\n\n useEffect(() => {\n fetchAndUpdate();\n }, [fetchAndUpdate]);\n\n return {\n selectedCompany,\n selectedLocation,\n selectedDepartment\n };\n};\n\nexport const useAccountingSetting = ({\n fieldToUpdate,\n fieldArrayName,\n companyField = 'company_id',\n locationField = 'location_id',\n departmentField = 'department_id',\n formMethods,\n customDependencies = [],\n ...rest\n}: {\n fieldToUpdate: any;\n fieldArrayName?: string;\n companyField?: string;\n locationField?: string;\n departmentField?: string;\n setValue?: any;\n control?: any;\n formMethods?: any;\n customDependencies?: any[];\n}) => {\n const { setValue, control, watch, getFieldState } = formMethods || {};\n\n return useFormFieldUpdater({\n control,\n setValue,\n watch,\n companyField,\n locationField,\n departmentField,\n fieldToUpdate,\n fieldArrayName,\n customDependencies,\n getFieldState,\n ...rest\n });\n};"],"names":["_a","data"],"mappings":"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"}
1
+ {"version":3,"file":"useAccountSetting-D1Ze8r-T.esm.js","sources":["../../src/hooks/use-deep-memo.ts","../../src/hooks/use-permissions.ts","../../src/hooks/use-pages.ts","../../src/hooks/useLocationFilter.tsx","../../src/hooks/useApi.tsx","../../src/hooks/useAccountSetting.tsx"],"sourcesContent":["import _ from 'lodash';\nimport { useRef } from 'react';\n\nfunction useDeepMemo<T>(value: T): T {\n const ref = useRef<T>();\n\n if (!_.isEqual(ref.current, value)) {\n ref.current = value;\n }\n\n return ref.current as T;\n}\n\nexport default useDeepMemo;\n","import { useContext } from \"react\";\nimport { PermissionsContext, PermissionsContextType } from \"../contexts/permission-context\";\n\n\nexport const usePermissions = (): PermissionsContextType => {\n const context = useContext(PermissionsContext) as PermissionsContextType | null;\n\n if (!context) {\n throw new Error(\"usePermissions must be used within a PermissionsProvider\");\n }\n\n return context;\n};","import { useContext } from \"react\";\nimport { PageContext } from \"../contexts/page-context\";\nimport { MaterialTableColumnProps } from \"../components/material-table/material-table\";\n\nexport const usePages = (defaultColumns:MaterialTableColumnProps[] = []) => {\n const context = useContext(PageContext);\n\n if (!context) {\n throw new Error(\"usePages must be used within a PageProvider\");\n }\n\n if (context.initializeColumns) {\n context.initializeColumns(defaultColumns);\n }\n\n return context;\n};\n","import { useEffect, useMemo } from 'react';\n\n\nexport const useLocationFilter = ({\n selectedCompany,\n setValue,\n fieldArrayName,\n locationFieldName,\n resetValue = null,\n filterKey = '&company_id.in',\n isDirty = false\n}) => {\n\n // Reset location value when company changes\n useEffect(() => {\n if (setValue && fieldArrayName && locationFieldName && isDirty) {\n setValue(`${fieldArrayName}.${locationFieldName}`, resetValue);\n }\n }, [isDirty, setValue, fieldArrayName, locationFieldName, resetValue]);\n\n const locationFilter = useMemo(() => {\n const companyId = Array.isArray(selectedCompany) ? (selectedCompany?.length ? selectedCompany : null) : (selectedCompany || null);\n console.log(\"🚀 ~ useLocationFilter ~ companyId:\", companyId)\n\n if (companyId === null) {\n return {};\n }\n\n return {\n [filterKey]: companyId\n };\n }, [selectedCompany, filterKey]);\n\n return locationFilter;\n};\n\n\n\nexport const useMultipleLocationFilters = ({\n selectedCompany,\n setValue,\n fieldConfigs,\n resetValue = undefined,\n filterKey = '&company_id.in'\n}) => {\n return useMemo(() => {\n const companyId = selectedCompany?.length > 0 ? selectedCompany : 0;\n console.log(\"🚀 ~ useLocationFilter ~ companyId:\", companyId)\n\n // Reset all location fields\n fieldConfigs.forEach(({ fieldArrayName, locationFieldName }) => {\n if (setValue && fieldArrayName && locationFieldName) {\n setValue(`${fieldArrayName}.${locationFieldName}`, resetValue);\n }\n });\n\n return {\n [filterKey]: companyId\n };\n }, [selectedCompany, setValue, fieldConfigs, resetValue, filterKey]);\n};\n\nexport default {\n useLocationFilter,\n useMultipleLocationFilters\n}","import { useSnackbar } from 'notistack';\nimport { useCallback, useState } from 'react';\n\ninterface UseApiProps {\n apiFunc: any;\n onSuccess?: any;\n onError?: any;\n enableLoading?: any;\n successMessage?: string;\n errorMessage?: string | null;\n loadingState?: any;\n showError?: boolean;\n}\n\ntype ApiResponse = {\n meta?: {\n requestStatus?: string;\n };\n error?: {\n message?: string;\n };\n payload?: any\n};\n\ntype Callback = () => void;\n\nfunction apiHelper({\n res,\n callBack,\n showError = true,\n errorCallback,\n successMessage = null,\n enqueueSnackbar,\n}: {\n res: ApiResponse;\n callBack?: Callback;\n showError?: boolean;\n errorCallback?: (error: any) => void;\n successMessage?: string | null;\n enqueueSnackbar: any;\n}): void {\n if (res?.meta?.requestStatus === \"rejected\") {\n const errorMessage = (() => {\n try {\n const msg = res.error?.message || res?.payload?.message;\n return msg ? JSON.parse(msg) : null;\n } catch {\n return { message: res.error?.message || res?.payload?.message || \"Something went wrong\" };\n }\n })();\n\n const rawError = errorMessage?.message;\n let message = \"Something went wrong\";\n\n if (typeof rawError === \"string\") {\n message = rawError.replace(\"Error:\", \"\").trim();\n } else if (rawError && typeof rawError === \"object\") {\n message = (rawError as any).message || JSON.stringify(rawError);\n } else if (rawError) {\n message = String(rawError);\n }\n console.log(\"🚀 ~ apiHelper ~ rawError:\", rawError)\n\n console.log(\"🚀 ~ apiHelper ~ showError:\", showError)\n if (showError && typeof enqueueSnackbar === 'function') {\n enqueueSnackbar(message, { variant: \"error\" });\n }\n\n if (errorCallback && typeof errorCallback === \"function\") {\n errorCallback(message);\n }\n return;\n }\n\n if (successMessage && typeof enqueueSnackbar === 'function') {\n enqueueSnackbar(successMessage);\n }\n\n if (callBack && typeof callBack === \"function\") {\n callBack();\n }\n}\n\nexport default function useApi() {\n const { enqueueSnackbar } = useSnackbar();\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState(null);\n\n const callApi = useCallback(async ({\n apiFunc,\n onSuccess,\n onError,\n successMessage,\n errorMessage,\n loadingState,\n enableLoading = true,\n showError = true,\n }: UseApiProps) => {\n if (enableLoading) setLoading(true);\n loadingState?.(true);\n let response;\n try {\n response = await apiFunc();\n } catch (err: any) {\n response = {\n meta: { requestStatus: \"rejected\" },\n error: { message: err?.message || \"Something went wrong\" }\n };\n }\n if (enableLoading) setLoading(false);\n\n loadingState?.(false);\n apiHelper(\n {\n res: response,\n callBack: () => {\n onSuccess?.(response);\n },\n errorCallback: (err) => {\n onError?.(response);\n setError(errorMessage || err);\n },\n successMessage: successMessage,\n showError,\n enqueueSnackbar,\n }\n )\n\n return { response, error }\n\n }, [enqueueSnackbar])\n\n return { callApi, loading, error };\n}\n","import { useCallback, useEffect, useState } from \"react\";\nimport { Control, FieldValues, Path, PathValue, UseFormSetValue, useWatch } from \"react-hook-form\";\nimport { getApiConfig, getToken, isApiConfigInitialized, onApiConfigReady } from \"../utils\";\nimport { getV1SettingsConfigurations, setBaseUrl } from \"../api-client/api.accounting/api\";\nimport useApi from \"./useApi\";\n\ninterface UpdateMapping {\n [key: string]: string; // Form field name -> API config key\n}\n\ninterface UseFormFieldUpdaterConfig<T extends FieldValues = any> {\n control?: Control<T>;\n setValue?: UseFormSetValue<T>;\n watch?: any;\n fieldToUpdate: UpdateMapping;\n companyField?: string;\n locationField?: string;\n departmentField?: string;\n fieldArrayName?: string;\n transformResponse?: (data: any) => any;\n customDependencies?: any[];\n getFieldState?: any;\n isUpdateAccount?: boolean;\n}\nexport function initializeApiBaseUrls(): void {\n if (!isApiConfigInitialized()) {\n console.warn('API configuration not initialized yet. Base URLs will be set when configuration is available.');\n return;\n }\n\n const config = getApiConfig();\n const baseUrl = config.backendBaseUrl;\n\n setBaseUrl(`${baseUrl}/accounting`);\n}\n\nonApiConfigReady((config) => {\n const baseUrl = config.backendBaseUrl;\n setBaseUrl(`${baseUrl}/accounting`);\n});\n\n\nexport const useFormFieldUpdater = <T extends FieldValues = any>({\n control,\n setValue,\n fieldToUpdate,\n transformResponse,\n watch,\n fieldArrayName,\n companyField = 'company_id',\n locationField = 'location_id',\n departmentField = 'department_id',\n customDependencies = [],\n getFieldState,\n isUpdateAccount = false\n}: UseFormFieldUpdaterConfig<T>) => {\n const { callApi } = useApi();\n\n\n const [initialState, setInitialState] = useState<{\n filters: { [companyField]: any;[locationField]: any;[departmentField]: any };\n values: Record<string, any>;\n } | null>(null);\n const companyPath = fieldArrayName ? `${fieldArrayName}.${companyField}` : companyField;\n const locationPath = fieldArrayName ? `${fieldArrayName}.${locationField}` : locationField;\n const departmentPath = fieldArrayName ? `${fieldArrayName}.${departmentField}` : departmentField;\n const data = watch?.(`${fieldArrayName}`) || {};\n const isDirtyCompany = getFieldState?.(companyPath)?.isDirty;\n const isDirtyLocation = getFieldState?.(locationPath)?.isDirty;\n const isDirtyDepartment = getFieldState?.(departmentPath)?.isDirty;\n const selectedCompany = data?.[companyField] || null;\n const selectedLocation = data?.[locationField] || null;\n const selectedDepartment = data?.[departmentField] || null;\n useEffect(() => {\n if (watch && !initialState) {\n const filters = {\n [companyField]: selectedCompany,\n [locationField]: selectedLocation,\n [departmentField]: selectedDepartment,\n };\n const values: Record<string, any> = {};\n Object.keys(fieldToUpdate).forEach((key) => {\n const path = fieldArrayName ? `${fieldArrayName}.${key}` : key;\n values[key] = watch(path as any);\n });\n\n setInitialState({ filters, values });\n }\n }, [watch, selectedCompany, selectedLocation, selectedDepartment, initialState, companyPath, locationPath, departmentPath, isDirtyCompany, isDirtyLocation, isDirtyDepartment]);\n\n const updateFields = useCallback((data: any, forceUpdate: boolean = false) => {\n if (!setValue || !data) return;\n\n const transformed = transformResponse ? transformResponse(data) : data;\n if (!transformed) return;\n\n Object.entries(fieldToUpdate).forEach(([sourceField, targetField]: any) => {\n const updateValue = transformed?.find((i: any) => i?.config_key == (typeof targetField == 'object' ? targetField.key : targetField));\n if (updateValue !== undefined && updateValue !== null) {\n const path = fieldArrayName ? `${fieldArrayName}.${sourceField}` : sourceField;\n\n // Check if field already has a value - skip update only if NOT force updating (edit mode protection)\n if (!forceUpdate) {\n const existingValue = watch?.(path as any);\n if (existingValue !== undefined && existingValue !== null && existingValue !== '') {\n return; // Skip updating fields that already have values\n }\n }\n\n if (typeof targetField == 'object') {\n targetField.value(updateValue?.reference_id || updateValue?.reference_text);\n } else {\n setValue(path as any, updateValue?.reference_id || updateValue?.reference_text);\n }\n }\n });\n }, [setValue, fieldToUpdate, transformResponse, fieldArrayName, watch, ...customDependencies]);\n\n\n\n const fetchAndUpdate = useCallback(async () => {\n if (!selectedCompany || !initialState) return;\n // Helper to extract ID from array/object values\n const getFilterValue = (val: any) => {\n if (Array.isArray(val)) {\n if (val.length === 0) return null;\n const firstVal = val[0];\n if (firstVal && typeof firstVal === 'object') return firstVal.id || firstVal.value || null;\n return firstVal || null;\n }\n if (val && typeof val === 'object') return val.id || val.value || null;\n return val || null;\n };\n\n const companyId = getFilterValue(selectedCompany);\n const locationId = getFilterValue(selectedLocation);\n const departmentId = getFilterValue(selectedDepartment);\n\n if (!companyId || !initialState) return;\n\n const initialFilters = {\n companyId: getFilterValue(initialState.filters[companyField]),\n locationId: getFilterValue(initialState.filters[locationField]),\n departmentId: getFilterValue(initialState.filters[departmentField]),\n };\n\n const isFilterChanged =\n initialFilters.companyId !== companyId ||\n initialFilters.locationId !== locationId ||\n initialFilters.departmentId !== departmentId;\n\n const isTargetFieldsEmpty = Object.keys(fieldToUpdate).every((key) => {\n const path = fieldArrayName ? `${fieldArrayName}.${key}` : key;\n const val = watch?.(path as any);\n return val === undefined || val === null || val === \"\";\n });\n\n if (!isFilterChanged && !isUpdateAccount && !isTargetFieldsEmpty) {\n Object.entries(initialState.values).forEach(([key, value]) => {\n const path = fieldArrayName ? `${fieldArrayName}.${key}` : key;\n setValue?.(path as any, value as any);\n });\n return;\n }\n\n const filter = `(company_id.eq=${companyId || 1}&location_id.eq=${locationId || null}&department_id.eq=${departmentId || null})`;\n\n // In edit mode (isUpdateAccount=true): only force update if user manually changed filter (isDirty)\n // In add mode: force update when filter changes\n const isUserChangedFilter = isDirtyCompany || isDirtyLocation || isDirtyDepartment;\n const shouldForceUpdate = isUpdateAccount\n ? (isFilterChanged && isUserChangedFilter) // Edit mode: only when user changed\n : isFilterChanged; // Add mode: any filter change\n\n callApi({\n apiFunc: () => getV1SettingsConfigurations({\n ...getToken(),\n filters: filter\n }),\n onSuccess: (res: any) => {\n updateFields(res?.data?.configuration_list, shouldForceUpdate);\n },\n onError: (err) => {\n console.error('Error fetching accounting settings:', err);\n }\n });\n }, [selectedCompany, selectedLocation, selectedDepartment, initialState, callApi, setValue, isDirtyCompany, isDirtyLocation, isDirtyDepartment, isUpdateAccount]);\n\n useEffect(() => {\n fetchAndUpdate();\n }, [fetchAndUpdate]);\n\n return {\n selectedCompany,\n selectedLocation,\n selectedDepartment\n };\n};\n\nexport const useAccountingSetting = ({\n fieldToUpdate,\n fieldArrayName,\n companyField = 'company_id',\n locationField = 'location_id',\n departmentField = 'department_id',\n formMethods,\n customDependencies = [],\n ...rest\n}: {\n fieldToUpdate: any;\n fieldArrayName?: string;\n companyField?: string;\n locationField?: string;\n departmentField?: string;\n setValue?: any;\n control?: any;\n formMethods?: any;\n customDependencies?: any[];\n}) => {\n const { setValue, control, watch, getFieldState } = formMethods || {};\n\n return useFormFieldUpdater({\n control,\n setValue,\n watch,\n companyField,\n locationField,\n departmentField,\n fieldToUpdate,\n fieldArrayName,\n customDependencies,\n getFieldState,\n ...rest\n });\n};"],"names":["_a","data"],"mappings":"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"}
@@ -1,12 +1,12 @@
1
1
  import moment from "moment";
2
- import { j as useAuth } from "./useAuth-BaUSGWbL.esm.js";
2
+ import { j as useAuth } from "./useAuth-DhzbULWV.esm.js";
3
3
  import _ from "lodash";
4
4
  import { getCountries } from "libphonenumber-js";
5
5
  import { useMemo, useCallback, useState, useRef, useEffect } from "react";
6
- import { o as checkSkuAndItemName, p as checkUniqueFields } from "./common-Nn4SUfK7.esm.js";
6
+ import { o as checkSkuAndItemName, p as checkUniqueFields } from "./common-D59u5rE6.esm.js";
7
7
  import { D as DEFAULT_LANG } from "./pathname.rental-BKwgwsUV.esm.js";
8
- import { b as useERPUI } from "./ERPUIProvider-CLg_Yo12.esm.js";
9
- import { c as calculateAdditionalDiscountCrossValue } from "./translations-DJZgOpfH.esm.js";
8
+ import { b as useERPUI } from "./ERPUIProvider-CIzXMsuV.esm.js";
9
+ import { c as calculateAdditionalDiscountCrossValue } from "./translations-GFvlFdi5.esm.js";
10
10
  const createStub = (name) => () => {
11
11
  console.warn(`${name} is not implemented. This function should be provided by the consuming application.`);
12
12
  return Promise.resolve([]);
@@ -673,4 +673,4 @@ export {
673
673
  useAdditionalDiscountAutoCalc as u,
674
674
  validateFormValues as v
675
675
  };
676
- //# sourceMappingURL=useAdditionalDiscountAutoCalc-DbyTG80U.esm.js.map
676
+ //# sourceMappingURL=useAdditionalDiscountAutoCalc-PhSfzd5X.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useAdditionalDiscountAutoCalc-DbyTG80U.esm.js","sources":["../../src/hooks/common.ts","../../src/hooks/use-material-calculations.ts","../../src/hooks/useCheckSkuAndName.tsx","../../src/hooks/useUniquenessCheck.tsx","../../src/hooks/useLanguageFallback.ts","../../src/hooks/useReduxIntegration.ts","../../src/hooks/useAdditionalDiscountAutoCalc.ts"],"sourcesContent":["import moment from \"moment\";\nimport { useAuth } from \"./useAuth\";\nimport _ from \"lodash\";\n// Note: These action creators should be provided by the consuming application\n// Creating stubs for build compatibility\nconst createStub = (name: string) => () => {\n console.warn(`${name} is not implemented. This function should be provided by the consuming application.`);\n return Promise.resolve([]);\n};\n\nconst getAgreement = createStub('getAgreement');\nconst getBins = createStub('getBins');\nconst getCategoryItems = createStub('getCategoryItems');\nconst getChartOfAccounts = createStub('getChartOfAccounts');\nconst getCompanies = createStub('getCompanies');\nconst getCurrency = createStub('getCurrency');\nconst getCustomerSegments = createStub('getCustomerSegments');\nconst getDepartments = createStub('getDepartments');\nconst getDiscountedItems = createStub('getDiscountedItems');\nconst getIncoTerms = createStub('getIncoTerms');\nconst getItems = createStub('getItems');\nconst getLocation = createStub('getLocation');\nconst getParties = createStub('getParties');\nconst getPartiesIndustry = createStub('getPartiesIndustry');\nconst getPaymentTerm = createStub('getPaymentTerm');\nconst getPurchaseInvoices = createStub('getPurchaseInvoices');\nconst getPurchaseOrderReceipts = createStub('getPurchaseOrderReceipts');\nconst getPurchaseRepresentatives = createStub('getPurchaseRepresentatives');\nconst getSalesPerason = createStub('getSalesPerason');\nconst getShippingRules = createStub('getShippingRules');\nconst getTaxTemplate = createStub('getTaxTemplate');\nconst getUoms = createStub('getUoms');\nimport { getCountries } from \"libphonenumber-js\";\nexport const formatNumber = (\n num: number,\n defaultCurrencySymbol: string = \"$\"\n): string => {\n if (num >= 1_000_000) {\n return `${defaultCurrencySymbol} ${(num / 1_000_000).toFixed(1)} M`;\n } else if (num >= 100_000) {\n return `${defaultCurrencySymbol} ${(num / 100_000).toFixed(1)} L`; // L for Lakhs\n } else if (num >= 1_000) {\n return `${(num / 1_000).toFixed(1)} K`;\n } else {\n return `${defaultCurrencySymbol} ${num.toFixed(2)}`;\n }\n};\n\nexport function formateDate(date, format = \"DD-MM-YYYY\") {\n console.log(\"date\",date)\n if (!date) {\n return;\n }\n return moment(date).format(format);\n}\n\nexport function capitalizeWords(str) {\n return str\n ? str\n .split(\" \")\n .map(\n (word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()\n )\n .join(\" \")\n : \"\";\n}\n\nexport const defaultUserCurrency = () => {\n // eslint-disable-next-line\n const { user } = useAuth();\n return user?.currency_data?.symbol || \"\";\n};\nexport const valueWithCurrency = (value: any) => {\n // eslint-disable-next-line\n const { user } = useAuth();\n if (!value) {\n return;\n }\n return `${user?.currency_data?.symbol || \"\"} ${value}`;\n};\n\nexport const sortData = (data: any[], key: string, direction: string) => {\n const formatedData = _.orderBy(data, key, direction);\n return formatedData;\n};\nexport function recursiveSort(\n data: any[],\n nestedKeys: any[],\n header: string,\n direction: string\n) {\n console.log(data, nestedKeys, header, direction);\n if (!nestedKeys.length) return sortData(data, header, direction);\n const [currentKey, ...remainingKey] = nestedKeys;\n return data?.map((item) => {\n return {\n ...item,\n [currentKey]: recursiveSort(\n item[currentKey],\n remainingKey || [],\n header,\n direction\n ),\n };\n });\n}\n\nexport function formatTime(isoString: string, format: string = \"HH:mm:ss\") {\n if (!isoString) {\n return;\n }\n const date = new Date(isoString); // Parse the ISO string\n\n const padZero = (num: number) => (num < 10 ? \"0\" : \"\") + num;\n\n const hours = date.getHours();\n const minutes = date.getMinutes();\n const seconds = date.getSeconds();\n\n if (format === \"HH:mm:ss\") {\n return `${padZero(hours)}:${padZero(minutes)}:${padZero(seconds)}`;\n }\n\n if (format === \"HH:mm\") {\n return `${padZero(hours)}:${padZero(minutes)}`;\n }\n\n if (format === \"hh:mm A\") {\n const period = hours >= 12 ? \"PM\" : \"AM\";\n const twelveHour = hours % 12 || 12;\n return `${padZero(twelveHour)}:${padZero(minutes)} ${period}`;\n }\n\n return date.toTimeString().slice(0, 8); // Default: HH:mm:ss\n}\n\ntype Nullable<T> = {\n [P in keyof T]: T[P] extends object ? Nullable<T[P]> : T[P] | null;\n};\n\nexport function convertEmptyToNull<T extends Record<string, any>>(\n obj: T\n): Nullable<T> {\n return Object.entries(obj).reduce((acc, [key, value]) => {\n if (\n value === \"\" ||\n (Array.isArray(value) && value.length === 0) ||\n (typeof value === \"object\" &&\n value !== null &&\n !Array.isArray(value) && // Prevent arrays from being treated as objects\n Object.keys(value).length === 0)\n ) {\n acc[key as keyof T] = null;\n } else if (Array.isArray(value)) {\n acc[key as keyof T] = value.map((item) =>\n typeof item === \"object\" && item !== null\n ? convertEmptyToNull(item) // Recursively handle array elements\n : item\n );\n } else if (typeof value === \"object\" && value !== null) {\n acc[key as keyof T] = convertEmptyToNull(value);\n } else {\n acc[key as keyof T] = value;\n }\n return acc;\n }, {} as Nullable<T>);\n}\n\nfunction checkPattern(i: any, pattern: any[]) {\n return pattern.some((obj) => i.includes(obj));\n}\n\nexport function removeExtraKeys(data: any, extraKeys = []) {\n const pattern = [\n \"_at\",\n \"_by\",\n \"_data\",\n \"created_user\",\n \"updated_user\",\n ...extraKeys,\n ];\n for (const i in data) {\n if (checkPattern(i, pattern)) {\n delete data[i];\n } else if (typeof data[i] === \"object\" && !Array.isArray(data[i])) {\n removeExtraKeys(data[i], [\"_at\", \"_by\", \"_data\"]);\n }\n }\n\n return data;\n}\n\nexport const apiType = {\n company: getCompanies,\n items: getItems,\n currency: getCurrency,\n salesperson: getSalesPerason,\n party: getParties,\n department: getDepartments,\n location: getLocation,\n uom: getUoms,\n discountedItems: getDiscountedItems,\n taxTemplate: getTaxTemplate,\n paymentTerm: getPaymentTerm,\n incoTerms: getIncoTerms,\n shippingRules:getShippingRules,\n bins:getBins,\n agreement: getAgreement,\n accounts: getChartOfAccounts,\n invoices: getPurchaseInvoices,\n purchaseOrderReceipts: getPurchaseOrderReceipts,\n representatives: getPurchaseRepresentatives,\n industry:getPartiesIndustry,\n categoryItems:getCategoryItems,\n customerSegment:getCustomerSegments,\n countries:getCountries,\n};\n","/* eslint-disable react-hooks/exhaustive-deps */\nimport { useMemo } from 'react';\n\n// ==================== CONSTANTS ====================\nconst MATERIAL_CONSTANTS = {\n STEEL_DENSITY: 7.85,\n LENGTH_CONVERSION_FACTOR: 1000,\n TUBE_CALCULATION_FACTOR: 0.024662,\n COIL_WEIGHTS: {\n GI: 2879.95,\n HR: 2356.59,\n },\n} as const;\n\n// ==================== TYPES ====================\ntype SteelType = keyof typeof MATERIAL_CONSTANTS.COIL_WEIGHTS;\ntype TubeType = 'Round' | 'Square' | 'Rectangle';\n\ninterface BaseFormValues {\n // Board calculation fields\n face_width?: string | number;\n bending?: string | number;\n height?: string | number;\n total_width?: string | number;\n boards_thickness?: string | number;\n boards_length?: string | number;\n \n // Steel calculation fields\n steel_length?: string | number;\n steel_width?: string | number;\n steel_thickness?: string | number;\n steel_type?: SteelType;\n \n // Tube calculation fields\n tube_type?: TubeType;\n tube_od?: string | number;\n shape_width?: string | number;\n shape_height?: string | number;\n material_thickness?: string | number;\n material_length?: string | number;\n}\n\ninterface MaterialCalculations {\n totalWidth: number;\n materialUnit: number;\n boardsWeight: number;\n steelWeight: number;\n materialWeight: number;\n}\n\ninterface CalculationResult<T = number> {\n value: T;\n isValid: boolean;\n error?: string;\n}\n\n// ==================== UTILITY FUNCTIONS ====================\n/**\n * Safely parses a value to number with comprehensive validation\n */\nconst safeParseNumber = (value: string | number | undefined | null): CalculationResult<number> => {\n if (value === undefined || value === null || value === '') {\n return { value: 0, isValid: false, error: 'Empty value' };\n }\n \n const parsed = typeof value === 'string' ? parseFloat(value.trim()) : Number(value);\n \n if (isNaN(parsed)) {\n return { value: 0, isValid: false, error: 'Invalid number format' };\n }\n \n if (!isFinite(parsed)) {\n return { value: 0, isValid: false, error: 'Number is not finite' };\n }\n \n return { value: parsed, isValid: true };\n};\n\n/**\n * Validates that all provided values are positive numbers\n */\nconst validatePositiveNumbers = (...values: (string | number | undefined)[]): boolean => {\n return values.every(value => {\n const result = safeParseNumber(value);\n return result.isValid && result.value > 0;\n });\n};\n\n/**\n * Creates a memoization key from form values to optimize re-calculations\n */\nconst createMemoKey = (formValues: BaseFormValues | undefined): string => {\n if (!formValues) return 'empty';\n \n // Only include relevant fields to avoid unnecessary recalculations\n const relevantFields = [\n 'face_width', 'bending', 'height', 'total_width', 'boards_thickness', 'boards_length',\n 'steel_length', 'steel_width', 'steel_thickness', 'steel_type',\n 'tube_type', 'tube_od', 'shape_width', 'shape_height', 'material_thickness', 'material_length'\n ];\n \n return relevantFields\n .map(field => `${field}:${formValues[field as keyof BaseFormValues] ?? ''}`)\n .join('|');\n};\n\n// ==================== CALCULATION FUNCTIONS ====================\n/**\n * Calculates the total width for boards costing\n * Formula: ((height + bending) * 2) + face_width\n */\nconst calculateBoardsTotalWidth = (formValues: BaseFormValues): CalculationResult<number> => {\n const { face_width, bending, height } = formValues;\n \n if (!validatePositiveNumbers(face_width, bending, height)) {\n return { value: 0, isValid: false, error: 'Invalid input values for boards total width calculation' };\n }\n \n const faceWidthResult = safeParseNumber(face_width);\n const bendingResult = safeParseNumber(bending);\n const heightResult = safeParseNumber(height);\n \n if (![faceWidthResult, bendingResult, heightResult].every(r => r.isValid)) {\n return { value: 0, isValid: false, error: 'Failed to parse input values' };\n }\n \n const totalWidth = ((heightResult.value + bendingResult.value) * 2) + faceWidthResult.value;\n \n return { value: totalWidth, isValid: true };\n};\n\n/**\n * Calculates the weight of boards\n * Formula: (total_width * thickness * (length / 1000)) * 7.85\n */\nconst calculateBoardsWeight = (formValues: BaseFormValues): CalculationResult<number> => {\n const { total_width, boards_thickness, boards_length } = formValues;\n \n if (!validatePositiveNumbers(total_width, boards_thickness, boards_length)) {\n return { value: 0, isValid: false, error: 'Invalid input values for boards weight calculation' };\n }\n \n const totalWidthResult = safeParseNumber(total_width);\n const thicknessResult = safeParseNumber(boards_thickness);\n const lengthResult = safeParseNumber(boards_length);\n \n if (![totalWidthResult, thicknessResult, lengthResult].every(r => r.isValid)) {\n return { value: 0, isValid: false, error: 'Failed to parse input values' };\n }\n \n const weight = (totalWidthResult.value * thicknessResult.value * \n (lengthResult.value / MATERIAL_CONSTANTS.LENGTH_CONVERSION_FACTOR)) * \n MATERIAL_CONSTANTS.STEEL_DENSITY;\n \n return { value: weight, isValid: true };\n};\n\n/**\n * Calculates the weight of steel\n * Formula: (length * width * thickness * 7.85) / 1000\n */\nconst calculateSteelWeight = (formValues: BaseFormValues): CalculationResult<number> => {\n const { steel_length, steel_width, steel_thickness } = formValues;\n \n if (!validatePositiveNumbers(steel_length, steel_width, steel_thickness)) {\n return { value: 0, isValid: false, error: 'Invalid input values for steel weight calculation' };\n }\n \n const lengthResult = safeParseNumber(steel_length);\n const widthResult = safeParseNumber(steel_width);\n const thicknessResult = safeParseNumber(steel_thickness);\n \n if (![lengthResult, widthResult, thicknessResult].every(r => r.isValid)) {\n return { value: 0, isValid: false, error: 'Failed to parse input values' };\n }\n \n const weight = (lengthResult.value * widthResult.value * thicknessResult.value * \n MATERIAL_CONSTANTS.STEEL_DENSITY) / MATERIAL_CONSTANTS.LENGTH_CONVERSION_FACTOR;\n \n return { value: weight, isValid: true };\n};\n\n/**\n * Gets the material unit weight based on steel type\n */\nconst calculateMaterialUnit = (formValues: BaseFormValues): CalculationResult<number> => {\n const { steel_type } = formValues;\n \n if (!steel_type) {\n return { value: 0, isValid: false, error: 'Steel type not specified' };\n }\n \n if (!(steel_type in MATERIAL_CONSTANTS.COIL_WEIGHTS)) {\n return { value: 0, isValid: false, error: `Unsupported steel type: ${steel_type}` };\n }\n \n const weight = MATERIAL_CONSTANTS.COIL_WEIGHTS[steel_type];\n return { value: weight, isValid: true };\n};\n\n/**\n * Calculates material weight based on tube type and dimensions\n * Supports Round, Square, and Rectangle tube types\n */\nconst calculateTubeMaterialWeight = (formValues: BaseFormValues): CalculationResult<number> => {\n const { tube_type, tube_od, shape_width, shape_height, material_thickness, material_length } = formValues;\n \n if (!tube_type) {\n return { value: 0, isValid: false, error: 'Tube type not specified' };\n }\n \n const thicknessResult = safeParseNumber(material_thickness);\n const lengthResult = safeParseNumber(material_length);\n \n if (!thicknessResult.isValid || !lengthResult.isValid) {\n return { value: 0, isValid: false, error: 'Invalid thickness or length values' };\n }\n \n let weight = 0;\n \n switch (tube_type) {\n case 'Round': {\n const odResult = safeParseNumber(tube_od);\n if (!odResult.isValid || odResult.value <= thicknessResult.value) {\n return { value: 0, isValid: false, error: 'Invalid outer diameter for round tube' };\n }\n \n weight = (odResult.value - thicknessResult.value) * thicknessResult.value * \n MATERIAL_CONSTANTS.TUBE_CALCULATION_FACTOR * lengthResult.value;\n break;\n }\n \n case 'Square':\n case 'Rectangle': {\n const widthResult = safeParseNumber(shape_width);\n const heightResult = safeParseNumber(shape_height);\n \n if (!widthResult.isValid || !heightResult.isValid) {\n return { value: 0, isValid: false, error: 'Invalid width or height for rectangular tube' };\n }\n \n const perimeter = 2 * (widthResult.value + heightResult.value);\n weight = (((perimeter / Math.PI) - thicknessResult.value) * thicknessResult.value * \n MATERIAL_CONSTANTS.TUBE_CALCULATION_FACTOR) * lengthResult.value;\n break;\n }\n \n default:\n return { value: 0, isValid: false, error: `Unsupported tube type: ${tube_type}` };\n }\n \n return { value: Math.max(0, weight), isValid: true };\n};\n\n// ==================== MAIN HOOK ====================\n/**\n * Custom hook for optimized material calculations with comprehensive error handling\n * and performance optimization through memoization\n */\nexport const useMaterialCalculations = (formValues?: BaseFormValues): MaterialCalculations => {\n const calculations = useMemo(() => {\n if (!formValues) {\n return {\n totalWidth: 0,\n materialUnit: 0,\n boardsWeight: 0,\n steelWeight: 0,\n materialWeight: 0,\n };\n }\n \n // Calculate all values with error handling\n const totalWidthResult = calculateBoardsTotalWidth(formValues);\n const materialUnitResult = calculateMaterialUnit(formValues);\n const boardsWeightResult = calculateBoardsWeight(formValues);\n const steelWeightResult = calculateSteelWeight(formValues);\n const materialWeightResult = calculateTubeMaterialWeight(formValues);\n \n // Optional: Log errors in development\n if (process.env.NODE_ENV === 'development') {\n [totalWidthResult, materialUnitResult, boardsWeightResult, steelWeightResult, materialWeightResult]\n .filter(result => !result.isValid && result.error)\n .forEach(result => console.warn('Calculation warning:', result.error));\n }\n \n return {\n totalWidth: totalWidthResult.value,\n materialUnit: materialUnitResult.value,\n boardsWeight: boardsWeightResult.value,\n steelWeight: steelWeightResult.value,\n materialWeight: materialWeightResult.value,\n };\n }, [createMemoKey(formValues)]); // Optimized dependency to prevent unnecessary recalculations\n \n return calculations;\n};\n\n// ==================== ADDITIONAL UTILITIES ====================\n/**\n * Utility function to validate form values before calculations\n */\nexport const validateFormValues = (formValues: BaseFormValues): { isValid: boolean; errors: string[] } => {\n const errors: string[] = [];\n const { tube_type, steel_type } = formValues;\n \n // Validate steel type if provided\n if (steel_type && !(steel_type in MATERIAL_CONSTANTS.COIL_WEIGHTS)) {\n errors.push(`Invalid steel type: ${steel_type}`);\n }\n \n // Validate tube type if provided\n if (tube_type && !['Round', 'Square', 'Rectangle'].includes(tube_type)) {\n errors.push(`Invalid tube type: ${tube_type}`);\n }\n \n return { isValid: errors.length === 0, errors };\n};\n\n/**\n * Get available steel types for form validation\n */\nexport const getAvailableSteelTypes = (): SteelType[] => {\n return Object.keys(MATERIAL_CONSTANTS.COIL_WEIGHTS) as SteelType[];\n};\n\n/**\n * Get available tube types for form validation\n */\nexport const getAvailableTubeTypes = (): TubeType[] => {\n return ['Round', 'Square', 'Rectangle'];\n};\n\nexport default {\n useMaterialCalculations,\n validateFormValues,\n getAvailableSteelTypes,\n getAvailableTubeTypes,\n MATERIAL_CONSTANTS,\n};\nexport type {\n BaseFormValues,\n MaterialCalculations,\n SteelType,\n TubeType,\n CalculationResult,\n};","import { useCallback } from 'react';\nimport { checkSkuAndItemName } from '../utils/common';\n\nexport interface IUseNameSkuUniquenessCheckProps {\n fieldPrefix: string;\n formMethods: any;\n data?: any;\n}\n\nexport const useNameSkuUniquenessCheck = ({\n fieldPrefix,\n formMethods,\n data,\n}: IUseNameSkuUniquenessCheckProps) => {\n const { watch=()=>{}, setError=()=>{} } = formMethods||{};\n const formValues = watch(fieldPrefix);\n\n const namePrev = data?.name;\n const skuPrev= data?.sku\n const checkNameAndSkuUniqueness = useCallback(async () => {\n let isUnique=true; \n\n try {\n if(namePrev===formValues?.name && skuPrev===formValues?.sku) return true;\n const response = await checkSkuAndItemName({\n name: formValues?.name,\n sku: formValues?.sku,\n ...(data?.id && { id: data?.id }),\n });\n if (response.name) {\n setError(`${fieldPrefix}.name`, {\n message: 'Name already exists',\n type: 'manual',\n ref: `${fieldPrefix}.name`,\n });\n isUnique=false;\n }\n\n if (response.sku) {\n setError(`${fieldPrefix}.sku`, {\n message: 'SKU already exists',\n type: 'manual',\n ref: `${fieldPrefix}.sku`,\n });\n isUnique=false;\n }\n\n return isUnique;\n } catch (error) {\n console.error('Uniqueness check failed:', error);\n return isUnique;\n }\n //eslint-disable-next-line\n }, [formValues?.name, formValues?.sku, setError]);\n\n return { checkNameAndSkuUniqueness };\n};\n\nexport default useNameSkuUniquenessCheck;\n","import { useMemo } from 'react'\nimport { checkUniqueFields } from '../utils/common'\n\nexport default function useUniquenessCheck({ fieldPrefix, formMethods, data = {}, fields = [] }) {\n\tconst { watch = () => { }, setError = () => { }, formState = {} } = formMethods || {}\n\n\tconst formValues = watch(fieldPrefix)\n\n\t// Stable reference\n\tconst previous = useMemo(() => data || {}, [data])\n\n\tconst checkUniqueness = async () => {\n\t\tlet isUnique = true\n\n\t\ttry {\n\t\t\t// Skip check if no changes\n\t\t\tconst nothingChanged = fields.every((field) => previous[field] === formValues?.[field])\n\n\t\t\tif (nothingChanged) return true\n\n\t\t\t// Build payload\n\t\t\tconst payload = {}\n\t\t\tfields.forEach((field) => (payload[field] = formValues?.[field]))\n\n\t\t\tif (data?.id) payload.id = data.id\n\n\t\t\t// API call\n\t\t\tconst response = await checkUniqueFields(payload)\n\n\t\t\t// Loop through API response\n\t\t\tfor (const [field, exists] of Object.entries(response)) {\n\t\t\t\tif (exists) {\n\t\t\t\t\tconst errorPath = `${fieldPrefix}.${field}`\n\t\t\t\t\tsetError(errorPath, {\n\t\t\t\t\t\ttype: 'manual',\n\t\t\t\t\t\tmessage: `${field.replace(/_/g, ' ').toLowerCase()} already exists`,\n\t\t\t\t\t})\n\n\t\t\t\t\tisUnique = false\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconsole.log('Errors now:', formState.errors)\n\n\t\t\treturn isUnique\n\t\t} catch (error) {\n\t\t\tconsole.error('Uniqueness check failed:', error)\n\t\t\treturn isUnique\n\t\t}\n\t}\n\n\treturn { checkUniqueness }\n}\n","import { useState } from 'react';\nimport { DEFAULT_LANG } from '../constants/all-language';\n\ninterface ILanguage {\n label: string;\n code: string;\n direction: string;\n}\n\n// Configuration for fallback behavior\ninterface FallbackConfig {\n fallbackOrder?: string[];\n enableConsoleWarnings?: boolean;\n retryOnError?: boolean;\n maxRetries?: number;\n}\n\n// Updated fallback order with English first\nconst DEFAULT_FALLBACK_CONFIG: Required<FallbackConfig> = {\n fallbackOrder: ['en', 'en-US', DEFAULT_LANG], // English first\n enableConsoleWarnings: true,\n retryOnError: false,\n maxRetries: 3,\n};\n\nexport const useLanguageFallback = (config: FallbackConfig = {}) => {\n const finalConfig = { ...DEFAULT_FALLBACK_CONFIG, ...config };\n const [retryCount, setRetryCount] = useState(0);\n\n // Create English fallback language object\n const createEnglishFallback = (): ILanguage => ({\n code: 'en',\n label: 'English',\n direction: 'ltr'\n });\n\n // Find the best available language with fallback logic\n const findBestAvailableLanguage = (\n languages: ILanguage[], \n preferredCode?: string\n ): ILanguage | null => {\n if (!languages || languages.length === 0) {\n if (finalConfig.enableConsoleWarnings) {\n console.warn('No languages available for fallback selection, using English');\n }\n return createEnglishFallback();\n }\n\n // First try the preferred language if provided\n if (preferredCode) {\n const preferred = languages.find(lang => lang.code === preferredCode);\n if (preferred) return preferred;\n \n if (finalConfig.enableConsoleWarnings) {\n console.warn(`Preferred language \"${preferredCode}\" not found, trying fallbacks`);\n }\n }\n\n // Try fallback languages in order (English first)\n for (const fallbackCode of finalConfig.fallbackOrder) {\n const fallback = languages.find(lang => lang.code === fallbackCode);\n if (fallback) {\n if (finalConfig.enableConsoleWarnings && preferredCode && preferredCode !== fallbackCode) {\n console.warn(`Using fallback language: \"${fallbackCode}\" instead of \"${preferredCode}\"`);\n }\n return fallback;\n }\n }\n\n // If no fallbacks found, return English or first available language\n const englishLang = languages.find(lang => lang.code === 'en');\n if (englishLang) {\n if (finalConfig.enableConsoleWarnings) {\n console.warn('Using English as ultimate fallback');\n }\n return englishLang;\n }\n\n // Last resort - return first available language\n if (finalConfig.enableConsoleWarnings) {\n console.warn('No English fallback found, using first available language');\n }\n return languages[0] || createEnglishFallback();\n };\n\n // Create a fallback language object when API fails - always English\n const createEmergencyFallback = (): ILanguage => {\n return createEnglishFallback();\n };\n\n // Validate if a language code exists in the available languages\n const validateLanguageCode = (languages: ILanguage[], code: string): boolean => {\n return languages.some(lang => lang.code === code);\n };\n\n // Get saved language from localStorage with validation\n const getSavedLanguage = (languages: ILanguage[]): string | null => {\n const saved = localStorage.getItem('_language');\n if (!saved) return null;\n \n // Validate saved language exists in available languages\n if (validateLanguageCode(languages, saved)) {\n return saved;\n }\n \n if (finalConfig.enableConsoleWarnings) {\n console.warn(`Saved language \"${saved}\" is no longer available, will use English fallback`);\n }\n return null;\n };\n\n // Ensure English is always available in languages array\n const ensureEnglishAvailable = (languages: ILanguage[]): ILanguage[] => {\n const hasEnglish = languages.some(lang => lang.code === 'en');\n if (!hasEnglish) {\n return [createEnglishFallback(), ...languages];\n }\n return languages;\n };\n\n // Retry mechanism for failed language fetches\n const shouldRetry = (): boolean => {\n return finalConfig.retryOnError && retryCount < finalConfig.maxRetries;\n };\n\n const incrementRetry = () => {\n setRetryCount(prev => prev + 1);\n };\n\n const resetRetry = () => {\n setRetryCount(0);\n };\n\n return {\n findBestAvailableLanguage,\n createEmergencyFallback,\n createEnglishFallback,\n validateLanguageCode,\n getSavedLanguage,\n ensureEnglishAvailable,\n shouldRetry,\n incrementRetry,\n resetRetry,\n retryCount,\n config: finalConfig,\n };\n};\n\n// Additional utility hook for language state management\nexport const useLanguageState = () => {\n const [isInitialized, setIsInitialized] = useState(false);\n const [hasError, setHasError] = useState(false);\n const [errorMessage, setErrorMessage] = useState<string | null>(null);\n\n const markInitialized = () => setIsInitialized(true);\n const setError = (error: string) => {\n setHasError(true);\n setErrorMessage(error);\n };\n const clearError = () => {\n setHasError(false);\n setErrorMessage(null);\n };\n\n return {\n isInitialized,\n hasError,\n errorMessage,\n markInitialized,\n setError,\n clearError,\n };\n};\n\nexport default {\n useLanguageFallback,\n useLanguageState,\n};\n\nexport type { ILanguage, FallbackConfig };\n\n","import { useERPUI } from '../components/providers/ERPUIProvider';\n\n/**\n * Hook to determine Redux integration status and provide conditional Redux usage\n */\nexport const useReduxIntegration = () => {\n const { useRedux, apiClient } = useERPUI();\n \n // Helper function to conditionally use Redux hooks\n const useConditionalRedux = <T>(\n reduxHook: () => T,\n fallbackValue: T\n ): T => {\n if (!useRedux) {\n return fallbackValue;\n }\n \n try {\n return reduxHook();\n } catch (error) {\n console.warn('Redux hook failed, falling back to default value:', error);\n return fallbackValue;\n }\n };\n \n // Helper function to conditionally dispatch Redux actions\n const conditionalDispatch = (action: any) => {\n if (!useRedux) {\n console.warn('Redux not enabled, cannot dispatch action:', action);\n return Promise.resolve();\n }\n \n try {\n const { useAppDispatch } = require('../redux/hooks');\n const dispatch = useAppDispatch();\n return dispatch(action);\n } catch (error) {\n console.error('Failed to dispatch Redux action:', error);\n return Promise.reject(error);\n }\n };\n \n return {\n useRedux,\n apiClient,\n useConditionalRedux,\n conditionalDispatch,\n };\n};","import { useEffect, useRef } from 'react';\n\nimport { calculateAdditionalDiscountCrossValue } from '../utils/calculation';\n\nfunction computeTotal(\n items: any[],\n discountOn: string | null | undefined,\n netAmountField = 'net_amount',\n grossAmountField = 'gross_amount'\n): number {\n const field = discountOn === 'Gross Amount' ? grossAmountField : netAmountField;\n return items.reduce((sum: number, item: any) => sum + Number(item[field] || 0), 0);\n}\n\nexport interface AdditionalDiscountAutoCalcConfig {\n items: any[];\n discountOn: string | null | undefined;\n percentage: number | string;\n amount: number | string;\n setValue: (name: string, value: any) => void;\n fieldConfig: {\n percentageField: string;\n amountField: string;\n };\n netAmountField?: string;\n grossAmountField?: string;\n\n /**\n * When true, auto-disabled logic is bypassed.\n * Caller explicitly controls field disabled states\n * via disablePercentageField / disableAmountField.\n * Auto sync (value calculation) still works regardless.\n */\n manualDisabled?: boolean;\n disablePercentageField?: boolean;\n disableAmountField?: boolean;\n}\n\nexport function useAdditionalDiscountAutoCalc(config: AdditionalDiscountAutoCalcConfig) {\n const lastChangedBy = useRef<'user' | 'auto'>('user');\n const lastUserEdited = useRef<'percentage' | 'amount' | null>(null);\n\n // Percentage → Amount\n useEffect(() => {\n if (lastChangedBy.current === 'auto') {\n lastChangedBy.current = 'user';\n return;\n }\n if (!config.discountOn) return;\n const pct = Number(config.percentage);\n const amt = Number(config.amount);\n const total = computeTotal(config.items, config.discountOn, config.netAmountField, config.grossAmountField);\n\n if (!pct && amt && lastUserEdited.current === 'percentage') {\n config.setValue(config.fieldConfig.amountField, 0);\n lastUserEdited.current = null;\n return;\n }\n if (!pct || !total) return;\n\n lastUserEdited.current = 'percentage';\n lastChangedBy.current = 'auto';\n config.setValue(config.fieldConfig.amountField,\n calculateAdditionalDiscountCrossValue(pct, 'percentage', total));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [config.percentage, config.discountOn]);\n\n // Amount → Percentage\n useEffect(() => {\n if (lastChangedBy.current === 'auto') {\n lastChangedBy.current = 'user';\n return;\n }\n if (!config.discountOn) return;\n const pct = Number(config.percentage);\n const amt = Number(config.amount);\n const total = computeTotal(config.items, config.discountOn, config.netAmountField, config.grossAmountField);\n\n if (!amt && pct && lastUserEdited.current === 'amount') {\n config.setValue(config.fieldConfig.percentageField, 0);\n lastUserEdited.current = null;\n return;\n }\n if (!amt || !total) return;\n\n lastUserEdited.current = 'amount';\n lastChangedBy.current = 'auto';\n config.setValue(config.fieldConfig.percentageField,\n calculateAdditionalDiscountCrossValue(amt, 'amount', total));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [config.amount, config.discountOn]);\n\n const autoPercentageDisabled = !config.discountOn || (\n Boolean(Number(config.amount)) && lastUserEdited.current !== 'percentage'\n );\n const autoAmountDisabled = !config.discountOn || (\n Boolean(Number(config.percentage)) && lastUserEdited.current !== 'amount'\n );\n\n const isPercentageDisabled = config.manualDisabled\n ? (config.disablePercentageField ?? false)\n : autoPercentageDisabled;\n const isAmountDisabled = config.manualDisabled\n ? (config.disableAmountField ?? false)\n : autoAmountDisabled;\n\n const totalAmount = config.discountOn\n ? computeTotal(config.items, config.discountOn, config.netAmountField, config.grossAmountField)\n : 0;\n const isAmountExceeded = !!(config.discountOn && totalAmount > 0 && Number(config.amount) > totalAmount);\n const isPercentageExceeded = Number(config.percentage) > 100;\n\n return { isPercentageDisabled, isAmountDisabled, isAmountExceeded, isPercentageExceeded };\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useAdditionalDiscountAutoCalc-PhSfzd5X.esm.js","sources":["../../src/hooks/common.ts","../../src/hooks/use-material-calculations.ts","../../src/hooks/useCheckSkuAndName.tsx","../../src/hooks/useUniquenessCheck.tsx","../../src/hooks/useLanguageFallback.ts","../../src/hooks/useReduxIntegration.ts","../../src/hooks/useAdditionalDiscountAutoCalc.ts"],"sourcesContent":["import moment from \"moment\";\nimport { useAuth } from \"./useAuth\";\nimport _ from \"lodash\";\n// Note: These action creators should be provided by the consuming application\n// Creating stubs for build compatibility\nconst createStub = (name: string) => () => {\n console.warn(`${name} is not implemented. This function should be provided by the consuming application.`);\n return Promise.resolve([]);\n};\n\nconst getAgreement = createStub('getAgreement');\nconst getBins = createStub('getBins');\nconst getCategoryItems = createStub('getCategoryItems');\nconst getChartOfAccounts = createStub('getChartOfAccounts');\nconst getCompanies = createStub('getCompanies');\nconst getCurrency = createStub('getCurrency');\nconst getCustomerSegments = createStub('getCustomerSegments');\nconst getDepartments = createStub('getDepartments');\nconst getDiscountedItems = createStub('getDiscountedItems');\nconst getIncoTerms = createStub('getIncoTerms');\nconst getItems = createStub('getItems');\nconst getLocation = createStub('getLocation');\nconst getParties = createStub('getParties');\nconst getPartiesIndustry = createStub('getPartiesIndustry');\nconst getPaymentTerm = createStub('getPaymentTerm');\nconst getPurchaseInvoices = createStub('getPurchaseInvoices');\nconst getPurchaseOrderReceipts = createStub('getPurchaseOrderReceipts');\nconst getPurchaseRepresentatives = createStub('getPurchaseRepresentatives');\nconst getSalesPerason = createStub('getSalesPerason');\nconst getShippingRules = createStub('getShippingRules');\nconst getTaxTemplate = createStub('getTaxTemplate');\nconst getUoms = createStub('getUoms');\nimport { getCountries } from \"libphonenumber-js\";\nexport const formatNumber = (\n num: number,\n defaultCurrencySymbol: string = \"$\"\n): string => {\n if (num >= 1_000_000) {\n return `${defaultCurrencySymbol} ${(num / 1_000_000).toFixed(1)} M`;\n } else if (num >= 100_000) {\n return `${defaultCurrencySymbol} ${(num / 100_000).toFixed(1)} L`; // L for Lakhs\n } else if (num >= 1_000) {\n return `${(num / 1_000).toFixed(1)} K`;\n } else {\n return `${defaultCurrencySymbol} ${num.toFixed(2)}`;\n }\n};\n\nexport function formateDate(date, format = \"DD-MM-YYYY\") {\n console.log(\"date\",date)\n if (!date) {\n return;\n }\n return moment(date).format(format);\n}\n\nexport function capitalizeWords(str) {\n return str\n ? str\n .split(\" \")\n .map(\n (word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()\n )\n .join(\" \")\n : \"\";\n}\n\nexport const defaultUserCurrency = () => {\n // eslint-disable-next-line\n const { user } = useAuth();\n return user?.currency_data?.symbol || \"\";\n};\nexport const valueWithCurrency = (value: any) => {\n // eslint-disable-next-line\n const { user } = useAuth();\n if (!value) {\n return;\n }\n return `${user?.currency_data?.symbol || \"\"} ${value}`;\n};\n\nexport const sortData = (data: any[], key: string, direction: string) => {\n const formatedData = _.orderBy(data, key, direction);\n return formatedData;\n};\nexport function recursiveSort(\n data: any[],\n nestedKeys: any[],\n header: string,\n direction: string\n) {\n console.log(data, nestedKeys, header, direction);\n if (!nestedKeys.length) return sortData(data, header, direction);\n const [currentKey, ...remainingKey] = nestedKeys;\n return data?.map((item) => {\n return {\n ...item,\n [currentKey]: recursiveSort(\n item[currentKey],\n remainingKey || [],\n header,\n direction\n ),\n };\n });\n}\n\nexport function formatTime(isoString: string, format: string = \"HH:mm:ss\") {\n if (!isoString) {\n return;\n }\n const date = new Date(isoString); // Parse the ISO string\n\n const padZero = (num: number) => (num < 10 ? \"0\" : \"\") + num;\n\n const hours = date.getHours();\n const minutes = date.getMinutes();\n const seconds = date.getSeconds();\n\n if (format === \"HH:mm:ss\") {\n return `${padZero(hours)}:${padZero(minutes)}:${padZero(seconds)}`;\n }\n\n if (format === \"HH:mm\") {\n return `${padZero(hours)}:${padZero(minutes)}`;\n }\n\n if (format === \"hh:mm A\") {\n const period = hours >= 12 ? \"PM\" : \"AM\";\n const twelveHour = hours % 12 || 12;\n return `${padZero(twelveHour)}:${padZero(minutes)} ${period}`;\n }\n\n return date.toTimeString().slice(0, 8); // Default: HH:mm:ss\n}\n\ntype Nullable<T> = {\n [P in keyof T]: T[P] extends object ? Nullable<T[P]> : T[P] | null;\n};\n\nexport function convertEmptyToNull<T extends Record<string, any>>(\n obj: T\n): Nullable<T> {\n return Object.entries(obj).reduce((acc, [key, value]) => {\n if (\n value === \"\" ||\n (Array.isArray(value) && value.length === 0) ||\n (typeof value === \"object\" &&\n value !== null &&\n !Array.isArray(value) && // Prevent arrays from being treated as objects\n Object.keys(value).length === 0)\n ) {\n acc[key as keyof T] = null;\n } else if (Array.isArray(value)) {\n acc[key as keyof T] = value.map((item) =>\n typeof item === \"object\" && item !== null\n ? convertEmptyToNull(item) // Recursively handle array elements\n : item\n );\n } else if (typeof value === \"object\" && value !== null) {\n acc[key as keyof T] = convertEmptyToNull(value);\n } else {\n acc[key as keyof T] = value;\n }\n return acc;\n }, {} as Nullable<T>);\n}\n\nfunction checkPattern(i: any, pattern: any[]) {\n return pattern.some((obj) => i.includes(obj));\n}\n\nexport function removeExtraKeys(data: any, extraKeys = []) {\n const pattern = [\n \"_at\",\n \"_by\",\n \"_data\",\n \"created_user\",\n \"updated_user\",\n ...extraKeys,\n ];\n for (const i in data) {\n if (checkPattern(i, pattern)) {\n delete data[i];\n } else if (typeof data[i] === \"object\" && !Array.isArray(data[i])) {\n removeExtraKeys(data[i], [\"_at\", \"_by\", \"_data\"]);\n }\n }\n\n return data;\n}\n\nexport const apiType = {\n company: getCompanies,\n items: getItems,\n currency: getCurrency,\n salesperson: getSalesPerason,\n party: getParties,\n department: getDepartments,\n location: getLocation,\n uom: getUoms,\n discountedItems: getDiscountedItems,\n taxTemplate: getTaxTemplate,\n paymentTerm: getPaymentTerm,\n incoTerms: getIncoTerms,\n shippingRules:getShippingRules,\n bins:getBins,\n agreement: getAgreement,\n accounts: getChartOfAccounts,\n invoices: getPurchaseInvoices,\n purchaseOrderReceipts: getPurchaseOrderReceipts,\n representatives: getPurchaseRepresentatives,\n industry:getPartiesIndustry,\n categoryItems:getCategoryItems,\n customerSegment:getCustomerSegments,\n countries:getCountries,\n};\n","/* eslint-disable react-hooks/exhaustive-deps */\nimport { useMemo } from 'react';\n\n// ==================== CONSTANTS ====================\nconst MATERIAL_CONSTANTS = {\n STEEL_DENSITY: 7.85,\n LENGTH_CONVERSION_FACTOR: 1000,\n TUBE_CALCULATION_FACTOR: 0.024662,\n COIL_WEIGHTS: {\n GI: 2879.95,\n HR: 2356.59,\n },\n} as const;\n\n// ==================== TYPES ====================\ntype SteelType = keyof typeof MATERIAL_CONSTANTS.COIL_WEIGHTS;\ntype TubeType = 'Round' | 'Square' | 'Rectangle';\n\ninterface BaseFormValues {\n // Board calculation fields\n face_width?: string | number;\n bending?: string | number;\n height?: string | number;\n total_width?: string | number;\n boards_thickness?: string | number;\n boards_length?: string | number;\n \n // Steel calculation fields\n steel_length?: string | number;\n steel_width?: string | number;\n steel_thickness?: string | number;\n steel_type?: SteelType;\n \n // Tube calculation fields\n tube_type?: TubeType;\n tube_od?: string | number;\n shape_width?: string | number;\n shape_height?: string | number;\n material_thickness?: string | number;\n material_length?: string | number;\n}\n\ninterface MaterialCalculations {\n totalWidth: number;\n materialUnit: number;\n boardsWeight: number;\n steelWeight: number;\n materialWeight: number;\n}\n\ninterface CalculationResult<T = number> {\n value: T;\n isValid: boolean;\n error?: string;\n}\n\n// ==================== UTILITY FUNCTIONS ====================\n/**\n * Safely parses a value to number with comprehensive validation\n */\nconst safeParseNumber = (value: string | number | undefined | null): CalculationResult<number> => {\n if (value === undefined || value === null || value === '') {\n return { value: 0, isValid: false, error: 'Empty value' };\n }\n \n const parsed = typeof value === 'string' ? parseFloat(value.trim()) : Number(value);\n \n if (isNaN(parsed)) {\n return { value: 0, isValid: false, error: 'Invalid number format' };\n }\n \n if (!isFinite(parsed)) {\n return { value: 0, isValid: false, error: 'Number is not finite' };\n }\n \n return { value: parsed, isValid: true };\n};\n\n/**\n * Validates that all provided values are positive numbers\n */\nconst validatePositiveNumbers = (...values: (string | number | undefined)[]): boolean => {\n return values.every(value => {\n const result = safeParseNumber(value);\n return result.isValid && result.value > 0;\n });\n};\n\n/**\n * Creates a memoization key from form values to optimize re-calculations\n */\nconst createMemoKey = (formValues: BaseFormValues | undefined): string => {\n if (!formValues) return 'empty';\n \n // Only include relevant fields to avoid unnecessary recalculations\n const relevantFields = [\n 'face_width', 'bending', 'height', 'total_width', 'boards_thickness', 'boards_length',\n 'steel_length', 'steel_width', 'steel_thickness', 'steel_type',\n 'tube_type', 'tube_od', 'shape_width', 'shape_height', 'material_thickness', 'material_length'\n ];\n \n return relevantFields\n .map(field => `${field}:${formValues[field as keyof BaseFormValues] ?? ''}`)\n .join('|');\n};\n\n// ==================== CALCULATION FUNCTIONS ====================\n/**\n * Calculates the total width for boards costing\n * Formula: ((height + bending) * 2) + face_width\n */\nconst calculateBoardsTotalWidth = (formValues: BaseFormValues): CalculationResult<number> => {\n const { face_width, bending, height } = formValues;\n \n if (!validatePositiveNumbers(face_width, bending, height)) {\n return { value: 0, isValid: false, error: 'Invalid input values for boards total width calculation' };\n }\n \n const faceWidthResult = safeParseNumber(face_width);\n const bendingResult = safeParseNumber(bending);\n const heightResult = safeParseNumber(height);\n \n if (![faceWidthResult, bendingResult, heightResult].every(r => r.isValid)) {\n return { value: 0, isValid: false, error: 'Failed to parse input values' };\n }\n \n const totalWidth = ((heightResult.value + bendingResult.value) * 2) + faceWidthResult.value;\n \n return { value: totalWidth, isValid: true };\n};\n\n/**\n * Calculates the weight of boards\n * Formula: (total_width * thickness * (length / 1000)) * 7.85\n */\nconst calculateBoardsWeight = (formValues: BaseFormValues): CalculationResult<number> => {\n const { total_width, boards_thickness, boards_length } = formValues;\n \n if (!validatePositiveNumbers(total_width, boards_thickness, boards_length)) {\n return { value: 0, isValid: false, error: 'Invalid input values for boards weight calculation' };\n }\n \n const totalWidthResult = safeParseNumber(total_width);\n const thicknessResult = safeParseNumber(boards_thickness);\n const lengthResult = safeParseNumber(boards_length);\n \n if (![totalWidthResult, thicknessResult, lengthResult].every(r => r.isValid)) {\n return { value: 0, isValid: false, error: 'Failed to parse input values' };\n }\n \n const weight = (totalWidthResult.value * thicknessResult.value * \n (lengthResult.value / MATERIAL_CONSTANTS.LENGTH_CONVERSION_FACTOR)) * \n MATERIAL_CONSTANTS.STEEL_DENSITY;\n \n return { value: weight, isValid: true };\n};\n\n/**\n * Calculates the weight of steel\n * Formula: (length * width * thickness * 7.85) / 1000\n */\nconst calculateSteelWeight = (formValues: BaseFormValues): CalculationResult<number> => {\n const { steel_length, steel_width, steel_thickness } = formValues;\n \n if (!validatePositiveNumbers(steel_length, steel_width, steel_thickness)) {\n return { value: 0, isValid: false, error: 'Invalid input values for steel weight calculation' };\n }\n \n const lengthResult = safeParseNumber(steel_length);\n const widthResult = safeParseNumber(steel_width);\n const thicknessResult = safeParseNumber(steel_thickness);\n \n if (![lengthResult, widthResult, thicknessResult].every(r => r.isValid)) {\n return { value: 0, isValid: false, error: 'Failed to parse input values' };\n }\n \n const weight = (lengthResult.value * widthResult.value * thicknessResult.value * \n MATERIAL_CONSTANTS.STEEL_DENSITY) / MATERIAL_CONSTANTS.LENGTH_CONVERSION_FACTOR;\n \n return { value: weight, isValid: true };\n};\n\n/**\n * Gets the material unit weight based on steel type\n */\nconst calculateMaterialUnit = (formValues: BaseFormValues): CalculationResult<number> => {\n const { steel_type } = formValues;\n \n if (!steel_type) {\n return { value: 0, isValid: false, error: 'Steel type not specified' };\n }\n \n if (!(steel_type in MATERIAL_CONSTANTS.COIL_WEIGHTS)) {\n return { value: 0, isValid: false, error: `Unsupported steel type: ${steel_type}` };\n }\n \n const weight = MATERIAL_CONSTANTS.COIL_WEIGHTS[steel_type];\n return { value: weight, isValid: true };\n};\n\n/**\n * Calculates material weight based on tube type and dimensions\n * Supports Round, Square, and Rectangle tube types\n */\nconst calculateTubeMaterialWeight = (formValues: BaseFormValues): CalculationResult<number> => {\n const { tube_type, tube_od, shape_width, shape_height, material_thickness, material_length } = formValues;\n \n if (!tube_type) {\n return { value: 0, isValid: false, error: 'Tube type not specified' };\n }\n \n const thicknessResult = safeParseNumber(material_thickness);\n const lengthResult = safeParseNumber(material_length);\n \n if (!thicknessResult.isValid || !lengthResult.isValid) {\n return { value: 0, isValid: false, error: 'Invalid thickness or length values' };\n }\n \n let weight = 0;\n \n switch (tube_type) {\n case 'Round': {\n const odResult = safeParseNumber(tube_od);\n if (!odResult.isValid || odResult.value <= thicknessResult.value) {\n return { value: 0, isValid: false, error: 'Invalid outer diameter for round tube' };\n }\n \n weight = (odResult.value - thicknessResult.value) * thicknessResult.value * \n MATERIAL_CONSTANTS.TUBE_CALCULATION_FACTOR * lengthResult.value;\n break;\n }\n \n case 'Square':\n case 'Rectangle': {\n const widthResult = safeParseNumber(shape_width);\n const heightResult = safeParseNumber(shape_height);\n \n if (!widthResult.isValid || !heightResult.isValid) {\n return { value: 0, isValid: false, error: 'Invalid width or height for rectangular tube' };\n }\n \n const perimeter = 2 * (widthResult.value + heightResult.value);\n weight = (((perimeter / Math.PI) - thicknessResult.value) * thicknessResult.value * \n MATERIAL_CONSTANTS.TUBE_CALCULATION_FACTOR) * lengthResult.value;\n break;\n }\n \n default:\n return { value: 0, isValid: false, error: `Unsupported tube type: ${tube_type}` };\n }\n \n return { value: Math.max(0, weight), isValid: true };\n};\n\n// ==================== MAIN HOOK ====================\n/**\n * Custom hook for optimized material calculations with comprehensive error handling\n * and performance optimization through memoization\n */\nexport const useMaterialCalculations = (formValues?: BaseFormValues): MaterialCalculations => {\n const calculations = useMemo(() => {\n if (!formValues) {\n return {\n totalWidth: 0,\n materialUnit: 0,\n boardsWeight: 0,\n steelWeight: 0,\n materialWeight: 0,\n };\n }\n \n // Calculate all values with error handling\n const totalWidthResult = calculateBoardsTotalWidth(formValues);\n const materialUnitResult = calculateMaterialUnit(formValues);\n const boardsWeightResult = calculateBoardsWeight(formValues);\n const steelWeightResult = calculateSteelWeight(formValues);\n const materialWeightResult = calculateTubeMaterialWeight(formValues);\n \n // Optional: Log errors in development\n if (process.env.NODE_ENV === 'development') {\n [totalWidthResult, materialUnitResult, boardsWeightResult, steelWeightResult, materialWeightResult]\n .filter(result => !result.isValid && result.error)\n .forEach(result => console.warn('Calculation warning:', result.error));\n }\n \n return {\n totalWidth: totalWidthResult.value,\n materialUnit: materialUnitResult.value,\n boardsWeight: boardsWeightResult.value,\n steelWeight: steelWeightResult.value,\n materialWeight: materialWeightResult.value,\n };\n }, [createMemoKey(formValues)]); // Optimized dependency to prevent unnecessary recalculations\n \n return calculations;\n};\n\n// ==================== ADDITIONAL UTILITIES ====================\n/**\n * Utility function to validate form values before calculations\n */\nexport const validateFormValues = (formValues: BaseFormValues): { isValid: boolean; errors: string[] } => {\n const errors: string[] = [];\n const { tube_type, steel_type } = formValues;\n \n // Validate steel type if provided\n if (steel_type && !(steel_type in MATERIAL_CONSTANTS.COIL_WEIGHTS)) {\n errors.push(`Invalid steel type: ${steel_type}`);\n }\n \n // Validate tube type if provided\n if (tube_type && !['Round', 'Square', 'Rectangle'].includes(tube_type)) {\n errors.push(`Invalid tube type: ${tube_type}`);\n }\n \n return { isValid: errors.length === 0, errors };\n};\n\n/**\n * Get available steel types for form validation\n */\nexport const getAvailableSteelTypes = (): SteelType[] => {\n return Object.keys(MATERIAL_CONSTANTS.COIL_WEIGHTS) as SteelType[];\n};\n\n/**\n * Get available tube types for form validation\n */\nexport const getAvailableTubeTypes = (): TubeType[] => {\n return ['Round', 'Square', 'Rectangle'];\n};\n\nexport default {\n useMaterialCalculations,\n validateFormValues,\n getAvailableSteelTypes,\n getAvailableTubeTypes,\n MATERIAL_CONSTANTS,\n};\nexport type {\n BaseFormValues,\n MaterialCalculations,\n SteelType,\n TubeType,\n CalculationResult,\n};","import { useCallback } from 'react';\nimport { checkSkuAndItemName } from '../utils/common';\n\nexport interface IUseNameSkuUniquenessCheckProps {\n fieldPrefix: string;\n formMethods: any;\n data?: any;\n}\n\nexport const useNameSkuUniquenessCheck = ({\n fieldPrefix,\n formMethods,\n data,\n}: IUseNameSkuUniquenessCheckProps) => {\n const { watch=()=>{}, setError=()=>{} } = formMethods||{};\n const formValues = watch(fieldPrefix);\n\n const namePrev = data?.name;\n const skuPrev= data?.sku\n const checkNameAndSkuUniqueness = useCallback(async () => {\n let isUnique=true; \n\n try {\n if(namePrev===formValues?.name && skuPrev===formValues?.sku) return true;\n const response = await checkSkuAndItemName({\n name: formValues?.name,\n sku: formValues?.sku,\n ...(data?.id && { id: data?.id }),\n });\n if (response.name) {\n setError(`${fieldPrefix}.name`, {\n message: 'Name already exists',\n type: 'manual',\n ref: `${fieldPrefix}.name`,\n });\n isUnique=false;\n }\n\n if (response.sku) {\n setError(`${fieldPrefix}.sku`, {\n message: 'SKU already exists',\n type: 'manual',\n ref: `${fieldPrefix}.sku`,\n });\n isUnique=false;\n }\n\n return isUnique;\n } catch (error) {\n console.error('Uniqueness check failed:', error);\n return isUnique;\n }\n //eslint-disable-next-line\n }, [formValues?.name, formValues?.sku, setError]);\n\n return { checkNameAndSkuUniqueness };\n};\n\nexport default useNameSkuUniquenessCheck;\n","import { useMemo } from 'react'\nimport { checkUniqueFields } from '../utils/common'\n\nexport default function useUniquenessCheck({ fieldPrefix, formMethods, data = {}, fields = [] }) {\n\tconst { watch = () => { }, setError = () => { }, formState = {} } = formMethods || {}\n\n\tconst formValues = watch(fieldPrefix)\n\n\t// Stable reference\n\tconst previous = useMemo(() => data || {}, [data])\n\n\tconst checkUniqueness = async () => {\n\t\tlet isUnique = true\n\n\t\ttry {\n\t\t\t// Skip check if no changes\n\t\t\tconst nothingChanged = fields.every((field) => previous[field] === formValues?.[field])\n\n\t\t\tif (nothingChanged) return true\n\n\t\t\t// Build payload\n\t\t\tconst payload = {}\n\t\t\tfields.forEach((field) => (payload[field] = formValues?.[field]))\n\n\t\t\tif (data?.id) payload.id = data.id\n\n\t\t\t// API call\n\t\t\tconst response = await checkUniqueFields(payload)\n\n\t\t\t// Loop through API response\n\t\t\tfor (const [field, exists] of Object.entries(response)) {\n\t\t\t\tif (exists) {\n\t\t\t\t\tconst errorPath = `${fieldPrefix}.${field}`\n\t\t\t\t\tsetError(errorPath, {\n\t\t\t\t\t\ttype: 'manual',\n\t\t\t\t\t\tmessage: `${field.replace(/_/g, ' ').toLowerCase()} already exists`,\n\t\t\t\t\t})\n\n\t\t\t\t\tisUnique = false\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconsole.log('Errors now:', formState.errors)\n\n\t\t\treturn isUnique\n\t\t} catch (error) {\n\t\t\tconsole.error('Uniqueness check failed:', error)\n\t\t\treturn isUnique\n\t\t}\n\t}\n\n\treturn { checkUniqueness }\n}\n","import { useState } from 'react';\nimport { DEFAULT_LANG } from '../constants/all-language';\n\ninterface ILanguage {\n label: string;\n code: string;\n direction: string;\n}\n\n// Configuration for fallback behavior\ninterface FallbackConfig {\n fallbackOrder?: string[];\n enableConsoleWarnings?: boolean;\n retryOnError?: boolean;\n maxRetries?: number;\n}\n\n// Updated fallback order with English first\nconst DEFAULT_FALLBACK_CONFIG: Required<FallbackConfig> = {\n fallbackOrder: ['en', 'en-US', DEFAULT_LANG], // English first\n enableConsoleWarnings: true,\n retryOnError: false,\n maxRetries: 3,\n};\n\nexport const useLanguageFallback = (config: FallbackConfig = {}) => {\n const finalConfig = { ...DEFAULT_FALLBACK_CONFIG, ...config };\n const [retryCount, setRetryCount] = useState(0);\n\n // Create English fallback language object\n const createEnglishFallback = (): ILanguage => ({\n code: 'en',\n label: 'English',\n direction: 'ltr'\n });\n\n // Find the best available language with fallback logic\n const findBestAvailableLanguage = (\n languages: ILanguage[], \n preferredCode?: string\n ): ILanguage | null => {\n if (!languages || languages.length === 0) {\n if (finalConfig.enableConsoleWarnings) {\n console.warn('No languages available for fallback selection, using English');\n }\n return createEnglishFallback();\n }\n\n // First try the preferred language if provided\n if (preferredCode) {\n const preferred = languages.find(lang => lang.code === preferredCode);\n if (preferred) return preferred;\n \n if (finalConfig.enableConsoleWarnings) {\n console.warn(`Preferred language \"${preferredCode}\" not found, trying fallbacks`);\n }\n }\n\n // Try fallback languages in order (English first)\n for (const fallbackCode of finalConfig.fallbackOrder) {\n const fallback = languages.find(lang => lang.code === fallbackCode);\n if (fallback) {\n if (finalConfig.enableConsoleWarnings && preferredCode && preferredCode !== fallbackCode) {\n console.warn(`Using fallback language: \"${fallbackCode}\" instead of \"${preferredCode}\"`);\n }\n return fallback;\n }\n }\n\n // If no fallbacks found, return English or first available language\n const englishLang = languages.find(lang => lang.code === 'en');\n if (englishLang) {\n if (finalConfig.enableConsoleWarnings) {\n console.warn('Using English as ultimate fallback');\n }\n return englishLang;\n }\n\n // Last resort - return first available language\n if (finalConfig.enableConsoleWarnings) {\n console.warn('No English fallback found, using first available language');\n }\n return languages[0] || createEnglishFallback();\n };\n\n // Create a fallback language object when API fails - always English\n const createEmergencyFallback = (): ILanguage => {\n return createEnglishFallback();\n };\n\n // Validate if a language code exists in the available languages\n const validateLanguageCode = (languages: ILanguage[], code: string): boolean => {\n return languages.some(lang => lang.code === code);\n };\n\n // Get saved language from localStorage with validation\n const getSavedLanguage = (languages: ILanguage[]): string | null => {\n const saved = localStorage.getItem('_language');\n if (!saved) return null;\n \n // Validate saved language exists in available languages\n if (validateLanguageCode(languages, saved)) {\n return saved;\n }\n \n if (finalConfig.enableConsoleWarnings) {\n console.warn(`Saved language \"${saved}\" is no longer available, will use English fallback`);\n }\n return null;\n };\n\n // Ensure English is always available in languages array\n const ensureEnglishAvailable = (languages: ILanguage[]): ILanguage[] => {\n const hasEnglish = languages.some(lang => lang.code === 'en');\n if (!hasEnglish) {\n return [createEnglishFallback(), ...languages];\n }\n return languages;\n };\n\n // Retry mechanism for failed language fetches\n const shouldRetry = (): boolean => {\n return finalConfig.retryOnError && retryCount < finalConfig.maxRetries;\n };\n\n const incrementRetry = () => {\n setRetryCount(prev => prev + 1);\n };\n\n const resetRetry = () => {\n setRetryCount(0);\n };\n\n return {\n findBestAvailableLanguage,\n createEmergencyFallback,\n createEnglishFallback,\n validateLanguageCode,\n getSavedLanguage,\n ensureEnglishAvailable,\n shouldRetry,\n incrementRetry,\n resetRetry,\n retryCount,\n config: finalConfig,\n };\n};\n\n// Additional utility hook for language state management\nexport const useLanguageState = () => {\n const [isInitialized, setIsInitialized] = useState(false);\n const [hasError, setHasError] = useState(false);\n const [errorMessage, setErrorMessage] = useState<string | null>(null);\n\n const markInitialized = () => setIsInitialized(true);\n const setError = (error: string) => {\n setHasError(true);\n setErrorMessage(error);\n };\n const clearError = () => {\n setHasError(false);\n setErrorMessage(null);\n };\n\n return {\n isInitialized,\n hasError,\n errorMessage,\n markInitialized,\n setError,\n clearError,\n };\n};\n\nexport default {\n useLanguageFallback,\n useLanguageState,\n};\n\nexport type { ILanguage, FallbackConfig };\n\n","import { useERPUI } from '../components/providers/ERPUIProvider';\n\n/**\n * Hook to determine Redux integration status and provide conditional Redux usage\n */\nexport const useReduxIntegration = () => {\n const { useRedux, apiClient } = useERPUI();\n \n // Helper function to conditionally use Redux hooks\n const useConditionalRedux = <T>(\n reduxHook: () => T,\n fallbackValue: T\n ): T => {\n if (!useRedux) {\n return fallbackValue;\n }\n \n try {\n return reduxHook();\n } catch (error) {\n console.warn('Redux hook failed, falling back to default value:', error);\n return fallbackValue;\n }\n };\n \n // Helper function to conditionally dispatch Redux actions\n const conditionalDispatch = (action: any) => {\n if (!useRedux) {\n console.warn('Redux not enabled, cannot dispatch action:', action);\n return Promise.resolve();\n }\n \n try {\n const { useAppDispatch } = require('../redux/hooks');\n const dispatch = useAppDispatch();\n return dispatch(action);\n } catch (error) {\n console.error('Failed to dispatch Redux action:', error);\n return Promise.reject(error);\n }\n };\n \n return {\n useRedux,\n apiClient,\n useConditionalRedux,\n conditionalDispatch,\n };\n};","import { useEffect, useRef } from 'react';\n\nimport { calculateAdditionalDiscountCrossValue } from '../utils/calculation';\n\nfunction computeTotal(\n items: any[],\n discountOn: string | null | undefined,\n netAmountField = 'net_amount',\n grossAmountField = 'gross_amount'\n): number {\n const field = discountOn === 'Gross Amount' ? grossAmountField : netAmountField;\n return items.reduce((sum: number, item: any) => sum + Number(item[field] || 0), 0);\n}\n\nexport interface AdditionalDiscountAutoCalcConfig {\n items: any[];\n discountOn: string | null | undefined;\n percentage: number | string;\n amount: number | string;\n setValue: (name: string, value: any) => void;\n fieldConfig: {\n percentageField: string;\n amountField: string;\n };\n netAmountField?: string;\n grossAmountField?: string;\n\n /**\n * When true, auto-disabled logic is bypassed.\n * Caller explicitly controls field disabled states\n * via disablePercentageField / disableAmountField.\n * Auto sync (value calculation) still works regardless.\n */\n manualDisabled?: boolean;\n disablePercentageField?: boolean;\n disableAmountField?: boolean;\n}\n\nexport function useAdditionalDiscountAutoCalc(config: AdditionalDiscountAutoCalcConfig) {\n const lastChangedBy = useRef<'user' | 'auto'>('user');\n const lastUserEdited = useRef<'percentage' | 'amount' | null>(null);\n\n // Percentage → Amount\n useEffect(() => {\n if (lastChangedBy.current === 'auto') {\n lastChangedBy.current = 'user';\n return;\n }\n if (!config.discountOn) return;\n const pct = Number(config.percentage);\n const amt = Number(config.amount);\n const total = computeTotal(config.items, config.discountOn, config.netAmountField, config.grossAmountField);\n\n if (!pct && amt && lastUserEdited.current === 'percentage') {\n config.setValue(config.fieldConfig.amountField, 0);\n lastUserEdited.current = null;\n return;\n }\n if (!pct || !total) return;\n\n lastUserEdited.current = 'percentage';\n lastChangedBy.current = 'auto';\n config.setValue(config.fieldConfig.amountField,\n calculateAdditionalDiscountCrossValue(pct, 'percentage', total));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [config.percentage, config.discountOn]);\n\n // Amount → Percentage\n useEffect(() => {\n if (lastChangedBy.current === 'auto') {\n lastChangedBy.current = 'user';\n return;\n }\n if (!config.discountOn) return;\n const pct = Number(config.percentage);\n const amt = Number(config.amount);\n const total = computeTotal(config.items, config.discountOn, config.netAmountField, config.grossAmountField);\n\n if (!amt && pct && lastUserEdited.current === 'amount') {\n config.setValue(config.fieldConfig.percentageField, 0);\n lastUserEdited.current = null;\n return;\n }\n if (!amt || !total) return;\n\n lastUserEdited.current = 'amount';\n lastChangedBy.current = 'auto';\n config.setValue(config.fieldConfig.percentageField,\n calculateAdditionalDiscountCrossValue(amt, 'amount', total));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [config.amount, config.discountOn]);\n\n const autoPercentageDisabled = !config.discountOn || (\n Boolean(Number(config.amount)) && lastUserEdited.current !== 'percentage'\n );\n const autoAmountDisabled = !config.discountOn || (\n Boolean(Number(config.percentage)) && lastUserEdited.current !== 'amount'\n );\n\n const isPercentageDisabled = config.manualDisabled\n ? (config.disablePercentageField ?? false)\n : autoPercentageDisabled;\n const isAmountDisabled = config.manualDisabled\n ? (config.disableAmountField ?? false)\n : autoAmountDisabled;\n\n const totalAmount = config.discountOn\n ? computeTotal(config.items, config.discountOn, config.netAmountField, config.grossAmountField)\n : 0;\n const isAmountExceeded = !!(config.discountOn && totalAmount > 0 && Number(config.amount) > totalAmount);\n const isPercentageExceeded = Number(config.percentage) > 100;\n\n return { isPercentageDisabled, isAmountDisabled, isAmountExceeded, isPercentageExceeded };\n}\n"],"names":[],"mappings":"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"}
@@ -5,7 +5,7 @@ import { b3 as postV1AuthChangeUserPasswordByAdmin, b2 as postV1AuthChangeUserPa
5
5
  import { a as auth, g as getApiConfig } from "./api-config-GOys-syK.esm.js";
6
6
  import { useNavigate, useLocation, matchRoutes } from "react-router-dom";
7
7
  import { P as Pathname, c as PathnameGenerator, l as PathnameRental, e as PathnameGenerator$1, b as PathnameCrm, d as PathnameGenerator$2, k as PathnamePurchase, R as ROUTES, f as PathnameGenerator$3, j as PathnameManufacturing, g as PathnameGenerator$4, i as PathnameInventory, h as PathnameGenerator$5, a as PathnameAccounting } from "./pathname.rental-BKwgwsUV.esm.js";
8
- import { aw as getToken } from "./common-Nn4SUfK7.esm.js";
8
+ import { aw as getToken } from "./common-D59u5rE6.esm.js";
9
9
  import { useSnackbar, SnackbarContent, enqueueSnackbar } from "notistack";
10
10
  import { io } from "socket.io-client";
11
11
  import { styled, Typography as Typography$1, Box, Avatar, IconButton } from "@mui/material";
@@ -841,4 +841,4 @@ export {
841
841
  unsupportedProp as u,
842
842
  useTimeout as v
843
843
  };
844
- //# sourceMappingURL=useAuth-BaUSGWbL.esm.js.map
844
+ //# sourceMappingURL=useAuth-DhzbULWV.esm.js.map