51 lines
1.5 KiB
TypeScript
51 lines
1.5 KiB
TypeScript
import { AllI18nKeys, I18N } from "@Component/Localization/Localization";
|
|
import { useSettingWithEvent, IMixinSettingProps, Themes, Language } from "@Context/Setting";
|
|
import { FunctionComponent } from "react";
|
|
import "./Message.scss";
|
|
|
|
interface IMessageProps {
|
|
i18nKey?: AllI18nKeys;
|
|
text?: string;
|
|
options?: Record<string, string>;
|
|
className?: string;
|
|
isTitle?: boolean;
|
|
first?: boolean;
|
|
}
|
|
|
|
const MessageView: FunctionComponent<IMessageProps & IMixinSettingProps> = (props) => {
|
|
|
|
let theme = props.setting ? props.setting.themes : Themes.dark;
|
|
let language: Language = props.setting ? props.setting.language : "EN_US";
|
|
let classList: string[] = [
|
|
"panel-error-message",
|
|
theme === Themes.dark ? "dark" : "light",
|
|
];
|
|
|
|
if (props.first) {
|
|
classList.push("first");
|
|
}
|
|
|
|
if (props.isTitle) {
|
|
classList.push("title");
|
|
classList.push("font-lvl3");
|
|
}
|
|
|
|
if (props.className) {
|
|
classList.push(props.className);
|
|
}
|
|
|
|
return <div className={classList.join(" ")}>
|
|
{
|
|
props.text ?
|
|
<span className={language}>{props.text}</span> :
|
|
props.i18nKey ?
|
|
<span className={language}>{
|
|
I18N(language, props.i18nKey, props.options)
|
|
}</span> :
|
|
null
|
|
}
|
|
</div>
|
|
}
|
|
|
|
const Message = useSettingWithEvent("language", "themes")(MessageView);
|
|
export { Message }; |