PromucFlow_constructor/app/client/src/pages/setup/Welcome.tsx

123 lines
3.5 KiB
TypeScript
Raw Normal View History

import React, { memo, useState } from "react";
import styled from "styled-components";
import { ASSETS_CDN_URL } from "constants/ThirdPartyConstants";
import { useEffect } from "react";
import { playWelcomeAnimation } from "utils/helpers";
import {
createMessage,
WELCOME_BODY,
WELCOME_HEADER,
refactor: admin settings (#9906) * refactor admin settings feature * separated save-restart bar to separate component * created new CE dir to facilitate code split * created separate ee dir and exporting everything we have in ce file. * little mod * minor fix * splitting settings types config * using object literals for category types instead of enums * CE: support use of component for each category * minor style fix * authentication page UI changes implemented * github signup doc url added back * removed comments * routing updates * made subcategories listing in left pane optional * added muted saml to auth listing * added breadcrumbs and enabled button * created separate component for auth page and auth config * added callout and disconnect components * updated breadcrumbs component * minor updates to common components * updated warning callout and added icon * ce: test cases fixed * updated test file name * warning banner callout added on auth page * updated callout banner for form login * CE: Split config files * CE: moved the window declaration in EE file as its dependency will be updated in EE * CE: Splitting ApiConstants and SocialLogin constants * CE: split login page * CE: moved getSocialLoginButtonProps func to EE file as it's dependencies will be updated in EE * added key icon * CE: created a factory class to share social auths list * Minor style fix for social btns * Updated the third party auth styles * Small fixes to styling * ce: splitting forms constants * breadcrumbs implemented for all pages in admin settings * Settings breadcrumbs separated * splitted settings breadcrumbs between ce and ee * renamed default import * minor style fix * added login form config. * updated login/signup pages to use form login disabled config * removed common functionality outside * implemented breadcrumb component from scratch without using blueprint * removed unwanted code * Small style update * updated breadcrumb categories file name and breadcrumb icon * added cypress tests for admin settings auth page * added comments * update locator for upgrade button * added link for intercom on upgrade button * removed unnecessary file * minor style fix * style fix for auth option cards * split messages constant * fixed imports for message constants splitting. * added message constants * updated unit test cases * fixed messages import in cypress index * fixed messages import again, cypress fails to read re-exported objs. * added OIDC auth method on authentication page * updated import statements from ee to @appsmith * removed dead code * updated read more link UI * PR comments fixes * some UI fixes * used color and fonts from theme * fixed some imports * fixed some imports * removed warning imports * updated OIDC logo and auth method desc copies * css changes * css changes * css changes * updated cypress test for breadcrumb * moved callout component to ads as calloutv2 * UI changes for form fields * updated css for spacing between form fields * added sub-text on auth pages * added active class for breadcrumb item * added config for disable signup toggle and fixed UI issues of restart banner * fixed admin settings page bugs * assigned true as default state for signup * fixed messages import statements * updated code for PR comments related suggestions * reverted file path change in cypress support * updated cypress test * updated cypress test Co-authored-by: Ankita Kinger <ankita@appsmith.com>
2022-02-11 18:08:46 +00:00
} from "@appsmith/constants/messages";
import NonSuperUserForm, { SuperUserForm } from "./GetStarted";
import { getAssetUrl } from "@appsmith/utils/airgapHelpers";
const LandingPageWrapper = styled.div<{ hide: boolean }>`
width: ${(props) => props.theme.pageContentWidth}px;
height: 100vh;
display: flex;
justify-content: center;
align-items: center;
margin: 0 auto;
opacity: ${(props) => (props.hide ? 0 : 1)};
`;
const LandingPageContent = styled.div`
width: 100%;
display: flex;
align-items: center;
position: relative;
z-index: 100;
`;
const StyledTextBanner = styled.div`
min-width: ${(props) => props.theme.pageContentWidth * 0.55}px;
padding-left: 64px;
`;
const StyledBannerHeader = styled.h1`
font-family: "Paytone One", sans-serif;
font-size: 72px;
margin: 0px 0px;
`;
const StyledBannerBody = styled.p`
font-family: "Montserrat", sans-serif;
font-size: 24px;
margin: ${(props) => props.theme.spaces[7]}px 0px;
width: 400px;
`;
const StyledImageBanner = styled.div`
min-width: ${(props) => props.theme.pageContentWidth * 0.45}px;
`;
const getWelcomeImage = () => `${ASSETS_CDN_URL}/welcome-banner.svg`;
type LandingPageProps = {
onGetStarted?: (role?: string, useCase?: string) => void;
forSuperUser: boolean;
};
const WELCOME_PAGE_ANIMATION_CONTAINER = "welcome-page-animation-container";
const includeFonts = () => {
const preconnectGoogleapis = document.createElement("link");
preconnectGoogleapis.rel = "preconnect";
preconnectGoogleapis.href = "https://fonts.googleapis.com";
document.head.appendChild(preconnectGoogleapis);
const preconnectGstatic = document.createElement("link") as any;
preconnectGstatic.rel = "preconnect";
preconnectGstatic.href = "https://fonts.gstatic.com";
preconnectGstatic.crossorigin = "crossorigin";
document.head.appendChild(preconnectGstatic);
const fonts = document.createElement("link");
fonts.rel = "stylesheet";
fonts.href =
"https://fonts.googleapis.com/css2?family=Montserrat&family=Paytone+One&display=swap";
document.head.appendChild(fonts);
};
function Banner() {
return (
<>
<StyledBannerHeader>{createMessage(WELCOME_HEADER)}</StyledBannerHeader>
<StyledBannerBody>{createMessage(WELCOME_BODY)}</StyledBannerBody>
</>
);
}
export default memo(function LandingPage(props: LandingPageProps) {
const [fontsInjected, setFontsInjected] = useState(false);
useEffect(() => {
includeFonts();
playWelcomeAnimation(`#${WELCOME_PAGE_ANIMATION_CONTAINER}`);
//wait for the fonts to be loaded
setTimeout(() => {
setFontsInjected(true);
}, 100);
}, []);
return (
<LandingPageWrapper
data-testid={"welcome-page"}
hide={!fontsInjected}
id={WELCOME_PAGE_ANIMATION_CONTAINER}
>
<LandingPageContent>
<StyledTextBanner>
<Banner />
{props.forSuperUser ? (
<SuperUserForm onGetStarted={props.onGetStarted} />
) : (
<NonSuperUserForm onGetStarted={props.onGetStarted} />
)}
</StyledTextBanner>
<StyledImageBanner>
<img src={getAssetUrl(getWelcomeImage())} />
</StyledImageBanner>
</LandingPageContent>
</LandingPageWrapper>
);
});