From e3a8f2db021fe8bd54952a02d0259dae1c9a688f Mon Sep 17 00:00:00 2001 From: Kouji Takao Date: Wed, 8 Apr 2026 13:54:44 +0900 Subject: [PATCH] feat: improve post-assignment UI and prevent double posting MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Redesign post-assignment form: clearer header, target class label, full-width title input, hint text about GC settings - Default title now uses assignment name only (not class name) - Add Google Classroom icon to post/view buttons - Save courseWorkId and alternateLink to DynamoDB after posting - After posting, button changes from "課題を配信" to "課題を確認" which opens the Google Classroom assignment in a new tab - Return googleClassroomAlternateLink in list/get classroom APIs Co-Authored-By: Claude Opus 4.6 (1M context) --- infra/smalruby-classroom/lambda/handler.ts | 13 ++++ .../classroom-modal/classroom-modal.css | 28 ++++++++ .../classroom-modal/teacher-class-detail.jsx | 72 ++++++++++++++----- .../teacher-post-assignment.jsx | 47 +++++++++--- .../src/containers/use-teacher-classroom.js | 18 +++++ packages/scratch-gui/src/locales/en.js | 9 ++- packages/scratch-gui/src/locales/ja-Hira.js | 9 ++- packages/scratch-gui/src/locales/ja.js | 9 ++- 8 files changed, 171 insertions(+), 34 deletions(-) diff --git a/infra/smalruby-classroom/lambda/handler.ts b/infra/smalruby-classroom/lambda/handler.ts index 49c918fd260..9ef8e625ae9 100644 --- a/infra/smalruby-classroom/lambda/handler.ts +++ b/infra/smalruby-classroom/lambda/handler.ts @@ -313,6 +313,7 @@ async function handleListClassrooms(teacherSub: string): Promise - {selectedClassroom.googleClassroomCourseId && ( - - )} + {selectedClassroom.googleClassroomCourseId && + (selectedClassroom.googleClassroomAlternateLink ? ( + + + + + ) : ( + + ))} {/* Join code with expand button */} diff --git a/packages/scratch-gui/src/components/classroom-modal/teacher-post-assignment.jsx b/packages/scratch-gui/src/components/classroom-modal/teacher-post-assignment.jsx index 6755e8c629e..6e3ffdc50dd 100644 --- a/packages/scratch-gui/src/components/classroom-modal/teacher-post-assignment.jsx +++ b/packages/scratch-gui/src/components/classroom-modal/teacher-post-assignment.jsx @@ -4,6 +4,7 @@ import React, { useCallback, useState } from 'react'; import ErrorDisplay from './error-display.jsx'; +import googleClassroomIcon from '../classroom-teacher-modal/google-classroom-icon.png'; import styles from './classroom-modal.css'; const TeacherPostAssignment = ({ @@ -15,9 +16,7 @@ const TeacherPostAssignment = ({ onBack, onPostAssignment, }) => { - const defaultTitle = selectedClassroom - ? `${selectedClassroom.className}${selectedClassroom.assignmentName ? ` (${selectedClassroom.assignmentName})` : ''}` - : ''; + const defaultTitle = selectedClassroom?.assignmentName || ''; const [title, setTitle] = useState(defaultTitle); const [description, setDescription] = useState(''); const [posted, setPosted] = useState(false); @@ -66,9 +65,6 @@ const TeacherPostAssignment = ({ id="gui.classroom.postAssignment.title" /> -
- {selectedClassroom?.className} -
{posted ? (
) : ( <> +
+ +
+
+ +
-
-
+
+ +