@ant-design/x
Version:
Craft AI-driven interfaces effortlessly
85 lines (82 loc) • 3.57 kB
JavaScript
import _extends from "@babel/runtime/helpers/esm/extends";
import { DislikeFilled, DislikeOutlined, LikeFilled, LikeOutlined } from '@ant-design/icons';
import pickAttrs from '@rc-component/util/lib/pickAttrs';
import { Tooltip } from 'antd';
import { clsx } from 'clsx';
import React from 'react';
import { useLocale } from "../locale";
import enUS from "../locale/en_US";
import { useXProviderContext } from "../x-provider";
import useStyle from "./style";
var FEEDBACK_VALUE = /*#__PURE__*/function (FEEDBACK_VALUE) {
FEEDBACK_VALUE["like"] = "like";
FEEDBACK_VALUE["dislike"] = "dislike";
FEEDBACK_VALUE["default"] = "default";
return FEEDBACK_VALUE;
}(FEEDBACK_VALUE || {});
const ActionsFeedback = props => {
const {
value = 'default',
onChange,
className,
style,
classNames = {},
styles = {},
prefixCls: customizePrefixCls,
rootClassName,
...otherHtmlProps
} = props;
const domProps = pickAttrs(otherHtmlProps, {
attr: true,
aria: true,
data: true
});
const [contextLocale] = useLocale('Actions', enUS.Actions);
// ============================ Prefix ============================
const {
direction,
getPrefixCls
} = useXProviderContext();
const prefixCls = getPrefixCls('actions', customizePrefixCls);
const [hashId, cssVarCls] = useStyle(prefixCls);
const feedbackCls = `${prefixCls}-feedback`;
// ============================ Classname ============================
const mergedCls = clsx(prefixCls, feedbackCls, hashId, cssVarCls, rootClassName, classNames.root, `${prefixCls}-list`, className, {
[`${feedbackCls}-rtl`]: direction === 'rtl'
});
const onFeedBacKClick = () => onChange?.(value === FEEDBACK_VALUE.dislike ? FEEDBACK_VALUE.default : FEEDBACK_VALUE.dislike);
return /*#__PURE__*/React.createElement("div", _extends({}, domProps, {
className: mergedCls,
style: {
...style,
...styles.root
}
}), [FEEDBACK_VALUE.default, FEEDBACK_VALUE.like].includes(value) && /*#__PURE__*/React.createElement(Tooltip, {
key: `like_${value}`,
title: contextLocale.feedbackLike
}, /*#__PURE__*/React.createElement("span", {
onClick: () => onChange?.(value === FEEDBACK_VALUE.like ? FEEDBACK_VALUE.default : FEEDBACK_VALUE.like),
style: {
...styles.like,
...(value === 'like' ? styles.liked : {})
},
className: clsx(`${feedbackCls}-item`, `${prefixCls}-item`, `${feedbackCls}-item-like`, classNames.like, {
[`${classNames.liked}`]: classNames.liked && value === 'like',
[`${feedbackCls}-item-like-active`]: value === 'like'
})
}, value === FEEDBACK_VALUE.like ? /*#__PURE__*/React.createElement(LikeFilled, null) : /*#__PURE__*/React.createElement(LikeOutlined, null))), [FEEDBACK_VALUE.default, FEEDBACK_VALUE.dislike].includes(value) && /*#__PURE__*/React.createElement(Tooltip, {
key: `dislike_${value}`,
title: contextLocale.feedbackDislike
}, /*#__PURE__*/React.createElement("span", {
onClick: onFeedBacKClick,
style: {
...styles.dislike,
...(value === 'dislike' ? styles.disliked : {})
},
className: clsx(`${feedbackCls}-item`, `${prefixCls}-item`, `${feedbackCls}-item-dislike`, classNames.dislike, {
[`${classNames.disliked}`]: classNames.disliked && value === 'dislike',
[`${feedbackCls}-item-dislike-active`]: value === 'dislike'
})
}, value === FEEDBACK_VALUE.dislike ? /*#__PURE__*/React.createElement(DislikeFilled, null) : /*#__PURE__*/React.createElement(DislikeOutlined, null))));
};
export default ActionsFeedback;