Phone input prefill country issue fixed (#213)
* fix prefill phone issue * js phone parse fixes * revert last change * fix phone UI * Code optimize --------- Co-authored-by: Julien Nahum <julien@nahum.net>
This commit is contained in:
@@ -220,14 +220,14 @@ class AnswerFormRequest extends FormRequest
|
||||
|
||||
protected function prepareForValidation()
|
||||
{
|
||||
// Escape all '\' in select options
|
||||
$receivedData = $this->toArray();
|
||||
$mergeData = [];
|
||||
collect($this->form->properties)->filter(function ($property) {
|
||||
return in_array($property['type'], ['select', 'multi_select']);
|
||||
})->each(function ($property) use ($receivedData, &$mergeData) {
|
||||
$countryCodeMapper = json_decode(file_get_contents(resource_path('data/country_code_mapper.json')), true);
|
||||
collect($this->form->properties)->each(function ($property) use ($countryCodeMapper, $receivedData, &$mergeData) {
|
||||
$receivedValue = $receivedData[$property['id']] ?? null;
|
||||
if (!is_null($receivedValue)) {
|
||||
|
||||
// Escape all '\' in select options
|
||||
if(in_array($property['type'], ['select', 'multi_select']) && !is_null($receivedValue)){
|
||||
if (is_array($receivedValue)) {
|
||||
$mergeData[$property['id']] = collect($receivedValue)->map(function ($value) {
|
||||
$value = Str::of($value);
|
||||
@@ -244,6 +244,10 @@ class AnswerFormRequest extends FormRequest
|
||||
)->toString();
|
||||
}
|
||||
}
|
||||
|
||||
if($property['type'] === 'phone_number' && (!isset($property['use_simple_text_input']) || !$property['use_simple_text_input']) && $receivedValue && in_array($receivedValue, $countryCodeMapper)){
|
||||
$mergeData[$property['id']] = null;
|
||||
}
|
||||
});
|
||||
|
||||
$this->merge($mergeData);
|
||||
|
||||
@@ -131,6 +131,11 @@ class StoreFormSubmissionJob implements ShouldQueue
|
||||
if($this->form->is_pro && $field['type'] == 'signature') {
|
||||
$finalData[$field['id']] = $this->storeSignature($answerValue);
|
||||
}
|
||||
|
||||
// For Phone
|
||||
if($field['type'] == 'phone_number' && $answerValue && ctype_alpha(substr($answerValue, 0, 2)) && (!isset($field['use_simple_text_input']) || !$field['use_simple_text_input'])) {
|
||||
$finalData[$field['id']] = substr($answerValue, 2);
|
||||
}
|
||||
}
|
||||
|
||||
return $finalData;
|
||||
|
||||
@@ -12,10 +12,13 @@ class ValidPhoneInputRule implements Rule
|
||||
|
||||
public function passes($attribute, $value)
|
||||
{
|
||||
if (!is_string($value) || !Str::startsWith($value, '+')) {
|
||||
if (!is_string($value) || !$value) {
|
||||
return false;
|
||||
}
|
||||
try {
|
||||
if(ctype_alpha(substr($value, 0, 2))){ // First 2 will be country code
|
||||
$value = substr($value, 2);
|
||||
}
|
||||
$phoneUtil = \libphonenumber\PhoneNumberUtil::getInstance();
|
||||
$phone = $phoneUtil->parse($value);
|
||||
$this->reason = $phoneUtil->isPossibleNumberWithReason($phone);
|
||||
|
||||
Reference in New Issue
Block a user