diff --git a/package-lock.json b/package-lock.json
index e1748f5b..6d6aa887 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -20,6 +20,7 @@
"@fontsource/noto-sans-arabic": "5.2.10",
"@fortawesome/fontawesome-svg-core": "6.6.0",
"@fortawesome/free-brands-svg-icons": "6.6.0",
+ "@fortawesome/free-regular-svg-icons": "6.6.0",
"@fortawesome/free-solid-svg-icons": "6.6.0",
"@fortawesome/react-fontawesome": "0.2.2",
"@google-cloud/translate": "9.3.0",
@@ -3251,6 +3252,19 @@
"node": ">=6"
}
},
+ "node_modules/@fortawesome/free-regular-svg-icons": {
+ "version": "6.6.0",
+ "resolved": "https://registry.npmjs.org/@fortawesome/free-regular-svg-icons/-/free-regular-svg-icons-6.6.0.tgz",
+ "integrity": "sha512-Yv9hDzL4aI73BEwSEh20clrY8q/uLxawaQ98lekBx6t9dQKDHcDzzV1p2YtBGTtolYtNqcWdniOnhzB+JPnQEQ==",
+ "dev": true,
+ "license": "(CC-BY-4.0 AND MIT)",
+ "dependencies": {
+ "@fortawesome/fontawesome-common-types": "6.6.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/@fortawesome/free-solid-svg-icons": {
"version": "6.6.0",
"dev": true,
diff --git a/package.json b/package.json
index c3a38126..3c60200e 100644
--- a/package.json
+++ b/package.json
@@ -29,6 +29,7 @@
"@fontsource/noto-sans-arabic": "5.2.10",
"@fortawesome/fontawesome-svg-core": "6.6.0",
"@fortawesome/free-brands-svg-icons": "6.6.0",
+ "@fortawesome/free-regular-svg-icons": "6.6.0",
"@fortawesome/free-solid-svg-icons": "6.6.0",
"@fortawesome/react-fontawesome": "0.2.2",
"@google-cloud/translate": "9.3.0",
diff --git a/src/components/Icon.tsx b/src/components/Icon.tsx
index b19c96f7..e234cc88 100644
--- a/src/components/Icon.tsx
+++ b/src/components/Icon.tsx
@@ -1,5 +1,6 @@
import { config } from "@fortawesome/fontawesome-svg-core";
import * as FaSolid from "@fortawesome/free-solid-svg-icons";
+import * as FaRegular from "@fortawesome/free-regular-svg-icons";
import * as FaBrands from "@fortawesome/free-brands-svg-icons";
import {
FontAwesomeIcon,
@@ -30,6 +31,8 @@ const iconMap = {
"chevron-down": FaSolid.faChevronDown,
"chevron-up": FaSolid.faChevronUp,
"chart-line": FaSolid.faChartLine,
+ circle: FaSolid.faCircle,
+ "circle-hollow": FaRegular.faCircle,
"circle-play": FaSolid.faCirclePlay,
close: FaSolid.faXmark,
database: FaSolid.faDatabase,
diff --git a/src/messages/ar.json b/src/messages/ar.json
index 2e7d56b3..d426436e 100644
--- a/src/messages/ar.json
+++ b/src/messages/ar.json
@@ -463,6 +463,12 @@
"title": "اختر الفصل",
"reference": "مرجع الفصل",
"back_to_books": "العودة إلى الأسفار",
+ "book_column": "السفر",
+ "glosses_column": "اللمعات",
+ "status_complete": "مكتمل",
+ "status_none": "لا شيء",
+ "status_many": "كثير",
+ "status_some": "بعض",
"invalid": "يرجى إدخال مرجع فصل صحيح",
"cancel": "إلغاء",
"go": "اذهب",
diff --git a/src/messages/en.json b/src/messages/en.json
index cce2a83c..7df6ddd6 100644
--- a/src/messages/en.json
+++ b/src/messages/en.json
@@ -445,6 +445,12 @@
"title": "Choose chapter",
"reference": "Chapter reference",
"back_to_books": "Back to books",
+ "book_column": "Book",
+ "glosses_column": "Glosses",
+ "status_complete": "Complete",
+ "status_none": "None",
+ "status_many": "Many",
+ "status_some": "Some",
"invalid": "Please enter a valid chapter reference",
"cancel": "Cancel",
"go": "Go",
diff --git a/src/ui/study/components/ChapterPickerDialog.tsx b/src/ui/study/components/ChapterPickerDialog.tsx
index f86ae19e..3e9c6beb 100644
--- a/src/ui/study/components/ChapterPickerDialog.tsx
+++ b/src/ui/study/components/ChapterPickerDialog.tsx
@@ -11,15 +11,18 @@ import {
} from "@/verse-utils";
import { SubmitEvent, useEffect, useMemo, useRef, useState } from "react";
import { useTranslations } from "use-intl";
+import { ProgressByBookIdReadModel } from "../readModels/getReadBookProgressReadModel";
interface ChapterPickerDialogProps {
chapterId: string;
+ progressByBookId: ProgressByBookIdReadModel;
onCancel(): void;
onSubmit(chapterId: string): void;
}
export default function ChapterPickerDialog({
chapterId,
+ progressByBookId,
onCancel,
onSubmit,
}: ChapterPickerDialogProps) {
@@ -159,24 +162,77 @@ export default function ChapterPickerDialog({
>
- :
- {options.books.map((book) => {
- return (
- -
-