mirror of
https://github.com/langgenius/dify.git
synced 2026-07-21 18:58:35 +08:00
89 lines
2.2 KiB
TypeScript
89 lines
2.2 KiB
TypeScript
'use client'
|
|
|
|
import { atom } from 'jotai'
|
|
import { atomEffect } from 'jotai-effect'
|
|
import { setZendeskConversationFields } from '@/app/components/base/zendesk/utils'
|
|
import { ZENDESK_FIELD_IDS } from '@/config'
|
|
import {
|
|
currentWorkspaceAtom,
|
|
langGeniusVersionInfoAtom,
|
|
userProfileAtom,
|
|
} from './app-context-state'
|
|
|
|
type ZendeskSyncState = {
|
|
email?: string
|
|
environment?: string
|
|
version?: string
|
|
workspaceId?: string
|
|
}
|
|
|
|
const zendeskConversationSyncStateAtom = atom<ZendeskSyncState>({})
|
|
|
|
function syncZendeskField({
|
|
fieldId,
|
|
previousValue,
|
|
setNextValue,
|
|
value,
|
|
}: {
|
|
fieldId: string | undefined
|
|
previousValue: string | undefined
|
|
setNextValue: (value: string) => void
|
|
value: string
|
|
}) {
|
|
if (!fieldId || !value || value === previousValue)
|
|
return false
|
|
|
|
setZendeskConversationFields([{
|
|
id: fieldId,
|
|
value,
|
|
}])
|
|
setNextValue(value)
|
|
|
|
return true
|
|
}
|
|
|
|
export const zendeskConversationSyncAtom = atomEffect((get, set) => {
|
|
const userProfile = get(userProfileAtom)
|
|
const currentWorkspace = get(currentWorkspaceAtom)
|
|
const langGeniusVersionInfo = get(langGeniusVersionInfoAtom)
|
|
const state = get.peek(zendeskConversationSyncStateAtom)
|
|
const nextState = { ...state }
|
|
|
|
let didSync = false
|
|
didSync = syncZendeskField({
|
|
fieldId: ZENDESK_FIELD_IDS.ENVIRONMENT,
|
|
value: langGeniusVersionInfo.current_env.toLowerCase(),
|
|
previousValue: state.environment,
|
|
setNextValue: (value) => {
|
|
nextState.environment = value
|
|
},
|
|
}) || didSync
|
|
didSync = syncZendeskField({
|
|
fieldId: ZENDESK_FIELD_IDS.VERSION,
|
|
value: langGeniusVersionInfo.version,
|
|
previousValue: state.version,
|
|
setNextValue: (value) => {
|
|
nextState.version = value
|
|
},
|
|
}) || didSync
|
|
didSync = syncZendeskField({
|
|
fieldId: ZENDESK_FIELD_IDS.EMAIL,
|
|
value: userProfile.email,
|
|
previousValue: state.email,
|
|
setNextValue: (value) => {
|
|
nextState.email = value
|
|
},
|
|
}) || didSync
|
|
didSync = syncZendeskField({
|
|
fieldId: ZENDESK_FIELD_IDS.WORKSPACE_ID,
|
|
value: currentWorkspace.id,
|
|
previousValue: state.workspaceId,
|
|
setNextValue: (value) => {
|
|
nextState.workspaceId = value
|
|
},
|
|
}) || didSync
|
|
|
|
if (didSync)
|
|
set(zendeskConversationSyncStateAtom, nextState)
|
|
})
|