From d6bdecbcf6e9b6103d406aedd455782596620f7d Mon Sep 17 00:00:00 2001 From: Florent Lagrede Date: Fri, 18 Oct 2024 10:14:49 +0200 Subject: [PATCH] feat: APP-305 update projects page color (#2504) --- tailwind.common.js | 4 + .../PrefinanceTag/PrefinanceTag.tsx | 2 +- .../src/components/buttons/OutlinedButton.tsx | 26 +-- .../ProjectCard/ProjectCard.CreditPrice.tsx | 12 +- .../cards/ProjectCard/ProjectCard.tsx | 5 +- .../src/components/cards/card.stories.tsx | 24 +++ .../gradient-badge/GradientBadge.stories.tsx | 8 +- .../gradient-badge/GradientBadge.tsx | 2 +- .../gradient-badge/GradientBadge.utils.ts | 3 +- .../src/components/icons/ArrowLeft.tsx | 30 ++- .../src/components/icons/ArrowRight.tsx | 30 ++- .../src/components/icons/ArrowSkipLeft.tsx | 27 ++- .../src/components/icons/ArrowSkipRight.tsx | 27 ++- .../components/icons/social/InstagramIcon.tsx | 15 +- .../components/icons/social/LinkedInIcon.tsx | 15 +- ...nation.styles.ts => Pagination.styles.tsx} | 27 ++- .../src/components/pagination/Pagination.tsx | 43 ++++- .../src/components/tabs/IconTabs.tsx | 43 +++-- web-components/src/theme/theme.types.ts | 1 + .../public/jpg/default-project2.jpg | Bin 0 -> 21449 bytes .../clients/terrasos/Terrasos.tailwind.css | 177 +++++++++--------- .../RegistryLayout.TerrasosFooter.tsx | 24 +++ .../RegistryLayout.constants.ts | 2 + .../RegistryLayout/RegistryLayout.tsx | 9 +- .../TerrasosFooter/Terrasos.types.ts | 5 + .../TerrasosFooter.constants.ts | 32 ++++ .../TerrasosFooter/TerrasosFooter.stories.tsx | 21 +++ .../TerrasosFooter/TerrasosFooter.tsx | 58 ++++++ .../organisms/TerrasosFooter/index.ts | 1 + web-marketplace/src/lib/env.ts | 4 + web-marketplace/src/lib/i18n/locales/en.po | 22 ++- web-marketplace/src/lib/i18n/locales/es.po | 22 ++- .../normalizeProjectsWithOrderData.ts | 7 +- .../AllProjects/AllProjects.SideFilter.tsx | 15 +- .../Projects/AllProjects/AllProjects.tsx | 21 ++- .../src/pages/Projects/Projects.tsx | 3 +- 36 files changed, 561 insertions(+), 206 deletions(-) rename web-components/src/components/pagination/{Pagination.styles.ts => Pagination.styles.tsx} (68%) create mode 100644 web-components/src/theme/theme.types.ts create mode 100644 web-marketplace/public/jpg/default-project2.jpg create mode 100644 web-marketplace/src/components/organisms/RegistryLayout/RegistryLayout.TerrasosFooter.tsx create mode 100644 web-marketplace/src/components/organisms/TerrasosFooter/Terrasos.types.ts create mode 100644 web-marketplace/src/components/organisms/TerrasosFooter/TerrasosFooter.constants.ts create mode 100644 web-marketplace/src/components/organisms/TerrasosFooter/TerrasosFooter.stories.tsx create mode 100644 web-marketplace/src/components/organisms/TerrasosFooter/TerrasosFooter.tsx create mode 100644 web-marketplace/src/components/organisms/TerrasosFooter/index.ts diff --git a/tailwind.common.js b/tailwind.common.js index 552e1bf5d4..f5a48d98eb 100644 --- a/tailwind.common.js +++ b/tailwind.common.js @@ -88,6 +88,10 @@ module.exports = { 'linear-gradient(179deg,#515D89 19.77%,#7DC9BF 114.05%,#FAEBD1 200.67%)', 'blue-green-gradient': 'linear-gradient(197deg, #7D9AA2 8.02%, #9AD3BE 43.42%, #D1E2C7 78.83%)', + 'prefinance-tag': + 'linear-gradient(179deg, rgba(var(--sc-tag-prefinance-600) / 1) 19.77%, rgba(var(--sc-tag-prefinance-500) / 1) 114.05%, rgba(var(--sc-tag-prefinance-400) / 1) 200.67%)', + 'credit-category': + 'linear-gradient(202deg, rgba(var(--sc-tag-credit-category-300) / 1) 14.67%, rgba(var(--sc-tag-credit-category-500) / 1) 97.14%)', }, boxShadow: { sm: '0px 4px 10px 0px rgba(0, 0, 0, 0.05)', diff --git a/web-components/src/components/PrefinanceTag/PrefinanceTag.tsx b/web-components/src/components/PrefinanceTag/PrefinanceTag.tsx index d35b3fe960..c033110a63 100644 --- a/web-components/src/components/PrefinanceTag/PrefinanceTag.tsx +++ b/web-components/src/components/PrefinanceTag/PrefinanceTag.tsx @@ -24,7 +24,7 @@ export const PrefinanceTag = ({ }) => (
diff --git a/web-components/src/components/buttons/OutlinedButton.tsx b/web-components/src/components/buttons/OutlinedButton.tsx index 08a81b2850..fed0b0f379 100644 --- a/web-components/src/components/buttons/OutlinedButton.tsx +++ b/web-components/src/components/buttons/OutlinedButton.tsx @@ -1,22 +1,26 @@ import { styled } from '@mui/material'; -import Button from '@mui/material/Button'; +import Button, { ButtonProps } from '@mui/material/Button'; -const OutlinedButton = styled(Button)(({ theme }) => ({ - color: theme.palette.secondary.main, - backgroundColor: theme.palette.primary.main, +const OutlinedButton = styled(Button)(() => ({ + color: 'rgba(var(--sc-button-text-icon-dark) / 1)', + backgroundColor: + 'rgba(var(--sc-button-surface-standard-secondary-default) / 1)', borderImageSlice: 1, - borderImageSource: 'linear-gradient(201.8deg, #4FB573, #B9E1C7)', + borderImageSource: + 'linear-gradient(201.8deg, rgba(var(--sc-gradient-lighter-gradient-500) / 1), rgba(var(--sc-gradient-lighter-gradient-300) / 1))', '&:hover': { - backgroundColor: theme.palette.secondary.light, - borderColor: theme.palette.secondary.light, + backgroundColor: + 'rgba(var(--sc-button-surface-standard-secondary-hover) / 1)', + color: 'rgba(var(--sc-button-text-icon-dark) / 1)', + borderColor: 'rgba(var(--sc-button-surface-standard-secondary-hover) / 1)', borderImageSource: 'none', }, '&:disabled': { - color: theme.palette.grey[100], - background: theme.palette.grey[50], + color: 'rgba(var(--sc-button-surface-standard-primary-disabled) / 1)', + background: + 'rgba(var(--sc-button-surface-standard-secondary-disabled) / 1)', borderImageSource: 'none', - borderColor: theme.palette.grey[100], + borderColor: 'rgba(var(--sc-button-outline-secondary-disabled) / 1)', }, })); - export default OutlinedButton as typeof Button; diff --git a/web-components/src/components/cards/ProjectCard/ProjectCard.CreditPrice.tsx b/web-components/src/components/cards/ProjectCard/ProjectCard.CreditPrice.tsx index 16383b0122..0551f935a8 100644 --- a/web-components/src/components/cards/ProjectCard/ProjectCard.CreditPrice.tsx +++ b/web-components/src/components/cards/ProjectCard/ProjectCard.CreditPrice.tsx @@ -120,14 +120,22 @@ export const CreditPrice = ({ }} > {isSoldOut && !isPrefinanceProject ? ( - + ) : ( <> {purchaseInfo?.sellInfo?.creditsAvailable ?? projectPrefinancing?.estimatedIssuance ?? '0'} {isSoldOut && ( - + )} )} diff --git a/web-components/src/components/cards/ProjectCard/ProjectCard.tsx b/web-components/src/components/cards/ProjectCard/ProjectCard.tsx index 50079aa88e..7b6354f6dd 100644 --- a/web-components/src/components/cards/ProjectCard/ProjectCard.tsx +++ b/web-components/src/components/cards/ProjectCard/ProjectCard.tsx @@ -66,6 +66,7 @@ export interface ProjectCardProps extends MediaCardProps { bodyTexts: ProjectCardBodyTextsMapping; purchaseDetailsTitles: ProjectCardTitlesMapping; buttons: ProjectCardButtonsMapping; + useProjectCardButton?: boolean; } export function ProjectCard({ @@ -103,6 +104,7 @@ export function ProjectCard({ bodyTexts, purchaseDetailsTitles, buttons, + useProjectCardButton = true, ...mediaCardProps }: ProjectCardProps): JSX.Element { const theme = useTheme(); @@ -325,7 +327,8 @@ export function ProjectCard({ {containedButton.text} ))} - {(onButtonClick || isPrefinanceProject || offChain) && + {(hasButton || isPrefinanceProject || offChain) && + useProjectCardButton && (isButtonDisabled && createPostTooltipText ? ( ( purchaseDetailsTitles={projectCardPurchaseDetailsTitleMapping} buttons={projectCardButtonMapping} /> + + ); diff --git a/web-components/src/components/gradient-badge/GradientBadge.stories.tsx b/web-components/src/components/gradient-badge/GradientBadge.stories.tsx index a18a0ae6dd..97d859a3ac 100644 --- a/web-components/src/components/gradient-badge/GradientBadge.stories.tsx +++ b/web-components/src/components/gradient-badge/GradientBadge.stories.tsx @@ -17,10 +17,4 @@ Default.args = { label: 'SOLD OUT', }; -Default.argTypes = { - variant: { - control: 'radio', - options: ['green'], - defaultValue: 'green', - }, -}; +Default.argTypes = {}; diff --git a/web-components/src/components/gradient-badge/GradientBadge.tsx b/web-components/src/components/gradient-badge/GradientBadge.tsx index 131a05db6d..0ec6d1d72e 100644 --- a/web-components/src/components/gradient-badge/GradientBadge.tsx +++ b/web-components/src/components/gradient-badge/GradientBadge.tsx @@ -33,7 +33,7 @@ const GradientBadge = ({ textTransform: 'uppercase', fontWeight: 800, fontFamily: headerFontFamily, - color: 'primary.main', + color: 'rgba(var(--sc-tag-prefinance-text-icon) / 1)', }, ...(Array.isArray(sx) ? sx : [sx]), ]} diff --git a/web-components/src/components/gradient-badge/GradientBadge.utils.ts b/web-components/src/components/gradient-badge/GradientBadge.utils.ts index c2328e6fee..aa5848d493 100644 --- a/web-components/src/components/gradient-badge/GradientBadge.utils.ts +++ b/web-components/src/components/gradient-badge/GradientBadge.utils.ts @@ -4,5 +4,6 @@ import { GradientBadgeVariant } from './GradientBadge.types'; export const GradientBadgeVariantMapping: { [key in GradientBadgeVariant]: string; } = { - green: 'linear-gradient(201.8deg, #4FB573 14.67%, #B9E1C7 97.14%)', + green: + 'linear-gradient(202deg, rgba(var(--sc-tag-credit-category-300) / 1) 14.67%, rgba(var(--sc-tag-credit-category-500) / 1) 97.14%)', }; diff --git a/web-components/src/components/icons/ArrowLeft.tsx b/web-components/src/components/icons/ArrowLeft.tsx index 8a8f533402..ffa6d40165 100644 --- a/web-components/src/components/icons/ArrowLeft.tsx +++ b/web-components/src/components/icons/ArrowLeft.tsx @@ -1,9 +1,12 @@ import SvgIcon, { SvgIconProps } from '@mui/material/SvgIcon'; -interface IconProps extends SvgIconProps {} +interface IconProps extends SvgIconProps { + isDisabled: boolean; +} export default function ArrowLeftIcon({ sx = [], + isDisabled, ...props }: IconProps): JSX.Element { return ( @@ -17,13 +20,36 @@ export default function ArrowLeftIcon({ ]} {...props} > - + + + + + + ); } diff --git a/web-components/src/components/icons/ArrowRight.tsx b/web-components/src/components/icons/ArrowRight.tsx index 178ec1d743..37bb372e46 100644 --- a/web-components/src/components/icons/ArrowRight.tsx +++ b/web-components/src/components/icons/ArrowRight.tsx @@ -1,9 +1,12 @@ import SvgIcon, { SvgIconProps } from '@mui/material/SvgIcon'; -interface IconProps extends SvgIconProps {} +interface IconProps extends SvgIconProps { + isDisabled: boolean; +} export default function ArrowRightIcon({ sx = [], + isDisabled, ...props }: IconProps): JSX.Element { return ( @@ -13,13 +16,36 @@ export default function ArrowRightIcon({ sx={[{ fill: 'none' }, ...(Array.isArray(sx) ? sx : [sx])]} {...props} > - + + + + + + ); } diff --git a/web-components/src/components/icons/ArrowSkipLeft.tsx b/web-components/src/components/icons/ArrowSkipLeft.tsx index f409c4d3a8..19ea7c1513 100644 --- a/web-components/src/components/icons/ArrowSkipLeft.tsx +++ b/web-components/src/components/icons/ArrowSkipLeft.tsx @@ -2,10 +2,12 @@ import SvgIcon, { SvgIconProps } from '@mui/material/SvgIcon'; interface IconProps extends SvgIconProps { disabled?: boolean; + useGradient?: boolean; } export default function ArrowSkipLeftIcon({ disabled, + useGradient = true, sx = [], ...props }: IconProps): JSX.Element { @@ -24,7 +26,7 @@ export default function ArrowSkipLeftIcon({ r={24} transform="matrix(-1 0 0 1 25.5 25)" fill="#fff" - stroke="url(#skipLeft)" + stroke={'url(#skipLeft)'} strokeWidth={2} /> - + + - diff --git a/web-components/src/components/icons/ArrowSkipRight.tsx b/web-components/src/components/icons/ArrowSkipRight.tsx index 4933102d3e..3529721735 100644 --- a/web-components/src/components/icons/ArrowSkipRight.tsx +++ b/web-components/src/components/icons/ArrowSkipRight.tsx @@ -2,10 +2,12 @@ import SvgIcon, { SvgIconProps } from '@mui/material/SvgIcon'; interface IconProps extends SvgIconProps { disabled?: boolean; + useGradient?: boolean; } export default function ArrowSkipRightIcon({ disabled, + useGradient = true, sx = [], ...props }: IconProps): JSX.Element { @@ -20,7 +22,7 @@ export default function ArrowSkipRightIcon({ r={24} transform="matrix(-1 0 0 1 25.5 25)" fill="#fff" - stroke="url(#skipRight)" + stroke={'url(#skipRight)'} strokeWidth={2} /> - + + - diff --git a/web-components/src/components/icons/social/InstagramIcon.tsx b/web-components/src/components/icons/social/InstagramIcon.tsx index 1eff018b3d..67e9d45460 100644 --- a/web-components/src/components/icons/social/InstagramIcon.tsx +++ b/web-components/src/components/icons/social/InstagramIcon.tsx @@ -1,28 +1,17 @@ -import React from 'react'; -import { Theme } from '@mui/material/styles'; import SvgIcon from '@mui/material/SvgIcon'; -import { makeStyles } from 'tss-react/mui'; +import { cn } from '../../../utils/styles/cn'; import withHoverColor, { Props } from '../withHoverColor'; -const useStyles = makeStyles()((theme: Theme) => ({ - root: { - width: theme.spacing(9.25), - height: theme.spacing(9.25), - }, -})); - function InstagramIcon({ className, color, onMouseEnter, onMouseLeave, }: Props): JSX.Element { - const { classes, cx } = useStyles(); - return ( ({ - root: { - width: theme.spacing(9.25), - height: theme.spacing(9.25), - }, -})); - function LinkedInIcon({ className, color, onMouseEnter, onMouseLeave, }: Props): JSX.Element { - const { classes, cx } = useStyles(); - return ( ({ root: { @@ -15,8 +17,16 @@ export const usePaginationStyles = makeStyles()(theme => ({ }, })); +const PaginationItemWrapper = ({ + ...props +}: PaginationItemProps & { + disableRipple: boolean; +}) => { + return ; +}; + export const StyledPaginationItem = withStyles( - PaginationItem, + PaginationItemWrapper, (theme: Theme, { disabled }) => ({ icon: { fontSize: pxToRem(40), @@ -44,7 +54,7 @@ export const StyledPaginationItem = withStyles( bottom: 0, width: '11px', height: '4px', - backgroundColor: theme.palette.secondary.main, + backgroundColor: 'rgba(var(--sc-tabs-tab-underline) / 1)', }, }, }), @@ -58,8 +68,11 @@ type GetArrowSkipStyleType = { export const getArrowSkipStyle = ({ theme, disabled, -}: GetArrowSkipStyleType): SxProps => - ({ +}: GetArrowSkipStyleType): SxProps => { + return { fontSize: pxToRem(50), - color: disabled ? theme.palette.grey[100] : theme.palette.secondary.main, - } as SxProps); + color: disabled + ? theme.palette.grey[100] + : 'rgba(var(--sc-button-text-icon-dark) / 1)', + } as SxProps; +}; diff --git a/web-components/src/components/pagination/Pagination.tsx b/web-components/src/components/pagination/Pagination.tsx index 8b67265778..60a7345555 100644 --- a/web-components/src/components/pagination/Pagination.tsx +++ b/web-components/src/components/pagination/Pagination.tsx @@ -6,6 +6,8 @@ import { } from '@mui/material'; import { Theme } from '../../theme/muiTheme'; +import { ColorScheme } from '../../theme/theme.types'; +import { cn } from '../../utils/styles/cn'; import ArrowLeftIcon from '../icons/ArrowLeft'; import ArrowRightIcon from '../icons/ArrowRight'; import ArrowSkipLeftIcon from '../icons/ArrowSkipLeft'; @@ -18,9 +20,15 @@ import { export interface Props extends PaginationProps { sx?: SxProps; + colorScheme: ColorScheme; } -const Pagination = ({ size, sx = [], ...props }: Props): JSX.Element => { +const Pagination = ({ + size, + sx = [], + colorScheme, + ...props +}: Props): JSX.Element => { const theme = useTheme(); const isSmall = size === 'small'; const { classes } = usePaginationStyles(); @@ -36,8 +44,12 @@ const Pagination = ({ size, sx = [], ...props }: Props): JSX.Element => { slots={{ first: () => ( ), last: () => ( @@ -47,10 +59,33 @@ const Pagination = ({ size, sx = [], ...props }: Props): JSX.Element => { theme, })} disabled={item.disabled} + useGradient={colorScheme === 'regen'} + /> + ), + previous: props => ( + + ), + next: props => ( + ), - previous: ArrowLeftIcon, - next: ArrowRightIcon, }} disableRipple {...item} diff --git a/web-components/src/components/tabs/IconTabs.tsx b/web-components/src/components/tabs/IconTabs.tsx index e63b73835e..c7fc21461a 100644 --- a/web-components/src/components/tabs/IconTabs.tsx +++ b/web-components/src/components/tabs/IconTabs.tsx @@ -38,29 +38,32 @@ interface IconTabsProps { const StyledTabs = styled(Tabs, { shouldForwardProp: prop => prop !== 'hideIndicator' && prop !== 'mobileFullWidth', -})( - ({ mobileFullWidth, theme, hideIndicator }) => ({ - '& .MuiTabs-flexContainer': { - display: 'block', +})< + TabsProps & { + mobileFullWidth: boolean; + hideIndicator: boolean; + } +>(({ mobileFullWidth, theme, hideIndicator }) => ({ + '& .MuiTabs-flexContainer': { + display: 'block', + }, + '& .MuiTabs-scroller': { + [theme.breakpoints.up('md')]: { + marginLeft: mobileFullWidth ? theme.spacing(-3) : 0, }, - '& .MuiTabs-scroller': { - [theme.breakpoints.up('md')]: { - marginLeft: mobileFullWidth ? theme.spacing(-3) : 0, - }, - [theme.breakpoints.down('md')]: { - paddingLeft: mobileFullWidth ? theme.spacing(7) : 0, - }, - [theme.breakpoints.down('sm')]: { - paddingLeft: mobileFullWidth ? theme.spacing(1) : 0, - }, + [theme.breakpoints.down('md')]: { + paddingLeft: mobileFullWidth ? theme.spacing(7) : 0, }, - '& .MuiTabs-indicator': { - display: hideIndicator && 'none', - backgroundColor: theme.palette.secondary.main, - height: '3px', + [theme.breakpoints.down('sm')]: { + paddingLeft: mobileFullWidth ? theme.spacing(1) : 0, }, - }), -); + }, + '& .MuiTabs-indicator': { + display: hideIndicator && 'none', + backgroundColor: 'rgba(var(--sc-tabs-tab-underline) / 1)', + height: '3px', + }, +})); const IconTabs: React.FC> = ({ activeTab = 0, diff --git a/web-components/src/theme/theme.types.ts b/web-components/src/theme/theme.types.ts new file mode 100644 index 0000000000..5526c1f3f5 --- /dev/null +++ b/web-components/src/theme/theme.types.ts @@ -0,0 +1 @@ +export type ColorScheme = 'regen' | 'terrasos'; diff --git a/web-marketplace/public/jpg/default-project2.jpg b/web-marketplace/public/jpg/default-project2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..21a2bc107cf6df40a02e3766d5220a617d1efd16 GIT binary patch literal 21449 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 pa9XD2gOuU0n7QeYktK4$eZ|9a^=e*h_SK12Wj literal 0 HcmV?d00001 diff --git a/web-marketplace/src/clients/terrasos/Terrasos.tailwind.css b/web-marketplace/src/clients/terrasos/Terrasos.tailwind.css index 765dd5cc2b..eb8979699e 100644 --- a/web-marketplace/src/clients/terrasos/Terrasos.tailwind.css +++ b/web-marketplace/src/clients/terrasos/Terrasos.tailwind.css @@ -77,8 +77,8 @@ --bc-neutral-200: 239 239 239; --bc-neutral-100: 250 250 250; --bc-neutral-0: 255 255 255; - - /* alias.terrasos */ + + /* alias.terrasos */ --ac-error-500: var(--bc-red-500); --ac-error-400: var(--bc-red-400); --ac-success-500: var(--bc-green-500); @@ -141,7 +141,7 @@ --sc-button-surface-standard-secondary-disabled: var(--ac-neutral-100); --sc-button-surface-standard-secondary-default: var(--ac-neutral-0); --sc-button-surface-standard-primary-disabled: var(--ac-neutral-300); - --sc-button-surface-standard-secondary-hover: var(--ac-neutral-500); + --sc-button-surface-standard-secondary-hover: var(--ac-neutral-300); --sc-button-text-icon-prefinance: var(--ac-neutral-700); --sc-button-text-icon-disabled: var(--ac-neutral-300); --sc-button-text-icon-dark: var(--ac-neutral-700); @@ -231,93 +231,92 @@ --purple-200: 128 142 171; --purple-100: 86 104 143; - /* mapped terrasos dark */ --sc-tag-filter-inner-shadow: 255 255 255; - --sc-tag-filter-outer-shadow: 255 255 255; - --sc-checkbox-or-radio-selector-background-selected: var(--ac-neutral-600); - --sc-checkbox-or-radio-selector-stroke: var(--ac-neutral-500); - --sc-checkbox-or-radio-selector-background-default: var(--ac-neutral-700); - --sc-table-stroke: var(--ac-neutral-500); - --sc-table-surface-light: var(--ac-neutral-700); - --sc-table-surface-dark: var(--ac-neutral-600); - --sc-input-triangle-icon-disabled: var(--ac-neutral-300); - --sc-input-triangle-icon-default: var(--ac-primary-500); - --sc-input-background-disabled: var(--ac-neutral-500); - --sc-input-background-default: var(--ac-neutral-700); - --sc-tooltip-fill: var(--ac-neutral-700); - --sc-tooltip-outline: var(--ac-neutral-100); - --sc-tag-credit-category-text-icon: var(--ac-neutral-700); - --sc-tag-credit-category-500: var(--ac-primary-500); - --sc-tag-credit-category-300: var(--ac-primary-500); - --sc-tag-filter-stroke-selected: var(--ac-neutral-0); - --sc-tag-filter-stroke-unselected: var(--ac-neutral-400); - --sc-tag-filter-background-selected: var(--ac-neutral-500); - --sc-tag-filter-background-unselected: var(--ac-neutral-600); - --sc-tag-prefinance-text-icon: var(--ac-neutral-700); - --sc-tag-prefinance-600: var(--ac-primary-500); - --sc-tag-prefinance-500: var(--ac-primary-500); - --sc-tag-prefinance-400: var(--ac-primary-500); - --sc-tag-impact-text-icon: var(--ac-neutral-700); - --sc-tag-impact-background: var(--ac-primary-500); - --sc-tabs-tab-underline: var(--ac-primary-500); - --sc-button-outline-secondary-disabled: var(--ac-neutral-300); - --sc-button-surface-prefinance-600: var(--ac-neutral-700); - --sc-button-surface-prefinance-500: var(--ac-neutral-700); - --sc-button-surface-prefinance-400: var(--ac-neutral-700); - --sc-button-surface-standard-secondary-disabled: var(--ac-neutral-600); - --sc-button-surface-standard-secondary-default: var(--ac-neutral-700); - --sc-button-surface-standard-primary-disabled: var(--ac-neutral-500); - --sc-button-surface-standard-secondary-hover: var(--ac-neutral-200); - --sc-button-text-icon-prefinance: var(--ac-neutral-700); - --sc-button-text-icon-disabled: var(--ac-neutral-500); - --sc-button-text-icon-dark: var(--ac-neutral-0); - --sc-button-text-icon-light: var(--ac-neutral-700); - --sc-gradient-heavy-gradient-600: var(--ac-neutral-0); - --sc-gradient-heavy-gradient-500: var(--ac-neutral-0); - --sc-gradient-heavy-gradient-400: var(--ac-neutral-0); - --sc-gradient-lighter-gradient-500: var(--ac-neutral-0); - --sc-gradient-lighter-gradient-300: var(--ac-neutral-0); - --sc-icon-credibility-background: var(--ac-neutral-700); - --sc-icon-credibility-10-blue-green-gradient-600: var(--ac-primary-500); - --sc-icon-credibility-10-blue-green-gradient-500: var(--ac-primary-500); - --sc-icon-credibility-10-blue-green-gradient-400: var(--ac-primary-500); - --sc-icon-credibility-25-blue-green-gradient-600: var(--ac-primary-500); - --sc-icon-credibility-25-blue-green-gradient-500: var(--ac-primary-500); - --sc-icon-credibility-25-blue-green-gradient-400: var(--ac-primary-500); - --sc-icon-credibility-100-blue-green-gradient-600: var(--ac-neutral-0); - --sc-icon-credibility-100-blue-green-gradient-500: var(--ac-neutral-0); - --sc-icon-credibility-100-blue-green-gradient-400: var(--ac-neutral-0); - --sc-icon-sdg-background: var(--ac-neutral-700); - --sc-icon-sdg-stroke-shadow: var(--ac-neutral-500); - --sc-icon-sdg-header: var(--ac-neutral-100); - --sc-icon-sdg-number: var(--ac-neutral-0); - --sc-icon-sdg-600: var(--ac-neutral-500); - --sc-icon-sdg-500: var(--ac-neutral-500); - --sc-icon-sdg-400: var(--ac-neutral-500); - --sc-icon-ecosystem-600: var(--ac-primary-400); - --sc-icon-ecosystem-500: var(--ac-primary-400); - --sc-icon-ecosystem-400: var(--ac-primary-400); - --sc-icon-standard-shade: var(--ac-primary-500); - --sc-icon-standard-disabled: var(--ac-neutral-200); - --sc-icon-standard-background: var(--ac-neutral-500); - --sc-icon-standard-success: var(--ac-success-400); - --sc-icon-standard-error: var(--ac-error-400); - --sc-icon-standard-light: var(--ac-primary-300); - --sc-icon-standard-dark: var(--ac-primary-300); - --sc-card-credibility-diagonal-background: var(--ac-neutral-600); - --sc-card-standard-header-background: var(--ac-neutral-600); - --sc-card-standard-stroke: var(--ac-neutral-500); - --sc-card-standard-background: var(--ac-neutral-700); - --sc-surface-page-background-light: var(--ac-neutral-600); - --sc-surface-stroke: var(--ac-neutral-500); - --sc-surface-page-background-default: var(--ac-neutral-700); - --sc-text-over-image: var(--ac-neutral-0); - --sc-text-error: var(--ac-error-400); - --sc-text-disabled: var(--ac-neutral-300); - --sc-text-sub-header: var(--ac-neutral-300); - --sc-text-link: var(--ac-primary-500); - --sc-text-header: var(--ac-neutral-0); - --sc-text-paragraph: var(--ac-neutral-200); + --sc-tag-filter-outer-shadow: 255 255 255; + --sc-checkbox-or-radio-selector-background-selected: var(--ac-neutral-600); + --sc-checkbox-or-radio-selector-stroke: var(--ac-neutral-500); + --sc-checkbox-or-radio-selector-background-default: var(--ac-neutral-700); + --sc-table-stroke: var(--ac-neutral-500); + --sc-table-surface-light: var(--ac-neutral-700); + --sc-table-surface-dark: var(--ac-neutral-600); + --sc-input-triangle-icon-disabled: var(--ac-neutral-300); + --sc-input-triangle-icon-default: var(--ac-primary-500); + --sc-input-background-disabled: var(--ac-neutral-500); + --sc-input-background-default: var(--ac-neutral-700); + --sc-tooltip-fill: var(--ac-neutral-700); + --sc-tooltip-outline: var(--ac-neutral-100); + --sc-tag-credit-category-text-icon: var(--ac-neutral-700); + --sc-tag-credit-category-500: var(--ac-primary-500); + --sc-tag-credit-category-300: var(--ac-primary-500); + --sc-tag-filter-stroke-selected: var(--ac-neutral-0); + --sc-tag-filter-stroke-unselected: var(--ac-neutral-400); + --sc-tag-filter-background-selected: var(--ac-neutral-500); + --sc-tag-filter-background-unselected: var(--ac-neutral-600); + --sc-tag-prefinance-text-icon: var(--ac-neutral-700); + --sc-tag-prefinance-600: var(--ac-primary-500); + --sc-tag-prefinance-500: var(--ac-primary-500); + --sc-tag-prefinance-400: var(--ac-primary-500); + --sc-tag-impact-text-icon: var(--ac-neutral-700); + --sc-tag-impact-background: var(--ac-primary-500); + --sc-tabs-tab-underline: var(--ac-primary-500); + --sc-button-outline-secondary-disabled: var(--ac-neutral-300); + --sc-button-surface-prefinance-600: var(--ac-neutral-700); + --sc-button-surface-prefinance-500: var(--ac-neutral-700); + --sc-button-surface-prefinance-400: var(--ac-neutral-700); + --sc-button-surface-standard-secondary-disabled: var(--ac-neutral-600); + --sc-button-surface-standard-secondary-default: var(--ac-neutral-700); + --sc-button-surface-standard-primary-disabled: var(--ac-neutral-500); + --sc-button-surface-standard-secondary-hover: var(--ac-neutral-200); + --sc-button-text-icon-prefinance: var(--ac-neutral-700); + --sc-button-text-icon-disabled: var(--ac-neutral-500); + --sc-button-text-icon-dark: var(--ac-neutral-0); + --sc-button-text-icon-light: var(--ac-neutral-700); + --sc-gradient-heavy-gradient-600: var(--ac-neutral-0); + --sc-gradient-heavy-gradient-500: var(--ac-neutral-0); + --sc-gradient-heavy-gradient-400: var(--ac-neutral-0); + --sc-gradient-lighter-gradient-500: var(--ac-neutral-0); + --sc-gradient-lighter-gradient-300: var(--ac-neutral-0); + --sc-icon-credibility-background: var(--ac-neutral-700); + --sc-icon-credibility-10-blue-green-gradient-600: var(--ac-primary-500); + --sc-icon-credibility-10-blue-green-gradient-500: var(--ac-primary-500); + --sc-icon-credibility-10-blue-green-gradient-400: var(--ac-primary-500); + --sc-icon-credibility-25-blue-green-gradient-600: var(--ac-primary-500); + --sc-icon-credibility-25-blue-green-gradient-500: var(--ac-primary-500); + --sc-icon-credibility-25-blue-green-gradient-400: var(--ac-primary-500); + --sc-icon-credibility-100-blue-green-gradient-600: var(--ac-neutral-0); + --sc-icon-credibility-100-blue-green-gradient-500: var(--ac-neutral-0); + --sc-icon-credibility-100-blue-green-gradient-400: var(--ac-neutral-0); + --sc-icon-sdg-background: var(--ac-neutral-700); + --sc-icon-sdg-stroke-shadow: var(--ac-neutral-500); + --sc-icon-sdg-header: var(--ac-neutral-100); + --sc-icon-sdg-number: var(--ac-neutral-0); + --sc-icon-sdg-600: var(--ac-neutral-500); + --sc-icon-sdg-500: var(--ac-neutral-500); + --sc-icon-sdg-400: var(--ac-neutral-500); + --sc-icon-ecosystem-600: var(--ac-primary-400); + --sc-icon-ecosystem-500: var(--ac-primary-400); + --sc-icon-ecosystem-400: var(--ac-primary-400); + --sc-icon-standard-shade: var(--ac-primary-500); + --sc-icon-standard-disabled: var(--ac-neutral-200); + --sc-icon-standard-background: var(--ac-neutral-500); + --sc-icon-standard-success: var(--ac-success-400); + --sc-icon-standard-error: var(--ac-error-400); + --sc-icon-standard-light: var(--ac-primary-300); + --sc-icon-standard-dark: var(--ac-primary-300); + --sc-card-credibility-diagonal-background: var(--ac-neutral-600); + --sc-card-standard-header-background: var(--ac-neutral-600); + --sc-card-standard-stroke: var(--ac-neutral-500); + --sc-card-standard-background: var(--ac-neutral-700); + --sc-surface-page-background-light: var(--ac-neutral-600); + --sc-surface-stroke: var(--ac-neutral-500); + --sc-surface-page-background-default: var(--ac-neutral-700); + --sc-text-over-image: var(--ac-neutral-0); + --sc-text-error: var(--ac-error-400); + --sc-text-disabled: var(--ac-neutral-300); + --sc-text-sub-header: var(--ac-neutral-300); + --sc-text-link: var(--ac-primary-500); + --sc-text-header: var(--ac-neutral-0); + --sc-text-paragraph: var(--ac-neutral-200); } } diff --git a/web-marketplace/src/components/organisms/RegistryLayout/RegistryLayout.TerrasosFooter.tsx b/web-marketplace/src/components/organisms/RegistryLayout/RegistryLayout.TerrasosFooter.tsx new file mode 100644 index 0000000000..a61dd161a7 --- /dev/null +++ b/web-marketplace/src/components/organisms/RegistryLayout/RegistryLayout.TerrasosFooter.tsx @@ -0,0 +1,24 @@ +import React from 'react'; +import { useLingui } from '@lingui/react'; + +import TerrasosFooter from '../TerrasosFooter'; +import { terrasosFooterSocialItems } from '../TerrasosFooter/TerrasosFooter.constants'; +import { + TERRAOS_COPYRIGHT, + TERRAOS_POWERED_BY, +} from './RegistryLayout.constants'; + +const RegistryLayoutTerrasosFooter: React.FC> = + () => { + const { _ } = useLingui(); + + return ( + + ); + }; + +export { RegistryLayoutTerrasosFooter }; diff --git a/web-marketplace/src/components/organisms/RegistryLayout/RegistryLayout.constants.ts b/web-marketplace/src/components/organisms/RegistryLayout/RegistryLayout.constants.ts index b52a5c68ee..9792cf453d 100644 --- a/web-marketplace/src/components/organisms/RegistryLayout/RegistryLayout.constants.ts +++ b/web-marketplace/src/components/organisms/RegistryLayout/RegistryLayout.constants.ts @@ -23,3 +23,5 @@ export const KEPLR_WALLET_CONNECT_SUBTITLE = msg`Blockchain-based actions such a export const KEPLR_WALLET_CONNECT_LEARN_HOW_TEXT = msg`Learn how to `; export const SWITCH_WALLET_WARNING_MODAL_TITLE = msg`Please select the following wallet address in Keplr in order to proceed`; export const SWITCH_WALLET_WARNING_MODAL_MESSAGE = msg`The email address you are using to log in is associated with the above wallet address, so it must be the currently selected account in Keplr in order to continue.`; +export const TERRAOS_POWERED_BY = msg`Powered by`; +export const TERRAOS_COPYRIGHT = msg`Copyright © 2024 Terrasos | All rights reserved`; diff --git a/web-marketplace/src/components/organisms/RegistryLayout/RegistryLayout.tsx b/web-marketplace/src/components/organisms/RegistryLayout/RegistryLayout.tsx index 44bfb8a21f..600da9df64 100644 --- a/web-marketplace/src/components/organisms/RegistryLayout/RegistryLayout.tsx +++ b/web-marketplace/src/components/organisms/RegistryLayout/RegistryLayout.tsx @@ -1,6 +1,8 @@ import React from 'react'; import { Outlet } from 'react-router-dom'; +import { IS_TERRASOS } from 'lib/env'; + import { PageViewTracking } from 'components/molecules/PageViewTracking'; import { ScrollToTop } from '../../atoms'; @@ -15,6 +17,7 @@ import { RegistryLayoutHeader } from './RegistryLayout.Header'; import { RegistryLayoutProcessingModal } from './RegistryLayout.ProcessingModal'; import { RetryFailedFunctions } from './RegistryLayout.RetryFailedFunctions'; import { RegistryLayoutSwitchWalletModal } from './RegistryLayout.SwitchWalletModal'; +import { RegistryLayoutTerrasosFooter } from './RegistryLayout.TerrasosFooter'; import { RegistryLayoutTxErrorModal } from './RegistryLayout.TxErrorModal'; import { RegistryLayoutTxSuccessfulModal } from './RegistryLayout.TxSuccessfulModal'; @@ -23,7 +26,11 @@ const RegistryLayout: React.FC = () => { <> - + {IS_TERRASOS ? ( + + ) : ( + + )} diff --git a/web-marketplace/src/components/organisms/TerrasosFooter/Terrasos.types.ts b/web-marketplace/src/components/organisms/TerrasosFooter/Terrasos.types.ts new file mode 100644 index 0000000000..4457022013 --- /dev/null +++ b/web-marketplace/src/components/organisms/TerrasosFooter/Terrasos.types.ts @@ -0,0 +1,5 @@ +import { SocialItem } from 'web-components/src/components/share-section/ShareSection.types'; + +export type TerrasosSocialItem = SocialItem & { + className?: string; +}; diff --git a/web-marketplace/src/components/organisms/TerrasosFooter/TerrasosFooter.constants.ts b/web-marketplace/src/components/organisms/TerrasosFooter/TerrasosFooter.constants.ts new file mode 100644 index 0000000000..2e4118377c --- /dev/null +++ b/web-marketplace/src/components/organisms/TerrasosFooter/TerrasosFooter.constants.ts @@ -0,0 +1,32 @@ +/* eslint-disable lingui/no-unlocalized-strings */ +import InstagramIcon from 'web-components/src/components/icons/social/InstagramIcon'; +import LinkedInIcon from 'web-components/src/components/icons/social/LinkedInIcon'; +import TwitterIcon from 'web-components/src/components/icons/social/TwitterIcon'; +import YoutubeIcon from 'web-components/src/components/icons/social/YoutubeIcon'; + +import { TerrasosSocialItem } from './Terrasos.types'; + +export const terrasosFooterSocialItems: TerrasosSocialItem[] = [ + { + name: 'Twitter', + href: 'https://x.com/TerrasosCo', + Icon: TwitterIcon, + }, + { + name: 'LinkedIn', + href: 'https://www.linkedin.com/company/terrasos/', + Icon: LinkedInIcon, + className: 'p-[3px]', + }, + { + name: 'Instagram', + href: 'https://www.instagram.com/terrasos_co/', + Icon: InstagramIcon, + className: 'p-[3px]', + }, + { + name: 'YouTube', + href: 'https://www.youtube.com/channel/UCXMGrR3xfTDL2Z1CyMPURJg', + Icon: YoutubeIcon, + }, +]; diff --git a/web-marketplace/src/components/organisms/TerrasosFooter/TerrasosFooter.stories.tsx b/web-marketplace/src/components/organisms/TerrasosFooter/TerrasosFooter.stories.tsx new file mode 100644 index 0000000000..f7c846b932 --- /dev/null +++ b/web-marketplace/src/components/organisms/TerrasosFooter/TerrasosFooter.stories.tsx @@ -0,0 +1,21 @@ +import { Meta, StoryObj } from '@storybook/react'; + +import { TerrasosFooter } from './TerrasosFooter'; +import { terrasosFooterSocialItems } from './TerrasosFooter.constants'; + +export default { + title: 'Marketplace/Atoms/TerrasosFooter', + component: TerrasosFooter, +} as Meta; + +type Story = StoryObj; + +export const Basic: Story = { + render: args => , +}; + +Basic.args = { + poweredBy: 'Powered by', + copyright: 'Copyright © 2024 Terrasos | All rights reserved', + socialItems: terrasosFooterSocialItems, +}; diff --git a/web-marketplace/src/components/organisms/TerrasosFooter/TerrasosFooter.tsx b/web-marketplace/src/components/organisms/TerrasosFooter/TerrasosFooter.tsx new file mode 100644 index 0000000000..287fccb3be --- /dev/null +++ b/web-marketplace/src/components/organisms/TerrasosFooter/TerrasosFooter.tsx @@ -0,0 +1,58 @@ +import RegenIcon from 'web-components/src/components/icons/RegenIcon'; +import { cn } from 'web-components/src/utils/styles/cn'; + +import { Link } from 'components/atoms'; + +import { TerrasosSocialItem } from './Terrasos.types'; + +export interface Props { + poweredBy: string; + copyright: string; + socialItems: TerrasosSocialItem[]; + className?: string; +} + +export const TerrasosFooter = ({ + poweredBy, + copyright, + socialItems, + className, +}: Props): JSX.Element => { + return ( +
+
+ +
+ + {poweredBy} + + +
+ + + {copyright} + +
+ {socialItems.map(item => ( + + + + ))} +
+
+
+ ); +}; diff --git a/web-marketplace/src/components/organisms/TerrasosFooter/index.ts b/web-marketplace/src/components/organisms/TerrasosFooter/index.ts new file mode 100644 index 0000000000..83005bcff9 --- /dev/null +++ b/web-marketplace/src/components/organisms/TerrasosFooter/index.ts @@ -0,0 +1 @@ +export { TerrasosFooter as default } from './TerrasosFooter'; diff --git a/web-marketplace/src/lib/env.ts b/web-marketplace/src/lib/env.ts index a80ff588e3..4031774bbd 100644 --- a/web-marketplace/src/lib/env.ts +++ b/web-marketplace/src/lib/env.ts @@ -1,5 +1,7 @@ import { MARKETPLACE_CLIENT_TYPE } from 'clients/Clients.types'; +import { ColorScheme } from 'web-components/src/theme/theme.types'; + export const IS_DEV = import.meta.env.DEV; export const apiServerUrl = import.meta.env.VITE_API_URI; export const SKIPPED_CLASS_ID = import.meta.env.VITE_SKIPPED_CLASS_ID; @@ -16,3 +18,5 @@ export const DEFAULT_COMMUNITY_PROJECTS_FILTER = export const MARKETPLACE_CLIENT = (import.meta.env.VITE_MARKETPLACE_CLIENT ?? 'regen') as MARKETPLACE_CLIENT_TYPE; export const IS_TERRASOS = MARKETPLACE_CLIENT === 'terrasos'; +export const IS_REGEN = MARKETPLACE_CLIENT === 'regen'; +export const COLOR_SCHEME: ColorScheme = IS_TERRASOS ? 'terrasos' : 'regen'; diff --git a/web-marketplace/src/lib/i18n/locales/en.po b/web-marketplace/src/lib/i18n/locales/en.po index 025fd179b7..60f9b7ec27 100644 --- a/web-marketplace/src/lib/i18n/locales/en.po +++ b/web-marketplace/src/lib/i18n/locales/en.po @@ -1,6 +1,6 @@ msgid "" msgstr "" -"POT-Creation-Date: 2024-10-14 10:17+0200\n" +"POT-Creation-Date: 2024-10-16 09:16+0200\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -350,7 +350,7 @@ msgid "all profiles" msgstr "" #: src/components/organisms/RegistryLayout/RegistryLayout.config.tsx:41 -#: src/pages/Projects/Projects.tsx:73 +#: src/pages/Projects/Projects.tsx:74 msgid "All projects" msgstr "" @@ -901,7 +901,7 @@ msgstr "" msgid "Class ID: unique identifier of the credit class on Regen Ledger." msgstr "" -#: src/pages/Projects/AllProjects/AllProjects.SideFilter.tsx:165 +#: src/pages/Projects/AllProjects/AllProjects.SideFilter.tsx:180 msgid "Clear all" msgstr "" @@ -1009,6 +1009,10 @@ msgstr "" msgid "Copy link to project page" msgstr "" +#: src/components/organisms/RegistryLayout/RegistryLayout.constants.ts:27 +msgid "Copyright © 2024 Terrasos | All rights reserved" +msgstr "" + #: src/components/organisms/BuyCreditsModal/BuyCreditsModal.tsx:546 #: src/lib/constants/shared.constants.tsx:58 #: src/lib/constants/shared.constants.tsx:157 @@ -2556,12 +2560,16 @@ msgstr "" msgid "Postal Code" msgstr "" +#: src/components/organisms/RegistryLayout/RegistryLayout.constants.ts:26 +msgid "Powered by" +msgstr "" + #: src/lib/constants/shared.constants.tsx:176 msgid "prefinance" msgstr "" #: src/components/organisms/RegistryLayout/RegistryLayout.config.tsx:49 -#: src/pages/Projects/Projects.tsx:83 +#: src/pages/Projects/Projects.tsx:84 msgid "Prefinance projects" msgstr "" @@ -2855,7 +2863,7 @@ msgstr "" msgid "Projects" msgstr "" -#: src/pages/Projects/Projects.tsx:126 +#: src/pages/Projects/Projects.tsx:127 msgid "projects tabs" msgstr "" @@ -3197,7 +3205,7 @@ msgstr "" msgid "Select a wallet" msgstr "" -#: src/pages/Projects/AllProjects/AllProjects.SideFilter.tsx:143 +#: src/pages/Projects/AllProjects/AllProjects.SideFilter.tsx:158 msgid "Select all" msgstr "" @@ -3373,7 +3381,7 @@ msgstr "" msgid "Sorry, your transaction was not successful." msgstr "" -#: src/pages/Projects/AllProjects/AllProjects.tsx:207 +#: src/pages/Projects/AllProjects/AllProjects.tsx:211 msgid "Sort by:" msgstr "" diff --git a/web-marketplace/src/lib/i18n/locales/es.po b/web-marketplace/src/lib/i18n/locales/es.po index be778bf139..d7e5db5820 100644 --- a/web-marketplace/src/lib/i18n/locales/es.po +++ b/web-marketplace/src/lib/i18n/locales/es.po @@ -1,6 +1,6 @@ msgid "" msgstr "" -"POT-Creation-Date: 2024-10-14 10:17+0200\n" +"POT-Creation-Date: 2024-10-16 09:16+0200\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -350,7 +350,7 @@ msgid "all profiles" msgstr "" #: src/components/organisms/RegistryLayout/RegistryLayout.config.tsx:41 -#: src/pages/Projects/Projects.tsx:73 +#: src/pages/Projects/Projects.tsx:74 msgid "All projects" msgstr "" @@ -901,7 +901,7 @@ msgstr "" msgid "Class ID: unique identifier of the credit class on Regen Ledger." msgstr "" -#: src/pages/Projects/AllProjects/AllProjects.SideFilter.tsx:165 +#: src/pages/Projects/AllProjects/AllProjects.SideFilter.tsx:180 msgid "Clear all" msgstr "" @@ -1009,6 +1009,10 @@ msgstr "" msgid "Copy link to project page" msgstr "" +#: src/components/organisms/RegistryLayout/RegistryLayout.constants.ts:27 +msgid "Copyright © 2024 Terrasos | All rights reserved" +msgstr "" + #: src/components/organisms/BuyCreditsModal/BuyCreditsModal.tsx:546 #: src/lib/constants/shared.constants.tsx:58 #: src/lib/constants/shared.constants.tsx:157 @@ -2556,12 +2560,16 @@ msgstr "" msgid "Postal Code" msgstr "" +#: src/components/organisms/RegistryLayout/RegistryLayout.constants.ts:26 +msgid "Powered by" +msgstr "" + #: src/lib/constants/shared.constants.tsx:176 msgid "prefinance" msgstr "" #: src/components/organisms/RegistryLayout/RegistryLayout.config.tsx:49 -#: src/pages/Projects/Projects.tsx:83 +#: src/pages/Projects/Projects.tsx:84 msgid "Prefinance projects" msgstr "" @@ -2855,7 +2863,7 @@ msgstr "" msgid "Projects" msgstr "" -#: src/pages/Projects/Projects.tsx:126 +#: src/pages/Projects/Projects.tsx:127 msgid "projects tabs" msgstr "" @@ -3197,7 +3205,7 @@ msgstr "" msgid "Select a wallet" msgstr "" -#: src/pages/Projects/AllProjects/AllProjects.SideFilter.tsx:143 +#: src/pages/Projects/AllProjects/AllProjects.SideFilter.tsx:158 msgid "Select all" msgstr "" @@ -3373,7 +3381,7 @@ msgstr "" msgid "Sorry, your transaction was not successful." msgstr "" -#: src/pages/Projects/AllProjects/AllProjects.tsx:207 +#: src/pages/Projects/AllProjects/AllProjects.tsx:211 msgid "Sort by:" msgstr "" diff --git a/web-marketplace/src/lib/normalizers/projects/normalizeProjectsWithOrderData.ts b/web-marketplace/src/lib/normalizers/projects/normalizeProjectsWithOrderData.ts index 3d3c72c72f..d1674e5476 100644 --- a/web-marketplace/src/lib/normalizers/projects/normalizeProjectsWithOrderData.ts +++ b/web-marketplace/src/lib/normalizers/projects/normalizeProjectsWithOrderData.ts @@ -1,6 +1,7 @@ import { ProjectInfo } from '@regen-network/api/lib/generated/regen/ecocredit/v1/query'; import { AllCreditClassQuery } from 'generated/sanity-graphql'; +import { IS_TERRASOS } from 'lib/env'; import { ProjectWithOrderData } from 'pages/Projects/AllProjects/AllProjects.types'; import { @@ -38,10 +39,14 @@ export const normalizeProjectsWithOrderData = ({ creditClassIdOrUrl: project.classId ?? '', }); + const defaultProjectImage = IS_TERRASOS + ? '/jpg/default-project2.jpg' + : '/jpg/default-project.jpg'; + return { id: project.id, name: project.id, - imgSrc: '/jpg/default-project.jpg', + imgSrc: defaultProjectImage, place: project.jurisdiction, area: 0, areaUnit: '', diff --git a/web-marketplace/src/pages/Projects/AllProjects/AllProjects.SideFilter.tsx b/web-marketplace/src/pages/Projects/AllProjects/AllProjects.SideFilter.tsx index 2ede1b475b..cac851e948 100644 --- a/web-marketplace/src/pages/Projects/AllProjects/AllProjects.SideFilter.tsx +++ b/web-marketplace/src/pages/Projects/AllProjects/AllProjects.SideFilter.tsx @@ -24,6 +24,7 @@ import { useCommunityProjectsAtom, } from 'lib/atoms/projects.atoms'; import { SEE_LESS, SEE_MORE } from 'lib/constants/shared.constants'; +import { COLOR_SCHEME, IS_TERRASOS } from 'lib/env'; import { useTracker } from 'lib/tracker/useTracker'; import { CommunityFilter } from './AllProjects.CommunityFilter'; @@ -80,9 +81,19 @@ export const SideFilter = ({ size="small" onClick={() => setIsOpen(true)} startIcon={ - + } - sx={[{ mr: 4 }, ...sxToArray(sx)]} + sx={[ + { + mr: 4, + }, + ...sxToArray(sx), + ]} > {_(SIDE_FILTERS_BUTTON)} diff --git a/web-marketplace/src/pages/Projects/AllProjects/AllProjects.tsx b/web-marketplace/src/pages/Projects/AllProjects/AllProjects.tsx index 5d43986140..19963e88df 100644 --- a/web-marketplace/src/pages/Projects/AllProjects/AllProjects.tsx +++ b/web-marketplace/src/pages/Projects/AllProjects/AllProjects.tsx @@ -30,7 +30,12 @@ import { getProjectCardButtonMapping, getProjectCardPurchaseDetailsTitleMapping, } from 'lib/constants/shared.constants'; -import { CREDIT_CLASS_FILTERS_TO_DESELECT, IS_TERRASOS } from 'lib/env'; +import { + COLOR_SCHEME, + CREDIT_CLASS_FILTERS_TO_DESELECT, + IS_REGEN, + IS_TERRASOS, +} from 'lib/env'; import { getAllSanityCreditClassesQuery } from 'lib/queries/react-query/sanity/getAllCreditClassesQuery/getAllCreditClassesQuery'; import { useTracker } from 'lib/tracker/useTracker'; @@ -233,10 +238,14 @@ export const AllProjects: React.FC> = () => { place={project?.place} area={project?.area} areaUnit={project?.areaUnit} - onButtonClick={() => { - setSelectedProject(project); - setIsBuyFlowStarted(true); - }} + onButtonClick={ + IS_TERRASOS + ? undefined + : () => { + setSelectedProject(project); + setIsBuyFlowStarted(true); + } + } purchaseInfo={project.purchaseInfo || {}} onClick={() => navigate(`/project/${project.id}`)} imageStorageBaseUrl={IMAGE_STORAGE_BASE_URL} @@ -253,6 +262,7 @@ export const AllProjects: React.FC> = () => { bodyTexts={bodyTexts} purchaseDetailsTitles={purchaseDetailsTitles} buttons={buttons} + useProjectCardButton={IS_REGEN} /> ); @@ -292,6 +302,7 @@ export const AllProjects: React.FC> = () => { page={Number(routePage)} onChange={(event, value) => navigate(`/projects/${value}`)} size={isMobile ? 'small' : 'large'} + colorScheme={COLOR_SCHEME} /> {config.buySellOrderFlow && ( diff --git a/web-marketplace/src/pages/Projects/Projects.tsx b/web-marketplace/src/pages/Projects/Projects.tsx index a20a6f9f35..bbbd5e5dfe 100644 --- a/web-marketplace/src/pages/Projects/Projects.tsx +++ b/web-marketplace/src/pages/Projects/Projects.tsx @@ -19,6 +19,7 @@ import { useCommunityProjectsAtom, } from 'lib/atoms/projects.atoms'; import { client as sanityClient } from 'lib/clients/sanity'; +import { IS_TERRASOS } from 'lib/env'; import { getAllHomePageQuery } from 'lib/queries/react-query/sanity/getAllHomePageQuery/getAllHomePageQuery'; import { Link } from 'components/atoms'; @@ -154,7 +155,7 @@ const Projects = (): JSX.Element => { />
- {gettingStartedResourcesSection && ( + {gettingStartedResourcesSection && !IS_TERRASOS && (