mirror of
https://github.com/linkwarden/linkwarden.git
synced 2026-03-03 00:37:00 +00:00
* build(deps): bump the npm_and_yarn group across 5 directories with 22 updates Bumps the npm_and_yarn group with 18 updates in the / directory: | Package | From | To | | --- | --- | --- | | [axios](https://github.com/axios/axios) | `1.5.1` | `1.12.0` | | [dompurify](https://github.com/cure53/DOMPurify) | `3.0.6` | `3.2.4` | | [formidable](https://github.com/node-formidable/formidable) | `3.5.1` | `3.5.4` | | [next](https://github.com/vercel/next.js) | `13.4.12` | `14.2.35` | | [next-auth](https://github.com/nextauthjs/next-auth) | `4.22.1` | `4.24.12` | | [playwright](https://github.com/microsoft/playwright) | `1.55.0` | `1.55.1` | | [@mozilla/readability](https://github.com/mozilla/readability) | `0.4.4` | `0.6.0` | | [ai](https://github.com/vercel/ai) | `4.3.9` | `5.0.52` | | [nodemailer](https://github.com/nodemailer/nodemailer) | `6.9.3` | `7.0.11` | | [brace-expansion](https://github.com/juliangruber/brace-expansion) | `1.1.11` | `1.1.12` | | [braces](https://github.com/micromatch/braces) | `3.0.2` | `3.0.3` | | [form-data](https://github.com/form-data/form-data) | `3.0.3` | `3.0.4` | | [js-yaml](https://github.com/nodeca/js-yaml) | `3.14.1` | `3.14.2` | | [micromatch](https://github.com/micromatch/micromatch) | `4.0.5` | `4.0.8` | | [min-document](https://github.com/Raynos/min-document) | `2.19.0` | `2.19.2` | | [nanoid](https://github.com/ai/nanoid) | `3.3.6` | `3.3.8` | | [node-forge](https://github.com/digitalbazaar/forge) | `1.3.1` | `1.3.3` | | [tar](https://github.com/isaacs/node-tar) | `6.1.13` | `6.2.1` | Bumps the npm_and_yarn group with 1 update in the /apps/web directory: [next](https://github.com/vercel/next.js). Bumps the npm_and_yarn group with 2 updates in the /apps/worker directory: [@mozilla/readability](https://github.com/mozilla/readability) and [ai](https://github.com/vercel/ai). Bumps the npm_and_yarn group with 1 update in the /packages/lib directory: [nodemailer](https://github.com/nodemailer/nodemailer). Bumps the npm_and_yarn group with 1 update in the /packages/router directory: [next](https://github.com/vercel/next.js). Updates `axios` from 1.5.1 to 1.12.0 - [Release notes](https://github.com/axios/axios/releases) - [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md) - [Commits](https://github.com/axios/axios/compare/v1.5.1...v1.12.0) Updates `dompurify` from 3.0.6 to 3.2.4 - [Release notes](https://github.com/cure53/DOMPurify/releases) - [Commits](https://github.com/cure53/DOMPurify/compare/3.0.6...3.2.4) Updates `formidable` from 3.5.1 to 3.5.4 - [Release notes](https://github.com/node-formidable/formidable/releases) - [Changelog](https://github.com/node-formidable/formidable/blob/master/CHANGELOG.md) - [Commits](https://github.com/node-formidable/formidable/commits) Updates `next` from 13.4.12 to 14.2.35 - [Release notes](https://github.com/vercel/next.js/releases) - [Changelog](https://github.com/vercel/next.js/blob/canary/release.js) - [Commits](https://github.com/vercel/next.js/compare/v13.4.12...v14.2.35) Updates `next-auth` from 4.22.1 to 4.24.12 - [Release notes](https://github.com/nextauthjs/next-auth/releases) - [Commits](https://github.com/nextauthjs/next-auth/compare/next-auth@4.22.1...next-auth@4.24.12) Updates `playwright` from 1.55.0 to 1.55.1 - [Release notes](https://github.com/microsoft/playwright/releases) - [Commits](https://github.com/microsoft/playwright/compare/v1.55.0...v1.55.1) Updates `postcss` from 8.4.26 to 8.5.3 - [Release notes](https://github.com/postcss/postcss/releases) - [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md) - [Commits](https://github.com/postcss/postcss/compare/8.4.26...8.5.3) Updates `@mozilla/readability` from 0.4.4 to 0.6.0 - [Changelog](https://github.com/mozilla/readability/blob/main/CHANGELOG.md) - [Commits](https://github.com/mozilla/readability/compare/0.4.4...0.6.0) Updates `ai` from 4.3.9 to 5.0.52 - [Release notes](https://github.com/vercel/ai/releases) - [Changelog](https://github.com/vercel/ai/blob/main/CHANGELOG.md) - [Commits](https://github.com/vercel/ai/compare/ai@4.3.9...ai@5.0.52) Updates `nodemailer` from 6.9.3 to 7.0.11 - [Release notes](https://github.com/nodemailer/nodemailer/releases) - [Changelog](https://github.com/nodemailer/nodemailer/blob/master/CHANGELOG.md) - [Commits](https://github.com/nodemailer/nodemailer/compare/v6.9.3...v7.0.11) Updates `@babel/runtime` from 7.21.5 to 7.27.0 - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.27.0/packages/babel-runtime) Updates `brace-expansion` from 1.1.11 to 1.1.12 - [Release notes](https://github.com/juliangruber/brace-expansion/releases) - [Commits](https://github.com/juliangruber/brace-expansion/compare/1.1.11...v1.1.12) Updates `braces` from 3.0.2 to 3.0.3 - [Changelog](https://github.com/micromatch/braces/blob/master/CHANGELOG.md) - [Commits](https://github.com/micromatch/braces/compare/3.0.2...3.0.3) Updates `follow-redirects` from 1.15.3 to 1.15.11 - [Release notes](https://github.com/follow-redirects/follow-redirects/releases) - [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.15.3...v1.15.11) Updates `form-data` from 3.0.3 to 3.0.4 - [Release notes](https://github.com/form-data/form-data/releases) - [Changelog](https://github.com/form-data/form-data/blob/master/CHANGELOG.md) - [Commits](https://github.com/form-data/form-data/compare/v3.0.3...v3.0.4) Updates `jose` from 4.14.4 to 4.15.9 - [Release notes](https://github.com/panva/jose/releases) - [Changelog](https://github.com/panva/jose/blob/v4.15.9/CHANGELOG.md) - [Commits](https://github.com/panva/jose/compare/v4.14.4...v4.15.9) Updates `js-yaml` from 3.14.1 to 3.14.2 - [Changelog](https://github.com/nodeca/js-yaml/blob/master/CHANGELOG.md) - [Commits](https://github.com/nodeca/js-yaml/compare/3.14.1...3.14.2) Updates `micromatch` from 4.0.5 to 4.0.8 - [Release notes](https://github.com/micromatch/micromatch/releases) - [Changelog](https://github.com/micromatch/micromatch/blob/master/CHANGELOG.md) - [Commits](https://github.com/micromatch/micromatch/compare/4.0.5...4.0.8) Updates `min-document` from 2.19.0 to 2.19.2 - [Commits](https://github.com/Raynos/min-document/compare/v2.19.0...v2.19.2) Updates `nanoid` from 3.3.6 to 3.3.8 - [Release notes](https://github.com/ai/nanoid/releases) - [Changelog](https://github.com/ai/nanoid/blob/main/CHANGELOG.md) - [Commits](https://github.com/ai/nanoid/compare/3.3.6...3.3.8) Updates `node-forge` from 1.3.1 to 1.3.3 - [Changelog](https://github.com/digitalbazaar/forge/blob/main/CHANGELOG.md) - [Commits](https://github.com/digitalbazaar/forge/compare/v1.3.1...v1.3.3) Updates `tar` from 6.1.13 to 6.2.1 - [Release notes](https://github.com/isaacs/node-tar/releases) - [Changelog](https://github.com/isaacs/node-tar/blob/main/CHANGELOG.md) - [Commits](https://github.com/isaacs/node-tar/compare/v6.1.13...v6.2.1) Updates `next` from 13.4.12 to 14.2.35 - [Release notes](https://github.com/vercel/next.js/releases) - [Changelog](https://github.com/vercel/next.js/blob/canary/release.js) - [Commits](https://github.com/vercel/next.js/compare/v13.4.12...v14.2.35) Updates `@mozilla/readability` from 0.4.4 to 0.6.0 - [Changelog](https://github.com/mozilla/readability/blob/main/CHANGELOG.md) - [Commits](https://github.com/mozilla/readability/compare/0.4.4...0.6.0) Updates `ai` from 4.3.19 to 5.0.113 - [Release notes](https://github.com/vercel/ai/releases) - [Changelog](https://github.com/vercel/ai/blob/main/CHANGELOG.md) - [Commits](https://github.com/vercel/ai/compare/ai@4.3.9...ai@5.0.52) Updates `nodemailer` from 6.10.1 to 7.0.11 - [Release notes](https://github.com/nodemailer/nodemailer/releases) - [Changelog](https://github.com/nodemailer/nodemailer/blob/master/CHANGELOG.md) - [Commits](https://github.com/nodemailer/nodemailer/compare/v6.9.3...v7.0.11) Updates `next` from 13.4.12 to 14.2.35 - [Release notes](https://github.com/vercel/next.js/releases) - [Changelog](https://github.com/vercel/next.js/blob/canary/release.js) - [Commits](https://github.com/vercel/next.js/compare/v13.4.12...v14.2.35) --- updated-dependencies: - dependency-name: axios dependency-version: 1.12.0 dependency-type: direct:production dependency-group: npm_and_yarn - dependency-name: dompurify dependency-version: 3.2.4 dependency-type: direct:production dependency-group: npm_and_yarn - dependency-name: formidable dependency-version: 3.5.4 dependency-type: direct:production dependency-group: npm_and_yarn - dependency-name: next dependency-version: 14.2.35 dependency-type: direct:production dependency-group: npm_and_yarn - dependency-name: next-auth dependency-version: 4.24.12 dependency-type: direct:production dependency-group: npm_and_yarn - dependency-name: playwright dependency-version: 1.55.1 dependency-type: direct:production dependency-group: npm_and_yarn - dependency-name: postcss dependency-version: 8.5.3 dependency-type: direct:development dependency-group: npm_and_yarn - dependency-name: "@mozilla/readability" dependency-version: 0.6.0 dependency-type: direct:production dependency-group: npm_and_yarn - dependency-name: ai dependency-version: 5.0.52 dependency-type: direct:production dependency-group: npm_and_yarn - dependency-name: nodemailer dependency-version: 7.0.11 dependency-type: direct:production dependency-group: npm_and_yarn - dependency-name: "@babel/runtime" dependency-version: 7.27.0 dependency-type: indirect dependency-group: npm_and_yarn - dependency-name: brace-expansion dependency-version: 1.1.12 dependency-type: indirect dependency-group: npm_and_yarn - dependency-name: braces dependency-version: 3.0.3 dependency-type: indirect dependency-group: npm_and_yarn - dependency-name: follow-redirects dependency-version: 1.15.11 dependency-type: indirect dependency-group: npm_and_yarn - dependency-name: form-data dependency-version: 3.0.4 dependency-type: indirect dependency-group: npm_and_yarn - dependency-name: jose dependency-version: 4.15.9 dependency-type: indirect dependency-group: npm_and_yarn - dependency-name: js-yaml dependency-version: 3.14.2 dependency-type: indirect dependency-group: npm_and_yarn - dependency-name: micromatch dependency-version: 4.0.8 dependency-type: indirect dependency-group: npm_and_yarn - dependency-name: min-document dependency-version: 2.19.2 dependency-type: indirect dependency-group: npm_and_yarn - dependency-name: nanoid dependency-version: 3.3.8 dependency-type: indirect dependency-group: npm_and_yarn - dependency-name: node-forge dependency-version: 1.3.3 dependency-type: indirect dependency-group: npm_and_yarn - dependency-name: tar dependency-version: 6.2.1 dependency-type: indirect dependency-group: npm_and_yarn - dependency-name: next dependency-version: 14.2.35 dependency-type: direct:production dependency-group: npm_and_yarn - dependency-name: "@mozilla/readability" dependency-version: 0.6.0 dependency-type: direct:production dependency-group: npm_and_yarn - dependency-name: ai dependency-version: 5.0.113 dependency-type: direct:production dependency-group: npm_and_yarn - dependency-name: nodemailer dependency-version: 7.0.11 dependency-type: direct:production dependency-group: npm_and_yarn - dependency-name: next dependency-version: 14.2.35 dependency-type: direct:production dependency-group: npm_and_yarn ... Signed-off-by: dependabot[bot] <support@github.com> * bug fixes and improvements * always show navbar in reader view * bug fix and small performance improvement * minor fix * Refactor link selection management and bulk actions - Replaced the use of selectedLinks with selectedIds in the link store for better performance and clarity. - Updated LinkListOptions, BulkDeleteLinksModal, and BulkEditLinksModal components to utilize the new selection management. - Modified LinkCard, LinkMasonry, and LinkList components to handle selection state through props. - Enhanced updateLinks API to support bulk updates with improved tag management. - Cleaned up unused imports and code related to previous selection methods. * move refetching logic to Links component * move disableDraggable and user hook out of each card to improve efficiency * cleaner code * memoize components and increase performance * fix: update announcement links to use the correct domain * feat: add favicon field to Link model + update packages + bug fix * feat: implement favicon fetching API and update Link model for favicon support * feat: add priority attribute to Image components in Sidebar * Refactor pages to use consistent layout handling (yes, I forgot to do that until now :P) * bump version * Refactor setting pages to use consistent layout handling * upgrade yarn to 4.12.0 * fix DnD bug * Enhance announcement handling by adding support for announcement messages * slimmed down the docker image size * update Node and yarn versions in playwright tests workflow * small fix * fix attempt 2 --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
331 lines
12 KiB
TypeScript
331 lines
12 KiB
TypeScript
"use client";
|
|
import getPublicCollectionData from "@/lib/client/getPublicCollectionData";
|
|
import {
|
|
AccountSettings,
|
|
CollectionIncludingMembersAndLinkCount,
|
|
Sort,
|
|
ViewMode,
|
|
} from "@linkwarden/types";
|
|
import { useRouter } from "next/router";
|
|
import React, { useEffect, useState } from "react";
|
|
import Head from "next/head";
|
|
import ProfilePhoto from "@/components/ProfilePhoto";
|
|
import ToggleDarkMode from "@/components/ToggleDarkMode";
|
|
import getPublicUserData from "@/lib/client/getPublicUserData";
|
|
import Image from "next/image";
|
|
import Link from "next/link";
|
|
import SearchBar from "@/components/SearchBar";
|
|
import EditCollectionSharingModal from "@/components/ModalContent/EditCollectionSharingModal";
|
|
import { useTranslation } from "next-i18next";
|
|
import getServerSideProps from "@/lib/client/getServerSideProps";
|
|
import LinkListOptions from "@/components/LinkListOptions";
|
|
import { usePublicLinks } from "@linkwarden/router/publicLinks";
|
|
import Links from "@/components/LinkViews/Links";
|
|
import { usePublicTags } from "@linkwarden/router/publicTags";
|
|
import { Button } from "@/components/ui/button";
|
|
import {
|
|
Tooltip,
|
|
TooltipContent,
|
|
TooltipProvider,
|
|
TooltipTrigger,
|
|
} from "@/components/ui/tooltip";
|
|
import { useUser } from "@linkwarden/router/user";
|
|
import { Separator } from "@/components/ui/separator";
|
|
|
|
export default function PublicCollections() {
|
|
const { t } = useTranslation();
|
|
|
|
const { data: user } = useUser();
|
|
|
|
const router = useRouter();
|
|
|
|
const [collectionOwner, setCollectionOwner] = useState<
|
|
Partial<AccountSettings>
|
|
>({});
|
|
|
|
const handleTagSelection = (tag: string | undefined) => {
|
|
if (tag) {
|
|
return router.push(
|
|
"/public/collections/" +
|
|
router.query.id +
|
|
"?q=" +
|
|
encodeURIComponent(tag || "")
|
|
);
|
|
} else {
|
|
return router.push("/public/collections/" + router.query.id);
|
|
}
|
|
};
|
|
|
|
const [sortBy, setSortBy] = useState<Sort>(
|
|
Number(localStorage.getItem("sortBy")) ?? Sort.DateNewestFirst
|
|
);
|
|
|
|
const { data: tags } = usePublicTags();
|
|
|
|
const { links, data } = usePublicLinks({
|
|
sort: sortBy,
|
|
searchQueryString: router.query.q
|
|
? decodeURIComponent(router.query.q as string)
|
|
: undefined,
|
|
});
|
|
const [collection, setCollection] =
|
|
useState<CollectionIncludingMembersAndLinkCount>();
|
|
useEffect(() => {
|
|
if (router.query.id) {
|
|
getPublicCollectionData(Number(router.query.id)).then((res) => {
|
|
if (res.status === 400) {
|
|
router.push("/dashboard");
|
|
} else {
|
|
setCollection(res.response);
|
|
}
|
|
});
|
|
}
|
|
}, []);
|
|
|
|
useEffect(() => {
|
|
if (collection) {
|
|
getPublicUserData(collection.ownerId as number).then((owner) =>
|
|
setCollectionOwner(owner)
|
|
);
|
|
}
|
|
}, [collection]);
|
|
|
|
const [editCollectionSharingModal, setEditCollectionSharingModal] =
|
|
useState(false);
|
|
|
|
const [viewMode, setViewMode] = useState<ViewMode>(
|
|
(localStorage.getItem("viewMode") as ViewMode) || ViewMode.Card
|
|
);
|
|
|
|
if (!collection) return <></>;
|
|
else
|
|
return (
|
|
<div
|
|
className="h-96"
|
|
style={{
|
|
backgroundImage: `linear-gradient(${collection?.color}30 10%, ${
|
|
user?.theme === "light" ? "#f3f4f6" : "#262626"
|
|
} 13rem, ${user?.theme === "light" ? "#ffffff" : "#171717"} 100%)`,
|
|
}}
|
|
>
|
|
{collection && (
|
|
<Head>
|
|
<title>{collection.name} | Linkwarden</title>
|
|
<meta
|
|
property="og:title"
|
|
content={`${collection.name} | Linkwarden`}
|
|
key="title"
|
|
/>
|
|
</Head>
|
|
)}
|
|
<div className="lg:w-3/4 max-w-[1500px] w-full mx-auto p-5 bg">
|
|
<div className="flex justify-between gap-2">
|
|
<div className="w-full">
|
|
<p className="text-4xl font-thin mb-2 mt-10">{collection.name}</p>
|
|
|
|
<div className="mt-3">
|
|
<div className={`min-w-[15rem]`}>
|
|
<div className="flex gap-1 justify-center sm:justify-end items-center w-fit">
|
|
<div
|
|
className="flex items-center z-10 px-1 py-1 rounded-full cursor-pointer hover:bg-base-content/20 transition-colors duration-200"
|
|
onClick={() => setEditCollectionSharingModal(true)}
|
|
>
|
|
{collectionOwner.id && (
|
|
<ProfilePhoto
|
|
src={collectionOwner.image || undefined}
|
|
name={collectionOwner.name}
|
|
/>
|
|
)}
|
|
{collection.members
|
|
.sort(
|
|
(a, b) => (a.userId as number) - (b.userId as number)
|
|
)
|
|
.map((e, i) => {
|
|
return (
|
|
<ProfilePhoto
|
|
key={i}
|
|
src={e.user.image ? e.user.image : undefined}
|
|
name={e.user.name}
|
|
className="-ml-3"
|
|
/>
|
|
);
|
|
})
|
|
.slice(0, 3)}
|
|
{collection.members.length - 3 > 0 && (
|
|
<div
|
|
className={`avatar drop-shadow-md placeholder -ml-3`}
|
|
>
|
|
<div className="bg-base-100 text-neutral rounded-full w-8 h-8 ring-2 ring-neutral-content">
|
|
<span>+{collection.members.length - 3}</span>
|
|
</div>
|
|
</div>
|
|
)}
|
|
</div>
|
|
|
|
<p className="text-neutral text-sm">
|
|
{collection.members.length > 0 &&
|
|
collection.members.length === 1
|
|
? t("by_author_and_other", {
|
|
author: collectionOwner.name,
|
|
count: collection.members.length,
|
|
})
|
|
: collection.members.length > 0 &&
|
|
collection.members.length !== 1
|
|
? t("by_author_and_others", {
|
|
author: collectionOwner.name,
|
|
count: collection.members.length,
|
|
})
|
|
: t("by_author", {
|
|
author: collectionOwner.name,
|
|
})}
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<p className="mt-5">{collection.description}</p>
|
|
</div>
|
|
|
|
<div className="flex flex-col gap-2 items-center mt-10 min-w-fit">
|
|
<TooltipProvider>
|
|
<Tooltip>
|
|
<TooltipTrigger>
|
|
<Link href="https://linkwarden.app/" target="_blank">
|
|
<Image
|
|
src={`/icon.png`}
|
|
width={551}
|
|
height={551}
|
|
alt={t("linkwarden_icon")}
|
|
className="h-8 w-fit mx-auto rounded"
|
|
/>
|
|
</Link>
|
|
</TooltipTrigger>
|
|
<TooltipContent side="left">
|
|
<p>{t("list_created_with_linkwarden")}</p>
|
|
</TooltipContent>
|
|
</Tooltip>
|
|
</TooltipProvider>
|
|
|
|
<ToggleDarkMode align="left" />
|
|
|
|
<TooltipProvider>
|
|
<Tooltip>
|
|
<TooltipTrigger>
|
|
<Button asChild variant="ghost" size="icon">
|
|
<Link
|
|
href={`/public/collections/${collection.id}/rss`}
|
|
target="_blank"
|
|
className="text-neutral"
|
|
>
|
|
<i className="bi bi-rss text-xl"></i>
|
|
</Link>
|
|
</Button>
|
|
</TooltipTrigger>
|
|
<TooltipContent side="left">
|
|
<p>{t("rss_feed")}</p>
|
|
</TooltipContent>
|
|
</Tooltip>
|
|
</TooltipProvider>
|
|
</div>
|
|
</div>
|
|
|
|
<Separator className="mt-5" />
|
|
|
|
<div className="flex mb-5 mt-10 flex-col gap-5">
|
|
<LinkListOptions
|
|
t={t}
|
|
viewMode={viewMode}
|
|
setViewMode={setViewMode}
|
|
sortBy={sortBy}
|
|
setSortBy={setSortBy}
|
|
links={links}
|
|
>
|
|
<SearchBar
|
|
placeholder={
|
|
collection._count?.links === 1
|
|
? t("search_count_link", {
|
|
count: collection._count?.links,
|
|
})
|
|
: t("search_count_links", {
|
|
count: collection._count?.links,
|
|
})
|
|
}
|
|
/>
|
|
</LinkListOptions>
|
|
{tags && tags[0] && (
|
|
<div className="flex gap-2 mt-2 mb-6 flex-wrap">
|
|
<button
|
|
className="max-w-full"
|
|
onClick={() => handleTagSelection(undefined)}
|
|
>
|
|
<div
|
|
className={`${
|
|
!router.query.q
|
|
? "bg-primary/20"
|
|
: "bg-neutral-content/20 hover:bg-neutral/20"
|
|
} duration-100 py-1 px-2 cursor-pointer flex items-center gap-2 rounded-md h-8`}
|
|
>
|
|
<p className="truncate px-3">{t("all_links")}</p>
|
|
</div>
|
|
</button>
|
|
{tags
|
|
.map((t) => t.name)
|
|
.filter((item, pos, self) => self.indexOf(item) === pos)
|
|
.sort((a, b) => a.localeCompare(b))
|
|
.map((e, i) => {
|
|
const active = router.query.q === e;
|
|
return (
|
|
<button
|
|
className="max-w-full"
|
|
key={i}
|
|
onClick={() => handleTagSelection(e)}
|
|
>
|
|
<div
|
|
className={`${
|
|
active
|
|
? "bg-primary/20"
|
|
: "bg-neutral-content/20 hover:bg-neutral/20"
|
|
} duration-100 py-1 px-2 cursor-pointer flex items-center gap-2 rounded-md h-8`}
|
|
>
|
|
<i className="bi-hash text-xl text-primary drop-shadow"></i>
|
|
<p className="truncate pr-3">{e}</p>
|
|
</div>
|
|
</button>
|
|
);
|
|
})}
|
|
</div>
|
|
)}
|
|
<Links
|
|
links={
|
|
links?.map((e, i) => {
|
|
const linkWithCollectionData = {
|
|
...e,
|
|
collection: collection, // Append collection data
|
|
};
|
|
return linkWithCollectionData;
|
|
}) as any
|
|
}
|
|
layout={viewMode}
|
|
useData={data}
|
|
/>
|
|
{!data.isLoading && links && !links[0] && (
|
|
<p>{t("nothing_found")}</p>
|
|
)}
|
|
|
|
{/* <p className="text-center text-neutral">
|
|
List created with <span className="text-black">Linkwarden.</span>
|
|
</p> */}
|
|
</div>
|
|
</div>
|
|
{editCollectionSharingModal && (
|
|
<EditCollectionSharingModal
|
|
onClose={() => setEditCollectionSharingModal(false)}
|
|
activeCollection={collection}
|
|
/>
|
|
)}
|
|
</div>
|
|
);
|
|
}
|
|
|
|
export { getServerSideProps };
|