Merge branch 'develop' into features-21-08-24
This commit is contained in:
@@ -54,11 +54,12 @@ import Checkbox from "@/components/Low/Checkbox";
|
||||
import List from "@/components/List";
|
||||
import { getUserCompanyName } from "@/resources/user";
|
||||
import {
|
||||
futureAssignmentFilter,
|
||||
pastAssignmentFilter,
|
||||
archivedAssignmentFilter,
|
||||
activeAssignmentFilter
|
||||
} from '@/utils/assignments';
|
||||
futureAssignmentFilter,
|
||||
pastAssignmentFilter,
|
||||
archivedAssignmentFilter,
|
||||
activeAssignmentFilter,
|
||||
} from "@/utils/assignments";
|
||||
import useUserBalance from "@/hooks/useUserBalance";
|
||||
|
||||
interface Props {
|
||||
user: CorporateUser;
|
||||
@@ -230,7 +231,6 @@ export default function CorporateDashboard({ user }: Props) {
|
||||
useState<CorporateUser>();
|
||||
const [selectedAssignment, setSelectedAssignment] = useState<Assignment>();
|
||||
const [isCreatingAssignment, setIsCreatingAssignment] = useState(false);
|
||||
const [userBalance, setUserBalance] = useState(0);
|
||||
|
||||
const { stats } = useStats();
|
||||
const { users, reload, isLoading } = useUsers();
|
||||
@@ -241,6 +241,7 @@ export default function CorporateDashboard({ user }: Props) {
|
||||
isLoading: isAssignmentsLoading,
|
||||
reload: reloadAssignments,
|
||||
} = useAssignments({ corporate: user.id });
|
||||
const { balance } = useUserBalance();
|
||||
|
||||
const appendUserFilters = useFilterStore((state) => state.appendUserFilter);
|
||||
const router = useRouter();
|
||||
@@ -249,19 +250,6 @@ export default function CorporateDashboard({ user }: Props) {
|
||||
setShowModal(!!selectedUser && page === "");
|
||||
}, [selectedUser, page]);
|
||||
|
||||
useEffect(() => {
|
||||
const relatedGroups = groups.filter(
|
||||
(x) =>
|
||||
x.name === "Students" || x.name === "Teachers" || x.name === "Corporate"
|
||||
);
|
||||
const usersInGroups = relatedGroups.map((x) => x.participants).flat();
|
||||
const filteredCodes = codes.filter(
|
||||
(x) => !x.userId || !usersInGroups.includes(x.userId)
|
||||
);
|
||||
|
||||
setUserBalance(usersInGroups.length + filteredCodes.length);
|
||||
}, [codes, groups]);
|
||||
|
||||
useEffect(() => {
|
||||
// in this case it fetches the master corporate account
|
||||
getUserCorporate(user.id).then(setCorporateUserToShow);
|
||||
@@ -436,7 +424,8 @@ export default function CorporateDashboard({ user }: Props) {
|
||||
</div>
|
||||
<section className="flex flex-col gap-4">
|
||||
<h2 className="text-2xl font-semibold">
|
||||
Active Assignments ({assignments.filter(activeAssignmentFilter).length})
|
||||
Active Assignments (
|
||||
{assignments.filter(activeAssignmentFilter).length})
|
||||
</h2>
|
||||
<div className="flex flex-wrap gap-2">
|
||||
{assignments.filter(activeAssignmentFilter).map((a) => (
|
||||
@@ -451,7 +440,8 @@ export default function CorporateDashboard({ user }: Props) {
|
||||
</section>
|
||||
<section className="flex flex-col gap-4">
|
||||
<h2 className="text-2xl font-semibold">
|
||||
Planned Assignments ({assignments.filter(futureAssignmentFilter).length})
|
||||
Planned Assignments (
|
||||
{assignments.filter(futureAssignmentFilter).length})
|
||||
</h2>
|
||||
<div className="flex flex-wrap gap-2">
|
||||
<div
|
||||
@@ -495,7 +485,8 @@ export default function CorporateDashboard({ user }: Props) {
|
||||
</section>
|
||||
<section className="flex flex-col gap-4">
|
||||
<h2 className="text-2xl font-semibold">
|
||||
Archived Assignments ({assignments.filter(archivedAssignmentFilter).length})
|
||||
Archived Assignments (
|
||||
{assignments.filter(archivedAssignmentFilter).length})
|
||||
</h2>
|
||||
<div className="flex flex-wrap gap-2">
|
||||
{assignments.filter(archivedAssignmentFilter).map((a) => (
|
||||
@@ -640,7 +631,7 @@ export default function CorporateDashboard({ user }: Props) {
|
||||
<IconCard
|
||||
Icon={BsPersonCheck}
|
||||
label="User Balance"
|
||||
value={`${userBalance}/${
|
||||
value={`${balance}/${
|
||||
user.corporateInformation?.companyInformation?.userAmount || 0
|
||||
}`}
|
||||
color="purple"
|
||||
|
||||
@@ -9,6 +9,7 @@ interface Props {
|
||||
tooltip?: string;
|
||||
onClick?: () => void;
|
||||
isSelected?: boolean;
|
||||
className?: string;
|
||||
}
|
||||
|
||||
export default function IconCard({
|
||||
@@ -18,6 +19,7 @@ export default function IconCard({
|
||||
color,
|
||||
tooltip,
|
||||
onClick,
|
||||
className,
|
||||
isSelected,
|
||||
}: Props) {
|
||||
const colorClasses: { [key in typeof color]: string } = {
|
||||
@@ -33,7 +35,8 @@ export default function IconCard({
|
||||
className={clsx(
|
||||
"bg-white rounded-xl shadow p-4 flex flex-col gap-4 items-center text-center w-52 h-52 justify-center cursor-pointer hover:shadow-xl transition ease-in-out duration-300",
|
||||
tooltip && "tooltip tooltip-bottom",
|
||||
isSelected && `border border-solid border-${colorClasses[color]}`
|
||||
isSelected && `border border-solid border-${colorClasses[color]}`,
|
||||
className,
|
||||
)}
|
||||
data-tip={tooltip}
|
||||
>
|
||||
|
||||
@@ -67,17 +67,17 @@ import {
|
||||
} from "@/components/ui/popover";
|
||||
import MasterStatistical from "./MasterStatistical";
|
||||
import {
|
||||
futureAssignmentFilter,
|
||||
pastAssignmentFilter,
|
||||
archivedAssignmentFilter,
|
||||
activeAssignmentFilter
|
||||
} from '@/utils/assignments';
|
||||
futureAssignmentFilter,
|
||||
pastAssignmentFilter,
|
||||
archivedAssignmentFilter,
|
||||
activeAssignmentFilter,
|
||||
} from "@/utils/assignments";
|
||||
import useUserBalance from "@/hooks/useUserBalance";
|
||||
|
||||
interface Props {
|
||||
user: MasterCorporateUser;
|
||||
}
|
||||
|
||||
|
||||
type StudentPerformanceItem = User & {
|
||||
corporate?: CorporateUser;
|
||||
group?: Group;
|
||||
@@ -439,12 +439,13 @@ export default function MasterCorporateDashboard({ user }: Props) {
|
||||
const { users, reload } = useUsers();
|
||||
const { codes } = useCodes(user.id);
|
||||
const { groups } = useGroups({ admin: user.id, userType: user.type });
|
||||
const { balance } = useUserBalance();
|
||||
|
||||
const masterCorporateUserGroups = [
|
||||
const masterCorporateUserGroups = useMemo(() => [
|
||||
...new Set(
|
||||
groups.filter((u) => u.admin === user.id).flatMap((g) => g.participants)
|
||||
),
|
||||
];
|
||||
], [groups, user.id]);
|
||||
|
||||
const corporateUserGroups = [
|
||||
...new Set(groups.flatMap((g) => g.participants)),
|
||||
@@ -744,7 +745,8 @@ export default function MasterCorporateDashboard({ user }: Props) {
|
||||
</div>
|
||||
<section className="flex flex-col gap-4">
|
||||
<h2 className="text-2xl font-semibold">
|
||||
Active Assignments ({assignments.filter(activeAssignmentFilter).length})
|
||||
Active Assignments (
|
||||
{assignments.filter(activeAssignmentFilter).length})
|
||||
</h2>
|
||||
<div className="flex flex-wrap gap-2">
|
||||
{assignments.filter(activeAssignmentFilter).map((a) => (
|
||||
@@ -759,7 +761,8 @@ export default function MasterCorporateDashboard({ user }: Props) {
|
||||
</section>
|
||||
<section className="flex flex-col gap-4">
|
||||
<h2 className="text-2xl font-semibold">
|
||||
Planned Assignments ({assignments.filter(futureAssignmentFilter).length})
|
||||
Planned Assignments (
|
||||
{assignments.filter(futureAssignmentFilter).length})
|
||||
</h2>
|
||||
<div className="flex flex-wrap gap-2">
|
||||
<div
|
||||
@@ -803,7 +806,8 @@ export default function MasterCorporateDashboard({ user }: Props) {
|
||||
</section>
|
||||
<section className="flex flex-col gap-4">
|
||||
<h2 className="text-2xl font-semibold">
|
||||
Archived Assignments ({assignments.filter(archivedAssignmentFilter).length})
|
||||
Archived Assignments (
|
||||
{assignments.filter(archivedAssignmentFilter).length})
|
||||
</h2>
|
||||
<div className="flex flex-wrap gap-2">
|
||||
{assignments.filter(archivedAssignmentFilter).map((a) => (
|
||||
@@ -903,7 +907,7 @@ export default function MasterCorporateDashboard({ user }: Props) {
|
||||
<IconCard
|
||||
Icon={BsPersonCheck}
|
||||
label="User Balance"
|
||||
value={`${codes.length}/${
|
||||
value={`${balance}/${
|
||||
user.corporateInformation?.companyInformation?.userAmount || 0
|
||||
}`}
|
||||
color="purple"
|
||||
@@ -1020,6 +1024,12 @@ export default function MasterCorporateDashboard({ user }: Props) {
|
||||
{selectedUser && (
|
||||
<div className="w-full flex flex-col gap-8">
|
||||
<UserCard
|
||||
maxUserAmount={
|
||||
user.type === "mastercorporate"
|
||||
? (user.corporateInformation?.companyInformation
|
||||
?.userAmount || 0) - balance
|
||||
: undefined
|
||||
}
|
||||
loggedInUser={user}
|
||||
onClose={(shouldReload) => {
|
||||
setSelectedUser(undefined);
|
||||
|
||||
Reference in New Issue
Block a user