mirror of
https://github.com/documenso/documenso.git
synced 2025-11-14 16:51:38 +10:00
fix: document url in the command menu search (#1453)
This commit is contained in:
@ -1,6 +1,10 @@
|
|||||||
|
import { match } from 'ts-pattern';
|
||||||
|
|
||||||
|
import { formatDocumentsPath } from '@documenso/lib/utils/teams';
|
||||||
import { prisma } from '@documenso/prisma';
|
import { prisma } from '@documenso/prisma';
|
||||||
import { DocumentStatus } from '@documenso/prisma/client';
|
import { DocumentStatus } from '@documenso/prisma/client';
|
||||||
import type { Document, Recipient, User } from '@documenso/prisma/client';
|
import type { Document, Recipient, User } from '@documenso/prisma/client';
|
||||||
|
import { DocumentVisibility, TeamMemberRole } from '@documenso/prisma/client';
|
||||||
|
|
||||||
export type SearchDocumentsWithKeywordOptions = {
|
export type SearchDocumentsWithKeywordOptions = {
|
||||||
query: string;
|
query: string;
|
||||||
@ -67,10 +71,40 @@ export const searchDocumentsWithKeyword = async ({
|
|||||||
},
|
},
|
||||||
deletedAt: null,
|
deletedAt: null,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
title: {
|
||||||
|
contains: query,
|
||||||
|
mode: 'insensitive',
|
||||||
|
},
|
||||||
|
teamId: {
|
||||||
|
not: null,
|
||||||
|
},
|
||||||
|
team: {
|
||||||
|
members: {
|
||||||
|
some: {
|
||||||
|
userId: userId,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
deletedAt: null,
|
||||||
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
include: {
|
include: {
|
||||||
Recipient: true,
|
Recipient: true,
|
||||||
|
team: {
|
||||||
|
select: {
|
||||||
|
url: true,
|
||||||
|
members: {
|
||||||
|
where: {
|
||||||
|
userId: userId,
|
||||||
|
},
|
||||||
|
select: {
|
||||||
|
role: true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
orderBy: {
|
orderBy: {
|
||||||
createdAt: 'desc',
|
createdAt: 'desc',
|
||||||
@ -82,15 +116,48 @@ export const searchDocumentsWithKeyword = async ({
|
|||||||
const getSigningLink = (recipients: Recipient[], user: User) =>
|
const getSigningLink = (recipients: Recipient[], user: User) =>
|
||||||
`/sign/${recipients.find((r) => r.email === user.email)?.token}`;
|
`/sign/${recipients.find((r) => r.email === user.email)?.token}`;
|
||||||
|
|
||||||
const maskedDocuments = documents.map((document) => {
|
const maskedDocuments = documents
|
||||||
const { Recipient, ...documentWithoutRecipient } = document;
|
.filter((document) => {
|
||||||
|
if (!document.teamId || isOwner(document, user)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
return {
|
const teamMemberRole = document.team?.members[0]?.role;
|
||||||
...documentWithoutRecipient,
|
|
||||||
path: isOwner(document, user) ? `/documents/${document.id}` : getSigningLink(Recipient, user),
|
if (!teamMemberRole) {
|
||||||
value: [document.id, document.title, ...document.Recipient.map((r) => r.email)].join(' '),
|
return false;
|
||||||
};
|
}
|
||||||
});
|
|
||||||
|
const canAccessDocument = match([document.visibility, teamMemberRole])
|
||||||
|
.with([DocumentVisibility.EVERYONE, TeamMemberRole.ADMIN], () => true)
|
||||||
|
.with([DocumentVisibility.EVERYONE, TeamMemberRole.MANAGER], () => true)
|
||||||
|
.with([DocumentVisibility.EVERYONE, TeamMemberRole.MEMBER], () => true)
|
||||||
|
.with([DocumentVisibility.MANAGER_AND_ABOVE, TeamMemberRole.ADMIN], () => true)
|
||||||
|
.with([DocumentVisibility.MANAGER_AND_ABOVE, TeamMemberRole.MANAGER], () => true)
|
||||||
|
.with([DocumentVisibility.ADMIN, TeamMemberRole.ADMIN], () => true)
|
||||||
|
.otherwise(() => false);
|
||||||
|
|
||||||
|
return canAccessDocument;
|
||||||
|
})
|
||||||
|
.map((document) => {
|
||||||
|
const { Recipient, ...documentWithoutRecipient } = document;
|
||||||
|
|
||||||
|
let documentPath;
|
||||||
|
|
||||||
|
if (isOwner(document, user)) {
|
||||||
|
documentPath = `${formatDocumentsPath(document.team?.url)}/${document.id}`;
|
||||||
|
} else if (document.teamId && document.team) {
|
||||||
|
documentPath = `${formatDocumentsPath(document.team.url)}/${document.id}`;
|
||||||
|
} else {
|
||||||
|
documentPath = getSigningLink(Recipient, user);
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
...documentWithoutRecipient,
|
||||||
|
path: documentPath,
|
||||||
|
value: [document.id, document.title, ...document.Recipient.map((r) => r.email)].join(' '),
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
return maskedDocuments;
|
return maskedDocuments;
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user