From 9f43dd02d7f0b5e21b2fe84abb1b4e5eb4e1fcbb Mon Sep 17 00:00:00 2001 From: BunyodL Date: Sat, 10 May 2025 00:29:02 +0500 Subject: [PATCH] feat: add media provider and get madia from use-media-controller hook --- src/app/api-utlities/@types/index.ts | 9 ++++ src/app/api-utlities/presenters/index.ts | 14 +++++++ src/app/api-utlities/requests/common.ts | 13 ++++++ src/app/layout.tsx | 14 ++++++- .../language/hooks/use-text-controller.ts | 4 +- src/shared/media/api/media-control.api.ts | 24 +++++++++++ .../media/context/media-control.provider.tsx | 42 +++++++++++++++++++ .../media/hooks/use-media-controller.ts | 20 +++++++++ src/shared/providers/providers.tsx | 37 +++++++++------- src/shared/types/media.type.ts | 8 ++++ src/widgets/map-section.tsx | 6 +++ 11 files changed, 174 insertions(+), 17 deletions(-) create mode 100644 src/shared/media/api/media-control.api.ts create mode 100644 src/shared/media/context/media-control.provider.tsx create mode 100644 src/shared/media/hooks/use-media-controller.ts create mode 100644 src/shared/types/media.type.ts diff --git a/src/app/api-utlities/@types/index.ts b/src/app/api-utlities/@types/index.ts index d3d29da..dbf066b 100644 --- a/src/app/api-utlities/@types/index.ts +++ b/src/app/api-utlities/@types/index.ts @@ -67,6 +67,15 @@ export type TextResponse = Root<{ _znachenie: string | null; }>; +export type MediaResponse = Root<{ + _name: string; + _foto: { + id: string; + url: string; + }; + _klyuchNeIzmenya: string; +}>; + export type Team = Root<{ _foto: Image[]; _zvanie: string; diff --git a/src/app/api-utlities/presenters/index.ts b/src/app/api-utlities/presenters/index.ts index a76aabe..88d829a 100644 --- a/src/app/api-utlities/presenters/index.ts +++ b/src/app/api-utlities/presenters/index.ts @@ -1,5 +1,7 @@ import { isEmpty } from 'lodash'; +import { MediaItem } from '@/shared/types/media.type'; + import { Certificate, Charity, @@ -7,6 +9,7 @@ import { History, Image, Job, + MediaResponse, Partner, Review, Select, @@ -88,6 +91,17 @@ export const presentTexts = (texts: TextResponse) => value: item._znachenie, })); +export const presentMedia = (media: MediaResponse) => { + return media.records.map((record) => ({ + key: record._klyuchNeIzmenya, + name: record._name, + photo: { + id: record._foto.id, + url: record._foto.url, + }, + })); +}; + export const presentReviews = (reviews: Review) => reviews.records.map((review) => ({ id: review.id, diff --git a/src/app/api-utlities/requests/common.ts b/src/app/api-utlities/requests/common.ts index 136dd39..5b24ada 100644 --- a/src/app/api-utlities/requests/common.ts +++ b/src/app/api-utlities/requests/common.ts @@ -122,6 +122,19 @@ export const textsRequest = { }, }; +export const mediaRequest = { + _mediaKontent: { + records: { + _name: true, + _foto: { + id: true, + url: true, + }, + _klyuchNeIzmenya: true, + }, + }, +}; + export const teamRequest = { _komanda: { records: { diff --git a/src/app/layout.tsx b/src/app/layout.tsx index 78cfcfc..7134cb9 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -2,8 +2,10 @@ import type { Metadata } from 'next'; import { Inter } from 'next/font/google'; import { textControlApi } from '@/shared/language/api/text-control.api'; +import { mediaControlApi } from '@/shared/media/api/media-control.api'; import { Providers } from '@/shared/providers/providers'; import { makeStore } from '@/shared/store'; +import { MediaItem } from '@/shared/types/media.type'; import { TextItem } from '@/shared/types/text.types'; import { Footer } from '@/widgets/footer'; @@ -29,10 +31,15 @@ export default async function RootLayout({ }>) { const store = makeStore(); - const response = await store.dispatch( + // Запрос текстов + const textResponse = await store.dispatch( textControlApi.endpoints.fetchText.initiate(), ); + // Запрос медиа + const mediaResponse = await store.dispatch( + mediaControlApi.endpoints.fetchMedia.initiate(), + ); return ( - +
{children}