<template> <form> <div> <label>Given name</label> <input required type="text" name="gname" v-model="user.firstName"/> </div> <div> <label>Surname</label> <input required type="text" name="sname" v-model="user.lastName"/> </div> <div> <label>Email</label> <input type="email" name="email" v-model="user.email"/> </div> <div> <label>Title</label> <select name="country" v-model="user.title"> <option value="Loan Officer">Loan Officer</option> <option value="Mortgage Broker">Mortgage Broker</option> <option value="Executive">Executive</option> <option value="Other">Other</option> </select> </div> <div> <label>Password</label> <input requried type="password" name="pass" v-model="user.password"/> </div> <div> <label>Country</label> <select name="country" v-model="user.country"> <option value="USA">USA</option> <option value="Canada">Canada</option> </select> </div> <div class="address-entry"> <label for="">Address</label> <input type="text" @input="searchLocation" v-model="address.full"> <dropdown v-if="addresses && addresses.length" :entries="addresses.map(a => ({text: a.full_address, value: a}))" @select="setAddress" > </dropdown> </div> <div><label>NMLS ID</label><input type="text" name="nmls"/></div> <div><span class="error">{{err}}</span></div> <div> <button class="btn" @click="submit" type="button">Continue</button> </div> </form> </template> <script setup> import { ref } from "vue" import Dropdown from "./dropdown.vue" const addresses = ref([]) const user = ref({country: "USA", title: "Loan Officer"}) const address = ref({}) const locationsId = ref(null) const props = defineProps(['err']) const emit = defineEmits(['submit']) function searchLocation(e) { address.value.full = e.target.value clearTimeout(locationsId.value) locationsId.value = setTimeout(getLocations, 1000, e) } function getLocations(e) { let prefix = "https://api.mapbox.com/search/searchbox/v1/suggest?" let search = e.target.value let key = encodeURIComponent(process.env.MAPBOX_API_KEY) if (!search) return fetch(`${prefix}q=${search}&proximity=ip&access_token=${key}&session_token=1` ).then(resp => resp.json()).then(entries => { if (!entries?.suggestions) { addresses.value = null return } addresses.value = entries.suggestions.filter(e => e.full_address) }) } function setAddress(a) { address.value = { id: address.value.id, full: a.full_address, street: a.address, city: a.context?.place.name ?? '', region: a.context?.region?.name ?? '', country: a.context?.country?.name ?? '', zip: a.context?.postcode?.name ?? '', } addresses.value = null } function submit() { user.value.address = address.value emit('submit', user.value) } </script> <style scoped> form > div { display: flex; justify-content: space-between; margin: 10px; position: relative; } button { margin: auto; min-width: 90px; display: block; } span.error { margin: 10px auto; color: darkred; } </style>