opnform-host-nginx/client/composables/useCrisp.js

117 lines
2.2 KiB
JavaScript
Raw Normal View History

export function useCrisp () {
const crisp = import.meta.client ? window.Crisp : null
2023-12-09 15:47:03 +01:00
function onCrispInit () {
if (!crisp)
return
crisp.chat.onChatOpened(() => {
useAppStore().crisp.chatOpened = true
})
crisp.chat.onChatClosed(() => {
useAppStore().crisp.chatOpened = false
})
}
function openChat () {
if (!crisp)
return
2023-12-20 16:10:32 +01:00
showChat()
crisp.chat.open()
2023-12-09 15:47:03 +01:00
}
function showChat () {
if (!crisp)
return
crisp.chat.show()
useAppStore().crisp.hidden = false
2023-12-09 15:47:03 +01:00
}
function hideChat () {
if (!crisp)
return
crisp.chat.hide()
useAppStore().crisp.hidden = true
2023-12-09 15:47:03 +01:00
}
function closeChat () {
if (!crisp)
return
crisp.chat.close()
2023-12-09 15:47:03 +01:00
}
function openAndShowChat (message = null) {
if (!crisp)
return
2023-12-09 15:47:03 +01:00
openChat()
if (message)
sendTextMessage(message)
2023-12-09 15:47:03 +01:00
}
function openHelpdesk () {
if (!crisp)
return
openChat()
crisp.chat.setHelpdeskView()
2023-12-09 15:47:03 +01:00
}
2023-12-20 16:10:32 +01:00
function openHelpdeskArticle (articleSlug, locale = 'en') {
if (!crisp)
return
crisp.chat.openHelpdeskArticle(locale, articleSlug)
2023-12-09 15:47:03 +01:00
}
function sendTextMessage (message) {
if (!crisp)
return
crisp.message.send('text', message)
}
function setUser (user) {
if (!crisp)
return
crisp.user.setEmail(user.email)
crisp.user.setNickname(user.name)
crisp.session.setData({
'user_id': user.id,
'pro-subscription': user?.is_subscribed ?? false,
'stripe-id': user?.stripe_id ?? '',
'subscription': user?.has_enterprise_subscription ? 'enterprise' : 'pro'
})
if (user?.is_subscribed ?? false) {
setSegments([
'subscribed',
user?.has_enterprise_subscription ? 'enterprise' : 'pro'
])
}
}
function pushEvent (event, data = {}) {
if (!crisp)
return
crisp.session.pushEvent(event, data)
2023-12-20 16:10:32 +01:00
}
function setSegments (segments, overwrite = false) {
if (!crisp)
return
crisp.session.setSegments(segments, overwrite)
2023-12-09 15:47:03 +01:00
}
return {
crisp,
onCrispInit,
2023-12-09 15:47:03 +01:00
openChat,
showChat,
hideChat,
closeChat,
openAndShowChat,
openHelpdesk,
openHelpdeskArticle,
sendTextMessage,
2023-12-20 16:10:32 +01:00
pushEvent,
setSegments,
setUser
2023-12-09 15:47:03 +01:00
}
}