Files
lms/lms/public/frontend/assets/Batch-UFfl4NY5.js
2024-03-04 22:12:21 +05:30

2757 lines
64 KiB
JavaScript

var me = Object.defineProperty;
var X = Object.getOwnPropertySymbols;
var _e = Object.prototype.hasOwnProperty,
pe = Object.prototype.propertyIsEnumerable;
var ee = (m, b, o) =>
b in m
? me(m, b, {
enumerable: !0,
configurable: !0,
writable: !0,
value: o,
})
: (m[b] = o),
q = (m, b) => {
for (var o in b || (b = {})) _e.call(b, o) && ee(m, o, b[o]);
if (X) for (var o of X(b)) pe.call(b, o) && ee(m, o, b[o]);
return m;
};
var te = (m, b, o) =>
new Promise((p, g) => {
var l = (c) => {
try {
_(o.next(c));
} catch (y) {
g(y);
}
},
s = (c) => {
try {
_(o.throw(c));
} catch (y) {
g(y);
}
},
_ = (c) =>
c.done ? p(c.value) : Promise.resolve(c.value).then(l, s);
_((o = o.apply(m, b)).next());
});
import {
aa as z,
d as C,
ab as j,
a as F,
k as S,
w as se,
x as i,
F as $,
G as f,
H as t,
L as u,
J as d,
K as e,
ag as H,
ah as le,
y as h,
Q as w,
R as A,
I as O,
M as V,
D as I,
r as B,
a4 as L,
a7 as D,
b as Z,
ae as ne,
ai as P,
T as ae,
ac as he,
a5 as ie,
aj as be,
ak as ye,
P as de,
al as ve,
am as fe,
an as ge,
ao as re,
ap as ke,
aq as xe,
j as R,
W as $e,
a6 as Ve,
a8 as Ce,
a9 as Se,
} from "./frappe-ui-n1bXVQkV.js";
import {
a as M,
f as E,
c as Y,
g as Me,
t as we,
B as Le,
} from "./index-xt-hKVBz.js";
import { _ as De } from "./CourseCard-I7Cj-Ne7.js";
import { C as J, a as G } from "./clock-nM1CyeA6.js";
import { P as ue } from "./plus-w56hNznP.js";
import { _ as je } from "./Link-xVzNCgtj.js";
import { _ as Ae } from "./Discussions-MQ_bdV9n.js";
import { B as Te } from "./book-open-check-c5K78KcT.js";
import "./UserAvatar-3mSOKoKa.js";
import "./star-O1ih2gFp.js";
/**
* @license lucide-vue-next v0.309.0 - ISC
*
* This source code is licensed under the ISC license.
* See the LICENSE file in the root directory of this source tree.
*/ const Ue = M("Contact2Icon", [
["path", { d: "M16 18a4 4 0 0 0-8 0", key: "1lzouq" }],
["circle", { cx: "12", cy: "11", r: "3", key: "itu57m" }],
[
"rect",
{ width: "18", height: "18", x: "3", y: "4", rx: "2", key: "1hopcy" },
],
["line", { x1: "8", x2: "8", y1: "2", y2: "4", key: "1ff9gb" }],
["line", { x1: "16", x2: "16", y1: "2", y2: "4", key: "1ufoma" }],
]);
/**
* @license lucide-vue-next v0.309.0 - ISC
*
* This source code is licensed under the ISC license.
* See the LICENSE file in the root directory of this source tree.
*/ const oe = M("InfoIcon", [
["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
["path", { d: "M12 16v-4", key: "1dtifu" }],
["path", { d: "M12 8h.01", key: "e9boi3" }],
]);
/**
* @license lucide-vue-next v0.309.0 - ISC
*
* This source code is licensed under the ISC license.
* See the LICENSE file in the root directory of this source tree.
*/ const Be = M("LaptopIcon", [
[
"path",
{
d: "M20 16V7a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v9m16 0H4m16 0 1.28 2.55a1 1 0 0 1-.9 1.45H3.62a1 1 0 0 1-.9-1.45L4 16",
key: "tarvll",
},
],
]);
/**
* @license lucide-vue-next v0.309.0 - ISC
*
* This source code is licensed under the ISC license.
* See the LICENSE file in the root directory of this source tree.
*/ const Ee = M("LayoutDashboardIcon", [
[
"rect",
{ width: "7", height: "9", x: "3", y: "3", rx: "1", key: "10lvy0" },
],
[
"rect",
{ width: "7", height: "5", x: "14", y: "3", rx: "1", key: "16une8" },
],
[
"rect",
{ width: "7", height: "9", x: "14", y: "12", rx: "1", key: "1hutg5" },
],
[
"rect",
{ width: "7", height: "5", x: "3", y: "16", rx: "1", key: "ldoo1y" },
],
]);
/**
* @license lucide-vue-next v0.309.0 - ISC
*
* This source code is licensed under the ISC license.
* See the LICENSE file in the root directory of this source tree.
*/ const Ne = M("MailIcon", [
[
"rect",
{ width: "20", height: "16", x: "2", y: "4", rx: "2", key: "18n3k1" },
],
["path", { d: "m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7", key: "1ocrg3" }],
]);
/**
* @license lucide-vue-next v0.309.0 - ISC
*
* This source code is licensed under the ISC license.
* See the LICENSE file in the root directory of this source tree.
*/ const Pe = M("MessageCircleIcon", [
["path", { d: "M7.9 20A9 9 0 1 0 4 16.1L2 22Z", key: "vv11sd" }],
]);
/**
* @license lucide-vue-next v0.309.0 - ISC
*
* This source code is licensed under the ISC license.
* See the LICENSE file in the root directory of this source tree.
*/ const Ye = M("MonitorIcon", [
[
"rect",
{ width: "20", height: "14", x: "2", y: "3", rx: "2", key: "48i651" },
],
["line", { x1: "8", x2: "16", y1: "21", y2: "21", key: "1svkeh" }],
["line", { x1: "12", x2: "12", y1: "17", y2: "21", key: "vw1qmm" }],
]);
/**
* @license lucide-vue-next v0.309.0 - ISC
*
* This source code is licensed under the ISC license.
* See the LICENSE file in the root directory of this source tree.
*/ const ze = M("SendIcon", [
["path", { d: "m22 2-7 20-4-9-9-4Z", key: "1q3vgg" }],
["path", { d: "M22 2 11 13", key: "nzbqef" }],
]);
/**
* @license lucide-vue-next v0.309.0 - ISC
*
* This source code is licensed under the ISC license.
* See the LICENSE file in the root directory of this source tree.
*/ const Ie = M("Trash2Icon", [
["path", { d: "M3 6h18", key: "d0wm0j" }],
["path", { d: "M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6", key: "4alrt4" }],
["path", { d: "M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2", key: "v07s0e" }],
["line", { x1: "10", x2: "10", y1: "11", y2: "17", key: "1uufr5" }],
["line", { x1: "14", x2: "14", y1: "11", y2: "17", key: "xtxkd" }],
]);
/**
* @license lucide-vue-next v0.309.0 - ISC
*
* This source code is licensed under the ISC license.
* See the LICENSE file in the root directory of this source tree.
*/ const qe = M("UserRoundCogIcon", [
["path", { d: "M2 21a8 8 0 0 1 10.434-7.62", key: "1yezr2" }],
["circle", { cx: "10", cy: "8", r: "5", key: "o932ke" }],
["circle", { cx: "18", cy: "18", r: "3", key: "1xkwt0" }],
["path", { d: "m19.5 14.3-.4.9", key: "1eb35c" }],
["path", { d: "m16.9 20.8-.4.9", key: "dfjc4z" }],
["path", { d: "m21.7 19.5-.9-.4", key: "q4dx6b" }],
["path", { d: "m15.2 16.9-.9-.4", key: "1r0w5f" }],
["path", { d: "m21.7 16.5-.9.4", key: "1knoei" }],
["path", { d: "m15.2 19.1-.9.4", key: "j188fs" }],
["path", { d: "m19.5 21.7-.4-.9", key: "1tonu5" }],
["path", { d: "m16.9 15.2-.4-.9", key: "699xu" }],
]);
/**
* @license lucide-vue-next v0.309.0 - ISC
*
* This source code is licensed under the ISC license.
* See the LICENSE file in the root directory of this source tree.
*/ const Re = M("VideoIcon", [
["path", { d: "m22 8-6 4 6 4V8Z", key: "50v9me" }],
[
"rect",
{
width: "14",
height: "12",
x: "2",
y: "6",
rx: "2",
ry: "2",
key: "1rqjg6",
},
],
]),
He = { class: "flex flex-col gap-4" },
Oe = { class: "mb-1.5 text-sm text-gray-600" },
Fe = { class: "mb-1.5 text-sm text-gray-600" },
Ze = { key: 0 },
Je = { class: "mb-1.5 text-sm text-gray-600" },
Ge = { class: "grid grid-cols-2 gap-2" },
Ke = ["onClick"],
Qe = {
__name: "EvaluationModal",
props: z(
{
courses: { type: Array, default: [] },
batch: { type: String, default: null },
endDate: { type: String, default: null },
},
{
modelValue: {},
modelModifiers: {},
reloadEvals: {},
reloadEvalsModifiers: {},
}
),
emits: ["update:modelValue", "update:reloadEvals"],
setup(m) {
const b = C("$user"),
o = C("$dayjs"),
p = j(m, "modelValue"),
g = j(m, "reloadEvals"),
l = m;
let s = F({
course: "",
date: "",
start_time: "",
end_time: "",
day: "",
batch: l.batch,
member: b.data.name,
});
const _ = S({
url: "frappe.client.insert",
makeParams(n) {
return {
doc: q(
{
doctype: "LMS Certificate Request",
batch_name: n.batch,
},
n
),
};
},
});
function c(n) {
_.submit(s, {
validate() {
if (!s.course) return "Please select a course.";
if (!s.date) return "Please select a date.";
if (!s.start_time) return "Please select a slot.";
if (o(s.date).isSameOrBefore(o(), "day"))
return "Please select a future date.";
if (o(s.date).isAfter(o(l.endDate), "day"))
return `Please select a date before the end date ${o(
l.endDate
).format("DD MMMM YYYY")}.`;
},
onSuccess() {
g.value.reload(), n();
},
onError(a) {
var r;
Y({
title: "Error",
text:
((r = a.messages) == null ? void 0 : r[0]) || a,
icon: "x",
iconClasses:
"bg-red-600 text-white rounded-md p-px",
position: "top-center",
timeout: 10,
});
},
});
}
const y = () => {
let n = [];
for (const a of l.courses)
n.push({ label: a.title, value: a.course });
return n;
},
v = S({
url: "lms.lms.doctype.course_evaluator.course_evaluator.get_schedule",
makeParams(n) {
return {
course: n.course,
date: n.date,
batch: l.batch,
};
},
});
se(
() => s.date,
(n) => {
(s.start_time = ""), n && v.submit(s);
}
),
se(
() => s.course,
(n) => {
(s.date = ""), (s.start_time = ""), v.reset();
}
);
const k = (n) => {
(s.start_time = n.start_time),
(s.end_time = n.end_time),
(s.day = n.day);
};
return (n, a) => (
i(),
$(
e(I),
{
modelValue: p.value,
"onUpdate:modelValue":
a[2] || (a[2] = (r) => (p.value = r)),
options: {
title: n.__("Schedule Evaluation"),
size: "xl",
actions: [
{
label: n.__("Submit"),
variant: "solid",
onClick: (r) => c(r),
},
],
},
},
{
"body-content": f(() => [
t("div", He, [
t("div", null, [
t("div", Oe, u(n.__("Course")), 1),
d(
e(H),
{
modelValue: e(s).course,
"onUpdate:modelValue":
a[0] ||
(a[0] = (r) =>
(e(s).course = r)),
options: y(),
},
null,
8,
["modelValue", "options"]
),
]),
t("div", null, [
t("div", Fe, u(n.__("Date")), 1),
d(
e(le),
{
modelValue: e(s).date,
"onUpdate:modelValue":
a[1] ||
(a[1] = (r) => (e(s).date = r)),
},
null,
8,
["modelValue"]
),
]),
e(v).data
? (i(),
h("div", Ze, [
t(
"div",
Je,
u(n.__("Select a slot")),
1
),
t("div", Ge, [
(i(!0),
h(
w,
null,
A(
e(v).data,
(r) => (
i(),
h("div", null, [
t(
"div",
{
class: O(
[
"text-base text-center border rounded-md bg-gray-200 p-2 cursor-pointer",
{
"border-gray-900":
e(
s
)
.start_time ==
r.start_time,
},
]
),
onClick:
(
T
) =>
k(
r
),
},
u(
e(E)(
r.start_time
)
) +
" - " +
u(
e(
E
)(
r.end_time
)
),
11,
Ke
),
])
)
),
256
)),
]),
]))
: V("", !0),
]),
]),
_: 1,
},
8,
["modelValue", "options"]
)
);
},
},
We = { class: "mb-10" },
Xe = { class: "text-lg font-semibold mb-4" },
et = { key: 1 },
tt = { class: "grid grid-cols-2 gap-4" },
st = { class: "border rounded-md p-3" },
at = { class: "font-semibold mb-3" },
ot = { class: "flex items-center mb-2" },
lt = { class: "ml-2" },
nt = { class: "flex items-center mb-2" },
it = { class: "ml-2" },
dt = { class: "flex items-center" },
rt = { class: "ml-2 font-medium" },
ut = { key: 2, class: "text-sm italic text-gray-600" },
ct = {
__name: "UpcomingEvaluations",
props: {
batch: { type: String, default: null },
courses: { type: Array, default: [] },
isStudent: { type: Boolean, default: !1 },
endDate: { type: String, default: null },
},
setup(m) {
const b = C("$dayjs"),
o = C("$user"),
p = B(!1),
g = m,
l = S({
url: "lms.lms.utils.get_upcoming_evals",
cache: ["upcoming_evals", o.data.name],
params: {
student: o.data.name,
courses: g.courses.map((_) => _.course),
},
auto: !0,
});
function s() {
p.value = !0;
}
return (_, c) => {
var y;
return (
i(),
h(
w,
null,
[
t("div", We, [
m.isStudent
? (i(),
$(
e(D),
{
key: 0,
onClick: s,
class: "float-right",
},
{
default: f(() => [
L(
u(
_.__(
"Schedule Evaluation"
)
),
1
),
]),
_: 1,
}
))
: V("", !0),
t(
"div",
Xe,
u(_.__("Upcoming Evaluations")),
1
),
(y = e(l).data) != null && y.length
? (i(),
h("div", et, [
t("div", tt, [
(i(!0),
h(
w,
null,
A(
e(l).data,
(v) => (
i(),
h("div", null, [
t("div", st, [
t(
"div",
at,
u(
v.course_title
),
1
),
t(
"div",
ot,
[
d(
e(
J
),
{
class: "w-4 h-4 stroke-1.5",
}
),
t(
"span",
lt,
u(
e(
b
)(
v.date
).format(
"DD MMMM YYYY"
)
),
1
),
]
),
t(
"div",
nt,
[
d(
e(
G
),
{
class: "w-4 h-4 stroke-1.5",
}
),
t(
"span",
it,
u(
e(
E
)(
v.start_time
)
),
1
),
]
),
t(
"div",
dt,
[
d(
e(
qe
),
{
class: "w-4 h-4 stroke-1.5",
}
),
t(
"span",
rt,
u(
v.evaluator_name
),
1
),
]
),
]),
])
)
),
256
)),
]),
]))
: (i(),
h(
"div",
ut,
u(_.__("No upcoming evaluations.")),
1
)),
]),
d(
Qe,
{
batch: m.batch,
endDate: m.endDate,
courses: m.courses,
modelValue: p.value,
"onUpdate:modelValue":
c[0] || (c[0] = (v) => (p.value = v)),
reloadEvals: e(l),
"onUpdate:reloadEvals":
c[1] ||
(c[1] = (v) =>
Z(l) ? (l.value = v) : null),
},
null,
8,
[
"batch",
"endDate",
"courses",
"modelValue",
"reloadEvals",
]
),
],
64
)
);
};
},
},
mt = { class: "text-lg font-semibold mb-4" },
_t = { key: 0 },
pt = { key: 1, class: "text-sm italic text-gray-600" },
ce = {
__name: "Assessments",
props: {
batch: { type: String, required: !0 },
rows: { type: Array },
columns: { type: Array },
options: {
type: Object,
default: () => ({ selectable: !0, totalCount: 0, rowCount: 0 }),
},
},
setup(m) {
const b = C("$user"),
p = S({
url: "lms.lms.utils.get_assessments",
params: { batch: m.batch },
auto: !0,
}),
g = () => {
var s;
let l = [
{ label: "Assessment", key: "title" },
{ label: "Type", key: "assessment_type" },
];
return (
((s = b.data) != null && s.is_moderator) ||
l.push({
label: "Status/Score",
key: "status",
align: "center",
}),
l
);
};
return (l, s) => {
var _;
return (
i(),
h("div", null, [
t("div", mt, u(l.__("Assessments")), 1),
(_ = e(p).data) != null && _.length
? (i(),
h("div", _t, [
d(
e(ne),
{
columns: g(),
rows: e(p).data,
"row-key": "name",
options: {
selectable: !1,
showTooltip: !1,
},
},
null,
8,
["columns", "rows"]
),
]))
: (i(), h("div", pt, u(l.__("No Assessments")), 1)),
])
);
};
},
},
ht = {
__name: "BatchDashboard",
props: {
batch: { type: Object, default: null },
isStudent: { type: Boolean, default: !1 },
},
setup(m) {
return (b, o) => (
i(),
h("div", null, [
d(
ct,
{
batch: m.batch.data.name,
endDate: m.batch.data.evaluation_end_date,
courses: m.batch.data.courses,
isStudent: m.isStudent,
},
null,
8,
["batch", "endDate", "courses", "isStudent"]
),
d(ce, { batch: m.batch.data.name }, null, 8, ["batch"]),
])
);
},
},
bt = { class: "flex flex-col gap-4" },
yt = { class: "grid grid-cols-2 gap-4" },
vt = { class: "mb-4" },
ft = { class: "mb-1.5 text-sm text-gray-600" },
gt = { class: "mb-4" },
kt = { class: "mb-1.5 text-sm text-gray-600" },
xt = { class: "mb-1.5 text-sm text-gray-600" },
$t = { class: "mb-4" },
Vt = { class: "mb-1.5 text-sm text-gray-600" },
Ct = { class: "mb-4" },
St = { class: "mb-1.5 text-sm text-gray-600" },
Mt = { class: "mb-1.5 text-sm text-gray-600" },
wt = { class: "mb-1.5 text-sm text-gray-600" },
Lt = {
__name: "LiveClassModal",
props: z(
{ batch: { type: String, default: null } },
{
reloadLiveClasses: {},
reloadLiveClassesModifiers: {},
modelValue: {},
modelModifiers: {},
}
),
emits: ["update:reloadLiveClasses", "update:modelValue"],
setup(m) {
const b = j(m, "reloadLiveClasses"),
o = j(m, "modelValue"),
p = C("$user"),
g = C("$dayjs");
let s = F({
title: "",
description: "",
date: "",
time: "",
duration: "",
timezone: "",
auto_recording: "No Recording",
batch: m.batch,
host: p.data.name,
});
const _ = () => Me().map((n) => ({ label: n, value: n })),
c = () => [
{ label: "No Recording", value: "No Recording" },
{ label: "Local", value: "Local" },
{ label: "Cloud", value: "Cloud" },
],
y = S({
url: "lms.lms.doctype.lms_batch.lms_batch.create_live_class",
makeParams(n) {
return q(
{ doctype: "LMS Live Class", batch_name: n.batch },
n
);
},
}),
v = (n) => {
y.submit(s, {
validate() {
if (!s.title) return "Please enter a title.";
if (!s.date) return "Please select a date.";
if (g(s.date).isSameOrBefore(g(), "day"))
return "Please select a future date.";
if (!s.time) return "Please select a time.";
if (!k())
return "Please enter a valid time in the format HH:mm.";
if (!s.duration) return "Please select a duration.";
if (!s.timezone) return "Please select a timezone.";
},
onSuccess() {
b.value.reload(), n();
},
onError(a) {
var r;
Y({
title: "Error",
text:
((r = a.messages) == null
? void 0
: r[0]) || a,
icon: "x",
iconClasses:
"bg-red-600 text-white rounded-md p-px",
position: "top-center",
timeout: 10,
});
},
});
},
k = () => {
let n = s.time.split(":");
return !(
n.length != 2 ||
n[0] < 0 ||
n[0] > 23 ||
n[1] < 0 ||
n[1] > 59
);
};
return (n, a) => (
i(),
$(
e(I),
{
modelValue: o.value,
"onUpdate:modelValue":
a[7] || (a[7] = (r) => (o.value = r)),
options: {
title: n.__("Create a Live Class"),
size: "xl",
actions: [
{
label: "Submit",
variant: "solid",
onClick: (r) => v(r),
},
],
},
},
{
"body-content": f(() => [
t("div", bt, [
t("div", yt, [
t("div", null, [
t("div", vt, [
t("div", ft, u(n.__("Title")), 1),
d(
e(P),
{
type: "text",
modelValue: e(s).title,
"onUpdate:modelValue":
a[0] ||
(a[0] = (r) =>
(e(s).title = r)),
},
null,
8,
["modelValue"]
),
]),
t("div", gt, [
t("div", kt, [
d(
e(ae),
{
class: "flex items-center",
text: n.__(
"Time must be in 24 hour format (HH:mm). Example 11:30 or 22:00"
),
},
{
default: f(() => [
t(
"span",
null,
u(n.__("Time")),
1
),
d(e(oe), {
class: "stroke-2 w-3 h-3 ml-1",
}),
]),
_: 1,
},
8,
["text"]
),
]),
d(
e(P),
{
modelValue: e(s).time,
"onUpdate:modelValue":
a[1] ||
(a[1] = (r) =>
(e(s).time = r)),
},
null,
8,
["modelValue"]
),
]),
t("div", null, [
t(
"div",
xt,
u(n.__("Timezone")),
1
),
d(
e(H),
{
modelValue: e(s).timezone,
"onUpdate:modelValue":
a[2] ||
(a[2] = (r) =>
(e(s).timezone =
r)),
options: _(),
},
null,
8,
["modelValue", "options"]
),
]),
]),
t("div", null, [
t("div", $t, [
t("div", Vt, u(n.__("Date")), 1),
d(
e(le),
{
modelValue: e(s).date,
"onUpdate:modelValue":
a[3] ||
(a[3] = (r) =>
(e(s).date = r)),
inputClass: "w-full",
},
null,
8,
["modelValue"]
),
]),
t("div", Ct, [
t("div", St, [
d(
e(ae),
{
class: "flex items-center",
text: n.__(
"Duration of the live class in minutes"
),
},
{
default: f(() => [
t(
"span",
null,
u(
n.__(
"Duration"
)
),
1
),
d(e(oe), {
class: "stroke-2 w-3 h-3 ml-1",
}),
]),
_: 1,
},
8,
["text"]
),
]),
d(
e(P),
{
type: "number",
modelValue: e(s).duration,
"onUpdate:modelValue":
a[4] ||
(a[4] = (r) =>
(e(s).duration =
r)),
},
null,
8,
["modelValue"]
),
]),
t("div", null, [
t(
"div",
Mt,
u(n.__("Auto Recording")),
1
),
d(
e(H),
{
modelValue:
e(s).auto_recording,
"onUpdate:modelValue":
a[5] ||
(a[5] = (r) =>
(e(
s
).auto_recording =
r)),
options: c(),
},
null,
8,
["modelValue", "options"]
),
]),
]),
]),
t("div", null, [
t("div", wt, u(n.__("Description")), 1),
d(
e(he),
{
modelValue: e(s).description,
"onUpdate:modelValue":
a[6] ||
(a[6] = (r) =>
(e(s).description = r)),
},
null,
8,
["modelValue"]
),
]),
]),
]),
_: 1,
},
8,
["modelValue", "options"]
)
);
},
},
Dt = { class: "text-lg font-semibold mb-4" },
jt = { key: 1, class: "grid grid-cols-2 gap-5" },
At = { class: "border rounded-md p-3" },
Tt = { class: "font-semibold text-lg mb-4" },
Ut = { class: "flex items-center mb-2" },
Bt = { class: "ml-2" },
Et = { class: "flex items-center mb-5" },
Nt = { class: "ml-2" },
Pt = { class: "mb-5" },
Yt = { class: "flex items-center gap-2" },
zt = ["href"],
It = ["href"],
qt = { key: 2, class: "text-sm italic text-gray-600" },
Rt = {
__name: "LiveClass",
props: { batch: { type: String, required: !0 } },
setup(m) {
const b = C("$user"),
o = B(!1),
p = C("$dayjs"),
g = m,
l = ie({
doctype: "LMS Live Class",
filters: { batch: g.batchName, date: [">=", new Date()] },
fields: [
"title",
"description",
"time",
"date",
"start_url",
"join_url",
"owner",
],
orderBy: "date",
auto: !0,
}),
s = () => {
o.value = !0;
};
return (_, c) => {
var y;
return (
i(),
h(
w,
null,
[
e(b).data.is_moderator
? (i(),
$(
e(D),
{
key: 0,
variant: "solid",
class: "float-right mb-3",
onClick: s,
},
{
prefix: f(() => [
d(e(ue), { class: "h-4 w-4" }),
]),
default: f(() => [
t(
"span",
null,
u(_.__("Create")),
1
),
]),
_: 1,
}
))
: V("", !0),
t("div", Dt, u(_.__("Live Class")), 1),
(y = e(l).data) != null && y.length
? (i(),
h("div", jt, [
(i(!0),
h(
w,
null,
A(
e(l).data,
(v) => (
i(),
h("div", null, [
t("div", At, [
t(
"div",
Tt,
u(v.title),
1
),
t("div", Ut, [
d(e(J), {
class: "w-4 h-4 stroke-1.5",
}),
t(
"span",
Bt,
u(
e(p)(
v.date
).format(
"DD MMMM YYYY"
)
),
1
),
]),
t("div", Et, [
d(e(G), {
class: "w-4 h-4 stroke-1.5",
}),
t(
"span",
Nt,
u(
e(E)(
v.time
)
),
1
),
]),
t(
"div",
Pt,
u(
v.description
),
1
),
t("div", Yt, [
t(
"a",
{
href: v.start_url,
target: "_blank",
class: "w-1/2 cursor-pointer inline-flex items-center justify-center gap-2 transition-colors focus:outline-none text-gray-800 bg-gray-100 hover:bg-gray-200 active:bg-gray-300 focus-visible:ring focus-visible:ring-gray-400 h-7 text-base px-2 rounded",
},
[
d(
e(
Ye
),
{
class: "h-4 w-4 stroke-1.5",
}
),
L(
" " +
u(
_.__(
"Start"
)
),
1
),
],
8,
zt
),
t(
"a",
{
href: v.join_url,
target: "_blank",
class: "w-1/2 cursor-pointer inline-flex items-center justify-center gap-2 transition-colors focus:outline-none text-gray-800 bg-gray-100 hover:bg-gray-200 active:bg-gray-300 focus-visible:ring focus-visible:ring-gray-400 h-7 text-base px-2 rounded",
},
[
d(
e(
Re
),
{
class: "h-4 w-4 stroke-1.5",
}
),
L(
" " +
u(
_.__(
"Join"
)
),
1
),
],
8,
It
),
]),
]),
])
)
),
256
)),
]))
: (i(),
h(
"div",
qt,
u(_.__("No live classes scheduled")),
1
)),
d(
Lt,
{
batch: g.batch,
modelValue: o.value,
"onUpdate:modelValue":
c[0] || (c[0] = (v) => (o.value = v)),
reloadLiveClasses: e(l),
"onUpdate:reloadLiveClasses":
c[1] ||
(c[1] = (v) =>
Z(l) ? (l.value = v) : null),
},
null,
8,
["batch", "modelValue", "reloadLiveClasses"]
),
],
64
)
);
};
},
},
Ht = { class: "flex flex-col gap-4" },
Ot = {
__name: "StudentModal",
props: z(
{ batch: { type: String, default: null } },
{
reloadStudents: {},
reloadStudentsModifiers: {},
modelValue: {},
modelModifiers: {},
}
),
emits: ["update:reloadStudents", "update:modelValue"],
setup(m) {
const b = j(m, "reloadStudents"),
o = B(),
p = j(m, "modelValue"),
g = m,
l = S({
url: "frappe.client.insert",
makeParams(_) {
return {
doc: {
doctype: "Batch Student",
parent: g.batch,
parenttype: "LMS Batch",
parentfield: "students",
student: o.value,
},
};
},
}),
s = (_) => {
l.submit(
{},
{
onSuccess() {
b.value.reload(), _(), (o.value = null);
},
}
);
};
return (_, c) => (
i(),
$(
e(I),
{
modelValue: p.value,
"onUpdate:modelValue":
c[1] || (c[1] = (y) => (p.value = y)),
options: {
title: _.__("Add a Student"),
size: "xl",
actions: [
{
label: "Submit",
variant: "solid",
onClick: (y) => s(y),
},
],
},
},
{
"body-content": f(() => [
t("div", Ht, [
d(
je,
{
doctype: "User",
modelValue: o.value,
"onUpdate:modelValue":
c[0] ||
(c[0] = (y) => (o.value = y)),
filters: { ignore_user_type: 1 },
},
null,
8,
["modelValue"]
),
]),
]),
_: 1,
},
8,
["modelValue", "options"]
)
);
},
},
Ft = { class: "text-lg font-semibold mb-4" },
Zt = { key: 0 },
Jt = { key: 0 },
Gt = { class: "flex gap-2" },
Kt = {
__name: "BatchStudents",
props: { batch: { type: String, default: null } },
setup(m) {
const b = B(!1),
o = m,
p = S({
url: "lms.lms.utils.get_batch_students",
cache: ["students", o.batch],
params: { batch: o.batch },
auto: !0,
}),
g = () => [
{ label: "Full Name", key: "full_name" },
{
label: "Courses Done",
key: "courses_completed",
align: "center",
},
{
label: "Assessments Done",
key: "assessments_completed",
align: "center",
},
{ label: "Last Active", key: "last_active" },
],
l = () => {
b.value = !0;
},
s = S({
url: "frappe.client.delete",
makeParams(c) {
return { doctype: "Batch Student", name: c.student };
},
}),
_ = (c) => {
c.forEach((y) =>
te(this, null, function* () {
console.log(y),
s.submit({ student: y }),
yield setTimeout(1e3);
})
);
};
return (c, y) => {
var v;
return (
i(),
h(
w,
null,
[
d(
e(D),
{
class: "float-right mb-3",
variant: "solid",
onClick: y[0] || (y[0] = (k) => l()),
},
{
prefix: f(() => [
d(e(ue), { class: "h-4 w-4" }),
]),
default: f(() => [
L(" " + u(c.__("Add Student")), 1),
]),
_: 1,
}
),
t("div", Ft, u(c.__("Students")), 1),
(v = e(p).data) != null && v.length
? (i(),
h("div", Zt, [
d(
e(ne),
{
columns: g(),
rows: e(p).data,
"row-key": "name",
options: { showTooltip: !1 },
},
{
default: f(() => [
d(
e(be),
{
class: "mb-2 grid items-center space-x-4 rounded bg-gray-100 p-2",
},
{
default: f(() => [
(i(!0),
h(
w,
null,
A(
g(),
(k) => (
i(),
$(
e(
ye
),
{
item: k,
},
{
prefix: f(
({
item: n,
}) => [
n.icon
? (i(),
$(
de(
n.icon
),
{
key: 0,
class: "h-4 w-4 stroke-1.5 ml-4",
}
))
: V(
"",
!0
),
]
),
_: 2,
},
1032,
[
"item",
]
)
)
),
256
)),
]),
_: 1,
}
),
d(e(ve), null, {
default: f(() => [
(i(!0),
h(
w,
null,
A(
e(p).data,
(k) => (
i(),
$(
e(
fe
),
{
row: k,
},
{
default:
f(
({
column: n,
item: a,
}) => [
d(
e(
ge
),
{
item: k[
n
.key
],
align: n.align,
},
{
prefix: f(
() => [
n.key ==
"full_name"
? (i(),
h(
"div",
Jt,
[
d(
e(
re
),
{
class: "flex items-center",
image: k.user_image,
label: a,
size: "sm",
},
null,
8,
[
"image",
"label",
]
),
]
))
: V(
"",
!0
),
]
),
default:
f(
() => [
t(
"div",
null,
u(
k[
n
.key
]
),
1
),
]
),
_: 2,
},
1032,
[
"item",
"align",
]
),
]
),
_: 2,
},
1032,
[
"row",
]
)
)
),
256
)),
]),
_: 1,
}),
d(e(ke), null, {
actions: f(
({
unselectAll: k,
selections: n,
}) => [
t("div", Gt, [
d(
e(D),
{
variant:
"ghost",
onClick:
(
a
) =>
_(
n
),
},
{
default:
f(
() => [
d(
e(
Ie
),
{
class: "h-4 w-4 stroke-1.5",
}
),
]
),
_: 2,
},
1032,
[
"onClick",
]
),
d(
e(D),
{
variant:
"ghost",
label: "Unselect all",
onClick:
(
a
) =>
k.toString(),
},
null,
8,
[
"onClick",
]
),
]),
]
),
_: 1,
}),
]),
_: 1,
},
8,
["columns", "rows"]
),
]))
: V("", !0),
d(
Ot,
{
batch: o.batch,
modelValue: b.value,
"onUpdate:modelValue":
y[1] || (y[1] = (k) => (b.value = k)),
reloadStudents: e(p),
"onUpdate:reloadStudents":
y[2] ||
(y[2] = (k) =>
Z(p) ? (p.value = k) : null),
},
null,
8,
["batch", "modelValue", "reloadStudents"]
),
],
64
)
);
};
},
},
Qt = { key: 0 },
Wt = { class: "mb-8" },
Xt = { class: "flex items-center justify-between mb-2" },
es = { class: "flex items-center" },
ts = { class: "ml-2" },
ss = { class: "text-sm" },
as = ["innerHTML"],
os = { key: 1, class: "text-sm italic text-gray-600" },
ls = {
__name: "Annoucements",
props: { batch: { type: String, required: !0 } },
setup(m) {
const b = m,
o = ie({
doctype: "Communication",
fields: [
"subject",
"content",
"recipients",
"cc",
"communication_date",
"sender",
"sender_full_name",
],
filters: {
reference_doctype: "LMS Batch",
reference_name: b.batch,
},
orderBy: "communication_date desc",
auto: !0,
cache: ["batch", b.batch],
});
return (p, g) => {
var l;
return (l = e(o).data) != null && l.length
? (i(),
h("div", Qt, [
(i(!0),
h(
w,
null,
A(
e(o).data,
(s) => (
i(),
h("div", null, [
t("div", Wt, [
t("div", Xt, [
t("div", es, [
d(
e(re),
{
label: s.sender_full_name,
size: "lg",
},
null,
8,
["label"]
),
t(
"div",
ts,
u(
s.sender_full_name
),
1
),
]),
t(
"div",
ss,
u(
e(we)(
s.communication_date
)
),
1
),
]),
t(
"div",
{
class: "prose prose-sm bg-gray-50 !min-w-full px-4 py-2 rounded-md",
innerHTML: s.content,
},
null,
8,
as
),
]),
])
)
),
256
)),
]))
: (i(), h("div", os, u(p.__("No announcements")), 1));
};
},
},
ns = { class: "flex flex-col gap-4" },
is = { class: "" },
ds = { class: "mb-1.5 text-sm text-gray-600" },
rs = { class: "" },
us = { class: "mb-1.5 text-sm text-gray-600" },
cs = { class: "mb-4" },
ms = { class: "mb-1.5 text-sm text-gray-600" },
_s = {
__name: "AnnouncementModal",
props: z(
{
batch: { type: String, required: !0 },
students: { type: Array, required: !0 },
},
{ modelValue: {}, modelModifiers: {} }
),
emits: ["update:modelValue"],
setup(m) {
const b = j(m, "modelValue"),
o = m,
p = F({ subject: "", replyTo: "", announcement: "" }),
g = S({
url: "frappe.core.doctype.communication.email.make",
makeParams(s) {
return {
recipients: o.students.join(", "),
cc: p.replyTo,
subject: p.subject,
content: p.announcement,
doctype: "LMS Batch",
name: o.batch,
send_email: 1,
};
},
}),
l = (s) => {
g.submit(
{},
{
validate() {
if (!o.students.length)
return "No students in this batch";
if (!p.subject) return "Subject is required";
},
onSuccess() {
s(),
Y({
title: "Success",
text: "Announcement has been sent successfully",
icon: "Check",
iconClasses:
"bg-green-600 text-white rounded-md p-px",
});
},
onError(_) {
var c;
Y({
title: "Error",
text:
((c = _.messages) == null
? void 0
: c[0]) || _,
icon: "x",
iconClasses:
"bg-red-600 text-white rounded-md p-px",
position: "top-center",
timeout: 10,
});
},
}
);
};
return (s, _) => (
i(),
$(
e(I),
{
modelValue: b.value,
"onUpdate:modelValue":
_[3] || (_[3] = (c) => (b.value = c)),
options: {
title: s.__("Make an Announcement"),
size: "xl",
actions: [
{
label: "Submit",
variant: "solid",
onClick: (c) => l(c),
},
],
},
},
{
"body-content": f(() => [
t("div", ns, [
t("div", is, [
t("div", ds, u(s.__("Subject")), 1),
d(
e(P),
{
type: "text",
modelValue: p.subject,
"onUpdate:modelValue":
_[0] ||
(_[0] = (c) => (p.subject = c)),
},
null,
8,
["modelValue"]
),
]),
t("div", rs, [
t("div", us, u(s.__("Reply To")), 1),
d(
e(P),
{
type: "text",
modelValue: p.replyTo,
"onUpdate:modelValue":
_[1] ||
(_[1] = (c) => (p.replyTo = c)),
},
null,
8,
["modelValue"]
),
]),
t("div", cs, [
t("div", ms, u(s.__("Announcement")), 1),
d(e(xe), {
bubbleMenu: !0,
onChange:
_[2] ||
(_[2] = (c) =>
(p.announcement = c)),
editorClass:
"prose-sm py-2 px-2 min-h-[200px] border-gray-300 hover:border-gray-400 rounded-md bg-gray-200",
}),
]),
]),
]),
_: 1,
},
8,
["modelValue", "options"]
)
);
},
},
ps = { key: 0, class: "h-screen text-base" },
hs = {
class: "sticky top-0 z-10 flex items-center justify-between border-b bg-white px-3 py-2.5 sm:px-5",
},
bs = { key: 0, class: "grid grid-cols-[70%,30%] h-full" },
ys = { class: "border-r-2" },
vs = { class: "pt-5 px-10 pb-10" },
fs = { key: 0 },
gs = { class: "text-xl font-semibold" },
ks = { class: "grid grid-cols-1 sm:grid-cols-1 md:grid-cols-2 gap-8 mt-5" },
xs = { key: 1 },
$s = { key: 2 },
Vs = { key: 3 },
Cs = { key: 4 },
Ss = { key: 5 },
Ms = { key: 6 },
ws = { class: "p-5" },
Ls = { class: "text-2xl font-semibold mb-3" },
Ds = { class: "flex items-center mb-3" },
js = { class: "flex items-center mb-6" },
As = ["innerHTML"],
Ts = { key: 1, class: "h-screen" },
Us = { class: "text-base border rounded-md w-1/3 mx-auto my-32" },
Bs = { class: "border-b px-5 py-3 font-medium" },
Es = t(
"span",
{
class: "inline-flex items-center before:bg-red-600 before:w-2 before:h-2 before:rounded-md before:mr-2",
},
null,
-1
),
Ns = { class: "px-5 py-3" },
Ps = { key: 0, class: "mb-4 leading-6" },
Ys = { key: 1, class: "mb-4 leading-6" },
Qs = {
__name: "Batch",
props: { batchName: { type: String, required: !0 } },
setup(m) {
const b = C("$dayjs"),
o = C("$user"),
p = B(!1),
g = m,
l = S({
url: "lms.lms.utils.get_batch_details",
cache: ["batch", g.batchName],
params: { batch: g.batchName },
auto: !0,
}),
s = R(() => {
var r, T, N;
let a = [
{ label: "All Batches", route: { name: "Batches" } },
];
return (
_.value ||
a.push({
label: (r = l.data) == null ? void 0 : r.title,
route: {
name: "BatchDetail",
params: {
batchName:
(T = l.data) == null
? void 0
: T.name,
},
},
}),
a.push({
label:
(N = l == null ? void 0 : l.data) == null
? void 0
: N.title,
route: {
name: "Batch",
params: { batchName: g.batchName },
},
}),
a
);
}),
_ = R(() => {
var a, r;
return (
(o == null ? void 0 : o.data) &&
((a = l.data) == null ? void 0 : a.students.length) &&
((r = l.data) == null
? void 0
: r.students.includes(o.data.name))
);
}),
c = B(0),
y = R(() => {
var r;
let a = [];
return (
_.value && a.push({ label: "Dashboard", icon: Ee }),
(r = o.data) != null &&
r.is_moderator &&
(a.push({ label: "Students", icon: Ue }),
a.push({ label: "Assessments", icon: Te })),
a.push({ label: "Live Class", icon: Be }),
a.push({ label: "Courses", icon: Le }),
a.push({ label: "Announcements", icon: Ne }),
a.push({ label: "Discussions", icon: Pe }),
a
);
}),
v = S({
url: "lms.lms.utils.get_batch_courses",
params: { batch: g.batchName },
cache: ["batchCourses", g.batchName],
auto: !0,
}),
k = () => {
window.location.href = "/login?redirect-to=/batches";
},
n = () => {
p.value = !0;
};
return (a, r) => {
var N, K, Q, W;
const T = $e("router-link");
return ((N = e(o).data) != null && N.is_moderator) || _.value
? (i(),
h("div", ps, [
t("header", hs, [
d(
e(Ve),
{ class: "h-7", items: s.value },
null,
8,
["items"]
),
(K = e(o).data) != null && K.is_moderator
? (i(),
$(
e(D),
{
key: 0,
onClick:
r[0] || (r[0] = (x) => n()),
},
{
suffix: f(() => [
d(e(ze), {
class: "h-4 stroke-1.5",
}),
]),
default: f(() => [
t(
"span",
null,
u(
a.__(
"Make an Announcement"
)
),
1
),
]),
_: 1,
}
))
: V("", !0),
]),
e(l).data
? (i(),
h("div", bs, [
t("div", ys, [
d(
e(Se),
{
class: "overflow-hidden",
modelValue: c.value,
"onUpdate:modelValue":
r[1] ||
(r[1] = (x) =>
(c.value = x)),
tabs: y.value,
},
{
tab: f(
({
tab: x,
selected: U,
}) => [
t("div", null, [
t(
"button",
{
class: O(
[
"group -mb-px flex items-center gap-1 border-b border-transparent py-2.5 text-base text-gray-600 duration-300 ease-in-out hover:border-gray-400 hover:text-gray-900",
{
"text-gray-900":
U,
},
]
),
},
[
x.icon
? (i(),
$(
de(
x.icon
),
{
key: 0,
class: "h-4 stroke-1.5",
}
))
: V(
"",
!0
),
L(
" " +
u(
a.__(
x.label
)
) +
" ",
1
),
x.count
? (i(),
$(
e(
Ce
),
{
key: 1,
class: O(
{
"text-gray-900 border border-gray-900":
U,
}
),
variant:
"subtle",
theme: "gray",
size: "sm",
},
{
default:
f(
() => [
L(
u(
x.count
),
1
),
]
),
_: 2,
},
1032,
[
"class",
]
))
: V(
"",
!0
),
],
2
),
]),
]
),
default: f(({ tab: x }) => [
t("div", vs, [
x.label == "Courses"
? (i(),
h("div", fs, [
t(
"div",
gs,
u(
a.__(
"Courses"
)
),
1
),
t(
"div",
ks,
[
(i(
!0
),
h(
w,
null,
A(
e(
v
)
.data,
(
U
) => (
i(),
h(
"div",
null,
[
d(
T,
{
to: {
name: "CourseDetail",
params: {
courseName:
U.name,
},
},
},
{
default:
f(
() => [
(i(),
$(
De,
{
key: U.name,
course: U,
},
null,
8,
[
"course",
]
)),
]
),
_: 2,
},
1032,
[
"to",
]
),
]
)
)
),
256
)),
]
),
]))
: x.label ==
"Dashboard"
? (i(),
h("div", xs, [
d(
ht,
{
batch: e(
l
),
isStudent:
_.value,
},
null,
8,
[
"batch",
"isStudent",
]
),
]))
: x.label ==
"Live Class"
? (i(),
h("div", $s, [
d(
Rt,
{
batch: e(
l
)
.data
.name,
},
null,
8,
[
"batch",
]
),
]))
: x.label ==
"Students"
? (i(),
h("div", Vs, [
d(
Kt,
{
batch: e(
l
)
.data
.name,
},
null,
8,
[
"batch",
]
),
]))
: x.label ==
"Assessments"
? (i(),
h("div", Cs, [
d(
ce,
{
batch: e(
l
)
.data
.name,
},
null,
8,
[
"batch",
]
),
]))
: x.label ==
"Announcements"
? (i(),
h("div", Ss, [
d(
ls,
{
batch: e(
l
)
.data
.name,
},
null,
8,
[
"batch",
]
),
]))
: x.label ==
"Discussions"
? (i(),
h("div", Ms, [
(i(),
$(
Ae,
{
doctype:
"LMS Batch",
docname:
e(
l
)
.data
.name,
title: "Discussions",
key: e(
l
)
.data
.name,
singleThread:
!0,
},
null,
8,
[
"docname",
]
)),
]))
: V("", !0),
]),
]),
_: 1,
},
8,
["modelValue", "tabs"]
),
]),
t("div", ws, [
t("div", Ls, u(e(l).data.title), 1),
t("div", Ds, [
d(e(J), {
class: "h-4 w-4 stroke-1.5 mr-2 text-gray-700",
}),
t(
"span",
null,
u(
e(b)(
e(l).data.start_date
).format("DD MMMM YYYY")
) +
" - " +
u(
e(b)(
e(l).data
.end_date
).format(
"DD MMMM YYYY"
)
),
1
),
]),
t("div", js, [
d(e(G), {
class: "h-4 w-4 stroke-1.5 mr-2 text-gray-700",
}),
t(
"span",
null,
u(
e(E)(
e(l).data.start_time
)
) +
" - " +
u(
e(E)(
e(l).data
.end_time
)
),
1
),
]),
t(
"div",
{
innerHTML:
e(l).data.description,
},
null,
8,
As
),
]),
d(
_s,
{
modelValue: p.value,
"onUpdate:modelValue":
r[2] ||
(r[2] = (x) =>
(p.value = x)),
batch: e(l).data.name,
students: e(l).data.students,
},
null,
8,
["modelValue", "batch", "students"]
),
]))
: V("", !0),
]))
: (Q = e(o).data) != null && Q.name
? V("", !0)
: (i(),
h("div", Ts, [
t("div", Us, [
t("div", Bs, [
Es,
L(" " + u(a.__("Not Permitted")), 1),
]),
t("div", Ns, [
e(o).data
? (i(),
h(
"div",
Ps,
u(
a.__(
"You are not a member of this batch. Please checkout our upcoming batches."
)
),
1
))
: (i(),
h(
"div",
Ys,
u(
a.__(
"Please login to access this page."
)
),
1
)),
e(o).data
? (i(),
$(
T,
{
key: 2,
to: {
name: "Batches",
params: {
batchName:
(W =
e(
l
).data) ==
null
? void 0
: W.name,
},
},
},
{
default: f(() => [
d(
e(D),
{
variant:
"solid",
class: "w-full",
},
{
default: f(
() => [
L(
u(
a.__(
"Upcoming Batches"
)
),
1
),
]
),
_: 1,
}
),
]),
_: 1,
},
8,
["to"]
))
: (i(),
$(
e(D),
{
key: 3,
variant: "solid",
class: "w-full",
onClick:
r[3] ||
(r[3] = (x) => k()),
},
{
default: f(() => [
L(u(a.__("Login")), 1),
]),
_: 1,
}
)),
]),
]),
]));
};
},
};
export { Qs as default };
//# sourceMappingURL=Batch-UFfl4NY5.js.map