### Import and Use SVAR React File Manager Component Source: https://github.com/svar-widgets/react-filemanager/blob/main/README.md Demonstrates how to import the FileManager component and its CSS, and then use it within a React application by providing initial file data. This is the basic setup for integrating the file manager into your project. ```jsx import { FileManager } from "@svar-ui/react-filemanager"; import "@svar-ui/react-filemanager/all.css"; const files = [ { id: "/Music", size: 4096, date: new Date(2023, 11, 1, 14, 45), type: "folder", }, { id: "/Info.txt", size: 1000, date: new Date(2023, 10, 30, 6, 13), type: "file", }, ]; const myComponent => (); ``` -------------------------------- ### Handle File Manager Events in React Source: https://context7.com/svar-widgets/react-filemanager/llms.txt This example shows how to subscribe to various events emitted by the React File Manager component. It covers handling file selection, renaming, deletion, copying, moving, creation, and uploads by logging the event data to the console. This allows for custom logic to be executed in response to user interactions. ```jsx import { Filemanager } from "@svar-ui/react-filemanager"; import "@svar-ui/react-filemanager/all.css"; const files = [ { id: "/Music", date: new Date(2023, 11, 1, 14, 45), type: "folder", }, { id: "/Info.txt", size: 1000, date: new Date(2023, 10, 30, 6, 13), type: "file", }, ]; const drive = { used: 15200000000, total: 50000000000, }; function App() { const handleSelectFile = (ev) => { console.log("File selected:", ev.id); }; const handleRenameFile = (ev) => { console.log("File renamed:", ev.id, "to", ev.name); }; const handleDeleteFiles = (ev) => { console.log("Files deleted:", ev.ids); }; const handleCopyFiles = (ev) => { console.log("Files copied:", ev.ids, "to", ev.target); }; const handleMoveFiles = (ev) => { console.log("Files moved:", ev.ids, "to", ev.target); }; const handleCreateFile = (ev) => { console.log("File created:", ev.id, "type:", ev.type); }; const handleUploadFiles = (ev) => { console.log("Files uploaded to:", ev.to, "files:", ev.files); }; return ( ); } export default App; ``` -------------------------------- ### Intercept Events with Advanced API in React File Manager Source: https://context7.com/svar-widgets/react-filemanager/llms.txt Shows how to use the advanced API of the React File Manager component to intercept and modify events. This example demonstrates preventing the deletion of critical files and enforcing naming conventions during rename operations. It utilizes `useRef`, `useCallback`, `api.intercept`, `api.on`, and `api.getState`. ```jsx import { useRef, useCallback } from "react"; import { Filemanager } from "@svar-ui/react-filemanager"; import "@svar-ui/react-filemanager/all.css"; const files = [ { id: "/Projects", date: new Date(2023, 11, 1, 14, 45), type: "folder", }, { id: "/Projects/critical.txt", size: 1000, date: new Date(2023, 10, 30, 6, 13), type: "file", }, ]; const drive = { used: 15200000000, total: 50000000000, }; function App() { const apiRef = useRef(null); const init = useCallback((api) => { apiRef.current = api; // Intercept delete operations to prevent deleting critical files api.intercept("delete-files", (ev) => { const hasCritical = ev.ids.some(id => id.includes("critical")); if (hasCritical) { alert("Cannot delete critical files!"); return false; // Cancel the operation } return true; // Allow operation to proceed }); // Intercept rename operations to enforce naming conventions api.intercept("rename-file", (ev) => { if (ev.name.includes(" ")) { alert("File names cannot contain spaces!"); return false; } return true; }); // Listen to path changes api.on("set-path", (ev) => { console.log("Navigation to:", ev.id); }); // Get current state const state = api.getState(); console.log("Current path:", state.panels[0].path); console.log("Selected files:", state.selected); }, []); return ( ); } export default App; ``` -------------------------------- ### Initialize React File Manager with Basic Data Source: https://context7.com/svar-widgets/react-filemanager/llms.txt Demonstrates the basic initialization of the SVAR React File Manager component. It requires an array of file objects and an optional drive object for storage information. The component will render with default settings. ```jsx import { Filemanager } from "@svar-ui/react-filemanager"; import "@svar-ui/react-filemanager/all.css"; const files = [ { id: "/Code", date: new Date(2023, 11, 2, 17, 25), type: "folder", }, { id: "/Music", date: new Date(2023, 11, 1, 14, 45), type: "folder", }, { id: "/Music/Animal_sounds.mp3", size: 1457296, date: new Date(2023, 11, 1, 14, 45), type: "file", }, { id: "/Info.txt", size: 1000, date: new Date(2023, 10, 30, 6, 13), type: "file", }, ]; const drive = { used: 15200000000, total: 50000000000, }; function App() { return ; } export default App; ``` -------------------------------- ### Apply Predefined Themes in React File Manager Source: https://context7.com/svar-widgets/react-filemanager/llms.txt Demonstrates how to apply different predefined themes (Material, Willow Light, Willow Dark) to the React File Manager component. It shows the import statements and the wrapper components used for theme application. Custom fonts can also be enabled. ```jsx import { Filemanager, Material, Willow, WillowDark } from "@svar-ui/react-filemanager"; import "@svar-ui/react-filemanager/all.css"; const files = [ { id: "/Documents", date: new Date(2023, 11, 1, 14, 45), type: "folder", }, ]; const drive = { used: 15200000000, total: 50000000000, }; // Material Theme function MaterialThemeApp() { return ( ); } // Willow Theme (Light) function WillowThemeApp() { return ( ); } // Willow Dark Theme function WillowDarkThemeApp() { return ( ); } export { MaterialThemeApp, WillowThemeApp, WillowDarkThemeApp }; ``` -------------------------------- ### Integrate React File Manager with REST API Backend Source: https://context7.com/svar-widgets/react-filemanager/llms.txt This snippet demonstrates how to initialize and configure the React File Manager to use a REST API data provider. It includes setting up the provider, defining URLs for previews and icons, and handling file operations like downloads and opening. Dependencies include React hooks and the '@svar-ui/filemanager-data-provider' package. ```jsx import { useState, useEffect, useRef, useCallback } from "react"; import { RestDataProvider } from "@svar-ui/filemanager-data-provider"; import { formatSize } from "@svar-ui/filemanager-store"; import { Filemanager } from "@svar-ui/react-filemanager"; import "@svar-ui/react-filemanager/all.css"; const server = "https://filemanager-backend.svar.dev"; function App() { const restProviderRef = useRef(null); if (!restProviderRef.current) { restProviderRef.current = new RestDataProvider(server); } const restProvider = restProviderRef.current; const fmApiRef = useRef(null); const previewURL = useCallback((file, width, height) => { const ext = file.ext; if (ext === "png" || ext === "jpg" || ext === "jpeg") { return ( server + `/preview?width=${width}&height=${height}&id=${encodeURIComponent(file.id)}` ); } return false; }, []); const iconsURL = useCallback((file, size) => { if (file.type !== "file") return server + `/icons/${size}/${file.type}.svg`; return server + `/icons/${size}/${file.ext}.svg`; }, []); const getLink = useCallback((id, download) => { return ( server + "/direct?id=" + encodeURIComponent(id) + (download ? "&download=true" : "") ); }, []); const requestInfo = useCallback((file) => { if (file.type == "folder" || file.ext == "jpg" || file.ext == "png") { return restProvider.loadInfo(file.id).then((data) => { if (file.type == "folder") data.Size = formatSize(data.Size); return data; }); } }, [restProvider]); const [data, setData] = useState([]); const [drive, setDrive] = useState({}); const init = useCallback((api) => { fmApiRef.current = api; // Connect REST provider to event bus api.setNext(restProvider); // Handle file downloads fmApiRef.current.on("download-file", ({ id }) => { window.open(getLink(id, true), "_self"); }); // Handle file opening fmApiRef.current.on("open-file", ({ id }) => { window.open(getLink(id), "_blank"); }); }, [restProvider, getLink]); useEffect(() => { // Listen to server file rename events restProvider.on("file-renamed", ({ id, newId }) => { const name = newId.slice(newId.lastIndexOf("/") + 1); fmApiRef.current.exec("rename-file", { id, name, skipProvider: true }); }); // Load initial data from server Promise.all([restProvider.loadFiles(), restProvider.loadInfo()]).then( ([files, info]) => { setData(files); setDrive(info); } ); }, [restProvider]); const loadData = useCallback((ev) => { const id = ev.id; restProvider.loadFiles(id).then((files) => { fmApiRef.current.exec("provide-data", { id, data: files, }); }); }, [restProvider]); return ( ); } export default App; ``` -------------------------------- ### Control React File Manager API: Serialize and Load Data Source: https://context7.com/svar-widgets/react-filemanager/llms.txt Illustrates programmatic control of the SVAR React File Manager using a ref to access its API. This snippet shows how to serialize files from a specific directory and then restore them, demonstrating dynamic data manipulation. ```jsx import { useState, useRef, useCallback } from "react"; import { Filemanager } from "@svar-ui/react-filemanager"; import { Button } from "@svar-ui/react-core"; import "@svar-ui/react-filemanager/all.css"; const files = [ { id: "/Code", date: new Date(2023, 11, 2, 17, 25), type: "folder", }, { id: "/Code/Button.js", size: 1177, date: new Date(2023, 11, 6, 17, 38), type: "file", }, { id: "/Code/Checkbox.ts", size: 1231, date: new Date(2023, 11, 6, 17, 38), type: "file", }, ]; const drive = { used: 15200000000, total: 50000000000, }; function App() { const api = useRef(null); const [serializedData, setSerializedData] = useState([]); const serialize = useCallback(() => { // Extract all files from /Code folder const result = api.current.serialize("/Code"); setSerializedData(result); // Clear the folder in UI api.current.exec("provide-data", { id: "/Code", data: [], }); }, []); const parse = useCallback(() => { // Restore files to /Code folder api.current.exec("provide-data", { id: "/Code", data: serializedData, }); }, [serializedData]); return (
); } export default App; ``` -------------------------------- ### Configure Dual-Panel View with Pre-selected Files in React Source: https://context7.com/svar-widgets/react-filemanager/llms.txt Sets up the SVAR React File Manager in dual-panel mode, enabling side-by-side file management. This configuration allows specifying initial paths for each panel and pre-selecting specific files within those panels. ```jsx import { Filemanager } from "@svar-ui/react-filemanager"; import "@svar-ui/react-filemanager/all.css"; const files = [ { id: "/Music", date: new Date(2023, 11, 1, 14, 45), type: "folder", }, { id: "/Music/Best_albums.xls", size: 4096, date: new Date(2023, 11, 15, 14, 45), type: "file", }, { id: "/Pictures", date: new Date(2023, 10, 30, 6, 13), type: "folder", }, ]; const drive = { used: 15200000000, total: 50000000000, }; const panels = [ { path: "/Music", selected: ["/Music/Best_albums.xls"], }, { path: "/", selected: ["/Music"], }, ]; function App() { return ( ); } export default App; ``` -------------------------------- ### Custom File Icons and Previews in React Source: https://context7.com/svar-widgets/react-filemanager/llms.txt This React component demonstrates how to customize file icons and previews for the SVAR React File Manager. It defines callback functions for `icons`, `previews`, and `extraInfo` props to handle specific file types and generate appropriate URLs or metadata. This allows for a tailored user experience with specialized file representations. ```jsx import { useCallback } from "react"; import { Filemanager } from "@svar-ui/react-filemanager"; import "@svar-ui/react-filemanager/all.css"; const files = [ { id: "/Images", date: new Date(2023, 11, 1, 14, 45), type: "folder", }, { id: "/Images/photo1.jpg", size: 510885, date: new Date(2023, 11, 1, 14, 45), type: "file", }, { id: "/Documents/report.pdf", size: 124506, date: new Date(2023, 11, 4, 4, 5), type: "file", }, ]; const drive = { used: 15200000000, total: 50000000000, }; function App() { const customIcons = useCallback((file, size) => { if (file.type === "folder") { return `https://mycdn.com/icons/${size}/folder-custom.svg`; } const ext = file.ext || "unknown"; return `https://mycdn.com/icons/${size}/${ext}.svg`; }, []); const customPreviews = useCallback((file, width, height) => { // Return null for non-previewable files if (file.type === "search" || file.type === "multiple" || file.type === "none") { return null; } // Generate preview URL for images if (file.ext === "jpg" || file.ext === "png" || file.ext === "jpeg") { return `https://mycdn.com/preview/${file.id}?w=${width}&h=${height}`; } // Generate preview for PDFs if (file.ext === "pdf") { return `https://mycdn.com/pdf-thumbnail/${file.id}?w=${width}&h=${height}`; } return null; }, []); const extraInfo = useCallback((file) => { // Return additional metadata for specific file types if (file.ext === "jpg" || file.ext === "png") { return { "Resolution": "1920x1080", "Camera": "Canon EOS 5D", "ISO": "400", }; } return null; }, []); return ( ); } export default App; ``` -------------------------------- ### Customize Context Menu in React File Manager Source: https://context7.com/svar-widgets/react-filemanager/llms.txt This snippet shows how to customize the context menu in the React File Manager component. It uses the `menuOptions` prop to define custom menu items, disable menus for certain files/folders, and add new actions with hotkeys. Dependencies include React hooks and the `@svar-ui/react-filemanager` library. ```jsx import { useRef, useCallback } from "react"; import { Filemanager, getMenuOptions } from "@svar-ui/react-filemanager"; import "@svar-ui/react-filemanager/all.css"; const files = [ { id: "/Code", date: new Date(2023, 11, 2, 17, 25), type: "folder", }, { id: "/Pictures", date: new Date(2023, 10, 30, 6, 13), type: "folder", }, { id: "/Info.txt", size: 1000, date: new Date(2023, 10, 30, 6, 13), type: "file", }, ]; const drive = { used: 15200000000, total: 50000000000, }; function App() { const fmApiRef = useRef(); const init = useCallback((api) => { fmApiRef.current = api; fmApiRef.current.on("download-file", ({ id }) => { window.alert(`No server data - no download. File ID: ${id}`); }); }, []); const menuOptions = useCallback((mode, item) => { switch (mode) { case "file": case "folder": // Disable menu for /Code folder if (item.id === "/Code") return false; // Show only rename option for /Pictures if (item.id === "/Pictures") return getMenuOptions().filter((o) => o.id === "rename"); // Add custom "Clone" action to default menu return [ ...getMenuOptions(mode), { comp: "separator", }, { icon: "wxi-cat", text: "Clone", id: "clone", hotkey: "Ctrl+Shift+V", handler: ({ context }) => { const { panels, activePanel } = fmApiRef.current.getState(); fmApiRef.current.exec("copy-files", { ids: [context.id], target: panels[activePanel].path, }); }, }, ]; default: return getMenuOptions(mode); } }, []); return ( ); } export default App; ``` -------------------------------- ### Enable Readonly Mode in React File Manager Source: https://context7.com/svar-widgets/react-filemanager/llms.txt Illustrates how to configure the React File Manager component to operate in read-only mode. This disables all editing operations while maintaining navigation and viewing capabilities. It requires importing the Filemanager component and its CSS. ```jsx import { Filemanager } from "@svar-ui/react-filemanager"; import "@svar-ui/react-filemanager/all.css"; const files = [ { id: "/Reports", date: new Date(2023, 11, 1, 14, 45), type: "folder", }, { id: "/Reports/Q4_2023.pdf", size: 2547896, date: new Date(2023, 11, 20, 9, 30), type: "file", }, ]; const drive = { used: 15200000000, total: 50000000000, }; function App() { return ( ); } export default App; ``` === COMPLETE CONTENT === This response contains all available snippets from this library. No additional content exists. Do not make further requests.