import { createElement, lazy } from "react"; import { hasScope, type AdminSectionsUiCapability, type DashboardWidgetsUiCapability, type FilesConnectorsUiCapability, type FilesFileExplorerUiCapability, type PlatformWebModule, type QuickAccessToolsUiCapability } from "@govoplan/core-webui"; import { FolderTree } from "./features/files/components/FileManagerComponents"; import FileConnectorSettingsPanel from "./features/files/FileConnectorSettingsPanel"; import ManagedFileChooser from "./features/files/components/ManagedFileChooser"; import FileSpacesWidget from "./features/files/FileSpacesWidget"; import FileQuickAccess from "./features/files/FileQuickAccess"; import { listFileSpaces, listFiles, listFilesDelta, listFolders, resolveFilePatterns, shareFilesWithTarget } from "./api/files"; import { generatedTranslations } from "./i18n/generatedTranslations"; import "./styles/file-manager.css"; const FilesPage = lazy(() => import("./features/files/FilesPage")); const FileIntegrityPanel = lazy(() => import("./features/files/FileIntegrityPanel")); const fileRead = ["files:file:read"]; const translations = { en: generatedTranslations.en, de: generatedTranslations.de }; const fileDashboardWidgets: DashboardWidgetsUiCapability = { widgets: [ { id: "files.spaces", surfaceId: "files.widget.spaces", title: "File spaces", description: "Managed and connected file spaces available to you.", moduleId: "files", category: "Content", order: 35, defaultVisible: false, defaultSize: "medium", supportedSizes: ["medium", "wide"], anyOf: fileRead, refreshIntervalMs: 60_000, defaultConfiguration: { maxItems: 6, includeConnectors: true }, configurationFields: [ { id: "maxItems", label: "Maximum spaces", kind: "number", min: 1, max: 16, step: 1, required: true }, { id: "includeConnectors", label: "Include connected storage", kind: "boolean" } ], render: ({ settings, refreshKey, configuration }) => createElement(FileSpacesWidget, { settings, refreshKey, configuration }) } ] }; const fileQuickAccessTools: QuickAccessToolsUiCapability = { tools: [ { id: "files.recent", render: (context) => createElement(FileQuickAccess, context) } ] }; const fileConnectorAdminSections: AdminSectionsUiCapability = { sections: [ { id: "system-file-connectors", moduleId: "files", kind: "settings", surfaceId: "files.admin.system-connectors", label: "i18n:govoplan-files.file_connections.1e362326", group: "SYSTEM", order: 75, anyOf: ["system:settings:read", "files:file:admin"], render: ({ settings, auth }) => createElement(FileConnectorSettingsPanel, { settings, scopeType: "system", canWrite: hasScope(auth, "system:settings:write") || hasScope(auth, "files:file:admin") }) }, { id: "tenant-file-connectors", moduleId: "files", kind: "settings", surfaceId: "files.admin.tenant-connectors", label: "i18n:govoplan-files.file_connections.1e362326", group: "TENANT", order: 65, anyOf: ["admin:settings:read", "files:file:admin"], render: ({ settings, auth }) => createElement(FileConnectorSettingsPanel, { settings, scopeType: "tenant", canWrite: hasScope(auth, "admin:settings:write") || hasScope(auth, "files:file:admin") }) }, { id: "tenant-file-integrity", moduleId: "files", kind: "operations", surfaceId: "files.admin.tenant-integrity", label: "File integrity", group: "TENANT", order: 66, allOf: ["files:file:admin"], render: ({ settings, auth }) => createElement(FileIntegrityPanel, { settings, canWrite: hasScope(auth, "files:file:admin") }) }] }; export const filesModule: PlatformWebModule = { id: "files", label: "i18n:govoplan-files.files.6ce6c512", version: "1.0.0", dependencies: ["access"], translations, viewSurfaces: [ { id: "files.admin.system-connectors", moduleId: "files", kind: "section", label: "System file connections", order: 75 }, { id: "files.admin.tenant-connectors", moduleId: "files", kind: "section", label: "Tenant file connections", order: 65 }, { id: "files.admin.tenant-integrity", moduleId: "files", kind: "section", label: "File integrity", order: 66 }, { id: "files.admin.group-connectors", moduleId: "files", kind: "section", label: "Group file connections", order: 65 }, { id: "files.admin.user-connectors", moduleId: "files", kind: "section", label: "User file connections", order: 65 }, { id: "files.settings.connectors", moduleId: "files", kind: "section", label: "Personal file connections", order: 20 }, { id: "files.widget.spaces", moduleId: "files", kind: "section", label: "File spaces widget", order: 35 }, { id: "files.quick_access.files", moduleId: "files", kind: "quick_access", label: "Files Quick Access", order: 40 } ], navItems: [{ to: "/files", label: "i18n:govoplan-files.files.6ce6c512", iconName: "folder", anyOf: fileRead, order: 40 }], routes: [ { path: "/files", anyOf: fileRead, order: 40, render: ({ settings, auth }) => createElement(FilesPage, { settings, auth }) }], uiCapabilities: { "files.fileExplorer": { FolderTree, ManagedFileChooser, listFileSpaces, listFiles, listFilesDelta, listFolders, resolveFilePatterns, shareFilesWithTarget } satisfies FilesFileExplorerUiCapability, "files.connectors": { FileConnectorScopeManager: FileConnectorSettingsPanel } satisfies FilesConnectorsUiCapability, "admin.sections": fileConnectorAdminSections, "dashboard.widgets": fileDashboardWidgets, "quickAccess.tools": fileQuickAccessTools } }; export default filesModule;