Skip to content

Commit

Permalink
feat: rebase develop
Browse files Browse the repository at this point in the history
  • Loading branch information
[email protected] committed Aug 14, 2024
1 parent d1fb604 commit 76de3e9
Show file tree
Hide file tree
Showing 3 changed files with 155 additions and 160 deletions.
5 changes: 3 additions & 2 deletions src/_util/parseTNode.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
import isFunction from 'lodash/isFunction';
import React, { ReactElement, ReactNode } from 'react';
import log from '../_common/js/log';
import isFunction from 'lodash/isFunction';
import { TNode } from '../common';
import log from '../_common/js/log';


// 解析 TNode 数据结构
export default function parseTNode(
Expand Down
167 changes: 81 additions & 86 deletions src/tag/CheckTag.tsx
Original file line number Diff line number Diff line change
@@ -1,8 +1,5 @@
import classNames from 'classnames';
import React, {
forwardRef,
memo
} from 'react';
import React, { forwardRef } from 'react';
import { Icon } from 'tdesign-icons-react';
import parseTNode from 'tdesign-mobile-react/_util/parseTNode';
import { StyledProps } from 'tdesign-mobile-react/common';
Expand All @@ -12,99 +9,97 @@ import useDefaultProps from '../hooks/useDefaultProps';
import { checkTagDefaultProps } from "./defaultProps";
import { TdCheckTagProps } from './type';

export interface TagCheckProps extends TdCheckTagProps, StyledProps { }
export interface CheckTagProps extends TdCheckTagProps, StyledProps { }

const TagCheck = memo(
forwardRef<HTMLSpanElement, TagCheckProps>((originProps, ref) => {
const props = useDefaultProps(originProps, checkTagDefaultProps)
const {
checked,
defaultChecked,
content,
children,
style,
className,
icon,
disabled,
closable,
size,
shape,
variant,
onClick,
onChange,
onClose,
...otherProps
} = props;
const CheckTag = forwardRef<HTMLSpanElement, CheckTagProps>((originProps, ref) => {
const props = useDefaultProps(originProps, checkTagDefaultProps)
const {
checked,
defaultChecked,
content,
children,
style,
className,
icon,
disabled,
closable,
size,
shape,
variant,
onClick,
onChange,
onClose,
...otherProps
} = props;

const { classPrefix } = useConfig();
const { classPrefix } = useConfig();

const [innerChecked, onInnerChecked] = useDefault(checked, defaultChecked, onChange);
const [innerChecked, onInnerChecked] = useDefault(checked, defaultChecked, onChange);

const baseClass = `${classPrefix}-tag`;
const baseClass = `${classPrefix}-tag`;

const checkTagClass = classNames(
`${baseClass}`,
// `${baseClass}--checkable`,
`${baseClass}--${shape}`,
`${baseClass}--${innerChecked ? 'primary' : 'default'}`,
`${baseClass}--${size}`,
`${baseClass}--${variant}`,
const checkTagClass = classNames(
`${baseClass}`,
// `${baseClass}--checkable`,
`${baseClass}--${shape}`,
`${baseClass}--${innerChecked ? 'primary' : 'default'}`,
`${baseClass}--${size}`,
`${baseClass}--${variant}`,

{
[`${baseClass}--closable`]: closable,
[`${baseClass}--disabled`]: disabled,
[`${baseClass}--checked`]: !disabled && innerChecked,
},
className,
);
{
[`${baseClass}--closable`]: closable,
[`${baseClass}--disabled`]: disabled,
[`${baseClass}--checked`]: !disabled && innerChecked,
},
className,
);

const renderText = () => {
if (Array.isArray(content) && content.length === 2) {
return innerChecked ? content[0] : content[1];
}
return content;
const renderText = () => {
if (Array.isArray(content) && content.length === 2) {
return innerChecked ? content[0] : content[1];
}
return content;
}

const childNode = parseTNode(renderText()) || parseTNode(children)
const childNode = parseTNode(renderText()) || parseTNode(children)

const tagStyle = {
...style,
};
const tagStyle = {
...style,
};

const handleClick = (e) => {
if (!props.disabled) {
onClick?.(e);
onInnerChecked(!innerChecked);
}
};
const handleClick = (e) => {
if (!props.disabled) {
onClick?.(e);
onInnerChecked(!innerChecked);
}
};

const handleClose = (e) => {
e.stopPropagation();
if (!props.disabled) {
onClose?.({ e });
}
};
const handleClose = (e) => {
e.stopPropagation();
if (!props.disabled) {
onClose?.({ e });
}
};

return (
<span
ref={ref}
className={checkTagClass}
aria-disabled={disabled}
role="button"
onClick={handleClick}
style={tagStyle}
{...otherProps}
>
{icon && <span className={`${baseClass}__icon`}>{icon}</span>}
<span className={`${baseClass}__text`}>{childNode}</span>
{props.closable && (
<span className={`${baseClass}__icon-close`} onClick={handleClose}>
<Icon name="close" />
</span>
)}
</span>
);
}),
);
return (
<span
ref={ref}
className={checkTagClass}
aria-disabled={disabled}
role="button"
onClick={handleClick}
style={tagStyle}
{...otherProps}
>
{icon && <span className={`${baseClass}__icon`}>{icon}</span>}
<span className={`${baseClass}__text`}>{childNode}</span>
{props.closable && (
<span className={`${baseClass}__icon-close`} onClick={handleClose}>
<Icon name="close" />
</span>
)}
</span>
);
});

export default TagCheck;
export default CheckTag;
143 changes: 71 additions & 72 deletions src/tag/Tag.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import classNames from 'classnames';
import React, { forwardRef, memo } from 'react';
import React, { forwardRef } from 'react';
import { Icon } from 'tdesign-icons-react';
import parseTNode from 'tdesign-mobile-react/_util/parseTNode';
import { StyledProps } from 'tdesign-mobile-react/common';
Expand All @@ -10,83 +10,82 @@ import { TdTagProps } from './type';

export interface TagProps extends TdTagProps, StyledProps { }

const Tag = memo(
forwardRef<HTMLDivElement, TagProps>((originProps, ref) => {
const props = useDefaultProps(originProps, tagDefaultProps)
const {
className,
style,
closable,
content,
disabled,
icon,
maxWidth,
children,
shape,
size,
theme,
variant,
onClick,
onClose,
...otherProps
} = props;
const Tag = forwardRef<HTMLDivElement, TagProps>((originProps, ref) => {
const props = useDefaultProps(originProps, tagDefaultProps)
const {
className,
style,
closable,
content,
disabled,
icon,
maxWidth,
children,
shape,
size,
theme,
variant,
onClick,
onClose,
...otherProps
} = props;

const { classPrefix } = useConfig();
const baseClass = `${classPrefix}-tag`;
const { classPrefix } = useConfig();
const baseClass = `${classPrefix}-tag`;

const tagClassNames = classNames(
`${baseClass}`,
`${baseClass}--${theme}`,
`${baseClass}--${shape}`,
`${baseClass}--${variant}`,
`${baseClass}--${size}`,
{
[`${classPrefix}-is-closable ${baseClass}--closable`]: closable,
[`${classPrefix}-is-disabled ${baseClass}--disabled`]: disabled,
},
className,
);
const tagClassNames = classNames(
`${baseClass}`,
`${baseClass}--${theme}`,
`${baseClass}--${shape}`,
`${baseClass}--${variant}`,
`${baseClass}--${size}`,
{
[`${classPrefix}-is-closable ${baseClass}--closable`]: closable,
[`${classPrefix}-is-disabled ${baseClass}--disabled`]: disabled,
},
className,
);

const tagStyle = {
...style,
maxWidth: typeof maxWidth === 'number' ? `${maxWidth}px` : maxWidth,
};
const tagStyle = {
...style,
maxWidth: typeof maxWidth === 'number' ? `${maxWidth}px` : maxWidth,
};

const handleClose = (e) => {
e.stopPropagation();
if (!props.disabled) {
onClose?.({ e });
}
};
const handleClose = (e) => {
e.stopPropagation();
if (!props.disabled) {
onClose?.({ e });
}
};

const handleClick = (e) => {
if (disabled) {
return;
}
onClick?.({ e });
};
const handleClick = (e) => {
if (disabled) {
return;
}
onClick?.({ e });
};

const ChildNode = parseTNode(content) || parseTNode(children);
const ChildNode = parseTNode(content) || parseTNode(children);

return (
<span
className={tagClassNames}
style={tagStyle}
aria-disabled={props.disabled}
role="button"
onClick={handleClick}
ref={ref}
{...otherProps}
>
{icon && <span className={`${baseClass}__icon`}>{icon}</span>}
<span className={`${baseClass}__text`}>{ChildNode}</span>
{props.closable && (
<span className={`${baseClass}__icon-close`} onClick={handleClose}>
<Icon name="close" />
</span>
)}
</span>
)
}));
return (
<span
className={tagClassNames}
style={tagStyle}
aria-disabled={props.disabled}
role="button"
onClick={handleClick}
ref={ref}
{...otherProps}
>
{icon && <span className={`${baseClass}__icon`}>{icon}</span>}
<span className={`${baseClass}__text`}>{ChildNode}</span>
{props.closable && (
<span className={`${baseClass}__icon-close`} onClick={handleClose}>
<Icon name="close" />
</span>
)}
</span>
)
});

export default Tag;

0 comments on commit 76de3e9

Please sign in to comment.