mirror of
https://github.com/Tencent/tdesign-react.git
synced 2024-10-23 08:33:49 +08:00
feat: 删除无用依赖 (merge request !386)
Squash merge branch 'feat/package/dependent' into 'develop'
This commit is contained in:
parent
6006681f21
commit
4e6be2047e
@ -27,8 +27,13 @@ module.exports = {
|
||||
},
|
||||
},
|
||||
rules: {
|
||||
"no-use-before-define": "off",
|
||||
'@typescript-eslint/explicit-module-boundary-types': 'off',
|
||||
'@typescript-eslint/ban-types': 'off',
|
||||
'@typescript-eslint/explicit-function-return-type': 'off',
|
||||
'@typescript-eslint/indent': ['off', 2],
|
||||
'@typescript-eslint/ban-ts-comment': 'off',
|
||||
'@typescript-eslint/camelcase': 'off',
|
||||
'@typescript-eslint/no-empty-interface': 'error', // codecc
|
||||
'@typescript-eslint/no-explicit-any': 'off',
|
||||
'@typescript-eslint/no-use-before-define': ['error', { functions: false }],
|
||||
|
@ -1 +1 @@
|
||||
Subproject commit 16214a3347e9cf804c039c80b9950650b030376f
|
||||
Subproject commit 4c37cc51208719103cfde15580733c1d8e784824
|
@ -28,6 +28,131 @@ import {
|
||||
// types
|
||||
import { InputContentProps, InnerContentProps, ContentProps, SuffixIconProps, TreeNode } from '../interface';
|
||||
|
||||
/**
|
||||
* SuffixIcon component
|
||||
*/
|
||||
|
||||
const SuffixIcon = (props: SuffixIconProps) => {
|
||||
const {
|
||||
cascaderContext,
|
||||
listeners: { onChange },
|
||||
closeShow,
|
||||
fakeArrowIconClass,
|
||||
closeIconClass,
|
||||
} = props;
|
||||
const { visible, disabled, size } = cascaderContext;
|
||||
|
||||
const closeIconClick = (e: React.MouseEvent) => {
|
||||
e.stopPropagation();
|
||||
|
||||
closeIconClickEffect(cascaderContext, onChange);
|
||||
};
|
||||
|
||||
if (closeShow) {
|
||||
return <CloseCircleFilledIcon className={closeIconClass} onClick={closeIconClick} size={size} />;
|
||||
}
|
||||
|
||||
return <FakeArrow overlayClassName={fakeArrowIconClass} isActive={visible} disabled={disabled} />;
|
||||
};
|
||||
|
||||
const InnerContent: React.FC<InnerContentProps> = (props: InnerContentProps) => {
|
||||
const { cascaderContext, listeners, placeholder, collapsedItems } = props;
|
||||
const { classPrefix: prefix } = useConfig();
|
||||
const { multiple, size, disabled, filterable, setFilterActive, visible, inputVal, setInputVal, minCollapsedNum } =
|
||||
cascaderContext;
|
||||
const { onFocus, onBlur, onRemove } = listeners;
|
||||
|
||||
// single select content
|
||||
const singleContent = useMemo(() => getSingleContent(cascaderContext), [cascaderContext]);
|
||||
|
||||
// multiple select content
|
||||
const multipleContent = useMemo(() => getMultipleContent(cascaderContext), [cascaderContext]);
|
||||
|
||||
const renderSelfTag = (node: TreeNode, index: number) => (
|
||||
<Tag
|
||||
closable
|
||||
key={index}
|
||||
disabled={disabled}
|
||||
onClose={(ctx) => {
|
||||
ctx.e.stopPropagation();
|
||||
handleRemoveTagEffect(cascaderContext, node, onRemove);
|
||||
}}
|
||||
size={size}
|
||||
>
|
||||
{node.label}
|
||||
</Tag>
|
||||
);
|
||||
|
||||
const generalContent = !multiple ? (
|
||||
<span className={`${prefix}-cascader-content`}>{singleContent}</span>
|
||||
) : (
|
||||
<>
|
||||
{minCollapsedNum > 0 && multipleContent.length > minCollapsedNum ? (
|
||||
<>
|
||||
{multipleContent.slice(0, minCollapsedNum).map((node: TreeNode, index: number) => renderSelfTag(node, index))}
|
||||
{!collapsedItems ? (
|
||||
<Tag size={size} disabled={disabled}>
|
||||
+{multipleContent.length - minCollapsedNum}
|
||||
</Tag>
|
||||
) : (
|
||||
collapsedItems
|
||||
)}
|
||||
</>
|
||||
) : (
|
||||
multipleContent.map((node: TreeNode, index: number) => renderSelfTag(node, index))
|
||||
)}
|
||||
</>
|
||||
);
|
||||
|
||||
const inputPlaceholder = multiple ? multipleContent.map((node) => node.label).join('、') : singleContent;
|
||||
|
||||
const filterContent = (
|
||||
<Input
|
||||
placeholder={inputPlaceholder || placeholder}
|
||||
value={inputVal}
|
||||
onChange={(value: string) => {
|
||||
setInputVal(value);
|
||||
setFilterActive(!!value);
|
||||
}}
|
||||
autofocus
|
||||
onFocus={(v, context) => isFunction(onFocus) && onFocus({ inputVal, e: context?.e })}
|
||||
onBlur={(v, context) => isFunction(onBlur) && onBlur({ inputVal, e: context?.e })}
|
||||
/>
|
||||
);
|
||||
|
||||
const showFilter = useMemo(() => filterable && visible, [filterable, visible]);
|
||||
return showFilter ? filterContent : generalContent;
|
||||
};
|
||||
|
||||
const Content: React.FC<ContentProps> = (props: ContentProps) => {
|
||||
const { placeholder, cascaderContext, listeners, isHover, collapsedItems } = props;
|
||||
const { classPrefix: prefix } = useConfig();
|
||||
|
||||
// single select content
|
||||
const singleContent = useMemo(() => getSingleContent(cascaderContext), [cascaderContext]);
|
||||
|
||||
// multiple select content
|
||||
const multipleContent = useMemo(() => getMultipleContent(cascaderContext), [cascaderContext]);
|
||||
|
||||
const showPlaceholder = useMemo(
|
||||
() => getPlaceholderShow(cascaderContext, singleContent, multipleContent),
|
||||
[cascaderContext, singleContent, multipleContent],
|
||||
);
|
||||
|
||||
const content = !showPlaceholder ? (
|
||||
<InnerContent
|
||||
isHover={isHover}
|
||||
cascaderContext={cascaderContext}
|
||||
listeners={listeners}
|
||||
collapsedItems={collapsedItems}
|
||||
placeholder={placeholder}
|
||||
/>
|
||||
) : (
|
||||
<span className={`${prefix}-cascader-placeholder`}>{placeholder || '请选择'}</span>
|
||||
);
|
||||
return content;
|
||||
};
|
||||
|
||||
const InputContent: React.FC<InputContentProps> = (props: InputContentProps) => {
|
||||
const { cascaderContext, className, style, placeholder, listeners, collapsedItems } = props;
|
||||
|
||||
@ -103,129 +228,4 @@ const InputContent: React.FC<InputContentProps> = (props: InputContentProps) =>
|
||||
);
|
||||
};
|
||||
|
||||
/**
|
||||
* SuffixIcon component
|
||||
*/
|
||||
|
||||
const SuffixIcon = (props: SuffixIconProps) => {
|
||||
const {
|
||||
cascaderContext,
|
||||
listeners: { onChange },
|
||||
closeShow,
|
||||
fakeArrowIconClass,
|
||||
closeIconClass,
|
||||
} = props;
|
||||
const { visible, disabled, size } = cascaderContext;
|
||||
|
||||
const closeIconClick = (e: React.MouseEvent) => {
|
||||
e.stopPropagation();
|
||||
|
||||
closeIconClickEffect(cascaderContext, onChange);
|
||||
};
|
||||
|
||||
if (closeShow) {
|
||||
return <CloseCircleFilledIcon className={closeIconClass} onClick={closeIconClick} size={size} />;
|
||||
}
|
||||
|
||||
return <FakeArrow overlayClassName={fakeArrowIconClass} isActive={visible} disabled={disabled} />;
|
||||
};
|
||||
|
||||
const Content: React.FC<ContentProps> = (props: ContentProps) => {
|
||||
const { placeholder, cascaderContext, listeners, isHover, collapsedItems } = props;
|
||||
const { classPrefix: prefix } = useConfig();
|
||||
|
||||
// single select content
|
||||
const singleContent = useMemo(() => getSingleContent(cascaderContext), [cascaderContext]);
|
||||
|
||||
// multiple select content
|
||||
const multipleContent = useMemo(() => getMultipleContent(cascaderContext), [cascaderContext]);
|
||||
|
||||
const showPlaceholder = useMemo(
|
||||
() => getPlaceholderShow(cascaderContext, singleContent, multipleContent),
|
||||
[cascaderContext, singleContent, multipleContent],
|
||||
);
|
||||
|
||||
const content = !showPlaceholder ? (
|
||||
<InnerContent
|
||||
isHover={isHover}
|
||||
cascaderContext={cascaderContext}
|
||||
listeners={listeners}
|
||||
collapsedItems={collapsedItems}
|
||||
placeholder={placeholder}
|
||||
/>
|
||||
) : (
|
||||
<span className={`${prefix}-cascader-placeholder`}>{placeholder || '请选择'}</span>
|
||||
);
|
||||
return content;
|
||||
};
|
||||
|
||||
const InnerContent: React.FC<InnerContentProps> = (props: InnerContentProps) => {
|
||||
const { cascaderContext, listeners, placeholder, collapsedItems } = props;
|
||||
const { classPrefix: prefix } = useConfig();
|
||||
const { multiple, size, disabled, filterable, setFilterActive, visible, inputVal, setInputVal, minCollapsedNum } =
|
||||
cascaderContext;
|
||||
const { onFocus, onBlur, onRemove } = listeners;
|
||||
|
||||
// single select content
|
||||
const singleContent = useMemo(() => getSingleContent(cascaderContext), [cascaderContext]);
|
||||
|
||||
// multiple select content
|
||||
const multipleContent = useMemo(() => getMultipleContent(cascaderContext), [cascaderContext]);
|
||||
|
||||
const renderSelfTag = (node: TreeNode, index: number) => (
|
||||
<Tag
|
||||
closable
|
||||
key={index}
|
||||
disabled={disabled}
|
||||
onClose={(ctx) => {
|
||||
ctx.e.stopPropagation();
|
||||
handleRemoveTagEffect(cascaderContext, node, onRemove);
|
||||
}}
|
||||
size={size}
|
||||
>
|
||||
{node.label}
|
||||
</Tag>
|
||||
);
|
||||
|
||||
const generalContent = !multiple ? (
|
||||
<span className={`${prefix}-cascader-content`}>{singleContent}</span>
|
||||
) : (
|
||||
<>
|
||||
{minCollapsedNum > 0 && multipleContent.length > minCollapsedNum ? (
|
||||
<>
|
||||
{multipleContent.slice(0, minCollapsedNum).map((node: TreeNode, index: number) => renderSelfTag(node, index))}
|
||||
{!collapsedItems ? (
|
||||
<Tag size={size} disabled={disabled}>
|
||||
+{multipleContent.length - minCollapsedNum}
|
||||
</Tag>
|
||||
) : (
|
||||
collapsedItems
|
||||
)}
|
||||
</>
|
||||
) : (
|
||||
multipleContent.map((node: TreeNode, index: number) => renderSelfTag(node, index))
|
||||
)}
|
||||
</>
|
||||
);
|
||||
|
||||
const inputPlaceholder = multiple ? multipleContent.map((node) => node.label).join('、') : singleContent;
|
||||
|
||||
const filterContent = (
|
||||
<Input
|
||||
placeholder={inputPlaceholder || placeholder}
|
||||
value={inputVal}
|
||||
onChange={(value: string) => {
|
||||
setInputVal(value);
|
||||
setFilterActive(!!value);
|
||||
}}
|
||||
autofocus
|
||||
onFocus={(v, context) => isFunction(onFocus) && onFocus({ inputVal, e: context?.e })}
|
||||
onBlur={(v, context) => isFunction(onBlur) && onBlur({ inputVal, e: context?.e })}
|
||||
/>
|
||||
);
|
||||
|
||||
const showFilter = useMemo(() => filterable && visible, [filterable, visible]);
|
||||
return showFilter ? filterContent : generalContent;
|
||||
};
|
||||
|
||||
export default InputContent;
|
||||
|
@ -17,7 +17,7 @@ const DatePickerTable = (props: DatePickerTableProps) => {
|
||||
const { type, data, onCellClick, onCellMouseEnter, firstDayOfWeek } = props;
|
||||
|
||||
const [local, t] = useLocaleReceiver('datePicker');
|
||||
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
|
||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||
// @ts-ignore
|
||||
const shorthand = t(local.weekdays.shorthand);
|
||||
|
||||
|
@ -29,7 +29,7 @@ const DropdownMenu = (props: DropdownProps) => {
|
||||
props.onClick(data, context);
|
||||
};
|
||||
const renderDropdownColumn = (children: Array<DropdownOption>, showSubmenu: boolean, pathPrefix: string) => {
|
||||
// eslint-disable-next-line @typescript-eslint/camelcase
|
||||
// eslint-disable-next-line
|
||||
const menuClass = [`${dropdownMenuClass}__column`, 'narrow-scrollbar', { submenu__visible: showSubmenu }];
|
||||
return (
|
||||
<div
|
||||
|
@ -146,7 +146,7 @@ function renderElement(theme, config: MessageOptions): Promise<MessageInstance>
|
||||
});
|
||||
}
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
|
||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||
// @ts-ignore
|
||||
// :todo 需要 api 定义完全的 message 格式,否则用户使用时没法得到 message.info 的提示.
|
||||
const Message: MessageProps = MessageComponent;
|
||||
|
@ -192,7 +192,7 @@ const renderNotification = (theme: NotificationThemeList, options: NotificationI
|
||||
return fetchListInstance(placement, attach, zIndex).then((listInstance) => listInstance.push(theme, options));
|
||||
};
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
|
||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||
// @ts-ignore
|
||||
const Notification: Notification = NotificationComponent;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user