Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

conversion.tsx 3.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. import React, { useCallback, useState } from 'react'
  2. import { useTranslation } from 'react-i18next'
  3. import Button from '../base/button'
  4. import PipelineScreenShot from './screenshot'
  5. import Confirm from '../base/confirm'
  6. import { useConvertDatasetToPipeline } from '@/service/use-pipeline'
  7. import { useParams } from 'next/navigation'
  8. import { useInvalid } from '@/service/use-base'
  9. import { datasetDetailQueryKeyPrefix } from '@/service/knowledge/use-dataset'
  10. import Toast from '../base/toast'
  11. const Conversion = () => {
  12. const { t } = useTranslation()
  13. const { datasetId } = useParams()
  14. const [showConfirmModal, setShowConfirmModal] = useState(false)
  15. const { mutateAsync: convert, isPending } = useConvertDatasetToPipeline()
  16. const invalidDatasetDetail = useInvalid([datasetDetailQueryKeyPrefix, datasetId])
  17. const handleConvert = useCallback(() => {
  18. convert(datasetId as string, {
  19. onSuccess: (res) => {
  20. if (res.status === 'success') {
  21. Toast.notify({
  22. type: 'error',
  23. message: t('datasetPipeline.conversion.successMessage'),
  24. })
  25. setShowConfirmModal(false)
  26. invalidDatasetDetail()
  27. }
  28. else if (res.status === 'failed') {
  29. Toast.notify({
  30. type: 'error',
  31. message: t('datasetPipeline.conversion.errorMessage'),
  32. })
  33. }
  34. },
  35. onError: () => {
  36. Toast.notify({
  37. type: 'error',
  38. message: t('datasetPipeline.conversion.errorMessage'),
  39. })
  40. },
  41. })
  42. }, [convert, datasetId, invalidDatasetDetail, t])
  43. const handleShowConfirmModal = useCallback(() => {
  44. setShowConfirmModal(true)
  45. }, [])
  46. const handleCancelConversion = useCallback(() => {
  47. setShowConfirmModal(false)
  48. }, [])
  49. return (
  50. <div className='flex h-full w-full items-center justify-center bg-background-body p-6 pb-16'>
  51. <div className='flex rounded-2xl border-[0.5px] border-components-card-border bg-components-card-bg shadow-sm shadow-shadow-shadow-4'>
  52. <div className='flex max-w-[480px] flex-col justify-between p-10'>
  53. <div className='flex flex-col gap-y-2.5'>
  54. <div className='title-4xl-semi-bold text-text-primary'>
  55. {t('datasetPipeline.conversion.title')}
  56. </div>
  57. <div className='body-md-medium'>
  58. <span className='text-text-secondary'>{t('datasetPipeline.conversion.descriptionChunk1')}</span>
  59. <span className='text-text-tertiary'>{t('datasetPipeline.conversion.descriptionChunk2')}</span>
  60. </div>
  61. </div>
  62. <div className='flex items-center gap-x-4'>
  63. <Button
  64. variant='primary'
  65. className='w-32'
  66. onClick={handleShowConfirmModal}
  67. >
  68. {t('datasetPipeline.operations.convert')}
  69. </Button>
  70. <span className='system-xs-regular text-text-warning'>
  71. {t('datasetPipeline.conversion.warning')}
  72. </span>
  73. </div>
  74. </div>
  75. <div className='pb-8 pl-[25px] pr-0 pt-6'>
  76. <div className='rounded-l-xl border border-effects-highlight bg-background-default p-1 shadow-md shadow-shadow-shadow-5 backdrop-blur-[5px]'>
  77. <div className='overflow-hidden rounded-l-lg'>
  78. <PipelineScreenShot />
  79. </div>
  80. </div>
  81. </div>
  82. </div>
  83. {showConfirmModal && (
  84. <Confirm
  85. title={t('datasetPipeline.conversion.confirm.title')}
  86. content={t('datasetPipeline.conversion.confirm.content')}
  87. isShow={showConfirmModal}
  88. onConfirm={handleConvert}
  89. onCancel={handleCancelConversion}
  90. isLoading={isPending}
  91. isDisabled={isPending}
  92. />
  93. )}
  94. </div>
  95. )
  96. }
  97. export default React.memo(Conversion)