From f5d7444028d7fa3e15934844e571093f39e02e0f Mon Sep 17 00:00:00 2001 From: Newton Chung Date: Tue, 4 Aug 2026 14:34:36 -0700 Subject: [PATCH 1/2] Added Certification List tooltip to Classes page Teachers can now hover over it to easily see which certifications are part of their class on the Classes page. Previously, they needed to press the Edit Class button and scroll through the certifications list. --- .../classInviteTable.test.jsx.snap | 40 ++++++++++++++++++- components/ClassInviteTable.js | 38 +++++++++++++++++- 2 files changed, 74 insertions(+), 4 deletions(-) diff --git a/__tests__/components/__snapshots__/classInviteTable.test.jsx.snap b/__tests__/components/__snapshots__/classInviteTable.test.jsx.snap index 3763d8aa7..fc8506352 100644 --- a/__tests__/components/__snapshots__/classInviteTable.test.jsx.snap +++ b/__tests__/components/__snapshots__/classInviteTable.test.jsx.snap @@ -12,11 +12,46 @@ exports[`ClassInviteTable displays invites in a table 1`] = ` className="group flex items-center" >

Classroom: how to build a website

+
+ + + + +
+

+ Certifications +

+

+ No certifications assigned +

+
+
@@ -53,7 +88,8 @@ exports[`ClassInviteTable displays invites in a table 1`] = `

learn how to build a website in a jiffy

diff --git a/components/ClassInviteTable.js b/components/ClassInviteTable.js index 8809f47b0..d85a9d5db 100644 --- a/components/ClassInviteTable.js +++ b/components/ClassInviteTable.js @@ -134,9 +134,40 @@ export default function ClassInviteTable({ className='group block max-w-xl mx-auto p-6 bg-fcc-gray-15 border-2 border-fcc-gray-90 ring-1 ring-slate-900/5 shadow-lg space-y-3 hover:bg-fcc-gray-90 hover:ring-sky-500' >
-

+

Classroom: {currentClass.classroomName}

+
+ + + + +
+

Certifications

+ {getSelectedCerts().length > 0 ? ( +
    + {getSelectedCerts().map(cert => ( +
  • + {cert.displayName} +
  • + ))} +
+ ) : ( +

No certifications assigned

+ )} +
+
{/* <-------Menu Item Selection -----> */}
@@ -356,7 +387,10 @@ export default function ClassInviteTable({ )}
-

+

{currentClass.description}

From 3fb1372a5d8c77eccf2dc90f83ce594da619b9b8 Mon Sep 17 00:00:00 2001 From: Newton Chung Date: Tue, 4 Aug 2026 15:11:53 -0700 Subject: [PATCH 2/2] Add Client-side CSS Text-Wrapping and Character Count Caps Users can only write class titles of up to 100 characters and descriptions of up to 500 characters. The Class card truncates after 2 lines of the class title and 4 lines of the description. --- .../__snapshots__/classInviteTable.test.jsx.snap | 2 +- .../components/__snapshots__/modal.test.jsx.snap | 14 ++++++++++++++ components/ClassInviteTable.js | 10 +++++++++- components/modal.js | 8 ++++++++ 4 files changed, 32 insertions(+), 2 deletions(-) diff --git a/__tests__/components/__snapshots__/classInviteTable.test.jsx.snap b/__tests__/components/__snapshots__/classInviteTable.test.jsx.snap index fc8506352..bbe11f051 100644 --- a/__tests__/components/__snapshots__/classInviteTable.test.jsx.snap +++ b/__tests__/components/__snapshots__/classInviteTable.test.jsx.snap @@ -12,7 +12,7 @@ exports[`ClassInviteTable displays invites in a table 1`] = ` className="group flex items-center" >

Classroom: how to build a website diff --git a/__tests__/components/__snapshots__/modal.test.jsx.snap b/__tests__/components/__snapshots__/modal.test.jsx.snap index 43a6cdab4..ced4b5e4c 100644 --- a/__tests__/components/__snapshots__/modal.test.jsx.snap +++ b/__tests__/components/__snapshots__/modal.test.jsx.snap @@ -78,11 +78,18 @@ exports[`Modal Component renders whole form after header clicked 1`] = ` +

+ 0 + /100 +

+

+ 0 + /500 +

-

+

Classroom: {currentClass.classroomName}

@@ -322,9 +322,13 @@ export default function ClassInviteTable({ } id='class-name' name='classname' + maxLength={100} className='appearance-none rounded-none relative block w-full px-3 py-2 border border-gray-300 placeholder-gray-500 text-gray-900 rounded-t-md focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 focus:z-10 sm:text-sm' placeholder={currentClass.classroomName} > +

+ {formData.className?.length ?? 0}/100 +

@@ -342,9 +346,13 @@ export default function ClassInviteTable({ } id='description-text' name='description' + maxLength={500} className='appearance-none rounded-none relative block w-full px-3 py-2 border border-gray-300 placeholder-gray-500 text-gray-900 rounded-t-md focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 focus:z-10 sm:text-sm' placeholder={currentClass.description} > +

+ {formData.description?.length ?? 0}/500 +

diff --git a/components/modal.js b/components/modal.js index 97238a3af..97d7266a4 100644 --- a/components/modal.js +++ b/components/modal.js @@ -105,9 +105,13 @@ export default function Modal({ id='class-name' name='classname' required + maxLength={100} className='appearance-none rounded-none relative block w-full px-3 py-2 border border-gray-300 placeholder-gray-500 text-gray-900 rounded-t-md focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 focus:z-10 sm:text-sm' placeholder='Class Name' > +

+ {formData.classroomName?.length ?? 0}/100 +

@@ -126,9 +130,13 @@ export default function Modal({ id='description-text' name='description' required + maxLength={500} className='appearance-none rounded-none relative block w-full px-3 py-2 border border-gray-300 placeholder-gray-500 text-gray-900 rounded-t-md focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 focus:z-10 sm:text-sm' placeholder='Description' > +

+ {formData.description?.length ?? 0}/500 +