refactor: migrate common service toward TanStack Query (#29009)

This commit is contained in:
yyh
2025-12-19 17:34:14 +08:00
committed by GitHub
parent 89e4261883
commit 079620714e
33 changed files with 885 additions and 633 deletions

View File

@@ -1,16 +1,15 @@
'use client'
import type { FC } from 'react'
import React, { useEffect, useState } from 'react'
import useSWR from 'swr'
import Panel from '../panel'
import { DataSourceType } from '../panel/types'
import type { DataSourceNotion as TDataSourceNotion } from '@/models/common'
import { useAppContext } from '@/context/app-context'
import { fetchNotionConnection } from '@/service/common'
import NotionIcon from '@/app/components/base/notion-icon'
import { noop } from 'lodash-es'
import { useTranslation } from 'react-i18next'
import Toast from '@/app/components/base/toast'
import { useDataSourceIntegrates, useNotionConnection } from '@/service/use-common'
const Icon: FC<{
src: string
@@ -26,7 +25,7 @@ const Icon: FC<{
)
}
type Props = {
workspaces: TDataSourceNotion[]
workspaces?: TDataSourceNotion[]
}
const DataSourceNotion: FC<Props> = ({
@@ -34,10 +33,14 @@ const DataSourceNotion: FC<Props> = ({
}) => {
const { isCurrentWorkspaceManager } = useAppContext()
const [canConnectNotion, setCanConnectNotion] = useState(false)
const { data } = useSWR(canConnectNotion ? '/oauth/data-source/notion' : null, fetchNotionConnection)
const { data: integrates } = useDataSourceIntegrates({
initialData: workspaces ? { data: workspaces } : undefined,
})
const { data } = useNotionConnection(canConnectNotion)
const { t } = useTranslation()
const connected = !!workspaces.length
const resolvedWorkspaces = integrates?.data ?? []
const connected = !!resolvedWorkspaces.length
const handleConnectNotion = () => {
if (!isCurrentWorkspaceManager)
@@ -74,7 +77,7 @@ const DataSourceNotion: FC<Props> = ({
onConfigure={handleConnectNotion}
readOnly={!isCurrentWorkspaceManager}
isSupportList
configuredList={workspaces.map(workspace => ({
configuredList={resolvedWorkspaces.map(workspace => ({
id: workspace.id,
logo: ({ className }: { className: string }) => (
<Icon

View File

@@ -1,7 +1,6 @@
'use client'
import { useTranslation } from 'react-i18next'
import { Fragment } from 'react'
import { useSWRConfig } from 'swr'
import {
RiDeleteBinLine,
RiLoopLeftLine,
@@ -10,6 +9,7 @@ import {
} from '@remixicon/react'
import { Menu, MenuButton, MenuItem, MenuItems, Transition } from '@headlessui/react'
import { syncDataSourceNotion, updateDataSourceNotionAction } from '@/service/common'
import { useInvalidDataSourceIntegrates } from '@/service/use-common'
import Toast from '@/app/components/base/toast'
import { cn } from '@/utils/classnames'
@@ -25,14 +25,14 @@ export default function Operate({
onAuthAgain,
}: OperateProps) {
const { t } = useTranslation()
const { mutate } = useSWRConfig()
const invalidateDataSourceIntegrates = useInvalidDataSourceIntegrates()
const updateIntegrates = () => {
Toast.notify({
type: 'success',
message: t('common.api.success'),
})
mutate({ url: 'data-source/integrates' })
invalidateDataSourceIntegrates()
}
const handleSync = async () => {
await syncDataSourceNotion({ url: `/oauth/data-source/notion/${payload.id}/sync` })