47cbb5b6fb
* refactor device to editor interface and derive styles panel * allow host app to control form factor and ui mode * add editor interface event listener * put new props inside UIOptions * refactor: move related apis into one file * expose getFormFactor * privatize the setting of desktop mode and fix snapshots * refactor and fix test * remove unimplemented code * export getFormFactor() * replace `getFormFactor` with `getEditorInterface` * remove dead & useless * comment * fix ts --------- Co-authored-by: dwelle <5153846+dwelle@users.noreply.github.com>
49 lines
1.3 KiB
TypeScript
49 lines
1.3 KiB
TypeScript
import clsx from "clsx";
|
|
|
|
import { MQ_MIN_WIDTH_DESKTOP, type EditorInterface } from "@excalidraw/common";
|
|
|
|
import { t } from "../../i18n";
|
|
import { Button } from "../Button";
|
|
import { share } from "../icons";
|
|
import { useUIAppState } from "../../context/ui-appState";
|
|
|
|
import "./LiveCollaborationTrigger.scss";
|
|
|
|
const LiveCollaborationTrigger = ({
|
|
isCollaborating,
|
|
onSelect,
|
|
editorInterface,
|
|
...rest
|
|
}: {
|
|
isCollaborating: boolean;
|
|
onSelect: () => void;
|
|
editorInterface?: EditorInterface;
|
|
} & React.ButtonHTMLAttributes<HTMLButtonElement>) => {
|
|
const appState = useUIAppState();
|
|
|
|
const showIconOnly =
|
|
editorInterface?.formFactor !== "desktop" ||
|
|
appState.width < MQ_MIN_WIDTH_DESKTOP;
|
|
|
|
return (
|
|
<Button
|
|
{...rest}
|
|
className={clsx("collab-button", { active: isCollaborating })}
|
|
type="button"
|
|
onSelect={onSelect}
|
|
style={{ position: "relative", width: showIconOnly ? undefined : "auto" }}
|
|
title={t("labels.liveCollaboration")}
|
|
>
|
|
{showIconOnly ? share : t("labels.share")}
|
|
{appState.collaborators.size > 0 && (
|
|
<div className="CollabButton-collaborators">
|
|
{appState.collaborators.size}
|
|
</div>
|
|
)}
|
|
</Button>
|
|
);
|
|
};
|
|
|
|
export default LiveCollaborationTrigger;
|
|
LiveCollaborationTrigger.displayName = "LiveCollaborationTrigger";
|