Skip to content

Commit 763e7be

Browse files
committed
[base-trigger,button,link] refactoring components, based on link
1 parent 571b636 commit 763e7be

File tree

8 files changed

+58
-287
lines changed

8 files changed

+58
-287
lines changed

pnpm-lock.yaml

Lines changed: 6 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

semcore/base-trigger/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@
2020
"@semcore/counter": "16.0.11",
2121
"@semcore/spin": "16.0.11",
2222
"@semcore/tooltip": "16.0.11",
23-
"@semcore/typography": "16.3.2"
23+
"@semcore/typography": "16.3.2",
24+
"@semcore/button": "16.0.12"
2425
},
2526
"peerDependencies": {
2627
"@semcore/base-components": "^17.0.0 || ^17.0.0-0",
Lines changed: 15 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -1,91 +1,51 @@
1-
import { Box } from '@semcore/base-components';
2-
import { createComponent, Component, Root, sstyled } from '@semcore/core';
1+
import { ButtonLink } from '@semcore/button';
2+
import { createComponent, Component, Root } from '@semcore/core';
33
import addonTextChildren from '@semcore/core/lib/utils/addonTextChildren';
4-
import resolveColorEnhance from '@semcore/core/lib/utils/enhances/resolveColorEnhance';
54
import ChevronDown from '@semcore/icon/ChevronDown/m';
65
import Spin from '@semcore/spin';
7-
import { Text as TextKit } from '@semcore/typography';
86
import React from 'react';
97

10-
import style from './style/link-trigger.shadow.css';
11-
128
class RootLinkTrigger extends Component {
139
static displayName = 'LinkTrigger';
14-
static style = style;
1510
static defaultProps = {
1611
size: 'm',
1712
};
1813

19-
static enhance = [resolveColorEnhance()];
20-
21-
triggerRef = React.createRef();
22-
23-
getTextProps() {
14+
getTextProps(props) {
2415
const { placeholder, empty } = this.asProps;
16+
const content = empty ? placeholder : props.children;
17+
2518
return {
26-
placeholder,
19+
'use:children': content,
2720
empty,
28-
triggerRef: this.triggerRef,
2921
};
3022
}
3123

3224
render() {
3325
const SLinkTrigger = Root;
3426
const SLinkAddon = LinkTrigger.Addon;
35-
const { Children, loading, styles, empty, color: providedColor, resolveColor } = this.asProps;
36-
37-
const color = resolveColor(providedColor);
27+
const { Children, loading, empty, size } = this.asProps;
3828

39-
return sstyled(styles)(
29+
return (
4030
<SLinkTrigger
41-
render={Box}
42-
tag='button'
43-
type='button'
31+
render={ButtonLink}
4432
tabIndex={loading ? -1 : 0}
45-
ref={this.triggerRef}
46-
use:color={color}
33+
use:size={size === 'l' ? 300 : 200}
4734
>
4835
{addonTextChildren(Children, LinkTrigger.Text, LinkTrigger.Addon, empty)}
4936
<SLinkAddon>
5037
{loading ? <Spin size='xs' theme='currentColor' /> : <ChevronDown />}
5138
</SLinkAddon>
52-
</SLinkTrigger>,
39+
</SLinkTrigger>
5340
);
5441
}
5542
}
5643

57-
function Text(props) {
58-
const SText = Root;
59-
const textRef = React.useRef();
60-
const { children, styles, empty, placeholder, triggerRef, ellipsis = false, hintProps } = props;
61-
const content = empty ? placeholder : children;
62-
63-
return sstyled(styles)(
64-
<>
65-
<SText
66-
render={TextKit}
67-
display-placeholder={empty}
68-
ref={textRef}
69-
ellipsis={ellipsis}
70-
hintProps={{
71-
...hintProps,
72-
triggerRef,
73-
}}
74-
>
75-
{content}
76-
</SText>
77-
</>,
78-
);
79-
}
80-
81-
function Addon(props) {
82-
const SAddon = Root;
83-
return sstyled(props.styles)(<SAddon render={Box} />);
84-
}
85-
8644
const LinkTrigger = createComponent(RootLinkTrigger, {
87-
Text,
88-
Addon,
45+
Text: ButtonLink.Text,
46+
Addon: ButtonLink.Addon,
47+
}, {
48+
parent: ButtonLink,
8949
});
9050

9151
export default LinkTrigger;

semcore/base-trigger/src/style/link-trigger.shadow.css

Lines changed: 0 additions & 96 deletions
This file was deleted.

semcore/button/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@
1818
},
1919
"dependencies": {
2020
"@semcore/spin": "16.0.11",
21-
"@semcore/typography": "16.3.2"
21+
"@semcore/typography": "16.3.2",
22+
"@semcore/link": "16.0.11"
2223
},
2324
"peerDependencies": {
2425
"@semcore/base-components": "^17.0.0 || ^17.0.0-0"
Lines changed: 20 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,35 @@
1-
import { Box } from '@semcore/base-components';
2-
import { createComponent, sstyled, Root } from '@semcore/core';
3-
import resolveColorEnhance from '@semcore/core/lib/utils/enhances/resolveColorEnhance';
4-
import { Text } from '@semcore/typography';
1+
import { createComponent, sstyled, Root, Component } from '@semcore/core';
2+
import Link from '@semcore/link';
53
import React from 'react';
64

75
import style from './buttonLink.shadow.css';
8-
import type { ButtonLinkAddonProps, ButtonLinkComponent, ButtonLinkTextProps } from './ButtonLink.type';
9-
import { AbstractButton } from '../AbstractButton/AbstractButton';
6+
import type { ButtonLinkComponent, ButtonLinkProps } from './ButtonLink.type';
107

11-
const enhance = {
12-
resolveColor: resolveColorEnhance(),
13-
};
14-
15-
class RootButtonLink extends AbstractButton {
8+
class RootButtonLink extends Component<ButtonLinkProps> {
169
static displayName = 'ButtonLink';
17-
static enhance = Object.values(enhance);
1810
static style = style;
1911
static defaultProps = {
2012
use: 'primary',
13+
size: 200,
2114
};
2215

23-
protected getTextColor(): string | undefined {
24-
const { color, resolveColor } = this.asProps as any;
25-
return resolveColor(color);
26-
}
27-
}
28-
29-
function LinkText(props: ButtonLinkTextProps) {
30-
const SText = Root;
31-
return sstyled(props.styles)(<SText render={Text} />);
32-
}
16+
render(): React.ReactNode {
17+
const SButtonLink = Root;
3318

34-
function Addon(props: ButtonLinkAddonProps) {
35-
const SAddon = Root;
36-
return sstyled(props.styles)(<SAddon render={Box} tag='span' />);
19+
return sstyled(style)(
20+
<SButtonLink
21+
render={Link}
22+
tag='button'
23+
role='button'
24+
type='button'
25+
/>,
26+
);
27+
}
3728
}
3829

3930
export const ButtonLink = createComponent(RootButtonLink, {
40-
Text: LinkText,
41-
Addon,
31+
Text: Link.Text,
32+
Addon: Link.Addon,
33+
}, {
34+
parent: Link,
4235
}) as ButtonLinkComponent;

0 commit comments

Comments
 (0)