From c5217aa7c8ba814cefbac9c26bc3a8b1aadeef6e Mon Sep 17 00:00:00 2001 From: Horacio Daniel Ros Date: Wed, 2 Sep 2026 09:46:02 -0300 Subject: [PATCH] feat(help): add Help Center with video tutorials and progress tracking - Implemented Help Center page with video categories and tutorials. - Added VideoModal component for video playback. - Introduced progress tracking for watched videos using local storage. - Created CSS styles for Help Center layout and components. - Added video data structure and sample videos for various categories. - Updated Footer to include a link to the Help Center. --- .../turnosxpress-triptico-interno.afdesign | Bin 6964643 -> 6964643 bytes ...rnosxpress-triptico-interno.afdesign~lock~ | Bin 119 -> 0 bytes .../triptico/turnosxpress-triptico.afdesign | Bin 8020353 -> 8020353 bytes .../src/app/components/Home/Footer/Footer.tsx | 3 + .../landing/help/components/VideoModal.tsx | 169 +++++ txclient/src/app/landing/help/help.module.css | 701 ++++++++++++++++++ txclient/src/app/landing/help/page.tsx | 317 ++++++++ txclient/src/app/landing/help/videoData.ts | 210 ++++++ 8 files changed, 1400 insertions(+) delete mode 100644 resources/triptico/turnosxpress-triptico-interno.afdesign~lock~ create mode 100644 txclient/src/app/landing/help/components/VideoModal.tsx create mode 100644 txclient/src/app/landing/help/help.module.css create mode 100644 txclient/src/app/landing/help/page.tsx create mode 100644 txclient/src/app/landing/help/videoData.ts diff --git a/resources/triptico/turnosxpress-triptico-interno.afdesign b/resources/triptico/turnosxpress-triptico-interno.afdesign index 8903e5c423e07b751f94b754798831232183eb85..1c2df5f7cc35c84b83c47d48a313097451ab3667 100644 GIT binary patch delta 339 zcmWN_H9~>`06<~%M}3Oj-QC@ViiKczcih6^O&-CK$pd&kW%!ma_4N~^(g^*`06^hiL4Atd-QC@ViiKczcih6^O&-CK$pd&kW%!ma_4N}~joi#k4V{d2ot>S{bWJQA4RtNtoGf(R zT%0WpT}@pr4V}$A@{1CaGxHUK@{1kQ(lYZhODYvyQj0Uw^HPfxjC>Q56>@=s3Mr`y GP?Z3r2_Q58 diff --git a/resources/triptico/turnosxpress-triptico.afdesign b/resources/triptico/turnosxpress-triptico.afdesign index 22c819418f5874be0c5e02ab6db55115dbb383d5..feea32604cb6659bd7f24a95c11883a223619d7b 100644 GIT binary patch delta 387 zcmWN_MB!1{>r3G$+XPKtjx*0EXblP$+E1-s;tSnY{);^l&EaU qw)~eJ*_A!nmjgMJBRQ56Ih8XxmkYU+E4h{%xs^M)mxm`FAEIySc4!&^ delta 387 zcmWN_M#w}nS7OUsgQ5-U4BTVR7theNUhXKy);OpG)c3xNUQvmHffg*>69+%mLBPqKIxZV z5|-aGAcHa_!!jbHGA82^kv}palQJdK@>gbLR_0`07GzPDWLZ{ZRn}x(He^$_Br4mo qBfGLE`*I+MawNy{PyWk^oXVM;%Y|IZm0Zh>+{&HY%fl0o579T~9cUK- diff --git a/txclient/src/app/components/Home/Footer/Footer.tsx b/txclient/src/app/components/Home/Footer/Footer.tsx index dbe50d6..119f1f4 100644 --- a/txclient/src/app/components/Home/Footer/Footer.tsx +++ b/txclient/src/app/components/Home/Footer/Footer.tsx @@ -74,6 +74,9 @@ export default function Footer() { Mis organizaciones + + Obtener ayuda +

Contacto

info@turnosxpress.com.ar diff --git a/txclient/src/app/landing/help/components/VideoModal.tsx b/txclient/src/app/landing/help/components/VideoModal.tsx new file mode 100644 index 0000000..139cf97 --- /dev/null +++ b/txclient/src/app/landing/help/components/VideoModal.tsx @@ -0,0 +1,169 @@ +"use client"; + +import { useEffect, useCallback } from "react"; +import style from "../help.module.css"; +import { Video, videoCategories } from "../videoData"; + +interface VideoModalProps { + video: Video | null; + isOpen: boolean; + onClose: () => void; + onSelectVideo: (video: Video) => void; +} + +export default function VideoModal({ + video, + isOpen, + onClose, + onSelectVideo, +}: VideoModalProps) { + const handleKeyDown = useCallback( + (e: KeyboardEvent) => { + if (e.key === "Escape") { + onClose(); + } + }, + [onClose] + ); + + useEffect(() => { + if (isOpen) { + document.addEventListener("keydown", handleKeyDown); + document.body.style.overflow = "hidden"; + } + return () => { + document.removeEventListener("keydown", handleKeyDown); + document.body.style.overflow = ""; + }; + }, [isOpen, handleKeyDown]); + + if (!isOpen || !video) return null; + + const getCategoryName = (categoryId: string) => { + const cat = videoCategories.find((c) => c.id === categoryId); + return cat ? cat.name : ""; + }; + + const allVideos = videoCategories.flatMap((cat) => cat.videos); + const currentVideoIndex = allVideos.findIndex((v) => v.id === video.id); + + const handleNext = () => { + if (currentVideoIndex < allVideos.length - 1) { + onSelectVideo(allVideos[currentVideoIndex + 1]); + } + }; + + const handlePrev = () => { + if (currentVideoIndex > 0) { + onSelectVideo(allVideos[currentVideoIndex - 1]); + } + }; + + return ( +
+
e.stopPropagation()}> +
+

{video.title}

+ +
+
+
+
+