diff --git a/apps/web/src/components/layout/AppLayout/styles.ts b/apps/web/src/components/layout/AppLayout/styles.ts index ffa6553..30b95c1 100644 --- a/apps/web/src/components/layout/AppLayout/styles.ts +++ b/apps/web/src/components/layout/AppLayout/styles.ts @@ -1,5 +1,6 @@ import { type CSSProperties } from 'react'; export const contentWrapper: CSSProperties = { + paddingTop: 'calc(0.75rem + env(safe-area-inset-top, 0px))', paddingBottom: '5rem', }; diff --git a/apps/web/src/pages/customer/DiscoveryPage/DiscoveryPage.tsx b/apps/web/src/pages/customer/DiscoveryPage/DiscoveryPage.tsx index fb2719c..2932b04 100644 --- a/apps/web/src/pages/customer/DiscoveryPage/DiscoveryPage.tsx +++ b/apps/web/src/pages/customer/DiscoveryPage/DiscoveryPage.tsx @@ -3,6 +3,9 @@ import { DiscoveryHeader } from './components/DiscoveryHeader/DiscoveryHeader'; import * as styles from './styles'; import { SearchBar } from './components/SearchBar/SearchBar'; import { CategoryPills } from './components/CategoryPills/CategoryPills'; +import { SectionHeader } from './components/SectionHeader/SectionHeader'; +import { BusinessCard } from './components/BusinessCard/BusinessCard'; + export const DiscoveryPage = () => { const user = useAuthStore((state) => state.user); const token = useAuthStore((state) => state.token); @@ -14,8 +17,43 @@ export const DiscoveryPage = () => { - {/* PromoBanner — next */} - {/* SectionHeader + BusinessCards — next */} + +
+ + + +
); }; diff --git a/apps/web/src/pages/customer/DiscoveryPage/components/BusinessCard/BusinessCard.tsx b/apps/web/src/pages/customer/DiscoveryPage/components/BusinessCard/BusinessCard.tsx index fa1603c..ed79c2b 100644 --- a/apps/web/src/pages/customer/DiscoveryPage/components/BusinessCard/BusinessCard.tsx +++ b/apps/web/src/pages/customer/DiscoveryPage/components/BusinessCard/BusinessCard.tsx @@ -52,20 +52,29 @@ export const BusinessCard = ({
- -
- {name} {isOpen && ( - + {'פתוח עכשיו'} )}
+
+ + {`(${reviewCount})`} +
+
+ + {name} + +
- + {`${category} · ${location}`}
@@ -73,19 +82,14 @@ export const BusinessCard = ({ {distance}
-
-
- - - {`(${reviewCount})`} - -
- - - {'קבע תור'} - - -
+ + + {'קבע תור'} + +
); diff --git a/apps/web/src/pages/customer/DiscoveryPage/components/BusinessCard/styles.ts b/apps/web/src/pages/customer/DiscoveryPage/components/BusinessCard/styles.ts index cd85b42..d4e1ba0 100644 --- a/apps/web/src/pages/customer/DiscoveryPage/components/BusinessCard/styles.ts +++ b/apps/web/src/pages/customer/DiscoveryPage/components/BusinessCard/styles.ts @@ -5,13 +5,17 @@ export const getContainerStyle = (token: GlobalToken): CSSProperties => ({ borderRadius: '1rem', overflow: 'hidden', backgroundColor: token.colorBgContainer, - boxShadow: token.boxShadowTertiary, - width: '16rem', + boxShadow: token.boxShadowSecondary, + width: '13rem', + height: '14rem', + flexShrink: 0, + display: 'flex', + flexDirection: 'column', }); export const bannerSection: CSSProperties = { position: 'relative', - height: '6rem', + height: '5rem', }; export const bannerImage: CSSProperties = { @@ -30,15 +34,17 @@ export const getAvatarWrapper = (token: GlobalToken): CSSProperties => ({ export const infoArea: CSSProperties = { display: 'flex', - flexDirection: 'row', - padding: '1rem', - gap: '1rem', + flexDirection: 'column', + justifyContent: 'flex-end', + padding: '0 0.75rem 0.5rem', + gap: '0.25rem', + flex: 1, }; export const desc: CSSProperties = { display: 'flex', flexDirection: 'column', - gap: '0.2rem', + gap: '0.15rem', }; export const distanceDiv: CSSProperties = { @@ -46,7 +52,6 @@ export const distanceDiv: CSSProperties = { flexDirection: 'row', alignItems: 'center', gap: '0.25rem', - marginTop: '1rem', }; export const getLocationIconStyle = (token: GlobalToken): CSSProperties => ({ @@ -63,25 +68,50 @@ export const ratingDiv: CSSProperties = { gap: '0.5rem', }; -export const businessName: CSSProperties = { - margin: '1.5rem 1rem 0rem 1rem', +export const ratingRow: CSSProperties = { display: 'flex', flexDirection: 'row', - justifyContent: 'space-between', + alignItems: 'center', + justifyContent: 'flex-end', + gap: '0.25rem', + margin: '1.75rem 0.75rem 0 0.75rem', +}; + +export const businessName: CSSProperties = { + margin: '0.1rem 0.75rem 0 0.75rem', +}; + +export const openTagStyle: CSSProperties = { + position: 'absolute', + bottom: '0.4rem', + left: '0.5rem', +}; + +export const nameText: CSSProperties = { + overflow: 'hidden', + display: '-webkit-box', + WebkitLineClamp: 2, + WebkitBoxOrient: 'vertical', + flex: 1, +}; + +export const categoryText: CSSProperties = { + overflow: 'hidden', + whiteSpace: 'nowrap', + textOverflow: 'ellipsis', }; export const getBookColor = (token: GlobalToken): CSSProperties => ({ color: token.colorBgContainer, }); -export const bookAndRevDiv: CSSProperties = { - display: 'flex', - flexDirection: 'column', - gap: '1rem', -}; - export const getBookStyle = (token: GlobalToken): CSSProperties => { return { boxShadow: token.boxShadowSecondary, }; }; + +export const statusTagStyle: CSSProperties = { + padding: '0 0.35rem', + lineHeight: 1, +}; diff --git a/apps/web/src/pages/customer/DiscoveryPage/components/SectionHeader/SectionHeader.tsx b/apps/web/src/pages/customer/DiscoveryPage/components/SectionHeader/SectionHeader.tsx new file mode 100644 index 0000000..eb13707 --- /dev/null +++ b/apps/web/src/pages/customer/DiscoveryPage/components/SectionHeader/SectionHeader.tsx @@ -0,0 +1,28 @@ +import { theme } from 'antd'; +import { SolyTypography } from '@soly/ui'; +import * as styles from './styles'; + +interface SectionHeaderProps { + title: string; + onSeeAll?: () => void; +} + +export const SectionHeader = ({ title, onSeeAll }: SectionHeaderProps) => { + const { token } = theme.useToken(); + return ( +
+ {title} + {onSeeAll && ( + + )} +
+ ); +}; diff --git a/apps/web/src/pages/customer/DiscoveryPage/components/SectionHeader/styles.ts b/apps/web/src/pages/customer/DiscoveryPage/components/SectionHeader/styles.ts new file mode 100644 index 0000000..be97ee4 --- /dev/null +++ b/apps/web/src/pages/customer/DiscoveryPage/components/SectionHeader/styles.ts @@ -0,0 +1,18 @@ +import type { CSSProperties } from 'react'; +import type { GlobalToken } from 'antd'; + +export const containerStyle: CSSProperties = { + display: 'flex', + flexDirection: 'row', + alignItems: 'center', + justifyContent: 'space-between', + padding: '0 0.75rem', +}; + +export const getSeeAllStyle = (token: GlobalToken): CSSProperties => ({ + background: 'none', + border: 'none', + padding: 0, + cursor: 'pointer', + color: token.colorPrimary, +}); diff --git a/apps/web/src/pages/customer/DiscoveryPage/styles.ts b/apps/web/src/pages/customer/DiscoveryPage/styles.ts index 4b68b93..3da35ad 100644 --- a/apps/web/src/pages/customer/DiscoveryPage/styles.ts +++ b/apps/web/src/pages/customer/DiscoveryPage/styles.ts @@ -3,5 +3,5 @@ import type { CSSProperties } from 'react'; export const pageContainer: CSSProperties = { display: 'flex', flexDirection: 'column', - gap: '1rem', + gap: '0.5rem', };