import { Box, Button, IconButton, Text, Tooltip, useMediaQuery, } from "@prismicio/editor-ui"; import { useRouter } from "next/router"; import { type FC } from "react"; import { useAutoSync } from "@/features/sync/AutoSyncProvider"; import { AutoSyncStatusIndicator } from "@/features/sync/components/AutoSyncStatusIndicator"; import { useUnSyncChanges } from "@/features/sync/useUnSyncChanges"; import { useAuthStatus } from "@/hooks/useAuthStatus"; import { useNetwork } from "@/hooks/useNetwork"; import { ChangesIcon } from "@/icons/ChangesIcon"; import { AuthStatus } from "@/modules/userContext/types"; export const ChangesItem: FC = () => { const router = useRouter(); const { autoSyncStatus } = useAutoSync(); const collapsed = useMediaQuery({ max: "medium" }); return ( {autoSyncStatus === "failed" || autoSyncStatus === "synced" || autoSyncStatus === "syncing" ? ( ) : collapsed ? ( {/* * TODO(DT-1942): This should be an IconButton with a link * component for accessibility */} } onClick={() => { void router.push("/changes"); }} variant="solid" /> ) : ( // TODO(DT-1942): This should be a Button with a link component for // accessibility )} ); }; type ChangesCountProps = { color: "grey" | "purple" }; export const ChangesCount: FC = ({ color }) => { const isOnline = useNetwork(); const authStatus = useAuthStatus(); const { unSyncedSlices, unSyncedCustomTypes } = useUnSyncChanges(); const numberOfChanges = unSyncedSlices.length + unSyncedCustomTypes.length; if ( !isOnline || authStatus !== AuthStatus.AUTHENTICATED || numberOfChanges === 0 ) { return null; } const formattedNumberOfChanges = numberOfChanges > 9 ? "+9" : numberOfChanges; return ( {formattedNumberOfChanges} ); };