From a45489545faaadc2c880cf02e310c8e085c369d0 Mon Sep 17 00:00:00 2001 From: PelayoFelgueroso Date: Fri, 11 Sep 2026 09:36:08 +0200 Subject: [PATCH 1/4] Remove localization errors in v17.1.0 --- packages/lib/src/common/utils.ts | 22 +++++++++++++ .../lib/src/message-input/MessageInput.tsx | 33 +++++++++---------- 2 files changed, 38 insertions(+), 17 deletions(-) diff --git a/packages/lib/src/common/utils.ts b/packages/lib/src/common/utils.ts index c861119b5e..13ececd8f1 100644 --- a/packages/lib/src/common/utils.ts +++ b/packages/lib/src/common/utils.ts @@ -17,3 +17,25 @@ export const getMargin = (marginProp: Space | Margin | undefined, side: Side) => : marginProp && typeof marginProp === "string" ? spaces[marginProp] : "0px"; + +export const getLengthErrorMessage = ({ + value, + minLength, + maxLength, + minLengthErrorMessage, + maxLengthErrorMessage, +}: { + value: string; + minLength?: number; + maxLength?: number; + minLengthErrorMessage: (minLength: number) => string; + maxLengthErrorMessage: (maxLength: number) => string; +}) => { + if (minLength != null && value.length < minLength && minLengthErrorMessage) { + return minLengthErrorMessage(minLength); + } + if (maxLength != null && value.length > maxLength && maxLengthErrorMessage) { + return maxLengthErrorMessage(maxLength); + } + return undefined; +}; diff --git a/packages/lib/src/message-input/MessageInput.tsx b/packages/lib/src/message-input/MessageInput.tsx index f3f97e520f..3870aeb975 100644 --- a/packages/lib/src/message-input/MessageInput.tsx +++ b/packages/lib/src/message-input/MessageInput.tsx @@ -143,9 +143,8 @@ const DxcMessageInput = ({ tabIndex, value, }: PromptInputPropsType) => { - const languageContext = useContext(HalstackLanguageContext); - const translatedLabels = languageContext.labels; - const locale = languageContext.locale ?? "en-US"; + const translatedLabels = useContext(HalstackLanguageContext); + const locale = "en-US"; const inputId = `input-${useId()}`; const inputRef = useRef(null); const overlayRef = useRef(null); @@ -162,7 +161,7 @@ const DxcMessageInput = ({ } = useVoiceTranscription({ lang: locale, }); - const dropdownOptions = [{ label: languageContext.labels.messageInput.attachFileButtonTitle, value: "fileorphoto" }]; + const dropdownOptions = [{ label: translatedLabels.messageInput.attachFileButtonTitle, value: "fileorphoto" }]; const changeValue = (newValue: string) => { if (value == null) setInnerValue(newValue); @@ -171,8 +170,8 @@ const DxcMessageInput = ({ value: newValue, minLength, maxLength, - minLengthErrorMessage: translatedLabels.formFields.minLengthErrorMessage, - maxLengthErrorMessage: translatedLabels.formFields.maxLengthErrorMessage, + minLengthErrorMessage: translatedLabels.formFields.lengthErrorMessage, + maxLengthErrorMessage: translatedLabels.formFields.lengthErrorMessage, }); if (lengthError) { @@ -203,8 +202,8 @@ const DxcMessageInput = ({ value: event.target.value, minLength, maxLength, - minLengthErrorMessage: translatedLabels.formFields.minLengthErrorMessage, - maxLengthErrorMessage: translatedLabels.formFields.maxLengthErrorMessage, + minLengthErrorMessage: translatedLabels.formFields.lengthErrorMessage, + maxLengthErrorMessage: translatedLabels.formFields.lengthErrorMessage, }); if (lengthError) { @@ -326,7 +325,7 @@ const DxcMessageInput = ({ )} )} @@ -408,13 +407,13 @@ const DxcMessageInput = ({ onClick={!isGenerating ? handleSubmit : handleStop} title={ !isGenerating - ? languageContext.labels.messageInput.sendButtonTitle - : languageContext.labels.messageInput.stopButtonTitle + ? translatedLabels.messageInput.sendButtonTitle + : translatedLabels.messageInput.stopButtonTitle } aria-label={ !isGenerating - ? languageContext.labels.messageInput.sendButtonTitle - : languageContext.labels.messageInput.stopButtonTitle + ? translatedLabels.messageInput.sendButtonTitle + : translatedLabels.messageInput.stopButtonTitle } /> From 9ac5ec3352efcc7723ca4ba6e0472e9d3a39ce51 Mon Sep 17 00:00:00 2001 From: PelayoFelgueroso Date: Fri, 11 Sep 2026 11:08:59 +0200 Subject: [PATCH 2/4] fix test errors --- packages/lib/src/message-input/MessageInput.test.tsx | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/lib/src/message-input/MessageInput.test.tsx b/packages/lib/src/message-input/MessageInput.test.tsx index 10284a2046..c53193461b 100644 --- a/packages/lib/src/message-input/MessageInput.test.tsx +++ b/packages/lib/src/message-input/MessageInput.test.tsx @@ -186,23 +186,23 @@ describe("Message Input component tests", () => { fireEvent.change(input, { target: { value: "test" } }); expect(onChange).toHaveBeenCalledWith({ value: "test", - error: "The minimum length is 5.", + error: "Min length 5, max length undefined.", }); fireEvent.blur(input); expect(onBlur).toHaveBeenCalledWith({ value: "test", - error: "The minimum length is 5.", + error: "Min length 5, max length undefined.", }); fireEvent.change(input, { target: { value: "test-maximum-length" } }); expect(onChange).toHaveBeenCalledWith({ value: "test-maximum-length", - error: "The maximum length is 10.", + error: "Min length 5, max length 10.", }); fireEvent.blur(input); expect(onBlur).toHaveBeenCalledWith({ value: "test-maximum-length", - error: "The maximum length is 10.", + error: "Min length 5, max length 10.", }); fireEvent.change(input, { target: { value: "length" } }); @@ -435,7 +435,7 @@ describe("useVoiceTranscription", () => { }); test("resets transcript and isRecording when recognition ends automatically", () => { - const { result } = renderHook(() => useVoiceTranscription({ lang: "eb-US" })); + const { result } = renderHook(() => useVoiceTranscription({ lang: "en-US" })); act(() => { result.current.startRecording(); From f6d705a3771fc762e5a215d2b0229b6484fd8c9a Mon Sep 17 00:00:00 2001 From: PelayoFelgueroso Date: Fri, 11 Sep 2026 11:25:09 +0200 Subject: [PATCH 3/4] fix errors --- packages/lib/src/message-input/MessageInput.test.tsx | 4 ++-- packages/lib/src/message-input/MessageInput.tsx | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/lib/src/message-input/MessageInput.test.tsx b/packages/lib/src/message-input/MessageInput.test.tsx index c53193461b..cbf98aeab1 100644 --- a/packages/lib/src/message-input/MessageInput.test.tsx +++ b/packages/lib/src/message-input/MessageInput.test.tsx @@ -186,12 +186,12 @@ describe("Message Input component tests", () => { fireEvent.change(input, { target: { value: "test" } }); expect(onChange).toHaveBeenCalledWith({ value: "test", - error: "Min length 5, max length undefined.", + error: "Min length 5, max length 10.", }); fireEvent.blur(input); expect(onBlur).toHaveBeenCalledWith({ value: "test", - error: "Min length 5, max length undefined.", + error: "Min length 5, max length 10.", }); fireEvent.change(input, { target: { value: "test-maximum-length" } }); diff --git a/packages/lib/src/message-input/MessageInput.tsx b/packages/lib/src/message-input/MessageInput.tsx index 3870aeb975..5245bec1e9 100644 --- a/packages/lib/src/message-input/MessageInput.tsx +++ b/packages/lib/src/message-input/MessageInput.tsx @@ -170,8 +170,8 @@ const DxcMessageInput = ({ value: newValue, minLength, maxLength, - minLengthErrorMessage: translatedLabels.formFields.lengthErrorMessage, - maxLengthErrorMessage: translatedLabels.formFields.lengthErrorMessage, + minLengthErrorMessage: (min: number) => translatedLabels.formFields.lengthErrorMessage(min, maxLength), + maxLengthErrorMessage: (max: number) => translatedLabels.formFields.lengthErrorMessage(minLength, max), }); if (lengthError) { @@ -202,8 +202,8 @@ const DxcMessageInput = ({ value: event.target.value, minLength, maxLength, - minLengthErrorMessage: translatedLabels.formFields.lengthErrorMessage, - maxLengthErrorMessage: translatedLabels.formFields.lengthErrorMessage, + minLengthErrorMessage: (min: number) => translatedLabels.formFields.lengthErrorMessage(min, maxLength), + maxLengthErrorMessage: (max: number) => translatedLabels.formFields.lengthErrorMessage(minLength, max), }); if (lengthError) { From 1cf875e13ea839d0483f47cacdb9819852e2c779 Mon Sep 17 00:00:00 2001 From: PelayoFelgueroso Date: Fri, 11 Sep 2026 12:09:15 +0200 Subject: [PATCH 4/4] fix based on comments --- packages/lib/src/common/utils.ts | 22 --------------- .../lib/src/message-input/MessageInput.tsx | 27 +++++++++---------- 2 files changed, 12 insertions(+), 37 deletions(-) diff --git a/packages/lib/src/common/utils.ts b/packages/lib/src/common/utils.ts index 13ececd8f1..c861119b5e 100644 --- a/packages/lib/src/common/utils.ts +++ b/packages/lib/src/common/utils.ts @@ -17,25 +17,3 @@ export const getMargin = (marginProp: Space | Margin | undefined, side: Side) => : marginProp && typeof marginProp === "string" ? spaces[marginProp] : "0px"; - -export const getLengthErrorMessage = ({ - value, - minLength, - maxLength, - minLengthErrorMessage, - maxLengthErrorMessage, -}: { - value: string; - minLength?: number; - maxLength?: number; - minLengthErrorMessage: (minLength: number) => string; - maxLengthErrorMessage: (maxLength: number) => string; -}) => { - if (minLength != null && value.length < minLength && minLengthErrorMessage) { - return minLengthErrorMessage(minLength); - } - if (maxLength != null && value.length > maxLength && maxLengthErrorMessage) { - return maxLengthErrorMessage(maxLength); - } - return undefined; -}; diff --git a/packages/lib/src/message-input/MessageInput.tsx b/packages/lib/src/message-input/MessageInput.tsx index 5245bec1e9..1e7b093e91 100644 --- a/packages/lib/src/message-input/MessageInput.tsx +++ b/packages/lib/src/message-input/MessageInput.tsx @@ -22,7 +22,6 @@ import { HalstackLanguageContext } from "../HalstackContext"; import ErrorMessage from "../styles/forms/ErrorMessage"; import { useVoiceTranscription } from "./useVoiceTranscription"; import DxcSelect from "../select/Select"; -import { getLengthErrorMessage } from "../common/utils"; import DxcTypography from "../typography/Typography"; const sizes = { @@ -166,13 +165,12 @@ const DxcMessageInput = ({ const changeValue = (newValue: string) => { if (value == null) setInnerValue(newValue); - const lengthError = getLengthErrorMessage({ - value: newValue, - minLength, - maxLength, - minLengthErrorMessage: (min: number) => translatedLabels.formFields.lengthErrorMessage(min, maxLength), - maxLengthErrorMessage: (max: number) => translatedLabels.formFields.lengthErrorMessage(minLength, max), - }); + let lengthError: string | undefined; + if (minLength != null && newValue.length < minLength) { + lengthError = translatedLabels.formFields.lengthErrorMessage?.(minLength, maxLength); + } else if (maxLength != null && newValue.length > maxLength) { + lengthError = translatedLabels.formFields.lengthErrorMessage?.(minLength, maxLength); + } if (lengthError) { onChange?.({ value: newValue, error: lengthError }); @@ -198,13 +196,12 @@ const DxcMessageInput = ({ const handleInputOnBlur = (event: FocusEvent) => { setIsFocused(false); - const lengthError = getLengthErrorMessage({ - value: event.target.value, - minLength, - maxLength, - minLengthErrorMessage: (min: number) => translatedLabels.formFields.lengthErrorMessage(min, maxLength), - maxLengthErrorMessage: (max: number) => translatedLabels.formFields.lengthErrorMessage(minLength, max), - }); + let lengthError: string | undefined; + if (minLength != null && event.target.value.length < minLength) { + lengthError = translatedLabels.formFields.lengthErrorMessage?.(minLength, maxLength); + } else if (maxLength != null && event.target.value.length > maxLength) { + lengthError = translatedLabels.formFields.lengthErrorMessage?.(minLength, maxLength); + } if (lengthError) { onBlur?.({ value: event.target.value, error: lengthError });