From a08572e89ee94764daa3bfbf1ae0f2729cf4e98a Mon Sep 17 00:00:00 2001 From: disturm Date: Sat, 4 May 2024 21:16:10 +0500 Subject: [PATCH] =?UTF-8?q?=D0=A1=D0=BE=D0=BF=D0=BE=D1=81=D1=82=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BD=D0=B0=D0=B7=D0=B2?= =?UTF-8?q?=D0=B0=D0=BD=D0=B8=D1=8F=20=D0=B3=D1=80=D1=83=D0=BF=D0=BF=D1=8B?= =?UTF-8?q?=20=D0=BF=D0=BE=20=D0=BF=D1=80=D0=B5=D1=84=D0=B8=D0=BA=D1=81?= =?UTF-8?q?=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../work/GoogleTableFetch/index.tsx | 38 ++++++++++++++----- src/managers/MarksManager.ts | 5 ++- 2 files changed, 32 insertions(+), 11 deletions(-) diff --git a/src/components/work/GoogleTableFetch/index.tsx b/src/components/work/GoogleTableFetch/index.tsx index c1910c0..6ad0232 100644 --- a/src/components/work/GoogleTableFetch/index.tsx +++ b/src/components/work/GoogleTableFetch/index.tsx @@ -6,7 +6,11 @@ import SpreadsheetManager, { } from "../../../managers/SpreadsheetManager"; import NestedList, { NestedItem } from "../../shared/NestedList"; import { Collapse, Container } from "@material-ui/core"; -import { compareNormalized, filterNull } from "../../../helpers/tools"; +import { + compareNormalized, + filterNull, + normalizeString, +} from "../../../helpers/tools"; import { getSpreadsheetProperties } from "../../../apis/GoogleApi"; import BrsApi, { Discipline, TermType } from "../../../apis/BrsApi"; import "./styles.css"; @@ -100,17 +104,31 @@ class GoogleTableFetch extends React.Component { availableDisciplines: Discipline[], spreadsheetData: SpreadsheetData ): { allMissed: boolean; missedCount: number; disciplines: NestedItem[] } { - const actualGroups = new Set( - filterNull(spreadsheetData.actualStudents.map((s) => s.groupName)) + const actualGroups = Array.from( + new Set( + filterNull( + spreadsheetData.actualStudents.map((s) => s.groupName) + ).filter((it) => it.length > 0) + ) + ); + const availableGroups = Array.from( + new Set(availableDisciplines.map((s) => s.group)) ); - const availableGroups = new Set(availableDisciplines.map((s) => s.group)); let missedCount = 0; - const nestedItems: NestedItem[] = Array.from(actualGroups).map((group) => { - const groupMissed = !availableGroups.has(group); - if (groupMissed) missedCount++; - return { title: group, colored: groupMissed }; - }); + const nestedItems: NestedItem[] = actualGroups.map((group) => { + const normalizedGroup = normalizeString(group); + const availableForActual = availableGroups.filter((it) => + normalizeString(it).startsWith(normalizedGroup) + ); + + if (availableForActual.length === 0) { + missedCount++; + return [{ title: group, colored: true }]; + } else { + return availableForActual.map((it) => ({ title: it, colored: false })); + } + }).flat(); const disciplineConfig = spreadsheetData.disciplineConfig; const disciplineTime = @@ -121,7 +139,7 @@ class GoogleTableFetch extends React.Component { : `${disciplineConfig.year}/${disciplineConfig.year + 1}`; const disciplineTitle = `${disciplineConfig.name}, ${disciplineTime}, ${disciplineConfig.course} ะบัƒั€ั`; return { - allMissed: missedCount === actualGroups.size, + allMissed: missedCount === actualGroups.length, missedCount, disciplines: [ { diff --git a/src/managers/MarksManager.ts b/src/managers/MarksManager.ts index 0923615..4e2e8ad 100644 --- a/src/managers/MarksManager.ts +++ b/src/managers/MarksManager.ts @@ -9,6 +9,7 @@ import BrsApi, { import { compareNormalized, groupBy, + normalizeString, parseAnyFloat, pluralize, round10, @@ -817,7 +818,9 @@ function isSuitableDiscipline( discipline: Discipline ) { if (actualStudent.groupName && actualStudent.groupName.length > 0) { - return compareNormalized(actualStudent.groupName, discipline.group); + const s = normalizeString(actualStudent.groupName) + const d = normalizeString(discipline.group) + return d.startsWith(s) } return true;