170 lines
5.9 KiB
TypeScript
170 lines
5.9 KiB
TypeScript
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;
|