From 404631a22d83e3dcb445e700a0a8c76e7c4f514d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Ctan-nhu=E2=80=9D?= <“tan@harness.io”> Date: Fri, 2 Jun 2023 17:21:32 -0700 Subject: [PATCH] feat: Allow empty PR description --- .../components/CommitsView/CommitsView.tsx | 4 +- web/src/hooks/useUserPreference.ts | 12 +- web/src/pages/Compare/Compare.tsx | 8 +- .../PullRequest/Conversation/Conversation.tsx | 27 +++- .../Conversation/DescriptionBox.tsx | 20 ++- .../PullRequestActionsBox.tsx | 3 +- web/src/pages/PullRequest/PullRequest.tsx | 126 +++--------------- .../PullRequestCommits/PullRequestCommits.tsx | 2 +- .../pages/PullRequest/PullRequestTitle.tsx | 121 +++++++++++++++++ .../PullRequests/PullRequests.module.scss | 3 +- web/src/pages/PullRequests/PullRequests.tsx | 75 +++++++---- web/src/utils/Utils.ts | 2 +- 12 files changed, 249 insertions(+), 154 deletions(-) create mode 100644 web/src/pages/PullRequest/PullRequestTitle.tsx diff --git a/web/src/components/CommitsView/CommitsView.tsx b/web/src/components/CommitsView/CommitsView.tsx index 73b94c88a..5dcecb910 100644 --- a/web/src/components/CommitsView/CommitsView.tsx +++ b/web/src/components/CommitsView/CommitsView.tsx @@ -27,7 +27,7 @@ import type { CODERoutes } from 'RouteDefinitions' import css from './CommitsView.module.scss' interface CommitsViewProps extends Pick { - commits: TypesCommit[] + commits: TypesCommit[] | null emptyTitle: string emptyMessage: string prHasChanged?: boolean @@ -116,7 +116,7 @@ export function CommitsView({ /> )} - {!!commits.length && + {!!commits?.length && Object.entries(commitsGroupedByDate).map(([date, commitsByDate]) => { return ( (key: UserPreference, defaultValue: T): [T, (val: T) => void] { +export function useUserPreference( + key: UserPreference, + defaultValue: T, + filter: (val: T) => boolean = () => true +): [T, (val: T) => void] { const prefKey = `CODE_MOD_USER_PREF__${key}` const convert = useCallback( val => { @@ -40,14 +44,16 @@ export function useUserPreference(key: UserPreference, defaultValue: const savePreference = useCallback( (val: T) => { try { - localStorage[prefKey] = Array.isArray(val) || typeof val === 'object' ? JSON.stringify(val) : val + if (filter(val)) { + localStorage[prefKey] = Array.isArray(val) || typeof val === 'object' ? JSON.stringify(val) : val + } } catch (exception) { // eslint-disable-next-line no-console console.error('useUserPreference: Failed to stringify object', val) } setPreference(val) }, - [prefKey] + [prefKey, filter] ) return [preference, savePreference] diff --git a/web/src/pages/Compare/Compare.tsx b/web/src/pages/Compare/Compare.tsx index 74972aee8..1404b7386 100644 --- a/web/src/pages/Compare/Compare.tsx +++ b/web/src/pages/Compare/Compare.tsx @@ -85,16 +85,12 @@ export default function Compare() { return showToaster(getString('pr.titleIsRequired')) } - if (!description) { - return showToaster(getString('pr.descIsRequired')) - } - const pullReqUrl = window.location.href.split('compare')?.[0] const payload: OpenapiCreatePullReqRequest = { target_branch: targetGitRef, source_branch: sourceGitRef, title: title, - description: description, + description: description || '', is_draft: creationType === PRCreationType.DRAFT } @@ -243,7 +239,7 @@ export default function Compare() { - {getString('description')} * + {getString('description')} { onCommentUpdate: () => void prHasChanged?: boolean + showEditDescription?: boolean + onCancelEditDescription: () => void } export const Conversation: React.FC = ({ repoMetadata, pullRequestMetadata, onCommentUpdate, - prHasChanged + prHasChanged, + showEditDescription, + onCancelEditDescription }) => { const { getString } = useStrings() const { currentUser } = useAppContext() @@ -116,6 +120,10 @@ export const Conversation: React.FC = ({ onCommentUpdate() refetchActivities() }, [onCommentUpdate, refetchActivities]) + const hasDescription = useMemo( + () => !!pullRequestMetadata?.description?.length, + [pullRequestMetadata?.description?.length] + ) useEffect(() => { if (prHasChanged) { @@ -136,12 +144,17 @@ export const Conversation: React.FC = ({ - - + {(hasDescription || showEditDescription) && ( + + )} +