dify/web/context/zendesk-conversation-sync.ts
yyh 66a545fc6d
refactor: centralize deployment edition in system features (#39454)
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: GareArc <garethcxy@dify.ai>
2026-07-24 07:15:02 +00:00

103 lines
2.8 KiB
TypeScript

'use client'
import type { DeploymentEdition } from '@dify/contracts/api/console/system-features/types.gen'
import { atom } from 'jotai'
import { atomEffect } from 'jotai-effect'
import { setZendeskConversationFields } from '@/app/components/base/zendesk/utils'
import { ZENDESK_FIELD_IDS } from '@/config'
import { userProfileAtom } from './account-state'
import { deploymentEditionAtom } from './system-features-state'
import { langGeniusVersionInfoAtom } from './version-state'
import { currentWorkspaceAtom } from './workspace-state'
type ZendeskSyncState = {
email?: string
environment?: string
version?: string
workspaceId?: string
}
const zendeskConversationSyncStateAtom = atom<ZendeskSyncState>({})
function syncZendeskField({
fieldId,
deploymentEdition,
previousValue,
setNextValue,
value,
}: {
fieldId: string | undefined
deploymentEdition: DeploymentEdition
previousValue: string | undefined
setNextValue: (value: string) => void
value: string
}) {
if (deploymentEdition !== 'CLOUD' || !fieldId || !value || value === previousValue) return false
setZendeskConversationFields(
[
{
id: fieldId,
value,
},
],
deploymentEdition,
)
setNextValue(value)
return true
}
export const zendeskConversationSyncAtom = atomEffect((get, set) => {
const userProfile = get(userProfileAtom)
const currentWorkspace = get(currentWorkspaceAtom)
const langGeniusVersionInfo = get(langGeniusVersionInfoAtom)
const deploymentEdition = get(deploymentEditionAtom)
const state = get.peek(zendeskConversationSyncStateAtom)
const nextState = { ...state }
let didSync = false
didSync =
syncZendeskField({
fieldId: ZENDESK_FIELD_IDS.ENVIRONMENT,
deploymentEdition,
value: langGeniusVersionInfo.current_env.toLowerCase(),
previousValue: state.environment,
setNextValue: (value) => {
nextState.environment = value
},
}) || didSync
didSync =
syncZendeskField({
fieldId: ZENDESK_FIELD_IDS.VERSION,
deploymentEdition,
value: langGeniusVersionInfo.version,
previousValue: state.version,
setNextValue: (value) => {
nextState.version = value
},
}) || didSync
didSync =
syncZendeskField({
fieldId: ZENDESK_FIELD_IDS.EMAIL,
deploymentEdition,
value: userProfile.email,
previousValue: state.email,
setNextValue: (value) => {
nextState.email = value
},
}) || didSync
didSync =
syncZendeskField({
fieldId: ZENDESK_FIELD_IDS.WORKSPACE_ID,
deploymentEdition,
value: currentWorkspace.id,
previousValue: state.workspaceId,
setNextValue: (value) => {
nextState.workspaceId = value
},
}) || didSync
if (didSync) set(zendeskConversationSyncStateAtom, nextState)
})