|
|
|
@ -24,6 +24,7 @@ import DropdownMenu from "./dropdownMenu/DropdownMenu";
|
|
|
|
|
import { isLibraryMenuOpenAtom } from "./LibraryMenu";
|
|
|
|
|
import { useUIAppState } from "../context/ui-appState";
|
|
|
|
|
import clsx from "clsx";
|
|
|
|
|
import { useLibraryCache } from "../hooks/useLibraryItemSvg";
|
|
|
|
|
|
|
|
|
|
const getSelectedItems = (
|
|
|
|
|
libraryItems: LibraryItems,
|
|
|
|
@ -55,7 +56,7 @@ export const LibraryDropdownMenuButton: React.FC<{
|
|
|
|
|
jotaiScope,
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
const renderRemoveLibAlert = useCallback(() => {
|
|
|
|
|
const renderRemoveLibAlert = () => {
|
|
|
|
|
const content = selectedItems.length
|
|
|
|
|
? t("alerts.removeItemsFromsLibrary", { count: selectedItems.length })
|
|
|
|
|
: t("alerts.resetLibrary");
|
|
|
|
@ -80,7 +81,7 @@ export const LibraryDropdownMenuButton: React.FC<{
|
|
|
|
|
<p>{content}</p>
|
|
|
|
|
</ConfirmDialog>
|
|
|
|
|
);
|
|
|
|
|
}, [selectedItems, onRemoveFromLibrary, resetLibrary]);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const [showRemoveLibAlert, setShowRemoveLibAlert] = useState(false);
|
|
|
|
|
|
|
|
|
@ -136,20 +137,20 @@ export const LibraryDropdownMenuButton: React.FC<{
|
|
|
|
|
);
|
|
|
|
|
}, [setPublishLibSuccess, publishLibSuccess]);
|
|
|
|
|
|
|
|
|
|
const onPublishLibSuccess = useCallback(
|
|
|
|
|
(data: { url: string; authorName: string }, libraryItems: LibraryItems) => {
|
|
|
|
|
setShowPublishLibraryDialog(false);
|
|
|
|
|
setPublishLibSuccess({ url: data.url, authorName: data.authorName });
|
|
|
|
|
const nextLibItems = libraryItems.slice();
|
|
|
|
|
nextLibItems.forEach((libItem) => {
|
|
|
|
|
if (selectedItems.includes(libItem.id)) {
|
|
|
|
|
libItem.status = "published";
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
library.setLibrary(nextLibItems);
|
|
|
|
|
},
|
|
|
|
|
[setShowPublishLibraryDialog, setPublishLibSuccess, selectedItems, library],
|
|
|
|
|
);
|
|
|
|
|
const onPublishLibSuccess = (
|
|
|
|
|
data: { url: string; authorName: string },
|
|
|
|
|
libraryItems: LibraryItems,
|
|
|
|
|
) => {
|
|
|
|
|
setShowPublishLibraryDialog(false);
|
|
|
|
|
setPublishLibSuccess({ url: data.url, authorName: data.authorName });
|
|
|
|
|
const nextLibItems = libraryItems.slice();
|
|
|
|
|
nextLibItems.forEach((libItem) => {
|
|
|
|
|
if (selectedItems.includes(libItem.id)) {
|
|
|
|
|
libItem.status = "published";
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
library.setLibrary(nextLibItems);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const onLibraryImport = async () => {
|
|
|
|
|
try {
|
|
|
|
@ -280,27 +281,29 @@ export const LibraryDropdownMenu = ({
|
|
|
|
|
className?: string;
|
|
|
|
|
}) => {
|
|
|
|
|
const { library } = useApp();
|
|
|
|
|
const { clearLibraryCache, deleteItemsFromLibraryCache } = useLibraryCache();
|
|
|
|
|
const appState = useUIAppState();
|
|
|
|
|
const setAppState = useExcalidrawSetAppState();
|
|
|
|
|
|
|
|
|
|
const [libraryItemsData] = useAtom(libraryItemsAtom, jotaiScope);
|
|
|
|
|
|
|
|
|
|
const removeFromLibrary = useCallback(
|
|
|
|
|
async (libraryItems: LibraryItems) => {
|
|
|
|
|
const nextItems = libraryItems.filter(
|
|
|
|
|
(item) => !selectedItems.includes(item.id),
|
|
|
|
|
);
|
|
|
|
|
library.setLibrary(nextItems).catch(() => {
|
|
|
|
|
setAppState({ errorMessage: t("alerts.errorRemovingFromLibrary") });
|
|
|
|
|
});
|
|
|
|
|
onSelectItems([]);
|
|
|
|
|
},
|
|
|
|
|
[library, setAppState, selectedItems, onSelectItems],
|
|
|
|
|
);
|
|
|
|
|
const removeFromLibrary = async (libraryItems: LibraryItems) => {
|
|
|
|
|
const nextItems = libraryItems.filter(
|
|
|
|
|
(item) => !selectedItems.includes(item.id),
|
|
|
|
|
);
|
|
|
|
|
library.setLibrary(nextItems).catch(() => {
|
|
|
|
|
setAppState({ errorMessage: t("alerts.errorRemovingFromLibrary") });
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
deleteItemsFromLibraryCache(selectedItems);
|
|
|
|
|
|
|
|
|
|
const resetLibrary = useCallback(() => {
|
|
|
|
|
onSelectItems([]);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const resetLibrary = () => {
|
|
|
|
|
library.resetLibrary();
|
|
|
|
|
}, [library]);
|
|
|
|
|
clearLibraryCache();
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
return (
|
|
|
|
|
<LibraryDropdownMenuButton
|
|
|
|
|