{"version":3,"mappings":"gOAsBA,MAAMA,EAAQ,CAAC,CAAC,SAAAC,EAAU,OAAAC,EAAQ,QAAAC,EAAU,MAAqB,CACzD,MAAC,WAAAC,EAAY,WAAAC,CAAA,EAAcF,EAC3BG,EAA0B,CAC9B,yCACA,6BACA,CACE,cAAc,OAAAL,EAAQ,KACtB,YAAY,OAAAC,EAAM,KAClB,aAAa,YAAK,UAAUC,CAAO,EAAC,IACtC,EAAE,KAAK,IAAI,CACb,EAEAI,EAAI,MAAMD,EAAwB,KAAK,GAAG,CAAC,EAGpC,YAAO,OAAO,MAAQ,CAAC,EAE9B,OAAO,KAAK,KAAK,CACf,GAAIL,EACJ,GAAIC,EACJ,GAAIE,EACJ,GAAIC,CAAA,CACL,CACH,EAEeG,EAAA,CAAC,MAAAR,CAAK,EC5CfS,EAAmB,CACvB,OAAO,CACLD,EAAM,MAAM,CAAC,SAAU,qBAAsB,OAAQ,OAAO,EAEhE,EAEME,EAAsB,CAC1B,OAAO,CACLF,EAAM,MAAM,CAAC,SAAU,wBAAyB,OAAQ,OAAO,EAEnE,EAEeG,EAAA,CACb,iBAAAF,EACA,oBAAAC,CACF,ECgCK,IAAAE,OACHA,EAAA,QAAwC,UACxCA,EAAA,gBAAwC,kBACxCA,EAAA,aAAwC,eACxCA,EAAA,QAAwC,UACxCA,EAAA,gBAAwC,kBACxCA,EAAA,oCAAwC,sCACxCA,EAAA,sCAAwC,wCACxCA,EAAA,6BAAwC,+BACxCA,EAAA,aAAwC,eACxCA,EAAA,iBAAwC,mBAVrCA,OAAA,IAuBL,MAAMC,EAAS,CAAC,CAAC,2BAAAC,EAA4B,WAAAC,EAAY,mCAAAC,EAAoC,kBAAAC,KACpFC,EAAQ,QAAAC,EAAA,IACb,OACE,wBACF,OAED,KAAMC,GACEC,EACL,CACE,IAAMD,EAAO,iDAAiD,EAC9D,KAAM,OAGN,SAAU,OAGV,YAAc,kCACd,KAAc,KAAK,UAAU,CAC3B,2BAAAN,EACA,WAAAC,EACA,mCAAAC,EACA,OAAoCM,EAAK,OACzC,kBAAAL,CACD,EACH,EACA,CACE,qBAAsB,CAAC,CAAC,iBAAAM,KAAsB,CAC5C,OAAQA,EAAkB,CACxB,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACH,OAAOC,EAA2B,WACpC,QACE,OAAOA,EAA2B,eACtC,CACF,CAEJ,CACD,EACA,KAAK,CAAC,CAAC,KAAAC,MAEJ,CACE,YAAa,UACb,KAAM,CACJ,2BAA4BA,EAAK,KAAK,2BAE1C,EAEH,EACA,MAAOC,GAAoB,CAC1B,GAAIA,aAA2B,MACvB,MAAAA,EAGF,MAAE,SAAAC,GAAaD,EACrB,OAAQC,EAAS,OAAQ,CACvB,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACK,OAAC,YAAa,cAA4B,EACpD,IAAK,KACK,OAAC,YAAa,iBAA+B,EACvD,IAAK,KACK,OAAC,YAAa,cAA4B,EACpD,IAAK,KACH,OAAOA,EAAS,OACf,KAAMC,GACDA,EAAgB,KAAK,aAAe,wCAC9B,CACN,YAAa,uCACf,EAGEA,EAAgB,KAAK,aAAe,+BAC9B,CACN,YAAa,8BACf,EAGEA,EAAgB,KAAK,aAAe,sCAC9B,CACN,YAAa,qCACf,EAGEA,EAAgB,KAAK,aAAe,kBAC9B,CACN,YAAa,iBACf,EAGM,CACN,YAAa,SACf,CACD,EACA,MAAOC,IAENC,EACED,EACA,CACE,aACE,0DAEN,EACQ,CAAC,YAAa,SAAuB,EAC9C,EACH,IAAK,KACK,OAAC,YAAa,kBAAgC,EACxD,QACU,OAAC,YAAa,SAAuB,EACjD,CACD","names":["track","category","action","options","eventLabel","eventValue","debug_message_fragments","log","Event","SendPhoneEnquiry","SendSpaciousEnquiry","YahooGemini_Conversions","ResultTypeEnums","create","user_authentication_handle","listing_id","listing_contact_request_attributes","reject_promotions","Promise","__vitePreload","Routes","q_ajax_3","I18n","http_status_code","AJAX_ERROR_HANDLER_ACTIONS","data","reason_or_error","response","responsePayload","e","captureException"],"ignoreList":[],"sources":["../../../app/assets/javascripts/app/tracking/yahoo_gemini/event.ts","../../../app/assets/javascripts/app/tracking/yahoo_gemini/conversions.ts","../../../app/assets/javascripts/app/resources/listing_contact_requests/create/index.ts"],"sourcesContent":["\nimport log from \"plugins/loglevel/index\"\n\ninterface EventParams {\n  category: string\n  action: string\n  options?: {\n    eventLabel?: string\n    eventValue?: number\n  }\n}\n\ndeclare global {\n  interface Window {\n    dotq: undefined | any[] | {\n      push: (el: any) => void,\n    },\n  }\n}\n\n\n// @see https://help.bingads.microsoft.com/#apex/3/en/help:app51208/-1/en-US\nconst track = ({category, action, options = {}}: EventParams) => {\n  const {eventLabel, eventValue} = options\n  const debug_message_fragments = [\n    \"[App.Tracking.YahooGemini.Event.track]\",\n    \"about to track event with:\",\n    [\n      `category: [${category}]`,\n      `action: [${action}]`,\n      `options: [${JSON.stringify(options)}]`,\n    ].join(\" ,\"),\n  ]\n\n  log.debug(debug_message_fragments.join(\" \"))\n\n\n  window.dotq = window.dotq || []\n\n  window.dotq.push({\n    ec: category ,\n    ea: action,\n    el: eventLabel,\n    ev: eventValue,\n  })\n}\n\nexport default {track}\n","\nimport Event from \"./event\"\n\nconst SendPhoneEnquiry = {\n  track(){\n    Event.track({category: \"send_phone_enquiry\", action: \"send\"})\n  },\n}\n\nconst SendSpaciousEnquiry = {\n  track(){\n    Event.track({category: \"send_spacious_enquiry\", action: \"send\"})\n  },\n}\n\nexport default {\n  SendPhoneEnquiry,\n  SendSpaciousEnquiry,\n}\n","\n// region JS Imports\n\n// region External Modules\nimport Promise from \"bluebird\"\n\nimport I18n from \"plugins/i18n-js\"\n// endregion External Modules\n\n// region Private Modules\nimport {\n  captureException,\n} from \"app/error_reporting\"\nimport {\n  q_ajax_3,\n  ERROR_HANDLER_ACTIONS as AJAX_ERROR_HANDLER_ACTIONS,\n} from \"app/utils/q_ajax/q_ajax_3\"\n// endregion Private Modules\n\n// region Public Components\n// endregion Public Components\n\n// region Private Components\n// endregion Private Components\n\n// endregion JS Imports\n\n\ninterface ResourceAttributes {\n  requester_name?: string | null,\n\n  requester_email_address: string,\n\n  requester_phone_number: string,\n  requester_phone_number_country_code?: string | null,\n\n  additional_message?: string | null,\n\n  anticipated_checkin_date?: string | null,\n  stay_duration_in_days?: string | null,\n}\n\ninterface Input {\n  user_authentication_handle: string,\n  listing_id: string | number,\n  listing_contact_request_attributes: ResourceAttributes,\n  reject_promotions?: boolean | null,\n}\n\n/* eslint-disable no-unused-vars */\nenum ResultTypeEnums {\n  SUCCESS =                               \"SUCCESS\",\n  UNAUTHENTICATED =                       \"UNAUTHENTICATED\",\n  UNAUTHORIZED =                          \"UNAUTHORIZED\",\n  INVALID =                               \"INVALID\",\n  LISTING_EXPIRED =                       \"LISTING_EXPIRED\",\n  CONFLICTING_RESOURCE_ALREADY_EXISTS =   \"CONFLICTING_RESOURCE_ALREADY_EXISTS\",\n  LISTING_CONTACT_EMAIL_OR_PHONE_ABSENT = \"LISTING_CONTACT_EMAIL_OR_PHONE_ABSENT\",\n  INVALID_CONTACT_PHONE_NUMBER =          \"INVALID_CONTACT_PHONE_NUMBER\",\n  SERVER_ERROR =                          \"SERVER_ERROR\",\n  TOO_MANY_REQUEST =                      \"TOO_MANY_REQUEST\",\n}\n/* eslint-enable no-unused-vars */\n\ninterface DataResult {\n  listing_contact_request_id: number | string,\n}\n\ninterface PromiseResolvePayload {\n  result_type: ResultTypeEnums,\n  data?: DataResult,\n}\n\nconst create = ({user_authentication_handle, listing_id, listing_contact_request_attributes, reject_promotions}: Input): Promise<PromiseResolvePayload> => {\n  return Promise.resolve(\n    import(\n      \"plugins/js-routes\"\n    )\n  )\n  .then((Routes) => {\n    return q_ajax_3(\n      {\n        url:  Routes.create_api_web_app_listing_contact_requests_path(),\n        type: \"POST\",\n\n        // Expect JSON in response\n        dataType: \"JSON\",\n\n        // Sending JSON to server\n        contentType:  \"application/json; charset=utf-8\",\n        data:         JSON.stringify({\n          user_authentication_handle:         user_authentication_handle,\n          listing_id:                         listing_id,\n          listing_contact_request_attributes: listing_contact_request_attributes,\n          locale:                             I18n.locale,\n          reject_promotions:                  reject_promotions,\n        }),\n      },\n      {\n        custom_error_handler: ({http_status_code}) => {\n          switch (http_status_code) {\n            case 401:\n            case 403:\n            case 422:\n            case 429:\n              return AJAX_ERROR_HANDLER_ACTIONS.STOP_RETRY\n            default:\n              return AJAX_ERROR_HANDLER_ACTIONS.CONTINUE_RETRY\n          }\n        },\n      },\n    )\n  })\n  .then(({data}) => {\n    return (\n      {\n        result_type: ResultTypeEnums.SUCCESS,\n        data: {\n          listing_contact_request_id: data.data.listing_contact_request_id,\n        },\n      }\n    )\n  })\n  .catch((reason_or_error) => {\n    if (reason_or_error instanceof Error) {\n      throw reason_or_error\n    }\n\n    const { response } = reason_or_error\n    switch (response.status) {\n      case 500:\n      case 502:\n      case 503:\n      case 504:\n        return ({result_type: ResultTypeEnums.SERVER_ERROR})\n      case 401:\n        return ({result_type: ResultTypeEnums.UNAUTHENTICATED})\n      case 403:\n        return ({result_type: ResultTypeEnums.UNAUTHORIZED})\n      case 422:\n        return response.json()\n        .then((responsePayload: any) => {\n          if (responsePayload.data.error_type === \"listing_contact_email_or_phone_absent\") {\n            return ({\n              result_type: ResultTypeEnums.LISTING_CONTACT_EMAIL_OR_PHONE_ABSENT,\n            })\n          }\n\n          if (responsePayload.data.error_type === \"invalid_contact_phone_number\") {\n            return ({\n              result_type: ResultTypeEnums.INVALID_CONTACT_PHONE_NUMBER,\n            })\n          }\n\n          if (responsePayload.data.error_type === \"conflicting_resource_already_exists\") {\n            return ({\n              result_type: ResultTypeEnums.CONFLICTING_RESOURCE_ALREADY_EXISTS,\n            })\n          }\n\n          if (responsePayload.data.error_type === \"listing_expired\") {\n            return ({\n              result_type: ResultTypeEnums.LISTING_EXPIRED,\n            })\n          }\n\n          return ({\n            result_type: ResultTypeEnums.INVALID,\n          })\n        })\n        .catch((e: any) => {\n          // Got error parsing = just report as invalid\n          captureException(\n            e,\n            {\n              error_source:\n                \"app/resources/listing_contact_requests/create/index.es6\",\n            }\n          )\n          return ({result_type: ResultTypeEnums.INVALID})\n        })\n      case 429:\n        return ({result_type: ResultTypeEnums.TOO_MANY_REQUEST})\n      default:\n        return ({result_type: ResultTypeEnums.INVALID})\n    }\n  })\n}\n\nexport { create, ResultTypeEnums }\n"],"file":"assets/index-1WWql7OZ.js"}