@ammarahmed/notifee-react-native
Version:
Notifee - a feature rich notifications library for React Native.
68 lines (51 loc) • 1.99 kB
text/typescript
/*
* Copyright (c) 2016-present Invertase Limited
*/
import { AndroidInput } from '../types/NotificationAndroid';
import { objectHasProperty, isArrayOfStrings, isBoolean, isString } from '../utils';
export default function validateAndroidInput(input?: AndroidInput): AndroidInput {
const out: AndroidInput = {
allowFreeFormInput: true,
allowGeneratedReplies: true,
};
if (!input) {
return out;
}
if (objectHasProperty(input, 'allowFreeFormInput')) {
if (!isBoolean(input.allowFreeFormInput)) {
throw new Error("'input.allowFreeFormInput' expected a boolean value.");
}
out.allowFreeFormInput = input.allowFreeFormInput;
}
if (objectHasProperty(input, 'allowGeneratedReplies')) {
if (!isBoolean(input.allowGeneratedReplies)) {
throw new Error("'input.allowGeneratedReplies' expected a boolean value.");
}
out.allowGeneratedReplies = input.allowGeneratedReplies;
}
if (!out.allowFreeFormInput && (!input.choices || input.choices.length === 0)) {
throw new Error("'input.allowFreeFormInput' when false, you must provide at least one choice.");
}
if (objectHasProperty(input, 'choices')) {
if (!isArrayOfStrings(input.choices) || input.choices.length === 0) {
throw new Error("'input.choices' expected an array of string values.");
}
out.choices = input.choices;
}
if (objectHasProperty(input, 'editableChoices')) {
if (!isBoolean(input.editableChoices)) {
throw new Error("'input.editableChoices' expected a boolean value.");
}
out.editableChoices = input.editableChoices;
}
if (objectHasProperty(input, 'placeholder')) {
if (!isString(input.placeholder)) {
throw new Error("'input.placeholder' expected a string value.");
}
out.placeholder = input.placeholder;
}
if (out.editableChoices && !out.allowFreeFormInput) {
throw new Error("'input.editableChoices' when true, allowFreeFormInput must also be true.");
}
return out;
}