From 83d51300c28c0854be3cdb1f507468c7fade2eac Mon Sep 17 00:00:00 2001 From: Petar Todorovic Date: Tue, 9 Jun 2026 18:28:54 +0200 Subject: [PATCH 01/11] refactor(widget): render page ctas inline --- packages/widget/src/Widget.tsx | 3 - packages/widget/src/domain/types/yields.ts | 4 +- .../containers/animation-layout.tsx | 7 +- .../navigation/containers/animation-page.tsx | 11 +- .../activity/activity-details.page.tsx | 1 + .../common/components/footer-outlet/index.tsx | 59 --------- .../overview/earn-page/index.tsx | 4 + .../src/pages-dashboard/overview/index.tsx | 3 - .../components/position-details-actions.tsx | 12 +- .../position-details/index.tsx | 3 - .../pages/complete/hooks/use-complete.hook.ts | 25 ++-- .../src/pages/complete/pages/common.page.tsx | 11 +- .../widget/src/pages/complete/state/index.tsx | 3 + .../pages/components/footer-outlet/context.ts | 41 ------ .../pages/components/footer-outlet/index.tsx | 123 ------------------ .../components/footer-outlet/styles.css.ts | 3 - .../widget/src/pages/components/page-cta.tsx | 34 +++++ .../src/pages/details/earn-page/earn.page.tsx | 5 +- .../earn-page/state/earn-page-context.tsx | 82 ++++++------ .../pages/details/earn-page/state/types.ts | 2 + .../review/hooks/use-action-review.hook.ts | 23 ++-- .../review/hooks/use-pending-review.hook.ts | 21 ++- .../review/hooks/use-stake-review.hook.ts | 33 +++-- .../review/hooks/use-unstake-review.hook.ts | 27 ++-- .../pages/review/pages/action-review.page.tsx | 5 +- .../review/pages/common-page/common.page.tsx | 7 +- .../review/pages/pending-review.page.tsx | 2 + .../pages/review/pages/stake-review.page.tsx | 2 + .../review/pages/unstake-review.page.tsx | 2 + .../src/pages/steps/hooks/use-steps.hook.ts | 29 ++--- .../src/pages/steps/pages/common.page.tsx | 5 +- packages/widget/src/providers/index.tsx | 38 +++--- 32 files changed, 224 insertions(+), 406 deletions(-) delete mode 100644 packages/widget/src/pages-dashboard/common/components/footer-outlet/index.tsx delete mode 100644 packages/widget/src/pages/components/footer-outlet/context.ts delete mode 100644 packages/widget/src/pages/components/footer-outlet/index.tsx delete mode 100644 packages/widget/src/pages/components/footer-outlet/styles.css.ts create mode 100644 packages/widget/src/pages/components/page-cta.tsx diff --git a/packages/widget/src/Widget.tsx b/packages/widget/src/Widget.tsx index 9cacb450..00dfc49a 100644 --- a/packages/widget/src/Widget.tsx +++ b/packages/widget/src/Widget.tsx @@ -15,7 +15,6 @@ import { ActivityCompletePage } from "./pages/complete/pages/activity-complete.p import { PendingCompletePage } from "./pages/complete/pages/pending-complete.page"; import { StakeCompletePage } from "./pages/complete/pages/stake-complete.page"; import { UnstakeCompletePage } from "./pages/complete/pages/unstake-complete.page"; -import { AnimatedFooterContent } from "./pages/components/footer-outlet"; import { Layout } from "./pages/components/layout"; import { headerContainer } from "./pages/components/layout/styles.css"; import { PoweredBy } from "./pages/components/powered-by"; @@ -174,8 +173,6 @@ export const Widget = () => { - - diff --git a/packages/widget/src/domain/types/yields.ts b/packages/widget/src/domain/types/yields.ts index 98590e46..3ca53124 100644 --- a/packages/widget/src/domain/types/yields.ts +++ b/packages/widget/src/domain/types/yields.ts @@ -71,9 +71,9 @@ export type ValidatorsConfig = Map< export type DashboardYieldCategory = "stake" | "defi" | "rwa"; export const dashboardYieldCategories = [ - "stake", - "defi", "rwa", + "defi", + "stake", ] as const satisfies ReadonlyArray; /** diff --git a/packages/widget/src/navigation/containers/animation-layout.tsx b/packages/widget/src/navigation/containers/animation-layout.tsx index ef27efcc..c5a24098 100644 --- a/packages/widget/src/navigation/containers/animation-layout.tsx +++ b/packages/widget/src/navigation/containers/animation-layout.tsx @@ -3,7 +3,6 @@ import { motion } from "motion/react"; import { Just } from "purify-ts"; import type { PropsWithChildren } from "react"; import { useHeaderHeight } from "../../components/molecules/header/use-sync-header-height"; -import { useFooterHeight } from "../../pages/components/footer-outlet/context"; import { useCurrentLayout } from "../../pages/components/layout/layout-context"; import { usePoweredByHeight } from "../../pages/components/powered-by"; import { useMountAnimation } from "../../providers/mount-animation"; @@ -17,7 +16,6 @@ export const [useDisableTransitionDuration, DisableTransitionDurationProvider] = export const AnimationLayout = ({ children }: PropsWithChildren) => { const currentLayout = useCurrentLayout(); const [headerHeight] = useHeaderHeight(); - const [footerHeight] = useFooterHeight(); const [poweredByHeight] = usePoweredByHeight(); const { state, dispatch } = useMountAnimation(); @@ -26,10 +24,7 @@ export const AnimationLayout = ({ children }: PropsWithChildren) => { const containerHeight = currentLayout.state?.height && headerHeight - ? currentLayout.state.height + - headerHeight + - footerHeight + - poweredByHeight + ? currentLayout.state.height + headerHeight + poweredByHeight : 0; const [disableTransitionDuration] = useDisableTransitionDuration(); diff --git a/packages/widget/src/navigation/containers/animation-page.tsx b/packages/widget/src/navigation/containers/animation-page.tsx index 191cffb0..98bf973a 100644 --- a/packages/widget/src/navigation/containers/animation-page.tsx +++ b/packages/widget/src/navigation/containers/animation-page.tsx @@ -1,12 +1,21 @@ import { motion } from "motion/react"; -import type { PropsWithChildren } from "react"; +import type { CSSProperties, PropsWithChildren } from "react"; import { useSettings } from "../../providers/settings"; export const AnimationPage = ({ children }: PropsWithChildren) => { const { dashboardVariant } = useSettings(); + const dashboardLayoutStyle: CSSProperties | undefined = dashboardVariant + ? { + display: "flex", + flex: 1, + flexDirection: "column", + minHeight: 0, + } + : undefined; return ( { return ( ) => { - return ( - - - - ); -}; - -export const FooterOutlet = () => { - const [val] = useFooterButton(); - - const [, setFooterHeight] = useFooterHeight(); - - const { containerRef } = useSyncFooterHeight(); - - useEffect(() => { - !val && setFooterHeight(0); - }, [setFooterHeight, val]); - - if (!val) return null; - - return ( - - - - ); -}; diff --git a/packages/widget/src/pages-dashboard/overview/earn-page/index.tsx b/packages/widget/src/pages-dashboard/overview/earn-page/index.tsx index 88ee0bf1..aa803d9d 100644 --- a/packages/widget/src/pages-dashboard/overview/earn-page/index.tsx +++ b/packages/widget/src/pages-dashboard/overview/earn-page/index.tsx @@ -1,6 +1,7 @@ import { Box } from "../../../components/atoms/box"; import { Divider } from "../../../components/atoms/divider"; import { KycGateCard } from "../../../components/molecules/kyc-gate-card"; +import { PageCtaButton } from "../../../pages/components/page-cta"; import { ExtraArgsSelection } from "../../../pages/details/earn-page/components/extra-args-selection"; import { Footer } from "../../../pages/details/earn-page/components/footer"; import { SelectTokenSection } from "../../../pages/details/earn-page/components/select-token-section"; @@ -31,6 +32,7 @@ const EarnKycGateSection = () => { export const EarnPageContent = () => { const { variant } = useSettings(); + const { cta } = useEarnPageContext(); return ( @@ -58,6 +60,8 @@ export const EarnPageContent = () => {