2024-09-16 17:14:16 +03:00
|
|
|
import React, { forwardRef } from 'react';
|
|
|
|
|
|
2024-12-16 09:10:40 +02:00
|
|
|
import { TeamMemberRole } from '@prisma/client';
|
2024-09-16 17:14:16 +03:00
|
|
|
import type { SelectProps } from '@radix-ui/react-select';
|
|
|
|
|
import { InfoIcon } from 'lucide-react';
|
|
|
|
|
|
|
|
|
|
import { DOCUMENT_VISIBILITY } from '@documenso/lib/constants/document-visibility';
|
|
|
|
|
import { DocumentVisibility } from '@documenso/lib/types/document-visibility';
|
|
|
|
|
import {
|
|
|
|
|
Select,
|
|
|
|
|
SelectContent,
|
|
|
|
|
SelectItem,
|
|
|
|
|
SelectTrigger,
|
|
|
|
|
SelectValue,
|
|
|
|
|
} from '@documenso/ui/primitives/select';
|
|
|
|
|
import { Tooltip, TooltipContent, TooltipTrigger } from '@documenso/ui/primitives/tooltip';
|
|
|
|
|
|
|
|
|
|
export type DocumentVisibilitySelectType = SelectProps & {
|
2024-12-17 08:03:08 +02:00
|
|
|
currentTeamMemberRole?: string;
|
feat: add global settings for teams (#1391)
## Description
This PR introduces global settings for teams. At the moment, it allows
team admins to configure the following:
* The default visibility of the documents uploaded to the team account
* Whether to include the document owner (sender) details when sending
emails to the recipients.
### Include Sender Details
If the Sender Details setting is enabled, the emails sent by the team
will include the sender's name:
> "Example User" on behalf of "Example Team" has invited you to sign
"document.pdf"
Otherwise, the email will say:
> "Example Team" has invited you to sign "document.pdf"
### Default Document Visibility
This new option allows users to set the default visibility for the
documents uploaded to the team account. It can have the following
values:
* Everyone
* Manager and above
* Admins only
If the default document visibility isn't set, the document will be set
to the role of the user who created the document:
* If a user with the "User" role creates a document, the document's
visibility is set to "Everyone".
* Manager role -> "Manager and above"
* Admin role -> "Admins only"
Otherwise, if there is a default document visibility value, it uses that
value.
#### Gotcha
To avoid issues, the `document owner` and the `recipient` can access the
document irrespective of their role. For example:
* If a team member with the role "Member" uploads a document and the
default document visibility is "Admins", only the document owner and
admins can access the document.
* Similar to the other scenarios.
* If an admin uploads a document and the default document visibility is
"Admins", the recipient can access the document.
* The admins have access to all the documents.
* Managers have access to documents with the visibility set to
"Everyone" and "Manager and above"
* Members have access only to the documents with the visibility set to
"Everyone".
## Testing Performed
Tested it locally.
2024-11-08 13:50:49 +02:00
|
|
|
isTeamSettings?: boolean;
|
|
|
|
|
disabled?: boolean;
|
2024-12-17 08:03:08 +02:00
|
|
|
canUpdateVisibility?: boolean;
|
2024-09-16 17:14:16 +03:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
export const DocumentVisibilitySelect = forwardRef<HTMLButtonElement, DocumentVisibilitySelectType>(
|
2024-12-17 08:03:08 +02:00
|
|
|
(
|
|
|
|
|
{ currentTeamMemberRole, isTeamSettings = false, disabled, canUpdateVisibility, ...props },
|
|
|
|
|
ref,
|
|
|
|
|
) => {
|
|
|
|
|
const isAdmin = currentTeamMemberRole === TeamMemberRole.ADMIN;
|
|
|
|
|
const isManager = currentTeamMemberRole === TeamMemberRole.MANAGER;
|
2024-12-16 09:10:40 +02:00
|
|
|
const canEdit = isTeamSettings || canUpdateVisibility;
|
2024-09-16 17:14:16 +03:00
|
|
|
|
|
|
|
|
return (
|
2024-12-16 09:10:40 +02:00
|
|
|
<Select {...props} disabled={!canEdit || disabled}>
|
2024-09-16 17:14:16 +03:00
|
|
|
<SelectTrigger ref={ref} className="bg-background text-muted-foreground">
|
|
|
|
|
<SelectValue data-testid="documentVisibilitySelectValue" placeholder="Everyone" />
|
|
|
|
|
</SelectTrigger>
|
|
|
|
|
|
|
|
|
|
<SelectContent position="popper">
|
|
|
|
|
<SelectItem value={DocumentVisibility.EVERYONE}>
|
|
|
|
|
{DOCUMENT_VISIBILITY.EVERYONE.value}
|
|
|
|
|
</SelectItem>
|
feat: add global settings for teams (#1391)
## Description
This PR introduces global settings for teams. At the moment, it allows
team admins to configure the following:
* The default visibility of the documents uploaded to the team account
* Whether to include the document owner (sender) details when sending
emails to the recipients.
### Include Sender Details
If the Sender Details setting is enabled, the emails sent by the team
will include the sender's name:
> "Example User" on behalf of "Example Team" has invited you to sign
"document.pdf"
Otherwise, the email will say:
> "Example Team" has invited you to sign "document.pdf"
### Default Document Visibility
This new option allows users to set the default visibility for the
documents uploaded to the team account. It can have the following
values:
* Everyone
* Manager and above
* Admins only
If the default document visibility isn't set, the document will be set
to the role of the user who created the document:
* If a user with the "User" role creates a document, the document's
visibility is set to "Everyone".
* Manager role -> "Manager and above"
* Admin role -> "Admins only"
Otherwise, if there is a default document visibility value, it uses that
value.
#### Gotcha
To avoid issues, the `document owner` and the `recipient` can access the
document irrespective of their role. For example:
* If a team member with the role "Member" uploads a document and the
default document visibility is "Admins", only the document owner and
admins can access the document.
* Similar to the other scenarios.
* If an admin uploads a document and the default document visibility is
"Admins", the recipient can access the document.
* The admins have access to all the documents.
* Managers have access to documents with the visibility set to
"Everyone" and "Manager and above"
* Members have access only to the documents with the visibility set to
"Everyone".
## Testing Performed
Tested it locally.
2024-11-08 13:50:49 +02:00
|
|
|
<SelectItem
|
2024-12-16 09:10:40 +02:00
|
|
|
value={DocumentVisibility.MANAGER_AND_ABOVE}
|
2024-12-17 08:03:08 +02:00
|
|
|
disabled={!isAdmin && !isManager}
|
feat: add global settings for teams (#1391)
## Description
This PR introduces global settings for teams. At the moment, it allows
team admins to configure the following:
* The default visibility of the documents uploaded to the team account
* Whether to include the document owner (sender) details when sending
emails to the recipients.
### Include Sender Details
If the Sender Details setting is enabled, the emails sent by the team
will include the sender's name:
> "Example User" on behalf of "Example Team" has invited you to sign
"document.pdf"
Otherwise, the email will say:
> "Example Team" has invited you to sign "document.pdf"
### Default Document Visibility
This new option allows users to set the default visibility for the
documents uploaded to the team account. It can have the following
values:
* Everyone
* Manager and above
* Admins only
If the default document visibility isn't set, the document will be set
to the role of the user who created the document:
* If a user with the "User" role creates a document, the document's
visibility is set to "Everyone".
* Manager role -> "Manager and above"
* Admin role -> "Admins only"
Otherwise, if there is a default document visibility value, it uses that
value.
#### Gotcha
To avoid issues, the `document owner` and the `recipient` can access the
document irrespective of their role. For example:
* If a team member with the role "Member" uploads a document and the
default document visibility is "Admins", only the document owner and
admins can access the document.
* Similar to the other scenarios.
* If an admin uploads a document and the default document visibility is
"Admins", the recipient can access the document.
* The admins have access to all the documents.
* Managers have access to documents with the visibility set to
"Everyone" and "Manager and above"
* Members have access only to the documents with the visibility set to
"Everyone".
## Testing Performed
Tested it locally.
2024-11-08 13:50:49 +02:00
|
|
|
>
|
2024-12-16 09:10:40 +02:00
|
|
|
{DOCUMENT_VISIBILITY.MANAGER_AND_ABOVE.value}
|
|
|
|
|
</SelectItem>
|
|
|
|
|
<SelectItem value={DocumentVisibility.ADMIN} disabled={!isAdmin}>
|
feat: add global settings for teams (#1391)
## Description
This PR introduces global settings for teams. At the moment, it allows
team admins to configure the following:
* The default visibility of the documents uploaded to the team account
* Whether to include the document owner (sender) details when sending
emails to the recipients.
### Include Sender Details
If the Sender Details setting is enabled, the emails sent by the team
will include the sender's name:
> "Example User" on behalf of "Example Team" has invited you to sign
"document.pdf"
Otherwise, the email will say:
> "Example Team" has invited you to sign "document.pdf"
### Default Document Visibility
This new option allows users to set the default visibility for the
documents uploaded to the team account. It can have the following
values:
* Everyone
* Manager and above
* Admins only
If the default document visibility isn't set, the document will be set
to the role of the user who created the document:
* If a user with the "User" role creates a document, the document's
visibility is set to "Everyone".
* Manager role -> "Manager and above"
* Admin role -> "Admins only"
Otherwise, if there is a default document visibility value, it uses that
value.
#### Gotcha
To avoid issues, the `document owner` and the `recipient` can access the
document irrespective of their role. For example:
* If a team member with the role "Member" uploads a document and the
default document visibility is "Admins", only the document owner and
admins can access the document.
* Similar to the other scenarios.
* If an admin uploads a document and the default document visibility is
"Admins", the recipient can access the document.
* The admins have access to all the documents.
* Managers have access to documents with the visibility set to
"Everyone" and "Manager and above"
* Members have access only to the documents with the visibility set to
"Everyone".
## Testing Performed
Tested it locally.
2024-11-08 13:50:49 +02:00
|
|
|
{DOCUMENT_VISIBILITY.ADMIN.value}
|
|
|
|
|
</SelectItem>
|
2024-09-16 17:14:16 +03:00
|
|
|
</SelectContent>
|
|
|
|
|
</Select>
|
|
|
|
|
);
|
|
|
|
|
},
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
DocumentVisibilitySelect.displayName = 'DocumentVisibilitySelect';
|
|
|
|
|
|
|
|
|
|
export const DocumentVisibilityTooltip = () => {
|
|
|
|
|
return (
|
|
|
|
|
<Tooltip>
|
|
|
|
|
<TooltipTrigger>
|
|
|
|
|
<InfoIcon className="mx-2 h-4 w-4" />
|
|
|
|
|
</TooltipTrigger>
|
|
|
|
|
|
|
|
|
|
<TooltipContent className="text-foreground max-w-md space-y-2 p-4">
|
|
|
|
|
<h2>
|
|
|
|
|
<strong>Document visibility</strong>
|
|
|
|
|
</h2>
|
|
|
|
|
|
|
|
|
|
<p>The visibility of the document to the recipient.</p>
|
|
|
|
|
|
|
|
|
|
<ul className="ml-3.5 list-outside list-disc space-y-0.5 py-2">
|
|
|
|
|
<li>
|
|
|
|
|
<strong>Everyone</strong> - Everyone can access and view the document
|
|
|
|
|
</li>
|
|
|
|
|
<li>
|
|
|
|
|
<strong>Managers and above</strong> - Only managers and above can access and view the
|
|
|
|
|
document
|
|
|
|
|
</li>
|
|
|
|
|
<li>
|
|
|
|
|
<strong>Admins only</strong> - Only admins can access and view the document
|
|
|
|
|
</li>
|
|
|
|
|
</ul>
|
|
|
|
|
</TooltipContent>
|
|
|
|
|
</Tooltip>
|
|
|
|
|
);
|
|
|
|
|
};
|