From e47904c2649ee413b06e038a6ca95028e1da7c59 Mon Sep 17 00:00:00 2001 From: Anil Vishnoi Date: Tue, 27 Aug 2024 14:30:29 -0700 Subject: [PATCH] Fixes following skill contribution related issues *.* PR description was not set on PR creation *.* User similar message formating for skill and knowledge *.* Use timeout for the alert messages Signed-off-by: Anil Vishnoi --- src/app/api/pr/skill/route.ts | 7 ++-- .../Contribute/Knowledge/Submit/Submit.tsx | 2 +- src/components/Contribute/Knowledge/index.tsx | 34 ++++++++------- src/components/Contribute/Skill/index.tsx | 42 +++++++++++++------ src/utils/validation.ts | 19 +++++---- 5 files changed, 65 insertions(+), 39 deletions(-) diff --git a/src/app/api/pr/skill/route.ts b/src/app/api/pr/skill/route.ts index 8f15803c..0a250e18 100644 --- a/src/app/api/pr/skill/route.ts +++ b/src/app/api/pr/skill/route.ts @@ -31,7 +31,7 @@ export async function POST(req: NextRequest) { try { const body = await req.json(); - const { content, attribution, name, email, submission_summary, filePath } = body; + const { content, attribution, name, email, submission_summary, task_description, filePath } = body; const githubUsername = await getGitHubUsername(headers); console.log('GitHub Username:', githubUsername); @@ -78,7 +78,7 @@ Creator names: ${attributionData.creator_names} ); // Create a pull request from the user's fork to the upstream repository - const pr = await createPullRequest(headers, githubUsername, branchName, submission_summary); + const pr = await createPullRequest(headers, githubUsername, branchName, submission_summary, task_description); return NextResponse.json(pr, { status: 201 }); } catch (error) { @@ -253,13 +253,14 @@ async function getCommitSha(headers: HeadersInit, username: string, branchName: return data.object.sha; } -async function createPullRequest(headers: HeadersInit, username: string, branchName: string, skillSummary: string) { +async function createPullRequest(headers: HeadersInit, username: string, branchName: string, skillSummary: string, skillDescription: string) { const response = await fetch(`${GITHUB_API_URL}/repos/${UPSTREAM_REPO_OWNER}/${UPSTREAM_REPO_NAME}/pulls`, { method: 'POST', headers, body: JSON.stringify({ title: `Skill: ${skillSummary}`, head: `${username}:${branchName}`, + body: skillDescription, base: BASE_BRANCH }) }); diff --git a/src/components/Contribute/Knowledge/Submit/Submit.tsx b/src/components/Contribute/Knowledge/Submit/Submit.tsx index 45796cd5..94bb6904 100644 --- a/src/components/Contribute/Knowledge/Submit/Submit.tsx +++ b/src/components/Contribute/Knowledge/Submit/Submit.tsx @@ -85,7 +85,7 @@ const Submit: React.FC = ({ knowledgeFormData, setActionGroupAlertContent const result = await response.json(); const actionGroupAlertContent: ActionGroupAlertContent = { title: 'Knowledge contribution submitted successfully!', - message: `A new pull request has been created for your knowledge submission.`, + message: `Thank you for your contribution!`, url: `${result.html_url}`, success: true }; diff --git a/src/components/Contribute/Knowledge/index.tsx b/src/components/Contribute/Knowledge/index.tsx index 6bc5aef7..023764c1 100644 --- a/src/components/Contribute/Knowledge/index.tsx +++ b/src/components/Contribute/Knowledge/index.tsx @@ -355,30 +355,36 @@ export const KnowledgeForm: React.FunctionComponent = () => { setCreators={setCreators} /> - - - - - {actionGroupAlertContent && ( } >

- {actionGroupAlertContent.message}{' '} - - {actionGroupAlertContent.url} - + {actionGroupAlertContent.message} +
+ {actionGroupAlertContent.success && actionGroupAlertContent.url && actionGroupAlertContent.url.trim().length > 0 && ( + + View your pull request + + )}

)} + + + + + + ); }; diff --git a/src/components/Contribute/Skill/index.tsx b/src/components/Contribute/Skill/index.tsx index 54897f12..e0036a43 100644 --- a/src/components/Contribute/Skill/index.tsx +++ b/src/components/Contribute/Skill/index.tsx @@ -140,7 +140,7 @@ export const SkillForm: React.FunctionComponent = () => { let validation = validateFields(infoFields); if (!validation.valid) { - setFailureAlertTitle('Something went wrong!'); + setFailureAlertTitle(validation.title); setFailureAlertMessage(validation.message); setIsFailureAlertVisible(true); return; @@ -148,7 +148,7 @@ export const SkillForm: React.FunctionComponent = () => { validation = validateFields(attributionFields); if (!validation.valid) { - setFailureAlertTitle('Something went wrong!'); + setFailureAlertTitle(validation.title); setFailureAlertMessage(validation.message); setIsFailureAlertVisible(true); return; @@ -156,7 +156,7 @@ export const SkillForm: React.FunctionComponent = () => { validation = validateEmail(email); if (!validation.valid) { - setFailureAlertTitle('Something went wrong!'); + setFailureAlertTitle(validation.title); setFailureAlertMessage(validation.message); setIsFailureAlertVisible(true); return; @@ -164,7 +164,7 @@ export const SkillForm: React.FunctionComponent = () => { validation = validateUniqueItems(questions, 'questions'); if (!validation.valid) { - setFailureAlertTitle('Something went wrong!'); + setFailureAlertTitle(validation.title); setFailureAlertMessage(validation.message); setIsFailureAlertVisible(true); return; @@ -172,7 +172,7 @@ export const SkillForm: React.FunctionComponent = () => { validation = validateUniqueItems(answers, 'answers'); if (!validation.valid) { - setFailureAlertTitle('Something went wrong!'); + setFailureAlertTitle(validation.title); setFailureAlertMessage(validation.message); setIsFailureAlertVisible(true); return; @@ -205,7 +205,15 @@ export const SkillForm: React.FunctionComponent = () => { headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ content: yamlString, attribution: attributionData, name, email, submission_summary, filePath: sanitizedFilePath }) + body: JSON.stringify({ + content: yamlString, + attribution: attributionData, + name, + email, + submission_summary, + task_description, + filePath: sanitizedFilePath + }) }); if (!response.ok) { @@ -250,7 +258,7 @@ export const SkillForm: React.FunctionComponent = () => { let validation = validateFields(infoFields); if (!validation.valid) { - setFailureAlertTitle('Something went wrong!'); + setFailureAlertTitle(validation.title); setFailureAlertMessage(validation.message); setIsFailureAlertVisible(true); return; @@ -258,7 +266,7 @@ export const SkillForm: React.FunctionComponent = () => { validation = validateFields(attributionFields); if (!validation.valid) { - setFailureAlertTitle('Something went wrong!'); + setFailureAlertTitle(validation.title); setFailureAlertMessage(validation.message); setIsFailureAlertVisible(true); return; @@ -266,7 +274,7 @@ export const SkillForm: React.FunctionComponent = () => { validation = validateEmail(email); if (!validation.valid) { - setFailureAlertTitle('Something went wrong!'); + setFailureAlertTitle(validation.title); setFailureAlertMessage(validation.message); setIsFailureAlertVisible(true); return; @@ -274,7 +282,7 @@ export const SkillForm: React.FunctionComponent = () => { validation = validateUniqueItems(questions, 'questions'); if (!validation.valid) { - setFailureAlertTitle('Something went wrong!'); + setFailureAlertTitle(validation.title); setFailureAlertMessage(validation.message); setIsFailureAlertVisible(true); return; @@ -282,7 +290,7 @@ export const SkillForm: React.FunctionComponent = () => { validation = validateUniqueItems(answers, 'answers'); if (!validation.valid) { - setFailureAlertTitle('Something went wrong!'); + setFailureAlertTitle(validation.title); setFailureAlertMessage(validation.message); setIsFailureAlertVisible(true); return; @@ -326,7 +334,7 @@ export const SkillForm: React.FunctionComponent = () => { const validation = validateFields(attributionFields); if (!validation.valid) { - setFailureAlertTitle('Something went wrong!'); + setFailureAlertTitle(validation.title); setFailureAlertMessage(validation.message); setIsFailureAlertVisible(true); return; @@ -526,6 +534,8 @@ export const SkillForm: React.FunctionComponent = () => { } actionLinks={ @@ -537,7 +547,13 @@ export const SkillForm: React.FunctionComponent = () => { )} {isFailureAlertVisible && ( - }> + } + > {failure_alert_message} )} diff --git a/src/utils/validation.ts b/src/utils/validation.ts index d5dd7f6e..4fe3242f 100644 --- a/src/utils/validation.ts +++ b/src/utils/validation.ts @@ -1,34 +1,37 @@ // src/utils/validation.ts -export const validateFields = (fields: Record): { valid: boolean; message: string } => { +export const validateFields = (fields: Record): { valid: boolean; title: string; message: string } => { for (const [key, value] of Object.entries(fields)) { if (value.trim() === '') { return { valid: false, - message: `The ${key} field is empty. Please make sure all the fields are filled!` + title: `Please make sure you complete the ${key} field`, + message: `Some fields are not filled out` }; } } - return { valid: true, message: '' }; + return { valid: true, title: '', message: '' }; }; -export const validateEmail = (email: string): { valid: boolean; message: string } => { +export const validateEmail = (email: string): { valid: boolean; title: string; message: string } => { const emailRegex = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,6}$/; if (!emailRegex.test(email)) { return { valid: false, - message: 'Please enter a valid email address!' + title: `Email address issue!`, + message: `Please enter a valid email address.` }; } - return { valid: true, message: '' }; + return { valid: true, title: '', message: '' }; }; -export const validateUniqueItems = (items: string[], itemType: string): { valid: boolean; message: string } => { +export const validateUniqueItems = (items: string[], itemType: string): { valid: boolean; title: string; message: string } => { const uniqueItems = new Set(items); if (uniqueItems.size !== items.length) { return { valid: false, + title: `Seed example issue!`, message: `Please make sure all the ${itemType} are unique!` }; } - return { valid: true, message: '' }; + return { valid: true, title: '', message: '' }; };