{"version":3,"file":"index-D_3dyq94.js","sources":["../../../app/assets/javascripts/app/resources/current_authenticated_user/listing_shortlistings/get_many/index.ts","../../../app/assets/javascripts/app/resources/listing_shortlistings/event_store/index.ts","../../../app/assets/javascripts/app/resources/listing_shortlistings/create/index.ts","../../../app/assets/javascripts/app/resources/listing_shortlistings/destroy/index.ts","../../../app/assets/javascripts/concepts/listings/listing_shortlist_button/factory.ts","../../../app/assets/javascripts/concepts/listings/listing_shortlist_button/index.ts"],"sourcesContent":["\n// region JS Imports\n\n// region External Modules\nimport Promise from \"bluebird\"\n// endregion External Modules\n\n// region Private Modules\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\n/* eslint-disable no-unused-vars */\nenum ResultTypeEnums {\n  SUCCESS =          \"SUCCESS\",\n  NOT_SIGNED_IN =    \"NOT_SIGNED_IN\",\n  INVALID =          \"INVALID\",\n  SERVER_ERROR =     \"SERVER_ERROR\",\n  TOO_MANY_REQUEST = \"TOO_MANY_REQUEST\",\n}\n/* eslint-enable no-unused-vars */\n\nexport interface DataEntry {\n  listing_id: string,\n}\n\ninterface PromiseResolvePayload {\n  result_type:  ResultTypeEnums,\n  data?:        DataEntry[],\n}\n\nconst get_many = (): Promise<PromiseResolvePayload> => {\n  return Promise.resolve()\n  .then(() => {\n    return q_ajax_3(\n      {\n        url:      \"/api/web_app/current_authenticated_user/listing_shortlistings\",\n        method:   \"GET\",\n        dataType: \"json\",\n      },\n      {\n        custom_error_handler: ({http_status_code}) => {\n          if (http_status_code === 401) {\n            return AJAX_ERROR_HANDLER_ACTIONS.STOP_RETRY\n          }\n\n          return AJAX_ERROR_HANDLER_ACTIONS.CONTINUE_RETRY\n        },\n        error_tracking_options: {\n          endpoint_identifier: \"/api/web_app/current_authenticated_user/listing_shortlistings\",\n        },\n      },\n    )\n  })\n  .then(({data}: {\n    data: {\n      data: {\n        listing_shortlistings: DataEntry[]\n      }\n    }\n  }): PromiseResolvePayload => {\n    return (\n      {\n        result_type: ResultTypeEnums.SUCCESS,\n        data:        data.data.listing_shortlistings,\n      }\n    )\n  })\n  .catch((reason_or_error): PromiseResolvePayload => {\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.NOT_SIGNED_IN})\n      case 429:\n        return ({result_type: ResultTypeEnums.TOO_MANY_REQUEST})\n      default:\n        return ({result_type: ResultTypeEnums.INVALID})\n    }\n  })\n}\n\nexport {\n  get_many,\n  ResultTypeEnums,\n}\n","\n// region JS Imports\n\n// region External Modules\nimport { EventEmitter } from \"events\"\n// endregion External Modules\n\n// Private Modules\n// 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/* eslint-disable no-unused-vars */\nenum EventTypes {\n  CREATE  = \"create\",\n  DESTROY = \"destroy\",\n}\n/* eslint-enable no-unused-vars */\n\ninterface CreateEventPayload {\n  listing_id: string | number,\n}\ninterface DestroyEventPayload {\n  listing_id: string | number,\n}\n\nclass EventStore {\n  private readonly event_emitter: EventEmitter\n\n  constructor() {\n    this.event_emitter = new EventEmitter()\n  }\n\n  public onCreate(cb: (payload: CreateEventPayload) => void) {\n    this.event_emitter.on(EventTypes.CREATE, cb)\n  }\n  public fireCreateEvent(payload: CreateEventPayload) {\n    this.event_emitter.emit(EventTypes.CREATE, payload)\n  }\n\n  public onDestroy(cb: (payload: DestroyEventPayload) => void) {\n    this.event_emitter.on(EventTypes.DESTROY, cb)\n  }\n  public fireDestroyEvent(payload: DestroyEventPayload) {\n    this.event_emitter.emit(EventTypes.DESTROY, payload)\n  }\n}\n\nconst instance = new EventStore()\n\nexport default instance\n","\nimport Promise from \"bluebird\"\nimport {\n  q_ajax_3,\n  ERROR_HANDLER_ACTIONS as AJAX_ERROR_HANDLER_ACTIONS,\n} from \"app/utils/q_ajax/q_ajax_3\"\n\n\nimport I18n from \"plugins/i18n-js\"\n\ninterface Input {\n  user_authentication_handle: string,\n\n  listing_id: string | number,\n}\n\n/* eslint-disable no-unused-vars */\nenum ResultTypeEnums {\n  SUCCESS = \"SUCCESS\",\n  UNAUTHENTICATED = \"UNAUTHENTICATED\",\n  INVALID = \"INVALID\",\n  SERVER_ERROR = \"SERVER_ERROR\",\n}\n/* eslint-enable no-unused-vars */\n\ninterface PromiseResolvePayload {\n  result_type:  ResultTypeEnums,\n  data?:        unknown,\n}\n\nconst create = ({user_authentication_handle, listing_id}: Input): Promise<PromiseResolvePayload> => {\n  return q_ajax_3(\n    {\n      url:      \"/api/web_app/listing_shortlistings\",\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\n        locale: I18n.locale,\n      }),\n    },\n    {\n      custom_error_handler: ({http_status_code}) => {\n        if (http_status_code === 401) {\n          return AJAX_ERROR_HANDLER_ACTIONS.STOP_RETRY\n        }\n        if (http_status_code === 422) {\n          return AJAX_ERROR_HANDLER_ACTIONS.STOP_RETRY\n        }\n\n        return AJAX_ERROR_HANDLER_ACTIONS.CONTINUE_RETRY\n      },\n    },\n  )\n  .then(() => {\n    return (\n      {\n        result_type:  ResultTypeEnums.SUCCESS,\n        data:         {},\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 ({\n          result_type: ResultTypeEnums.SERVER_ERROR,\n        })\n      case 401:\n        return ({\n          result_type: ResultTypeEnums.UNAUTHENTICATED,\n        })\n      case 422:\n        return ({\n          result_type: ResultTypeEnums.INVALID,\n        })\n      default:\n        return ({\n          result_type: ResultTypeEnums.INVALID,\n        })\n    }\n  })\n}\n\nexport {\n  create,\n  ResultTypeEnums,\n}\n","\nimport Promise from \"bluebird\"\nimport {\n  q_ajax_3,\n  ERROR_HANDLER_ACTIONS as AJAX_ERROR_HANDLER_ACTIONS,\n} from \"app/utils/q_ajax/q_ajax_3\"\n\n\nimport I18n from \"plugins/i18n-js\"\n\ninterface Input {\n  user_authentication_handle: string,\n\n  listing_id: string | number,\n}\n\n/* eslint-disable no-unused-vars */\nenum ResultTypeEnums {\n  SUCCESS = \"SUCCESS\",\n  UNAUTHENTICATED = \"UNAUTHENTICATED\",\n  INVALID = \"INVALID\",\n  SERVER_ERROR = \"SERVER_ERROR\",\n}\n/* eslint-enable no-unused-vars */\n\ninterface PromiseResolvePayload {\n  result_type:  ResultTypeEnums,\n  data?:        unknown,\n}\n\nconst destroy = ({user_authentication_handle, listing_id}: Input): Promise<PromiseResolvePayload> => {\n  return q_ajax_3(\n    {\n      url:      \"/api/web_app/listing_shortlistings\",\n      type:     \"DELETE\",\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\n        locale: I18n.locale,\n      }),\n    },\n    {\n      custom_error_handler: ({http_status_code}) => {\n        if (http_status_code === 401) {\n          return AJAX_ERROR_HANDLER_ACTIONS.STOP_RETRY\n        }\n        if (http_status_code === 422) {\n          return AJAX_ERROR_HANDLER_ACTIONS.STOP_RETRY\n        }\n\n        return AJAX_ERROR_HANDLER_ACTIONS.CONTINUE_RETRY\n      },\n    },\n  )\n  .then(() => {\n    return (\n      {\n        result_type:  ResultTypeEnums.SUCCESS,\n        data:         {},\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 ({\n          result_type: ResultTypeEnums.SERVER_ERROR,\n        })\n      case 401:\n        return ({\n          result_type: ResultTypeEnums.UNAUTHENTICATED,\n        })\n      case 422:\n        return ({\n          result_type: ResultTypeEnums.INVALID,\n        })\n      default:\n        return ({\n          result_type: ResultTypeEnums.INVALID,\n        })\n    }\n  })\n}\n\nexport {\n  destroy,\n  ResultTypeEnums,\n}\n","\n// region JS Imports\n\n// region External Modules\nimport { EventEmitter } from \"events\"\n\nimport Promise from \"plugins/bluebird/index\"\nimport u from \"umbrellajs\"\n// endregion External Modules\n\n// Private Modules\nimport Google_Event from \"app/tracking/google/event\"\nimport PageInstance from \"app/page_instance/index\"\nimport Modal from \"app/modal/show-modal\"\nimport Auth_action from \"app/authentication/action\"\nimport Auth_callback_queue from \"app/authentication/callback_queue\"\n\nimport {\n  refreshAndUpdateComponentPromise,\n} from \"app/authentication/remote_state\"\n\nimport {\n  captureMessage,\n  captureException,\n} from \"app/error_reporting\"\n\nimport {\n  getContactInfoData,\n  setContactInfoData,\n} from \"app/local_storages/contact_info_storage\"\n\nimport {\n  create as create_user,\n  ResultTypeEnums as CreateUserResultTypes,\n} from \"app/resources/users/create/index\"\n\n/* eslint-disable no-unused-vars */\nimport {\n  DataEntry as ListingShortlistingDataEntry,\n} from \"app/resources/current_authenticated_user/listing_shortlistings/get_many/index\"\n/* eslint-enable no-unused-vars */\nimport EventStore from \"app/resources/listing_shortlistings/event_store\"\n\nimport {\n  isPresentString,\n} from \"app/utils/type_checking\"\n\nimport {\n  isSignedIn,\n} from \"app/authentication/state\"\n\nimport {\n  create as create_listing_shortlisting,\n  ResultTypeEnums as CreateListingShortlistingResultTypes,\n} from \"app/resources/listing_shortlistings/create\"\n\nimport {\n  destroy as destroy_listing_shortlisting,\n  ResultTypeEnums as DestroyListingShortlistingResultTypes,\n} from \"app/resources/listing_shortlistings/destroy\"\n\nimport {\n  trackSignUp,\n} from \"app/authentication/tracking\"\n\nimport {\n  getLastContactInfoSyncPromise,\n} from \"app/authentication/contact_info_caching\"\nimport GA4_Event from \"app/tracking/google/google_analytics_4/event\"\n// 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\nconst RejectionReasons = {\n  ERROR_REPORTED: \"ERROR_REPORTED\",\n}\n\nconst SOURCE_FILE_PATH = \"concepts/listings/listing_shortlist_button/factory\"\n\n\ninterface Inputs {\n  container: HTMLElement,\n\n  listing_shortlistings?: ListingShortlistingDataEntry[],\n}\n\ninterface Selector {\n  container: HTMLElement,\n\n  listing_shortlistings: ListingShortlistingDataEntry[],\n\n  shortlistButtonPrimary: string,\n  unshortlistButtonPrimary: string,\n}\n\nconst DEFAULT_SELECTOR = {\n  listing_shortlistings: [],\n\n  shortlistButtonPrimary:    \".shortlist-button-content.on-not-shortlisted a\",\n  unshortlistButtonPrimary:  \".shortlist-button-content.on-shortlisted a\",\n}\n\nexport class ListingShortlistButton extends EventEmitter {\n  private selector: Selector\n\n  private container_el: HTMLElement\n  private $container: UmbrellaInstance\n  private readonly listing_id: string\n\n  private readonly $shortlistButtonPrimary = null as UmbrellaInstance | null\n  private readonly $unshortlistButtonPrimary = null as UmbrellaInstance | null\n\n  constructor(inputs: Inputs) {\n    super()\n\n    this.selector = Object.assign({}, DEFAULT_SELECTOR, inputs)\n\n    this.container_el = this.selector.container\n    this.$container = u(this.selector.container)\n    this.listing_id = this.$container.data(\"listing-id\").toString()\n\n    if (this.$container.length !== 1){\n      captureMessage(\n        `$container contains non 1 (${this.$container.length}) elements`,\n        {\n          source_file_path: SOURCE_FILE_PATH,\n        }\n      )\n      return\n    }\n\n    this.$shortlistButtonPrimary =\n      this.$container.find(this.selector.shortlistButtonPrimary)\n    this.$unshortlistButtonPrimary =\n      this.$container.find(this.selector.unshortlistButtonPrimary)\n\n    this.bind_action()\n\n    const matched_shortlisting_found =\n      this.selector.listing_shortlistings.length > 0 &&\n      this.selector.listing_shortlistings.some((listing_shortlisting) => {\n        return listing_shortlisting.listing_id === this.listing_id\n      })\n    if (matched_shortlisting_found) {\n      this.displayAsShortlisted()\n    }\n  }\n\n  private bind_action(){\n    if (this.$shortlistButtonPrimary == null) { return }\n    if (this.$unshortlistButtonPrimary == null) { return }\n\n    const $shortlistButtonPrimary = this.$shortlistButtonPrimary\n    const $unshortlistButtonPrimary = this.$unshortlistButtonPrimary\n\n    this.$shortlistButtonPrimary\n    .on(\"click\", (e) => {\n      e.preventDefault()\n\n      const btn_el = $shortlistButtonPrimary.first() as HTMLButtonElement | false\n      try {\n        if (btn_el) {\n          btn_el.disabled = true\n        }\n        this.onShortlistClick()\n      }\n      finally {\n        if (btn_el) {\n          btn_el.disabled = false\n        }\n      }\n    })\n\n    $unshortlistButtonPrimary\n    .on(\"click\", (e) => {\n      e.preventDefault()\n\n      const btn_el = $unshortlistButtonPrimary.first() as HTMLButtonElement | false\n      try {\n        if (btn_el) {\n          btn_el.disabled = true\n        }\n        this.onUnshortlistClick()\n      }\n      finally {\n        if (btn_el) {\n          btn_el.disabled = false\n        }\n      }\n    })\n\n    EventStore.onCreate(({listing_id}) => {\n      if (listing_id.toString() !== this.listing_id) { return }\n\n      this.displayAsShortlisted()\n    })\n    EventStore.onDestroy(({listing_id}) => {\n      if (listing_id.toString() !== this.listing_id) { return }\n\n      this.displayAsNotShortlisted()\n    })\n\n    return this\n  }\n\n  private onShortlistClick() {\n    Modal.showLoadingIndicator()\n\n    const local_contact_info_data = getContactInfoData()\n\n    if (! isPresentString(local_contact_info_data.contact_email_address)) {\n      Auth_callback_queue.add(() => {\n        getLastContactInfoSyncPromise()\n        .then(() => this.onShortlistClick())\n        .done()\n      }, \"event:create_listing_shortlisting\")\n\n      Auth_action.showSignUpModal({\n        enable_account_already_exists_error_message: false,\n      })\n      .then(({$modal, authentication_box}) => {\n        authentication_box.on(\"sign_up:fail:account_conflict\", ({email_address}) => {\n          $modal.modal(\"hide\")\n          // Retry AFTER setting local contact email\n          setContactInfoData({\n            contact_email_address: email_address,\n          })\n          this.onShortlistClick()\n        })\n      })\n      .done()\n      return\n    }\n\n    let create_listing_shortlisting_inputs = {}\n    Promise.resolve()\n    .then(() => {\n      Modal.showLoadingIndicator()\n\n      if (isSignedIn()) {\n        return Promise.resolve()\n      }\n\n      return create_user({\n        authentication_handle:  local_contact_info_data.user_authentication_handle || local_contact_info_data.contact_email_address || \"\",\n        email_address:          local_contact_info_data.contact_email_address || \"\",\n        sign_in_on_success:     true,\n      })\n      .then(({result_type}) => {\n        switch (result_type) {\n          case CreateUserResultTypes.SUCCESS:\n            trackSignUp()\n            refreshAndUpdateComponentPromise().done()\n            return\n          case CreateUserResultTypes.CONFLICT:\n            return\n          default:\n            captureMessage(\n              `unexpected/unhandled result_type: <${result_type}>`,\n              {\n                source_file_path:\n                  \"app/assets/javascripts/concepts/listings/contact/button/events/index\",\n              }\n            )\n            throw RejectionReasons.ERROR_REPORTED\n        }\n      })\n    })\n    .then(() => {\n      const inputs = {\n        // Need `||` to make flow happy\n        user_authentication_handle: local_contact_info_data.user_authentication_handle || local_contact_info_data.contact_email_address || \"\",\n\n        listing_id: this.listing_id,\n      }\n      create_listing_shortlisting_inputs = inputs\n      return create_listing_shortlisting(inputs)\n    })\n    .then(({result_type}) => {\n      switch (result_type) {\n        case CreateListingShortlistingResultTypes.SUCCESS:\n          return\n        default:\n          captureMessage(\n            `unexpected/unhandled result_type from create_listing_shortlisting: <${result_type}>`,\n            Object.assign({\n              \"source_file_path\":\n                SOURCE_FILE_PATH,\n              \"local_contact_info_data.contact_email_address\":\n                local_contact_info_data.contact_email_address || \"unknown\",\n            }, create_listing_shortlisting_inputs),\n          )\n          throw RejectionReasons.ERROR_REPORTED\n      }\n    })\n    .then(() => {\n      Modal.hideLoadingIndicator()\n      EventStore.fireCreateEvent({\n        listing_id: this.listing_id,\n      })\n\n      // # Tracking\n      Google_Event.track({\n        category: PageInstance.currentPageNameForTracking(),\n        action:   \"Listing / Project\",\n        options:  {\n          eventLabel: \"Shortlist - Shortlisted\",\n        },\n      })\n\n      GA4_Event.track({\n        event_name: \"listing_project_shortlisted\",\n        options:    {\n          page: PageInstance.currentPageNameForTracking()\n        },\n      })\n    })\n    .catch((whatever) => {\n      Modal.hideLoadingIndicator()\n      if (whatever === RejectionReasons.ERROR_REPORTED) { return }\n\n      if (whatever instanceof Error) {\n        captureException(\n          whatever,\n          {\n            source_file_path:\n            SOURCE_FILE_PATH,\n          }\n        )\n        return\n      }\n\n      captureMessage(\n        whatever.toString(),\n        {\n          source_file_path:\n          SOURCE_FILE_PATH,\n        }\n      )\n    })\n    .done()\n  }\n\n  private onUnshortlistClick() {\n    const local_contact_info_data = getContactInfoData()\n\n    if (! isPresentString(local_contact_info_data.contact_email_address)) {\n      // Do nothing but just pretend to have unfollow\n      EventStore.fireDestroyEvent({\n        listing_id: this.listing_id,\n      })\n      return\n    }\n\n    Promise.resolve()\n    .then(() => {\n      return destroy_listing_shortlisting({\n        // Need `||` to make flow happy\n        user_authentication_handle: local_contact_info_data.user_authentication_handle || local_contact_info_data.contact_email_address || \"\",\n\n        listing_id: this.listing_id,\n      })\n    })\n    .then(({result_type}) => {\n      switch (result_type) {\n        case DestroyListingShortlistingResultTypes.SUCCESS:\n          return\n        default:\n          captureMessage(\n            `unexpected/unhandled result_type from destroy_listing_shortlisting: <${result_type}>`,\n            {\n              source_file_path:\n              SOURCE_FILE_PATH,\n            }\n          )\n          throw RejectionReasons.ERROR_REPORTED\n      }\n    })\n    .then(() => {\n      EventStore.fireDestroyEvent({\n        listing_id: this.listing_id,\n      })\n    })\n    .catch((whatever) => {\n      if (whatever === RejectionReasons.ERROR_REPORTED) { return }\n\n      if (whatever instanceof Error) {\n        captureException(\n          whatever,\n          {\n            source_file_path:\n            SOURCE_FILE_PATH,\n          }\n        )\n        return\n      }\n\n      captureMessage(\n        whatever.toString(),\n        {\n          source_file_path:\n          SOURCE_FILE_PATH,\n        }\n      )\n    })\n    .done()\n  }\n\n  private displayAsShortlisted() {\n    this.container_el.classList.add(\"shortlisted\")\n  }\n  private displayAsNotShortlisted() {\n    this.container_el.classList.remove(\"shortlisted\")\n  }\n}\n\nconst Factory = {\n  _instance: null as null | ListingShortlistButton,\n  instance(selector: Inputs): ListingShortlistButton {\n    if (this._instance !== null) { return this._instance }\n\n    this._instance = this.create(selector)\n    return this._instance\n  },\n  create(selector: Inputs): ListingShortlistButton {\n    return new ListingShortlistButton(selector)\n  },\n}\n\nexport {\n  Factory,\n}\n","\n// region JS Imports\n\n// region External Modules\nimport u from \"umbrellajs\"\nimport Promise from \"plugins/bluebird\"\n// endregion External Modules\n\n// Private Modules\nimport {\n  captureMessage,\n} from \"app/error_reporting\"\n\nimport {\n  get_many as get_current_authenticated_user_listing_shortlistings,\n  ResultTypeEnums as GetCurrentAuthenticatedUserListingShortlistingsTypes,\n} from \"app/resources/current_authenticated_user/listing_shortlistings/get_many/index\"\n// Private Modules\n\n// region Public Components\n// endregion Public Components\n\n// region Private Components\nimport { Factory } from \"./factory\"\n// endregion Private Components\n\n// endregion JS Imports\n\n\nconst CELL_CLASS_NAME = \"cell--listings--shortlist--button\"\nconst CELL_INITIALIZED_CLASS_NAME = `${CELL_CLASS_NAME}--js-spacious-initialized`\n\nconst init = (): Promise<void> => {\n  const elements = u(`.${CELL_CLASS_NAME}`)\n  if (elements.length === 0) { return Promise.resolve() }\n\n  return get_current_authenticated_user_listing_shortlistings()\n  .then(({result_type, data}) => {\n    switch (result_type) {\n      case GetCurrentAuthenticatedUserListingShortlistingsTypes.SUCCESS:\n      case GetCurrentAuthenticatedUserListingShortlistingsTypes.NOT_SIGNED_IN:\n      case GetCurrentAuthenticatedUserListingShortlistingsTypes.SERVER_ERROR:\n      case GetCurrentAuthenticatedUserListingShortlistingsTypes.TOO_MANY_REQUEST:\n        return data || []\n      default:\n        captureMessage(\n          `unexpected/unhandled result_type from get_current_authenticated_user_listing_shortlistings: <${result_type}>`,\n          {\n            source_file_path:\n              \"concepts/listings/listing_shortlist_button\",\n          }\n        )\n        // Still need to init elements\n        return []\n    }\n  })\n  .then((listing_shortlistings) => {\n    elements.each((el) => {\n      if (el.classList.contains(CELL_INITIALIZED_CLASS_NAME)) { return }\n      el.classList.add(CELL_INITIALIZED_CLASS_NAME)\n\n      Factory.create({\n        container: el,\n\n        listing_shortlistings: listing_shortlistings,\n      })\n    })\n  })\n}\n\nconst onLoad = (): Promise<void> => {\n  return init()\n}\n\n\nexport {\n  init,\n  onLoad,\n}\n"],"names":["ResultTypeEnums","get_many","Promise","q_ajax_3","http_status_code","AJAX_ERROR_HANDLER_ACTIONS","data","reason_or_error","response","EventStore","EventEmitter","cb","payload","instance","create","user_authentication_handle","listing_id","I18n","destroy","RejectionReasons","SOURCE_FILE_PATH","DEFAULT_SELECTOR","ListingShortlistButton","inputs","u","captureMessage","listing_shortlisting","$shortlistButtonPrimary","$unshortlistButtonPrimary","e","btn_el","Modal","local_contact_info_data","getContactInfoData","isPresentString","Auth_callback_queue","getLastContactInfoSyncPromise","Auth_action","$modal","authentication_box","email_address","setContactInfoData","create_listing_shortlisting_inputs","isSignedIn","create_user","result_type","CreateUserResultTypes","trackSignUp","refreshAndUpdateComponentPromise","create_listing_shortlisting","CreateListingShortlistingResultTypes","Google_Event","PageInstance","GA4_Event","whatever","captureException","destroy_listing_shortlisting","DestroyListingShortlistingResultTypes","Factory","selector","CELL_CLASS_NAME","CELL_INITIALIZED_CLASS_NAME","init","elements","get_current_authenticated_user_listing_shortlistings","GetCurrentAuthenticatedUserListingShortlistingsTypes","listing_shortlistings","el"],"mappings":"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"}