您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

create-from-scratch-modal.tsx 2.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. import React, { useCallback, useEffect, useState } from 'react'
  2. import type { CreateDatasetReq } from '@/models/datasets'
  3. import { ChunkingMode, DatasetPermission } from '@/models/datasets'
  4. import { useMembers } from '@/service/use-common'
  5. import { useCreatePipelineDataset } from '@/service/knowledge/use-create-dataset'
  6. import type { Member } from '@/models/common'
  7. import CreateForm from '../create-form'
  8. import type { CreateFormData } from '@/models/pipeline'
  9. import Modal from '@/app/components/base/modal'
  10. type CreateFromScratchModalProps = {
  11. show: boolean
  12. onClose: () => void
  13. }
  14. const CreateFromScratchModal = ({
  15. show,
  16. onClose,
  17. }: CreateFromScratchModalProps) => {
  18. const [memberList, setMemberList] = useState<Member[]>([])
  19. const { data: members } = useMembers()
  20. useEffect(() => {
  21. if (members?.accounts)
  22. setMemberList(members.accounts)
  23. }, [members])
  24. const { mutateAsync: createEmptyDataset } = useCreatePipelineDataset()
  25. const handleCreate = useCallback(async (payload: CreateFormData) => {
  26. const { name, appIcon, description, permission, selectedMemberIDs } = payload
  27. const request: CreateDatasetReq = {
  28. name,
  29. description,
  30. icon_info: {
  31. icon_type: appIcon.type,
  32. icon: appIcon.type === 'image' ? appIcon.fileId : appIcon.icon,
  33. icon_background: appIcon.type === 'image' ? undefined : appIcon.background,
  34. icon_url: appIcon.type === 'image' ? appIcon.url : undefined,
  35. },
  36. doc_form: ChunkingMode.text,
  37. permission,
  38. }
  39. // Handle permission
  40. if (request.permission === DatasetPermission.partialMembers) {
  41. const selectedMemberList = selectedMemberIDs.map((id) => {
  42. return {
  43. user_id: id,
  44. role: memberList.find(member => member.id === id)?.role,
  45. }
  46. })
  47. request.partial_member_list = selectedMemberList
  48. }
  49. await createEmptyDataset(request, {
  50. onSettled: () => {
  51. onClose?.()
  52. },
  53. })
  54. }, [createEmptyDataset, memberList, onClose])
  55. return (
  56. <Modal
  57. isShow={show}
  58. onClose={onClose}
  59. className='max-w-[520px] p-0'
  60. >
  61. <CreateForm
  62. onCreate={handleCreate}
  63. onClose={onClose}
  64. />
  65. </Modal>
  66. )
  67. }
  68. export default CreateFromScratchModal