VONQ
ChangelogVersion 4.8

Favourite (save) marketplace channels for later

Favourite (save) marketplace channels for later

Recruiters can now favourite ("save for later") a marketplace channel straight from the search results or the product detail view, so channels they trust are quick to find again for future vacancies.

What's new

  • Star toggle on every channel card and on the product-detail header. Click it to save a channel; click again to remove it. The star fills in when the channel is saved and is briefly disabled while the request is in flight.
  • Toasts confirm each action — "Channel saved to your favourites" when you save, and "Channel removed from your favourites" when you remove.
  • Saved state is shared everywhere. A channel saved from search shows as saved in the product detail (and vice versa), and search-result cards for saved channels carry a "Saved by you" badge. A saved card never shows the "Recommended channel" banner as well — the badge takes its place, and saved channels still appear in the recommendations section.
  • "Your saved channels" section on the product landing lists your favourites above the recommendations, with a count in its heading (for example "Your saved channels (7)"). It only appears when you have saved channels. Cards here are marked "Your go-to channel", and the section notes that unavailable saved channels are hidden.
  • A "Saved Only" option in the marketplace "Filter By" dropdown turns the whole search grid into your saved channels — the complete list, not only those on the page you have scrolled to. It appears once saved channels are known to be available (see favoriteProductIdsHaveLoaded below).
  • No broken cards. If a saved channel is no longer available, it is simply omitted from your saved channels — you never see a broken card.

Using it from the SDK

The following functions are available on window.hapi.product.service (all additive):

await window.hapi.product.service.getFavoriteProductIds.run()
await window.hapi.product.service.getFavoriteProducts.run()
await window.hapi.product.service.favoriteProduct.run(productId)
await window.hapi.product.service.unfavoriteProduct.run(productId)
await window.hapi.product.service.toggleFavoriteProduct.run(productId)

The saved state is also readable on window.hapi.product.state:

window.hapi.product.state.favoriteProductIds.value // string[]
window.hapi.product.state.favoriteProductIdsAreLoading.value // boolean
window.hapi.product.state.favoriteProductIdsHaveLoaded.value // boolean (see below)
window.hapi.product.state.favoriteProductIdsBeingUpdated.value // string[] (in-flight)
window.hapi.product.state.favoriteProducts.value // full product objects
window.hapi.product.state.favoriteProductsAreLoading.value // boolean

"Saved Only" is a new member of the existing product type filter, so you can select it yourself:

window.hapi.product.state.searchTypeFilterBy.value =
	window.hapi.utils.product.typeFilterByKeys.savedOnly
await window.hapi.product.service.onChangeFilters.run()

While selected, window.hapi.product.state.products holds the saved channels rather than search results, and loadMoreProducts does nothing — the full list is fetched up front.

favoriteProductIdsHaveLoaded tells "this user has no saved channels" apart from "we could not find out". An empty favoriteProductIds cannot express the difference, and acting on an unknown saved state would either re-save a channel that is already saved or remove one the recruiter meant to save. Saved channels require an ATS-user token, so for partner-token-only integrations this stays false and the star toggle stays disabled — read it before rendering your own saved-state UI.

Theming

The star and the two new badges take their colours from five new global theme variables, so they follow your branding like the rest of the widgets:

window.hapi.theming.state.theme = {
	global: {
		favoriteStarColor: "#FFA11E",
		savedBadgeBackgroundColor: "#FFEABD",
		savedBadgeTextColor: "#753600",
		goToChannelBadgeBackgroundColor: "#80CAFF",
		goToChannelBadgeTextColor: "#002A4E",
	},
}

The values above are the defaults. They are separate variables rather than the existing warning / info pairs because those pairs are used for warnings and informational states elsewhere — restyling them to brand a saved badge would change alerts and banners too.

Backwards compatibility

  • Purely additive. No SDK function, getter, setter, property, or event was removed or renamed.
  • No widget element id, class, or data-* attribute was removed or renamed; the star button and the "Saved by you" badge add new selectors only.
  • No translation keys were removed.

I18n

The following i18n translations have been added:

Key"en" value"de" value"nl" value"fr" value"es" value"it" value
product.favorite.addSave channel for laterKanal für später speichernKanaal opslaan voor laterEnregistrer le canal pour plus tardGuardar canal para más tardeSalva il canale per dopo
product.favorite.removeRemove from saved channelsAus gespeicherten Kanälen entfernenVerwijderen uit opgeslagen kanalenRetirer des canaux enregistrésQuitar de los canales guardadosRimuovi dai canali salvati
product.favorite.add.successChannel saved to your favouritesKanal zu deinen Favoriten hinzugefügtKanaal opgeslagen in je favorietenCanal ajouté à vos favorisCanal añadido a tus favoritosCanale aggiunto ai tuoi preferiti
product.favorite.remove.successChannel removed from your favouritesKanal aus deinen Favoriten entferntKanaal verwijderd uit je favorietenCanal retiré de vos favorisCanal eliminado de tus favoritosCanale rimosso dai tuoi preferiti
products.details.saved-channels-headingYour saved channelsDeine gespeicherten KanäleJe opgeslagen kanalenVos canaux enregistrésTus canales guardadosI tuoi canali salvati
products.details.saved-channelSaved by youVon dir gespeichertDoor jou opgeslagenEnregistré par vousGuardado por tiSalvato da te
products.details.saved-channels-descriptionQuick-add from your go-to channels before browsing the marketplace.Füge schnell aus deinen bevorzugten Kanälen hinzu, bevor du den Marktplatz durchsuchst.Voeg snel toe vanuit je favoriete kanalen voordat je de marktplaats doorzoekt.Ajoutez rapidement depuis vos canaux de prédilection avant de parcourir la marketplace.Añade rápidamente desde tus canales de confianza antes de explorar el marketplace.Aggiungi rapidamente dai tuoi canali di fiducia prima di esplorare il marketplace.
products.details.saved-channels-unavailable-noteSome saved channels may no longer be available and are hidden.Einige gespeicherte Kanäle sind möglicherweise nicht mehr verfügbar und werden ausgeblendet.Sommige opgeslagen kanalen zijn mogelijk niet langer beschikbaar en worden verborgen.Certains canaux enregistrés ne sont peut-être plus disponibles et sont masqués.Algunos canales guardados pueden ya no estar disponibles y se ocultan.Alcuni canali salvati potrebbero non essere più disponibili e sono nascosti.
products.details.go-to-channelYour go-to channelDein bevorzugter KanalJouw favoriete kanaalVotre canal de prédilectionTu canal de confianzaIl tuo canale di fiducia
products.type-filter-by.saved-onlySaved OnlyNur gespeicherteAlleen opgeslagenSeulement les enregistrésSolo GuardadosSolo Salvati