From e4bfbd30cc2f07328a8580f0f75351fd16875fd1 Mon Sep 17 00:00:00 2001 From: fullofempt <131869779+fullofempt@users.noreply.github.com> Date: Mon, 15 Dec 2025 13:18:18 +0500 Subject: [PATCH] end --- app/AuthPage.jsx | 6 +- app/components/RequestDetailsModal.jsx | 1114 ++++++++--------- app/components/TabBar.jsx | 6 +- .../ValounterRequestDetailsModal.jsx | 62 +- app/createRequest/page.jsx | 111 +- app/historyRequest/page.jsx | 2 +- app/notification/page.jsx | 101 ++ app/regCode/page.jsx | 2 +- app/valounterHistoryRequest/page.jsx | 81 +- 9 files changed, 738 insertions(+), 747 deletions(-) create mode 100644 app/notification/page.jsx diff --git a/app/AuthPage.jsx b/app/AuthPage.jsx index 9be7ab5..c4a025d 100644 --- a/app/AuthPage.jsx +++ b/app/AuthPage.jsx @@ -100,7 +100,7 @@ const AuthPage = () => { setRememberMe((prev) => !prev); if (!rememberMe) setCheckboxError(false); }} - className={`w-5 h-5 rounded-full border border-white flex items-center justify-center ${ + className={`w-10 h-6 rounded-full border border-white flex items-center justify-center ${ rememberMe ? "bg-white" : "bg-transparent" }`} > @@ -108,14 +108,14 @@ const AuthPage = () => { )} -

+

Подтверждаю, что я прочитал условия использования данного приложения

{/* Ссылки */} -
+
{/* -

- Заявка от {request.createdAt} + try { + setAcceptLoading(true); + setAcceptError(""); + setAcceptSuccess(""); + + const res = await fetch( + `${API_BASE}/requests/${request.id}/responses/${responseId}/accept`, + { + method: "POST", + headers: { + Accept: "application/json", + Authorization: `Bearer ${accessToken}`, + }, + } + ); + + if (!res.ok) { + let msg = "Не удалось принять отклик"; + try { + const data = await res.json(); + if (data.error) msg = data.error; + } catch { + const text = await res.text(); + if (text) msg = text; + } + setAcceptError(msg); + setAcceptLoading(false); + return; + } + + await res.json(); + setAcceptSuccess("Волонтёр принят на заявку"); + setAcceptLoading(false); + } catch (e) { + setAcceptError(e.message || "Ошибка сети"); + setAcceptLoading(false); + } + }; + + const fullDescription = + details?.description || request.description || "Описание отсутствует"; + + const addressLine = details + ? [details.address, details.city].filter(Boolean).join(", ") + : null; + + const requesterName = details?.requester?.first_name + ? `${details.requester.first_name} ${details.requester.last_name || ""}`.trim() + : details?.requester?.email; + + const requestTypeName = details?.request_type?.name; + + return ( +

+ {/* Заголовок */} +
+ +

+ Заявка от {request.createdAt} +

+ +
+ + {/* Карточка */} +
+
+ {/* Статус + дата/время */} +
+ + {isDone ? "Выполнена" : request.status} + +
+

+ {request.date} +

+

+ {request.time} +

+
+
+ + {/* Название */} +

+ {request.title} +

+ + {/* Инфо по заявке */} +
+ {loading && ( +

+ Загрузка информации о заявке... +

+ )} + + {loadError && !loading && ( +

+ {loadError} +

+ )} + + {!loading && !loadError && ( + <> + {requestTypeName && ( +

+ Тип: {requestTypeName} +

+ )} + + {addressLine && ( +

+ Адрес: {addressLine} +

+ )} + + {details?.urgency && ( +

+ Срочность:{" "} + {details.urgency} +

+ )} + + {requesterName && ( +

+ Заявитель:{" "} + {requesterName} +

+ )} + + {details?.contact_phone && ( +

+ Телефон:{" "} + {details.contact_phone} +

+ )} + + {details?.contact_notes && ( +

+ Комментарий к контакту:{" "} + {details.contact_notes} +

+ )} + +

+ Описание:{" "} + {fullDescription}

- -
+ + )} +
- {/* Карточка */} -
-
- {/* Статус + дата/время */} -
- - {isDone ? "Выполнена" : request.status} - -
-

- {request.date} -

-

- {request.time} -

-
-
- - {/* Название */} -

- {request.title} + {/* Отклики волонтёров (как было) */} + {!responsesLoading && !responsesError && responses.length > 0 && ( +

+

+ Отклики волонтёров +

+ {responses.map((resp) => ( +
+

+ Волонтёр:{" "} + {resp.volunteer_name || + resp.volunteername || + resp.volunteer?.name} +

+ {resp.message && ( +

+ Сообщение:{" "} + {resp.message}

- - {/* Инфо по заявке */} -
- {loading && ( -

- Загрузка информации о заявке... -

- )} - - {loadError && !loading && ( -

- {loadError} -

- )} - - {!loading && !loadError && ( - <> - {requestTypeName && ( -

- Тип: {requestTypeName} -

- )} - - {addressLine && ( -

- Адрес: {addressLine} -

- )} - - {details?.urgency && ( -

- Срочность:{" "} - {details.urgency} -

- )} - - {requesterName && ( -

- Заявитель:{" "} - {requesterName} -

- )} - - {details?.contact_phone && ( -

- Телефон:{" "} - {details.contact_phone} -

- )} - - {details?.contact_notes && ( -

- Комментарий к контакту:{" "} - {details.contact_notes} -

- )} - -

- Описание:{" "} - {fullDescription} -

- - )} -
- - {/* Отклики волонтёров */} - {!responsesLoading && !responsesError && responses.length > 0 && ( -
-

- Отклики волонтёров -

- {responses.map((resp) => ( -
-

- Волонтёр:{" "} - {resp.volunteer_name || - resp.volunteername || - resp.volunteer?.name} -

- {resp.message && ( -

- Сообщение:{" "} - {resp.message} -

- )} -
- -
-
- ))} - - {acceptError && ( -

- {acceptError} -

- )} - {acceptSuccess && ( -

- {acceptSuccess} -

- )} -
- )} - - {responsesLoading && !responsesError && ( -

- Загрузка откликов волонтёров... -

- )} - - {responsesError && ( -

- {responsesError} -

- )} - - {/* Отклонена */} - {isRejected && ( - <> - {request.rejectReason && ( -
-

- Причина отказа -

-

- {request.rejectReason} -

-
- )} - -
-

- Ваш комментарий -

-