-
Notifications
You must be signed in to change notification settings - Fork 58
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* Still need to add tsconfig and other files to make it work
- Loading branch information
Showing
22 changed files
with
651 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
import * as React from "react"; | ||
|
||
export const useAverage = ({ calendarView }) => { | ||
const [isAverage, setIsAverage] = React.useState(false); | ||
React.useEffect(() => { | ||
setIsAverage( | ||
["week", "weeks", "month", "months", "monthInDays"].includes(calendarView) | ||
); | ||
}, [calendarView]); | ||
return { isAverage }; | ||
}; |
60 changes: 60 additions & 0 deletions
60
packages/common-lib/src/utils/customhooks/useDesignHook.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,60 @@ | ||
// Lib | ||
import * as React from "react"; | ||
import { calendar } from "@shiksha/common-lib"; | ||
|
||
// Utils | ||
import { isMoment, isMoment2DArray } from "utils/types/typeGuards"; | ||
import { PRESENT } from "utils/functions/Constants"; | ||
import { colorTheme } from "utils/functions/ColorTheme"; | ||
import { GetStudentsAttendance } from "utils/functions/GetStudentsAttendance"; | ||
|
||
export const useDesignHook = ({ attendance, page, calendarView, t }) => { | ||
const [design, setDesign] = React.useState<any>({}); | ||
const holidays = []; | ||
React.useEffect(() => { | ||
let daysWithoutHolidays = []; | ||
if (typeof page === "object") { | ||
// @ts-ignore | ||
daysWithoutHolidays = page.map((e) => { | ||
const dat = calendar(e, calendarView ? calendarView : "days"); | ||
if (isMoment(dat) || isMoment2DArray(dat)) return; | ||
|
||
return dat.filter( | ||
(e) => !(!e.day() || holidays.includes(e.format("YYYY-MM-DD"))) | ||
).length; | ||
}); | ||
} | ||
if (attendance[0]) { | ||
let percentage = 0; | ||
let attendanceAll = GetStudentsAttendance({ | ||
attendance: attendance[0], | ||
type: "id", | ||
}); | ||
let presentAttendanceCount = attendanceAll.filter( | ||
(e) => e.attendance && e.attendance !== PRESENT | ||
).length; | ||
percentage = (presentAttendanceCount * 100) / daysWithoutHolidays.length; | ||
if (percentage && percentage >= 100) { | ||
setDesign({ | ||
bg: colorTheme.success, | ||
iconName: "EmotionHappyLineIcon", | ||
titleHeading: | ||
t("YOU_HAVE_BEEN_PRESENT_ALL_DAYS_THIS") + " " + calendarView, | ||
}); | ||
} else if (percentage && percentage < 100 && percentage >= 50) { | ||
setDesign({ | ||
bg: colorTheme.warning, | ||
iconName: "EmotionNormalLineIcon", | ||
titleHeading: t("AGERAGE_CAN_BE_IMPROVED"), | ||
}); | ||
} else { | ||
setDesign({ | ||
bg: colorTheme.danger, | ||
iconName: "EmotionSadLineIcon", | ||
titleHeading: t("ABSENT_TODAY_POOR_THAN_LAST") + " " + calendarView, | ||
}); | ||
} | ||
} | ||
}, []); | ||
return { design }; | ||
}; |
15 changes: 15 additions & 0 deletions
15
packages/common-lib/src/utils/customhooks/useGenderList.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
// Lib | ||
import * as React from "react"; | ||
|
||
// Utilities | ||
import { HandleGenderList } from "utils/functions/HandleGenderList"; | ||
|
||
export const useGenderList = ({ students, t }) => { | ||
const [genderList, setGenderList] = React.useState([]); | ||
React.useEffect(() => { | ||
const genderList = HandleGenderList(students, t); | ||
setGenderList([...genderList, t("TOTAL")]); | ||
}, [students]); | ||
|
||
return { genderList }; | ||
}; |
59 changes: 59 additions & 0 deletions
59
packages/common-lib/src/utils/customhooks/usePAStudents.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,59 @@ | ||
// Lib | ||
import { useState, useEffect } from "react"; | ||
import { calendar } from "@shiksha/common-lib"; | ||
import { getStudentsPresentAbsent } from "@shiksha/common-lib"; | ||
|
||
// Services | ||
import { GetAttendance, DefaultStudents } from "services/calls/registryCalls"; | ||
|
||
// Utilities | ||
import { MomentUnionType } from "utils/types/types"; | ||
import { isMomentArray } from "utils/types/typeGuards"; | ||
|
||
export const usePAStudents = ({ students, attendance, type }) => { | ||
const holidays = []; | ||
const [paStudents, setPaStudents] = useState([]); | ||
useEffect(() => { | ||
const getPresentStudents = async ({ students }) => { | ||
let weekdays: MomentUnionType = calendar(-1, "week"); | ||
// Check type, also for typescripts | ||
if (isMomentArray(weekdays)) { | ||
let workingDaysCount = | ||
type.toLowerCase() === "present" | ||
? weekdays.filter( | ||
(e) => !(!e.day() || holidays.includes(e.format("YYYY-MM-DD"))) | ||
)?.length | ||
: 3; | ||
let params = { | ||
fromDate: weekdays?.[0]?.format("YYYY-MM-DD"), | ||
toDate: weekdays?.[weekdays.length - 1]?.format("YYYY-MM-DD"), | ||
}; | ||
if (type.toLowerCase() === "absent") | ||
params["fun"] = "getAbsentStudents"; | ||
let attendanceData = await GetAttendance(params); | ||
let data; | ||
if (type.toLowerCase() === "present") | ||
data = getStudentsPresentAbsent( | ||
attendanceData, | ||
students, | ||
workingDaysCount | ||
); | ||
else | ||
data = getStudentsPresentAbsent( | ||
attendanceData, | ||
students, | ||
workingDaysCount, | ||
"Absent" | ||
); | ||
|
||
let dataNew = students.filter((e) => | ||
data.map((e) => e.id).includes(e.id) | ||
); | ||
setPaStudents(await DefaultStudents(dataNew)); | ||
} | ||
}; | ||
getPresentStudents({ students }); | ||
}, [students, attendance]); | ||
|
||
return [paStudents]; | ||
}; |
20 changes: 20 additions & 0 deletions
20
packages/common-lib/src/utils/customhooks/useStudentIds.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
import * as React from "react"; | ||
|
||
export const useStudentIds = ({ students }) => { | ||
const [studentIds, setStudentIds] = React.useState([]); | ||
React.useEffect(() => { | ||
let ignore = false; | ||
const getData = async () => { | ||
if (!ignore) { | ||
const temp = students.map((e) => e.id); | ||
setStudentIds(temp); | ||
} | ||
}; | ||
getData(); | ||
return () => { | ||
ignore = true; | ||
}; | ||
}, [students]); | ||
|
||
return { studentIds }; | ||
}; |
40 changes: 40 additions & 0 deletions
40
packages/common-lib/src/utils/customhooks/useWithoutHolidays.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
// Lib | ||
import * as React from "react"; | ||
import { calendar } from "@shiksha/common-lib"; | ||
|
||
// Utilities | ||
import { isMoment, isMoment2DArray } from "utils/types/typeGuards"; | ||
|
||
export const useWithoutHolidays = ({ page, calendarView }) => { | ||
const [withoutHolidays, setWithoutHolidays] = React.useState([]); | ||
const holidays = []; | ||
React.useEffect(() => { | ||
let daysWithoutHolidays = []; | ||
if (typeof page === "object") { | ||
// @ts-ignore | ||
daysWithoutHolidays = page.map((e) => { | ||
const dat = calendar(e, calendarView ? calendarView : "days"); | ||
if (isMoment(dat) || isMoment2DArray(dat)) return; | ||
|
||
return dat.filter( | ||
(e) => !(!e.day() || holidays.includes(e.format("YYYY-MM-DD"))) | ||
).length; | ||
}); | ||
setWithoutHolidays(daysWithoutHolidays); | ||
} else { | ||
const dat = calendar( | ||
page ? page : 0, | ||
calendarView ? calendarView : "days" | ||
); | ||
if (isMoment(dat) || isMoment2DArray(dat)) return; | ||
daysWithoutHolidays = [ | ||
dat.filter( | ||
(e) => !(!e.day() || holidays.includes(e.format("YYYY-MM-DD"))) | ||
).length, | ||
]; | ||
setWithoutHolidays(daysWithoutHolidays); | ||
} | ||
}, [calendarView, page]); | ||
|
||
return { withoutHolidays }; | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
import colorTheme from "colorTheme"; | ||
import { overrideColorTheme } from "@shiksha/common-lib"; | ||
const colors = overrideColorTheme(colorTheme); | ||
|
||
export { colors, colorTheme }; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
export const PRESENT = "Present"; | ||
export const ABSENT = "Absent"; | ||
export const UNMARKED = "Unmarked"; | ||
export const MALE = "Male"; | ||
export const FEMALE = "Female"; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,78 @@ | ||
// Constants | ||
import { useTranslation } from "react-i18next"; | ||
import { MALE, FEMALE } from "./Constants"; | ||
import { GetStudentsAttendance } from "./GetStudentsAttendance"; | ||
|
||
export interface ICountReport { | ||
gender?: any; | ||
isAverage?: any; | ||
attendance?: any; | ||
attendanceType?: any; | ||
type?: string; | ||
studentIds?: any; | ||
withoutHolidays?: any; | ||
students?: any; | ||
t?: any; | ||
} | ||
export const CountReport = ({ | ||
gender, | ||
isAverage, | ||
attendance, | ||
attendanceType, | ||
type, | ||
studentIds, | ||
withoutHolidays, | ||
students, | ||
t, | ||
}: ICountReport) => { | ||
let attendanceAll = GetStudentsAttendance({ attendance, type: "id" }); | ||
if (gender && [t("BOYS"), t("GIRLS")].includes(gender)) { | ||
studentIds = students | ||
.filter( | ||
(e) => | ||
e.gender === | ||
(gender === t("BOYS") ? MALE : gender === t("GIRLS") ? FEMALE : "") | ||
) | ||
.map((e) => e.id); | ||
} | ||
|
||
if (attendanceType === "Unmarked" && gender === t("TOTAL")) { | ||
let studentIds1 = attendanceAll.filter( | ||
(e) => studentIds.includes(e.studentId) && e.attendance !== attendanceType | ||
); | ||
let val = studentIds.length * withoutHolidays - studentIds1.length; | ||
if (isAverage) { | ||
return Math.round(val ? val / studentIds.length : 0); | ||
} else { | ||
return Math.round(val); | ||
} | ||
} else if (type === "Unmarked" || attendanceType === "Unmarked") { | ||
let studentIds1 = attendanceAll.filter((e) => | ||
studentIds.includes(e.studentId) | ||
); | ||
|
||
if (attendanceType === "Unmarked") { | ||
studentIds1 = attendanceAll.filter( | ||
(e) => | ||
studentIds.includes(e?.studentId) && e.attendance !== attendanceType | ||
); | ||
} | ||
let val = studentIds.length * withoutHolidays - studentIds1.length; | ||
if (isAverage) { | ||
return Math.round(val ? val / studentIds.length : 0); | ||
} else { | ||
return Math.round(val); | ||
} | ||
} else { | ||
let val = attendanceAll.filter( | ||
(e) => | ||
studentIds.includes(e?.studentId) && e.attendance === attendanceType | ||
).length; | ||
|
||
if (isAverage) { | ||
return Math.round(val ? val / studentIds.length : 0); | ||
} else { | ||
return Math.round(val); | ||
} | ||
} | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
import moment, { Moment } from "moment"; | ||
|
||
interface IFormatDate { | ||
date: Moment | Moment[] | Moment[][]; | ||
type?: string; | ||
} | ||
|
||
// TODO: Remove TSignore | ||
export const FormatDate: Function = ({ date, type }: IFormatDate) => { | ||
if (!date) return ""; | ||
if (type === "Month") { | ||
return moment(date[0]).format("MMMM Y"); | ||
} else if (type === "Week") { | ||
return ( | ||
moment(date[0]).format("D MMM") + | ||
" - " + | ||
// @ts-ignore | ||
moment(date[date.length - 1]).format("D MMM") | ||
); | ||
} else if (type === "Today") { | ||
// @ts-ignore | ||
return moment(date).format("D MMM, ddd, HH:MM"); | ||
} else if (type === "Tomorrow") { | ||
// @ts-ignore | ||
return moment(date).format("D MMM, ddd"); | ||
} else if (type === "Yesterday") { | ||
// @ts-ignore | ||
return moment(date).format("D MMM, ddd"); | ||
} else { | ||
// @ts-ignore | ||
return moment(date).format("D MMMM, Y"); | ||
} | ||
}; |
25 changes: 25 additions & 0 deletions
25
packages/common-lib/src/utils/functions/GetAttendanceReport.tsx
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
// Services | ||
import { GetAttendance } from "services/calls/registryCalls"; | ||
|
||
// Utils | ||
import { isMoment, isMoment2DArray } from "utils/types/typeGuards"; | ||
export interface IGetAttendanceReport { | ||
(page: any, calendar: Function, calendarView: string, fun?: string): any; | ||
} | ||
|
||
export const GetAttendanceReport: IGetAttendanceReport = async ( | ||
page, | ||
calendar, | ||
calendarView, | ||
fun | ||
) => { | ||
let weekdays = calendar(page, calendarView); | ||
if (isMoment(weekdays) || isMoment2DArray(weekdays)) return; | ||
let params = { | ||
fromDate: weekdays?.[0]?.format("Y-MM-DD"), | ||
toDate: weekdays?.[weekdays.length - 1]?.format("Y-MM-DD"), | ||
fun, | ||
}; | ||
const attendanceData = await GetAttendance(params); | ||
return attendanceData; | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
import moment from "moment"; | ||
export const GetLastAttendance = (attendance) => { | ||
let dates = attendance.map((d) => moment(d.updatedAt)); | ||
let date = moment.max(dates); | ||
return dates.length ? date.format("hh:mmA") : "N/A"; | ||
}; |
Oops, something went wrong.