feat(ApplicationHeadder): only render UserActions when the user is authenticated

This commit is contained in:
Aminejv 2021-12-01 18:39:52 +01:00
parent d080c5ad6f
commit 40af7cfcce

View File

@ -14,10 +14,9 @@ import { css } from "@emotion/react";
import { DarkSymbol } from "~/common/logo";
import { Link } from "~/components/core/Link";
import { ButtonPrimary, ButtonTertiary } from "~/components/system/components/Buttons";
import { Match, Switch } from "~/components/utility/Switch";
import { Show } from "~/components/utility/Show";
import { useMediaQuery } from "~/common/hooks";
import { AnimatePresence, motion } from "framer-motion";
import { motion } from "framer-motion";
import { useSearchStore } from "~/components/core/Search/store";
import { UploadOnboarding } from "~/components/core/Onboarding/Upload";
@ -127,8 +126,6 @@ export default function ApplicationHeader({ viewer, page, data, onAction, isMobi
}
};
const { isSearching } = useSearchStore();
const { mobile } = useMediaQuery();
const isSignedOut = !viewer;
@ -153,32 +150,23 @@ export default function ApplicationHeader({ viewer, page, data, onAction, isMobi
/>
</Show>
</div>
<div css={[STYLES_MIDDLE, Styles.HORIZONTAL_CONTAINER_CENTERED]}>
<div css={STYLES_MIDDLE}>
{/**TODO: update Search component */}
<Search.Input viewer={viewer} data={data} onAction={onAction} page={page} />
</div>
{isSignedOut ? (
<AuthActions onAction={onAction} />
) : (
<UploadOnboarding onAction={onAction} viewer={viewer} isMobile={isMobile}>
<Upload.Provider page={page} data={data} viewer={viewer}>
<Upload.Root data={data}>
<Upload.Root data={data} isMobile={isMobile}>
<div css={STYLES_RIGHT}>
<UserActions
uploadAction={
<Upload.Trigger
viewer={viewer}
aria-label="Upload"
css={STYLES_UPLOAD_BUTTON}
>
<SVG.Plus height="16px" />
</Upload.Trigger>
}
isSearching={isSearching}
isSignedOut={isSignedOut}
onAction={onAction}
/>
<UserActions viewer={viewer} />
</div>
</Upload.Root>
</Upload.Provider>
</UploadOnboarding>
)}
</div>
<Show when={mobile && state.popup === "profile"}>
<ApplicationUserControlsPopup
@ -198,10 +186,23 @@ export default function ApplicationHeader({ viewer, page, data, onAction, isMobi
);
}
const UserActions = ({ uploadAction, isSignedOut, isSearching, onAction }) => {
const authActions = React.useMemo(
() => (
<>
const AuthActions = ({ onAction }) => {
const { isSearching } = useSearchStore();
if (isSearching) {
return (
<motion.div initial={{ opacity: 0, y: -10 }} animate={{ opacity: 1, y: 0 }}>
<Search.Dismiss style={{ marginLeft: 4 }} />
</motion.div>
);
}
return (
<motion.div
initial={{ opacity: 0, y: 10 }}
animate={{ opacity: 1, y: 0 }}
exit={{ y: 10, opacity: 0 }}
>
<Link href="/_/auth?tab=signin" onAction={onAction} style={{ pointerEvents: "auto" }}>
<span css={Styles.MOBILE_HIDDEN}>
<ButtonTertiary
@ -223,33 +224,26 @@ const UserActions = ({ uploadAction, isSignedOut, isSearching, onAction }) => {
Sign up
</ButtonPrimary>
</Link>
</>
),
[onAction]
);
return (
<AnimatePresence>
<Switch fallback={uploadAction}>
<Match when={isSignedOut}>
<motion.div
initial={{ opacity: 0, y: 10 }}
animate={{ opacity: 1, y: 0 }}
exit={{ y: 10, opacity: 0 }}
>
{authActions}
</motion.div>
</Match>
<Match when={isSearching}>
<motion.div
initial={{ opacity: 0, y: -10 }}
animate={{ opacity: 1, y: 0 }}
exit={{ y: -10, opacity: 0 }}
>
<Search.Dismiss style={{ marginLeft: 4 }} />
</motion.div>
</Match>
</Switch>
</AnimatePresence>
);
};
const UserActions = ({ viewer }) => {
const { isSearching } = useSearchStore();
if (isSearching) {
return (
<motion.div initial={{ opacity: 0, y: -10 }} animate={{ opacity: 1, y: 0 }}>
<Search.Dismiss style={{ marginLeft: 4 }} />
</motion.div>
);
}
return (
<motion.div initial={{ opacity: 0, y: -10 }} animate={{ opacity: 1, y: 0 }}>
<Upload.Trigger viewer={viewer} aria-label="Upload" css={STYLES_UPLOAD_BUTTON}>
<SVG.Plus height="16px" />
</Upload.Trigger>
</motion.div>
);
};