Commit 62a5a1ea authored by StyleZhang's avatar StyleZhang

fix: setting page data source sync and remove notion connection

parent ed5b80e9
...@@ -2,11 +2,14 @@ ...@@ -2,11 +2,14 @@
import { useTranslation } from 'react-i18next' import { useTranslation } from 'react-i18next'
import { Fragment } from 'react' import { Fragment } from 'react'
import Link from 'next/link' import Link from 'next/link'
import { useSWRConfig } from 'swr'
import { EllipsisHorizontalIcon } from '@heroicons/react/24/solid' import { EllipsisHorizontalIcon } from '@heroicons/react/24/solid'
import { Menu, Transition } from '@headlessui/react' import { Menu, Transition } from '@headlessui/react'
import cn from 'classnames' import cn from 'classnames'
import s from './index.module.css' import s from './index.module.css'
import { apiPrefix } from '@/config' import { apiPrefix } from '@/config'
import { syncDataSourceNotion, updateDataSourceNotionAction } from '@/service/common'
import Toast from '@/app/components/base/toast'
import type { DataSourceNotion } from '@/models/common' import type { DataSourceNotion } from '@/models/common'
type OperateProps = { type OperateProps = {
...@@ -23,6 +26,23 @@ export default function Operate({ ...@@ -23,6 +26,23 @@ export default function Operate({
mr-2 mt-[2px] w-4 h-4 mr-2 mt-[2px] w-4 h-4
` `
const { t } = useTranslation() const { t } = useTranslation()
const { mutate } = useSWRConfig()
const updateIntegrates = () => {
Toast.notify({
type: 'success',
message: t('common.api.success'),
})
mutate({ url: 'data-source/integrates' })
}
const handleSync = async () => {
await syncDataSourceNotion({ url: `/oauth/data-source/notion/${workspace.id}/sync` })
updateIntegrates()
}
const handleRemove = async () => {
await updateDataSourceNotionAction({ url: `/data-source/integrates/${workspace.id}/disable` })
updateIntegrates()
}
return ( return (
<Menu as="div" className="relative inline-block text-left"> <Menu as="div" className="relative inline-block text-left">
...@@ -63,7 +83,7 @@ export default function Operate({ ...@@ -63,7 +83,7 @@ export default function Operate({
</Link> </Link>
</Menu.Item> </Menu.Item>
<Menu.Item> <Menu.Item>
<div className={itemClassName}> <div className={itemClassName} onClick={handleSync}>
<div className={cn(s['sync-icon'], itemIconClassName)} /> <div className={cn(s['sync-icon'], itemIconClassName)} />
<div className='leading-5'>{t('common.dataSource.notion.sync')}</div> <div className='leading-5'>{t('common.dataSource.notion.sync')}</div>
</div> </div>
...@@ -71,7 +91,7 @@ export default function Operate({ ...@@ -71,7 +91,7 @@ export default function Operate({
</div> </div>
<Menu.Item> <Menu.Item>
<div className='p-1'> <div className='p-1'>
<div className={itemClassName}> <div className={itemClassName} onClick={handleRemove}>
<div className={cn(s['trash-icon'], itemIconClassName)} /> <div className={cn(s['trash-icon'], itemIconClassName)} />
<div className='leading-5'>{t('common.dataSource.notion.remove')}</div> <div className='leading-5'>{t('common.dataSource.notion.remove')}</div>
</div> </div>
......
...@@ -187,6 +187,12 @@ const translation = { ...@@ -187,6 +187,12 @@ const translation = {
pagesAuthorized: 'Pages authorized', pagesAuthorized: 'Pages authorized',
sync: 'Sync', sync: 'Sync',
remove: 'Remove', remove: 'Remove',
selector: {
pageSelected: 'Pages Selected',
searchPages: 'Search pages...',
noSerachResult: 'No search resluts',
addPages: 'Add pages',
},
}, },
}, },
about: { about: {
......
import type { Fetcher } from 'swr' import type { Fetcher } from 'swr'
import { del, get, post, put } from './base' import { del, get, patch, post, put } from './base'
import type { import type {
AccountIntegrate, CommonResponse, DataSourceNotion, AccountIntegrate, CommonResponse, DataSourceNotion,
IWorkspace, LangGeniusVersionResponse, Member, IWorkspace, LangGeniusVersionResponse, Member,
...@@ -93,3 +93,11 @@ export const switchWorkspace: Fetcher<CommonResponse & { new_tenant: IWorkspace ...@@ -93,3 +93,11 @@ export const switchWorkspace: Fetcher<CommonResponse & { new_tenant: IWorkspace
export const fetchDataSource: Fetcher<{ data: DataSourceNotion[] }, { url: string; params: Record<string, any> }> = ({ url, params }) => { export const fetchDataSource: Fetcher<{ data: DataSourceNotion[] }, { url: string; params: Record<string, any> }> = ({ url, params }) => {
return get(url, { params }) as Promise<{ data: DataSourceNotion[] }> return get(url, { params }) as Promise<{ data: DataSourceNotion[] }>
} }
export const syncDataSourceNotion: Fetcher<CommonResponse, { url: string }> = ({ url }) => {
return get(url) as Promise<CommonResponse>
}
export const updateDataSourceNotionAction: Fetcher<CommonResponse, { url: string }> = ({ url }) => {
return patch(url) as Promise<CommonResponse>
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment