index.tsx 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. import RecordContent from "./record-content"
  2. import { RootState } from "@/store"
  3. import { addMessage } from "@/store/reducers/global"
  4. import { useSelector, useDispatch } from "react-redux"
  5. import { downloadText, showAIModule, genContentText } from "@/common"
  6. import LanguageShowDialog from "@/components/dialog/language-show"
  7. import LanguageStorageDialog from "@/components/dialog/language-storage"
  8. import RecordHeader from "./record-header"
  9. import styles from "./index.module.scss"
  10. import { useTranslation } from "react-i18next"
  11. import { useEffect, useMemo, useRef, useState } from "react"
  12. interface DialogueRecordProps {
  13. onExport?: (value: string) => void
  14. }
  15. const DialogueRecord = (props: DialogueRecordProps) => {
  16. const { onExport } = props
  17. const dispatch = useDispatch()
  18. const { t } = useTranslation()
  19. const sttSubtitles = useSelector((state: RootState) => state.global.sttSubtitles)
  20. const [openLanguageShowDialog, setOpenLanguageShowDialog] = useState(false)
  21. const [openLanguageStorageDialog, setOpenLanguageStorageDialog] = useState(false)
  22. const onClickStorage = () => {
  23. setOpenLanguageStorageDialog(true)
  24. }
  25. const onClickExport = () => {
  26. const content = genContentText(sttSubtitles)
  27. onExport?.(content)
  28. dispatch(addMessage({ type: "success", content: t("export.success") }))
  29. }
  30. return (
  31. <div className={styles.dialogRecord}>
  32. <RecordHeader
  33. onClickSetting={() => {
  34. setOpenLanguageShowDialog(!openLanguageShowDialog)
  35. }}
  36. ></RecordHeader>
  37. <RecordContent></RecordContent>
  38. {sttSubtitles.length ? (
  39. <div className={styles.btnWrapper}>
  40. {showAIModule() ? (
  41. <div className={styles.btn} onClick={onClickExport}>
  42. {t("export.text")}
  43. </div>
  44. ) : null}
  45. <div className={styles.btn} onClick={onClickStorage}>
  46. {t("storage.text")}
  47. </div>
  48. </div>
  49. ) : null}
  50. <LanguageShowDialog
  51. open={openLanguageShowDialog}
  52. onCancel={() => {
  53. setOpenLanguageShowDialog(false)
  54. }}
  55. onOk={() => {
  56. setOpenLanguageShowDialog(false)
  57. }}
  58. ></LanguageShowDialog>
  59. <LanguageStorageDialog
  60. open={openLanguageStorageDialog}
  61. onCancel={() => {
  62. setOpenLanguageStorageDialog(false)
  63. }}
  64. onOk={() => {
  65. setOpenLanguageStorageDialog(false)
  66. }}
  67. ></LanguageStorageDialog>
  68. </div>
  69. )
  70. }
  71. export default DialogueRecord