Added allLinksOfCollection to linksStore

Removed duplicated tags
Fixed overflow for line
added disclosure for tags in public collection
This commit is contained in:
Oliver Schwamb
2024-07-09 13:50:08 +02:00
parent e045c18b7d
commit e8d0cce58a
3 changed files with 87 additions and 36 deletions
+40 -25
View File
@@ -18,7 +18,7 @@ export default function useLinks(
searchByTextContent,
}: LinkRequestQuery = { sort: 0 }
) {
const { links, setLinks, resetLinks, selectedLinks, setSelectedLinks } =
const { links, setLinks, resetLinks, selectedLinks, setSelectedLinks, setAllLinksOfCollection } =
useLinkStore();
const router = useRouter();
@@ -26,6 +26,34 @@ export default function useLinks(
const { reachedBottom, setReachedBottom } = useDetectPageBottom();
const getPath = (params?: LinkRequestQuery) => {
const buildQueryString = (params: LinkRequestQuery) => {
return Object.keys(params)
.filter((key) => params[key as keyof LinkRequestQuery] !== undefined)
.map(
(key) =>
`${encodeURIComponent(key)}=${encodeURIComponent(
params[key as keyof LinkRequestQuery] as string
)}`
)
.join("&");
};
let queryString = '';
if (params) {
queryString = buildQueryString(params);
}
let basePath;
if (router.pathname === "/dashboard") basePath = "/api/v1/dashboard";
else if (router.pathname.startsWith("/public/collections/[id]")) {
queryString = queryString + "&collectionId=" + router.query.id;
basePath = "/api/v1/public/collections/links";
} else basePath = "/api/v1/links";
return `${basePath}?${queryString}`;
}
const getLinks = async (isInitialCall: boolean, cursor?: number) => {
const params = {
sort,
@@ -40,32 +68,10 @@ export default function useLinks(
searchByTags,
searchByTextContent,
};
const buildQueryString = (params: LinkRequestQuery) => {
return Object.keys(params)
.filter((key) => params[key as keyof LinkRequestQuery] !== undefined)
.map(
(key) =>
`${encodeURIComponent(key)}=${encodeURIComponent(
params[key as keyof LinkRequestQuery] as string
)}`
)
.join("&");
};
let queryString = buildQueryString(params);
let basePath;
if (router.pathname === "/dashboard") basePath = "/api/v1/dashboard";
else if (router.pathname.startsWith("/public/collections/[id]")) {
queryString = queryString + "&collectionId=" + router.query.id;
basePath = "/api/v1/public/collections/links";
} else basePath = "/api/v1/links";
setIsLoading(true);
const response = await fetch(`${basePath}?${queryString}`);
const response = await fetch(getPath(params));
const data = await response.json();
@@ -74,6 +80,14 @@ export default function useLinks(
if (response.ok) setLinks(data.response, isInitialCall);
};
const getAllLinks = async () => {
const response = await fetch(getPath());
const data = await response.json();
if (response.ok) setAllLinksOfCollection(data.response);
};
useEffect(() => {
// Save the selected links before resetting the links
// and then restore the selected links after resetting the links
@@ -81,6 +95,7 @@ export default function useLinks(
resetLinks();
setSelectedLinks(previouslySelected);
getAllLinks();
getLinks(true);
}, [
router,