For Physicians Vendors Careers MyChart
Texas Health Resources Doctors Locations Urgent Care Get Care Now
1-877-847-9355
Texas Health Resources Doctors Locations Urgent Care Get Care Now
MyChart Schedule an Appointment Patient Resources Give About Texas Health Community Newsroom Get Involved Texas Health Physicians Group Texas Health Medical Associates Careers Physician Resources Residencies and Internships Contact Us
4.9
A member of Texas Health Physicians Group
Travis Lawrence Frantz, MD
Orthopaedic Surgery
Offers Video Visits
4.9
72 Ratings
29 Comments
Texas Health Orthopedic Specialists 2008 L Don Dodson Dr
Ste 100
Bedford, TX 76021-1844
817-283-0967
Ready for Assistance?
Request Appointment
${provider.namePlusDegree}
${ provider.PrimarySpecialties ? `
${provider.PrimarySpecialties.join(', ')}
` : '' } ${ provider.Rating ? `
${provider.Rating}
` : '' } ${ provider.isTHPG ? `
Offers Video Visits
` : '' }
Other Providers Available at this Location
${otherProv.namePlusDegree}
${ otherProv.PrimarySpecialties ? `
${otherProv.PrimarySpecialties.join(', ')}
` : '' } ${ otherProv.Rating ? `
${otherProv.Rating}
` : '' } ${ otherProv.isTHPG ? `
Offers Video Visits
` : '' }
${otherProv.CTA ? otherProv.CTA : ''}
${ location.hasSimilarMore ? ` More Care Team Members ` : '' }`; const widgetOther = document.querySelector('#widgetOther'); widgetOther.innerHTML = template; updateMoreCareTeamLink(widgetOther, otherProv, location, isExisting); } function populateWidgetProvs() { for (const loc of window.pageState.locations) { const primNpi = loc.primProvNpi.toString(); const localProvIdsArr = loc.ProviderIds.filter((p) => { return p != primNpi; }); const otherLocalProvArr = window.pageState.otherProviders.filter((prov) => { return localProvIdsArr.includes(prov.Npi.toString()) && prov.LocationId == loc.id; }); if (localProvIdsArr.length) { let localProvCTsArr = []; let localProvCTNpisArr = []; let localProvCTNpisPlusMDsArr = []; let localProvMDsArr = []; loc.hasSimilarMore = false; loc.soonestOtherProv = null; loc.soonestOtherProvExist = null; loc.soonestOtherProvNew= null; loc.hasCareTeamMore = false; loc.soonestCareTeamProv = null; loc.soonestCareTeamProvExist = null; loc.soonestCareTeamProvNew = null; localProvMDsArr = otherLocalProvArr.filter((prov) => prov.isMDDO); if (!window.pageState.primaryProvider.CareTeam.length) { if (otherLocalProvArr.some((prov) => prov.CareTeam.includes(primNpi))) { localProvMDsArr = otherLocalProvArr .filter((prov) => prov.CareTeam.includes(primNpi)); localProvCTNpisArr = otherLocalProvArr .filter((prov) => prov.CareTeam.includes(primNpi)) .reduce((acc, prov) => { for (const ctId of prov.CareTeam) { if (localProvIdsArr.includes(ctId)) { acc.push(...prov.CareTeam); } } return acc; }, []); localProvCTNpisArr = localProvCTNpisArr .filter((ctNpi, index) => { const alreadyFound = localProvCTNpisArr.indexOf(ctNpi) !== index; const isPrim = ctNpi == primNpi; return !(alreadyFound || isPrim); }); localProvCTNpisPlusMDsArr = [...localProvCTNpisArr]; for (const md of localProvMDsArr) { localProvCTNpisPlusMDsArr.push(md.Npi.toString()); } } } else { localProvCTNpisArr = window.pageState.primaryProvider.CareTeam; localProvCTNpisArr = localProvCTNpisArr.filter((ctNpi) => { return otherLocalProvArr.some((prov) => prov.Npi == ctNpi); }); localProvCTNpisArr = localProvCTNpisArr.filter((ctId) => localProvIdsArr.includes(ctId)); localProvCTNpisPlusMDsArr = [...localProvCTNpisArr]; for (const md of localProvMDsArr) { localProvCTNpisPlusMDsArr.push(md.Npi.toString()); } } if (localProvMDsArr.length === 1) { loc.soonestOtherProv = localProvMDsArr[0].Npi.toString(); loc.soonestOtherProvExist = localProvMDsArr[0].Npi.toString(); loc.soonestOtherProvNew = localProvMDsArr[0].Npi.toString(); } if (localProvMDsArr.length > 1) { loc.soonestOtherProvExist = localProvMDsArr.sort((a,b) => { return a.SoonestFollowUpClinicVisit - b.SoonestFollowUpClinicVisit; })[0].Npi.toString(); loc.soonestOtherProvNew = localProvMDsArr.sort((a,b) => { return a.SoonestNewClinicVisit - b.SoonestNewClinicVisit; })[0].Npi.toString(); loc.soonestOtherProv = localProvMDsArr.sort((a,b) => { return Math.min(a.SoonestNewClinicVisit,a.SoonestFollowUpClinicVisit) - Math.min(b.SoonestNewClinicVisit,b.SoonestFollowUpClinicVisit); })[0].Npi.toString(); loc.hasSimilarMore = true; } localProvCTsArr = otherLocalProvArr.filter((ct) => localProvCTNpisArr.includes(ct.Npi.toString())); loc.careTeamString = localProvCTNpisArr.join(','); loc.careTeamStringPlusMDs = localProvCTNpisPlusMDsArr.join(','); localProvCTNpisArr = localProvCTNpisArr.filter((provId) => provId != primNpi); if (localProvCTNpisArr.length === 1) { loc.soonestCareTeamProv = localProvCTNpisArr[0]; loc.soonestCareTeamProvExist = localProvCTNpisArr[0]; loc.soonestCareTeamProvNew = localProvCTNpisArr[0]; } if (localProvCTsArr.length > 1) { loc.soonestCareTeamProvExist = localProvCTsArr.sort((a,b) => { return a.SoonestFollowUpClinicVisit - b.SoonestFollowUpClinicVisit; })[0].Npi.toString(); loc.soonestCareTeamProvNew = localProvCTsArr.sort((a,b) => { return a.SoonestNewClinicVisit - b.SoonestNewClinicVisit; })[0].Npi.toString(); loc.soonestCareTeamProv = localProvCTsArr.sort((a,b) => { return Math.min(a.SoonestNewClinicVisit,a.SoonestFollowUpClinicVisit) - Math.min(b.SoonestNewClinicVisit,b.SoonestFollowUpClinicVisit); })[0].Npi.toString(); loc.hasCareTeamMore = true; } } } } function prepProvBooleans(provider) { provider.allowsScheduling = provider.BookingFlow.toLowerCase() == 'flow' ? true : false; provider.isMDDO = false; const requiredDegrees = ['MD', 'DO', 'md', 'do']; if (provider.Degrees.some((deg) => requiredDegrees.includes(deg))) { provider.isMDDO = true; } provider.isTHPG = provider.Tier == 1 ? true : false; } function prepProvCTA(provider, location) { let cta = ''; switch (provider.BookingFlow.toLowerCase()) { case 'flow': cta = providerTimeslots = `Request Appointment
Call For Appointment
`; if (location.Phone) { cta = callCTA; } cta = ''; default: cta = ''; } provider.CTA = cta; } function prepProvExtras (provider) { delete provider.ProviderUniqueUrlPacmed; delete provider.ProviderUniqueUrlProvidence; delete provider.ProviderUniqueUrlSwedish; }; function prepProvImage(provider) { if (provider.ImageUrl.length > 0) { provider.ImageUrl = provider.ImageUrl; } else { try { provider.ImageUrl = `https://www.texashealth.org/-/media/Experience-Explorer/Presets/Unknown-128x128.jpg`; } catch (error) { console.error('Could not retrieve placeholder image', error); } } } function prepProvLocURL(provider) { if ( provider.LocationUrls && provider.LocationUrls[0] && provider.LocationUrls[0].length ) { function prepURL(url) { const locationUrlObj = /^http/gi.test(url) ? new URL(url) : /^www/gi.test(url) ? new URL('https://' + url) : new URL('https://www.care.texashealth.org' + url); return locationUrlObj.href; } provider.locationUrlsPrepped = []; for (let [i, url] of provider.LocationUrls.entries()) { provider.locationUrlsPrepped[i] = prepURL(url); } } } function prepProvName(provider) { if ( provider.Name && provider.Names && provider.Names.length ) { if (provider.isMDDO) { provider.shortName = `Dr. ${provider.Names[2]}`; } else { provider.shortName = `${provider.Names[0]} ${provider.Names[2]}`; } provider.namePlusDegree = provider.Degrees.length && provider.Degrees[0] !== '' ? provider.Name + `, ${provider.Degrees.join(', ')}` : provider.Name; provider.namePlusDegreeRaw = provider.namePlusDegree; } } function prepProvPhone(provider) { if (provider.Phones[0] && provider.Phones[0].length) { provider.Phones = provider.Phones.map((phone) => { return formatPhoneNumber(phone, 'hyphenated'); }); } }; function prepProvRating(provider) { if (provider.Rating > 0) { provider.Rating = fixedRating(provider.Rating); } provider.isRatingsPlural = !provider.RatingCount ? false : provider.RatingCount > 1 ? true : false; provider.isReviewsPlural = !provider.ReviewCount ? false : provider.ReviewCount > 1 ? true : false; } function prepProvURL(provider) { if (provider.ProfileUrl) { const url = provider.ProfileUrl; const providerUrl = /^http/gi.test(url) ? url : /^www/gi.test(url) ? 'https://' + url : 'https://www.care.texashealth.org' + url; provider.profileUrlPrepped = providerUrl; } } function reloadWidgetCareTeam(npiToLoad, location, isExisting = undefined) { const widgetCareTeam = document.querySelector('#widgetCareTeam'); const provCTNpi = widgetCareTeam?.querySelector('provider-timeslots')?.getAttribute('provider'); let providerCT = null; if (provCTNpi != npiToLoad) { providerCT = window.pageState.otherProviders.find((prov) => { return prov.Npi == npiToLoad && prov.LocationId == location.id; }); populateWidgetCareTeam(providerCT, location, isExisting); } else { updateMoreCareTeamLink(widgetCareTeam, providerCT, location, isExisting); } } function reloadWidgetOther(npiToLoad, location, isExisting = undefined) { const widgetOther = document.querySelector('#widgetOther'); const otherProvNpi = widgetOther?.querySelector('provider-timeslots')?.getAttribute('provider'); let providerOP = null; if (otherProvNpi != npiToLoad) { providerOP = window.pageState.otherProviders.find((prov) => { return prov.Npi == npiToLoad && prov.LocationId == location.id; }); populateWidgetOther(providerOP, location, isExisting); } else { const otherProv = window.pageState.otherProviders.find((prov) => prov.Npi == otherProvNpi); updateMoreCareTeamLink(widgetOther, otherProv, location, isExisting); } } async function returnJSON (res, identifier = '') { if (res.status === 200 || res.ok) { const response = await res.json(); if (response && !/(undefined|false|null)/.test(response)) { return response; } else { console.error(`Unexpected fetch response for ${identifier}:`, response); }; } else { const msg = `${res.status} Failure fetching api for ${identifier}`; console.error(msg); }; } function selectMarker() { if (google.maps) { const dropdownEl = document.querySelector('.selector-dropdown'); let location = window.search.helpers.state.visibleResults.results[0].id; if (dropdownEl?.dataset.value) { location = dropdownEl.dataset.value } google.maps.event.trigger(window.search.helpers.map.markers[location], 'click'); } } function setEventListeners() { const addrBlock = document.getElementById('addrBlock'); const locName = document.getElementById('locName'); addrBlock?.addEventListener('click', selectMarker); locName?.addEventListener('click', selectMarker); const locationSelector = document.querySelector('#locationSelector'); locationSelector?.addEventListener('click', handleDropdown); window.addEventListener('marker-clicked', (event) => { const dropdownEl = document.querySelector('.selector-dropdown'); if ( dropdownEl?.dataset.value && event.detail.location != dropdownEl?.dataset.value ) { const options = document.querySelectorAll('.selector-options')[0]; const optionBtn = options.querySelector( 'button[value="' + event.detail.location + '"]' ); optionBtn.click(); dropdownEl.click(); } }); window.addEventListener('existing-patient-clicked', (event) => { const location = window.pageState.locations.find((loc) => loc.id === window.pageState.selectedLoc); window.pageState.patientType = 'existing'; switch (location.primProvCategory) { case 'CT2': if (location.soonestCareTeamProv) { if (location.soonestCareTeamProvExist) { reloadWidgetCareTeam(location.soonestCareTeamProvExist, location, true); } else { reloadWidgetCareTeam(location.soonestCareTeamProv, location, true); } document.querySelector('#widgetCareTeam')?.classList.remove('hidden'); document.querySelector('#widgetOther')?.classList.add('hidden'); } else if (location.soonestOtherProv) { if (location.soonestOtherProvExist) { reloadWidgetOther(location.soonestOtherProvExist, location, true); } else { reloadWidgetOther(location.soonestOtherProv, location, true); } document.querySelector('#widgetOther')?.classList.remove('hidden'); document.querySelector('#widgetCareTeam')?.classList.add('hidden'); } break; case 'MDCT': if (location.soonestCareTeamProv) { if (location.soonestCareTeamProvExist) { reloadWidgetCareTeam(location.soonestCareTeamProvExist, location, true); } else { reloadWidgetCareTeam(location.soonestCareTeamProv, location, true); } document.querySelector('#widgetCareTeam')?.classList.remove('hidden'); document.querySelector('#widgetOther')?.classList.add('hidden'); } break; case 'CT1': if (location.soonestOtherProv) { if (location.soonestOtherProvNew) { reloadWidgetOther(location.soonestOtherProvNew, location, true); } else { reloadWidgetOther(location.soonestOtherProv, location, true); } document.querySelector('#widgetCareTeam')?.classList.add('hidden'); document.querySelector('#widgetOther')?.classList.remove('hidden'); } break; case 'MD': default: document.querySelector('#widgetCareTeam')?.classList.add('hidden'); document.querySelector('#widgetOther')?.classList.add('hidden'); break; } switch (location.primProvCategory) { case 'CT2': if (location.soonestCareTeamProv) { document.querySelector('#widgetCareTeam')?.querySelector('#moreCareTeamLink')?.classList.remove('disabled'); } else if (location.soonestOtherProv) { document.querySelector('#widgetOther')?.querySelector('#moreCareTeamLink')?.classList.remove('disabled'); } break; case 'MDCT': if (location.soonestCareTeamProv) { document.querySelector('#widgetCareTeam')?.querySelector('#moreCareTeamLink')?.classList.remove('disabled'); } break; case 'CT1': if (location.soonestOtherProv) { document.querySelector('#widgetOther')?.querySelector('#moreCareTeamLink')?.classList.remove('disabled'); } break; case 'MD': default: break; } }); window.addEventListener('new-patient-clicked', (event) => { const location = window.pageState.locations.find((loc) => loc.id === window.pageState.selectedLoc); window.pageState.patientType = 'new'; switch (location.primProvCategory) { case 'CT1': case 'CT2': case 'MD': if (location.soonestOtherProv) { if (location.soonestOtherProvNew) { reloadWidgetOther(location.soonestOtherProvNew, location, false); } else { reloadWidgetOther(location.soonestOtherProv, location, false); } document.querySelector('#widgetCareTeam')?.classList.add('hidden'); document.querySelector('#widgetOther')?.classList.remove('hidden'); } break; case 'MDCT': if (location.soonestCareTeamProv) { if (location.soonestCareTeamProvNew) { reloadWidgetCareTeam(location.soonestCareTeamProvNew, location, false); } else { reloadWidgetCareTeam(location.soonestCareTeamProv, location, false); } document.querySelector('#widgetCareTeam')?.classList.remove('hidden'); document.querySelector('#widgetOther')?.classList.add('hidden'); } break; default: document.querySelector('#widgetCareTeam')?.classList.add('hidden'); document.querySelector('#widgetOther')?.classList.add('hidden'); break; } switch (location.primProvCategory) { case 'CT1': case 'CT2': case 'MD': if (location.soonestOtherProv) { document.querySelector('#widgetOther')?.querySelector('#moreCareTeamLink')?.classList.remove('disabled'); } break; case 'MDCT': if (location.soonestCareTeamProv) { document.querySelector('#widgetCareTeam')?.querySelector('#moreCareTeamLink')?.classList.remove('disabled'); } break; default: break; } switch (location.primProvCategory) { case 'CT1': case 'CT1': case 'MD': if (location.soonestOtherProv) { document.querySelector('#widgetOther')?.querySelector('#moreCareTeamLink')?.classList.remove('disabled'); } break; case 'MDCT': if (location.soonestCareTeamProv) { document.querySelector('#widgetCareTeam')?.querySelector('#moreCareTeamLink')?.classList.remove('disabled'); } break; default: break; } }); window.addEventListener('restart-wizard-clicked', (event) => { window.pageState.patientType = ''; displayCrossSells(); if (event.target.getAttribute('provider') != window.pageState.primaryProvider.Npi) { const primaryTimeslots = document.querySelector('#primaryTimeslots'); primaryTimeslots.outerHTML = primaryTimeslots.outerHTML; } document.querySelector('#moreCareTeamLink')?.classList.add('disabled'); }); } function setState(obj) { if (Object.keys(obj).length > 0) { window.pageState = Object.assign(window.pageState, obj); return; } else { console.error('setState data object keys are:', obj); } } function toggleHidden(el) { if (el.classList.contains('hidden')) { el.classList.remove('hidden'); } else { el.classList.add('hidden'); } } function updateLocationElements(location) { const address = document.querySelector('#addrCtnt'); const addressBlock = document.querySelector('#addrBlock'); const directions = document.querySelector('#btnGetDirections'); const locationLink = document.querySelector('#locLink'); const phoneLink = document.querySelector('#phoneLnk'); const primaryTimeslots = document.querySelector('#primaryTimeslots'); const addressContent = `${location.address.street}${location.address.city}, ${location.address.region ?? 'TX'} ${location.address.postalCode}`; if (address) { address.innerHTML = addressContent; } if (addressBlock) { addressBlock.ariaLabel = location.address.full; } if (locationLink) { locationLink.href = location.Url; locationLink.dataset.varsLocationLink = location.Url; } if (phoneLink) { if (location.Phone) { phoneLink.innerHTML = location.Phone; phoneLink.href = 'tel:' + location.Phone; phoneLink.parentElement.classList.remove('hidden'); } else { phoneLink.parentElement.classList.add('hidden'); } } if (directions) { directions.href = "https://maps.google.com/maps/dir//" + location.address.googleAddress; } if (primaryTimeslots) { primaryTimeslots.setAttribute('location', location.address.apiString); primaryTimeslots.setAttribute('location-id', location.id); primaryTimeslots.setAttribute('phone', location.Phone); primaryTimeslots.outerHTML = primaryTimeslots.outerHTML; } } function updateMoreCareTeamLink(widget, provider, location, isExisting) { const moreCareTeamLink = widget.querySelector('#moreCareTeamLink'); if (moreCareTeamLink) { if (location.primProvCategory === 'MD') { moreCareTeamLink.href = `${location.Url}?doctorsOnly=true`; } else if ( location.primProvCategory === 'MDCT' && (isExisting === true || typeof isExisting === undefined) ) { moreCareTeamLink.href = `${location.Url}?doctor=${location.primProvShortName}&providers=${location.careTeamString}`; } else { let selectedLocData = {}; if (window.pageState.locations.length) { selectedLocData = window.pageState.locations .filter((loc) => (loc.id == location.id))[0]; moreCareTeamLink.href = `${location.Url}?${location.primProvCategory === 'MDCT' ? `doctor=${location.primProvShortName}&` : ''}providers=${selectedLocData.careTeamStringPlusMDs}`; } else { moreCareTeamLink.href = `${location.Url}`; } } } }