Merge branch 'develop'

This commit is contained in:
lizerk 2026-04-03 21:12:34 +03:00
commit 19adc7d07f
4 changed files with 80 additions and 4 deletions

View File

@ -2,7 +2,7 @@
import { AppShell } from "../../components/AppShell";
import { apiClient } from "@/lib/api";
import { useEffect, useMemo, useState } from "react";
import { Suspense, useEffect, useMemo, useState } from "react";
import dynamic from "next/dynamic";
import { usePathname, useRouter, useSearchParams } from "next/navigation";
import type { Document } from "@/types/api";
@ -63,6 +63,25 @@ function formatDate(value?: string): string {
}
export default function DocumentsPage() {
return (
<Suspense fallback={<DocumentsPageFallback />}>
<DocumentsPageContent />
</Suspense>
);
}
function DocumentsPageFallback() {
return (
<AppShell>
<section className="rounded-2xl bg-white p-6 text-center shadow-sm ring-1 ring-gray-100">
<div className="inline-block h-5 w-5 animate-spin rounded-full border-2 border-gray-300 border-t-sky-600"></div>
<p className="mt-3 text-sm text-gray-500">Загрузка документов...</p>
</section>
</AppShell>
);
}
function DocumentsPageContent() {
const router = useRouter();
const pathname = usePathname();
const searchParams = useSearchParams();

View File

@ -1,6 +1,6 @@
"use client";
import React, { useEffect, useLayoutEffect, useMemo, useRef, useState, useCallback } from "react";
import React, { Suspense, useEffect, useLayoutEffect, useMemo, useRef, useState, useCallback } from "react";
import { useParams, usePathname, useRouter, useSearchParams } from "next/navigation";
import { MessageCircle, ChevronDown, ChevronLeft, ChevronRight } from "lucide-react";
import { AppShell } from "../../../components/AppShell";
@ -61,6 +61,25 @@ function formatDateInputValue(date: Date): string {
/* ─── component ─── */
export default function MessageDialogPage() {
return (
<Suspense fallback={<MessageDialogPageFallback />}>
<MessageDialogPageContent />
</Suspense>
);
}
function MessageDialogPageFallback() {
return (
<AppShell>
<section className="rounded-2xl bg-white p-6 text-center shadow-sm ring-1 ring-gray-100">
<div className="inline-block h-5 w-5 animate-spin rounded-full border-2 border-gray-300 border-t-sky-600"></div>
<p className="mt-3 text-sm text-gray-500">Загрузка чата...</p>
</section>
</AppShell>
);
}
function MessageDialogPageContent() {
const params = useParams<{ chatId: string }>();
const router = useRouter();
const pathname = usePathname();

View File

@ -5,7 +5,7 @@ import { AppShell } from "../components/AppShell";
import { Modal } from "@/components/ui";
import { apiClient } from "@/lib/api";
import { resolveMediaUrl } from "@/lib/url";
import { useEffect, useRef, useState } from "react";
import { Suspense, useEffect, useRef, useState } from "react";
import { usePathname, useRouter, useSearchParams } from "next/navigation";
import type { Comment, Post } from "@/types/api";
import { useUser } from "@/contexts/UserContext";
@ -19,6 +19,25 @@ type LikeUser = {
};
export default function Home() {
return (
<Suspense fallback={<HomePageFallback />}>
<HomePageContent />
</Suspense>
);
}
function HomePageFallback() {
return (
<AppShell>
<section className="rounded-2xl bg-white p-6 text-center shadow-sm ring-1 ring-gray-100">
<div className="inline-block h-5 w-5 animate-spin rounded-full border-2 border-gray-300 border-t-sky-600"></div>
<p className="mt-3 text-sm text-gray-500">Загрузка ленты...</p>
</section>
</AppShell>
);
}
function HomePageContent() {
const { user } = useUser();
const router = useRouter();
const pathname = usePathname();

View File

@ -6,7 +6,7 @@ import { Modal } from "@/components/ui";
import { apiClient } from "@/lib/api";
import { useUser } from "@/contexts/UserContext";
import { canManageRequests, canProcessRequests } from "@/lib/permissions";
import { useEffect, useRef } from "react";
import { Suspense, useEffect, useRef } from "react";
import Link from "next/link";
import { usePathname, useRouter, useSearchParams } from "next/navigation";
import type { User } from "@/types/api";
@ -25,6 +25,25 @@ import {
const SwipeApprovalMode = dynamic(() => import("@/components/requests/SwipeApprovalMode"), { ssr: false });
export default function RequestsPage() {
return (
<Suspense fallback={<RequestsPageFallback />}>
<RequestsPageContent />
</Suspense>
);
}
function RequestsPageFallback() {
return (
<AppShell>
<section className="rounded-2xl bg-white p-6 text-center shadow-sm ring-1 ring-gray-100">
<div className="inline-block h-5 w-5 animate-spin rounded-full border-2 border-gray-300 border-t-sky-600"></div>
<p className="mt-3 text-sm text-gray-500">Загрузка заявлений...</p>
</section>
</AppShell>
);
}
function RequestsPageContent() {
const { user } = useUser();
const router = useRouter();
const pathname = usePathname();