Skip to content

Commit

Permalink
fix commenting permissions on structured proposals (#3598)
Browse files Browse the repository at this point in the history
  • Loading branch information
mattcasey authored Feb 6, 2024
1 parent f5f66cf commit ed0711f
Show file tree
Hide file tree
Showing 17 changed files with 54 additions and 104 deletions.
11 changes: 5 additions & 6 deletions components/[pageId]/DocumentPage/DocumentPage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -327,7 +327,6 @@ function DocumentPageComponent({
isUnpublishedProposal={isUnpublishedProposal}
readOnlyProposalPermissions={!proposal?.permissions.edit}
isProposalTemplate={page.type === 'proposal_template'}
isReviewer={proposal?.permissions.evaluate}
isStructuredProposal={isStructuredProposal}
proposal={proposal}

Check failure on line 331 in components/[pageId]/DocumentPage/DocumentPage.tsx

View workflow job for this annotation

GitHub Actions / Tests (Type check, npm run typecheck)

Type 'ProposalWithUsersAndRubric | undefined' is not assignable to type 'Pick<ProposalWithUsersAndRubric, "id" | "permissions" | "page" | "form" | "status" | "fields" | "archived" | "formId" | "lensPostLink" | "workflowId" | "authors" | "evaluations" | "currentEvaluationId" | "rewardIds"> | undefined'.
proposalInput={proposal}
Expand Down Expand Up @@ -388,15 +387,15 @@ function DocumentPageComponent({
<FormFieldsEditor
readOnly={(!isAdmin && (!user || !proposalAuthors.includes(user.id))) || !!proposal?.archived}
proposalId={proposal.id}
formFields={proposal?.form.formFields ?? []}
formFields={proposal.form.formFields ?? []}
/>
) : (
<ProposalFormFieldsInput
pageId={page.id}
isReviewer={(proposal?.permissions.evaluate || proposal?.permissions.review) ?? false}
enableComments={proposal.permissions.comment}
proposalId={proposal.id}
formFields={proposal?.form.formFields ?? []}
readOnly={!user || !pagePermissions.edit_content || !!proposal?.archived}
formFields={proposal.form.formFields ?? []}
readOnly={!proposal.permissions.edit}
threads={threads}
isDraft={proposal?.status === 'draft'}
/>
Expand Down Expand Up @@ -485,7 +484,7 @@ function DocumentPageComponent({
{(page.type === 'proposal' || page.type === 'card' || page.type === 'card_synced') && (
<Box>
{/* add negative margin to offset height of .charm-empty-footer */}
<PageComments page={page} canCreateComments={pagePermissions.comment} />
<PageComments page={page} enableComments={pagePermissions.comment} />
</Box>
)}
</>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,6 @@ function DocumentPageWithSidebarsComponent(props: DocumentPageWithSidebarsProps)
isUnpublishedProposal={isUnpublishedProposal}
readOnlyProposalPermissions={!proposal?.permissions.edit}
isProposalTemplate={page.type === 'proposal_template'}
isReviewer={proposal?.permissions.evaluate}
isStructuredProposal={isStructuredProposal}
closeSidebar={closeSidebar}
openSidebar={() => setActiveView('proposal_evaluation')}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,10 @@ import { setUrlWithoutRerender } from 'lib/utilities/browser';

type Props = {
page: PageWithContent;
canCreateComments: boolean;
enableComments: boolean;
};

export function PageComments({ page, canCreateComments }: Props) {
export function PageComments({ page, enableComments }: Props) {
const router = useRouter();
const {
comments,
Expand All @@ -38,9 +38,9 @@ export function PageComments({ page, canCreateComments }: Props) {
const { data: proposal } = useGetProposalDetails(isProposal ? page.id : null);
const [, setCreatedComment] = useState<PageCommentWithVote | null>(null);
const commentPermissions: CommentPermissions = {
add_comment: canCreateComments ?? false,
upvote: canCreateComments ?? false,
downvote: canCreateComments ?? false,
add_comment: enableComments ?? false,
upvote: enableComments ?? false,
downvote: enableComments ?? false,
delete_comments: isAdmin
};

Expand Down Expand Up @@ -80,7 +80,7 @@ export function PageComments({ page, canCreateComments }: Props) {
<>
<Divider sx={{ my: 3 }} />

{canCreateComments && <CommentForm handleCreateComment={createComment} />}
{enableComments && <CommentForm handleCreateComment={createComment} />}

{isLoadingComments ? (
<Box height={100}>
Expand Down Expand Up @@ -114,7 +114,7 @@ export function PageComments({ page, canCreateComments }: Props) {
No Comments Yet
</Typography>

{canCreateComments && <Typography color='secondary'>Be the first to share what you think!</Typography>}
{enableComments && <Typography color='secondary'>Be the first to share what you think!</Typography>}
</Stack>
)}
</>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,7 @@ function SidebarContents({
{sidebarView === 'comments' &&
(proposal?.formId ? (
<FormCommentsSidebar
canCreateComments={!!proposal.permissions?.comment}
enableComments={!!proposal.permissions?.comment}
openSidebar={openSidebar!}
threads={threads}
formFields={proposal.form.formFields}
Expand All @@ -146,7 +146,7 @@ function SidebarContents({
<EditorCommentsSidebar
openSidebar={openSidebar!}
threads={threads}
canCreateComments={!!pagePermissions?.comment}
enableComments={!!pagePermissions?.comment}
/>
))}
</>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -140,13 +140,13 @@ function CommentsSidebar({
onDeleteComment,
onToggleResolve,
scrollToThreadElement,
canCreateComments,
enableComments,
isLoading
}: {
threadList: ThreadWithComments[];
threadFilter: 'resolved' | 'open' | 'all' | 'you';
handleThreadFilterChange: SelectProps['onChange'];
canCreateComments: boolean;
enableComments: boolean;
onToggleResolve?: (threadId: string, remove: boolean) => void;
onDeleteComment?: (threadId: string) => void;
scrollToThreadElement?: (threadId: string) => void;
Expand Down Expand Up @@ -185,7 +185,7 @@ function CommentsSidebar({
(resolvedThread) =>
resolvedThread && (
<PageThread
canCreateComments={canCreateComments}
enableComments={enableComments}
showFindButton
key={resolvedThread.id}
threadId={resolvedThread.id}
Expand All @@ -202,12 +202,12 @@ function CommentsSidebar({
}

function EditorCommentsSidebarComponent({
canCreateComments,
enableComments,
threads,
openSidebar
}: {
threads?: CommentThreadsMap;
canCreateComments: boolean;
enableComments: boolean;
openSidebar: (view: PageSidebarView) => void;
}) {
const { user } = useUser();
Expand Down Expand Up @@ -261,7 +261,7 @@ function EditorCommentsSidebarComponent({

return (
<CommentsSidebar
canCreateComments={canCreateComments}
enableComments={enableComments}
handleThreadFilterChange={handleThreadClassChange}
isLoading={!view || !threads}
threadFilter={threadFilter}
Expand Down Expand Up @@ -289,7 +289,7 @@ function EditorCommentsSidebarComponent({
}

function FormCommentsSidebarComponent({
canCreateComments,
enableComments,
threads,
openSidebar,
formFields
Expand All @@ -300,7 +300,7 @@ function FormCommentsSidebarComponent({
})[]
| null;
threads?: CommentThreadsMap;
canCreateComments: boolean;
enableComments: boolean;
openSidebar: (view: PageSidebarView) => void;
}) {
const { user } = useUser();
Expand Down Expand Up @@ -347,7 +347,7 @@ function FormCommentsSidebarComponent({
return (
<CommentsSidebar
handleThreadFilterChange={handleThreadFilterChange}
canCreateComments={canCreateComments}
enableComments={enableComments}
threadFilter={threadFilter}
isLoading={!threads}
threadList={threadList}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ export function InlineCommentThread({
{unResolvedThreads.map((resolvedThread) => (
<ThreadContainer key={resolvedThread.id} elevation={4}>
<PageThread
canCreateComments={permissions?.comment}
enableComments={permissions?.comment}
inline={ids.length === 1}
key={resolvedThread.id}
threadId={resolvedThread?.id}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -242,7 +242,7 @@ interface PageThreadProps {
threadId: string;
inline?: boolean;
showFindButton?: boolean;
canCreateComments?: boolean;
enableComments?: boolean;
onDeleteComment?: (threadId: string) => void;
onToggleResolve?: (threadId: string, resolved: boolean) => void;
sx?: SxProps<Theme>;
Expand Down Expand Up @@ -298,7 +298,7 @@ const PageThread = forwardRef<HTMLDivElement, PageThreadProps>(
showFindButton = false,
threadId,
inline = false,
canCreateComments,
enableComments,
scrollToThreadElement
},
ref
Expand Down Expand Up @@ -422,7 +422,7 @@ const PageThread = forwardRef<HTMLDivElement, PageThreadProps>(
{commentIndex === 0 && !isSmallScreen && (
<ThreadHeaderButton
text={thread.resolved ? 'Un-resolve' : 'Resolve'}
disabled={isMutating || !canCreateComments}
disabled={isMutating || !enableComments}
onClick={toggleResolved}
/>
)}
Expand Down Expand Up @@ -525,7 +525,7 @@ const PageThread = forwardRef<HTMLDivElement, PageThreadProps>(
</MenuItem>
</Menu>
</div>
{canCreateComments && !thread.resolved && (
{enableComments && !thread.resolved && (
<AddCommentCharmEditor
readOnly={Boolean(editedCommentId)}
key={counter}
Expand Down
16 changes: 8 additions & 8 deletions components/common/form/FormFieldAnswerComment.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ function FormFieldAnswerThreads({
{unResolvedThreads.map((resolvedThread) => (
<ThreadContainer key={resolvedThread.id} elevation={4}>
<PageThread
canCreateComments
enableComments
inline
key={resolvedThread.id}
threadId={resolvedThread?.id}
Expand Down Expand Up @@ -160,13 +160,13 @@ export function FormFieldAnswerInput({
pageId,
disabled,
formFieldAnswer,
canCreateComments,
enableComments,
formFieldName
}: {
disabled?: boolean;
pageId: string;
formFieldAnswer: FormFieldAnswer;
canCreateComments?: boolean;
enableComments?: boolean;
formFieldName: string;
}) {
const { trigger: createThread } = useCreateThread();
Expand All @@ -190,7 +190,7 @@ export function FormFieldAnswerInput({
setIsOpen(false);
};

if (!canCreateComments) {
if (!enableComments) {
return null;
}

Expand All @@ -203,7 +203,7 @@ export function FormFieldAnswerInput({
}}
open={isOpen}
>
<Tooltip title={!disabled ? 'Add a comment' : "You don't have permission to add a comment"}>
<Tooltip title='Add a comment'>
<Box
sx={{
display: 'flex',
Expand Down Expand Up @@ -232,14 +232,14 @@ export function FormFieldAnswerComment({
disabled,
fieldAnswerThreads = [],
formFieldAnswer,
canCreateComments,
enableComments,
formFieldName
}: {
disabled?: boolean;
pageId: string;
fieldAnswerThreads?: ThreadWithComments[];
formFieldAnswer: FormFieldAnswer;
canCreateComments?: boolean;
enableComments?: boolean;
formFieldName: string;
}) {
return (
Expand All @@ -266,7 +266,7 @@ export function FormFieldAnswerComment({
disabled={disabled}
pageId={pageId}
formFieldAnswer={formFieldAnswer}
canCreateComments={canCreateComments}
enableComments={enableComments}
/>
</span>
</Stack>
Expand Down
57 changes: 9 additions & 48 deletions components/common/form/FormFieldsInput.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ type FormFieldsInputProps = {
formFieldAnswer?: FormFieldAnswer | null;
})[];
disabled?: boolean;
enableComments: boolean;
errors: FieldErrors<Record<string, FormFieldValue>>;
control: Control<Record<string, FormFieldValue>, any>;
onFormChange: (
Expand All @@ -45,57 +46,20 @@ type FormFieldsInputProps = {
values?: Record<string, FormFieldValue>;
pageId?: string;
isDraft?: boolean;
threads?: Record<string, ThreadWithComments | undefined>;
};

export function ControlledFormFieldsInput({
formFields,
disabled,
control,
errors,
onFormChange
}: Omit<FormFieldsInputProps, 'onSave'>) {
return (
<FormFieldsInputBase
control={control}
errors={errors}
formFields={formFields}
onFormChange={onFormChange}
disabled={disabled}
isReviewer={false}
/>
);
export function ControlledFormFieldsInput(props: Omit<FormFieldsInputProps, 'onSave'>) {
return <FormFieldsInputBase {...props} />;
}

export function FormFieldsInput({
formFields,
disabled,
onSave,
isReviewer,
pageId,
threads,
isDraft
}: Omit<FormFieldsInputProps, 'control' | 'errors' | 'onFormChange'> & {
isReviewer: boolean;
threads?: Record<string, ThreadWithComments | undefined>;
}) {
export function FormFieldsInput(props: Omit<FormFieldsInputProps, 'control' | 'errors' | 'onFormChange'>) {
const { control, errors, onFormChange, values } = useFormFields({
fields: formFields
fields: props.formFields
});

return (
<FormFieldsInputBase
control={control}
errors={errors}
formFields={formFields}
onFormChange={onFormChange}
disabled={disabled}
onSave={onSave}
values={values}
isReviewer={isReviewer}
pageId={pageId}
threads={threads}
isDraft={isDraft}
/>
<FormFieldsInputBase {...props} control={control} errors={errors} onFormChange={onFormChange} values={values} />
);
}

Expand All @@ -112,18 +76,15 @@ function FormFieldsInputBase({
formFields,
values,
disabled,
enableComments,
control,
errors,
onFormChange,
isReviewer,
pageId,
isDraft,
threads = {}
}: FormFieldsInputProps & {
isReviewer: boolean;
threads?: Record<string, ThreadWithComments | undefined>;
}) {
const isAdmin = useIsAdmin();
const { user } = useUser();
const [isFormDirty, setIsFormDirty] = useState(false);
const { showMessage } = useSnackbar();
Expand Down Expand Up @@ -225,7 +186,7 @@ function FormFieldsInputBase({
formFieldName={formField.name}
disabled={disabled}
fieldAnswerThreads={fieldAnswerThreads}
canCreateComments={(isAdmin || isReviewer) && !isDraft}
enableComments={enableComments}
/>
</Box>
)
Expand Down
Loading

0 comments on commit ed0711f

Please sign in to comment.