@@ -90,14 +91,14 @@
id={taskResult.contest_id + '-' + taskResult.task_id}
class={getBackgroundColorFrom(taskResult.status_name)}
>
-
openModal(taskResult)}
- >
-
-
-
-
+
+ updateTaskResult(updatedTask)}
+ />
+
+
-
-
diff --git a/src/lib/components/TaskTables/TaskTableBodyCell.svelte b/src/lib/components/TaskTables/TaskTableBodyCell.svelte
index 5ae8e1e4b..a0cdd0c96 100644
--- a/src/lib/components/TaskTables/TaskTableBodyCell.svelte
+++ b/src/lib/components/TaskTables/TaskTableBodyCell.svelte
@@ -65,6 +65,12 @@
-
+
{/snippet}
diff --git a/src/routes/workbooks/[slug]/+page.svelte b/src/routes/workbooks/[slug]/+page.svelte
index 1d6567617..1df4bb9f3 100644
--- a/src/routes/workbooks/[slug]/+page.svelte
+++ b/src/routes/workbooks/[slug]/+page.svelte
@@ -13,9 +13,8 @@
import PublicationStatusLabel from '$lib/components/WorkBooks/PublicationStatusLabel.svelte';
import CompletedTasks from '$lib/components/Trophies/CompletedTasks.svelte';
import HeadingOne from '$lib/components/HeadingOne.svelte';
- import UpdatingModal from '$lib/components/SubmissionStatus/UpdatingModal.svelte';
- import SubmissionStatusImage from '$lib/components/SubmissionStatus/SubmissionStatusImage.svelte';
import GradeLabel from '$lib/components/GradeLabel.svelte';
+ import SubmissionStatusTableBodyCell from '$lib/components/SubmissionStatus/SubmissionStatusInTableBodyCell.svelte';
import ExternalLinkWrapper from '$lib/components/ExternalLinkWrapper.svelte';
import CommentAndHint from '$lib/components/WorkBook/CommentAndHint.svelte';
@@ -44,6 +43,17 @@
return taskResults?.get(taskId) as TaskResult;
};
+ const updateTaskResult = (updatedTask: TaskResult): void => {
+ const taskId = updatedTask.task_id;
+
+ if (taskResults.has(taskId)) {
+ // Force to update the task result.
+ const newTaskResults = new Map(taskResults);
+ newTaskResults.set(taskId, updatedTask);
+ taskResults = newTaskResults;
+ }
+ };
+
const getTaskGrade = (taskId: string): TaskGrade => {
return getTaskResult(taskId)?.grade as TaskGrade;
};
@@ -75,19 +85,6 @@
return getContestIdFrom(taskId) + '-' + taskId;
};
- // HACK:: `updatingModal` is updated, but is not declared with `$state(...)`. Changing its value will not correctly trigger updates.
- // eslint-disable-next-line svelte/valid-compile
- let updatingModal: UpdatingModal | null = null;
-
- // HACK: clickを1回実行するとactionsが2回実行されてしまう。原因と修正方法が分かっていない。
- function handleClick(taskId: string) {
- if (updatingModal) {
- updatingModal.openModal(getTaskResult(taskId));
- } else {
- console.error('Failed to initialize UpdatingModal component.');
- }
- }
-
$effect(() => {
if (taskResults && workBook && Array.isArray(workBook.workBookTasks)) {
workBookTasks = workBook.workBookTasks;
@@ -173,18 +170,14 @@