Add Home v2 with universal search, contacts, and prices screens
Home v2 leads with a search-first layout: prominent AI-badged search field, booking CTA, quick tiles (contacts/prices/results/recovery), upcoming appointment, clinic stats, and articles. Search screen: real filtering across doctors, services, symptoms, articles, and upcoming appointments (date-aware matching). Empty state shows popular query chips and symptom list. Contacts: clinic phone card + two address cards with CSS-mocked building illustrations (windows, roof, sign, trees) and mini-map (streets, park, building footprints, pin), route/call/video buttons, transport tip. Prices: service search + category pills, grouped listing with price range summary, booking CTA, empty-state reset. Exposed as "Главная 2" in Tweaks screen selector alongside "Главная 1" (existing home variants remain under it). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
+7
-1
@@ -14,6 +14,7 @@ import {
|
||||
TelemedScreen, MedcardScreen, NotificationsScreen,
|
||||
} from './screens/screens-misc.jsx';
|
||||
import { ArticlesScreen, ArticleDetailScreen } from './screens/screens-articles.jsx';
|
||||
import { HomeV2Screen, SearchScreen, ContactsScreen, PricesScreen } from './screens/screens-v2.jsx';
|
||||
|
||||
function renderScreen(screenId, nav, ctx) {
|
||||
const parts = screenId.split(':');
|
||||
@@ -21,6 +22,7 @@ function renderScreen(screenId, nav, ctx) {
|
||||
const HOME = { cards: HomeCardsScreen, list: HomeListScreen, feed: HomeFeedScreen }[ctx.homeVariant] || HomeCardsScreen;
|
||||
switch (id) {
|
||||
case 'home': return <HOME nav={nav} ctx={ctx} />;
|
||||
case 'home-v2': return <HomeV2Screen nav={nav} ctx={ctx} />;
|
||||
case 'doctors': return <DoctorsTabScreen nav={nav} ctx={ctx} />;
|
||||
case 'doctor': return <DoctorDetailScreen nav={nav} doctorId={parts[1]} />;
|
||||
case 'booking-specs': return <BookingSpecsScreen nav={nav} />;
|
||||
@@ -43,6 +45,9 @@ function renderScreen(screenId, nav, ctx) {
|
||||
case 'notifications': return <NotificationsScreen nav={nav} />;
|
||||
case 'articles': return <ArticlesScreen nav={nav} />;
|
||||
case 'article': return <ArticleDetailScreen nav={nav} articleId={parts[1]} />;
|
||||
case 'search': return <SearchScreen nav={nav} />;
|
||||
case 'contacts': return <ContactsScreen nav={nav} />;
|
||||
case 'prices': return <PricesScreen nav={nav} />;
|
||||
default: return <div style={{padding: 40, textAlign: 'center'}}>Экран не найден: {screenId}</div>;
|
||||
}
|
||||
}
|
||||
@@ -62,7 +67,8 @@ export function PhoneApp({ initialScreen, ctx }) {
|
||||
}), []);
|
||||
|
||||
const current = stack[stack.length - 1];
|
||||
const tabId = TAB_IDS.includes(current.split(':')[0]) ? current.split(':')[0] : null;
|
||||
const rootId = current.split(':')[0];
|
||||
const tabId = rootId === 'home-v2' ? 'home' : (TAB_IDS.includes(rootId) ? rootId : null);
|
||||
const showTabBar = tabId !== null;
|
||||
|
||||
const modalScreens = ['qr', 'telemed', 'booking-success', 'audiotest'];
|
||||
|
||||
Reference in New Issue
Block a user