improvement: QRcode and shared link added to cases inorder to make it possible for staff users to share a case info with other staffs or other clinics.

This commit is contained in:
2026-07-14 21:07:05 +03:30
parent 953e609fb8
commit 08df2f71ea
41 changed files with 1535 additions and 83 deletions

View File

@@ -1,6 +1,7 @@
'use client';
import { useState, useEffect, useMemo } from 'react';
import { Suspense, useState, useEffect, useMemo } from 'react';
import { useSearchParams } from 'next/navigation';
import { useRouter } from '@/i18n/navigation';
import { useForm } from 'react-hook-form';
import { zodResolver } from '@hookform/resolvers/zod';
@@ -15,6 +16,10 @@ import { AuthPageShell } from '@/components/ui/auth/AuthPageShell';
import { Button } from '@/components/ui/shared/Button';
import { Checkbox } from '@/components/ui/shared/Checkbox';
import { Input } from '@/components/ui/shared/Input';
import {
consumeAuthRedirect,
storeAuthRedirectFromPath,
} from '@/lib/auth/postAuthRedirect';
type LoginForm = {
email: string;
@@ -22,13 +27,14 @@ type LoginForm = {
rememberMe: boolean;
};
export default function LoginPage() {
function LoginPageContent() {
const t = useTranslations('auth');
const tCommon = useTranslations('common');
const tValidation = useTranslations('validation');
const tErrors = useTranslations('errors');
const { login, isLoading, user, isAuthReady } = useAuth();
const { login, isLoading, user, isAuthReady, organizations, currentOrganization } = useAuth();
const router = useRouter();
const searchParams = useSearchParams();
const [error, setError] = useState<string | null>(null);
const [savedEmail] = useState(() => getRememberedEmail());
@@ -43,10 +49,18 @@ export default function LoginPage() {
);
useEffect(() => {
if (isAuthReady && user) {
router.push('/today');
const from = searchParams.get('from');
if (from) {
storeAuthRedirectFromPath(from);
}
}, [user, isAuthReady, router]);
}, [searchParams]);
useEffect(() => {
if (!isAuthReady || !user || isLoading) return;
const orgReady = organizations.length <= 1 || currentOrganization;
if (!orgReady) return;
router.push(consumeAuthRedirect() ?? '/today');
}, [isAuthReady, user, isLoading, organizations, currentOrganization, router]);
const {
register,
@@ -152,3 +166,21 @@ export default function LoginPage() {
</AuthPageShell>
);
}
function LoginPageFallback() {
const tCommon = useTranslations('common');
return (
<div className="min-h-[100dvh] app-web-bg flex items-center justify-center px-4">
<p className="text-text-secondary">{tCommon('loading')}</p>
</div>
);
}
export default function LoginPage() {
return (
<Suspense fallback={<LoginPageFallback />}>
<LoginPageContent />
</Suspense>
);
}