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}
);
};