1import { j as defineComponent, _ as _export_sfc, o as openBlock, e as createElementBlock, F as Fragment, x as renderList, q as createVNode, c as computed, v as normalizeClass, f as createBaseVNode, n as normalizeStyle, z as createBlock, h as toDisplayString, u as usePageContext, l as toValue, r as ref, A as withCtx, I as createTextVNode, J as withModifiers, y as createCommentVNode, aj as watchEffect, k as onMounted } from "./chunk-Cy-M6TJt.js"; 2import { r as round, j as consumeFindAProProfileNavigation, k as isFindAProResultsReferrer, l as FIND_A_PRO_RETURN_KEY, a as getContractorPhoneNumber, h as hasBookNow, i as isProProfileVisible, s as shouldShowContractorRatings } from "./chunk-zmiQUxkT.js"; 3import { C as ContractorProfileSchedule } from "./chunk-Ch7vcZ-e.js"; 4import { u as useQuery } from "./chunk-Vr0xDQgr.js"; 5import { a as getContractorRatingSiteReviews, b as getContractorLocatorSummary, c as getContractorProProfile, d as getContractorRatingSiteSummary } from "./chunk-BB04vi68.js"; 6import { p as parseNumbers, C as ContractorProfileCertifications } from "./chunk-C8arQODs.js"; 7import { c as classNames, R as RmcButton } from "./chunk-B7DFmrmH.js"; 8import { R as RmcCheckmarkText } from "./chunk-Cj57D2wK.js"; 9import { f as formatDate } from "./chunk-DGioMSJG.js"; 10import { R as RmcPagination } from "./chunk-Bv1NtE3C.js"; 11import { u as useI18n } from "./chunk-DUNv5myb.js"; 12import { C as ClientOnly } from "./chunk-QukBD2Rw.js"; 13import { R as RmcIcon } from "./chunk-Bov-RE3A.js"; 14import { R as RmcBreadcrumbs } from "./chunk-Bx8u2xDv.js"; 15import { u as useData } from "./chunk-Ch88nc1G.js"; 16import { u as useRegion } from "./chunk-Clb5_Slq.js"; 17import { g as getContractorEditUrl } from "./chunk-B6g45iIm.js"; 18const _sfc_main$b = /* @__PURE__ */ defineComponent({ 19 __name: "ContractorProfileServicesOffered", 20 props: { 21 data: {} 22 }, 23 setup(__props, { expose: __expose }) { 24 var _a; 25 __expose(); 26 const props = __props; 27 const cleanedServiceNames = (_a = props == null ? void 0 : props.data) == null ? void 0 : _a.map( 28 (str) => str.replace(/[^a-zA-Z0-9 &-]/g, "") 29 ); 30 const __returned__ = { props, cleanedServiceNames, RmcCheckmarkText }; 31 Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); 32 return __returned__; 33 } 34}); 35const _hoisted_1$b = { class: "row row-cols-1 row-cols-md-2 row-cols-xl-5 rmc-gy-xl" }; 36const _hoisted_2$a = { class: "col" }; 37function _sfc_render$b(_ctx, _cache, $props, $setup, $data, $options) { 38 return openBlock(), createElementBlock("div", _hoisted_1$b, [ 39 (openBlock(true), createElementBlock(Fragment, null, renderList($setup.cleanedServiceNames, (item) => { 40 return openBlock(), createElementBlock("div", _hoisted_2$a, [ 41 createVNode($setup["RmcCheckmarkText"], { text: item }, null, 8, ["text"]) 42 ]); 43 }), 256)) 44 ]); 45} 46const ContractorProfileServicesOffered = /* @__PURE__ */ _export_sfc(_sfc_main$b, [["render", _sfc_render$b], ["__file", "ContractorProfileServicesOffered.vue"]]); 47const _sfc_main$a = /* @__PURE__ */ defineComponent({ 48 __name: "ContractorProfileMoreBusinessInfo", 49 props: { 50 data: {}, 51 contractorCountry: {} 52 }, 53 setup(__props, { expose: __expose }) { 54 __expose(); 55 const props = __props; 56 const businessInfoItems = computed((v) => { 57 if (!props.data) { 58 return []; 59 } 60 const result = []; 61 if (hasCreditCard(props.data)) { 62 result.push("Accepts credit cards"); 63 } 64 if (props.data.IsAcceptChecks) { 65 result.push("Accept personal checks"); 66 } 67 if (props.data.IsAcceptApplePay) { 68 result.push("Accept Apple Pay"); 69 } 70 if (props.data.IsAcceptGooglePay) { 71 result.push("Accept Google Pay"); 72 } 73 if (props.data.IsAcceptPayPal) { 74 result.push("Accept PayPal"); 75 } 76 if (props.data.IsAcceptCrypto) { 77 result.push("Accept Crypto Currency"); 78 } 79 if (props.data.IsOfferMilitaryDiscount) { 80 result.push("Offer a Military Discount"); 81 } 82 if (props.data.IsVeteranOwned) { 83 result.push("We are Veteran Owned"); 84 } 85 if (props.data.IsByAppointmentOnly) { 86 result.push("Appointment Only"); 87 } 88 if (props.data.IsLicensed) { 89 result.push("Licensed"); 90 } 91 if (props.data.IsInsured) { 92 result.push("Insured"); 93 } 94 if (props.data.IsBonded) { 95 if (props.contractorCountry === "CA") { 96 result.push("Financing available"); 97 } else { 98 result.push("Bonded"); 99 } 100 } 101 return result; 102 }); 103 function hasCreditCard(value) { 104 return value.IsAcceptCreditCards || value.IsAcceptChecks || value.IsAcceptApplePay || value.IsAcceptGooglePay || value.IsAcceptPayPal || value.IsAcceptCrypto || value.IsOfferMilitaryDiscount || value.IsVeteranOwned || value.IsByAppointmentOnly || value.IsLicensed || value.IsInsured || value.IsBonded; 105 } 106 const __returned__ = { props, businessInfoItems, hasCreditCard, RmcCheckmarkText };
107 Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); 108 return __returned__; 109 } 110}); 111const _hoisted_1$a = { class: "row row-cols-1 row-cols-md-2 row-cols-xl-5 rmc-gy-xl" }; 112const _hoisted_2$9 = { class: "col" }; 113function _sfc_render$a(_ctx, _cache, $props, $setup, $data, $options) { 114 return openBlock(), createElementBlock("div", _hoisted_1$a, [ 115 (openBlock(true), createElementBlock(Fragment, null, renderList($setup.businessInfoItems, (item) => { 116 return openBlock(), createElementBlock("div", _hoisted_2$9, [ 117 createVNode($setup["RmcCheckmarkText"], { text: item }, null, 8, ["text"]) 118 ]); 119 }), 256)) 120 ]); 121} 122const ContractorProfileMoreBusinessInfo = /* @__PURE__ */ _export_sfc(_sfc_main$a, [["render", _sfc_render$a], ["__file", "ContractorProfileMoreBusinessInfo.vue"]]); 123const _sfc_main$9 = /* @__PURE__ */ defineComponent({ 124 __name: "RmcStarBar", 125 props: { 126 value: {}, 127 size: { default: "md" } 128 }, 129 setup(__props, { expose: __expose }) { 130 __expose(); 131 const starClassNames = classNames( 132 "rmc-rating-star", 133 `rmc-rating-star_${__props.size || "md"}` 134 ); 135 const filledStarsCount = Math.floor(__props.value); 136 const lastStarPercent = computed(() => (__props.value - filledStarsCount) * 100); 137 const starsPercent = new Array(5).fill(null).map((v, i) => { 138 if (i <= filledStarsCount - 1) { 139 return 100; 140 } 141 if (i === 4) { 142 return lastStarPercent.value; 143 } 144 return 0; 145 }); 146 const __returned__ = { starClassNames, filledStarsCount, lastStarPercent, starsPercent }; 147 Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); 148 return __returned__; 149 } 150}); 151const _hoisted_1$9 = { class: "rmc-rating-overall__rating" }; 152function _sfc_render$9(_ctx, _cache, $props, $setup, $data, $options) { 153 return openBlock(), createElementBlock("div", _hoisted_1$9, [ 154 (openBlock(true), createElementBlock(Fragment, null, renderList($setup.starsPercent, (item) => { 155 return openBlock(), createElementBlock("div", { 156 class: normalizeClass($setup.starClassNames) 157 }, [ 158 createBaseVNode("div", { 159 class: "rmc-rating-star__full", 160 style: normalizeStyle(`width: ${item}%`) 161 }, null, 4), 162 _cache[0] || (_cache[0] = createBaseVNode("div", { class: "rmc-rating-star__outline" }, null, -1)) 163 ], 2); 164 }), 256)) 165 ]); 166} 167const RmcStarBar = /* @__PURE__ */ _export_sfc(_sfc_main$9, [["render", _sfc_render$9], ["__file", "RmcStarBar.vue"]]); 168const _sfc_main$8 = /* @__PURE__ */ defineComponent({ 169 __name: "ContractorProfileRatingOverall", 170 props: { 171 ratingValue: {} 172 }, 173 setup(__props, { expose: __expose }) { 174 __expose(); 175 const __returned__ = { get round() { 176 return round; 177 }, RmcStarBar }; 178 Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); 179 return __returned__; 180 } 181}); 182const _hoisted_1$8 = { class: "rmc-rating-overall" }; 183const _hoisted_2$8 = { class: "rmc-rating-overall__overall-rating" }; 184function _sfc_render$8(_ctx, _cache, $props, $setup, $data, $options) { 185 return openBlock(), createElementBlock("div", _hoisted_1$8, [ 186 (openBlock(), createBlock($setup["RmcStarBar"], { 187 key: $props.ratingValue, 188 value: $props.ratingValue 189 }, null, 8, ["value"])), 190 createBaseVNode("div", _hoisted_2$8, toDisplayString($setup.round($props.ratingValue)) + " Overall ", 1), 191 _cache[0] || (_cache[0] = createBaseVNode("div", { class: "rmc-rating-overall__count" }, null, -1)) 192 ]); 193} 194const ContractorProfileRatingOverall = /* @__PURE__ */ _export_sfc(_sfc_main$8, [["render", _sfc_render$8], ["__file", "ContractorProfileRatingOverall.vue"]]); 195const _sfc_main$7 = /* @__PURE__ */ defineComponent({ 196 __name: "RmcRatingBar", 197 props: { 198 label: {}, 199 value: {}, 200 max: {} 201 }, 202 setup(__props, { expose: __expose }) { 203 __expose(); 204 const percent = computed(() => round(__props.value / __props.max * 100)); 205 const __returned__ = { percent }; 206 Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); 207 return __returned__; 208 } 209}); 210const _hoisted_1$7 = { class: "rmc-rating-bar w-100" }; 211const _hoisted_2$7 = { class: "rmc-rating-bar__stars" }; 212const _hoisted_3$5 = { class: "rmc-rating-bar__progress-bar w-auto" }; 213const _hoisted_4$4 = { class: "rmc-rating-bar__count" }; 214function _sfc_render$7(_ctx, _cache, $props, $setup, $data, $options) { 215 return openBlock(), createElementBlock("div", _hoisted_1$7, [ 216 createBaseVNode("div", _hoisted_2$7, toDisplayString($props.label), 1), 217 createBaseVNode("div", _hoisted_3$5, [ 218 createBaseVNode("div", { 219 class: "rmc-rating-bar__progress", 220 style: normalizeStyle(`width: ${$setup.percent}%`) 221 }, null, 4) 222 ]), 223 createBaseVNode("div", _hoisted_4$4, toDisplayString($props.value), 1) 224 ]); 225} 226const RmcRatingBar = /* @__PURE__ */ _export_sfc(_sfc_main$7, [["render", _sfc_render$7], ["__file", "RmcRatingBar.vue"]]); 227const _sfc_main$6 = /* @__PURE__ */ defineComponent({ 228 __name: "ContractorProfileRatingBlock", 229 props: { 230 title: {}, 231 items: {} 232 }, 233 setup(__props, { expose: __expose }) { 234 __expose(); 235 const max = computed(() => Math.max(...__props.items.map((v) => v.value))); 236 const __returned__ = { max, RmcRatingBar };
237 Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); 238 return __returned__; 239 } 240}); 241const _hoisted_1$6 = { class: "rmc-rating-block" }; 242const _hoisted_2$6 = { class: "rmc-rating-block__title" }; 243const _hoisted_3$4 = { class: "rmc-rating-block__bars w-100" }; 244function _sfc_render$6(_ctx, _cache, $props, $setup, $data, $options) { 245 return openBlock(), createElementBlock("div", _hoisted_1$6, [ 246 createBaseVNode("div", _hoisted_2$6, toDisplayString($props.title), 1), 247 createBaseVNode("div", _hoisted_3$4, [ 248 (openBlock(true), createElementBlock(Fragment, null, renderList($props.items, ({ label, value }) => { 249 return openBlock(), createBlock($setup["RmcRatingBar"], { 250 label, 251 value, 252 max: $setup.max 253 }, null, 8, ["label", "value", "max"]); 254 }), 256)) 255 ]) 256 ]); 257} 258const ContractorProfileRatingBlock = /* @__PURE__ */ _export_sfc(_sfc_main$6, [["render", _sfc_render$6], ["__file", "ContractorProfileRatingBlock.vue"]]); 259const useSiteReviews = (id2, page, sort = "asc") => { 260 const pageContext = usePageContext(); 261 const language = pageContext.gtLang; 262 return useQuery({ 263 queryKey: ["contractor-reviews", id2, page, sort, language], 264 queryFn: async () => { 265 const currentPage = toValue(page) || 1; 266 return (await getContractorRatingSiteReviews(toValue(id2), { 267 top: 10, 268 skip: (currentPage - 1) * 10, 269 sortColumn: "SubmissionDate", 270 sortOrder: toValue(sort) 271 })).data; 272 } 273 }); 274}; 275const _sfc_main$5 = /* @__PURE__ */ defineComponent({ 276 __name: "ContractorProfileReviewItem", 277 props: { 278 data: {} 279 }, 280 setup(__props, { expose: __expose }) { 281 __expose(); 282 const __returned__ = { RmcStarBar, get formatDate() { 283 return formatDate; 284 } }; 285 Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); 286 return __returned__; 287 } 288}); 289const _hoisted_1$5 = { class: "d-flex rmc-py-3xl rmc-gap-xl" }; 290const _hoisted_2$5 = { class: "d-flex flex-column rmc-gap-3xl flex-grow-1" }; 291const _hoisted_3$3 = { class: "d-flex flex-column" }; 292const _hoisted_4$3 = { class: "d-flex justify-content-between rmc-gap-xl" }; 293const _hoisted_5$3 = { class: "rmc-ty-text-md fw-bold" }; 294const _hoisted_6$3 = { class: "rmc-ty-text-xs fw-light" }; 295const _hoisted_7$3 = { class: "d-flex col-auto flex-column flex-xl-row rmc-gap-xxs rmc-gap-xl-2xl" }; 296const _hoisted_8$3 = { class: "d-flex rmc-gap-3xl" }; 297const _hoisted_9$3 = { class: "rmc-rating-overall" }; 298const _hoisted_10$2 = { class: "rmc-rating-overall__reviewer fw-normal fw-xl-bold" }; 299const _hoisted_11$2 = { class: "rmc-rating-overall__count" }; 300const _hoisted_12$2 = { class: "rmc-ty-text-sm fw-light" }; 301function _sfc_render$5(_ctx, _cache, $props, $setup, $data, $options) { 302 return openBlock(), createElementBlock("div", _hoisted_1$5, [ 303 _cache[0] || (_cache[0] = createBaseVNode("div", null, [ 304 createBaseVNode("div", { 305 class: "rounded-circle rmc-height-7xl rmc-width-7xl", 306 style: { "background": "salmon" } 307 }) 308 ], -1)), 309 createBaseVNode("div", _hoisted_2$5, [ 310 createBaseVNode("div", _hoisted_3$3, [ 311 createBaseVNode("div", _hoisted_4$3, [ 312 createBaseVNode("div", null, [ 313 createBaseVNode("div", _hoisted_5$3, toDisplayString($props.data.HomeOwnerName), 1), 314 createBaseVNode("div", _hoisted_6$3, toDisplayString($setup.formatDate($props.data.SubmissionDate)), 1) 315 ]), 316 createBaseVNode("div", _hoisted_7$3, [ 317 (openBlock(true), createElementBlock(Fragment, null, renderList($props.data.ContractorRatingQualities, (quality) => { 318 return openBlock(), createElementBlock("div", _hoisted_8$3, [ 319 createBaseVNode("div", _hoisted_9$3, [ 320 createBaseVNode("div", _hoisted_10$2, toDisplayString(quality.Quality), 1), 321 createVNode($setup["RmcStarBar"], { 322 class: "d-none d-xl-flex", 323 value: quality.QualityRating, 324 size: "sm" 325 }, null, 8, ["value"]), 326 createBaseVNode("div", _hoisted_11$2, toDisplayString(quality.QualityRating), 1) 327 ]) 328 ]); 329 }), 256)) 330 ]) 331 ]) 332 ]), 333 createBaseVNode("div", _hoisted_12$2, toDisplayString($props.data.Response), 1) 334 ]) 335 ]); 336} 337const ContractorProfileReviewItem = /* @__PURE__ */ _export_sfc(_sfc_main$5, [["render", _sfc_render$5], ["__file", "ContractorProfileReviewItem.vue"]]); 338function usePaginationState(pagesTotal) { 339 const page = ref(1); 340 const handlePrevPage = () => { 341 if (page.value > 1) { 342 page.value--; 343 } 344 }; 345 const handleNextPage = () => { 346 if (page.value < toValue(pagesTotal)) { 347 page.value++; 348 } 349 }; 350 return { handleNextPage, handlePrevPage, page }; 351} 352const _sfc_main$4 = /* @__PURE__ */ defineComponent({ 353 __name: "ContractorProfileReviews", 354 props: { 355 data: {} 356 }, 357 setup(__props, { expose: __expose }) { 358 __expose(); 359 const props = __props; 360 const pagesTotal = computed((oldValue) => { 361 var _a, _b; 362 if (toValue(isFetching)) { 363 return oldValue; 364 } 365 if ((_a = reviews.value) == null ? void 0 : _a.recordsTotal) { 366 return Math.ceil(((_b = reviews.value) == null ? void 0 : _b.recordsTotal) / 10); 367 } 368 return 0; 369 }); 370 const { page, handlePrevPage, handleNextPage } = usePaginationState(pagesTotal); 371 const { t } = useI18n(); 372 const sort = ref("desc");
373 const sortLabels = computed(() => ({ 374 desc: t("findAPro.reviews.sortBy.mostRecent"), 375 asc: t("findAPro.reviews.sortBy.oldest") 376 })); 377 const sortLabel = computed(() => sortLabels.value[sort.value]); 378 const { 379 data: reviews, 380 isFetching, 381 isLoadingError 382 } = useSiteReviews(props.data.OrganizationID, page, sort); 383 const pageContext = usePageContext(); 384 const language = pageContext.gtLang; 385 const { data: locatorSummary } = useQuery({ 386 queryKey: ["contractor-locator-summary", props.data.OrganizationID, language], 387 queryFn: async () => props.data.OrganizationID ? (await getContractorLocatorSummary(props.data.OrganizationID)).data : null, 388 enabled: !!props.data.OrganizationID 389 }); 390 const reviewsSummary = computed(() => { 391 var _a; 392 return ((_a = locatorSummary.value) == null ? void 0 : _a.Reviews) || []; 393 }); 394 const reviewsOverall = computed(() => { 395 var _a; 396 const reviews2 = (_a = locatorSummary.value) == null ? void 0 : _a.Reviews; 397 if (Array.isArray(reviews2) && reviews2.length) { 398 return (reviews2 == null ? void 0 : reviews2.reduce((sum, item) => sum + item.RatingsAverage, 0)) / reviews2.length; 399 } 400 return 0; 401 }); 402 const items = computed((oldValue) => { 403 var _a; 404 if (toValue(isFetching)) { 405 return oldValue; 406 } 407 return ((_a = toValue(reviews)) == null ? void 0 : _a.data) || []; 408 }); 409 const handleChangeSort = () => { 410 if (sort.value === "asc") { 411 sort.value = "desc"; 412 } else { 413 sort.value = "asc"; 414 } 415 }; 416 const __returned__ = { props, pagesTotal, page, handlePrevPage, handleNextPage, t, sort, sortLabels, sortLabel, reviews, isFetching, isLoadingError, pageContext, language, locatorSummary, reviewsSummary, reviewsOverall, items, handleChangeSort, ContractorProfileRatingOverall, ContractorProfileRatingBlock, ContractorProfileReviewItem, RmcPagination, RmcButton }; 417 Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); 418 return __returned__; 419 } 420}); 421const _hoisted_1$4 = { class: "rmc-padding-4xl" }; 422const _hoisted_2$4 = { class: "d-flex flex-column rmc-gap-lg rmc-mb-4xl" }; 423const _hoisted_3$2 = { 424 id: "pills-tab", 425 role: "tablist", 426 class: "rmc-nav rmc-mb-xl rmc-nav-solid d-xl-none" 427}; 428const _hoisted_4$2 = { 429 class: "rmc-nav-item", 430 role: "presentation" 431}; 432const _hoisted_5$2 = { 433 href: "#", 434 "data-bs-toggle": "pill", 435 type: "button", 436 role: "tab", 437 "aria-selected": "true", 438 class: "rmc-nav-link active", 439 id: "pills-Professionalism-tab", 440 "data-bs-target": "#pills-Professionalism", 441 "aria-controls": "pills-Professionalism" 442}; 443const _hoisted_6$2 = { 444 class: "rmc-nav-item", 445 role: "presentation" 446}; 447const _hoisted_7$2 = { 448 href: "#", 449 "data-bs-toggle": "pill", 450 type: "button", 451 role: "tab", 452 "aria-selected": "true", 453 class: "rmc-nav-link", 454 id: "pills-Knowledge-tab", 455 "data-bs-target": "#pills-Knowledge", 456 "aria-controls": "pills-Knowledge" 457}; 458const _hoisted_8$2 = { 459 class: "rmc-nav-item", 460 role: "presentation" 461}; 462const _hoisted_9$2 = { 463 href: "#", 464 "data-bs-toggle": "pill", 465 type: "button", 466 role: "tab", 467 "aria-selected": "true", 468 class: "rmc-nav-link", 469 id: "pills-Installation-tab", 470 "data-bs-target": "#pills-Installation", 471 "aria-controls": "pills-Installation" 472}; 473const _hoisted_10$1 = { 474 class: "tab-content", 475 id: "pills-tabContent" 476}; 477const _hoisted_11$1 = { class: "row row-cols-1 row-cols-xl-3 rmc-mb-xl rmc-mb-xl-10xl rmc-gy-4xl" }; 478const _hoisted_12$1 = { 479 class: "col tab-pane show active rmc-opacity-xl-100 d-xl-block", 480 role: "tabpanel", 481 tabindex: "0", 482 id: "pills-Professionalism" 483}; 484const _hoisted_13$1 = { class: "rmc-mb-xl rmc-mb-xl-3xl d-flex justify-content-between align-items-center" }; 485const _hoisted_14$1 = { class: "rmc-ty-text-sm fw-bold" }; 486const _hoisted_15$1 = { key: 0 }; 487const _hoisted_16$1 = { key: 0 }; 488const _hoisted_17$1 = { key: 1 }; 489function _sfc_render$4(_ctx, _cache, $props, $setup, $data, $options) { 490 var _a, _b, _c; 491 return openBlock(), createElementBlock("div", _hoisted_1$4, [ 492 createBaseVNode("div", _hoisted_2$4, [ 493 createVNode($setup["ContractorProfileRatingOverall"], { ratingV
493alue: $setup.reviewsOverall }, null, 8, ["ratingValue"]) 494 ]), 495 createBaseVNode("div", null, [ 496 createBaseVNode("ul", _hoisted_3$2, [ 497 createBaseVNode("li", _hoisted_4$2, [ 498 createBaseVNode("a", _hoisted_5$2, toDisplayString($setup.t("findAPro.reviews.professionalism")), 1) 499 ]), 500 createBaseVNode("li", _hoisted_6$2, [ 501 createBaseVNode("a", _hoisted_7$2, toDisplayString($setup.t("findAPro.reviews.knowledge")), 1) 502 ]), 503 createBaseVNode("li", _hoisted_8$2, [ 504 createBaseVNode("a", _hoisted_9$2, toDisplayString($setup.t("findAPro.reviews.installation")), 1) 505 ]) 506 ]), 507 createBaseVNode("div", _hoisted_10$1, [ 508 createBaseVNode("div", _hoisted_11$1, [ 509 (openBlock(true), createElementBlock(Fragment, null, renderList($setup.reviewsSummary, (item) => { 510 return openBlock(), createElementBlock("div", _hoisted_12$1, [ 511 createVNode($setup["ContractorProfileRatingBlock"], { 512 title: item.ReviewSourceName, 513 items: [ 514 { label: $setup.t("findAPro.reviews.stars.five"), value: item.FiveStar }, 515 { label: $setup.t("findAPro.reviews.stars.four"), value: item.FourStar }, 516 { label: $setup.t("findAPro.reviews.stars.three"), value: item.ThreeStar }, 517 { label: $setup.t("findAPro.reviews.stars.two"), value: item.TwoStar }, 518 { label: $setup.t("findAPro.reviews.stars.one"), value: item.OneStar } 519 ] 520 }, null, 8, ["title", "items"]) 521 ]); 522 }), 256)) 523 ]) 524 ]) 525 ]), 526 createBaseVNode("div", null, [ 527 createBaseVNode("div", _hoisted_13$1, [ 528 createBaseVNode("div", _hoisted_14$1, toDisplayString($setup.t("findAPro.reviews.showing", { from: $setup.page * 10 - 9, to: $setup.page * 10, total: ((_a = $setup.reviews) == null ? void 0 : _a.recordsTotal) || 0 })), 1), 529 createVNode($setup["RmcButton"], { 530 onClick: _cache[0] || (_cache[0] = withModifiers(() => $setup.handleChangeSort(), ["prevent"])), 531 variant: "secondary" 532 }, { 533 default: withCtx(() => [ 534 createTextVNode(toDisplayString($setup.sortLabel), 1) 535 ]), 536 _: 1 537 }) 538 ]), 539 !((_b = $setup.items) == null ? void 0 : _b.length) && !$setup.isFetching ? (openBlock(), createElementBlock("div", _hoisted_15$1, [ 540 !$setup.isLoadingError ? (openBlock(), createElementBlock("div", _hoisted_16$1, [ 541 createBaseVNode("p", null, toDisplayString($setup.t("findAPro.reviews.noReviewsFound")), 1) 542 ])) : createCommentVNode("", true), 543 $setup.isLoadingError ? (openBlock(), createElementBlock("div", _hoisted_17$1, toDisplayString($setup.t("findAPro.noResults.error")), 1)) : createCommentVNode("", true) 544 ])) : createCommentVNode("", true), 545 ((_c = $setup.items) == null ? void 0 : _c.length) ? (openBlock(true), createElementBlock(Fragment, { key: 1 }, renderList($setup.items, (item) => { 546 return openBlock(), createBlock($setup["ContractorProfileReviewItem"], { 547 key: item.OrganizationID, 548 class: "rmc-my-3xl rmc-my-xl-5xl", 549 data: item 550 }, null, 8, ["data"]); 551 }), 128)) : createCommentVNode("", true), 552 createVNode($setup["RmcPagination"], { 553 onPrev: $setup.handlePrevPage, 554 onNext: $setup.handleNextPage, 555 onChange: _cache[1] || (_cache[1] = (v) => $setup.page = v), 556 current: $setup.page, 557 total: $setup.pagesTotal 558 }, null, 8, ["onPrev", "onNext", "current", "total"]) 559 ]) 560 ]); 561} 562const ContractorProfileReviews = /* @__PURE__ */ _export_sfc(_sfc_main$4, [["render", _sfc_render$4], ["__scopeId", "data-v-62ab8a71"], ["__file", "ContractorProfileReviews.vue"]]); 563function getYTVideoId(url) { 564 const regex = /(?:https?:\/\/)?(?:www\.)?(?:youtube\.com\/(?:[^\/\n\s]+\/\S+\/|(?:v|e(?:mbed)?)\/|.*[?&]v=)|youtu\.be\/)([a-zA-Z0-9_-]{11})/; 565 const match = url.match(regex); 566 return match ? match[1] : null; 567} 568const id = "test-id"; 569const _sfc_main$3 = /* @__PURE__ */ defineComponent({ 570 __name: "ContractorProfileGallery", 571 props: { 572 items: {} 573 }, 574 setup(__props, { expose: __expose }) { 575 __expose(); 576 const props = __props; 577 function getVideoThumb(url) { 578 const id2 = getYTVideoId(url); 579 if (id2) { 580 return `https://img.youtube.com/vi/${id2}/0.jpg`; 581 } 582 return "https://cdn.shopify.com/s/files/1/2018/8867/files/play-button.png"; 583 } 584 const __returned__ = { props, id, getVideoThumb, get classNames() { 585 return classNames; 586 } };
587 Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); 588 return __returned__; 589 } 590}); 591const _hoisted_1$3 = { class: "carousel-indicators" }; 592const _hoisted_2$3 = ["data-bs-target", "data-bs-slide-to"]; 593const _hoisted_3$1 = { class: "carousel-inner" }; 594const _hoisted_4$1 = ["data-src"]; 595const _hoisted_5$1 = ["src", "alt"]; 596const _hoisted_6$1 = ["data-src"]; 597const _hoisted_7$1 = ["src", "alt"]; 598const _hoisted_8$1 = ["data-bs-target"]; 599const _hoisted_9$1 = ["data-bs-target"]; 600function _sfc_render$3(_ctx, _cache, $props, $setup, $data, $options) { 601 return openBlock(), createElementBlock("div", { 602 id: $setup.id, 603 class: "carousel slide" 604 }, [ 605 createBaseVNode("div", _hoisted_1$3, [ 606 (openBlock(true), createElementBlock(Fragment, null, renderList($props.items, (item, index) => { 607 return openBlock(), createElementBlock("button", { 608 type: "button", 609 "data-bs-target": `#${$setup.id}`, 610 "data-bs-slide-to": index, 611 class: normalizeClass($setup.classNames({ active: index === 0 })) 612 }, null, 10, _hoisted_2$3); 613 }), 256)) 614 ]), 615 createBaseVNode("div", _hoisted_3$1, [ 616 (openBlock(true), createElementBlock(Fragment, null, renderList($props.items, (item, index) => { 617 return openBlock(), createElementBlock("div", { 618 class: normalizeClass($setup.classNames("carousel-item", { active: index === 0 })) 619 }, [ 620 item.Type === "image" ? (openBlock(), createElementBlock("div", { 621 key: index, 622 class: "carousel-item__align", 623 "data-fancybox": "gallery", 624 "data-src": item.MediaUrl 625 }, [ 626 createBaseVNode("img", { 627 src: item.MediaUrl, 628 class: "d-block w-100", 629 alt: item.Caption 630 }, null, 8, _hoisted_5$1) 631 ], 8, _hoisted_4$1)) : createCommentVNode("", true), 632 item.Type === "video" ? (openBlock(), createElementBlock("div", { 633 key: index, 634 class: "carousel-item__align", 635 "data-fancybox": "gallery", 636 "data-src": item.MediaUrl 637 }, [ 638 createBaseVNode("img", { 639 src: $setup.getVideoThumb(item.MediaUrl), 640 class: "d-block w-100", 641 alt: item.Caption 642 }, null, 8, _hoisted_7$1) 643 ], 8, _hoisted_6$1)) : createCommentVNode("", true) 644 ], 2); 645 }), 256)) 646 ]), 647 createBaseVNode("button", { 648 class: "carousel-control-prev", 649 type: "button", 650 "data-bs-target": `#${$setup.id}`, 651 "data-bs-slide": "prev" 652 }, _cache[0] || (_cache[0] = [ 653 createBaseVNode("span", { 654 class: "carousel-control-prev-icon", 655 "aria-hidden": "true" 656 }, null, -1), 657 createBaseVNode("span", { class: "visually-hidden" }, "Previous", -1) 658 ]), 8, _hoisted_8$1), 659 createBaseVNode("button", { 660 class: "carousel-control-next", 661 type: "button", 662 "data-bs-target": `#${$setup.id}`, 663 "data-bs-slide": "next" 664 }, _cache[1] || (_cache[1] = [ 665 createBaseVNode("span", { 666 class: "carousel-control-next-icon", 667 "aria-hidden": "true" 668 }, null, -1), 669 createBaseVNode("span", { class: "visually-hidden" }, "Next", -1) 670 ]), 8, _hoisted_9$1) 671 ]); 672} 673const ContractorProfileGallery = /* @__PURE__ */ _export_sfc(_sfc_main$3, [["render", _sfc_render$3], ["__scopeId", "data-v-529a80e1"], ["__file", "ContractorProfileGallery.vue"]]); 674const _sfc_main$2 = /* @__PURE__ */ defineComponent({ 675 __name: "ContractorProfileAudience", 676 setup(__props, { expose: __expose }) { 677 __expose(); 678 const data = ["Residential", "Commercial"]; 679 const __returned__ = { data, RmcCheckmarkText }; 680 Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); 681 return __returned__; 682 } 683}); 684const _hoisted_1$2 = { class: "row row-cols-1 row-cols-md-2 row-cols-xl-5 rmc-gy-xl" }; 685const _hoisted_2$2 = { class: "col" }; 686function _sfc_render$2(_ctx, _cache, $props, $setup, $data, $options) { 687 return openBlock(), createElementBlock("div", _hoisted_1$2, [ 688 (openBlock(), createElementBlock(Fragment, null, renderList($setup.data, (item) => { 689 return createBaseVNode("div", _hoisted_2$2, [ 690 createVNode($setup["RmcCheckmarkText"], { text: item }, null, 8, ["text"]) 691 ]); 692 }), 64)) 693 ]); 694} 695const ContractorProfileAudience = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["render", _sfc_render$2], ["__file", "ContractorProfileAudience.vue"]]); 696const _sfc_main$1 = /* @__PURE__ */ defineComponent({ 697 __name: "ContractorProfilePicture", 698 props: { 699 organizationId: {}, 700 organizationName: {}, 701 profilePictureUrl: {} 702 }, 703 setup(__props, { expose: __expose }) { 704 __expose(); 705 const props = __props; 706 const profilePictureUrl = ref(""); 707 const resolveProfilePicture = async () => { 708 var _a; 709 if (props.profilePictureUrl && !props.profilePictureUrl.includes("NoImage.png")) { 710 return props.profilePictureUrl; 711 } 712 const orgId = (_a = props.organizationId) == null ? void 0 : _a.toUpperCase(); 713 if (!orgId) { 714 return ""; 715 } 716 const fallback = `https://files.myrheem.com/webpartnerspublic/OrganizationAvatars/${orgId}.png`;
717 try { 718 const resp = await fetch(fallback); 719 return resp.ok ? fallback : ""; 720 } catch { 721 return ""; 722 } 723 }; 724 watchEffect(async () => { 725 if (props.organizationId) { 726 profilePictureUrl.value = await resolveProfilePicture(); 727 } 728 }); 729 const __returned__ = { props, profilePictureUrl, resolveProfilePicture, ClientOnly }; 730 Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); 731 return __returned__; 732 } 733}); 734const _hoisted_1$1 = { 735 key: 0, 736 class: "profile-image-container" 737}; 738const _hoisted_2$1 = ["src", "alt"]; 739function _sfc_render$1(_ctx, _cache, $props, $setup, $data, $options) { 740 return openBlock(), createBlock($setup["ClientOnly"], null, { 741 default: withCtx(() => [ 742 $setup.profilePictureUrl !== "" ? (openBlock(), createElementBlock("div", _hoisted_1$1, [ 743 createBaseVNode("img", { 744 src: $setup.profilePictureUrl || $setup.profilePictureUrl, 745 alt: $props.organizationName 746 }, null, 8, _hoisted_2$1) 747 ])) : createCommentVNode("", true) 748 ]), 749 _: 1 750 }); 751} 752const ContractorProfilePicture = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["render", _sfc_render$1], ["__scopeId", "data-v-feaa477d"], ["__file", "ContractorProfilePicture.vue"]]); 753const _sfc_main = /* @__PURE__ */ defineComponent({ 754 __name: "+Page", 755 setup(__props, { expose: __expose }) { 756 var _a; 757 __expose(); 758 const { t } = useI18n(); 759 const region = useRegion(); 760 const { 761 routeParams: { id: contractorId } 762 } = usePageContext(); 763 const pageContext = usePageContext(); 764 const language = pageContext.gtLang; 765 const findAProFallbackUrl = computed( 766 () => language && language !== "en" ? `/${language}/find-a-pro/` : "/find-a-pro/" 767 ); 768 const handleBackToResults = (event) => { 769 var _a2; 770 if (((_a2 = window.history.state) == null ? void 0 : _a2[FIND_A_PRO_RETURN_KEY]) !== true || window.history.length <= 1) { 771 return; 772 } 773 event.preventDefault(); 774 window.history.back(); 775 }; 776 onMounted(() => { 777 const cameFromResults = consumeFindAProProfileNavigation() || isFindAProResultsReferrer(document.referrer, window.location.origin); 778 if (!cameFromResults) { 779 return; 780 } 781 window.history.replaceState( 782 { 783 ...window.history.state, 784 [FIND_A_PRO_RETURN_KEY]: true 785 }, 786 "" 787 ); 788 }); 789 const { showRatings, showBooking } = toValue(useData()); 790 const { data: contractor } = useQuery({ 791 queryKey: ["contractor-details", contractorId, language], 792 queryFn: async () => { 793 const r = await getContractorProProfile(contractorId); 794 return r == null ? void 0 : r.data; 795 }, 796 refetchInterval: false 797 }); 798 const contractorLoaded = computed(() => { 799 var _a2; 800 return !!((_a2 = contractor.value) == null ? void 0 : _a2.OrganizationID); 801 }); 802 const mediaExists = computed( 803 () => { 804 var _a2, _b, _c; 805 return ((_c = (_b = (_a2 = contractor.value) == null ? void 0 : _a2.Media) == null ? void 0 : _b.MediaItems) == null ? void 0 : _c.length) ?? 0 > 0; 806 } 807 ); 808 const businessInfo = computed(() => { 809 var _a2, _b, _c; 810 return ((_b = (_a2 = contractor.value) == null ? void 0 : _a2.OtherBusinessInfo) == null ? void 0 : _b.length) ? (_c = contractor.value) == null ? void 0 : _c.OtherBusinessInfo[0] : void 0; 811 }); 812 const { data: summary } = useQuery({ 813 queryKey: ["contractor-summary", contractorId, language], 814 queryFn: async () => { 815 var _a2; 816 return ((_a2 = contractor.value) == null ? void 0 : _a2.OrganizationID) ? (await getContractorRatingSiteSummary(contractor.value.OrganizationID)).data : null; 817 }, 818 enabled: contractorLoaded 819 }); 820 const { data: locatorSummary } = useQuery({ 821 queryKey: [ 822 "contractor-locator-summary", 823 (_a = contractor.value) == null ? void 0 : _a.OrganizationID, 824 language 825 ], 826 queryFn: async () => { 827 var _a2; 828 return ((_a2 = contractor.value) == null ? void 0 : _a2.OrganizationID) ? (await getContractorLocatorSummary(contractor.value.OrganizationID)).data : null; 829 }, 830 enabled: contractorLoaded 831 }); 832 const reviewsCount = computed(() => { 833 var _a2, _b; 834 return ((_b = (_a2 = locatorSummary.value) == null ? void 0 : _a2.Reviews) == null ? void 0 : _b.reduce((acc, v) => { 835 return acc + v.Count; 836 }, 0)) || 0; 837 }); 838 const phoneNumber = computed(() => getContractorPhoneNumber(contractor.value)); 839 const __returned__ = { t, region, contractorId, pageContext, language, findAProFallbackUrl, handleBackToResults, showRatings, showBooking, contractor, contractorLoaded, mediaExists, businessInfo, summary, locatorSummary, reviewsCount, phoneNumber, get hasBookNow() { 840 return hasBookNow; 841 }, get isProProfileVisible() { 842 return isProProfileVisible; 843 }, get shouldShowContractorRatings() { 844 return shouldShowContractorRatings; 845 }, ContractorProfileSchedule, get parseNumbers() { 846 return parseNumbers; 847 }, RmcButton, ContractorProfileCertifications, ContractorProfileServicesOffered, ContractorProfileMoreBusinessInfo, ContractorProfileReviews, ContractorProfileGallery, ContractorProfileAudience, ContractorProfilePicture, RmcIcon, RmcBreadcrumbs, get getContractorEditUrl() { 848 return getContractorEditUrl; 849 } };
850 Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); 851 return __returned__; 852 } 853}); 854const _hoisted_1 = { key: 0 }; 855const _hoisted_2 = { class: "rmc-header rmc-header-tertiary rmc-header-dot rmc-header-grid" }; 856const _hoisted_3 = { class: "rmc-container" }; 857const _hoisted_4 = { class: "row" }; 858const _hoisted_5 = { class: "col" }; 859const _hoisted_6 = { class: "rmc-header__content" }; 860const _hoisted_7 = { class: "d-flex rmc-gap-xl align-items-baseline" }; 861const _hoisted_8 = { class: "d-flex flex-column rmc-gap-xl" }; 862const _hoisted_9 = { class: "rmc-header__title rmc-ty-display-md rmc-ty-xl-display-2xl fw-bold m-0" }; 863const _hoisted_10 = { class: "d-flex rmc-column-gap-xl rmc-row-gap-md flex-wrap" }; 864const _hoisted_11 = { key: 0 }; 865const _hoisted_12 = { class: "rmc-container" }; 866const _hoisted_13 = { class: "row d-flex rmc-gap-4xl" }; 867const _hoisted_14 = { class: "col-sm-6 col-md-5 col-lg-5 col-xl-4 col-xxl-3 d-flex flex-column gap-3" }; 868const _hoisted_15 = { class: "col flex-grow-1" }; 869const _hoisted_16 = { 870 key: 0, 871 class: "d-flex flex-column rmc-gap-xl rmc-pb-5xl" 872}; 873const _hoisted_17 = { class: "rmc-ty-display-xs fw-bold" }; 874const _hoisted_18 = { class: "rmc-ty-text-lg rmc-ty-xl-text-xl fw-light" }; 875const _hoisted_19 = { class: "d-flex flex-column rmc-gap-xl rmc-pb-5xl" }; 876const _hoisted_20 = { class: "rmc-ty-display-xs fw-bold" }; 877const _hoisted_21 = { class: "d-flex flex-column rmc-gap-xl" }; 878const _hoisted_22 = { class: "d-flex flex-column rmc-gap-xl rmc-pb-5xl" }; 879const _hoisted_23 = { class: "rmc-ty-display-xs fw-bold" }; 880const _hoisted_24 = { key: 0 }; 881const _hoisted_25 = { key: 1 }; 882const _hoisted_26 = ["href"]; 883const _hoisted_27 = { class: "d-flex flex-column rmc-gap-xl rmc-pb-5xl" }; 884const _hoisted_28 = { class: "rmc-ty-display-xs fw-bold" }; 885const _hoisted_29 = { class: "d-flex flex-column rmc-gap-xl rmc-pb-5xl" }; 886const _hoisted_30 = { class: "rmc-ty-display-xs fw-bold" }; 887const _hoisted_31 = { 888 key: 1, 889 class: "d-flex flex-column rmc-gap-xl rmc-pb-5xl" 890}; 891const _hoisted_32 = { 892 key: 0, 893 class: "rmc-ty-display-xs fw-bold", 894 id: "reviews" 895}; 896const _hoisted_33 = { key: 0 }; 897const _hoisted_34 = { 898 key: 2, 899 class: "d-flex flex-column rmc-gap-xl rmc-pb-5xl" 900}; 901const _hoisted_35 = { class: "rmc-ty-display-xs fw-bold" }; 902function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) { 903 var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n; 904 return $setup.contractor ? (openBlock(), createElementBlock("div", _hoisted_1, [ 905 createBaseVNode("div", null, [ 906 createBaseVNode("div", _hoisted_2, [ 907 createBaseVNode("div", _hoisted_3, [ 908 createBaseVNode("div", _hoisted_4, [ 909 createBaseVNode("div", _hoisted_5, [ 910 createBaseVNode("div", _hoisted_6, [ 911 createVNode($setup["RmcBreadcrumbs"], { 912 data: { 913 [$setup.t("findAPro.breadcrumbs.home")]: $setup.language && $setup.language !== "en" ? `/${$setup.language}/` : "/", 914 [$setup.t("findAPro.breadcrumbs.findAPro")]: $setup.language && $setup.language !== "en" ? `/${$setup.language}/find-a-pro/` : "/find-a-pro/", 915 [$setup.contractor.OrganizationName]: "" 916 } 917 }, null, 8, ["data"]), 918 createBaseVNode("div", _hoisted_7, [ 919 createVNode($setup["ContractorProfilePicture"], { 920 "organization-id": $setup.contractor.OrganizationID, 921 "organization-name": $setup.contractor.OrganizationName, 922 "profile-picture-url": $setup.contractor.Media.ProfilePictureURL 923 }, null, 8, ["organization-id", "organization-name", "profile-picture-url"]), 924 createBaseVNode("div", _hoisted_8, [ 925 createBaseVNode("div", null, [ 926 createBaseVNode("h1", _hoisted_9, toDisplayString($setup.contractor.OrganizationName), 1), 927 createBaseVNode("div", _hoisted_10, [ 928 $setup.contractor.AddressLine1 ? (openBlock(), createBlock($setup["RmcButton"], { 929 key: 0, 930 variant: "link" 931 }, { 932 startIcon: withCtx(() => [ 933 createVNode($setup["RmcIcon"], { "icon-name": "location-on" }) 934 ]), 935 default: withCtx(() => [ 936 createTextVNode(" " + toDisplayString($setup.contractor.AddressLine1), 1) 937 ]), 938 _: 1 939 })) : createCommentVNode("", true), 940 $setup.phoneNumber ? (openBlock(), createBlock($setup["RmcButton"], { 941 key: 1, 942 variant: "link", 943 href: `tel:${$setup.parseNumbers($setup.phoneNumber)}` 944 }, { 945 startIcon: withCtx(() => [ 946 createVNode($setup["RmcIcon"], { "icon-name": "phone" }) 947 ]), 948 default: withCtx(() => [ 949 createTextVNode(" " + toDisplayString($setup.phoneNumber), 1) 950 ]), 951 _: 1 952 }, 8, ["href"])) : createCommentVNode("", true), 953 ((_a = $setup.contractor) == null ? void 0 : _a.WebSite) ? (openBlock(), createBlock($setup["RmcButton"], { 954 key: 2, 955 variant: "link", 956 href: (_b = $setup.contractor) == null ? void 0 : _b.WebSite 957 }, { 958 startIcon: withCtx(() => [ 959 createVNode($setup["RmcIcon"], { "icon-name": "open-in-new" }) 960 ]), 961 default: withCtx(() => [ 962 createTextVNode(" " + toDisplayString($setup.t("findAPro.profile.visitSite")), 1
962) 963 ]), 964 _: 1 965 }, 8, ["href"])) : createCommentVNode("", true) 966 ]) 967 ]), 968 $setup.showBooking && $setup.hasBookNow($setup.contractor) && $setup.isProProfileVisible($setup.contractor) ? (openBlock(), createElementBlock("div", _hoisted_11, [ 969 createVNode($setup["RmcButton"], { 970 href: ($setup.language && $setup.language !== "en" ? `/${$setup.language}` : "") + `/find-a-pro/booking${$setup.contractor.ProProfileURL}`, 971 variant: "primary", 972 size: "lg" 973 }, { 974 default: withCtx(() => [ 975 createTextVNode(toDisplayString($setup.t("findAPro.profile.requestAppointment")), 1) 976 ]), 977 _: 1 978 }, 8, ["href"]) 979 ])) : createCommentVNode("", true) 980 ]) 981 ]) 982 ]) 983 ]) 984 ]) 985 ]) 986 ]) 987 ]), 988 createBaseVNode("div", _hoisted_12, [ 989 createVNode($setup["RmcButton"], { 990 href: $setup.findAProFallbackUrl, 991 variant: "link", 992 class: "rmc-py-3xl d-none d-xl-inline-flex", 993 "data-testid": "fp-back-to-results", 994 onClick: $setup.handleBackToResults 995 }, { 996 startIcon: withCtx(() => [ 997 createVNode($setup["RmcIcon"], { 998 "icon-name": "arrow-right", 999 style: { "transform": "rotate(180deg)" } 1000 }) 1001 ]), 1002 default: withCtx(() => [ 1003 createTextVNode(" " + toDisplayString($setup.t("findAPro.profile.backToResults")), 1) 1004 ]), 1005 _: 1 1006 }, 8, ["href"]), 1007 createBaseVNode("div", _hoisted_13, [ 1008 createBaseVNode("div", _hoisted_14, [ 1009 createVNode($setup["ContractorProfileSchedule"], { 1010 data: $setup.contractor.HoursOperation, 1011 "organization-id": $setup.contractor.OrganizationID 1012 }, null, 8, ["data", "organization-id"]) 1013 ]), 1014 createBaseVNode("div", _hoisted_15, [ 1015 $setup.contractor.AboutUs ? (openBlock(), createElementBlock("div", _hoisted_16, [ 1016 createBaseVNode("h1", _hoisted_17, toDisplayString($setup.t("findAPro.profile.aboutUs")), 1), 1017 createBaseVNode("div", _hoisted_18, toDisplayString($setup.contractor.AboutUs), 1) 1018 ])) : createCommentVNode("", true), 1019 createBaseVNode("div", _hoisted_19, [ 1020 createBaseVNode("h1", _hoisted_20, toDisplayString($setup.t("findAPro.profile.certifications")), 1), 1021 createBaseVNode("div", _hoisted_21, [ 1022 createVNode($setup["ContractorProfileCertifications"], { 1023 certificates: ((_c = $setup.contractor) == null ? void 0 : _c.Certifications) || [], 1024 "is-commercial-financing-approved": ((_d = $setup.contractor) == null ? void 0 : _d.IsCommercialFinancingApproved) || false, 1025 "is-residential-financing-approved": ((_e = $setup.contractor) == null ? void 0 : _e.IsResidentialFinancingApproved) || false, 1026 "residential-financing-url": $setup.contractor.KwikComfortCustomURL || "", 1027 "contractor-country": ((_f = $setup.contractor) == null ? void 0 : _f.Country) || "" 1028 }, null, 8, ["certificates", "is-commercial-financing-approved", "is-residential-financing-approved", "residential-financing-url", "contractor-country"]) 1029 ]) 1030 ]), 1031 createBaseVNode("div", _hoisted_22, [ 1032 createBaseVNode("h1", _hoisted_23, toDisplayString($setup.t("findAPro.profile.servicesOffered")), 1), 1033 ((_g = $setup.contractor.ServicesOffered) == null ? void 0 : _g.length) > 0 ? (openBlock(), createElementBlock("div", _hoisted_24, [ 1034 createVNode($setup["ContractorProfileServicesOffered"], { 1035 data: $setup.contractor.ServicesOffered 1036 }, null, 8, ["data"]) 1037 ])) : (openBlock(), createElementBlock("div", _hoisted_25, [ 1038 createTextVNode(toDisplayString($setup.t("findAPro.profile.addServicesMessage")) + " ", 1), 1039 createBaseVNode("a", { 1040 class: "text-body", 1041 href: $setup.getContractorEditUrl($setup.region, $setup.contractor.OrganizationID), 1042 target: "_blank" 1043 }, toDisplayString($setup.t("findAPro.profile.addServicesHere")), 9, _hoisted_26), 1044 createTextVNode(" " + toDisplayString($setup.t("findAPro.profile.addServicesEnd")), 1) 1045 ])) 1046 ]), 1047 createBaseVNode("div", _hoisted_27, [ 1048 createBaseVNode("h1", _hoisted_28, toDisplayString($setup.t("findAPro.profile.moreBusinessInfo")), 1), 1049 createBaseVNode("div", null, [ 1050 createVNode($setup["ContractorProfileMoreBusinessInfo"], { 1051 data: $setup.businessInfo, 1052 "contractor-country": ((_h = $setup.contractor) == null ? void 0 : _h.Country) || "" 1053 }, null, 8, ["data", "contractor-country"]) 1054 ]) 1055 ]), 1056 createBaseVNode("div", _hoisted_29, [ 1057 createBaseVNode("h1", _hoisted_30, toDisplayString($setup.t("findAPro.profile.audie
1057nce")), 1), 1058 createBaseVNode("div", null, [ 1059 createVNode($setup["ContractorProfileAudience"]) 1060 ]) 1061 ]), 1062 $setup.showRatings && $setup.shouldShowContractorRatings($setup.contractor) ? (openBlock(), createElementBlock("div", _hoisted_31, [ 1063 ((_j = (_i = $setup.summary) == null ? void 0 : _i.RatingTotal) == null ? void 0 : _j.TotalReviews) ? (openBlock(), createElementBlock("h1", _hoisted_32, [ 1064 createTextVNode(toDisplayString($setup.t("findAPro.profile.reviews")) + " ", 1), 1065 $setup.summary ? (openBlock(), createElementBlock("span", _hoisted_33, " (" + toDisplayString($setup.reviewsCount) + ") ", 1)) : createCommentVNode("", true) 1066 ])) : createCommentVNode("", true), 1067 createBaseVNode("div", null, [ 1068 ((_l = (_k = $setup.summary) == null ? void 0 : _k.RatingTotal) == null ? void 0 : _l.TotalReviews) ? (openBlock(), createBlock($setup["ContractorProfileReviews"], { 1069 key: 0, 1070 data: $setup.summary 1071 }, null, 8, ["data"])) : createCommentVNode("", true) 1072 ]) 1073 ])) : createCommentVNode("", true), 1074 $setup.mediaExists ? (openBlock(), createElementBlock("div", _hoisted_34, [ 1075 createBaseVNode("h1", _hoisted_35, toDisplayString($setup.t("findAPro.profile.imageGallery")), 1), 1076 createBaseVNode("div", null, [ 1077 createVNode($setup["ContractorProfileGallery"], { 1078 items: (_n = (_m = $setup.contractor) == null ? void 0 : _m.Media) == null ? void 0 : _n.MediaItems 1079 }, null, 8, ["items"]) 1080 ]) 1081 ])) : createCommentVNode("", true) 1082 ]) 1083 ]) 1084 ]) 1085 ])) : createCommentVNode("", true); 1086} 1087const _Page = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render], ["__file", "+Page.vue"]]); 1088const import4 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ 1089 __proto__: null, 1090 default: _Page 1091}, Symbol.toStringTag, { value: "Module" })); 1092export { 1093 import4 as i 1094};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.