mirror of
https://git.mirrors.martin98.com/https://github.com/langgenius/dify.git
synced 2025-08-15 20:06:03 +08:00
refactor: replace Toast notifications with emit for editing state management
This commit is contained in:
parent
934d0a32cd
commit
e87261e8ce
@ -9,7 +9,7 @@ import { JSON_SCHEMA_MAX_DEPTH } from '@/config'
|
|||||||
import CodeEditor from './code-editor'
|
import CodeEditor from './code-editor'
|
||||||
import ErrorMessage from './error-message'
|
import ErrorMessage from './error-message'
|
||||||
import { useVisualEditorStore } from './visual-editor/store'
|
import { useVisualEditorStore } from './visual-editor/store'
|
||||||
import Toast from '@/app/components/base/toast'
|
import { useMittContext } from './visual-editor/context'
|
||||||
|
|
||||||
type JsonImporterProps = {
|
type JsonImporterProps = {
|
||||||
onSubmit: (schema: any) => void
|
onSubmit: (schema: any) => void
|
||||||
@ -27,6 +27,7 @@ const JsonImporter: FC<JsonImporterProps> = ({
|
|||||||
const importBtnRef = useRef<HTMLButtonElement>(null)
|
const importBtnRef = useRef<HTMLButtonElement>(null)
|
||||||
const advancedEditing = useVisualEditorStore(state => state.advancedEditing)
|
const advancedEditing = useVisualEditorStore(state => state.advancedEditing)
|
||||||
const isAddingNewField = useVisualEditorStore(state => state.isAddingNewField)
|
const isAddingNewField = useVisualEditorStore(state => state.isAddingNewField)
|
||||||
|
const { emit } = useMittContext()
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (importBtnRef.current) {
|
if (importBtnRef.current) {
|
||||||
@ -38,15 +39,10 @@ const JsonImporter: FC<JsonImporterProps> = ({
|
|||||||
|
|
||||||
const handleTrigger = useCallback((e: React.MouseEvent<HTMLElement, MouseEvent>) => {
|
const handleTrigger = useCallback((e: React.MouseEvent<HTMLElement, MouseEvent>) => {
|
||||||
e.stopPropagation()
|
e.stopPropagation()
|
||||||
if (advancedEditing || isAddingNewField) {
|
if (advancedEditing || isAddingNewField)
|
||||||
Toast.notify({
|
emit('quitEditing', {})
|
||||||
type: 'warning',
|
|
||||||
message: t('workflow.nodes.llm.jsonSchema.warningTips.jsonImport'),
|
|
||||||
})
|
|
||||||
return
|
|
||||||
}
|
|
||||||
setOpen(!open)
|
setOpen(!open)
|
||||||
}, [open, advancedEditing, isAddingNewField, t])
|
}, [open, advancedEditing, isAddingNewField, emit])
|
||||||
|
|
||||||
const onClose = useCallback(() => {
|
const onClose = useCallback(() => {
|
||||||
setOpen(false)
|
setOpen(false)
|
||||||
|
@ -17,7 +17,7 @@ import {
|
|||||||
preValidateSchema,
|
preValidateSchema,
|
||||||
validateSchemaAgainstDraft7,
|
validateSchemaAgainstDraft7,
|
||||||
} from '../../utils'
|
} from '../../utils'
|
||||||
import { MittProvider, VisualEditorContextProvider } from './visual-editor/context'
|
import { MittProvider, VisualEditorContextProvider, useMittContext } from './visual-editor/context'
|
||||||
import ErrorMessage from './error-message'
|
import ErrorMessage from './error-message'
|
||||||
import { useVisualEditorStore } from './visual-editor/store'
|
import { useVisualEditorStore } from './visual-editor/store'
|
||||||
import Toast from '@/app/components/base/toast'
|
import Toast from '@/app/components/base/toast'
|
||||||
@ -73,6 +73,7 @@ const JsonSchemaConfig: FC<JsonSchemaConfigProps> = ({
|
|||||||
const isAddingNewField = useVisualEditorStore(state => state.isAddingNewField)
|
const isAddingNewField = useVisualEditorStore(state => state.isAddingNewField)
|
||||||
const setIsAddingNewField = useVisualEditorStore(state => state.setIsAddingNewField)
|
const setIsAddingNewField = useVisualEditorStore(state => state.setIsAddingNewField)
|
||||||
const setHoveringProperty = useVisualEditorStore(state => state.setHoveringProperty)
|
const setHoveringProperty = useVisualEditorStore(state => state.setHoveringProperty)
|
||||||
|
const { emit } = useMittContext()
|
||||||
|
|
||||||
const updateBtnWidth = useCallback((width: number) => {
|
const updateBtnWidth = useCallback((width: number) => {
|
||||||
setBtnWidth(width + 32)
|
setBtnWidth(width + 32)
|
||||||
@ -113,18 +114,12 @@ const JsonSchemaConfig: FC<JsonSchemaConfigProps> = ({
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (currentTab === SchemaView.VisualEditor) {
|
else if (currentTab === SchemaView.VisualEditor) {
|
||||||
if (advancedEditing || isAddingNewField) {
|
if (advancedEditing || isAddingNewField)
|
||||||
Toast.notify({
|
emit('quitEditing', { callback: (backup: SchemaRoot) => setJson(JSON.stringify(backup || jsonSchema, null, 2)) })
|
||||||
type: 'warning',
|
|
||||||
message: t('workflow.nodes.llm.jsonSchema.warningTips.switchToJsonSchema'),
|
|
||||||
})
|
|
||||||
return
|
|
||||||
}
|
|
||||||
setJson(JSON.stringify(jsonSchema, null, 2))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
setCurrentTab(value)
|
setCurrentTab(value)
|
||||||
}, [currentTab, jsonSchema, json, advancedEditing, isAddingNewField, t])
|
}, [currentTab, jsonSchema, json, advancedEditing, isAddingNewField, emit])
|
||||||
|
|
||||||
const handleApplySchema = useCallback((schema: SchemaRoot) => {
|
const handleApplySchema = useCallback((schema: SchemaRoot) => {
|
||||||
if (currentTab === SchemaView.VisualEditor)
|
if (currentTab === SchemaView.VisualEditor)
|
||||||
|
@ -20,6 +20,7 @@ import { type FormValue, ModelTypeEnum } from '@/app/components/header/account-s
|
|||||||
import { useModelListAndDefaultModelAndCurrentProviderAndModel } from '@/app/components/header/account-setting/model-provider-page/hooks'
|
import { useModelListAndDefaultModelAndCurrentProviderAndModel } from '@/app/components/header/account-setting/model-provider-page/hooks'
|
||||||
import { useVisualEditorStore } from '../visual-editor/store'
|
import { useVisualEditorStore } from '../visual-editor/store'
|
||||||
import { useTranslation } from 'react-i18next'
|
import { useTranslation } from 'react-i18next'
|
||||||
|
import { useMittContext } from '../visual-editor/context'
|
||||||
|
|
||||||
type JsonSchemaGeneratorProps = {
|
type JsonSchemaGeneratorProps = {
|
||||||
onApply: (schema: SchemaRoot) => void
|
onApply: (schema: SchemaRoot) => void
|
||||||
@ -52,6 +53,7 @@ export const JsonSchemaGenerator: FC<JsonSchemaGeneratorProps> = ({
|
|||||||
} = useModelListAndDefaultModelAndCurrentProviderAndModel(ModelTypeEnum.textGeneration)
|
} = useModelListAndDefaultModelAndCurrentProviderAndModel(ModelTypeEnum.textGeneration)
|
||||||
const advancedEditing = useVisualEditorStore(state => state.advancedEditing)
|
const advancedEditing = useVisualEditorStore(state => state.advancedEditing)
|
||||||
const isAddingNewField = useVisualEditorStore(state => state.isAddingNewField)
|
const isAddingNewField = useVisualEditorStore(state => state.isAddingNewField)
|
||||||
|
const { emit } = useMittContext()
|
||||||
const SchemaGenerator = theme === Theme.light ? SchemaGeneratorLight : SchemaGeneratorDark
|
const SchemaGenerator = theme === Theme.light ? SchemaGeneratorLight : SchemaGeneratorDark
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
@ -66,15 +68,10 @@ export const JsonSchemaGenerator: FC<JsonSchemaGeneratorProps> = ({
|
|||||||
|
|
||||||
const handleTrigger = useCallback((e: React.MouseEvent<HTMLElement, MouseEvent>) => {
|
const handleTrigger = useCallback((e: React.MouseEvent<HTMLElement, MouseEvent>) => {
|
||||||
e.stopPropagation()
|
e.stopPropagation()
|
||||||
if (advancedEditing || isAddingNewField) {
|
if (advancedEditing || isAddingNewField)
|
||||||
Toast.notify({
|
emit('quitEditing', {})
|
||||||
type: 'warning',
|
|
||||||
message: t('workflow.nodes.llm.jsonSchema.warningTips.jsonGeneration'),
|
|
||||||
})
|
|
||||||
return
|
|
||||||
}
|
|
||||||
setOpen(!open)
|
setOpen(!open)
|
||||||
}, [open, advancedEditing, isAddingNewField, t])
|
}, [open, advancedEditing, isAddingNewField, emit])
|
||||||
|
|
||||||
const onClose = useCallback(() => {
|
const onClose = useCallback(() => {
|
||||||
setOpen(false)
|
setOpen(false)
|
||||||
|
@ -89,11 +89,8 @@ const EditCard: FC<EditCardProps> = ({
|
|||||||
})
|
})
|
||||||
|
|
||||||
useSubscribe('fieldChangeSuccess', () => {
|
useSubscribe('fieldChangeSuccess', () => {
|
||||||
if (isAddingNewField) {
|
isAddingNewField && setIsAddingNewField(false)
|
||||||
setIsAddingNewField(false)
|
advancedEditing && setAdvancedEditing(false)
|
||||||
return
|
|
||||||
}
|
|
||||||
setAdvancedEditing(false)
|
|
||||||
})
|
})
|
||||||
|
|
||||||
const emitPropertyNameChange = useCallback(() => {
|
const emitPropertyNameChange = useCallback(() => {
|
||||||
|
@ -22,7 +22,10 @@ export const useSchemaNodeOperations = (props: VisualEditorProps) => {
|
|||||||
const { schema: jsonSchema, onChange } = props
|
const { schema: jsonSchema, onChange } = props
|
||||||
const backupSchema = useVisualEditorStore(state => state.backupSchema)
|
const backupSchema = useVisualEditorStore(state => state.backupSchema)
|
||||||
const setBackupSchema = useVisualEditorStore(state => state.setBackupSchema)
|
const setBackupSchema = useVisualEditorStore(state => state.setBackupSchema)
|
||||||
|
const isAddingNewField = useVisualEditorStore(state => state.isAddingNewField)
|
||||||
const setIsAddingNewField = useVisualEditorStore(state => state.setIsAddingNewField)
|
const setIsAddingNewField = useVisualEditorStore(state => state.setIsAddingNewField)
|
||||||
|
const advancedEditing = useVisualEditorStore(state => state.advancedEditing)
|
||||||
|
const setAdvancedEditing = useVisualEditorStore(state => state.setAdvancedEditing)
|
||||||
const setHoveringProperty = useVisualEditorStore(state => state.setHoveringProperty)
|
const setHoveringProperty = useVisualEditorStore(state => state.setHoveringProperty)
|
||||||
const { emit, useSubscribe } = useMittContext()
|
const { emit, useSubscribe } = useMittContext()
|
||||||
|
|
||||||
@ -33,6 +36,15 @@ export const useSchemaNodeOperations = (props: VisualEditorProps) => {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
useSubscribe('quitEditing', (params) => {
|
||||||
|
const { callback } = params as any
|
||||||
|
callback?.(backupSchema)
|
||||||
|
emit('restoreSchema')
|
||||||
|
isAddingNewField && setIsAddingNewField(false)
|
||||||
|
advancedEditing && setAdvancedEditing(false)
|
||||||
|
setHoveringProperty(null)
|
||||||
|
})
|
||||||
|
|
||||||
useSubscribe('propertyNameChange', (params) => {
|
useSubscribe('propertyNameChange', (params) => {
|
||||||
const { parentPath, oldFields, fields } = params as ChangeEventParams
|
const { parentPath, oldFields, fields } = params as ChangeEventParams
|
||||||
const { name: oldName } = oldFields
|
const { name: oldName } = oldFields
|
||||||
@ -204,6 +216,7 @@ export const useSchemaNodeOperations = (props: VisualEditorProps) => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
useSubscribe('addField', (params) => {
|
useSubscribe('addField', (params) => {
|
||||||
|
advancedEditing && setAdvancedEditing(false)
|
||||||
setBackupSchema(jsonSchema)
|
setBackupSchema(jsonSchema)
|
||||||
const { path } = params as AddEventParams
|
const { path } = params as AddEventParams
|
||||||
setIsAddingNewField(true)
|
setIsAddingNewField(true)
|
||||||
|
@ -442,9 +442,6 @@ const translation = {
|
|||||||
fieldNamePlaceholder: 'Field Name',
|
fieldNamePlaceholder: 'Field Name',
|
||||||
descriptionPlaceholder: 'Add description',
|
descriptionPlaceholder: 'Add description',
|
||||||
warningTips: {
|
warningTips: {
|
||||||
jsonGeneration: 'Please finish editing the current field before generating a schema',
|
|
||||||
jsonImport: 'Please finish editing the current field before importing a schema',
|
|
||||||
switchToJsonSchema: 'Please finish editing the current field before switching to JSON Schema',
|
|
||||||
saveSchema: 'Please finish editing the current field before saving the schema',
|
saveSchema: 'Please finish editing the current field before saving the schema',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -443,9 +443,6 @@ const translation = {
|
|||||||
fieldNamePlaceholder: '字段名',
|
fieldNamePlaceholder: '字段名',
|
||||||
descriptionPlaceholder: '添加描述',
|
descriptionPlaceholder: '添加描述',
|
||||||
warningTips: {
|
warningTips: {
|
||||||
jsonGeneration: '请先完成当前字段的编辑',
|
|
||||||
jsonImport: '请先完成当前字段的编辑',
|
|
||||||
switchToJsonSchema: '请先完成当前字段的编辑',
|
|
||||||
saveSchema: '请先完成当前字段的编辑',
|
saveSchema: '请先完成当前字段的编辑',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
Loading…
x
Reference in New Issue
Block a user