Files
govoplan-organizations/webui/src/module.ts

82 lines
2.5 KiB
TypeScript

import { createElement, lazy } from "react";
import type { AdminSectionsUiCapability, OrganizationFunctionPickerUiCapability, PlatformWebModule } from "@govoplan/core-webui";
import { generatedTranslations } from "./i18n/generatedTranslations";
import { OrganizationFunctionLabel, OrganizationFunctionPicker } from "./features/organizations/OrganizationFunctionPicker";
import "./styles/organizations.css";
const OrganizationsPage = lazy(() => import("./features/organizations/OrganizationsPage"));
const OrganizationsAdminPanel = lazy(() => import("./features/organizations/OrganizationsAdminPanel"));
const organizationReadScopes = [
"organizations:model:read",
"organizations:unit:read",
"organizations:function:read",
"admin:settings:read"
];
const translations = {
en: generatedTranslations.en,
de: generatedTranslations.de
};
const organizationAdminSections: AdminSectionsUiCapability = {
sections: [
{
id: "tenant-organization-settings",
surfaceId: "organizations.admin.tenant",
label: "i18n:govoplan-organizations.organizations.220edf64",
group: "TENANT",
order: 85,
anyOf: ["organizations:settings:read", "admin:settings:read"],
render: ({ settings, auth }) => createElement(OrganizationsAdminPanel, { settings, auth })
}
]
};
const organizationFunctionPicker: OrganizationFunctionPickerUiCapability = {
sourceModule: "organizations",
renderPicker: (context) => createElement(OrganizationFunctionPicker, context),
renderLabel: (context) => createElement(OrganizationFunctionLabel, context)
};
export const organizationsModule: PlatformWebModule = {
id: "organizations",
label: "i18n:govoplan-organizations.organizations.220edf64",
version: "1.0.0",
dependencies: ["access"],
optionalDependencies: ["admin"],
translations,
viewSurfaces: [
{
id: "organizations.admin.tenant",
moduleId: "organizations",
kind: "section",
label: "Organizations administration",
order: 85
}
],
navItems: [
{
to: "/organizations",
label: "i18n:govoplan-organizations.organizations.220edf64",
iconName: "building-2",
anyOf: organizationReadScopes,
order: 70
}
],
routes: [
{
path: "/organizations",
anyOf: organizationReadScopes,
order: 70,
render: ({ settings, auth }) => createElement(OrganizationsPage, { settings, auth })
}
],
uiCapabilities: {
"admin.sections": organizationAdminSections,
"organizations.functionPicker": organizationFunctionPicker
}
};
export default organizationsModule;