135 lines
5.2 KiB
JavaScript
135 lines
5.2 KiB
JavaScript
import { jsxs, Fragment, jsx } from "react/jsx-runtime";
|
|
import { B as Button } from "./button-CdJZJLGw.js";
|
|
import { usePage, Link } from "@inertiajs/react";
|
|
import { ExternalLink, Pencil } from "lucide-react";
|
|
import { useState, useEffect } from "react";
|
|
import LiveClassForm from "./live-class-form-CM7nrk8J.js";
|
|
import "@radix-ui/react-slot";
|
|
import "class-variance-authority";
|
|
import "./utils-DLCPGU0v.js";
|
|
import "clsx";
|
|
import "tailwind-merge";
|
|
import "./datetime-picker-BRbsgYE_.js";
|
|
import "react-day-picker";
|
|
import "./popover-Cv6Hz_y0.js";
|
|
import "@radix-ui/react-popover";
|
|
import "./select-BYx0MCUK.js";
|
|
import "@radix-ui/react-select";
|
|
import "./use-lang-44ndmTOc.js";
|
|
import "date-fns";
|
|
import "./input-error-D1JIzedA.js";
|
|
import "./dialog-DGP_3dPQ.js";
|
|
import "@radix-ui/react-dialog";
|
|
import "./input-BsvJqbcd.js";
|
|
import "./label-0rIIfpX0.js";
|
|
import "@radix-ui/react-label";
|
|
import "./scroll-area-CDdrLubh.js";
|
|
import "@radix-ui/react-scroll-area";
|
|
import "richtor";
|
|
/* empty css */
|
|
const LiveClassStatus = ({ courseId, liveClass, zoomConfig }) => {
|
|
var _a;
|
|
const [currentTime, setCurrentTime] = useState(/* @__PURE__ */ new Date());
|
|
const { props } = usePage();
|
|
const { translate } = props;
|
|
const { button, dashboard } = translate;
|
|
const getClassStatus = (liveClass2) => {
|
|
var _a2;
|
|
const now = currentTime;
|
|
const classStart = new Date(liveClass2.class_date_and_time);
|
|
const classEnd = ((_a2 = liveClass2.additional_info) == null ? void 0 : _a2.end_time) ? new Date(liveClass2.additional_info.end_time) : new Date(classStart.getTime() + 60 * 60 * 1e3);
|
|
if (now > classEnd) {
|
|
return "ended";
|
|
} else if (now >= classStart && now <= classEnd) {
|
|
return "live";
|
|
} else if (classStart > now) {
|
|
return "upcoming";
|
|
}
|
|
return "scheduled";
|
|
};
|
|
const status = getClassStatus(liveClass);
|
|
useEffect(() => {
|
|
const updateTimeAndCheckStatus = () => {
|
|
var _a2;
|
|
const newTime = /* @__PURE__ */ new Date();
|
|
setCurrentTime(newTime);
|
|
const classEnd = ((_a2 = liveClass.additional_info) == null ? void 0 : _a2.end_time) ? new Date(liveClass.additional_info.end_time) : new Date(new Date(liveClass.class_date_and_time).getTime() + 60 * 60 * 1e3);
|
|
return newTime > classEnd;
|
|
};
|
|
const hasEnded = updateTimeAndCheckStatus();
|
|
if (hasEnded) {
|
|
return;
|
|
}
|
|
const interval = setInterval(() => {
|
|
const classEnded = updateTimeAndCheckStatus();
|
|
if (classEnded) {
|
|
clearInterval(interval);
|
|
}
|
|
}, 6e4);
|
|
return () => {
|
|
clearInterval(interval);
|
|
};
|
|
}, [liveClass.class_date_and_time, (_a = liveClass.additional_info) == null ? void 0 : _a.end_time]);
|
|
const isSdkConfig = zoomConfig.zoom_web_sdk && zoomConfig.zoom_sdk_client_id && zoomConfig.zoom_sdk_client_secret ? true : false;
|
|
const getStatusColor = (status2) => {
|
|
switch (status2) {
|
|
case "live":
|
|
return "text-green-600 bg-green-100";
|
|
case "upcoming":
|
|
return "text-blue-600 bg-blue-100";
|
|
case "ended":
|
|
return "text-muted-foreground bg-gray-100";
|
|
default:
|
|
return "text-orange-600 bg-orange-100";
|
|
}
|
|
};
|
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
/* @__PURE__ */ jsx("span", { className: `rounded-full px-2 py-1 text-center text-xs font-medium capitalize ${getStatusColor(status)}`, children: status }),
|
|
status === "live" ? isSdkConfig ? /* @__PURE__ */ jsx(Link, { href: route("live-class.start", liveClass.id), children: /* @__PURE__ */ jsxs(Button, { size: "sm", variant: status === "live" ? "default" : "outline", className: "flex w-full items-center gap-2", children: [
|
|
/* @__PURE__ */ jsx(ExternalLink, { className: "h-4 w-4" }),
|
|
button.join_class
|
|
] }) }) : /* @__PURE__ */ jsx("a", { href: liveClass.additional_info.join_url, target: "_blank", children: /* @__PURE__ */ jsxs(Button, { size: "sm", variant: status === "live" ? "default" : "outline", className: "flex w-full items-center gap-2", children: [
|
|
/* @__PURE__ */ jsx(ExternalLink, { className: "h-4 w-4" }),
|
|
button.join_class
|
|
] }) }) : /* @__PURE__ */ jsxs(Button, { disabled: true, variant: "outline", size: "sm", className: "flex w-full items-center gap-2", children: [
|
|
/* @__PURE__ */ jsx(ExternalLink, { className: "h-4 w-4" }),
|
|
button.join_class
|
|
] }),
|
|
status === "upcoming" ? /* @__PURE__ */ jsx(
|
|
LiveClassForm,
|
|
{
|
|
courseId,
|
|
liveClass,
|
|
title: button.edit_live_class,
|
|
handler: /* @__PURE__ */ jsxs(
|
|
Button,
|
|
{
|
|
size: "sm",
|
|
variant: "secondary",
|
|
className: "bg-background border-secondary-foreground/20 flex w-full items-center gap-2 border",
|
|
children: [
|
|
/* @__PURE__ */ jsx(Pencil, { className: "h-4 w-4" }),
|
|
button.edit_live_class
|
|
]
|
|
}
|
|
)
|
|
}
|
|
) : /* @__PURE__ */ jsxs(
|
|
Button,
|
|
{
|
|
size: "sm",
|
|
disabled: true,
|
|
variant: "secondary",
|
|
className: "bg-background border-secondary-foreground/20 flex w-full items-center gap-2 border",
|
|
children: [
|
|
/* @__PURE__ */ jsx(Pencil, { className: "h-4 w-4" }),
|
|
button.edit_live_class
|
|
]
|
|
}
|
|
)
|
|
] });
|
|
};
|
|
export {
|
|
LiveClassStatus as default
|
|
};
|