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
4e5358b5
Commit
4e5358b5
authored
Jul 11, 2023
by
StyleZhang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
refact header
parent
57de19a5
Changes
18
Hide whitespace changes
Inline
Side-by-side
Showing
18 changed files
with
309 additions
and
91 deletions
+309
-91
terminal-square.svg
...icons/assets/vender/solid/development/terminal-square.svg
+5
-0
beaker-02.svg
...ts/base/icons/assets/vender/solid/education/beaker-02.svg
+5
-0
TerminalSquare.json
...se/icons/src/vender/solid/development/TerminalSquare.json
+38
-0
TerminalSquare.tsx
...ase/icons/src/vender/solid/development/TerminalSquare.tsx
+14
-0
index.ts
...mponents/base/icons/src/vender/solid/development/index.ts
+1
-0
Beaker02.json
...nents/base/icons/src/vender/solid/education/Beaker02.json
+38
-0
Beaker02.tsx
...onents/base/icons/src/vender/solid/education/Beaker02.tsx
+14
-0
index.ts
...components/base/icons/src/vender/solid/education/index.ts
+1
-0
index.tsx
web/app/components/header/account-dropdown/index.tsx
+3
-7
index.tsx
web/app/components/header/app-nav/index.tsx
+2
-0
index.tsx
web/app/components/header/dataset-nav/index.tsx
+2
-0
index.tsx
web/app/components/header/env-nav/index.tsx
+46
-0
index.tsx
web/app/components/header/explore-nav/index.tsx
+37
-0
index.module.css
web/app/components/header/github-star/index.module.css
+6
-0
index.tsx
web/app/components/header/github-star/index.tsx
+33
-0
index.tsx
web/app/components/header/index.tsx
+26
-83
index.tsx
web/app/components/header/plugin-nav/index.tsx
+37
-0
app-context.tsx
web/context/app-context.tsx
+1
-1
No files found.
web/app/components/base/icons/assets/vender/solid/development/terminal-square.svg
0 → 100644
View file @
4e5358b5
<svg
width=
"12"
height=
"12"
viewBox=
"0 0 12 12"
fill=
"none"
xmlns=
"http://www.w3.org/2000/svg"
>
<g
id=
"terminal-square"
>
<path
id=
"Solid"
fill-rule=
"evenodd"
clip-rule=
"evenodd"
d=
"M8.91927 1H3.08073C2.81716 0.999992 2.58977 0.999984 2.40249 1.01529C2.20481 1.03144 2.00821 1.06709 1.81902 1.16349C1.53677 1.3073 1.3073 1.53677 1.16349 1.81902C1.06709 2.00821 1.03144 2.20481 1.01529 2.40249C0.999984 2.58977 0.999992 2.81714 1 3.08071V8.91927C0.999992 9.18284 0.999984 9.41023 1.01529 9.59752C1.03144 9.79519 1.06709 9.9918 1.16349 10.181C1.3073 10.4632 1.53677 10.6927 1.81902 10.8365C2.00821 10.9329 2.20481 10.9686 2.40249 10.9847C2.58977 11 2.81715 11 3.08072 11H8.91928C9.18285 11 9.41023 11 9.59752 10.9847C9.79519 10.9686 9.9918 10.9329 10.181 10.8365C10.4632 10.6927 10.6927 10.4632 10.8365 10.181C10.9329 9.9918 10.9686 9.79519 10.9847 9.59752C11 9.41023 11 9.18285 11 8.91928V3.08072C11 2.81715 11 2.58977 10.9847 2.40249C10.9686 2.20481 10.9329 2.00821 10.8365 1.81902C10.6927 1.53677 10.4632 1.3073 10.181 1.16349C9.9918 1.06709 9.79519 1.03144 9.59752 1.01529C9.41023 0.999984 9.18284 0.999992 8.91927 1ZM3.85355 4.14645C3.65829 3.95118 3.34171 3.95118 3.14645 4.14645C2.95118 4.34171 2.95118 4.65829 3.14645 4.85355L4.29289 6L3.14645 7.14645C2.95118 7.34171 2.95118 7.65829 3.14645 7.85355C3.34171 8.04882 3.65829 8.04882 3.85355 7.85355L5.35355 6.35355C5.54882 6.15829 5.54882 5.84171 5.35355 5.64645L3.85355 4.14645ZM6.5 7C6.22386 7 6 7.22386 6 7.5C6 7.77614 6.22386 8 6.5 8H8.5C8.77614 8 9 7.77614 9 7.5C9 7.22386 8.77614 7 8.5 7H6.5Z"
fill=
"#B54708"
/>
</g>
</svg>
web/app/components/base/icons/assets/vender/solid/education/beaker-02.svg
0 → 100644
View file @
4e5358b5
<svg
width=
"12"
height=
"12"
viewBox=
"0 0 12 12"
fill=
"none"
xmlns=
"http://www.w3.org/2000/svg"
>
<g
id=
"beaker-02"
>
<path
id=
"Solid"
fill-rule=
"evenodd"
clip-rule=
"evenodd"
d=
"M4.13856 0.500003H7.8617C7.92126 0.49998 7.99238 0.499953 8.05504 0.505073C8.12765 0.511005 8.23165 0.526227 8.34062 0.581751C8.48174 0.653656 8.59648 0.768392 8.66838 0.909513C8.72391 1.01849 8.73913 1.12248 8.74506 1.19509C8.75018 1.25775 8.75015 1.32888 8.75013 1.38844V2.61157C8.75015 2.67113 8.75018 2.74226 8.74506 2.80492C8.73913 2.87753 8.72391 2.98153 8.66838 3.0905C8.59648 3.23162 8.48174 3.34636 8.34062 3.41826C8.23165 3.47379 8.12765 3.48901 8.05504 3.49494C8.03725 3.49639 8.01877 3.49743 8.00006 3.49817V5.2506C8.00006 5.55312 8.00408 5.61265 8.01723 5.66153C8.03245 5.71807 8.05747 5.7715 8.09117 5.81939C8.1203 5.86078 8.16346 5.90197 8.39586 6.09564L10.2807 7.66627C10.4566 7.81255 10.6116 7.94145 10.7267 8.10509C10.8278 8.24875 10.9029 8.40904 10.9486 8.57867C11.0005 8.7719 11.0003 8.97351 11.0001 9.2023C11.0001 9.39886 11.0002 9.59542 11.0002 9.79198C11.0003 9.98232 11.0005 10.1463 10.9713 10.2927C10.853 10.8877 10.3878 11.3529 9.7928 11.4712C9.64637 11.5003 9.48246 11.5002 9.29211 11.5001H2.70822C2.51787 11.5002 2.35396 11.5003 2.20753 11.4712C1.98473 11.4269 1.78014 11.334 1.60515 11.2038C1.42854 11.0725 1.28221 10.9034 1.17753 10.7077C1.10892 10.5796 1.05831 10.4401 1.02899 10.2927C0.999862 10.1463 0.999992 9.98233 1.00014 9.79199C1.00014 9.59542 1.00006 9.39886 1.00003 9.20229C0.999794 8.97351 0.999584 8.7719 1.05157 8.57867C1.09721 8.40904 1.17229 8.24875 1.27338 8.10509C1.38855 7.94145 1.54356 7.81255 1.71947 7.66627L3.60427 6.09564C3.83667 5.90197 3.87983 5.86078 3.90896 5.81939C3.94266 5.7715 3.96768 5.71807 3.9829 5.66153C3.99605 5.61265 4.00006 5.55312 4.00006 5.2506V3.49817C3.9814 3.49743 3.96297 3.49639 3.94521 3.49494C3.8726 3.48901 3.76861 3.47379 3.65964 3.41826C3.51851 3.34636 3.40378 3.23162 3.33187 3.0905C3.27635 2.98153 3.26113 2.87753 3.25519 2.80492C3.25008 2.74226 3.2501 2.67113 3.25013 2.61158V1.38844C3.2501 1.32888 3.25008 1.25775 3.25519 1.19509C3.26113 1.12248 3.27635 1.01849 3.33187 0.909513C3.40378 0.768392 3.51851 0.653656 3.65964 0.581751C3.76861 0.526227 3.8726 0.511005 3.94521 0.505073C4.00787 0.499953 4.079 0.49998 4.13856 0.500003ZM9.11909 8.00004H2.88104L4.28066 6.83373C4.45657 6.68745 4.61158 6.55855 4.72675 6.39491C4.82784 6.25125 4.90292 6.09096 4.94856 5.92133C5.00054 5.7281 5.00033 5.52649 5.0001 5.29771L5.00006 3.50001H7.00006L7.00003 5.29771C6.99979 5.52649 6.99958 5.7281 7.05157 5.92133C7.09721 6.09096 7.17229 6.25125 7.27338 6.39491C7.38855 6.55855 7.54356 6.68745 7.71947 6.83373L9.11909 8.00004Z"
fill=
"#0E7090"
/>
</g>
</svg>
web/app/components/base/icons/src/vender/solid/development/TerminalSquare.json
0 → 100644
View file @
4e5358b5
{
"icon"
:
{
"type"
:
"element"
,
"isRootNode"
:
true
,
"name"
:
"svg"
,
"attributes"
:
{
"width"
:
"12"
,
"height"
:
"12"
,
"viewBox"
:
"0 0 12 12"
,
"fill"
:
"none"
,
"xmlns"
:
"http://www.w3.org/2000/svg"
},
"children"
:
[
{
"type"
:
"element"
,
"name"
:
"g"
,
"attributes"
:
{
"id"
:
"terminal-square"
},
"children"
:
[
{
"type"
:
"element"
,
"name"
:
"path"
,
"attributes"
:
{
"id"
:
"Solid"
,
"fill-rule"
:
"evenodd"
,
"clip-rule"
:
"evenodd"
,
"d"
:
"M8.91927 1H3.08073C2.81716 0.999992 2.58977 0.999984 2.40249 1.01529C2.20481 1.03144 2.00821 1.06709 1.81902 1.16349C1.53677 1.3073 1.3073 1.53677 1.16349 1.81902C1.06709 2.00821 1.03144 2.20481 1.01529 2.40249C0.999984 2.58977 0.999992 2.81714 1 3.08071V8.91927C0.999992 9.18284 0.999984 9.41023 1.01529 9.59752C1.03144 9.79519 1.06709 9.9918 1.16349 10.181C1.3073 10.4632 1.53677 10.6927 1.81902 10.8365C2.00821 10.9329 2.20481 10.9686 2.40249 10.9847C2.58977 11 2.81715 11 3.08072 11H8.91928C9.18285 11 9.41023 11 9.59752 10.9847C9.79519 10.9686 9.9918 10.9329 10.181 10.8365C10.4632 10.6927 10.6927 10.4632 10.8365 10.181C10.9329 9.9918 10.9686 9.79519 10.9847 9.59752C11 9.41023 11 9.18285 11 8.91928V3.08072C11 2.81715 11 2.58977 10.9847 2.40249C10.9686 2.20481 10.9329 2.00821 10.8365 1.81902C10.6927 1.53677 10.4632 1.3073 10.181 1.16349C9.9918 1.06709 9.79519 1.03144 9.59752 1.01529C9.41023 0.999984 9.18284 0.999992 8.91927 1ZM3.85355 4.14645C3.65829 3.95118 3.34171 3.95118 3.14645 4.14645C2.95118 4.34171 2.95118 4.65829 3.14645 4.85355L4.29289 6L3.14645 7.14645C2.95118 7.34171 2.95118 7.65829 3.14645 7.85355C3.34171 8.04882 3.65829 8.04882 3.85355 7.85355L5.35355 6.35355C5.54882 6.15829 5.54882 5.84171 5.35355 5.64645L3.85355 4.14645ZM6.5 7C6.22386 7 6 7.22386 6 7.5C6 7.77614 6.22386 8 6.5 8H8.5C8.77614 8 9 7.77614 9 7.5C9 7.22386 8.77614 7 8.5 7H6.5Z"
,
"fill"
:
"currentColor"
},
"children"
:
[]
}
]
}
]
},
"name"
:
"TerminalSquare"
}
\ No newline at end of file
web/app/components/base/icons/src/vender/solid/development/TerminalSquare.tsx
0 → 100644
View file @
4e5358b5
// GENERATE BY script
// DON NOT EDIT IT MANUALLY
import
*
as
React
from
'react'
import
data
from
'./TerminalSquare.json'
import
IconBase
from
'@/app/components/base/icons/IconBase'
import
type
{
IconBaseProps
,
IconData
}
from
'@/app/components/base/icons/IconBase'
const
Icon
=
React
.
forwardRef
<
React
.
MutableRefObject
<
SVGElement
>
,
Omit
<
IconBaseProps
,
'data'
>>
((
props
,
ref
,
)
=>
<
IconBase
{
...
props
}
ref=
{
ref
}
data=
{
data
as
IconData
}
/>)
export
default
Icon
web/app/components/base/icons/src/vender/solid/development/index.ts
View file @
4e5358b5
...
...
@@ -2,3 +2,4 @@ export { default as Container } from './Container'
export
{
default
as
Database02
}
from
'./Database02'
export
{
default
as
Database03
}
from
'./Database03'
export
{
default
as
PuzzlePiece01
}
from
'./PuzzlePiece01'
export
{
default
as
TerminalSquare
}
from
'./TerminalSquare'
web/app/components/base/icons/src/vender/solid/education/Beaker02.json
0 → 100644
View file @
4e5358b5
{
"icon"
:
{
"type"
:
"element"
,
"isRootNode"
:
true
,
"name"
:
"svg"
,
"attributes"
:
{
"width"
:
"12"
,
"height"
:
"12"
,
"viewBox"
:
"0 0 12 12"
,
"fill"
:
"none"
,
"xmlns"
:
"http://www.w3.org/2000/svg"
},
"children"
:
[
{
"type"
:
"element"
,
"name"
:
"g"
,
"attributes"
:
{
"id"
:
"beaker-02"
},
"children"
:
[
{
"type"
:
"element"
,
"name"
:
"path"
,
"attributes"
:
{
"id"
:
"Solid"
,
"fill-rule"
:
"evenodd"
,
"clip-rule"
:
"evenodd"
,
"d"
:
"M4.13856 0.500003H7.8617C7.92126 0.49998 7.99238 0.499953 8.05504 0.505073C8.12765 0.511005 8.23165 0.526227 8.34062 0.581751C8.48174 0.653656 8.59648 0.768392 8.66838 0.909513C8.72391 1.01849 8.73913 1.12248 8.74506 1.19509C8.75018 1.25775 8.75015 1.32888 8.75013 1.38844V2.61157C8.75015 2.67113 8.75018 2.74226 8.74506 2.80492C8.73913 2.87753 8.72391 2.98153 8.66838 3.0905C8.59648 3.23162 8.48174 3.34636 8.34062 3.41826C8.23165 3.47379 8.12765 3.48901 8.05504 3.49494C8.03725 3.49639 8.01877 3.49743 8.00006 3.49817V5.2506C8.00006 5.55312 8.00408 5.61265 8.01723 5.66153C8.03245 5.71807 8.05747 5.7715 8.09117 5.81939C8.1203 5.86078 8.16346 5.90197 8.39586 6.09564L10.2807 7.66627C10.4566 7.81255 10.6116 7.94145 10.7267 8.10509C10.8278 8.24875 10.9029 8.40904 10.9486 8.57867C11.0005 8.7719 11.0003 8.97351 11.0001 9.2023C11.0001 9.39886 11.0002 9.59542 11.0002 9.79198C11.0003 9.98232 11.0005 10.1463 10.9713 10.2927C10.853 10.8877 10.3878 11.3529 9.7928 11.4712C9.64637 11.5003 9.48246 11.5002 9.29211 11.5001H2.70822C2.51787 11.5002 2.35396 11.5003 2.20753 11.4712C1.98473 11.4269 1.78014 11.334 1.60515 11.2038C1.42854 11.0725 1.28221 10.9034 1.17753 10.7077C1.10892 10.5796 1.05831 10.4401 1.02899 10.2927C0.999862 10.1463 0.999992 9.98233 1.00014 9.79199C1.00014 9.59542 1.00006 9.39886 1.00003 9.20229C0.999794 8.97351 0.999584 8.7719 1.05157 8.57867C1.09721 8.40904 1.17229 8.24875 1.27338 8.10509C1.38855 7.94145 1.54356 7.81255 1.71947 7.66627L3.60427 6.09564C3.83667 5.90197 3.87983 5.86078 3.90896 5.81939C3.94266 5.7715 3.96768 5.71807 3.9829 5.66153C3.99605 5.61265 4.00006 5.55312 4.00006 5.2506V3.49817C3.9814 3.49743 3.96297 3.49639 3.94521 3.49494C3.8726 3.48901 3.76861 3.47379 3.65964 3.41826C3.51851 3.34636 3.40378 3.23162 3.33187 3.0905C3.27635 2.98153 3.26113 2.87753 3.25519 2.80492C3.25008 2.74226 3.2501 2.67113 3.25013 2.61158V1.38844C3.2501 1.32888 3.25008 1.25775 3.25519 1.19509C3.26113 1.12248 3.27635 1.01849 3.33187 0.909513C3.40378 0.768392 3.51851 0.653656 3.65964 0.581751C3.76861 0.526227 3.8726 0.511005 3.94521 0.505073C4.00787 0.499953 4.079 0.49998 4.13856 0.500003ZM9.11909 8.00004H2.88104L4.28066 6.83373C4.45657 6.68745 4.61158 6.55855 4.72675 6.39491C4.82784 6.25125 4.90292 6.09096 4.94856 5.92133C5.00054 5.7281 5.00033 5.52649 5.0001 5.29771L5.00006 3.50001H7.00006L7.00003 5.29771C6.99979 5.52649 6.99958 5.7281 7.05157 5.92133C7.09721 6.09096 7.17229 6.25125 7.27338 6.39491C7.38855 6.55855 7.54356 6.68745 7.71947 6.83373L9.11909 8.00004Z"
,
"fill"
:
"currentColor"
},
"children"
:
[]
}
]
}
]
},
"name"
:
"Beaker02"
}
\ No newline at end of file
web/app/components/base/icons/src/vender/solid/education/Beaker02.tsx
0 → 100644
View file @
4e5358b5
// GENERATE BY script
// DON NOT EDIT IT MANUALLY
import
*
as
React
from
'react'
import
data
from
'./Beaker02.json'
import
IconBase
from
'@/app/components/base/icons/IconBase'
import
type
{
IconBaseProps
,
IconData
}
from
'@/app/components/base/icons/IconBase'
const
Icon
=
React
.
forwardRef
<
React
.
MutableRefObject
<
SVGElement
>
,
Omit
<
IconBaseProps
,
'data'
>>
((
props
,
ref
,
)
=>
<
IconBase
{
...
props
}
ref=
{
ref
}
data=
{
data
as
IconData
}
/>)
export
default
Icon
web/app/components/base/icons/src/vender/solid/education/index.ts
0 → 100644
View file @
4e5358b5
export
{
default
as
Beaker02
}
from
'./Beaker02'
web/app/components/header/account-dropdown/index.tsx
View file @
4e5358b5
...
...
@@ -11,17 +11,12 @@ import Indicator from '../indicator'
import
AccountSetting
from
'../account-setting'
import
AccountAbout
from
'../account-about'
import
WorkplaceSelector
from
'./workplace-selector'
import
type
{
LangGeniusVersionResponse
,
UserProfileResponse
}
from
'@/models/common'
import
I18n
from
'@/context/i18n'
import
Avatar
from
'@/app/components/base/avatar'
import
{
logout
}
from
'@/service/common'
import
{
useAppContext
}
from
'@/context/app-context'
type
IAppSelectorProps
=
{
userProfile
:
UserProfileResponse
langeniusVersionInfo
:
LangGeniusVersionResponse
}
export
default
function
AppSelector
({
userProfile
,
langeniusVersionInfo
}:
IAppSelectorProps
)
{
export
default
function
AppSelector
()
{
const
itemClassName
=
`
flex items-center w-full h-10 px-3 text-gray-700 text-[14px]
rounded-lg font-normal hover:bg-gray-100 cursor-pointer
...
...
@@ -32,6 +27,7 @@ export default function AppSelector({ userProfile, langeniusVersionInfo }: IAppS
const
{
locale
}
=
useContext
(
I18n
)
const
{
t
}
=
useTranslation
()
const
{
userProfile
,
langeniusVersionInfo
}
=
useAppContext
()
const
handleLogout
=
async
()
=>
{
await
logout
({
...
...
web/app/components/header/app-nav/index.tsx
View file @
4e5358b5
'use client'
import
{
useCallback
,
useState
}
from
'react'
import
{
useTranslation
}
from
'react-i18next'
import
{
useParams
,
usePathname
}
from
'next/navigation'
...
...
web/app/components/header/dataset-nav/index.tsx
View file @
4e5358b5
'use client'
import
{
useCallback
}
from
'react'
import
{
useTranslation
}
from
'react-i18next'
import
{
useParams
,
useRouter
}
from
'next/navigation'
...
...
web/app/components/header/env-nav/index.tsx
0 → 100644
View file @
4e5358b5
'use client'
import
{
useTranslation
}
from
'react-i18next'
import
{
useAppContext
}
from
'@/context/app-context'
import
{
Beaker02
}
from
'@/app/components/base/icons/src/vender/solid/education'
import
{
TerminalSquare
}
from
'@/app/components/base/icons/src/vender/solid/development'
const
headerEnvClassName
:
{
[
k
:
string
]:
string
}
=
{
DEVELOPMENT
:
'bg-[#FEC84B] border-[#FDB022] text-[#93370D]'
,
TESTING
:
'bg-[#A5F0FC] border-[#67E3F9] text-[#164C63]'
,
}
const
EnvNav
=
()
=>
{
const
{
t
}
=
useTranslation
()
const
{
langeniusVersionInfo
}
=
useAppContext
()
const
showEnvTag
=
langeniusVersionInfo
.
current_env
===
'TESTING'
||
langeniusVersionInfo
.
current_env
===
'DEVELOPMENT'
if
(
!
showEnvTag
)
return
null
return
(
<
div
className=
{
`
flex items-center h-[22px] mr-4 rounded-md px-2 text-xs font-medium border
${headerEnvClassName[langeniusVersionInfo.current_env]}
`
}
>
{
langeniusVersionInfo
.
current_env
===
'TESTING'
&&
(
<>
<
Beaker02
className=
'w-3 h-3 mr-1'
/>
{
t
(
'common.environment.testing'
)
}
</>
)
}
{
langeniusVersionInfo
.
current_env
===
'DEVELOPMENT'
&&
(
<>
<
TerminalSquare
className=
'w-3 h-3 mr-1'
/>
{
t
(
'common.environment.development'
)
}
</>
)
}
</
div
>
)
}
export
default
EnvNav
web/app/components/header/explore-nav/index.tsx
0 → 100644
View file @
4e5358b5
'use client'
import
{
useTranslation
}
from
'react-i18next'
import
Link
from
'next/link'
import
{
useSelectedLayoutSegment
}
from
'next/navigation'
import
classNames
from
'classnames'
import
{
Grid01
}
from
'@/app/components/base/icons/src/vender/line/layout'
import
{
Grid01
as
Grid01Solid
}
from
'@/app/components/base/icons/src/vender/solid/layout'
type
ExploreNavProps
=
{
className
?:
string
}
const
ExploreNav
=
({
className
,
}:
ExploreNavProps
)
=>
{
const
{
t
}
=
useTranslation
()
const
selectedSegment
=
useSelectedLayoutSegment
()
const
actived
=
selectedSegment
===
'explore'
return
(
<
Link
href=
"/explore/apps"
className=
{
classNames
(
className
,
'group'
,
actived
&&
'bg-white shadow-[0_2px_5px_-1px_rgba(0,0,0,0.05),0_2px_4px_-2px_rgba(0,0,0,0.05)]'
,
actived
?
'text-primary-600'
:
'text-gray-500 hover:bg-gray-200'
,
)
}
>
{
actived
?
<
Grid01Solid
className=
'mr-2 w-4 h-4'
/>
:
<
Grid01
className=
'mr-2 w-4 h-4'
/>
}
{
t
(
'common.menus.explore'
)
}
</
Link
>
)
}
export
default
ExploreNav
web/app/components/header/github-star/index.module.css
0 → 100644
View file @
4e5358b5
.github-icon
{
width
:
18px
;
height
:
18px
;
background
:
url(../assets/github-icon.svg)
center
center
no-repeat
;
background-size
:
contain
;
}
\ No newline at end of file
web/app/components/header/github-star/index.tsx
0 → 100644
View file @
4e5358b5
import
s
from
'./index.module.css'
import
type
{
GithubRepo
}
from
'@/models/common'
const
getStar
=
async
()
=>
{
const
res
=
await
fetch
(
'https://api.github.com/repos/langgenius/dify'
)
if
(
!
res
.
ok
)
throw
new
Error
(
'Failed to fetch data'
)
return
res
.
json
()
}
const
GithubStar
=
async
()
=>
{
const
githubRepo
:
GithubRepo
=
await
getStar
()
if
(
!
githubRepo
.
stargazers_count
)
return
null
return
(
<
a
href=
'https://github.com/langgenius/dify'
target=
'_blank'
className=
'flex items-center leading-[18px] border border-gray-200 rounded-md text-xs text-gray-700 font-semibold overflow-hidden'
>
<
div
className=
'flex items-center px-2 py-1 bg-gray-100'
>
<
div
className=
{
`${s['github-icon']} mr-1 rounded-full`
}
/>
Star
</
div
>
<
div
className=
'px-2 py-1 bg-white border-l border-gray-200'
>
{
`${githubRepo.stargazers_count}`
.
replace
(
/
\B(?=(\d
{3}
)
+
(?!\d))
/g
,
','
)
}
</
div
>
</
a
>
)
}
export
default
GithubStar
web/app/components/header/index.tsx
View file @
4e5358b5
'use client'
import
{
useEffect
,
useState
}
from
'react'
import
{
useTranslation
}
from
'react-i18next'
import
{
usePathname
,
useSelectedLayoutSegment
}
from
'next/navigation'
// 'use client'
// import { useEffect, useState } from 'react'
import
classNames
from
'classnames'
import
{
CommandLineIcon
}
from
'@heroicons/react/24/solid'
import
Link
from
'next/link'
import
AccountDropdown
from
'./account-dropdown'
import
AppNav
from
'./app-nav'
import
DatasetNav
from
'./dataset-nav'
import
EnvNav
from
'./env-nav'
import
ExploreNav
from
'./explore-nav'
import
GithubStar
from
'./github-star'
import
PluginNav
from
'./plugin-nav'
import
s
from
'./index.module.css'
import
type
{
GithubRepo
}
from
'@/models/common'
//
import type { GithubRepo } from '@/models/common'
import
{
WorkspaceProvider
}
from
'@/context/workspace-context'
import
{
useAppContext
}
from
'@/context/app-context'
import
{
Grid01
}
from
'@/app/components/base/icons/src/vender/line/layout'
import
{
Grid01
as
Grid01Solid
}
from
'@/app/components/base/icons/src/vender/solid/layout'
import
{
PuzzlePiece01
}
from
'@/app/components/base/icons/src/vender/line/development'
import
{
PuzzlePiece01
as
PuzzlePiece01Solid
}
from
'@/app/components/base/icons/src/vender/solid/development'
const
navClassName
=
`
flex items-center relative mr-3 px-3 h-8 rounded-xl
font-medium text-sm
cursor-pointer
`
const
headerEnvClassName
:
{
[
k
:
string
]:
string
}
=
{
DEVELOPMENT
:
'bg-[#FEC84B] border-[#FDB022] text-[#93370D]'
,
TESTING
:
'bg-[#A5F0FC] border-[#67E3F9] text-[#164C63]'
,
}
const
Header
=
()
=>
{
const
{
t
}
=
useTranslation
()
const
pathname
=
usePathname
()
const
{
userProfile
,
langeniusVersionInfo
}
=
useAppContext
()
const
showEnvTag
=
langeniusVersionInfo
.
current_env
===
'TESTING'
||
langeniusVersionInfo
.
current_env
===
'DEVELOPMENT'
const
selectedSegment
=
useSelectedLayoutSegment
()
const
isPluginsComingSoon
=
selectedSegment
===
'plugins-coming-soon'
const
isExplore
=
selectedSegment
===
'explore'
const
[
starCount
,
setStarCount
]
=
useState
(
0
)
const
isBordered
=
[
'/apps'
,
'/datasets'
].
includes
(
pathname
)
// const pathname = usePathname()
// const { userProfile, langeniusVersionInfo } = useAppContext()
// const [starCount, setStarCount] = useState(0)
// const isBordered = ['/apps', '/datasets'].includes(pathname)
useEffect
(()
=>
{
globalThis
.
fetch
(
'https://api.github.com/repos/langgenius/dify'
).
then
(
res
=>
res
.
json
()).
then
((
data
:
GithubRepo
)
=>
{
setStarCount
(
data
.
stargazers_count
)
})
},
[])
//
useEffect(() => {
//
globalThis.fetch('https://api.github.com/repos/langgenius/dify').then(res => res.json()).then((data: GithubRepo) => {
//
setStarCount(data.stargazers_count)
//
})
//
}, [])
return
(
<
div
className=
{
classNames
(
'sticky top-0 left-0 right-0 z-20 flex bg-gray-100 grow-0 shrink-0 basis-auto h-14'
,
s
.
header
,
isBordered
?
'border-b border-gray-200'
:
''
,
//
isBordered ? 'border-b border-gray-200' : '',
)
}
>
<
div
className=
{
classNames
(
s
[
`header-${langeniusVersionInfo.current_env}`
],
//
s[`header-$
{
langeniusVersionInfo
.
current_env
}
`],
'flex flex-1 items-center justify-between px-4',
)
}
>
<
div
className=
'flex items-center'
>
<
Link
href=
"/apps"
className=
'flex items-center mr-4'
>
<
div
className=
{
s
.
logo
}
/>
</
Link
>
{
<
GithubStar
/>
{
/* {
starCount > 0 && (
<Link
href='https://github.com/langgenius/dify'
...
...
@@ -71,64 +60,18 @@ const Header = () => {
<div className='px-2 py-1 bg-white border-l border-gray-200'>{`${starCount}`.replace(/\B(?=(\d{3})+(?!\d))/g, ',')}</div>
</Link>
)
}
}
*/
}
</
div
>
<
div
className=
'flex items-center'
>
<
Link
href=
"/explore/apps"
className=
{
classNames
(
navClassName
,
'group'
,
isExplore
&&
'bg-white shadow-[0_2px_5px_-1px_rgba(0,0,0,0.05),0_2px_4px_-2px_rgba(0,0,0,0.05)]'
,
isExplore
?
'text-primary-600'
:
'text-gray-500 hover:bg-gray-200'
,
)
}
>
{
isExplore
?
<
Grid01Solid
className=
'mr-2 w-4 h-4'
/>
:
<
Grid01
className=
'mr-2 w-4 h-4'
/>
}
{
t
(
'common.menus.explore'
)
}
</
Link
>
<
ExploreNav
className=
{
navClassName
}
/>
<
AppNav
/>
<
Link
href=
"/plugins-coming-soon"
className=
{
classNames
(
navClassName
,
'group'
,
isPluginsComingSoon
&&
'bg-white shadow-[0_2px_5px_-1px_rgba(0,0,0,0.05),0_2px_4px_-2px_rgba(0,0,0,0.05)]'
,
isPluginsComingSoon
?
'text-primary-600'
:
'text-gray-500 hover:bg-gray-200'
,
)
}
>
{
isPluginsComingSoon
?
<
PuzzlePiece01Solid
className=
'mr-2 w-4 h-4'
/>
:
<
PuzzlePiece01
className=
'mr-2 w-4 h-4'
/>
}
{
t
(
'common.menus.plugins'
)
}
</
Link
>
<
PluginNav
className=
{
navClassName
}
/>
<
DatasetNav
/>
</
div
>
<
div
className=
'flex items-center flex-shrink-0'
>
{
showEnvTag
&&
(
<
div
className=
{
`
flex items-center h-[22px] mr-4 rounded-md px-2 text-xs font-medium border
${headerEnvClassName[langeniusVersionInfo.current_env]}
`
}
>
{
langeniusVersionInfo
.
current_env
===
'TESTING'
&&
(
<>
<
div
className=
{
s
[
'beaker-icon'
]
}
/>
{
t
(
'common.environment.testing'
)
}
</>
)
}
{
langeniusVersionInfo
.
current_env
===
'DEVELOPMENT'
&&
(
<>
<
CommandLineIcon
className=
'w-3 h-3 mr-1'
/>
{
t
(
'common.environment.development'
)
}
</>
)
}
</
div
>
)
}
<
EnvNav
/>
<
WorkspaceProvider
>
<
AccountDropdown
userProfile=
{
userProfile
}
langeniusVersionInfo=
{
langeniusVersionInfo
}
/>
<
AccountDropdown
/>
</
WorkspaceProvider
>
</
div
>
</
div
>
...
...
web/app/components/header/plugin-nav/index.tsx
0 → 100644
View file @
4e5358b5
'use client'
import
{
useTranslation
}
from
'react-i18next'
import
Link
from
'next/link'
import
{
useSelectedLayoutSegment
}
from
'next/navigation'
import
classNames
from
'classnames'
import
{
PuzzlePiece01
}
from
'@/app/components/base/icons/src/vender/line/development'
import
{
PuzzlePiece01
as
PuzzlePiece01Solid
}
from
'@/app/components/base/icons/src/vender/solid/development'
type
PluginNavProps
=
{
className
?:
string
}
const
PluginNav
=
({
className
,
}:
PluginNavProps
)
=>
{
const
{
t
}
=
useTranslation
()
const
selectedSegment
=
useSelectedLayoutSegment
()
const
isPluginsComingSoon
=
selectedSegment
===
'plugins-coming-soon'
return
(
<
Link
href=
"/plugins-coming-soon"
className=
{
classNames
(
className
,
'group'
,
isPluginsComingSoon
&&
'bg-white shadow-[0_2px_5px_-1px_rgba(0,0,0,0.05),0_2px_4px_-2px_rgba(0,0,0,0.05)]'
,
isPluginsComingSoon
?
'text-primary-600'
:
'text-gray-500 hover:bg-gray-200'
,
)
}
>
{
isPluginsComingSoon
?
<
PuzzlePiece01Solid
className=
'mr-2 w-4 h-4'
/>
:
<
PuzzlePiece01
className=
'mr-2 w-4 h-4'
/>
}
{
t
(
'common.menus.plugins'
)
}
</
Link
>
)
}
export
default
PluginNav
web/context/app-context.tsx
View file @
4e5358b5
...
...
@@ -65,7 +65,7 @@ export const AppContextProvider: FC<AppContextProviderProps> = ({ children }) =>
const
result
=
await
userProfileResponse
.
json
()
setUserProfile
(
result
)
const
current_version
=
userProfileResponse
.
headers
.
get
(
'x-version'
)
const
current_env
=
userProfileResponse
.
headers
.
get
(
'x-env'
)
const
current_env
=
process
.
env
.
NODE_ENV
===
'development'
?
'DEVELOPMENT'
:
userProfileResponse
.
headers
.
get
(
'x-env'
)
const
versionData
=
await
fetchLanggeniusVersion
({
url
:
'/version'
,
params
:
{
current_version
}
})
setLangeniusVersionInfo
({
...
versionData
,
current_version
,
latest_version
:
versionData
.
version
,
current_env
})
}
...
...
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