import { motion, LayoutGroup } from "motion/react"; import { useAtom } from "jotai"; import { useState, useEffect } from "react"; import Logo from "../assets/logo.svg"; import { AdminUserFRequest, classUserFRequest } from "../trash/req_mgr"; import { BiCalendar, BiCalendarEdit, BiExit, BiPencil, BiTime, BiTrash, BiX, } from "react-icons/bi"; import { formatDate, parseApiDate } from "../trash/dengi"; import { DengiYesOrNoDialog, TextPreloader, // CoolMouseBg } from "../trash/trash-components"; import { TableEditor } from "../trash/editorTable"; import { ifstyle } from "../trash/helpers"; import { API_BASE_URL } from "../App"; import { useWebHaptics } from "web-haptics/react"; export default function EditorPage(props) { const [classId, _setUserId] = useAtom(props.classIDAtom); const [adminId, _setAdminId] = useAtom(props.adminAtom); const [pickmeMode, _setPickmeMode] = useAtom(props.pickmeModeAtom); const [route, setRoute] = useAtom(props.routeAtom); const dateRaw = props.secondPathSegment(route); useEffect(() => { if ( dateRaw == "" || adminId == "" || !RegExp(/\d{2}-\d{2}-\d{2}$/gm).test(dateRaw) ) { props.setsetRoute(setRoute, "/app"); } }, [dateRaw]); const date = parseApiDate(dateRaw); const [userFrNames, setUserFrNames] = useState({ admin: false, class: false, }); useEffect(() => { (async () => { let cancelled = false; const promises = []; if (classId !== "") // TODO: rewrite this bullshit into one pretty request promises.push( props.dengi_cash.withCacheAsync(`userfr-${classId}`, async () => classUserFRequest(API_BASE_URL, classId), ), ); else promises.push(Promise.resolve([0])); if (adminId !== "") promises.push( props.dengi_cash.withCacheAsync(`adminfr-${adminId}`, async () => AdminUserFRequest(API_BASE_URL, adminId), ), ); else promises.push(Promise.resolve([0])); Promise.all(promises).then(([classRes, adminRes]) => { if (cancelled) return; const classF = classRes[0] === 1 ? classRes[1].userclassname : false; const adminF = adminRes[0] === 1 ? adminRes[1].adminName : false; setUserFrNames({ admin: adminF, class: classF }); }); return () => { cancelled = true; }; })(); }, [classId, adminId]); // on rerenderr useEffect(() => { // console.log("editor cache clean"); props.dengi_cash.delete( "editor_schedule", "editor_changes", "editor_rings", ); }, []); // clean on full rerender const { trigger } = useWebHaptics(); // tabs const tabs = [ [ <> замены , <>{/* content */}, ], [ <> расписание , <>{/* content */}, ], [ <> звонки , <>{/* content */}, ], ]; const [selectedTab, selectTab] = useState(0); const [changesWereMade, setChangesWereMade] = useState(false); const [tabDiagShow, setTabDiagShow] = useState(false); const [tabDiagRequestTab, setTabDiagRequestTab] = useState(0); // 404 for exit return ( <>
, noIcon: , bgDissmis: true, yesBtnStyle: "bg-red-500! text-white! md:hover:bg-red-600!", }} onAnswer={(answ) => { if (answ && tabDiagRequestTab == 404) location.hash = "/app"; else if (answ) selectTab(tabDiagRequestTab); setTabDiagShow(0); setTabDiagRequestTab(0); }} />
{userFrNames["class"] ? userFrNames["class"] : classId} {userFrNames["admin"] ? ( userFrNames["admin"] ) : ( )}
{tabs.map((item, idx) => (
{ if (selectedTab == idx) return; trigger([{ duration: 35 }], { intensity: 1 }); if (!changesWereMade) { selectTab(idx); } else { setTabDiagRequestTab(idx); setTabDiagShow(true); } }} > {item} {idx == selectedTab && ( )}
))}
{ }
{/* */}
); } function DefaultEditorBG({ pickmeMode }) { return (
); } // ВАНЕЧКА ПИКМИЛЁВ <3 // ВАНЕЧКА ПИКМИЛЁВ <3 // ВАНЕЧКА ПИКМИЛЁВ <3 // ВАНЕЧКА ПИКМИЛЁВ <3 // ВАНЕЧКА ПИКМИЛЁВ <3 // ВАНЕЧКА ПИКМИЛЁВ <3 // ВАНЕЧКА ПИКМИЛЁВ <3 // ВАНЕЧКА ПИКМИЛЁВ <3 // ВАНЕЧКА ПИКМИЛЁВ <3 // ВАНЕЧКА ПИКМИЛЁВ <3 // ВАНЕЧКА ПИКМИЛЁВ <3 // ВАНЕЧКА ПИКМИЛЁВ <3 // ВАНЕЧКА ПИКМИЛЁВ <3 // ВАНЕЧКА ПИКМИЛЁВ <3 // ВАНЕЧКА ПИКМИЛЁВ <3 // ВАНЕЧКА ПИКМИЛЁВ <3 // ВАНЕЧКА ПИКМИЛЁВ <3 // ВАНЕЧКА ПИКМИЛЁВ <3 // ВАНЕЧКА ПИКМИЛЁВ <3 // ВАНЕЧКА ПИКМИЛЁВ <3 // ВАНЕЧКА ПИКМИЛЁВ <3 // ВАНЕЧКА ПИКМИЛЁВ <3 // ВАНЕЧКА ПИКМИЛЁВ <3