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
3f25e7ec
Unverified
Commit
3f25e7ec
authored
Jan 11, 2024
by
crazywoola
Committed by
GitHub
Jan 11, 2024
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat: make default slider behavior better (#1988)
parent
1372bf78
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
109 additions
and
120 deletions
+109
-120
parameter-item.tsx
...el-provider-page/model-parameter-modal/parameter-item.tsx
+109
-120
No files found.
web/app/components/header/account-setting/model-provider-page/model-parameter-modal/parameter-item.tsx
View file @
3f25e7ec
...
@@ -12,6 +12,7 @@ import { SimpleSelect } from '@/app/components/base/select'
...
@@ -12,6 +12,7 @@ import { SimpleSelect } from '@/app/components/base/select'
import
TagInput
from
'@/app/components/base/tag-input'
import
TagInput
from
'@/app/components/base/tag-input'
export
type
ParameterValue
=
number
|
string
|
string
[]
|
boolean
|
undefined
export
type
ParameterValue
=
number
|
string
|
string
[]
|
boolean
|
undefined
type
ParameterItemProps
=
{
type
ParameterItemProps
=
{
parameterRule
:
ModelParameterRule
parameterRule
:
ModelParameterRule
value
?:
ParameterValue
value
?:
ParameterValue
...
@@ -28,48 +29,29 @@ const ParameterItem: FC<ParameterItemProps> = ({
...
@@ -28,48 +29,29 @@ const ParameterItem: FC<ParameterItemProps> = ({
})
=>
{
})
=>
{
const
language
=
useLanguage
()
const
language
=
useLanguage
()
const
[
localValue
,
setLocalValue
]
=
useState
(
value
)
const
[
localValue
,
setLocalValue
]
=
useState
(
value
)
const
mergedValue
=
isNullOrUndefined
(
value
)
?
localValue
:
value
const
getDefaultValue
=
()
=>
{
const
getDefaultValue
=
()
=>
{
let
defaultValue
:
ParameterValue
let
defaultValue
:
ParameterValue
if
(
parameterRule
.
type
===
'int'
||
parameterRule
.
type
===
'float'
)
{
if
(
parameterRule
.
type
===
'int'
||
parameterRule
.
type
===
'float'
)
if
(
isNullOrUndefined
(
parameterRule
.
default
))
{
defaultValue
=
isNullOrUndefined
(
parameterRule
.
default
)
?
(
parameterRule
.
min
||
0
)
:
parameterRule
.
default
if
(
parameterRule
.
min
)
else
if
(
parameterRule
.
type
===
'string'
)
defaultValue
=
parameterRule
.
min
defaultValue
=
parameterRule
.
options
?.
length
?
(
parameterRule
.
default
||
''
)
:
(
parameterRule
.
default
||
''
)
else
else
if
(
parameterRule
.
type
===
'boolean'
)
defaultValue
=
0
}
else
{
defaultValue
=
parameterRule
.
default
}
}
if
(
parameterRule
.
type
===
'string'
&&
!
parameterRule
.
options
?.
length
)
defaultValue
=
parameterRule
.
default
||
''
if
(
parameterRule
.
type
===
'string'
&&
parameterRule
.
options
?.
length
)
defaultValue
=
parameterRule
.
default
||
''
if
(
parameterRule
.
type
===
'boolean'
)
defaultValue
=
!
isNullOrUndefined
(
parameterRule
.
default
)
?
parameterRule
.
default
:
false
defaultValue
=
!
isNullOrUndefined
(
parameterRule
.
default
)
?
parameterRule
.
default
:
false
else
if
(
parameterRule
.
type
===
'tag'
)
if
(
parameterRule
.
type
===
'tag'
)
defaultValue
=
!
isNullOrUndefined
(
parameterRule
.
default
)
?
parameterRule
.
default
:
[]
defaultValue
=
!
isNullOrUndefined
(
parameterRule
.
default
)
?
parameterRule
.
default
:
[]
return
defaultValue
return
defaultValue
}
}
const
renderValue
=
isNullOrUndefined
(
mergedValue
)
?
getDefaultValue
()
:
mergedValue
const
handleChange
=
(
v
:
ParameterValue
)
=>
{
const
renderValue
=
value
??
localValue
??
getDefaultValue
()
setLocalValue
(
v
)
if
(
onChange
)
{
const
handleInputChange
=
(
newValue
:
ParameterValue
)
=>
{
if
(
parameterRule
.
name
===
'stop'
)
setLocalValue
(
newValue
)
onChange
(
v
)
else
if
(
!
isNullOrUndefined
(
value
))
if
(
onChange
&&
(
parameterRule
.
name
===
'stop'
||
!
isNullOrUndefined
(
value
)))
onChange
(
v
)
onChange
(
newValue
)
}
}
}
const
handleNumberInputChange
=
(
e
:
React
.
ChangeEvent
<
HTMLInputElement
>
)
=>
{
const
handleNumberInputChange
=
(
e
:
React
.
ChangeEvent
<
HTMLInputElement
>
)
=>
{
...
@@ -81,45 +63,127 @@ const ParameterItem: FC<ParameterItemProps> = ({
...
@@ -81,45 +63,127 @@ const ParameterItem: FC<ParameterItemProps> = ({
if
(
!
isNullOrUndefined
(
parameterRule
.
min
)
&&
num
<
parameterRule
.
min
!
)
if
(
!
isNullOrUndefined
(
parameterRule
.
min
)
&&
num
<
parameterRule
.
min
!
)
num
=
parameterRule
.
min
as
number
num
=
parameterRule
.
min
as
number
handleChange
(
num
)
handle
Input
Change
(
num
)
}
}
const
handleSlideChange
=
(
num
:
number
)
=>
{
const
handleSlideChange
=
(
num
:
number
)
=>
{
handleChange
(
num
)
handle
Input
Change
(
num
)
}
}
const
handleRadioChange
=
(
v
:
number
)
=>
{
const
handleRadioChange
=
(
v
:
number
)
=>
{
handleChange
(
v
===
1
)
handle
Input
Change
(
v
===
1
)
}
}
const
handleStringInputChange
=
(
e
:
React
.
ChangeEvent
<
HTMLInputElement
>
)
=>
{
const
handleStringInputChange
=
(
e
:
React
.
ChangeEvent
<
HTMLInputElement
>
)
=>
{
handleChange
(
e
.
target
.
value
)
handle
Input
Change
(
e
.
target
.
value
)
}
}
const
handleSelect
=
(
option
:
{
value
:
string
|
number
;
name
:
string
})
=>
{
const
handleSelect
=
(
option
:
{
value
:
string
|
number
;
name
:
string
})
=>
{
handleChange
(
option
.
value
)
handle
Input
Change
(
option
.
value
)
}
}
const
handleTagChange
=
(
newSequences
:
string
[])
=>
{
const
handleTagChange
=
(
newSequences
:
string
[])
=>
{
handleChange
(
newSequences
)
handle
Input
Change
(
newSequences
)
}
}
const
handleSwitch
=
(
checked
:
boolean
)
=>
{
const
handleSwitch
=
(
checked
:
boolean
)
=>
{
if
(
onSwitch
)
{
if
(
onSwitch
)
{
let
assignValue
:
ParameterValue
=
localValue
const
assignValue
:
ParameterValue
=
localValue
||
getDefaultValue
()
if
(
isNullOrUndefined
(
localValue
))
assignValue
=
getDefaultValue
()
onSwitch
(
checked
,
assignValue
)
onSwitch
(
checked
,
assignValue
)
}
}
}
}
const
numberInputWithSlide
=
(
parameterRule
.
type
===
'int'
||
parameterRule
.
type
===
'float'
)
const
renderInput
=
()
=>
{
const
numberInputWithSlide
=
(
parameterRule
.
type
===
'int'
||
parameterRule
.
type
===
'float'
)
&&
!
isNullOrUndefined
(
parameterRule
.
min
)
&&
!
isNullOrUndefined
(
parameterRule
.
min
)
&&
!
isNullOrUndefined
(
parameterRule
.
max
)
&&
!
isNullOrUndefined
(
parameterRule
.
max
)
const
numberInput
=
(
parameterRule
.
type
===
'int'
||
parameterRule
.
type
===
'float'
)
&&
(
isNullOrUndefined
(
parameterRule
.
min
)
||
isNullOrUndefined
(
parameterRule
.
max
))
if
(
parameterRule
.
type
===
'int'
||
parameterRule
.
type
===
'float'
)
{
let
step
=
100
if
(
parameterRule
.
max
)
{
if
(
parameterRule
.
max
<
10
)
step
=
0.1
else
if
(
parameterRule
.
max
<
100
)
step
=
1
else
if
(
parameterRule
.
max
<
1000
)
step
=
10
else
if
(
parameterRule
.
max
<
10000
)
step
=
100
}
return
(
<>
{
numberInputWithSlide
&&
<
Slider
className=
'w-[120px]'
value=
{
renderValue
as
number
}
min=
{
parameterRule
.
min
}
max=
{
parameterRule
.
max
}
step=
{
step
}
onChange=
{
handleSlideChange
}
/>
}
<
input
className=
'shrink-0 block ml-4 pl-3 w-16 h-8 appearance-none outline-none rounded-lg bg-gray-100 text-[13px] text-gra-900'
type=
'number'
max=
{
parameterRule
.
max
}
min=
{
parameterRule
.
min
}
step=
{
numberInputWithSlide
?
step
:
+
`0.${parameterRule.precision || 0}`
}
value=
{
renderValue
as
string
}
onChange=
{
handleNumberInputChange
}
/>
</>
)
}
if
(
parameterRule
.
type
===
'boolean'
)
{
return
(
<
Radio
.
Group
className=
'w-[200px] flex items-center'
value=
{
renderValue
?
1
:
0
}
onChange=
{
handleRadioChange
}
>
<
Radio
value=
{
1
}
className=
'!mr-1 w-[94px]'
>
True
</
Radio
>
<
Radio
value=
{
0
}
className=
'w-[94px]'
>
False
</
Radio
>
</
Radio
.
Group
>
)
}
if
(
parameterRule
.
type
===
'string'
&&
!
parameterRule
.
options
?.
length
)
{
return
(
<
input
className=
'flex items-center px-3 w-[200px] h-8 appearance-none outline-none rounded-lg bg-gray-100 text-[13px] text-gra-900'
value=
{
renderValue
as
string
}
onChange=
{
handleStringInputChange
}
/>
)
}
if
(
parameterRule
.
type
===
'string'
&&
!!
parameterRule
?.
options
?.
length
)
{
return
(
<
SimpleSelect
className=
'!py-0'
wrapperClassName=
'!w-[200px] !h-8'
defaultValue=
{
renderValue
as
string
}
onSelect=
{
handleSelect
}
items=
{
parameterRule
.
options
.
map
(
option
=>
({
value
:
option
,
name
:
option
}))
}
/>
)
}
if
(
parameterRule
.
type
===
'tag'
)
{
return
(
<
div
className=
'w-[200px]'
>
<
TagInput
items=
{
renderValue
as
string
[]
}
onChange=
{
handleTagChange
}
customizedConfirmKey=
'Tab'
/>
</
div
>
)
}
return
null
}
return
(
return
(
<
div
className=
{
`flex items-center justify-between ${className}`
}
>
<
div
className=
{
`flex items-center justify-between ${className}`
}
>
...
@@ -161,82 +225,7 @@ const ParameterItem: FC<ParameterItemProps> = ({
...
@@ -161,82 +225,7 @@ const ParameterItem: FC<ParameterItemProps> = ({
)
)
}
}
</
div
>
</
div
>
{
{
renderInput
()
}
numberInputWithSlide
&&
(
<
div
className=
'flex items-center'
>
<
Slider
className=
'w-[120px]'
value=
{
renderValue
as
number
}
min=
{
parameterRule
.
min
}
max=
{
parameterRule
.
max
}
step=
{
+
`0.${parameterRule.precision || 0}`
}
onChange=
{
handleSlideChange
}
/>
<
input
className=
'shrink-0 block ml-4 pl-3 w-16 h-8 appearance-none outline-none rounded-lg bg-gray-100 text-[13px] text-gra-900'
type=
'number'
max=
{
parameterRule
.
max
}
min=
{
parameterRule
.
min
}
step=
{
+
`0.${parameterRule.precision || 0}`
}
value=
{
renderValue
as
string
}
onChange=
{
handleNumberInputChange
}
/>
</
div
>
)
}
{
parameterRule
.
type
===
'boolean'
&&
(
<
Radio
.
Group
className=
'w-[200px] flex items-center'
value=
{
renderValue
?
1
:
0
}
onChange=
{
handleRadioChange
}
>
<
Radio
value=
{
1
}
className=
'!mr-1 w-[94px]'
>
True
</
Radio
>
<
Radio
value=
{
0
}
className=
'w-[94px]'
>
False
</
Radio
>
</
Radio
.
Group
>
)
}
{
numberInput
&&
(
<
input
type=
'number'
className=
'flex items-center px-3 w-[200px] h-8 appearance-none outline-none rounded-lg bg-gray-100 text-[13px] text-gra-900'
value=
{
renderValue
as
string
}
onChange=
{
handleNumberInputChange
}
/>
)
}
{
parameterRule
.
type
===
'string'
&&
!
parameterRule
.
options
?.
length
&&
(
<
input
className=
'flex items-center px-3 w-[200px] h-8 appearance-none outline-none rounded-lg bg-gray-100 text-[13px] text-gra-900'
value=
{
renderValue
as
string
}
onChange=
{
handleStringInputChange
}
/>
)
}
{
parameterRule
.
type
===
'string'
&&
!!
parameterRule
?.
options
?.
length
&&
(
<
SimpleSelect
className=
'!py-0'
wrapperClassName=
'!w-[200px] !h-8'
defaultValue=
{
renderValue
as
string
}
onSelect=
{
handleSelect
}
items=
{
parameterRule
.
options
.
map
(
option
=>
({
value
:
option
,
name
:
option
}))
}
/>
)
}
{
parameterRule
.
type
===
'tag'
&&
(
<
div
className=
'w-[200px]'
>
<
TagInput
items=
{
renderValue
as
string
[]
}
onChange=
{
handleTagChange
}
customizedConfirmKey=
'Tab'
/>
</
div
>
)
}
</
div
>
</
div
>
)
)
}
}
...
...
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