diff --git a/app/components/settings/bool_setting.tsx b/app/components/settings/bool_setting.tsx
index 1d7f9d90926..aef8dbdfbff 100644
--- a/app/components/settings/bool_setting.tsx
+++ b/app/components/settings/bool_setting.tsx
@@ -12,7 +12,7 @@ import Label from './label';
type Props = {
label?: string;
- value: boolean;
+ value?: boolean;
placeholder?: string;
helpText?: string;
errorText?: string;
diff --git a/app/components/settings/radio_setting/index.tsx b/app/components/settings/radio_setting/index.tsx
index 94ec377feaf..80cab6f60a6 100644
--- a/app/components/settings/radio_setting/index.tsx
+++ b/app/components/settings/radio_setting/index.tsx
@@ -30,7 +30,7 @@ type Props = {
onChange: (value: string) => void;
helpText?: string;
errorText?: string;
- value: string;
+ value?: string;
testID: string;
}
function RadioSetting({
diff --git a/app/components/settings/text_setting.tsx b/app/components/settings/text_setting.tsx
index 2e627c9a464..c58840202c5 100644
--- a/app/components/settings/text_setting.tsx
+++ b/app/components/settings/text_setting.tsx
@@ -55,7 +55,7 @@ type Props = {
maxLength?: number;
optional: boolean;
onChange: (value: string) => void;
- value: string;
+ value?: string;
multiline: boolean;
keyboardType: KeyboardTypeOptions;
secureTextEntry: boolean;
diff --git a/app/screens/interactive_dialog/dialog_element.tsx b/app/screens/interactive_dialog/dialog_element.tsx
index 573c80b8254..422adcdb3b8 100644
--- a/app/screens/interactive_dialog/dialog_element.tsx
+++ b/app/screens/interactive_dialog/dialog_element.tsx
@@ -22,6 +22,21 @@ function selectKeyboardType(type: InteractiveDialogElementType, subtype?: Intera
return selectKB(subtype);
}
+function getStringValue(value: string | number | boolean | string[] | undefined): string | undefined {
+ if (typeof value === 'string') {
+ return value;
+ }
+ if (typeof value === 'number') {
+ return value.toString();
+ }
+
+ return undefined;
+}
+
+function getBooleanValue(value: string | number | boolean | string[] | undefined): boolean | undefined {
+ return typeof value === 'boolean' ? value : undefined;
+}
+
type Props = {
displayName: string;
name: string;
@@ -34,7 +49,7 @@ type Props = {
dataSource?: string;
optional?: boolean;
options?: PostActionOption[];
- value: string|number|boolean|string[];
+ value?: string|number|boolean|string[];
onChange: (name: string, value: string|number|boolean|string[]) => void;
}
function DialogElement({
@@ -59,7 +74,7 @@ function DialogElement({
return;
}
onChange(name, newValue);
- }, [onChange, type, subtype]);
+ }, [type, subtype, onChange, name]);
const handleSelect = useCallback((newValue: DialogOption | undefined) => {
if (!newValue) {
@@ -68,7 +83,7 @@ function DialogElement({
}
onChange(name, newValue.value);
- }, [onChange]);
+ }, [name, onChange]);
switch (type) {
case 'text':
@@ -77,7 +92,7 @@ function DialogElement({
@@ -116,14 +131,14 @@ function DialogElement({
options={options}
onChange={handleChange}
testID={testID}
- value={value as string}
+ value={getStringValue(value)}
/>
);
case 'bool':
return (
{
setButtons(componentId, {
@@ -190,7 +190,7 @@ function InteractiveDialog({
} else {
close();
}
- }, [elements, values, intl, url, callbackId, state]);
+ }, [elements, url, callbackId, state, values, serverUrl, intl]);
useEffect(() => {
const unsubscribe = Navigation.events().registerComponentListener({
@@ -219,7 +219,7 @@ function InteractiveDialog({
return () => {
unsubscribe.remove();
};
- }, [serverUrl, url, callbackId, state, handleSubmit, submitting]);
+ }, [serverUrl, url, callbackId, state, handleSubmit, submitting, componentId, notifyOnCancel]);
useAndroidHardwareBackHandler(componentId, close);
@@ -246,9 +246,6 @@ function InteractiveDialog({
}
{Boolean(elements) && elements.map((e) => {
const value = secureGetFromRecord(values, e.name);
- if (value === undefined) {
- return null;
- }
return (