| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400 |
- import moment from "moment";
- import type {
- TCourseJoinMode,
- TCourseMemberAction,
- TCourseMemberStatus,
- } from "../../api/Course";
- export interface IAction {
- mode: TCourseJoinMode[];
- status: TCourseMemberStatus;
- signUp?: TCourseMemberAction[];
- before: TCourseMemberAction[];
- duration: TCourseMemberAction[];
- after: TCourseMemberAction[];
- }
- export const getStudentActionsByStatus = (
- status?: TCourseMemberStatus,
- mode?: TCourseJoinMode,
- startAt?: string,
- endAt?: string,
- signUpStartAt?: string,
- signUpEndAt?: string
- ): TCourseMemberAction[] | undefined => {
- const output = getActionsByStatus(
- studentData,
- status,
- mode,
- startAt,
- endAt,
- signUpStartAt,
- signUpEndAt
- );
- console.log("getStudentActionsByStatus", output);
- return output;
- };
- const getActionsByStatus = (
- data: IAction[],
- status?: TCourseMemberStatus,
- mode?: TCourseJoinMode,
- startAt?: string,
- endAt?: string,
- signUpStartAt?: string,
- signUpEndAt?: string
- ): TCourseMemberAction[] | undefined => {
- console.debug("getActionsByStatus start");
- if (!startAt || !endAt || !mode || !status) {
- return undefined;
- }
- const inSignUp = moment().isBetween(
- moment(signUpStartAt),
- moment(signUpEndAt)
- );
- const actions = data.find((value) => {
- if (value.mode.includes(mode) && value.status === status) {
- if (inSignUp) {
- if (value.signUp && value.signUp.length > 0) {
- console.debug("getActionsByStatus got it", value.signUp);
- return true;
- }
- }
- if (moment().isBefore(moment(startAt))) {
- if (value.before && value.before.length > 0) {
- return true;
- }
- }
- if (moment().isBefore(moment(endAt))) {
- if (value.duration && value.duration.length > 0) {
- return true;
- }
- }
- if (value.after && value.after.length > 0) {
- return true;
- }
- }
- return false;
- });
- if (actions) {
- if (inSignUp && actions.signUp && actions.signUp.length > 0) {
- return actions.signUp;
- } else if (moment().isBefore(moment(startAt))) {
- return actions.before;
- } else if (moment().isBefore(moment(endAt))) {
- return actions.duration;
- } else {
- return actions.after;
- }
- } else {
- return undefined;
- }
- };
- export const test = (
- data: IAction[],
- action: TCourseMemberAction,
- startAt?: string,
- endAt?: string,
- mode?: TCourseJoinMode,
- status?: TCourseMemberStatus,
- signUpStartAt?: string,
- signUpEndAt?: string
- ): boolean => {
- if (!startAt || !endAt || !mode || !status) {
- return false;
- }
- const canDo = getActionsByStatus(
- data,
- status,
- mode,
- startAt,
- endAt,
- signUpStartAt,
- signUpEndAt
- )?.includes(action);
- if (canDo) {
- return true;
- } else {
- return false;
- }
- };
- export const managerCanDo = (
- action: TCourseMemberAction,
- startAt?: string,
- endAt?: string,
- mode?: TCourseJoinMode,
- status?: TCourseMemberStatus,
- signUpStartAt?: string,
- signUpEndAt?: string
- ): boolean => {
- if (!startAt || !endAt || !mode || !status) {
- return false;
- }
- return test(
- managerData,
- action,
- startAt,
- endAt,
- mode,
- status,
- signUpStartAt,
- signUpEndAt
- );
- };
- export const studentCanDo = (
- action: TCourseMemberAction,
- startAt?: string,
- endAt?: string,
- mode?: TCourseJoinMode,
- status?: TCourseMemberStatus,
- signUpStartAt?: string,
- signUpEndAt?: string
- ): boolean => {
- if (!startAt || !endAt || !mode || !status) {
- return false;
- }
- return test(
- studentData,
- action,
- startAt,
- endAt,
- mode,
- status,
- signUpStartAt,
- signUpEndAt
- );
- };
- interface IStatusColor {
- status: TCourseMemberStatus;
- color: string;
- }
- export const getStatusColor = (status?: TCourseMemberStatus): string => {
- let color = "unset";
- const setting: IStatusColor[] = [
- { status: "applied", color: "blue" },
- { status: "invited", color: "blue" },
- { status: "accepted", color: "green" },
- { status: "agreed", color: "green" },
- { status: "rejected", color: "orange" },
- { status: "disagreed", color: "red" },
- { status: "left", color: "red" },
- { status: "blocked", color: "orange" },
- ];
- const CourseStatusColor = setting.find((value) => value.status === status);
- if (CourseStatusColor) {
- color = CourseStatusColor.color;
- }
- return color;
- };
- const studentData: IAction[] = [
- {
- mode: ["open"],
- status: "none",
- signUp: ["join"],
- before: [],
- duration: [],
- after: [],
- },
- {
- mode: ["open"],
- status: "applied",
- before: ["leave"],
- duration: ["leave"],
- after: [],
- },
- {
- mode: ["open"],
- status: "joined",
- before: ["leave"],
- duration: ["leave"],
- after: [],
- },
- {
- mode: ["open"],
- status: "left",
- signUp: ["join"],
- before: [],
- duration: ["join"],
- after: [],
- },
- {
- mode: ["open"],
- status: "invited",
- signUp: ["agree", "disagree"],
- before: ["agree", "disagree"],
- duration: [],
- after: [],
- },
- {
- mode: ["manual", "invite"],
- status: "none",
- signUp: ["apply"],
- before: [],
- duration: [],
- after: [],
- },
- {
- mode: ["manual", "invite"],
- status: "invited",
- signUp: ["agree", "disagree"],
- before: ["agree", "disagree"],
- duration: [],
- after: [],
- },
- {
- mode: ["manual", "invite"],
- status: "revoked",
- signUp: ["apply"],
- before: [],
- duration: [],
- after: [],
- },
- {
- mode: ["manual", "invite"],
- status: "accepted",
- before: ["leave"],
- duration: ["leave"],
- after: [],
- },
- {
- mode: ["manual", "invite"],
- status: "rejected",
- before: [],
- duration: [],
- after: [],
- },
- {
- mode: ["manual", "invite"],
- status: "blocked",
- before: [],
- duration: [],
- after: [],
- },
- {
- mode: ["manual", "invite"],
- status: "applied",
- before: ["cancel"],
- duration: [],
- after: [],
- },
- {
- mode: ["manual", "invite"],
- status: "canceled",
- signUp: ["apply"],
- before: [],
- duration: [],
- after: [],
- },
- {
- mode: ["manual", "invite"],
- status: "agreed",
- before: ["leave"],
- duration: ["leave"],
- after: [],
- },
- {
- mode: ["manual", "invite"],
- status: "disagreed",
- signUp: ["apply"],
- before: [],
- duration: [],
- after: [],
- },
- {
- mode: ["manual", "invite"],
- status: "left",
- before: ["apply"],
- duration: [],
- after: [],
- },
- ];
- const managerData: IAction[] = [
- {
- mode: ["manual", "invite"],
- status: "none",
- before: [],
- duration: [],
- after: [],
- },
- {
- mode: ["manual", "invite"],
- status: "invited",
- before: ["revoke"],
- duration: [],
- after: [],
- },
- {
- mode: ["manual", "invite"],
- status: "revoked",
- before: [],
- duration: [],
- after: [],
- },
- {
- mode: ["manual", "invite"],
- status: "canceled",
- signUp: [],
- before: [],
- duration: [],
- after: [],
- },
- {
- mode: ["manual", "invite"],
- status: "accepted",
- before: [],
- duration: ["block"],
- after: [],
- },
- {
- mode: ["manual", "invite"],
- status: "rejected",
- before: [],
- duration: [],
- after: [],
- },
- {
- mode: ["manual", "invite"],
- status: "blocked",
- before: [],
- duration: [],
- after: [],
- },
- {
- mode: ["manual", "invite"],
- status: "applied",
- before: ["accept", "reject"],
- duration: ["accept", "reject"],
- after: [],
- },
- {
- mode: ["manual", "invite"],
- status: "agreed",
- before: [],
- duration: ["block"],
- after: [],
- },
- {
- mode: ["manual", "invite"],
- status: "disagreed",
- before: [],
- duration: [],
- after: [],
- },
- {
- mode: ["manual", "invite"],
- status: "left",
- before: [],
- duration: [],
- after: [],
- },
- ];
|