el.xwx.moe/components/SettingsSidebar.tsx

136 lines
5.1 KiB
TypeScript
Raw Normal View History

import Link from "next/link";
import { useRouter } from "next/router";
2023-12-17 03:18:31 -06:00
import React, { useEffect, useState } from "react";
2024-06-09 08:27:16 -05:00
import { useTranslation } from "next-i18next";
export default function SettingsSidebar({ className }: { className?: string }) {
2024-06-09 08:27:16 -05:00
const { t } = useTranslation();
2024-04-19 05:16:11 -05:00
const LINKWARDEN_VERSION = process.env.version;
2023-11-09 10:44:49 -06:00
const router = useRouter();
const [active, setActive] = useState("");
useEffect(() => {
setActive(router.asPath);
2024-06-09 08:27:16 -05:00
}, [router]);
return (
<div
2023-11-26 04:17:08 -06:00
className={`bg-base-100 h-full w-64 overflow-y-auto border-solid border border-base-100 border-r-neutral-content p-5 z-20 flex flex-col gap-5 justify-between ${
2023-10-28 11:50:11 -05:00
className || ""
}`}
>
<div className="flex flex-col gap-1">
2023-10-18 16:50:55 -05:00
<Link href="/settings/account">
<div
className={`${
2024-06-09 08:27:16 -05:00
active === "/settings/account"
? "bg-primary/20"
2023-11-27 15:38:38 -06:00
: "hover:bg-neutral/20"
2023-12-02 03:47:53 -06:00
} duration-100 py-5 px-2 cursor-pointer flex items-center gap-2 w-full rounded-md h-8`}
>
<i className="bi-person text-primary text-2xl"></i>
2024-06-09 08:27:16 -05:00
<p className="truncate w-full pr-7">{t("account")}</p>
</div>
</Link>
<Link href="/settings/preference">
<div
className={`${
2024-06-09 08:27:16 -05:00
active === "/settings/preference"
? "bg-primary/20"
2023-11-27 15:38:38 -06:00
: "hover:bg-neutral/20"
2023-12-02 03:47:53 -06:00
} duration-100 py-5 px-2 cursor-pointer flex items-center gap-2 w-full rounded-md h-8`}
>
<i className="bi-sliders text-primary text-2xl"></i>
2024-06-09 08:27:16 -05:00
<p className="truncate w-full pr-7">{t("preference")}</p>
</div>
</Link>
2024-01-13 00:20:06 -06:00
<Link href="/settings/access-tokens">
2023-11-20 11:48:41 -06:00
<div
className={`${
2024-06-09 08:27:16 -05:00
active === "/settings/access-tokens"
? "bg-primary/20"
2023-11-27 15:38:38 -06:00
: "hover:bg-neutral/20"
2023-12-02 03:47:53 -06:00
} duration-100 py-5 px-2 cursor-pointer flex items-center gap-2 w-full rounded-md h-8`}
2023-11-20 11:48:41 -06:00
>
<i className="bi-key text-primary text-2xl"></i>
2024-06-09 08:27:16 -05:00
<p className="truncate w-full pr-7">{t("access_tokens")}</p>
2023-11-20 11:48:41 -06:00
</div>
</Link>
<Link href="/settings/password">
<div
className={`${
2024-06-09 08:27:16 -05:00
active === "/settings/password"
? "bg-primary/20"
2023-11-27 15:38:38 -06:00
: "hover:bg-neutral/20"
2023-12-02 03:47:53 -06:00
} duration-100 py-5 px-2 cursor-pointer flex items-center gap-2 w-full rounded-md h-8`}
>
<i className="bi-lock text-primary text-2xl"></i>
2024-06-09 08:27:16 -05:00
<p className="truncate w-full pr-7">{t("password")}</p>
</div>
</Link>
2024-06-09 08:27:16 -05:00
{process.env.NEXT_PUBLIC_STRIPE && (
<Link href="/settings/billing">
<div
className={`${
2024-06-09 08:27:16 -05:00
active === "/settings/billing"
? "bg-primary/20"
2023-11-27 15:38:38 -06:00
: "hover:bg-neutral/20"
2023-12-02 03:47:53 -06:00
} duration-100 py-5 px-2 cursor-pointer flex items-center gap-2 w-full rounded-md h-8`}
>
<i className="bi-credit-card text-primary text-xl"></i>
2024-06-09 08:27:16 -05:00
<p className="truncate w-full pr-7">{t("billing")}</p>
</div>
</Link>
2024-06-09 08:27:16 -05:00
)}
</div>
<div className="flex flex-col gap-1">
2023-11-09 10:44:49 -06:00
<Link
2023-11-11 15:15:07 -06:00
href={`https://github.com/linkwarden/linkwarden/releases`}
2023-11-09 10:44:49 -06:00
target="_blank"
2023-11-26 04:17:08 -06:00
className="text-neutral text-sm ml-2 hover:opacity-50 duration-100"
2023-11-09 10:44:49 -06:00
>
2024-06-09 08:27:16 -05:00
{t("linkwarden_version", { version: LINKWARDEN_VERSION })}
2023-11-09 10:44:49 -06:00
</Link>
2023-10-18 16:50:55 -05:00
<Link href="https://docs.linkwarden.app" target="_blank">
<div
2023-11-27 15:38:38 -06:00
className={`hover:bg-neutral/20 duration-100 py-2 px-2 cursor-pointer flex items-center gap-2 w-full rounded-md h-8`}
>
<i className="bi-question-circle text-primary text-xl"></i>
2024-06-09 08:27:16 -05:00
<p className="truncate w-full pr-7">{t("help")}</p>
</div>
</Link>
2023-10-18 16:50:55 -05:00
<Link href="https://github.com/linkwarden/linkwarden" target="_blank">
<div
2023-11-27 15:38:38 -06:00
className={`hover:bg-neutral/20 duration-100 py-2 px-2 cursor-pointer flex items-center gap-2 w-full rounded-md h-8`}
>
<i className="bi-github text-primary text-xl"></i>
2024-06-09 08:27:16 -05:00
<p className="truncate w-full pr-7">{t("github")}</p>
</div>
</Link>
2023-10-20 14:34:47 -05:00
<Link href="https://twitter.com/LinkwardenHQ" target="_blank">
<div
2023-11-27 15:38:38 -06:00
className={`hover:bg-neutral/20 duration-100 py-2 px-2 cursor-pointer flex items-center gap-2 w-full rounded-md h-8`}
>
<i className="bi-twitter-x text-primary text-xl"></i>
2024-06-09 08:27:16 -05:00
<p className="truncate w-full pr-7">{t("twitter")}</p>
</div>
</Link>
2023-10-18 16:50:55 -05:00
<Link href="https://fosstodon.org/@linkwarden" target="_blank">
<div
2023-11-27 15:38:38 -06:00
className={`hover:bg-neutral/20 duration-100 py-2 px-2 cursor-pointer flex items-center gap-2 w-full rounded-md h-8`}
>
<i className="bi-mastodon text-primary text-xl"></i>
2024-06-09 08:27:16 -05:00
<p className="truncate w-full pr-7">{t("mastodon")}</p>
</div>
</Link>
</div>
</div>
);
}