index.tsx 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. "use client";
  2. import action from "@/components/Header/action";
  3. import { useRouter } from "@/i18n/routing";
  4. import { commonMask } from "@/utils";
  5. import { CenterPopup } from "antd-mobile";
  6. import clsx from "clsx";
  7. import Cookies from "js-cookie";
  8. import { useLocale, useTranslations } from "next-intl";
  9. import Image from "next/image";
  10. import { useEffect, useState } from "react";
  11. import dialogManage from "../manager";
  12. const languages = [
  13. {
  14. icon: "/svg/br.svg",
  15. title: "(+55)",
  16. desc: "Br",
  17. value: "br",
  18. },
  19. // {
  20. // icon: "/svg/ES.svg",
  21. // title: "(+34)",
  22. // desc: "Es",
  23. // value: "es",
  24. // },
  25. {
  26. icon: "/svg/UK.svg",
  27. title: "(+1)",
  28. desc: "En",
  29. value: "en",
  30. },
  31. ];
  32. const LanguageSelect = () => {
  33. const keyName = "LanguageSelect";
  34. const [visible, setVisible] = useState(false);
  35. const t = useTranslations("Header");
  36. const local = useLocale();
  37. const target = languages.find((item) => item.value === local)!;
  38. const router = useRouter();
  39. const languageHandler = async (language: (typeof languages)[number]) => {
  40. if (local !== language.value) {
  41. commonMask.show();
  42. }
  43. Cookies.set("language", language.value);
  44. await action();
  45. router.replace("/", { locale: language.value });
  46. };
  47. const current = clsx(
  48. "h-[0.39rem flex bg-[#2e2d2d] my-[0.11rem] rounded-[0.04rem] p-[0.11rem] text-[#fff] border-1 "
  49. );
  50. const dialogHandle = {
  51. key: keyName,
  52. show: () => {
  53. setVisible(true);
  54. },
  55. };
  56. useEffect(() => {
  57. dialogManage.registerDialog(dialogHandle);
  58. }, []);
  59. return (
  60. <CenterPopup
  61. visible={visible}
  62. onMaskClick={() => {
  63. setVisible(false);
  64. }}
  65. onClose={() => {
  66. setVisible(false);
  67. }}
  68. showCloseButton={true}
  69. getContainer={null}
  70. bodyStyle={{ background: "#1c1c1c" }}
  71. >
  72. <div className={"w-[3rem] rounded-[0.0694rem] bg-[#1f2830] p-[0.1389rem]"}>
  73. <header className={"text-[#fcde26]"}>{t("locale")}</header>
  74. {languages.map((item, index) => {
  75. return (
  76. <div
  77. key={index}
  78. className={`${current} ${
  79. item.value === target.value
  80. ? "border-primary-color"
  81. : "border-[#2e2d2d]"
  82. }`}
  83. onClick={() => languageHandler(item)}
  84. >
  85. <Image
  86. className={"mr-[0.07rem]"}
  87. src={item.icon}
  88. alt={item.value}
  89. width={30}
  90. height={20}
  91. />
  92. <div className={"mr-[0.04rem]"}>{item.title}</div>
  93. <div>{item.desc}</div>
  94. </div>
  95. );
  96. })}
  97. </div>
  98. </CenterPopup>
  99. );
  100. };
  101. export default LanguageSelect;