Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
D
dify
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
ai-tech
dify
Commits
f9bec1ed
Unverified
Commit
f9bec1ed
authored
Aug 28, 2023
by
bowen
Committed by
GitHub
Aug 28, 2023
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
chore: perfect type definition (#1003)
parent
16199e96
Changes
35
Hide whitespace changes
Inline
Side-by-side
Showing
35 changed files
with
122 additions
and
104 deletions
+122
-104
AppCard.tsx
web/app/(commonLayout)/apps/AppCard.tsx
+4
-3
layout.tsx
...ut)/datasets/(datasetDetailLayout)/[datasetId]/layout.tsx
+4
-4
index.tsx
web/app/components/app-sidebar/index.tsx
+5
-4
navLink.tsx
web/app/components/app-sidebar/navLink.tsx
+18
-5
index.tsx
web/app/components/app/chat/icon-component/index.tsx
+4
-4
index.tsx
web/app/components/app/configuration/config-var/index.tsx
+4
-3
input-type-icon.tsx
...mponents/app/configuration/config-var/input-type-icon.tsx
+1
-1
index.tsx
web/app/components/app/log/index.tsx
+2
-2
list.tsx
web/app/components/app/log/list.tsx
+2
-2
appCard.tsx
web/app/components/app/overview/appCard.tsx
+2
-2
index.tsx
web/app/components/base/emoji-picker/index.tsx
+8
-7
index.tsx
web/app/components/base/input/index.tsx
+5
-5
index.tsx
web/app/components/base/notion-icon/index.tsx
+1
-1
base.tsx
web/app/components/base/notion-page-selector/base.tsx
+3
-4
index.tsx
web/app/components/base/radio/component/radio/index.tsx
+1
-1
index.tsx
...pp/components/datasets/create/embedding-process/index.tsx
+6
-5
index.tsx
web/app/components/datasets/create/file-uploader/index.tsx
+1
-1
index.tsx
web/app/components/datasets/create/index.tsx
+3
-5
index.tsx
.../components/datasets/create/notion-page-preview/index.tsx
+2
-3
index.tsx
web/app/components/datasets/create/step-one/index.tsx
+3
-5
index.tsx
web/app/components/datasets/create/step-two/index.tsx
+6
-8
InfiniteVirtualList.tsx
...tasets/documents/detail/completed/InfiniteVirtualList.tsx
+1
-1
SegmentCard.tsx
...nents/datasets/documents/detail/completed/SegmentCard.tsx
+1
-1
index.tsx
.../components/datasets/documents/detail/completed/index.tsx
+2
-2
index.tsx
.../components/datasets/documents/detail/embedding/index.tsx
+3
-3
index.tsx
web/app/components/datasets/documents/index.tsx
+5
-5
list.tsx
web/app/components/datasets/documents/list.tsx
+5
-5
hit-detail.tsx
web/app/components/datasets/hit-testing/hit-detail.tsx
+1
-1
index.tsx
web/app/components/explore/app-list/index.tsx
+4
-3
category.tsx
web/app/components/explore/category.tsx
+4
-3
index.tsx
web/app/components/header/account-setting/index.tsx
+2
-2
Card.tsx
...nts/header/account-setting/model-page/model-item/Card.tsx
+1
-1
index.tsx
web/app/components/share/text-generation/result/index.tsx
+1
-1
common.ts
web/models/common.ts
+4
-0
explore.ts
web/models/explore.ts
+3
-1
No files found.
web/app/(commonLayout)/apps/AppCard.tsx
View file @
f9bec1ed
...
...
@@ -9,6 +9,7 @@ import style from '../list.module.css'
import
AppModeLabel
from
'./AppModeLabel'
import
s
from
'./style.module.css'
import
SettingsModal
from
'@/app/components/app/overview/settings'
import
type
{
ConfigParams
}
from
'@/app/components/app/overview/settings'
import
type
{
App
}
from
'@/types/app'
import
Confirm
from
'@/app/components/base/confirm'
import
{
ToastContext
}
from
'@/app/components/base/toast'
...
...
@@ -73,7 +74,7 @@ const AppCard = ({ app, onRefresh }: AppCardProps) => {
}
const
onSaveSiteConfig
=
useCallback
(
async
(
params
:
any
)
=>
{
async
(
params
:
ConfigParams
)
=>
{
const
[
err
]
=
await
asyncRunSafe
<
App
>
(
updateAppSiteConfig
({
url
:
`/apps/
${
app
.
id
}
/site`
,
...
...
@@ -100,12 +101,12 @@ const AppCard = ({ app, onRefresh }: AppCardProps) => {
)
const
Operations
=
(
props
:
any
)
=>
{
const
onClickSettings
=
async
(
e
:
any
)
=>
{
const
onClickSettings
=
async
(
e
:
React
.
MouseEvent
<
HTMLButtonElement
>
)
=>
{
props
?.
onClose
()
e
.
preventDefault
()
await
getAppDetail
()
}
const
onClickDelete
=
async
(
e
:
any
)
=>
{
const
onClickDelete
=
async
(
e
:
React
.
MouseEvent
<
HTMLDivElement
>
)
=>
{
props
?.
onClose
()
e
.
preventDefault
()
setShowConfirmDelete
(
true
)
...
...
web/app/(commonLayout)/datasets/(datasetDetailLayout)/[datasetId]/layout.tsx
View file @
f9bec1ed
'use client'
import
type
{
FC
}
from
'react'
import
type
{
FC
,
SVGProps
}
from
'react'
import
React
,
{
useEffect
}
from
'react'
import
{
usePathname
}
from
'next/navigation'
import
useSWR
from
'swr'
...
...
@@ -57,7 +57,7 @@ const LikedItem: FC<{ type?: 'plugin' | 'app'; appStatus?: boolean; detail: Rela
)
}
const
TargetIcon
:
FC
<
{
className
?:
string
}
>
=
({
className
}
)
=>
{
const
TargetIcon
=
({
className
}:
SVGProps
<
SVGElement
>
)
=>
{
return
<
svg
width=
"16"
height=
"16"
viewBox=
"0 0 16 16"
fill=
"none"
xmlns=
"http://www.w3.org/2000/svg"
className=
{
className
??
''
}
>
<
g
clip
-
path=
"url(#clip0_4610_6951)"
>
<
path
d=
"M10.6666 5.33325V3.33325L12.6666 1.33325L13.3332 2.66659L14.6666 3.33325L12.6666 5.33325H10.6666ZM10.6666 5.33325L7.9999 7.99988M14.6666 7.99992C14.6666 11.6818 11.6818 14.6666 7.99992 14.6666C4.31802 14.6666 1.33325 11.6818 1.33325 7.99992C1.33325 4.31802 4.31802 1.33325 7.99992 1.33325M11.3333 7.99992C11.3333 9.84087 9.84087 11.3333 7.99992 11.3333C6.15897 11.3333 4.66659 9.84087 4.66659 7.99992C4.66659 6.15897 6.15897 4.66659 7.99992 4.66659"
stroke=
"#344054"
strokeWidth=
"1.25"
strokeLinecap=
"round"
strokeLinejoin=
"round"
/>
...
...
@@ -70,7 +70,7 @@ const TargetIcon: FC<{ className?: string }> = ({ className }) => {
</
svg
>
}
const
TargetSolidIcon
:
FC
<
{
className
?:
string
}
>
=
({
className
}
)
=>
{
const
TargetSolidIcon
=
({
className
}:
SVGProps
<
SVGElement
>
)
=>
{
return
<
svg
width=
"16"
height=
"16"
viewBox=
"0 0 16 16"
fill=
"none"
xmlns=
"http://www.w3.org/2000/svg"
className=
{
className
??
''
}
>
<
path
fillRule=
"evenodd"
clipRule=
"evenodd"
d=
"M12.7733 0.67512C12.9848 0.709447 13.1669 0.843364 13.2627 1.03504L13.83 2.16961L14.9646 2.73689C15.1563 2.83273 15.2902 3.01486 15.3245 3.22639C15.3588 3.43792 15.2894 3.65305 15.1379 3.80458L13.1379 5.80458C13.0128 5.92961 12.8433 5.99985 12.6665 5.99985H10.9426L8.47124 8.47124C8.21089 8.73159 7.78878 8.73159 7.52843 8.47124C7.26808 8.21089 7.26808 7.78878 7.52843 7.52843L9.9998 5.05707V3.33318C9.9998 3.15637 10.07 2.9868 10.1951 2.86177L12.1951 0.861774C12.3466 0.710244 12.5617 0.640794 12.7733 0.67512Z"
fill=
"#155EEF"
/>
<
path
d=
"M1.99984 7.99984C1.99984 4.68613 4.68613 1.99984 7.99984 1.99984C8.36803 1.99984 8.6665 1.70136 8.6665 1.33317C8.6665 0.964981 8.36803 0.666504 7.99984 0.666504C3.94975 0.666504 0.666504 3.94975 0.666504 7.99984C0.666504 12.0499 3.94975 15.3332 7.99984 15.3332C12.0499 15.3332 15.3332 12.0499 15.3332 7.99984C15.3332 7.63165 15.0347 7.33317 14.6665 7.33317C14.2983 7.33317 13.9998 7.63165 13.9998 7.99984C13.9998 11.3135 11.3135 13.9998 7.99984 13.9998C4.68613 13.9998 1.99984 11.3135 1.99984 7.99984Z"
fill=
"#155EEF"
/>
...
...
@@ -78,7 +78,7 @@ const TargetSolidIcon: FC<{ className?: string }> = ({ className }) => {
</
svg
>
}
const
BookOpenIcon
:
FC
<
{
className
?:
string
}
>
=
({
className
}
)
=>
{
const
BookOpenIcon
=
({
className
}:
SVGProps
<
SVGElement
>
)
=>
{
return
<
svg
width=
"12"
height=
"12"
viewBox=
"0 0 12 12"
fill=
"none"
xmlns=
"http://www.w3.org/2000/svg"
className=
{
className
??
''
}
>
<
path
opacity=
"0.12"
d=
"M1 3.1C1 2.53995 1 2.25992 1.10899 2.04601C1.20487 1.85785 1.35785 1.70487 1.54601 1.60899C1.75992 1.5 2.03995 1.5 2.6 1.5H2.8C3.9201 1.5 4.48016 1.5 4.90798 1.71799C5.28431 1.90973 5.59027 2.21569 5.78201 2.59202C6 3.01984 6 3.5799 6 4.7V10.5L5.94997 10.425C5.60265 9.90398 5.42899 9.64349 5.19955 9.45491C4.99643 9.28796 4.76238 9.1627 4.5108 9.0863C4.22663 9 3.91355 9 3.28741 9H2.6C2.03995 9 1.75992 9 1.54601 8.89101C1.35785 8.79513 1.20487 8.64215 1.10899 8.45399C1 8.24008 1 7.96005 1 7.4V3.1Z"
fill=
"#155EEF"
/>
<
path
d=
"M6 10.5L5.94997 10.425C5.60265 9.90398 5.42899 9.64349 5.19955 9.45491C4.99643 9.28796 4.76238 9.1627 4.5108 9.0863C4.22663 9 3.91355 9 3.28741 9H2.6C2.03995 9 1.75992 9 1.54601 8.89101C1.35785 8.79513 1.20487 8.64215 1.10899 8.45399C1 8.24008 1 7.96005 1 7.4V3.1C1 2.53995 1 2.25992 1.10899 2.04601C1.20487 1.85785 1.35785 1.70487 1.54601 1.60899C1.75992 1.5 2.03995 1.5 2.6 1.5H2.8C3.9201 1.5 4.48016 1.5 4.90798 1.71799C5.28431 1.90973 5.59027 2.21569 5.78201 2.59202C6 3.01984 6 3.5799 6 4.7M6 10.5V4.7M6 10.5L6.05003 10.425C6.39735 9.90398 6.57101 9.64349 6.80045 9.45491C7.00357 9.28796 7.23762 9.1627 7.4892 9.0863C7.77337 9 8.08645 9 8.71259 9H9.4C9.96005 9 10.2401 9 10.454 8.89101C10.6422 8.79513 10.7951 8.64215 10.891 8.45399C11 8.24008 11 7.96005 11 7.4V3.1C11 2.53995 11 2.25992 10.891 2.04601C10.7951 1.85785 10.6422 1.70487 10.454 1.60899C10.2401 1.5 9.96005 1.5 9.4 1.5H9.2C8.07989 1.5 7.51984 1.5 7.09202 1.71799C6.71569 1.90973 6.40973 2.21569 6.21799 2.59202C6 3.01984 6 3.5799 6 4.7"
stroke=
"#155EEF"
strokeLinecap=
"round"
strokeLinejoin=
"round"
/>
...
...
web/app/components/app-sidebar/index.tsx
View file @
f9bec1ed
import
React
from
'react'
import
type
{
FC
}
from
'react'
import
NavLink
from
'./navLink'
import
AppBasic
from
'./basic'
import
type
{
NavIcon
}
from
'./navLink'
export
type
IAppDetailNavProps
=
{
iconType
?:
'app'
|
'dataset'
|
'notion'
title
:
string
...
...
@@ -12,13 +13,13 @@ export type IAppDetailNavProps = {
navigation
:
Array
<
{
name
:
string
href
:
string
icon
:
any
selectedIcon
:
any
icon
:
NavIcon
selectedIcon
:
NavIcon
}
>
extraInfo
?:
React
.
ReactNode
}
const
AppDetailNav
:
FC
<
IAppDetailNavProps
>
=
({
title
,
desc
,
icon
,
icon_background
,
navigation
,
extraInfo
,
iconType
=
'app'
}
)
=>
{
const
AppDetailNav
=
({
title
,
desc
,
icon
,
icon_background
,
navigation
,
extraInfo
,
iconType
=
'app'
}:
IAppDetailNavProps
)
=>
{
return
(
<
div
className=
"flex flex-col w-56 overflow-y-auto bg-white border-r border-gray-200 shrink-0"
>
<
div
className=
"flex flex-shrink-0 p-4"
>
...
...
web/app/components/app-sidebar/navLink.tsx
View file @
f9bec1ed
'use client'
import
{
useSelectedLayoutSegment
}
from
'next/navigation'
import
classNames
from
'classnames'
import
Link
from
'next/link'
export
type
NavIcon
=
React
.
ComponentType
<
React
.
PropsWithoutRef
<
React
.
ComponentProps
<
'svg'
>>
&
{
title
?:
string
|
undefined
titleId
?:
string
|
undefined
}
>
export
type
NavLinkProps
=
{
name
:
string
href
:
string
iconMap
:
{
selected
:
NavIcon
normal
:
NavIcon
}
}
export
default
function
NavLink
({
name
,
href
,
iconMap
,
}:
{
name
:
string
href
:
string
iconMap
:
{
selected
:
any
;
normal
:
any
}
})
{
}:
NavLinkProps
)
{
const
segment
=
useSelectedLayoutSegment
()
const
isActive
=
href
.
toLowerCase
().
split
(
'/'
)?.
pop
()
===
segment
?.
toLowerCase
()
const
NavIcon
=
isActive
?
iconMap
.
selected
:
iconMap
.
normal
...
...
web/app/components/app/chat/icon-component/index.tsx
View file @
f9bec1ed
import
type
{
FC
}
from
'react'
import
type
{
FC
,
SVGProps
}
from
'react'
import
{
HandThumbDownIcon
,
HandThumbUpIcon
}
from
'@heroicons/react/24/outline'
export
const
stopIcon
=
(
...
...
@@ -7,7 +7,7 @@ export const stopIcon = (
</
svg
>
)
export
const
OpeningStatementIcon
:
FC
<
{
className
?:
string
}
>
=
({
className
}
)
=>
(
export
const
OpeningStatementIcon
=
({
className
}:
SVGProps
<
SVGElement
>
)
=>
(
<
svg
className=
{
className
}
width=
"12"
height=
"12"
viewBox=
"0 0 12 12"
fill=
"none"
xmlns=
"http://www.w3.org/2000/svg"
>
<
path
fillRule=
"evenodd"
clipRule=
"evenodd"
d=
"M6.25002 1C3.62667 1 1.50002 3.12665 1.50002 5.75C1.50002 6.28 1.58702 6.79071 1.7479 7.26801C1.7762 7.35196 1.79285 7.40164 1.80368 7.43828L1.80722 7.45061L1.80535 7.45452C1.79249 7.48102 1.77339 7.51661 1.73766 7.58274L0.911727 9.11152C0.860537 9.20622 0.807123 9.30503 0.770392 9.39095C0.733879 9.47635 0.674738 9.63304 0.703838 9.81878C0.737949 10.0365 0.866092 10.2282 1.05423 10.343C1.21474 10.4409 1.38213 10.4461 1.475 10.4451C1.56844 10.444 1.68015 10.4324 1.78723 10.4213L4.36472 10.1549C4.406 10.1506 4.42758 10.1484 4.44339 10.1472L4.44542 10.147L4.45161 10.1492C4.47103 10.1562 4.49738 10.1663 4.54285 10.1838C5.07332 10.3882 5.64921 10.5 6.25002 10.5C8.87338 10.5 11 8.37335 11 5.75C11 3.12665 8.87338 1 6.25002 1ZM4.48481 4.29111C5.04844 3.81548 5.7986 3.9552 6.24846 4.47463C6.69831 3.9552 7.43879 3.82048 8.01211 4.29111C8.58544 4.76175 8.6551 5.562 8.21247 6.12453C7.93825 6.47305 7.24997 7.10957 6.76594 7.54348C6.58814 7.70286 6.49924 7.78255 6.39255 7.81466C6.30103 7.84221 6.19589 7.84221 6.10436 7.81466C5.99767 7.78255 5.90878 7.70286 5.73098 7.54348C5.24694 7.10957 4.55867 6.47305 4.28444 6.12453C3.84182 5.562 3.92117 4.76675 4.48481 4.29111Z"
fill=
"#667085"
/>
</
svg
>
...
...
@@ -17,13 +17,13 @@ export const RatingIcon: FC<{ isLike: boolean }> = ({ isLike }) => {
return
isLike
?
<
HandThumbUpIcon
className=
'w-4 h-4'
/>
:
<
HandThumbDownIcon
className=
'w-4 h-4'
/>
}
export
const
EditIcon
:
FC
<
{
className
?:
string
}
>
=
({
className
}
)
=>
{
export
const
EditIcon
=
({
className
}:
SVGProps
<
SVGElement
>
)
=>
{
return
<
svg
width=
"16"
height=
"16"
viewBox=
"0 0 16 16"
fill=
"none"
xmlns=
"http://www.w3.org/2000/svg"
className=
{
className
}
>
<
path
d=
"M14 11.9998L13.3332 12.7292C12.9796 13.1159 12.5001 13.3332 12.0001 13.3332C11.5001 13.3332 11.0205 13.1159 10.6669 12.7292C10.3128 12.3432 9.83332 12.1265 9.33345 12.1265C8.83359 12.1265 8.35409 12.3432 7.99998 12.7292M2 13.3332H3.11636C3.44248 13.3332 3.60554 13.3332 3.75899 13.2963C3.89504 13.2637 4.0251 13.2098 4.1444 13.1367C4.27895 13.0542 4.39425 12.9389 4.62486 12.7083L13 4.33316C13.5523 3.78087 13.5523 2.88544 13 2.33316C12.4477 1.78087 11.5523 1.78087 11 2.33316L2.62484 10.7083C2.39424 10.9389 2.27894 11.0542 2.19648 11.1888C2.12338 11.3081 2.0695 11.4381 2.03684 11.5742C2 11.7276 2 11.8907 2 12.2168V13.3332Z"
stroke=
"#6B7280"
strokeLinecap=
"round"
strokeLinejoin=
"round"
/>
</
svg
>
}
export
const
EditIconSolid
:
FC
<
{
className
?:
string
}
>
=
({
className
}
)
=>
{
export
const
EditIconSolid
=
({
className
}:
SVGProps
<
SVGElement
>
)
=>
{
return
<
svg
width=
"12"
height=
"12"
viewBox=
"0 0 12 12"
fill=
"none"
xmlns=
"http://www.w3.org/2000/svg"
className=
{
className
}
>
<
path
fillRule=
"evenodd"
clipRule=
"evenodd"
d=
"M10.8374 8.63108C11.0412 8.81739 11.0554 9.13366 10.8691 9.33747L10.369 9.88449C10.0142 10.2725 9.52293 10.5001 9.00011 10.5001C8.47746 10.5001 7.98634 10.2727 7.63157 9.8849C7.45561 9.69325 7.22747 9.59515 7.00014 9.59515C6.77271 9.59515 6.54446 9.69335 6.36846 9.88517C6.18177 10.0886 5.86548 10.1023 5.66201 9.91556C5.45853 9.72888 5.44493 9.41259 5.63161 9.20911C5.98678 8.82201 6.47777 8.59515 7.00014 8.59515C7.52251 8.59515 8.0135 8.82201 8.36867 9.20911L8.36924 9.20974C8.54486 9.4018 8.77291 9.50012 9.00011 9.50012C9.2273 9.50012 9.45533 9.40182 9.63095 9.20979L10.131 8.66276C10.3173 8.45895 10.6336 8.44476 10.8374 8.63108Z"
fill=
"#6B7280"
/>
<
path
fillRule=
"evenodd"
clipRule=
"evenodd"
d=
"M7.89651 1.39656C8.50599 0.787085 9.49414 0.787084 10.1036 1.39656C10.7131 2.00604 10.7131 2.99419 10.1036 3.60367L3.82225 9.88504C3.81235 9.89494 3.80254 9.90476 3.79281 9.91451C3.64909 10.0585 3.52237 10.1855 3.3696 10.2791C3.23539 10.3613 3.08907 10.4219 2.93602 10.4587C2.7618 10.5005 2.58242 10.5003 2.37897 10.5001C2.3652 10.5001 2.35132 10.5001 2.33732 10.5001H1.50005C1.22391 10.5001 1.00005 10.2763 1.00005 10.0001V9.16286C1.00005 9.14886 1.00004 9.13497 1.00003 9.1212C0.999836 8.91776 0.999669 8.73838 1.0415 8.56416C1.07824 8.4111 1.13885 8.26479 1.22109 8.13058C1.31471 7.97781 1.44166 7.85109 1.58566 7.70736C1.5954 7.69764 1.60523 7.68783 1.61513 7.67793L7.89651 1.39656Z"
fill=
"#6B7280"
/>
...
...
web/app/components/app/configuration/config-var/index.tsx
View file @
f9bec1ed
...
...
@@ -10,6 +10,7 @@ import OperationBtn from '../base/operation-btn'
import
VarIcon
from
'../base/icons/var-icon'
import
EditModel
from
'./config-model'
import
IconTypeIcon
from
'./input-type-icon'
import
type
{
IInputTypeIconProps
}
from
'./input-type-icon'
import
s
from
'./style.module.css'
import
Tooltip
from
'@/app/components/base/tooltip'
import
type
{
PromptVariable
}
from
'@/models/debug'
...
...
@@ -37,8 +38,8 @@ const ConfigVar: FC<IConfigVarProps> = ({ promptVariables, readonly, onPromptVar
return
obj
})()
const
updatePromptVariable
=
(
key
:
string
,
updateKey
:
string
,
newValue
:
any
)
=>
{
const
newPromptVariables
=
promptVariables
.
map
((
item
,
i
)
=>
{
const
updatePromptVariable
=
(
key
:
string
,
updateKey
:
string
,
newValue
:
string
|
boolean
)
=>
{
const
newPromptVariables
=
promptVariables
.
map
((
item
)
=>
{
if
(
item
.
key
===
key
)
{
return
{
...
item
,
...
...
@@ -179,7 +180,7 @@ const ConfigVar: FC<IConfigVarProps> = ({ promptVariables, readonly, onPromptVar
<
tr
key=
{
index
}
className=
"h-9 leading-9"
>
<
td
className=
"w-[160px] border-b border-gray-100 pl-3"
>
<
div
className=
'flex items-center space-x-1'
>
<
IconTypeIcon
type=
{
type
}
/>
<
IconTypeIcon
type=
{
type
as
IInputTypeIconProps
[
'type'
]
}
/>
{
!
readonly
?
(
<
input
...
...
web/app/components/app/configuration/config-var/input-type-icon.tsx
View file @
f9bec1ed
...
...
@@ -2,7 +2,7 @@
import
React
from
'react'
import
type
{
FC
}
from
'react'
type
IInputTypeIconProps
=
{
export
type
IInputTypeIconProps
=
{
type
:
'string'
|
'select'
}
...
...
web/app/components/app/log/index.tsx
View file @
f9bec1ed
'use client'
import
type
{
FC
}
from
'react'
import
type
{
FC
,
SVGProps
}
from
'react'
import
React
,
{
useState
}
from
'react'
import
useSWR
from
'swr'
import
{
usePathname
}
from
'next/navigation'
...
...
@@ -29,7 +29,7 @@ export type QueryParam = {
// Custom page count is not currently supported.
const
limit
=
10
const
ThreeDotsIcon
:
FC
<
{
className
?:
string
}
>
=
({
className
}
)
=>
{
const
ThreeDotsIcon
=
({
className
}:
SVGProps
<
SVGElement
>
)
=>
{
return
<
svg
width=
"16"
height=
"16"
viewBox=
"0 0 16 16"
fill=
"none"
xmlns=
"http://www.w3.org/2000/svg"
className=
{
className
??
''
}
>
<
path
d=
"M5 6.5V5M8.93934 7.56066L10 6.5M10.0103 11.5H11.5103"
stroke=
"#374151"
strokeWidth=
"2"
strokeLinecap=
"round"
strokeLinejoin=
"round"
/>
</
svg
>
...
...
web/app/components/app/log/list.tsx
View file @
f9bec1ed
'use client'
import
type
{
FC
}
from
'react'
import
type
{
FC
,
SVGProps
}
from
'react'
import
React
,
{
useEffect
,
useState
}
from
'react'
// import type { Log } from '@/models/log'
import
useSWR
from
'swr'
...
...
@@ -47,7 +47,7 @@ type IDrawerContext = {
const
DrawerContext
=
createContext
<
IDrawerContext
>
({}
as
IDrawerContext
)
export
const
OpenAIIcon
:
FC
<
{
className
?:
string
}
>
=
({
className
}
)
=>
{
export
const
OpenAIIcon
=
({
className
}:
SVGProps
<
SVGElement
>
)
=>
{
return
<
svg
width=
"16"
height=
"16"
viewBox=
"0 0 16 16"
fill=
"none"
xmlns=
"http://www.w3.org/2000/svg"
className=
{
className
??
''
}
>
<
rect
width=
"16"
height=
"16"
rx=
"6"
fill=
"black"
/>
<
path
d=
"M13.6553 7.70613C13.7853 7.99625 13.8678 8.30638 13.9016 8.62276C13.9341 8.93913 13.9179 9.25927 13.8503 9.57064C13.7841 9.88202 13.669 10.1809 13.5089 10.456C13.4039 10.6398 13.2801 10.8124 13.1375 10.9712C12.9962 11.1288 12.8387 11.2713 12.6673 11.3964C12.4948 11.5214 12.311 11.6265 12.1159 11.7128C11.922 11.7978 11.7195 11.8628 11.5119 11.9053C11.4143 12.208 11.2693 12.4943 11.0817 12.7519C10.8954 13.0095 10.669 13.2359 10.4114 13.4222C10.1538 13.6098 9.86871 13.7549 9.56608 13.8524C9.26346 13.9512 8.94708 14 8.6282 14C8.41686 14.0012 8.20428 13.9787 7.99669 13.9362C7.79036 13.8924 7.58778 13.8261 7.39395 13.7398C7.20012 13.6536 7.01629 13.546 6.84497 13.421C6.6749 13.2959 6.51734 13.1521 6.37728 12.9933C6.06465 13.0608 5.74452 13.0771 5.42814 13.0446C5.11177 13.0108 4.80164 12.9283 4.51027 12.7982C4.22015 12.6694 3.95129 12.4943 3.71495 12.2805C3.4786 12.0667 3.27727 11.8166 3.11845 11.5414C3.01216 11.3576 2.92462 11.1638 2.85835 10.9625C2.79207 10.7611 2.7483 10.5535 2.72579 10.3422C2.70328 10.1321 2.70453 9.91954 2.72704 9.7082C2.74955 9.49811 2.79582 9.29053 2.8621 9.0892C2.64951 8.85285 2.47444 8.58399 2.34439 8.29387C2.21558 8.0025 2.1318 7.69363 2.09929 7.37725C2.06552 7.06087 2.08303 6.74074 2.14931 6.42936C2.21558 6.11798 2.33063 5.81911 2.4907 5.544C2.59574 5.36017 2.71954 5.18635 2.86085 5.02879C3.00215 4.87122 3.16097 4.72867 3.33229 4.60361C3.50361 4.47856 3.68868 4.37227 3.88251 4.28724C4.07759 4.20095 4.28018 4.13717 4.48776 4.09466C4.5853 3.79078 4.73036 3.50567 4.91669 3.24806C5.10426 2.99046 5.33061 2.76411 5.58821 2.57654C5.84582 2.39021 6.13093 2.24515 6.43356 2.14636C6.73618 2.04882 7.05256 1.9988 7.37144 2.00005C7.58277 1.9988 7.79536 2.02006 8.00295 2.06383C8.21053 2.1076 8.41311 2.17262 8.60694 2.25891C8.80077 2.34644 8.9846 2.45274 9.15592 2.57779C9.32724 2.70409 9.4848 2.84665 9.62486 3.00546C9.93623 2.93919 10.2564 2.92293 10.5727 2.95544C10.8891 2.98796 11.198 3.07174 11.4894 3.20054C11.7795 3.3306 12.0483 3.50442 12.2847 3.71825C12.521 3.93084 12.7224 4.17969 12.8812 4.45605C12.9875 4.63863 13.075 4.83246 13.1413 5.03504C13.2076 5.23637 13.2526 5.44396 13.2738 5.65529C13.2964 5.86663 13.2964 6.07922 13.2726 6.29055C13.2501 6.50189 13.2038 6.70948 13.1375 6.91081C13.3514 7.14715 13.5252 7.41476 13.6553 7.70613ZM9.48855 13.0446C9.76116 12.932 10.0088 12.7657 10.2176 12.5569C10.4264 12.348 10.5928 12.1004 10.7053 11.8266C10.8178 11.554 10.8766 11.2613 10.8766 10.9662V8.17757C10.8758 8.17507 10.875 8.17215 10.8741 8.16882C10.8733 8.16632 10.872 8.16382 10.8704 8.16132C10.8687 8.15882 10.8666 8.15673 10.8641 8.15507C10.8616 8.15256 10.8591 8.1509 10.8566 8.15006L9.84745 7.56733V10.9362C9.84745 10.97 9.84245 11.005 9.83369 11.0375C9.82494 11.0713 9.81243 11.1025 9.79493 11.1325C9.77742 11.1625 9.75741 11.1901 9.7324 11.2138C9.70809 11.238 9.68077 11.2591 9.65112 11.2763L7.26139 12.6557C7.24138 12.6682 7.20762 12.6857 7.19011 12.6957C7.2889 12.7795 7.39645 12.8532 7.50899 12.9183C7.62279 12.9833 7.74034 13.0383 7.86289 13.0833C7.98544 13.1271 8.11174 13.1609 8.23929 13.1834C8.36809 13.2059 8.49815 13.2171 8.6282 13.2171C8.92332 13.2171 9.21594 13.1584 9.48855 13.0446ZM3.79748 11.1513C3.94629 11.4076 4.14262 11.6302 4.37647 11.8103C4.61156 11.9904 4.87792 12.1217 5.16304 12.198C5.44815 12.2742 5.74577 12.2943 6.03839 12.2555C6.33101 12.2167 6.61238 12.1217 6.86873 11.9741L9.28472 10.5798L9.29097 10.5736C9.29264 10.5719 9.29389 10.5694 9.29472 10.566C9.29639 10.5635 9.29764 10.561 9.29847 10.5585V9.38307L6.38228 11.07C6.35227 11.0875 6.32101 11.1 6.2885 11.11C6.25473 11.1188 6.22097 11.1225 6.18595 11.1225C6.15219 11.1225 6.11843 11.1188 6.08466 11.11C6.05215 11.1 6.01964 11.0875 5.98962 11.07L3.5999 9.68944C3.57864 9.67694 3.54738 9.65818 3.52987 9.64692C3.50736 9.77573 3.49611 9.90578 3.49611 10.0358C3.49611 10.1659 3.50861 10.2959 3.53112 10.4247C3.55363 10.5523 3.58864 10.6786 3.63241 10.8011C3.67743 10.9237 3.73245 11.0412 3.79748 11.1538V11.1513ZM3.16972 5.93666C3.02216 6.19301 2.92712 6.47563 2.88836 6.76825C2.84959 7.06087 2.8696 7.35724 2.94588 7.64361C3.02216 7.92872 3.15347 8.19508 3.33354 8.43018C3.51361 8.66402 3.73745 8.86035 3.99256 9.00791L6.40729 10.4035C6.4098 10.4043 6.41271 10.4051 6.41605 10.406H6.4248C6.42814 10.406 6.43105 10.4051 6.43356 10.4035C6.43606 10.4026 6.43856 10.4014 6.44106 10.3997L7.45397 9.81449L4.53778 8.13131C4.50902 8.1138 4.48151 8.09254 4.4565 8.06878C4.43227 8.04447 4.41125 8.01715 4.39397 7.9875C4.37772 7.95748 4.36396 7.92622 4.35521 7.89246C4.34645 7.85994 4.34145 7.82618 4.3427 7.79117V4.95126C4.22015 4.99628 4.10135 5.0513 3.98881 5.11632C3.87626 5.1826 3.76997 5.25763 3.66993 5.34142C3.57114 5.4252 3.4786 5.51774 3.39481 5.61778C3.31103 5.71657 3.23725 5.82411 3.17222 5.93666H3.16972ZM11.4644 7.86745C11.4944 7.88495 11.5219 7.90496 11.5469 7.92997C11.5707 7.95373 11.5919 7.98124 11.6094 8.01126C11.6257 8.04127 11.6394 8.07378 11.6482 8.10629C11.6557 8.14006 11.6607 8.17382 11.6594 8.20884V11.0487C12.0609 10.9012 12.411 10.6423 12.6699 10.3022C12.93 9.96205 13.0863 9.55564 13.1225 9.13046C13.1588 8.70529 13.0738 8.27762 12.8762 7.89871C12.6786 7.51981 12.3772 7.20468 12.0071 6.99209L9.59234 5.59652C9.58984 5.59569 9.58693 5.59485 9.58359 5.59402H9.57484C9.57234 5.59485 9.56942 5.59569 9.56608 5.59652C9.56358 5.59735 9.56108 5.5986 9.55858 5.60027L8.55067 6.18301L11.4669 7.86745H11.4644ZM12.471 6.35433H12.4698V6.35558L12.471 6.35433ZM12.4698 6.35308C12.5423 5.93291 12.4935 5.50023 12.3285 5.10632C12.1646 4.71241 11.8908 4.37352 11.5406 4.12842C11.1905 3.88457 10.7778 3.74451 10.3514 3.72576C9.92373 3.70825 9.50106 3.81204 9.13091 4.02463L6.71617 5.41895C6.71367 5.42062 6.71159 5.4227 6.70992 5.4252L6.70492 5.4327C6.70408 5.4352 6.70325 5.43812 6.70241 5.44146C6.70158 5.44396 6.70116 5.44688 6.70116 5.45021V6.61569L9.61735 4.93125C9.64737 4.91374 9.67988 4.90124 9.71239 4.89123C9.74616 4.88248 9.77992 4.87873 9.81368 4.87873C9.8487 4.87873 9.88246 4.88248 9.91623 4.89123C9.94874 4.90124 9.98 4.91374 10.01 4.93125L12.3997 6.31181C12.421 6.32432 12.4523 6.34182 12.4698 6.35308ZM6.15094 5.06255C6.15094 5.02879 6.15594 4.99502 6.1647 4.96126C6.17345 4.92875 6.18595 4.89623 6.20346 4.86622C6.22097 4.83746 6.24098 4.80995 6.26599 4.78494C6.28975 4.76118 6.31726 4.73992 6.34727 4.72366L8.73699 3.34435C8.7595 3.3306 8.79077 3.31309 8.80827 3.30433C8.48064 3.03047 8.08048 2.8554 7.65655 2.80163C7.23263 2.74661 6.80246 2.81413 6.41605 2.99546C6.02839 3.17678 5.70076 3.46565 5.47191 3.8258C5.24307 4.18719 5.12177 4.60487 5.12177 5.03254V7.82118C5.1226 7.82451 5.12344 7.82743 5.12427 7.82993C5.1251 7.83243 5.12635 7.83493 5.12802 7.83744C5.12969 7.83994 5.13177 7.84244 5.13427 7.84494C5.13594 7.84661 5.13844 7.84827 5.14178 7.84994L6.15094 8.43268V5.06255ZM6.69866 8.74781L7.99794 9.49811L9.29722 8.74781V7.24845L7.99919 6.49814L6.69991 7.24845L6.69866 8.74781Z"
fill=
"white"
/>
...
...
web/app/components/app/overview/appCard.tsx
View file @
f9bec1ed
'use client'
import
type
{
FC
}
from
'react'
import
type
{
HTMLProps
}
from
'react'
import
React
,
{
useMemo
,
useState
}
from
'react'
import
{
Cog8ToothIcon
,
...
...
@@ -37,7 +37,7 @@ export type IAppCardProps = {
onGenerateCode
?:
()
=>
Promise
<
void
>
}
const
EmbedIcon
:
FC
<
{
className
?:
string
}
>
=
({
className
=
''
}
)
=>
{
const
EmbedIcon
=
({
className
=
''
}:
HTMLProps
<
HTMLDivElement
>
)
=>
{
return
<
div
className=
{
`${style.codeBrowserIcon} ${className}`
}
></
div
>
}
...
...
web/app/components/base/emoji-picker/index.tsx
View file @
f9bec1ed
...
...
@@ -3,6 +3,7 @@
import
type
{
ChangeEvent
,
FC
}
from
'react'
import
React
,
{
useState
}
from
'react'
import
data
from
'@emoji-mart/data'
import
type
{
Emoji
,
EmojiMartData
}
from
'@emoji-mart/data'
import
{
SearchIndex
,
init
}
from
'emoji-mart'
import
cn
from
'classnames'
import
{
...
...
@@ -30,9 +31,9 @@ declare global {
init
({
data
})
async
function
search
(
value
:
string
)
{
const
emojis
=
await
SearchIndex
.
search
(
value
)
||
[]
const
emojis
:
Emoji
[]
=
await
SearchIndex
.
search
(
value
)
||
[]
const
results
=
emojis
.
map
((
emoji
:
any
)
=>
{
const
results
=
emojis
.
map
((
emoji
)
=>
{
return
emoji
.
skins
[
0
].
native
})
return
results
...
...
@@ -59,6 +60,7 @@ const backgroundColors = [
'#ECE9FE'
,
'#FFE4E8'
,
]
type
IEmojiPickerProps
=
{
isModal
?:
boolean
onSelect
?:
(
emoji
:
string
,
background
:
string
)
=>
void
...
...
@@ -69,14 +71,13 @@ const EmojiPicker: FC<IEmojiPickerProps> = ({
isModal
=
true
,
onSelect
,
onClose
,
})
=>
{
const
{
t
}
=
useTranslation
()
const
{
categories
}
=
data
as
any
const
{
categories
}
=
data
as
EmojiMartData
const
[
selectedEmoji
,
setSelectedEmoji
]
=
useState
(
''
)
const
[
selectedBackground
,
setSelectedBackground
]
=
useState
(
backgroundColors
[
0
])
const
[
searchedEmojis
,
setSearchedEmojis
]
=
useState
([])
const
[
searchedEmojis
,
setSearchedEmojis
]
=
useState
<
string
[]
>
([])
const
[
isSearching
,
setIsSearching
]
=
useState
(
false
)
return
isModal
?
<
Modal
...
...
@@ -133,11 +134,11 @@ const EmojiPicker: FC<IEmojiPickerProps> = ({
</
div
>
</>
}
{
categories
.
map
((
category
:
any
,
index
:
number
)
=>
{
{
categories
.
map
((
category
,
index
:
number
)
=>
{
return
<
div
key=
{
`category-${index}`
}
className=
'flex flex-col'
>
<
p
className=
'font-medium uppercase text-xs text-[#101828] mb-1'
>
{
category
.
id
}
</
p
>
<
div
className=
'w-full h-full grid grid-cols-8 gap-1'
>
{
category
.
emojis
.
map
((
emoji
:
string
,
index
:
number
)
=>
{
{
category
.
emojis
.
map
((
emoji
,
index
:
number
)
=>
{
return
<
div
key=
{
`emoji-${index}`
}
className=
'inline-flex w-10 h-10 rounded-lg items-center justify-center'
...
...
web/app/components/base/input/index.tsx
View file @
f9bec1ed
'use client'
import
type
{
FC
}
from
'react'
import
type
{
SVGProps
}
from
'react'
import
React
,
{
useState
}
from
'react'
import
{
useTranslation
}
from
'react-i18next'
import
s
from
'./style.module.css'
...
...
@@ -8,7 +8,7 @@ type InputProps = {
placeholder
?:
string
value
?:
string
defaultValue
?:
string
onChange
?:
(
v
:
any
)
=>
void
onChange
?:
(
v
:
string
)
=>
void
className
?:
string
wrapperClassName
?:
string
type
?:
string
...
...
@@ -16,13 +16,13 @@ type InputProps = {
prefixIcon
?:
React
.
ReactNode
}
const
GlassIcon
:
FC
<
{
className
?:
string
}
>
=
({
className
}
)
=>
(
const
GlassIcon
=
({
className
}:
SVGProps
<
SVGElement
>
)
=>
(
<
svg
width=
"14"
height=
"14"
viewBox=
"0 0 14 14"
fill=
"none"
xmlns=
"http://www.w3.org/2000/svg"
className=
{
className
??
''
}
>
<
path
d=
"M12.25 12.25L10.2084 10.2083M11.6667 6.70833C11.6667 9.44675 9.44675 11.6667 6.70833 11.6667C3.96992 11.6667 1.75 9.44675 1.75 6.70833C1.75 3.96992 3.96992 1.75 6.70833 1.75C9.44675 1.75 11.6667 3.96992 11.6667 6.70833Z"
stroke=
"#344054"
strokeWidth=
"1.25"
strokeLinecap=
"round"
strokeLinejoin=
"round"
/>
</
svg
>
)
const
Input
:
FC
<
InputProps
>
=
({
value
,
defaultValue
,
onChange
,
className
=
''
,
wrapperClassName
=
''
,
placeholder
,
type
,
showPrefix
,
prefixIcon
}
)
=>
{
const
Input
=
({
value
,
defaultValue
,
onChange
,
className
=
''
,
wrapperClassName
=
''
,
placeholder
,
type
,
showPrefix
,
prefixIcon
}:
InputProps
)
=>
{
const
[
localValue
,
setLocalValue
]
=
useState
(
value
??
defaultValue
)
const
{
t
}
=
useTranslation
()
return
(
...
...
@@ -31,7 +31,7 @@ const Input: FC<InputProps> = ({ value, defaultValue, onChange, className = '',
<
input
type=
{
type
??
'text'
}
className=
{
`${s.input} ${showPrefix ? '!pl-7' : ''} ${className}`
}
placeholder=
{
placeholder
??
(
showPrefix
?
t
(
'common.operation.search'
)
:
'please input'
)
}
placeholder=
{
placeholder
??
(
showPrefix
?
t
(
'common.operation.search'
)
??
''
:
'please input'
)
}
value=
{
localValue
}
onChange=
{
(
e
)
=>
{
setLocalValue
(
e
.
target
.
value
)
...
...
web/app/components/base/notion-icon/index.tsx
View file @
f9bec1ed
...
...
@@ -7,7 +7,7 @@ type NotionIconProps = {
type
?:
IconTypes
name
?:
string
|
null
className
?:
string
src
?:
string
|
null
|
Pick
<
DataSourceNotionPage
,
'page_icon'
>
[
'page_icon'
]
src
?:
string
|
null
|
DataSourceNotionPage
[
'page_icon'
]
}
const
NotionIcon
=
({
type
=
'workspace'
,
...
...
web/app/components/base/notion-page-selector/base.tsx
View file @
f9bec1ed
...
...
@@ -10,17 +10,16 @@ import PageSelector from './page-selector'
import
{
preImportNotionPages
}
from
'@/service/datasets'
import
AccountSetting
from
'@/app/components/header/account-setting'
import
{
NotionConnector
}
from
'@/app/components/datasets/create/step-one'
import
type
{
DataSourceNotionPage
,
DataSourceNotionPageMap
,
DataSourceNotionWorkspac
e
}
from
'@/models/common'
import
type
{
DataSourceNotionPage
Map
,
DataSourceNotionWorkspace
,
NotionPag
e
}
from
'@/models/common'
import
{
ToastContext
}
from
'@/app/components/base/toast'
export
type
NotionPageSelectorValue
=
DataSourceNotionPage
&
{
workspace_id
:
string
}
type
NotionPageSelectorProps
=
{
value
?:
string
[]
onSelect
:
(
selectedPages
:
NotionPage
SelectorValue
[])
=>
void
onSelect
:
(
selectedPages
:
NotionPage
[])
=>
void
canPreview
?:
boolean
previewPageId
?:
string
onPreview
?:
(
selectedPage
:
NotionPage
SelectorValue
)
=>
void
onPreview
?:
(
selectedPage
:
NotionPage
)
=>
void
datasetId
?:
string
countLimit
:
number
countUsed
:
number
...
...
web/app/components/base/radio/component/radio/index.tsx
View file @
f9bec1ed
...
...
@@ -12,7 +12,7 @@ export type IRadioProps = {
checked
?:
boolean
value
?:
string
|
number
disabled
?:
boolean
onChange
?:
(
e
:
any
)
=>
void
onChange
?:
(
e
?:
IRadioProps
[
'value'
]
)
=>
void
}
export
default
function
Radio
({
...
...
web/app/components/datasets/create/embedding-process/index.tsx
View file @
f9bec1ed
...
...
@@ -87,7 +87,7 @@ const EmbeddingProcess: FC<Props> = ({ datasetId, batchId, documents = [], index
setIndexingStatusDetail
(
status
.
data
)
}
const
[
runId
,
setRunId
,
getRunId
]
=
useGetState
<
any
>
(
null
)
const
[
_
,
setRunId
,
getRunId
]
=
useGetState
<
ReturnType
<
typeof
setInterval
>>
(
)
const
stopQueryStatus
=
()
=>
{
clearInterval
(
getRunId
())
...
...
@@ -136,10 +136,10 @@ const EmbeddingProcess: FC<Props> = ({ datasetId, batchId, documents = [], index
}
const
isEmbedding
=
useMemo
(()
=>
{
return
indexingStatusBatchDetail
.
some
(
(
indexingStatusDetail
:
{
indexing_status
:
any
})
=>
[
'indexing'
,
'splitting'
,
'parsing'
,
'cleaning'
].
includes
(
indexingStatusDetail
?.
indexing_status
||
''
))
return
indexingStatusBatchDetail
.
some
(
indexingStatusDetail
=>
[
'indexing'
,
'splitting'
,
'parsing'
,
'cleaning'
].
includes
(
indexingStatusDetail
?.
indexing_status
||
''
))
},
[
indexingStatusBatchDetail
])
const
isEmbeddingCompleted
=
useMemo
(()
=>
{
return
indexingStatusBatchDetail
.
every
(
(
indexingStatusDetail
:
{
indexing_status
:
any
})
=>
[
'completed'
,
'error'
].
includes
(
indexingStatusDetail
?.
indexing_status
||
''
))
return
indexingStatusBatchDetail
.
every
(
indexingStatusDetail
=>
[
'completed'
,
'error'
].
includes
(
indexingStatusDetail
?.
indexing_status
||
''
))
},
[
indexingStatusBatchDetail
])
const
getSourceName
=
(
id
:
string
)
=>
{
...
...
@@ -159,10 +159,11 @@ const EmbeddingProcess: FC<Props> = ({ datasetId, batchId, documents = [], index
const
doc
=
documents
.
find
(
document
=>
document
.
id
===
id
)
return
doc
?.
data_source_type
as
DataSourceType
}
const
getIcon
=
(
id
:
string
)
=>
{
const
doc
=
documents
.
find
(
document
=>
document
.
id
===
id
)
as
any
// TODO type fix
const
doc
=
documents
.
find
(
document
=>
document
.
id
===
id
)
return
doc
.
data_source_info
.
notion_page_icon
return
doc
?
.
data_source_info
.
notion_page_icon
}
const
isSourceEmbedding
=
(
detail
:
IndexingStatusResponse
)
=>
[
'indexing'
,
'splitting'
,
'parsing'
,
'cleaning'
,
'waiting'
].
includes
(
detail
.
indexing_status
||
''
)
...
...
web/app/components/datasets/create/file-uploader/index.tsx
View file @
f9bec1ed
...
...
@@ -16,7 +16,7 @@ type IFileUploaderProps = {
titleClassName
?:
string
prepareFileList
:
(
files
:
FileItem
[])
=>
void
onFileUpdate
:
(
fileItem
:
FileItem
,
progress
:
number
,
list
:
FileItem
[])
=>
void
onFileListUpdate
?:
(
files
:
any
)
=>
void
onFileListUpdate
?:
(
files
:
FileItem
[]
)
=>
void
onPreview
:
(
file
:
File
)
=>
void
countLimit
:
number
countUsed
:
number
...
...
web/app/components/datasets/create/index.tsx
View file @
f9bec1ed
...
...
@@ -11,13 +11,11 @@ import { DataSourceType } from '@/models/datasets'
import
type
{
DataSet
,
FileItem
,
createDocumentResponse
}
from
'@/models/datasets'
import
{
fetchDataSource
}
from
'@/service/common'
import
{
fetchDataDetail
}
from
'@/service/datasets'
import
type
{
DataSource
NotionPage
}
from
'@/models/common'
import
type
{
NotionPage
}
from
'@/models/common'
import
{
useProviderContext
}
from
'@/context/provider-context'
import
AccountSetting
from
'@/app/components/header/account-setting'
type
Page
=
DataSourceNotionPage
&
{
workspace_id
:
string
}
type
DatasetUpdateFormProps
=
{
datasetId
?:
string
}
...
...
@@ -35,8 +33,8 @@ const DatasetUpdateForm = ({ datasetId }: DatasetUpdateFormProps) => {
const
[
hasError
,
setHasError
]
=
useState
(
false
)
const
{
embeddingsDefaultModel
}
=
useProviderContext
()
const
[
notionPages
,
setNotionPages
]
=
useState
<
Page
[]
>
([])
const
updateNotionPages
=
(
value
:
Page
[])
=>
{
const
[
notionPages
,
setNotionPages
]
=
useState
<
Notion
Page
[]
>
([])
const
updateNotionPages
=
(
value
:
Notion
Page
[])
=>
{
setNotionPages
(
value
)
}
...
...
web/app/components/datasets/create/notion-page-preview/index.tsx
View file @
f9bec1ed
...
...
@@ -4,13 +4,12 @@ import { useTranslation } from 'react-i18next'
import
cn
from
'classnames'
import
{
XMarkIcon
}
from
'@heroicons/react/20/solid'
import
s
from
'./index.module.css'
import
type
{
DataSource
NotionPage
}
from
'@/models/common'
import
type
{
NotionPage
}
from
'@/models/common'
import
NotionIcon
from
'@/app/components/base/notion-icon'
import
{
fetchNotionPagePreview
}
from
'@/service/datasets'
type
Page
=
DataSourceNotionPage
&
{
workspace_id
:
string
}
type
IProps
=
{
currentPage
?:
Page
currentPage
?:
Notion
Page
hidePreview
:
()
=>
void
}
...
...
web/app/components/datasets/create/step-one/index.tsx
View file @
f9bec1ed
...
...
@@ -9,7 +9,7 @@ import NotionPagePreview from '../notion-page-preview'
import
EmptyDatasetCreationModal
from
'../empty-dataset-creation-modal'
import
s
from
'./index.module.css'
import
type
{
FileItem
}
from
'@/models/datasets'
import
type
{
DataSource
NotionPage
}
from
'@/models/common'
import
type
{
NotionPage
}
from
'@/models/common'
import
{
DataSourceType
}
from
'@/models/datasets'
import
Button
from
'@/app/components/base/button'
import
{
NotionPageSelector
}
from
'@/app/components/base/notion-page-selector'
...
...
@@ -25,14 +25,12 @@ type IStepOneProps = {
files
:
FileItem
[]
updateFileList
:
(
files
:
FileItem
[])
=>
void
updateFile
:
(
fileItem
:
FileItem
,
progress
:
number
,
list
:
FileItem
[])
=>
void
notionPages
?:
any
[]
updateNotionPages
:
(
value
:
any
[])
=>
void
notionPages
?:
NotionPage
[]
updateNotionPages
:
(
value
:
NotionPage
[])
=>
void
onStepChange
:
()
=>
void
changeType
:
(
type
:
DataSourceType
)
=>
void
}
type
Page
=
DataSourceNotionPage
&
{
workspace_id
:
string
}
type
NotionConnectorProps
=
{
onSetting
:
()
=>
void
}
...
...
web/app/components/datasets/create/step-two/index.tsx
View file @
f9bec1ed
...
...
@@ -23,7 +23,7 @@ import Loading from '@/app/components/base/loading'
import
Toast
from
'@/app/components/base/toast'
import
{
formatNumber
}
from
'@/utils/format'
import
type
{
DataSource
NotionPage
}
from
'@/models/common'
import
type
{
NotionPage
}
from
'@/models/common'
import
{
DataSourceType
,
DocForm
}
from
'@/models/datasets'
import
NotionIcon
from
'@/app/components/base/notion-icon'
import
Switch
from
'@/app/components/base/switch'
...
...
@@ -33,8 +33,6 @@ import { useDatasetDetailContext } from '@/context/dataset-detail'
import
I18n
from
'@/context/i18n'
import
{
IS_CE_EDITION
}
from
'@/config'
type
Page
=
DataSourceNotionPage
&
{
workspace_id
:
string
}
type
StepTwoProps
=
{
isSetting
?:
boolean
documentDetail
?:
FullDocumentDetail
...
...
@@ -44,7 +42,7 @@ type StepTwoProps = {
indexingType
?:
string
dataSourceType
:
DataSourceType
files
:
CustomFile
[]
notionPages
?:
Page
[]
notionPages
?:
Notion
Page
[]
onStepChange
?:
(
delta
:
number
)
=>
void
updateIndexingTypeCache
?:
(
type
:
string
)
=>
void
updateResultCache
?:
(
res
:
createDocumentResponse
)
=>
void
...
...
@@ -110,16 +108,16 @@ const StepTwo = ({
return
segmentationType
===
SegmentType
.
AUTO
?
automaticFileIndexingEstimate
:
customFileIndexingEstimate
})()
const
scrollHandle
=
(
e
:
any
)
=>
{
if
(
e
.
target
.
scrollTop
>
0
)
const
scrollHandle
=
(
e
:
Event
)
=>
{
if
(
(
e
.
target
as
HTMLDivElement
)
.
scrollTop
>
0
)
setScrolled
(
true
)
else
setScrolled
(
false
)
}
const
previewScrollHandle
=
(
e
:
any
)
=>
{
if
(
e
.
target
.
scrollTop
>
0
)
const
previewScrollHandle
=
(
e
:
Event
)
=>
{
if
(
(
e
.
target
as
HTMLDivElement
)
.
scrollTop
>
0
)
setPreviewScrolled
(
true
)
else
...
...
web/app/components/datasets/documents/detail/completed/InfiniteVirtualList.tsx
View file @
f9bec1ed
...
...
@@ -10,7 +10,7 @@ type IInfiniteVirtualListProps = {
hasNextPage
?:
boolean
// Are there more items to load? (This information comes from the most recent API request.)
isNextPageLoading
:
boolean
// Are we currently loading a page of items? (This may be an in-flight flag in your Redux store for example.)
items
:
Array
<
SegmentDetailModel
[]
>
// Array of items loaded so far.
loadNextPage
:
()
=>
Promise
<
any
>
// Callback function responsible for loading the next page of items.
loadNextPage
:
()
=>
Promise
<
void
>
// Callback function responsible for loading the next page of items.
onClick
:
(
detail
:
SegmentDetailModel
)
=>
void
onChangeSwitch
:
(
segId
:
string
,
enabled
:
boolean
)
=>
Promise
<
void
>
onDelete
:
(
segId
:
string
)
=>
Promise
<
void
>
...
...
web/app/components/datasets/documents/detail/completed/SegmentCard.tsx
View file @
f9bec1ed
...
...
@@ -66,7 +66,7 @@ const SegmentCard: FC<ISegmentCardProps> = ({
hit_count
,
index_node_hash
,
answer
,
}
=
detail
as
any
}
=
detail
as
Required
<
ISegmentCardProps
>
[
'detail'
]
const
isDocScene
=
scene
===
'doc'
const
[
showModal
,
setShowModal
]
=
useState
(
false
)
...
...
web/app/components/datasets/documents/detail/completed/index.tsx
View file @
f9bec1ed
...
...
@@ -177,8 +177,8 @@ const SegmentDetailComponent: FC<ISegmentDetailProps> = ({
</
div
>
<
div
className=
{
cn
(
s
.
footer
,
s
.
numberInfo
)
}
>
<
div
className=
'flex items-center'
>
<
div
className=
{
cn
(
s
.
commonIcon
,
s
.
typeSquareIcon
)
}
/><
span
className=
'mr-8'
>
{
formatNumber
(
segInfo
?.
word_count
as
any
)
}
{
t
(
'datasetDocuments.segment.characters'
)
}
</
span
>
<
div
className=
{
cn
(
s
.
commonIcon
,
s
.
targetIcon
)
}
/><
span
className=
'mr-8'
>
{
formatNumber
(
segInfo
?.
hit_count
as
any
)
}
{
t
(
'datasetDocuments.segment.hitCount'
)
}
</
span
>
<
div
className=
{
cn
(
s
.
commonIcon
,
s
.
typeSquareIcon
)
}
/><
span
className=
'mr-8'
>
{
formatNumber
(
segInfo
?.
word_count
as
number
)
}
{
t
(
'datasetDocuments.segment.characters'
)
}
</
span
>
<
div
className=
{
cn
(
s
.
commonIcon
,
s
.
targetIcon
)
}
/><
span
className=
'mr-8'
>
{
formatNumber
(
segInfo
?.
hit_count
as
number
)
}
{
t
(
'datasetDocuments.segment.hitCount'
)
}
</
span
>
<
div
className=
{
cn
(
s
.
commonIcon
,
s
.
bezierCurveIcon
)
}
/><
span
className=
{
s
.
hashText
}
>
{
t
(
'datasetDocuments.segment.vectorHash'
)
}{
segInfo
?.
index_node_hash
}
</
span
>
</
div
>
<
div
className=
'flex items-center'
>
...
...
web/app/components/datasets/documents/detail/embedding/index.tsx
View file @
f9bec1ed
import
type
{
FC
}
from
'react'
import
type
{
FC
,
SVGProps
}
from
'react'
import
React
,
{
useCallback
,
useEffect
,
useMemo
,
useState
}
from
'react'
import
useSWR
from
'swr'
import
{
useRouter
}
from
'next/navigation'
...
...
@@ -33,7 +33,7 @@ type Props = {
detailUpdate
:
VoidFunction
}
const
StopIcon
:
FC
<
{
className
?:
string
}
>
=
({
className
}
)
=>
{
const
StopIcon
=
({
className
}:
SVGProps
<
SVGElement
>
)
=>
{
return
<
svg
width=
"12"
height=
"12"
viewBox=
"0 0 12 12"
fill=
"none"
xmlns=
"http://www.w3.org/2000/svg"
className=
{
className
??
''
}
>
<
g
clip
-
path=
"url(#clip0_2328_2798)"
>
<
path
d=
"M1.5 3.9C1.5 3.05992 1.5 2.63988 1.66349 2.31901C1.8073 2.03677 2.03677 1.8073 2.31901 1.66349C2.63988 1.5 3.05992 1.5 3.9 1.5H8.1C8.94008 1.5 9.36012 1.5 9.68099 1.66349C9.96323 1.8073 10.1927 2.03677 10.3365 2.31901C10.5 2.63988 10.5 3.05992 10.5 3.9V8.1C10.5 8.94008 10.5 9.36012 10.3365 9.68099C10.1927 9.96323 9.96323 10.1927 9.68099 10.3365C9.36012 10.5 8.94008 10.5 8.1 10.5H3.9C3.05992 10.5 2.63988 10.5 2.31901 10.3365C2.03677 10.1927 1.8073 9.96323 1.66349 9.68099C1.5 9.36012 1.5 8.94008 1.5 8.1V3.9Z"
stroke=
"#344054"
strokeWidth=
"1.5"
strokeLinecap=
"round"
strokeLinejoin=
"round"
/>
...
...
@@ -46,7 +46,7 @@ const StopIcon: FC<{ className?: string }> = ({ className }) => {
</
svg
>
}
const
ResumeIcon
:
FC
<
{
className
?:
string
}
>
=
({
className
}
)
=>
{
const
ResumeIcon
=
({
className
}:
SVGProps
<
SVGElement
>
)
=>
{
return
<
svg
width=
"12"
height=
"12"
viewBox=
"0 0 12 12"
fill=
"none"
xmlns=
"http://www.w3.org/2000/svg"
className=
{
className
??
''
}
>
<
path
d=
"M10 3.5H5C3.34315 3.5 2 4.84315 2 6.5C2 8.15685 3.34315 9.5 5 9.5H10M10 3.5L8 1.5M10 3.5L8 5.5"
stroke=
"#344054"
strokeWidth=
"1.5"
strokeLinecap=
"round"
strokeLinejoin=
"round"
/>
</
svg
>
...
...
web/app/components/datasets/documents/index.tsx
View file @
f9bec1ed
...
...
@@ -17,26 +17,26 @@ import { get } from '@/service/base'
import
{
createDocument
,
fetchDocuments
}
from
'@/service/datasets'
import
{
useDatasetDetailContext
}
from
'@/context/dataset-detail'
import
{
NotionPageSelectorModal
}
from
'@/app/components/base/notion-page-selector'
import
type
{
DataSource
NotionPage
}
from
'@/models/common'
import
type
{
NotionPage
}
from
'@/models/common'
import
type
{
CreateDocumentReq
}
from
'@/models/datasets'
import
{
DataSourceType
}
from
'@/models/datasets'
// Custom page count is not currently supported.
const
limit
=
15
const
FolderPlusIcon
:
FC
<
{
className
?:
string
}
>
=
({
className
}
)
=>
{
const
FolderPlusIcon
=
({
className
}:
React
.
SVGProps
<
SVGElement
>
)
=>
{
return
<
svg
width=
"20"
height=
"20"
viewBox=
"0 0 20 20"
fill=
"none"
xmlns=
"http://www.w3.org/2000/svg"
className=
{
className
??
''
}
>
<
path
d=
"M10.8332 5.83333L9.90355 3.9741C9.63601 3.439 9.50222 3.17144 9.30265 2.97597C9.12615 2.80311 8.91344 2.67164 8.6799 2.59109C8.41581 2.5 8.11668 2.5 7.51841 2.5H4.33317C3.39975 2.5 2.93304 2.5 2.57652 2.68166C2.26292 2.84144 2.00795 3.09641 1.84816 3.41002C1.6665 3.76654 1.6665 4.23325 1.6665 5.16667V5.83333M1.6665 5.83333H14.3332C15.7333 5.83333 16.4334 5.83333 16.9681 6.10582C17.4386 6.3455 17.821 6.72795 18.0607 7.19836C18.3332 7.73314 18.3332 8.4332 18.3332 9.83333V13.5C18.3332 14.9001 18.3332 15.6002 18.0607 16.135C17.821 16.6054 17.4386 16.9878 16.9681 17.2275C16.4334 17.5 15.7333 17.5 14.3332 17.5H5.6665C4.26637 17.5 3.56631 17.5 3.03153 17.2275C2.56112 16.9878 2.17867 16.6054 1.93899 16.135C1.6665 15.6002 1.6665 14.9001 1.6665 13.5V5.83333ZM9.99984 14.1667V9.16667M7.49984 11.6667H12.4998"
stroke=
"#667085"
strokeWidth=
"1.5"
strokeLinecap=
"round"
strokeLinejoin=
"round"
/>
</
svg
>
}
const
ThreeDotsIcon
:
FC
<
{
className
?:
string
}
>
=
({
className
}
)
=>
{
const
ThreeDotsIcon
=
({
className
}:
React
.
SVGProps
<
SVGElement
>
)
=>
{
return
<
svg
width=
"16"
height=
"16"
viewBox=
"0 0 16 16"
fill=
"none"
xmlns=
"http://www.w3.org/2000/svg"
className=
{
className
??
''
}
>
<
path
d=
"M5 6.5V5M8.93934 7.56066L10 6.5M10.0103 11.5H11.5103"
stroke=
"#374151"
strokeWidth=
"2"
strokeLinecap=
"round"
strokeLinejoin=
"round"
/>
</
svg
>
}
const
NotionIcon
:
FC
<
{
className
?:
string
}
>
=
({
className
}
)
=>
{
const
NotionIcon
=
({
className
}:
React
.
SVGProps
<
SVGElement
>
)
=>
{
return
<
svg
width=
"20"
height=
"20"
viewBox=
"0 0 20 20"
fill=
"none"
xmlns=
"http://www.w3.org/2000/svg"
className=
{
className
??
''
}
>
<
g
clip
-
path=
"url(#clip0_2164_11263)"
>
<
path
fillRule=
"evenodd"
clipRule=
"evenodd"
d=
"M3.5725 18.2611L1.4229 15.5832C0.905706 14.9389 0.625 14.1466 0.625 13.3312V3.63437C0.625 2.4129 1.60224 1.39936 2.86295 1.31328L12.8326 0.632614C13.5569 0.583164 14.2768 0.775682 14.8717 1.17794L18.3745 3.5462C19.0015 3.97012 19.375 4.66312 19.375 5.40266V16.427C19.375 17.6223 18.4141 18.6121 17.1798 18.688L6.11458 19.3692C5.12958 19.4298 4.17749 19.0148 3.5725 18.2611Z"
fill=
"white"
/>
...
...
@@ -142,7 +142,7 @@ const Documents: FC<IDocumentsProps> = ({ datasetId }) => {
const
isLoading
=
!
documentsRes
&&
!
error
const
handleSaveNotionPageSelected
=
async
(
selectedPages
:
(
DataSourceNotionPage
&
{
workspace_id
:
string
})
[])
=>
{
const
handleSaveNotionPageSelected
=
async
(
selectedPages
:
NotionPage
[])
=>
{
const
workspacesMap
=
groupBy
(
selectedPages
,
'workspace_id'
)
const
workspaces
=
Object
.
keys
(
workspacesMap
).
map
((
workspaceId
)
=>
{
return
{
...
...
web/app/components/datasets/documents/list.tsx
View file @
f9bec1ed
/* eslint-disable no-mixed-operators */
'use client'
import
type
{
FC
}
from
'react'
import
type
{
FC
,
SVGProps
}
from
'react'
import
React
,
{
useEffect
,
useState
}
from
'react'
import
{
ArrowDownIcon
,
TrashIcon
}
from
'@heroicons/react/24/outline'
import
{
ExclamationCircleIcon
}
from
'@heroicons/react/24/solid'
...
...
@@ -29,25 +29,25 @@ import { DataSourceType, type DocumentDisplayStatus, type SimpleDocumentDetail }
import
type
{
CommonResponse
}
from
'@/models/common'
import
{
DotsHorizontal
,
HelpCircle
}
from
'@/app/components/base/icons/src/vender/line/general'
export
const
SettingsIcon
:
FC
<
{
className
?:
string
}
>
=
({
className
}
)
=>
{
export
const
SettingsIcon
=
({
className
}:
SVGProps
<
SVGElement
>
)
=>
{
return
<
svg
width=
"16"
height=
"16"
viewBox=
"0 0 16 16"
fill=
"none"
xmlns=
"http://www.w3.org/2000/svg"
className=
{
className
??
''
}
>
<
path
d=
"M2 5.33325L10 5.33325M10 5.33325C10 6.43782 10.8954 7.33325 12 7.33325C13.1046 7.33325 14 6.43782 14 5.33325C14 4.22868 13.1046 3.33325 12 3.33325C10.8954 3.33325 10 4.22868 10 5.33325ZM6 10.6666L14 10.6666M6 10.6666C6 11.7712 5.10457 12.6666 4 12.6666C2.89543 12.6666 2 11.7712 2 10.6666C2 9.56202 2.89543 8.66659 4 8.66659C5.10457 8.66659 6 9.56202 6 10.6666Z"
stroke=
"#667085"
strokeWidth=
"1.5"
strokeLinecap=
"round"
strokeLinejoin=
"round"
/>
</
svg
>
}
export
const
SyncIcon
:
FC
<
{
className
?:
string
}
>
=
()
=>
{
export
const
SyncIcon
=
()
=>
{
return
<
svg
width=
"16"
height=
"16"
viewBox=
"0 0 16 16"
fill=
"none"
xmlns=
"http://www.w3.org/2000/svg"
>
<
path
d=
"M5.69773 13.1783C7.29715 13.8879 9.20212 13.8494 10.8334 12.9075C13.5438 11.3427 14.4724 7.87704 12.9076 5.16672L12.7409 4.87804M3.09233 10.8335C1.52752 8.12314 2.45615 4.65746 5.16647 3.09265C6.7978 2.15081 8.70277 2.11227 10.3022 2.82185M1.66226 10.8892L3.48363 11.3773L3.97166 9.5559M12.0284 6.44393L12.5164 4.62256L14.3378 5.1106"
stroke=
"#667085"
stroke
-
width=
"1.5"
stroke
-
linecap=
"round"
stroke
-
linejoin=
"round"
/>
</
svg
>
}
export
const
FilePlusIcon
:
FC
<
{
className
?:
string
}
>
=
({
className
}
)
=>
{
export
const
FilePlusIcon
=
({
className
}:
SVGProps
<
SVGElement
>
)
=>
{
return
<
svg
width=
"16"
height=
"16"
viewBox=
"0 0 16 16"
fill=
"none"
xmlns=
"http://www.w3.org/2000/svg"
className=
{
className
??
''
}
>
<
path
d=
"M13.3332 6.99992V4.53325C13.3332 3.41315 13.3332 2.85309 13.1152 2.42527C12.9234 2.04895 12.6175 1.74299 12.2412 1.55124C11.8133 1.33325 11.2533 1.33325 10.1332 1.33325H5.8665C4.7464 1.33325 4.18635 1.33325 3.75852 1.55124C3.3822 1.74299 3.07624 2.04895 2.88449 2.42527C2.6665 2.85309 2.6665 3.41315 2.6665 4.53325V11.4666C2.6665 12.5867 2.6665 13.1467 2.88449 13.5746C3.07624 13.9509 3.3822 14.2569 3.75852 14.4486C4.18635 14.6666 4.7464 14.6666 5.8665 14.6666H7.99984M9.33317 7.33325H5.33317M6.6665 9.99992H5.33317M10.6665 4.66659H5.33317M11.9998 13.9999V9.99992M9.99984 11.9999H13.9998"
stroke=
"#667085"
strokeWidth=
"1.5"
strokeLinecap=
"round"
strokeLinejoin=
"round"
/>
</
svg
>
}
export
const
ArchiveIcon
:
FC
<
{
className
?:
string
}
>
=
({
className
}
)
=>
{
export
const
ArchiveIcon
=
({
className
}:
SVGProps
<
SVGElement
>
)
=>
{
return
<
svg
width=
"16"
height=
"16"
viewBox=
"0 0 16 16"
fill=
"none"
xmlns=
"http://www.w3.org/2000/svg"
className=
{
className
??
''
}
>
<
path
d=
"M2.66683 5.33106C2.55749 5.32824 2.47809 5.32191 2.40671 5.30771C1.87779 5.2025 1.46432 4.78904 1.35912 4.26012C1.3335 4.13132 1.3335 3.97644 1.3335 3.66667C1.3335 3.3569 1.3335 3.20201 1.35912 3.07321C1.46432 2.54429 1.87779 2.13083 2.40671 2.02562C2.53551 2 2.69039 2 3.00016 2H13.0002C13.3099 2 13.4648 2 13.5936 2.02562C14.1225 2.13083 14.536 2.54429 14.6412 3.07321C14.6668 3.20201 14.6668 3.3569 14.6668 3.66667C14.6668 3.97644 14.6668 4.13132 14.6412 4.26012C14.536 4.78904 14.1225 5.2025 13.5936 5.30771C13.5222 5.32191 13.4428 5.32824 13.3335 5.33106M6.66683 8.66667H9.3335M2.66683 5.33333H13.3335V10.8C13.3335 11.9201 13.3335 12.4802 13.1155 12.908C12.9238 13.2843 12.6178 13.5903 12.2415 13.782C11.8137 14 11.2536 14 10.1335 14H5.86683C4.74672 14 4.18667 14 3.75885 13.782C3.38252 13.5903 3.07656 13.2843 2.88482 12.908C2.66683 12.4802 2.66683 11.9201 2.66683 10.8V5.33333Z"
stroke=
"#667085"
strokeWidth=
"1.5"
strokeLinecap=
"round"
strokeLinejoin=
"round"
/>
</
svg
>
...
...
web/app/components/datasets/hit-testing/hit-detail.tsx
View file @
f9bec1ed
...
...
@@ -89,7 +89,7 @@ const HitDetail: FC<IHitDetailProps> = ({ segInfo, vectorInfo }) => {
<
div
className=
{
s
.
keywordWrapper
}
>
{
!
segInfo
?.
keywords
?.
length
?
'-'
:
segInfo
?.
keywords
?.
map
((
word
:
any
)
=>
{
:
segInfo
?.
keywords
?.
map
((
word
)
=>
{
return
<
div
className=
{
s
.
keyword
}
>
{
word
}
</
div
>
})
}
</
div
>
...
...
web/app/components/explore/app-list/index.tsx
View file @
f9bec1ed
...
...
@@ -7,7 +7,7 @@ import { useContext } from 'use-context-selector'
import
Toast
from
'../../base/toast'
import
s
from
'./style.module.css'
import
ExploreContext
from
'@/context/explore-context'
import
type
{
App
}
from
'@/models/explore'
import
type
{
App
,
AppCategory
}
from
'@/models/explore'
import
Category
from
'@/app/components/explore/category'
import
AppCard
from
'@/app/components/explore/app-card'
import
{
fetchAppDetail
,
fetchAppList
,
installApp
}
from
'@/service/explore'
...
...
@@ -22,7 +22,7 @@ const Apps: FC = () => {
const
{
t
}
=
useTranslation
()
const
router
=
useRouter
()
const
{
setControlUpdateInstalledApps
,
hasEditPermission
}
=
useContext
(
ExploreContext
)
const
[
currCategory
,
setCurrCategory
]
=
React
.
useState
(
''
)
const
[
currCategory
,
setCurrCategory
]
=
React
.
useState
<
AppCategory
|
''
>
(
''
)
const
[
allList
,
setAllList
]
=
React
.
useState
<
App
[]
>
([])
const
[
isLoaded
,
setIsLoaded
]
=
React
.
useState
(
false
)
...
...
@@ -31,7 +31,8 @@ const Apps: FC = () => {
return
allList
return
allList
.
filter
(
item
=>
item
.
category
===
currCategory
)
})()
const
[
categories
,
setCategories
]
=
React
.
useState
([])
const
[
categories
,
setCategories
]
=
React
.
useState
<
AppCategory
[]
>
([])
useEffect
(()
=>
{
(
async
()
=>
{
const
{
categories
,
recommended_apps
}:
any
=
await
fetchAppList
()
...
...
web/app/components/explore/category.tsx
View file @
f9bec1ed
...
...
@@ -4,14 +4,15 @@ import React from 'react'
import
{
useTranslation
}
from
'react-i18next'
import
cn
from
'classnames'
import
exploreI18n
from
'@/i18n/lang/explore.en'
import
type
{
AppCategory
}
from
'@/models/explore'
const
categoryI18n
=
exploreI18n
.
category
export
type
ICategoryProps
=
{
className
?:
string
list
:
string
[]
list
:
AppCategory
[]
value
:
string
onChange
:
(
value
:
string
)
=>
void
onChange
:
(
value
:
AppCategory
|
''
)
=>
void
}
const
Category
:
FC
<
ICategoryProps
>
=
({
...
...
@@ -40,7 +41,7 @@ const Category: FC<ICategoryProps> = ({
style=
{
itemStyle
(
name
===
value
)
}
onClick=
{
()
=>
onChange
(
name
)
}
>
{
(
categoryI18n
as
any
)
[
name
]
?
t
(
`explore.category.${name}`
)
:
name
}
{
categoryI18n
[
name
]
?
t
(
`explore.category.${name}`
)
:
name
}
</
div
>
))
}
</
div
>
...
...
web/app/components/header/account-setting/index.tsx
View file @
f9bec1ed
...
...
@@ -95,8 +95,8 @@ export default function AccountSetting({
]
const
scrollRef
=
useRef
<
HTMLDivElement
>
(
null
)
const
[
scrolled
,
setScrolled
]
=
useState
(
false
)
const
scrollHandle
=
(
e
:
any
)
=>
{
if
(
e
.
target
.
scrollTop
>
0
)
const
scrollHandle
=
(
e
:
Event
)
=>
{
if
(
(
e
.
target
as
HTMLDivElement
)
.
scrollTop
>
0
)
setScrolled
(
true
)
else
...
...
web/app/components/header/account-setting/model-page/model-item/Card.tsx
View file @
f9bec1ed
...
...
@@ -9,7 +9,7 @@ import Button from '@/app/components/base/button'
type
CardProps
=
{
providerType
:
ProviderEnum
models
:
Model
[]
onOpenModal
:
(
v
:
any
)
=>
void
onOpenModal
:
(
v
:
Omit
<
Model
,
'config'
>
&
Model
[
'config'
]
)
=>
void
onOperate
:
(
v
:
Record
<
string
,
any
>
)
=>
void
}
...
...
web/app/components/share/text-generation/result/index.tsx
View file @
f9bec1ed
...
...
@@ -133,7 +133,7 @@ const Result: FC<IResultProps> = ({
setResponsingTrue
()
sendCompletionMessage
(
data
,
{
onData
:
(
data
:
string
,
_isFirstMessage
:
boolean
,
{
messageId
}
:
any
)
=>
{
onData
:
(
data
:
string
,
_isFirstMessage
:
boolean
,
{
messageId
})
=>
{
tempMessageId
=
messageId
res
.
push
(
data
)
setCompletionRes
(
res
.
join
(
''
))
...
...
web/models/common.ts
View file @
f9bec1ed
...
...
@@ -138,6 +138,10 @@ export type DataSourceNotionPage = {
is_bound
:
boolean
}
export
type
NotionPage
=
DataSourceNotionPage
&
{
workspace_id
:
string
}
export
type
DataSourceNotionPageMap
=
Record
<
string
,
DataSourceNotionPage
&
{
workspace_id
:
string
}
>
export
type
DataSourceNotionWorkspace
=
{
...
...
web/models/explore.ts
View file @
f9bec1ed
...
...
@@ -8,13 +8,15 @@ export type AppBasicInfo = {
icon_background
:
string
}
export
type
AppCategory
=
'Writing'
|
'Translate'
|
'HR'
|
'Programming'
|
'Assistant'
export
type
App
=
{
app
:
AppBasicInfo
app_id
:
string
description
:
string
copyright
:
string
privacy_policy
:
string
category
:
string
category
:
AppCategory
position
:
number
is_listed
:
boolean
install_count
:
number
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment