/** * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors * SPDX-License-Identifier: AGPL-3.0-or-later */ import { createRoot } from 'react-dom' import { type JSX } from 'react' import { type Meta } from './files' import { mdiDownloadBox } from '@mdi/js' import { Icon } from '@mdi/react' /** * renders the html button for file downloads * @param meta file data * @param onClick onClick callback * @return {JSX.Element} rendered Button JSX */ function renderDownloadButton(meta: Meta, onClick: () => void): JSX.Element { const iconUrl = window.OC.MimeType.getIconUrl(meta.type) return (
{meta.name}
) } /** * removes the download button from the sidebar * makes all default excalidraw settings visible again * @return {void} */ export function ResetDownloadButton() { const sideBar = document.getElementsByClassName('App-menu__left')[0] if (sideBar === undefined) { return } const panelColumn = sideBar.querySelector('.panelColumn') as HTMLElement if (panelColumn) { panelColumn.style.display = '' } const downloadButton = document.getElementsByClassName('nc-download')[0] if (downloadButton === undefined) { return } sideBar.removeChild(downloadButton) } /** * clears the excalidraw sidebar as soon as it appears * inserts a download button with the file name instead * @param meta file data * @param onClick onClick callback */ export function InsertDownloadButton(meta: Meta, onClick: () => void) { const callback = () => { const sideBar = document.getElementsByClassName('App-menu__left')[0] if (sideBar === undefined) { return } observer.disconnect() const newElement = document.createElement('div') newElement.classList.add('nc-download') const root = createRoot(newElement) root.render(renderDownloadButton(meta, onClick)) // hide all excalidraw settings const panelColumn = sideBar.querySelector('.panelColumn') as HTMLElement if (panelColumn) { panelColumn.style.display = 'none' } sideBar.appendChild(newElement) } const observer = new MutationObserver(callback) const sideBar = document.getElementsByClassName('App-menu__left')[0] if (sideBar !== undefined) { callback() } else { observer.observe(document.body, { childList: true, subtree: true }) } }