diff --git a/apps/portal/locale/en.json b/apps/portal/locale/en.json
index 3844c27d4..c78292e31 100644
--- a/apps/portal/locale/en.json
+++ b/apps/portal/locale/en.json
@@ -238,7 +238,9 @@
"title": "Robot Game Scorer",
"no-equipment-constraint-title": "No Equipment Constraint:",
"no-equipment-constraint": "When this symbol appears in the top-right corner of a mission, the following constraint is applied: “No equipment may be touching any part of this mission model at the end of the match to score for this mission.”",
- "score": "{points} pts"
+ "score": "{points} pts",
+ "final-score": "Final Score",
+ "points": "Points"
},
"rubrics": {
"title": "Rubrics",
diff --git a/apps/portal/locale/he.json b/apps/portal/locale/he.json
index 7f33c78b3..841fb547c 100644
--- a/apps/portal/locale/he.json
+++ b/apps/portal/locale/he.json
@@ -236,9 +236,11 @@
"tools": {
"scorer": {
"title": "מחשבון ניקוד",
- "no-equipment-constraint-title": "מגבלת ”ללא מגע ציוד של הקבוצה“:",
+ "no-equipment-constraint-title": "מגבלת \"ללא מגע ציוד של הקבוצה\":",
"no-equipment-constraint": "כאשר סמל זה מופיע בפינה השמאלית העליונה של משימה, החוק הבא חל: דגם משימה אינו יכול לקבל נקודות אם הוא נוגע בציוד בסיום המקצה.",
- "score": "{points} נק'"
+ "score": "{points} נק'",
+ "final-score": "ניקוד סופי",
+ "points": "נקודות"
},
"rubrics": {
"title": "מחווני שיפוט",
diff --git a/apps/portal/src/app/[locale]/tools/rubrics/components/rubric-print-styles.tsx b/apps/portal/src/app/[locale]/tools/rubrics/components/rubric-print-styles.tsx
new file mode 100644
index 000000000..34be70960
--- /dev/null
+++ b/apps/portal/src/app/[locale]/tools/rubrics/components/rubric-print-styles.tsx
@@ -0,0 +1,98 @@
+'use client';
+
+export const RubricPrintStyles = () => {
+ return (
+
+ );
+};
diff --git a/apps/portal/src/app/[locale]/tools/rubrics/page.tsx b/apps/portal/src/app/[locale]/tools/rubrics/page.tsx
index 91eac089f..f080a3129 100644
--- a/apps/portal/src/app/[locale]/tools/rubrics/page.tsx
+++ b/apps/portal/src/app/[locale]/tools/rubrics/page.tsx
@@ -1,23 +1,34 @@
'use client';
-import { Container } from '@mui/material';
+import { Container, Box } from '@mui/material';
import { ResponsiveComponent } from '@lems/shared';
import { RubricTable } from './components/desktop';
import { MobileRubricForm } from './components/mobile/rubric-form';
import { RubricProvider } from './components/rubric-context';
import { JudgingTimer } from './components/judging-timer';
import { RubricHeader } from './components/rubric-header';
+import { RubricPrintStyles } from './components/rubric-print-styles';
export default function RubricsPage() {
return (
-
-
-
+ <>
+
- } mobile={} />
+
+
+
+
+
-
-
-
+
+ } mobile={} />
+
+
+
+
+
+
+
+ >
);
}
diff --git a/apps/portal/src/app/[locale]/tools/scorer/components/print-score-summary.tsx b/apps/portal/src/app/[locale]/tools/scorer/components/print-score-summary.tsx
new file mode 100644
index 000000000..bd6b72556
--- /dev/null
+++ b/apps/portal/src/app/[locale]/tools/scorer/components/print-score-summary.tsx
@@ -0,0 +1,58 @@
+'use client';
+
+import { useContext } from 'react';
+import { Box, Typography, Paper } from '@mui/material';
+import { useTranslations } from 'next-intl';
+import { MissionContext } from './mission-context';
+
+export const PrintScoreSummary = () => {
+ const t = useTranslations('pages.tools.scorer');
+ const { points } = useContext(MissionContext);
+
+ if (!points) return null;
+
+ return (
+
+
+
+ {t('final-score')}: {points} {t('points')}
+
+
+
+ );
+};
diff --git a/apps/portal/src/app/[locale]/tools/scorer/components/score-floater.tsx b/apps/portal/src/app/[locale]/tools/scorer/components/score-floater.tsx
index dbd4a0bda..08f5ec3fe 100644
--- a/apps/portal/src/app/[locale]/tools/scorer/components/score-floater.tsx
+++ b/apps/portal/src/app/[locale]/tools/scorer/components/score-floater.tsx
@@ -18,6 +18,7 @@ export const ScoreFloater = () => {
alignItems="center"
justifyContent="center"
spacing={3}
+ className="score-floater"
sx={{
p: 4,
position: 'fixed',
@@ -29,7 +30,10 @@ export const ScoreFloater = () => {
zIndex: 1,
bgcolor: 'primary.main',
borderRadius: 4,
- height: 50
+ height: 50,
+ '@media print': {
+ display: 'none !important'
+ }
}}
>
diff --git a/apps/portal/src/app/[locale]/tools/scorer/components/scorer-print-styles.tsx b/apps/portal/src/app/[locale]/tools/scorer/components/scorer-print-styles.tsx
new file mode 100644
index 000000000..cb5a71b0a
--- /dev/null
+++ b/apps/portal/src/app/[locale]/tools/scorer/components/scorer-print-styles.tsx
@@ -0,0 +1,77 @@
+'use client';
+
+export const ScorerPrintStyles = () => {
+ return (
+
+ );
+};
diff --git a/apps/portal/src/app/[locale]/tools/scorer/page.tsx b/apps/portal/src/app/[locale]/tools/scorer/page.tsx
index b6f1e2694..f4cb7f135 100644
--- a/apps/portal/src/app/[locale]/tools/scorer/page.tsx
+++ b/apps/portal/src/app/[locale]/tools/scorer/page.tsx
@@ -6,30 +6,36 @@ import { MissionProvider } from './components/mission-context';
import { ScoreFloater } from './components/score-floater';
import { FieldTimer } from './components/field-timer';
import { ScoresheetForm } from './components/scoresheet-form';
+import { ScorerPrintStyles } from './components/scorer-print-styles';
+import { PrintScoreSummary } from './components/print-score-summary';
export default async function ScorerPage() {
const t = await getTranslations('pages.tools.scorer');
return (
-
-
-
-
- {t('title')}
-
-
-
-
- {t('no-equipment-constraint-title')}
- {t('no-equipment-constraint')}
+ <>
+
+
+
+
+
+ {t('title')}
+
+
+
+
+ {t('no-equipment-constraint-title')}
+ {t('no-equipment-constraint')}
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+ >
);
}