From 8f31c6371bf13d69461e501c27ee3a36adcea4fc Mon Sep 17 00:00:00 2001 From: kazachilo Date: Thu, 13 Mar 2025 17:04:35 +0300 Subject: [PATCH] =?UTF-8?q?=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=BF=D1=80=D0=BE=D0=B1=D0=BB=D0=B5=D0=BC=D0=B0?= =?UTF-8?q?=20=D1=81=20=D0=BF=D1=80=D0=BE=D0=BA=D1=81=D0=B8=D1=80=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=D0=BC=20=D0=B8=D0=B7=D0=BE=D0=B1?= =?UTF-8?q?=D1=80=D0=B0=D0=B6=D0=B5=D0=BD=D0=B8=D0=B9:=20=D0=B4=D0=BE?= =?UTF-8?q?=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B0=20=D1=84=D1=83=D0=BD?= =?UTF-8?q?=D0=BA=D1=86=D0=B8=D1=8F=20normalizeImageUrl=20=D0=B4=D0=BB?= =?UTF-8?q?=D1=8F=20=D0=BF=D1=80=D0=B5=D0=BE=D0=B1=D1=80=D0=B0=D0=B7=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F=20URL=20=D1=81=20IP-=D0=B0=D0=B4?= =?UTF-8?q?=D1=80=D0=B5=D1=81=D0=B0=D0=BC=D0=B8=20=D0=B2=20URL=20=D1=81=20?= =?UTF-8?q?=D0=B4=D0=BE=D0=BC=D0=B5=D0=BD=D0=BE=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/assets/index.ts | 71 ++++++++++++++++++++ src/config/homeScreen.ts | 15 +++-- src/screens/onboarding/OnboardingWelcome.tsx | 4 +- src/services/api.ts | 28 ++++++++ src/services/stickerService.ts | 13 +++- 5 files changed, 121 insertions(+), 10 deletions(-) create mode 100644 src/assets/index.ts diff --git a/src/assets/index.ts b/src/assets/index.ts new file mode 100644 index 0000000..76ebd76 --- /dev/null +++ b/src/assets/index.ts @@ -0,0 +1,71 @@ +import ahareBot from './ahare_bot250.png'; +import faq from './faq250.png'; +import shorts from './shorts250.png'; +import balerina from './balerina250x.png'; +import emotions from './emotions_promo250x.png'; +import realism from './realism_promo250x.png'; +import prompt from './prompt.png'; +import onboard1 from './onboard1.png'; +import santa from './250x_santa.png'; +import balloon from './balloon250x.png'; +import bicycle from './bicecle250x.png'; +import book from './book250x.png'; +import cocktail from './coctail250x.png'; +import coffee from './coffee250x.png'; +import cook from './cook250x.png'; +import cowboy from './cowboy250x.png'; +import detective from './detektiv250x.png'; +import dog from './dog250x.png'; +import fairy from './fairy250x.png'; +import fire from './fire250x.png'; +import flowers from './flowers250x.png'; +import gift from './gift250x.png'; +import icecream from './icecream250x.png'; +import knight from './knight250x.png'; +import moto from './moto250x.png'; +import newspaper from './newspaper250x.png'; +import skateboard from './scateboard250x.png'; +import science from './sience250x.png'; +import sportcar from './sportcar250x.png'; +import surfing from './surfing250x.png'; +import umbrella from './umbrella250x.png'; +import defaultAvatar from './default-avatar.svg'; +import shieldIcon from './shield-icon.png'; +import reactLogo from './react.svg'; + +export const images = { + ahareBot, + faq, + shorts, + balerina, + emotions, + realism, + prompt, + onboard1, + santa, + balloon, + bicycle, + book, + cocktail, + coffee, + cook, + cowboy, + detective, + dog, + fairy, + fire, + flowers, + gift, + icecream, + knight, + moto, + newspaper, + skateboard, + science, + sportcar, + surfing, + umbrella, + defaultAvatar, + shieldIcon, + reactLogo +}; diff --git a/src/config/homeScreen.ts b/src/config/homeScreen.ts index a1d13f2..fd8f865 100644 --- a/src/config/homeScreen.ts +++ b/src/config/homeScreen.ts @@ -1,4 +1,5 @@ import { AppConfig } from '../types/blocks'; +import { images } from '../assets'; export const homeScreenConfig: AppConfig = { homeScreen: { @@ -15,7 +16,7 @@ export const homeScreenConfig: AppConfig = { colors: ['#FF69B4', '#FF1493'] }, title: 'Поделиться', - imageUrl: '/src/assets/ahare_bot250.png', + imageUrl: images.ahareBot, action: { type: 'function', value: 'inviteFriends' @@ -29,7 +30,7 @@ export const homeScreenConfig: AppConfig = { colors: ['#2B9CFF', '#1E88E5'] }, title: 'Инструкция', - imageUrl: '/src/assets/faq250.png', + imageUrl: images.faq, action: { type: 'route', value: '/onboarding/welcome' @@ -43,7 +44,7 @@ export const homeScreenConfig: AppConfig = { colors: ['#8A2BE2', '#9400D3'] }, title: 'ShortsLoader', - imageUrl: '/src/assets/shorts250.png', + imageUrl: images.shorts, action: { type: 'function', value: 'openTelegramBot' @@ -94,7 +95,7 @@ export const homeScreenConfig: AppConfig = { colors: ['#FF69B4', '#FF1493'] }, title: 'Чиби', - imageUrl: '/src/assets/balerina250x.png', + imageUrl: images.balerina, action: { type: 'selectStyle', value: 'chibi' @@ -108,7 +109,7 @@ export const homeScreenConfig: AppConfig = { colors: ['#2B9CFF', '#1E88E5'] }, title: 'Эмоции', - imageUrl: '/src/assets/emotions_promo250x.png', + imageUrl: images.emotions, action: { type: 'selectStyle', value: 'emotions' @@ -123,7 +124,7 @@ export const homeScreenConfig: AppConfig = { colors: ['#4CAF50', '#45A049'] }, title: 'Реализм', - imageUrl: '/src/assets/realism_promo250x.png', + imageUrl: images.realism, action: { type: 'selectStyle', value: 'realism' @@ -162,7 +163,7 @@ export const homeScreenConfig: AppConfig = { colors: ['#2196F3', '#1976D2'] }, title: 'Свой промпт', - imageUrl: '/src/assets/prompt.png', + imageUrl: images.prompt, action: { type: 'function', value: 'toggleInput' diff --git a/src/screens/onboarding/OnboardingWelcome.tsx b/src/screens/onboarding/OnboardingWelcome.tsx index 849d483..da98482 100644 --- a/src/screens/onboarding/OnboardingWelcome.tsx +++ b/src/screens/onboarding/OnboardingWelcome.tsx @@ -1,7 +1,7 @@ import React from 'react'; import { useNavigate } from 'react-router-dom'; import OnboardingLayout from '../../components/shared/OnboardingLayout'; -import onboardImage from '../../assets/onboard1.png'; +import { images } from '../../assets'; const OnboardingWelcome: React.FC = () => { const navigate = useNavigate(); @@ -18,7 +18,7 @@ const OnboardingWelcome: React.FC = () => { return ( { + if (!url) return url; + + // Если URL уже содержит домен, оставляем его без изменений + if (url.includes('stickerserver.gymnasticstuff.uk')) { + return url; + } + + // Проверяем, содержит ли URL IP-адрес (простая проверка на наличие цифр и точек) + const ipRegex = /\d+\.\d+\.\d+\.\d+/; + if (ipRegex.test(url)) { + // Заменяем IP-адрес на домен + // Извлекаем путь из URL (все, что после IP-адреса и порта, если есть) + const pathMatch = url.match(/https?:\/\/\d+\.\d+\.\d+\.\d+(:\d+)?(\/.*)/); + if (pathMatch && pathMatch[2]) { + return `${API_BASE_URL}${pathMatch[2]}`; + } + } + + return url; +}; + // Маппинг стилей к тегам для определения, какой тег использовать для каждого стиля const styleToTagMap: Record = { 'chibi': 'image_generation', diff --git a/src/services/stickerService.ts b/src/services/stickerService.ts index fd41e3d..ecfc0d8 100644 --- a/src/services/stickerService.ts +++ b/src/services/stickerService.ts @@ -1,5 +1,6 @@ import { getUserIdString } from '../constants/user'; import { StickerPack, StickerSetResponse } from '../types/api'; +import { normalizeImageUrl } from './api'; /** * Сервис для работы со стикерпаками через Sticker API. @@ -43,7 +44,17 @@ export class StickerService { if (!response.ok) { throw new Error(`Ошибка при получении стикерпака: ${response.statusText}`); } - return await response.json(); + const packData = await response.json(); + + // Нормализуем URL для каждого стикера + if (packData.stickers && Array.isArray(packData.stickers)) { + packData.stickers = packData.stickers.map((sticker: { file_url: string; [key: string]: any }) => ({ + ...sticker, + file_url: normalizeImageUrl(sticker.file_url) + })); + } + + return packData; } catch (error) { console.error('Ошибка при получении стикерпака:', error); throw error;