@dnb/eufemia 10.63.2 → 10.63.4

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 (132) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/cjs/components/avatar/Avatar.d.ts +1 -1
  3. package/cjs/components/avatar/Avatar.js.map +1 -1
  4. package/cjs/components/avatar/AvatarGroup.d.ts +1 -1
  5. package/cjs/components/avatar/AvatarGroup.js.map +1 -1
  6. package/cjs/components/badge/Badge.d.ts +1 -1
  7. package/cjs/components/badge/Badge.js.map +1 -1
  8. package/cjs/components/form-status/FormStatus.js +3 -2
  9. package/cjs/components/form-status/FormStatus.js.map +1 -1
  10. package/cjs/components/lib.d.ts +2 -2
  11. package/cjs/components/section/Section.js +1 -1
  12. package/cjs/components/section/Section.js.map +1 -1
  13. package/cjs/components/tag/Tag.d.ts +2 -2
  14. package/cjs/components/tag/Tag.js.map +1 -1
  15. package/cjs/components/tag/TagGroup.d.ts +1 -1
  16. package/cjs/components/tag/TagGroup.js.map +1 -1
  17. package/cjs/extensions/forms/DataContext/Context.d.ts +4 -1
  18. package/cjs/extensions/forms/DataContext/Context.js.map +1 -1
  19. package/cjs/extensions/forms/DataContext/Provider/Provider.d.ts +3 -0
  20. package/cjs/extensions/forms/DataContext/Provider/Provider.js +60 -43
  21. package/cjs/extensions/forms/DataContext/Provider/Provider.js.map +1 -1
  22. package/cjs/extensions/forms/Form/Visibility/useVisibility.js +6 -6
  23. package/cjs/extensions/forms/Form/Visibility/useVisibility.js.map +1 -1
  24. package/cjs/extensions/forms/Form/data-context/useData.js +14 -10
  25. package/cjs/extensions/forms/Form/data-context/useData.js.map +1 -1
  26. package/cjs/extensions/forms/hooks/useFieldProps.d.ts +4 -1
  27. package/cjs/extensions/forms/hooks/useFieldProps.js +11 -3
  28. package/cjs/extensions/forms/hooks/useFieldProps.js.map +1 -1
  29. package/cjs/shared/Eufemia.d.ts +1 -1
  30. package/cjs/shared/Eufemia.js +2 -2
  31. package/cjs/shared/Eufemia.js.map +1 -1
  32. package/cjs/shared/error-helper.d.ts +0 -6
  33. package/cjs/shared/error-helper.js +6 -3
  34. package/cjs/shared/error-helper.js.map +1 -1
  35. package/cjs/style/core/scopes.scss +1 -1
  36. package/cjs/style/dnb-ui-basis.css +1 -1
  37. package/cjs/style/dnb-ui-basis.min.css +1 -1
  38. package/cjs/style/dnb-ui-body.css +1 -1
  39. package/cjs/style/dnb-ui-body.min.css +1 -1
  40. package/cjs/style/dnb-ui-core.css +1 -1
  41. package/cjs/style/dnb-ui-core.min.css +1 -1
  42. package/components/avatar/Avatar.d.ts +1 -1
  43. package/components/avatar/Avatar.js.map +1 -1
  44. package/components/avatar/AvatarGroup.d.ts +1 -1
  45. package/components/avatar/AvatarGroup.js.map +1 -1
  46. package/components/badge/Badge.d.ts +1 -1
  47. package/components/badge/Badge.js.map +1 -1
  48. package/components/form-status/FormStatus.js +3 -2
  49. package/components/form-status/FormStatus.js.map +1 -1
  50. package/components/lib.d.ts +2 -2
  51. package/components/section/Section.js +1 -1
  52. package/components/section/Section.js.map +1 -1
  53. package/components/tag/Tag.d.ts +2 -2
  54. package/components/tag/Tag.js.map +1 -1
  55. package/components/tag/TagGroup.d.ts +1 -1
  56. package/components/tag/TagGroup.js.map +1 -1
  57. package/es/components/avatar/Avatar.d.ts +1 -1
  58. package/es/components/avatar/Avatar.js.map +1 -1
  59. package/es/components/avatar/AvatarGroup.d.ts +1 -1
  60. package/es/components/avatar/AvatarGroup.js.map +1 -1
  61. package/es/components/badge/Badge.d.ts +1 -1
  62. package/es/components/badge/Badge.js.map +1 -1
  63. package/es/components/form-status/FormStatus.js +3 -2
  64. package/es/components/form-status/FormStatus.js.map +1 -1
  65. package/es/components/lib.d.ts +2 -2
  66. package/es/components/section/Section.js +1 -1
  67. package/es/components/section/Section.js.map +1 -1
  68. package/es/components/tag/Tag.d.ts +2 -2
  69. package/es/components/tag/Tag.js.map +1 -1
  70. package/es/components/tag/TagGroup.d.ts +1 -1
  71. package/es/components/tag/TagGroup.js.map +1 -1
  72. package/es/extensions/forms/DataContext/Context.d.ts +4 -1
  73. package/es/extensions/forms/DataContext/Context.js.map +1 -1
  74. package/es/extensions/forms/DataContext/Provider/Provider.d.ts +3 -0
  75. package/es/extensions/forms/DataContext/Provider/Provider.js +55 -41
  76. package/es/extensions/forms/DataContext/Provider/Provider.js.map +1 -1
  77. package/es/extensions/forms/Form/Visibility/useVisibility.js +6 -6
  78. package/es/extensions/forms/Form/Visibility/useVisibility.js.map +1 -1
  79. package/es/extensions/forms/Form/data-context/useData.js +14 -10
  80. package/es/extensions/forms/Form/data-context/useData.js.map +1 -1
  81. package/es/extensions/forms/hooks/useFieldProps.d.ts +4 -1
  82. package/es/extensions/forms/hooks/useFieldProps.js +11 -2
  83. package/es/extensions/forms/hooks/useFieldProps.js.map +1 -1
  84. package/es/shared/Eufemia.d.ts +1 -1
  85. package/es/shared/Eufemia.js +2 -2
  86. package/es/shared/Eufemia.js.map +1 -1
  87. package/es/shared/error-helper.d.ts +0 -6
  88. package/es/shared/error-helper.js +6 -3
  89. package/es/shared/error-helper.js.map +1 -1
  90. package/es/style/core/scopes.scss +1 -1
  91. package/es/style/dnb-ui-basis.css +1 -1
  92. package/es/style/dnb-ui-basis.min.css +1 -1
  93. package/es/style/dnb-ui-body.css +1 -1
  94. package/es/style/dnb-ui-body.min.css +1 -1
  95. package/es/style/dnb-ui-core.css +1 -1
  96. package/es/style/dnb-ui-core.min.css +1 -1
  97. package/esm/dnb-ui-basis.min.mjs +1 -1
  98. package/esm/dnb-ui-components.min.mjs +1 -1
  99. package/esm/dnb-ui-elements.min.mjs +1 -1
  100. package/esm/dnb-ui-extensions.min.mjs +1 -1
  101. package/esm/dnb-ui-lib.min.mjs +1 -1
  102. package/extensions/forms/DataContext/Context.d.ts +4 -1
  103. package/extensions/forms/DataContext/Context.js.map +1 -1
  104. package/extensions/forms/DataContext/Provider/Provider.d.ts +3 -0
  105. package/extensions/forms/DataContext/Provider/Provider.js +60 -43
  106. package/extensions/forms/DataContext/Provider/Provider.js.map +1 -1
  107. package/extensions/forms/Form/Visibility/useVisibility.js +6 -6
  108. package/extensions/forms/Form/Visibility/useVisibility.js.map +1 -1
  109. package/extensions/forms/Form/data-context/useData.js +14 -10
  110. package/extensions/forms/Form/data-context/useData.js.map +1 -1
  111. package/extensions/forms/hooks/useFieldProps.d.ts +4 -1
  112. package/extensions/forms/hooks/useFieldProps.js +11 -3
  113. package/extensions/forms/hooks/useFieldProps.js.map +1 -1
  114. package/package.json +1 -1
  115. package/shared/Eufemia.d.ts +1 -1
  116. package/shared/Eufemia.js +2 -2
  117. package/shared/Eufemia.js.map +1 -1
  118. package/shared/error-helper.d.ts +0 -6
  119. package/shared/error-helper.js +6 -3
  120. package/shared/error-helper.js.map +1 -1
  121. package/style/core/scopes.scss +1 -1
  122. package/style/dnb-ui-basis.css +1 -1
  123. package/style/dnb-ui-basis.min.css +1 -1
  124. package/style/dnb-ui-body.css +1 -1
  125. package/style/dnb-ui-body.min.css +1 -1
  126. package/style/dnb-ui-core.css +1 -1
  127. package/style/dnb-ui-core.min.css +1 -1
  128. package/umd/dnb-ui-basis.min.js +1 -1
  129. package/umd/dnb-ui-components.min.js +1 -1
  130. package/umd/dnb-ui-elements.min.js +1 -1
  131. package/umd/dnb-ui-extensions.min.js +2 -2
  132. package/umd/dnb-ui-lib.min.js +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"useData.js","names":["useCallback","useContext","useMemo","useReducer","useRef","pointer","createReferenceKey","useSharedState","useMountEffect","DataContext","structuredClone","useData","id","undefined","initialData","sharedDataRef","sharedAttachmentsRef","forceUpdate","current","rerenderUseDataHook","dataContext","hasContext","Error","data","filterDataHandler","updateDataValue","setData","set","newData","update","path","value","existingData","existingValue","has","get","newValue","extend","remove","reduceToVisibleFields","options","_dataContext$visibleD","_sharedAttachmentsRef","_sharedAttachmentsRef2","visibleDataHandler","call","filterData","filter","_dataContext$filterDa","_sharedAttachmentsRef3","_sharedAttachmentsRef4","getValue","hadInitialData"],"sources":["../../../../../../src/extensions/forms/Form/data-context/useData.tsx"],"sourcesContent":["import {\n useCallback,\n useContext,\n useMemo,\n useReducer,\n useRef,\n} from 'react'\nimport pointer, { JsonObject } from '../../utils/json-pointer'\nimport {\n SharedStateId,\n createReferenceKey,\n useSharedState,\n} from '../../../../shared/helpers/useSharedState'\nimport useMountEffect from '../../../../shared/helpers/useMountEffect'\nimport type { Path } from '../../types'\nimport DataContext, {\n FilterData,\n VisibleDataHandler,\n} from '../../DataContext/Context'\nimport { SharedAttachments } from '../../DataContext/Provider'\n\n/**\n * Deprecated, as it is supported by all major browsers and Node.js >=v18\n * So it's a question of time, when we will remove this polyfill\n */\nimport structuredClone from '@ungap/structured-clone'\n\ntype PathImpl<T, P extends string> = P extends `${infer Key}/${infer Rest}`\n ? Key extends keyof T\n ? Rest extends ''\n ? T[Key]\n : PathImpl<T[Key], Rest>\n : never\n : T[P & keyof T]\n\nexport type PathType<T, P extends string> = P extends `/${infer Rest}`\n ? PathImpl<T, Rest>\n : never\n\nexport type UseDataReturnUpdate<Data> = <P extends Path>(\n path: P,\n value: ((value: PathType<Data, P>) => unknown) | unknown\n) => void\n\nexport type UseDataReturnGetValue<Data> = <P extends Path>(\n path: P\n) => PathType<Data, P> | any\n\nexport type UseDataReturnFilterData<Data> = (\n filterDataHandler: FilterData,\n data?: Data\n) => Partial<Data>\n\nexport type UseDataReturnVisibleData<Data> = VisibleDataHandler<Data>\n\ntype UseDataReturn<Data> = {\n data: Data\n set: (newData: Data) => void\n update: UseDataReturnUpdate<Data>\n remove: (path: Path) => void\n getValue: UseDataReturnGetValue<Data>\n filterData: UseDataReturnFilterData<Data>\n reduceToVisibleFields: UseDataReturnVisibleData<Data>\n}\n\n/**\n * Custom hook that provides form data management functionality.\n *\n * @template Data - The type of data being managed.\n * @param {SharedStateId} id - The identifier for the data.\n * @param {Data} initialData - The initial data value (optional).\n * @returns {UseDataReturn<Data>} An object containing the data and data management functions.\n */\nexport default function useData<Data = JsonObject>(\n id: SharedStateId = undefined,\n initialData: Data = undefined\n): UseDataReturn<Data> {\n const sharedDataRef =\n useRef<ReturnType<typeof useSharedState<Data>>>(null)\n const sharedAttachmentsRef =\n useRef<ReturnType<typeof useSharedState<SharedAttachments<Data>>>>(\n null\n )\n const [, forceUpdate] = useReducer(() => ({}), {})\n\n sharedDataRef.current = useSharedState<Data>(\n id,\n initialData,\n forceUpdate\n )\n\n sharedAttachmentsRef.current = useSharedState<SharedAttachments<Data>>(\n createReferenceKey(id, 'attachments'),\n { rerenderUseDataHook: forceUpdate }\n )\n\n // If no id is provided, use the context data\n const dataContext = useContext(DataContext)\n if (!id) {\n if (!dataContext.hasContext) {\n throw new Error(\n 'useData needs to run inside DataContext (Form.Handler) or have a valid id'\n )\n }\n\n sharedDataRef.current.data = dataContext.data\n sharedAttachmentsRef.current.data.filterDataHandler =\n dataContext.filterDataHandler\n }\n\n const updateDataValue = dataContext?.updateDataValue\n const setData = dataContext?.setData\n\n const set = useCallback(\n (newData: Data) => {\n if (id) {\n sharedDataRef.current.update(newData)\n } else {\n setData?.(newData)\n }\n },\n [id, setData]\n )\n\n const update = useCallback<UseDataReturnUpdate<Data>>(\n (path, value = undefined) => {\n const existingData = structuredClone(\n sharedDataRef.current.data || {}\n ) as Data & JsonObject\n const existingValue = pointer.has(existingData, path)\n ? pointer.get(existingData, path)\n : undefined\n\n // Get new value\n const newValue =\n typeof value === 'function' ? value(existingValue) : value\n\n if (newValue !== existingValue) {\n // Update existing data\n pointer.set(existingData, path, newValue)\n\n // Update provider with new data\n if (id) {\n sharedDataRef.current.extend(existingData)\n } else {\n updateDataValue(path, newValue)\n }\n }\n },\n [id, updateDataValue]\n )\n\n const remove = useCallback<UseDataReturn<Data>['remove']>(\n (path) => {\n const existingData = structuredClone(\n sharedDataRef.current.data || {}\n ) as Data & JsonObject\n\n if (pointer.has(existingData, path)) {\n // Remove existing data\n pointer.remove(existingData, path)\n\n // Update provider with new data\n if (id) {\n sharedDataRef.current.set(existingData)\n } else {\n updateDataValue(path, undefined)\n }\n }\n },\n [id, updateDataValue]\n )\n\n const reduceToVisibleFields = useCallback<\n UseDataReturn<Data>['reduceToVisibleFields']\n >(\n (data, options = {}) => {\n if (id) {\n return sharedAttachmentsRef.current.data?.visibleDataHandler?.(\n data,\n options\n )\n }\n\n return dataContext?.visibleDataHandler?.(data, options)\n },\n [dataContext, id]\n )\n\n const filterData = useCallback<UseDataReturn<Data>['filterData']>(\n (filter, data = sharedDataRef.current.data) => {\n if (id) {\n return sharedAttachmentsRef.current.data?.filterDataHandler?.(\n data,\n filter\n )\n }\n\n return dataContext?.filterDataHandler?.(data, filter)\n },\n [dataContext, id]\n )\n\n const getValue = useCallback<UseDataReturn<Data>['getValue']>((path) => {\n if (pointer.has(sharedDataRef.current.data, path)) {\n return pointer.get(sharedDataRef.current.data, path)\n }\n\n return undefined\n }, [])\n\n useMountEffect(() => {\n if (id && !sharedDataRef.current.hadInitialData && initialData) {\n sharedDataRef.current.extend(initialData)\n }\n })\n\n const { data } = sharedDataRef.current\n\n return useMemo(\n () => ({\n data,\n remove,\n update,\n set,\n getValue,\n reduceToVisibleFields,\n filterData,\n }),\n [\n data,\n remove,\n update,\n set,\n getValue,\n reduceToVisibleFields,\n filterData,\n ]\n )\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"useData.js","names":["useCallback","useContext","useMemo","useReducer","useRef","pointer","createReferenceKey","useSharedState","useMountEffect","DataContext","structuredClone","useData","id","undefined","initialData","sharedDataRef","sharedAttachmentsRef","forceUpdate","current","rerenderUseDataHook","dataContext","hasContext","Error","data","filterDataHandler","updateDataValue","setData","getExistingData","_sharedAttachmentsRef","_sharedAttachmentsRef2","_sharedAttachmentsRef3","internalDataRef","set","newData","update","path","value","existingData","existingValue","has","get","newValue","extend","remove","reduceToVisibleFields","options","_dataContext$visibleD","_sharedAttachmentsRef4","_sharedAttachmentsRef5","visibleDataHandler","call","filterData","filter","_dataContext$filterDa","_sharedAttachmentsRef6","_sharedAttachmentsRef7","getValue","hadInitialData"],"sources":["../../../../../../src/extensions/forms/Form/data-context/useData.tsx"],"sourcesContent":["import {\n useCallback,\n useContext,\n useMemo,\n useReducer,\n useRef,\n} from 'react'\nimport pointer, { JsonObject } from '../../utils/json-pointer'\nimport {\n SharedStateId,\n createReferenceKey,\n useSharedState,\n} from '../../../../shared/helpers/useSharedState'\nimport useMountEffect from '../../../../shared/helpers/useMountEffect'\nimport type { Path } from '../../types'\nimport DataContext, {\n FilterData,\n VisibleDataHandler,\n} from '../../DataContext/Context'\nimport { SharedAttachments } from '../../DataContext/Provider'\n\n/**\n * Deprecated, as it is supported by all major browsers and Node.js >=v18\n * So it's a question of time, when we will remove this polyfill\n */\nimport structuredClone from '@ungap/structured-clone'\n\ntype PathImpl<T, P extends string> = P extends `${infer Key}/${infer Rest}`\n ? Key extends keyof T\n ? Rest extends ''\n ? T[Key]\n : PathImpl<T[Key], Rest>\n : never\n : T[P & keyof T]\n\nexport type PathType<T, P extends string> = P extends `/${infer Rest}`\n ? PathImpl<T, Rest>\n : never\n\nexport type UseDataReturnUpdate<Data> = <P extends Path>(\n path: P,\n value: ((value: PathType<Data, P>) => unknown) | unknown\n) => void\n\nexport type UseDataReturnGetValue<Data> = <P extends Path>(\n path: P\n) => PathType<Data, P> | any\n\nexport type UseDataReturnFilterData<Data> = (\n filterDataHandler: FilterData,\n data?: Data\n) => Partial<Data>\n\nexport type UseDataReturnVisibleData<Data> = VisibleDataHandler<Data>\n\ntype UseDataReturn<Data> = {\n data: Data\n set: (newData: Data) => void\n update: UseDataReturnUpdate<Data>\n remove: (path: Path) => void\n getValue: UseDataReturnGetValue<Data>\n filterData: UseDataReturnFilterData<Data>\n reduceToVisibleFields: UseDataReturnVisibleData<Data>\n}\n\n/**\n * Custom hook that provides form data management functionality.\n *\n * @template Data - The type of data being managed.\n * @param {SharedStateId} id - The identifier for the data.\n * @param {Data} initialData - The initial data value (optional).\n * @returns {UseDataReturn<Data>} An object containing the data and data management functions.\n */\nexport default function useData<Data = JsonObject>(\n id: SharedStateId = undefined,\n initialData: Data = undefined\n): UseDataReturn<Data> {\n const sharedDataRef =\n useRef<ReturnType<typeof useSharedState<Data>>>(null)\n const sharedAttachmentsRef =\n useRef<ReturnType<typeof useSharedState<SharedAttachments<Data>>>>(\n null\n )\n const [, forceUpdate] = useReducer(() => ({}), {})\n\n sharedDataRef.current = useSharedState<Data>(\n id,\n initialData,\n forceUpdate\n )\n\n sharedAttachmentsRef.current = useSharedState<SharedAttachments<Data>>(\n createReferenceKey(id, 'attachments'),\n { rerenderUseDataHook: forceUpdate }\n )\n\n // If no id is provided, use the context data\n const dataContext = useContext(DataContext)\n if (!id) {\n if (!dataContext.hasContext) {\n throw new Error(\n 'useData needs to run inside DataContext (Form.Handler) or have a valid id'\n )\n }\n\n sharedDataRef.current.data = dataContext.data\n sharedAttachmentsRef.current.data.filterDataHandler =\n dataContext.filterDataHandler\n }\n\n const updateDataValue = dataContext?.updateDataValue\n const setData = dataContext?.setData\n\n const getExistingData = useCallback(() => {\n return structuredClone(\n sharedAttachmentsRef.current?.data?.internalDataRef?.current ||\n sharedDataRef.current.data ||\n {}\n ) as Data & JsonObject\n }, [])\n\n const set = useCallback(\n (newData: Data) => {\n if (id) {\n sharedDataRef.current.update(newData)\n } else {\n setData?.(newData)\n }\n },\n [id, setData]\n )\n\n const update = useCallback<UseDataReturnUpdate<Data>>(\n (path, value = undefined) => {\n const existingData = getExistingData()\n const existingValue = pointer.has(existingData, path)\n ? pointer.get(existingData, path)\n : undefined\n\n // Get new value\n const newValue =\n typeof value === 'function' ? value(existingValue) : value\n\n if (newValue !== existingValue) {\n // Update existing data\n pointer.set(existingData, path, newValue)\n\n // Update provider with new data\n if (id) {\n sharedDataRef.current.extend(existingData)\n } else {\n updateDataValue?.(path, newValue)\n }\n }\n },\n [getExistingData, id, updateDataValue]\n )\n\n const remove = useCallback<UseDataReturn<Data>['remove']>(\n (path) => {\n const existingData = getExistingData()\n\n if (pointer.has(existingData, path)) {\n // Remove existing data\n pointer.remove(existingData, path)\n\n // Update provider with new data\n if (id) {\n sharedDataRef.current.set(existingData)\n } else {\n setData?.(existingData)\n }\n }\n },\n [getExistingData, id, setData]\n )\n\n const reduceToVisibleFields = useCallback<\n UseDataReturn<Data>['reduceToVisibleFields']\n >(\n (data, options = {}) => {\n if (id) {\n return sharedAttachmentsRef.current.data?.visibleDataHandler?.(\n data,\n options\n )\n }\n\n return dataContext?.visibleDataHandler?.(data, options)\n },\n [dataContext, id]\n )\n\n const filterData = useCallback<UseDataReturn<Data>['filterData']>(\n (filter, data = sharedDataRef.current.data) => {\n if (id) {\n return sharedAttachmentsRef.current.data?.filterDataHandler?.(\n data,\n filter\n )\n }\n\n return dataContext?.filterDataHandler?.(data, filter)\n },\n [dataContext, id]\n )\n\n const getValue = useCallback<UseDataReturn<Data>['getValue']>((path) => {\n if (pointer.has(sharedDataRef.current.data, path)) {\n return pointer.get(sharedDataRef.current.data, path)\n }\n\n return undefined\n }, [])\n\n useMountEffect(() => {\n if (id && !sharedDataRef.current.hadInitialData && initialData) {\n sharedDataRef.current.extend(initialData)\n }\n })\n\n const { data } = sharedDataRef.current\n\n return useMemo(\n () => ({\n data,\n remove,\n update,\n set,\n getValue,\n reduceToVisibleFields,\n filterData,\n }),\n [\n data,\n remove,\n update,\n set,\n getValue,\n reduceToVisibleFields,\n filterData,\n ]\n )\n}\n"],"mappings":"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"}
@@ -27,7 +27,10 @@ export interface ReturnAdditional<Value> {
27
27
  handleChange: (value: Value | unknown, additionalArgs?: AdditionalEventArgs) => void;
28
28
  updateValue: (value: Value) => void;
29
29
  setChanged: (state: boolean) => void;
30
- setDisplayValue: (value: React.ReactNode, path?: Identifier) => void;
30
+ setDisplayValue: (value: React.ReactNode, { path, type }?: {
31
+ path?: Identifier;
32
+ type?: 'field';
33
+ }) => void;
31
34
  forceUpdate: () => void;
32
35
  hasError?: boolean;
33
36
  /** Internal */
@@ -1007,11 +1007,20 @@ export default function useFieldProps(localProps, {
1007
1007
  handleError();
1008
1008
  });
1009
1009
  }, [emptyValue, additionalArgs, hasPath, itemPath, addToPool, validateValue, callOnChangeContext, onChangeContext, runPool, handlePathChangeUnvalidatedDataContext, nestedIteratePath, identifier, handleChangeIterateContext, makeIteratePath, handleError]);
1010
- const setDisplayValue = useCallback((content, fieldPath = itemPath ? identifier : path) => {
1010
+ const setDisplayValue = useCallback((value, options) => {
1011
+ const {
1012
+ path: fieldPath = itemPath ? identifier : path,
1013
+ type = 'field'
1014
+ } = options || {};
1011
1015
  if (!fieldPath || !(fieldDisplayValueRef !== null && fieldDisplayValueRef !== void 0 && fieldDisplayValueRef.current)) {
1012
1016
  return;
1013
1017
  }
1014
- fieldDisplayValueRef.current[fieldPath] = valueRef.current === emptyValue ? undefined : content;
1018
+ fieldDisplayValueRef.current[fieldPath] = valueRef.current === emptyValue ? {
1019
+ type
1020
+ } : {
1021
+ value,
1022
+ type
1023
+ };
1015
1024
  }, [identifier, emptyValue, fieldDisplayValueRef, itemPath, path]);
1016
1025
  const handleChange = useCallback(async (argFromInput, additionalArgs = undefined) => {
1017
1026
  const currentValue = valueRef.current;