feat(CustomCollapse): enhance component with customizable styles and improve usage in EditModelsPopup

This commit is contained in:
kangfenmao 2025-04-12 15:57:50 +08:00
parent 8eb6632620
commit d4bf8da225
2 changed files with 24 additions and 8 deletions

View File

@ -1,4 +1,5 @@
import { Collapse } from 'antd' import { Collapse } from 'antd'
import { merge } from 'lodash'
import { FC, memo } from 'react' import { FC, memo } from 'react'
interface CustomCollapseProps { interface CustomCollapseProps {
@ -9,6 +10,11 @@ interface CustomCollapseProps {
defaultActiveKey?: string[] defaultActiveKey?: string[]
activeKey?: string[] activeKey?: string[]
collapsible?: 'header' | 'icon' | 'disabled' collapsible?: 'header' | 'icon' | 'disabled'
style?: React.CSSProperties
styles?: {
header?: React.CSSProperties
body?: React.CSSProperties
}
} }
const CustomCollapse: FC<CustomCollapseProps> = ({ const CustomCollapse: FC<CustomCollapseProps> = ({
@ -18,14 +24,17 @@ const CustomCollapse: FC<CustomCollapseProps> = ({
destroyInactivePanel = false, destroyInactivePanel = false,
defaultActiveKey = ['1'], defaultActiveKey = ['1'],
activeKey, activeKey,
collapsible = undefined collapsible = undefined,
style,
styles
}) => { }) => {
const CollapseStyle = { const defaultCollapseStyle = {
width: '100%', width: '100%',
background: 'transparent', background: 'transparent',
border: '0.5px solid var(--color-border)' border: '0.5px solid var(--color-border)'
} }
const CollapseItemStyles = {
const defaultCollapseItemStyles = {
header: { header: {
padding: '8px 16px', padding: '8px 16px',
alignItems: 'center', alignItems: 'center',
@ -38,17 +47,21 @@ const CustomCollapse: FC<CustomCollapseProps> = ({
borderTop: '0.5px solid var(--color-border)' borderTop: '0.5px solid var(--color-border)'
} }
} }
const collapseStyle = merge({}, defaultCollapseStyle, style)
const collapseItemStyles = merge({}, defaultCollapseItemStyles, styles)
return ( return (
<Collapse <Collapse
bordered={false} bordered={false}
style={CollapseStyle} style={collapseStyle}
defaultActiveKey={defaultActiveKey} defaultActiveKey={defaultActiveKey}
activeKey={activeKey} activeKey={activeKey}
destroyInactivePanel={destroyInactivePanel} destroyInactivePanel={destroyInactivePanel}
collapsible={collapsible} collapsible={collapsible}
items={[ items={[
{ {
styles: CollapseItemStyles, styles: collapseItemStyles,
key: '1', key: '1',
label, label,
extra, extra,

View File

@ -199,7 +199,8 @@ const PopupContainer: React.FC<Props> = ({ provider: _provider, resolve }) => {
return ( return (
<CustomCollapse <CustomCollapse
key={i} key={i}
defaultActiveKey={i >= 5 ? [] : ['1']} defaultActiveKey={['1']}
styles={{ body: { padding: '0 10px' } }}
label={ label={
<Flex align="center" gap={10}> <Flex align="center" gap={10}>
<span style={{ fontWeight: 600 }}>{group}</span> <span style={{ fontWeight: 600 }}>{group}</span>
@ -233,13 +234,15 @@ const PopupContainer: React.FC<Props> = ({ provider: _provider, resolve }) => {
/> />
</Tooltip> </Tooltip>
}> }>
<FlexColumn> <FlexColumn style={{ margin: '10px 0' }}>
{modelGroups[group].map((model) => ( {modelGroups[group].map((model) => (
<FileItem <FileItem
style={{ style={{
backgroundColor: isModelInProvider(provider, model.id) backgroundColor: isModelInProvider(provider, model.id)
? 'rgba(0, 126, 0, 0.06)' ? 'rgba(0, 126, 0, 0.06)'
: 'rgba(255, 255, 255, 0.04)' : 'rgba(255, 255, 255, 0.04)',
border: 'none',
boxShadow: 'none'
}} }}
key={model.id} key={model.id}
fileInfo={{ fileInfo={{