refactor: use type-only imports for better code organization

This commit is contained in:
icarus 2025-10-13 23:47:23 +08:00
parent cd2609068c
commit ca96b6fa7b
18 changed files with 29 additions and 26 deletions

View File

@ -1,4 +1,4 @@
import { SystemProviderId, Video } from '@renderer/types' import type { SystemProviderId, Video } from '@renderer/types'
// Hard-encoded for now. We may implement a function to filter video generation model from provider.models. // Hard-encoded for now. We may implement a function to filter video generation model from provider.models.
export const videoModelsMap = { export const videoModelsMap = {

View File

@ -1,4 +1,4 @@
import OpenAI from '@cherrystudio/openai' import type OpenAI from '@cherrystudio/openai'
import { useCallback } from 'react' import { useCallback } from 'react'
import { useProviderVideos } from './useProviderVideos' import { useProviderVideos } from './useProviderVideos'

View File

@ -1,5 +1,6 @@
import { retrieveVideo } from '@renderer/services/ApiService' import { retrieveVideo } from '@renderer/services/ApiService'
import useSWR, { SWRConfiguration, useSWRConfig } from 'swr' import type { SWRConfiguration } from 'swr'
import useSWR, { useSWRConfig } from 'swr'
import { useProvider } from '../useProvider' import { useProvider } from '../useProvider'
import { useVideo } from './useVideo' import { useVideo } from './useVideo'

View File

@ -3,7 +3,7 @@ import { retrieveVideo } from '@renderer/services/ApiService'
import { getProviderById } from '@renderer/services/ProviderService' import { getProviderById } from '@renderer/services/ProviderService'
import { useAppDispatch, useAppSelector } from '@renderer/store' import { useAppDispatch, useAppSelector } from '@renderer/store'
import { addVideoAction, setVideoAction, setVideosAction, updateVideoAction } from '@renderer/store/video' import { addVideoAction, setVideoAction, setVideosAction, updateVideoAction } from '@renderer/store/video'
import { Video } from '@renderer/types/video' import type { Video } from '@renderer/types/video'
import { getErrorMessage } from '@renderer/utils' import { getErrorMessage } from '@renderer/utils'
import { useCallback, useEffect, useRef } from 'react' import { useCallback, useEffect, useRef } from 'react'
import { useTranslation } from 'react-i18next' import { useTranslation } from 'react-i18next'

View File

@ -2,7 +2,7 @@ import { loggerService } from '@logger'
import { retrieveVideoContent } from '@renderer/services/ApiService' import { retrieveVideoContent } from '@renderer/services/ApiService'
import ImageStorage from '@renderer/services/ImageStorage' import ImageStorage from '@renderer/services/ImageStorage'
import { getProviderById } from '@renderer/services/ProviderService' import { getProviderById } from '@renderer/services/ProviderService'
import { Video } from '@renderer/types' import type { Video } from '@renderer/types'
import { useCallback } from 'react' import { useCallback } from 'react'
const logger = loggerService.withContext('useRetrieveThumbnail') const logger = loggerService.withContext('useRetrieveThumbnail')

View File

@ -1,4 +1,4 @@
import { Video } from '@renderer/types' import type { Video } from '@renderer/types'
import { PlusIcon } from 'lucide-react' import { PlusIcon } from 'lucide-react'
import { VideoListItem } from './VideoListItem' import { VideoListItem } from './VideoListItem'

View File

@ -1,6 +1,6 @@
import { cn, Progress, Spinner } from '@heroui/react' import { cn, Progress, Spinner } from '@heroui/react'
import { DeleteIcon } from '@renderer/components/Icons' import { DeleteIcon } from '@renderer/components/Icons'
import { Video } from '@renderer/types/video' import type { Video } from '@renderer/types/video'
import { ContextMenu, ContextMenuContent, ContextMenuItem, ContextMenuTrigger } from '@renderer/ui/context-menu' import { ContextMenu, ContextMenuContent, ContextMenuItem, ContextMenuTrigger } from '@renderer/ui/context-menu'
import { CheckCircleIcon, CircleXIcon, ClockIcon, DownloadIcon, ImageDownIcon } from 'lucide-react' import { CheckCircleIcon, CircleXIcon, ClockIcon, DownloadIcon, ImageDownIcon } from 'lucide-react'
import { useTranslation } from 'react-i18next' import { useTranslation } from 'react-i18next'

View File

@ -8,11 +8,11 @@ import { useProviderVideos } from '@renderer/hooks/video/useProviderVideos'
import { useVideoThumbnail } from '@renderer/hooks/video/useVideoThumbnail' import { useVideoThumbnail } from '@renderer/hooks/video/useVideoThumbnail'
import { deleteVideo } from '@renderer/services/ApiService' import { deleteVideo } from '@renderer/services/ApiService'
import { SystemProviderIds } from '@renderer/types' import { SystemProviderIds } from '@renderer/types'
import { CreateVideoParams } from '@renderer/types/video' import type { CreateVideoParams } from '@renderer/types/video'
import { getErrorMessage } from '@renderer/utils' import { getErrorMessage } from '@renderer/utils'
import { deepUpdate } from '@renderer/utils/deepUpdate' import { deepUpdate } from '@renderer/utils/deepUpdate'
import { isVideoModel } from '@renderer/utils/model/video' import { isVideoModel } from '@renderer/utils/model/video'
import { DeepPartial } from 'ai' import type { DeepPartial } from 'ai'
import { useCallback, useMemo, useState } from 'react' import { useCallback, useMemo, useState } from 'react'
import { useTranslation } from 'react-i18next' import { useTranslation } from 'react-i18next'

View File

@ -5,11 +5,12 @@ import { useAddOpenAIVideo } from '@renderer/hooks/video/useAddOpenAIVideo'
import { useProviderVideos } from '@renderer/hooks/video/useProviderVideos' import { useProviderVideos } from '@renderer/hooks/video/useProviderVideos'
import { createVideo, retrieveVideoContent } from '@renderer/services/ApiService' import { createVideo, retrieveVideoContent } from '@renderer/services/ApiService'
import FileManager from '@renderer/services/FileManager' import FileManager from '@renderer/services/FileManager'
import { FileTypes, Provider, VideoFileMetadata } from '@renderer/types' import type { Provider, VideoFileMetadata } from '@renderer/types'
import { CreateVideoParams, Video } from '@renderer/types/video' import { FileTypes } from '@renderer/types'
import type { CreateVideoParams, Video } from '@renderer/types/video'
import { getErrorMessage } from '@renderer/utils' import { getErrorMessage } from '@renderer/utils'
import { MB } from '@shared/config/constant' import { MB } from '@shared/config/constant'
import { DeepPartial } from 'ai' import type { DeepPartial } from 'ai'
import dayjs from 'dayjs' import dayjs from 'dayjs'
import { isEmpty } from 'lodash' import { isEmpty } from 'lodash'
import { ArrowUp, CircleXIcon, ImageIcon } from 'lucide-react' import { ArrowUp, CircleXIcon, ImageIcon } from 'lucide-react'

View File

@ -12,7 +12,7 @@ import {
} from '@heroui/react' } from '@heroui/react'
import { usePending } from '@renderer/hooks/usePending' import { usePending } from '@renderer/hooks/usePending'
import FileManager from '@renderer/services/FileManager' import FileManager from '@renderer/services/FileManager'
import { Video, VideoDownloaded, VideoFailed } from '@renderer/types/video' import type { Video, VideoDownloaded, VideoFailed } from '@renderer/types/video'
import dayjs from 'dayjs' import dayjs from 'dayjs'
import { CheckCircleIcon, CircleXIcon, Clock9Icon } from 'lucide-react' import { CheckCircleIcon, CircleXIcon, Clock9Icon } from 'lucide-react'
import { useEffect, useMemo, useRef, useState } from 'react' import { useEffect, useMemo, useRef, useState } from 'react'

View File

@ -1,6 +1,6 @@
import { Select, SelectItem } from '@heroui/react' import { Select, SelectItem } from '@heroui/react'
import { videoModelsMap } from '@renderer/config/models/video' import { videoModelsMap } from '@renderer/config/models/video'
import { Model } from '@renderer/types' import type { Model } from '@renderer/types'
import { useTranslation } from 'react-i18next' import { useTranslation } from 'react-i18next'
import { SettingItem } from './shared' import { SettingItem } from './shared'

View File

@ -1,7 +1,7 @@
import { VideoSeconds, VideoSize } from '@cherrystudio/openai/resources' import type { VideoSeconds, VideoSize } from '@cherrystudio/openai/resources'
import { Select, SelectItem } from '@heroui/react' import { Select, SelectItem } from '@heroui/react'
import { OpenAICreateVideoParams } from '@renderer/types/video' import type { OpenAICreateVideoParams } from '@renderer/types/video'
import { DeepPartial } from 'ai' import type { DeepPartial } from 'ai'
import { useCallback } from 'react' import { useCallback } from 'react'
import { useTranslation } from 'react-i18next' import { useTranslation } from 'react-i18next'

View File

@ -1,9 +1,9 @@
import { Select, SelectItem } from '@heroui/react' import { Select, SelectItem } from '@heroui/react'
import { ProviderAvatar } from '@renderer/components/ProviderAvatar' import { ProviderAvatar } from '@renderer/components/ProviderAvatar'
import { useProviders } from '@renderer/hooks/useProvider' import { useProviders } from '@renderer/hooks/useProvider'
import { Provider, SystemProviderId } from '@renderer/types' import type { Provider, SystemProviderId } from '@renderer/types'
import { getFancyProviderName } from '@renderer/utils' import { getFancyProviderName } from '@renderer/utils'
import { Dispatch, SetStateAction } from 'react' import type { Dispatch, SetStateAction } from 'react'
import { useTranslation } from 'react-i18next' import { useTranslation } from 'react-i18next'
import { SettingItem } from './shared' import { SettingItem } from './shared'

View File

@ -1,5 +1,5 @@
import { Divider } from '@heroui/react' import { Divider } from '@heroui/react'
import { PropsWithChildren } from 'react' import type { PropsWithChildren } from 'react'
export const SettingsGroup = ({ children }: PropsWithChildren) => { export const SettingsGroup = ({ children }: PropsWithChildren) => {
return <div className="mb-4 flex flex-col rounded-2xl border border-foreground-200 p-3">{children}</div> return <div className="mb-4 flex flex-col rounded-2xl border border-foreground-200 p-3">{children}</div>

View File

@ -1,6 +1,7 @@
import { loggerService } from '@logger' import { loggerService } from '@logger'
import { createSlice, PayloadAction } from '@reduxjs/toolkit' import type { PayloadAction } from '@reduxjs/toolkit'
import { Video } from '@renderer/types/video' import { createSlice } from '@reduxjs/toolkit'
import type { Video } from '@renderer/types/video'
const logger = loggerService.withContext('Store:video') const logger = loggerService.withContext('Store:video')

View File

@ -1,6 +1,6 @@
import OpenAI from '@cherrystudio/openai' import type OpenAI from '@cherrystudio/openai'
import { Provider } from './provider' import type { Provider } from './provider'
// Only OpenAI (Responses) is supported for now. // Only OpenAI (Responses) is supported for now.
export type VideoEndpointType = 'openai' export type VideoEndpointType = 'openai'

View File

@ -1,4 +1,4 @@
import { DeepPartial } from 'ai' import type { DeepPartial } from 'ai'
import { cloneDeep } from 'lodash' import { cloneDeep } from 'lodash'
/** /**

View File

@ -1,4 +1,4 @@
import { VideoModel } from '@cherrystudio/openai/resources' import type { VideoModel } from '@cherrystudio/openai/resources'
import { videoModelsMap } from '@renderer/config/models/video' import { videoModelsMap } from '@renderer/config/models/video'
// Only for openai, use hard-encoded values // Only for openai, use hard-encoded values