@acorex-platform/module-application-management-client 0.0.18 → 0.0.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/{acorex-platform-module-application-management-client-application-status.provider-DqPlbWuW.mjs → acorex-platform-module-application-management-client-application-status.provider-Bz6cknzi.mjs} +4 -4
- package/fesm2022/{acorex-platform-module-application-management-client-application-status.provider-DqPlbWuW.mjs.map → acorex-platform-module-application-management-client-application-status.provider-Bz6cknzi.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-application-management-client-assign-features.command-R7y4QKhC.mjs → acorex-platform-module-application-management-client-assign-features.command-BG986HtP.mjs} +23 -21
- package/fesm2022/acorex-platform-module-application-management-client-assign-features.command-BG986HtP.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-application-management-client-contracts.mjs +79 -1930
- package/fesm2022/acorex-platform-module-application-management-client-contracts.mjs.map +1 -1
- package/fesm2022/{acorex-platform-module-application-management-client-feature-definition.provider-Depetn50.mjs → acorex-platform-module-application-management-client-feature-definition.provider-V-wfUEZf.mjs} +4 -4
- package/fesm2022/{acorex-platform-module-application-management-client-feature-definition.provider-Depetn50.mjs.map → acorex-platform-module-application-management-client-feature-definition.provider-V-wfUEZf.mjs.map} +1 -1
- package/fesm2022/acorex-platform-module-application-management-client-features-editor.component-B5yrn7eX.mjs +584 -0
- package/fesm2022/acorex-platform-module-application-management-client-features-editor.component-B5yrn7eX.mjs.map +1 -0
- package/fesm2022/{acorex-platform-module-application-management-client-features-widget-column.component-CiBGmw6I.mjs → acorex-platform-module-application-management-client-features-widget-column.component-C2OEG0LL.mjs} +7 -8
- package/fesm2022/acorex-platform-module-application-management-client-features-widget-column.component-C2OEG0LL.mjs.map +1 -0
- package/fesm2022/{acorex-platform-module-application-management-client-features-widget-designer.component-nStj9BAw.mjs → acorex-platform-module-application-management-client-features-widget-designer.component-CMJwcY5f.mjs} +4 -4
- package/fesm2022/{acorex-platform-module-application-management-client-features-widget-designer.component-nStj9BAw.mjs.map → acorex-platform-module-application-management-client-features-widget-designer.component-CMJwcY5f.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-application-management-client-features-widget-edit.component-BdHYm0Yr.mjs → acorex-platform-module-application-management-client-features-widget-edit.component-D_IBCjfM.mjs} +5 -5
- package/fesm2022/{acorex-platform-module-application-management-client-features-widget-edit.component-BdHYm0Yr.mjs.map → acorex-platform-module-application-management-client-features-widget-edit.component-D_IBCjfM.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-application-management-client-features-widget-print.component-C6Z9uzRr.mjs → acorex-platform-module-application-management-client-features-widget-print.component-CkTEfzcY.mjs} +4 -4
- package/fesm2022/{acorex-platform-module-application-management-client-features-widget-print.component-C6Z9uzRr.mjs.map → acorex-platform-module-application-management-client-features-widget-print.component-CkTEfzcY.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-application-management-client-features-widget-view.component-ysM1jD08.mjs → acorex-platform-module-application-management-client-features-widget-view.component-yKbBTqym.mjs} +12 -8
- package/fesm2022/{acorex-platform-module-application-management-client-features-widget-view.component-ysM1jD08.mjs.map → acorex-platform-module-application-management-client-features-widget-view.component-yKbBTqym.mjs.map} +1 -1
- package/fesm2022/acorex-platform-module-application-management-client-permission-definition.provider-MTs9VAE_.mjs +44 -0
- package/fesm2022/acorex-platform-module-application-management-client-permission-definition.provider-MTs9VAE_.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-application-management-client.mjs +256 -217
- package/fesm2022/acorex-platform-module-application-management-client.mjs.map +1 -1
- package/package.json +1 -1
- package/types/acorex-platform-module-application-management-client-contracts.d.ts +166 -51
- package/types/acorex-platform-module-application-management-client.d.ts +9 -17
- package/fesm2022/acorex-platform-module-application-management-client-assign-features.command-R7y4QKhC.mjs.map +0 -1
- package/fesm2022/acorex-platform-module-application-management-client-features-editor.component-BiYXAqYJ.mjs +0 -548
- package/fesm2022/acorex-platform-module-application-management-client-features-editor.component-BiYXAqYJ.mjs.map +0 -1
- package/fesm2022/acorex-platform-module-application-management-client-features-widget-column.component-CiBGmw6I.mjs.map +0 -1
- package/fesm2022/acorex-platform-module-application-management-client-permission-definition.provider-Dn5WiubC.mjs +0 -32
- package/fesm2022/acorex-platform-module-application-management-client-permission-definition.provider-Dn5WiubC.mjs.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"acorex-platform-module-application-management-client-features-editor.component-BiYXAqYJ.mjs","sources":["../../../../libs/modules/application-management/client/src/lib/features/features-widget/features-editor.component.ts","../../../../libs/modules/application-management/client/src/lib/features/features-widget/features-editor.component.html"],"sourcesContent":["//#region ---- Imports ----\n\nimport type { AXPWidgetNode } from '@acorex-platform/framework-shared/core';\nimport { Component, ViewEncapsulation, computed, inject, signal, input, output, OnInit } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { AXFormModule } from '@acorex/components/form';\nimport { AXCheckBoxModule } from '@acorex/components/check-box';\nimport { AXLabelModule } from '@acorex/components/label';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport { AXTooltipModule } from '@acorex/components/tooltip';\nimport { AXValueChangedEvent } from '@acorex/cdk/common';\nimport { AXPModuleManifestRegistry, AXPModuleManifest, AXPModuleFeatureDefinition } from '@acorex-platform/framework-client/core';\nimport { AXPWidgetCoreModule } from '@acorex-platform/framework-client/layout/widget-core';\n\n\n//#endregion\n\n//#region ---- Features Editor Component ----\n\n@Component({\n selector: 'axm-features-editor',\n templateUrl: './features-editor.component.html',\n styleUrl: './features-editor.component.css',\n imports: [\n // Angular\n CommonModule,\n FormsModule,\n // ACoreX\n AXFormModule,\n AXCheckBoxModule,\n AXLabelModule,\n AXTranslationModule,\n AXTooltipModule,\n // Widget Renderer\n AXPWidgetCoreModule,\n ],\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'flex',\n },\n})\nexport class AXPFeaturesEditorComponent implements OnInit {\n //#region ---- Class Properties ----\n\n /** Service for fetching module manifests and feature definitions */\n private manifestRegistry = inject(AXPModuleManifestRegistry);\n\n /** Translation service for loading translated titles */\n private translationService = inject(AXTranslationService);\n\n\n /** All available module manifests with translated titles */\n private allModules = signal<Array<AXPModuleManifest & { translatedTitle?: string }>>([]);\n\n /** Sorted modules by translated title */\n protected modules = computed(() => {\n const modules = [...this.allModules()];\n return modules.sort((a, b) => {\n const titleA = a.translatedTitle || a.title || '';\n const titleB = b.translatedTitle || b.title || '';\n return titleA.localeCompare(titleB, undefined, { sensitivity: 'base' });\n });\n });\n\n /** Initial value: { modules: string[], features: Record<string, any> } */\n initialValue = input<{ modules?: string[]; features?: Record<string, any> }>({});\n\n /** Whether the editor is in read-only mode */\n readOnly = input<boolean>(false);\n\n /** Selected module names */\n protected selectedModules = signal<Set<string>>(new Set());\n\n /** Expanded module names */\n protected expandedModules = signal<Set<string>>(new Set());\n\n /** Expanded feature full names */\n protected expandedFeatures = signal<Set<string>>(new Set());\n\n /** Map of feature values: Record<featureName, featureValue> */\n protected featureValues = signal<Record<string, any>>({});\n\n /** Required module names (always enabled, cannot be disabled) */\n protected requiredModules = computed(() => {\n return new Set(\n this.allModules()\n .filter((m) => m.required === true)\n .map((m) => m.name)\n );\n });\n\n /** Modules that are dependencies of selected modules (auto-selected and disabled) */\n protected dependencyModules = computed(() => {\n const selected = this.selectedModules();\n const allManifests = this.manifestRegistry.getAll();\n const dependencySet = new Set<string>();\n\n // Find all modules that are dependencies of selected modules\n for (const manifest of allManifests) {\n if (selected.has(manifest.name) && manifest.dependencies) {\n for (const dep of manifest.dependencies) {\n // Only add module dependencies (skip features which contain a dot)\n if (!dep.includes('.')) {\n dependencySet.add(dep);\n }\n }\n }\n }\n\n return dependencySet;\n });\n\n /** Event emitted when modules/features selection/values change */\n valueChanged = output<{ modules: string[]; features: Record<string, any> }>();\n\n /** Cache for widget nodes to prevent re-creation and blinking */\n private widgetNodeCache = new Map<string, AXPWidgetNode>();\n\n /** Cache for feature data to prevent re-computation */\n private moduleFeaturesCache = new Map<string, Array<{\n key: string;\n fullName: string;\n definition: AXPModuleFeatureDefinition;\n isEnabled: boolean;\n widgetNode: AXPWidgetNode | null;\n }>>();\n\n /** Set of modules that are currently loading features */\n private loadingFeatures = signal<Set<string>>(new Set());\n\n /** Signal to trigger change detection when features are loaded */\n private featuresLoaded = signal<number>(0);\n\n //#endregion\n\n //#region ---- Lifecycle Methods ----\n\n /**\n * Initializes the component and loads module manifests.\n */\n async ngOnInit() {\n // Ensure registry is initialized before loading manifests\n await this.manifestRegistry.initialize();\n\n // Load all modules regardless of whether they have features\n const manifests = this.manifestRegistry.getAll();\n\n // Load translated titles for all modules\n const modulesWithTranslations = await Promise.all(\n manifests.map(async (manifest) => {\n const translatedTitle = await this.translationService.translateAsync(manifest.title);\n return {\n ...manifest,\n translatedTitle,\n };\n })\n );\n\n this.allModules.set(modulesWithTranslations);\n\n // Load initial value\n const initialValue = this.initialValue();\n const initialModules = new Set<string>(initialValue.modules || []);\n\n // Extract module names from feature keys (both module-level and regular features)\n if (initialValue.features) {\n for (const featureKey of Object.keys(initialValue.features)) {\n // Extract module name from feature key (format: ModuleName:Feature:...)\n const [moduleName] = featureKey.split(':');\n if (moduleName) {\n initialModules.add(moduleName);\n }\n }\n }\n\n // Always include required modules\n const requiredModules = this.requiredModules();\n requiredModules.forEach((moduleName) => {\n initialModules.add(moduleName);\n });\n\n // Auto-select dependencies for initially selected modules\n this.ensureDependencies(initialModules);\n\n this.selectedModules.set(initialModules);\n\n // Update dependency modules after setting selected modules\n // This ensures dependencyModules computed signal is updated\n if (initialValue.features) {\n this.featureValues.set(initialValue.features);\n }\n\n // Clear caches when initializing\n this.widgetNodeCache.clear();\n this.moduleFeaturesCache.clear();\n }\n\n //#endregion\n\n //#region ---- Utility Methods ----\n\n /**\n * Creates or retrieves a cached widget node from feature interface definition.\n * Uses caching to prevent widget re-rendering and blinking.\n */\n private createWidgetNode(definition: AXPModuleFeatureDefinition, fullName: string): AXPWidgetNode | null {\n if (!definition.interface) {\n return null;\n }\n\n const currentValue = this.featureValues()[fullName];\n const defaultValue = currentValue !== undefined && currentValue !== null ? currentValue : definition.defaultValue;\n\n // Check cache first\n let widgetNode = this.widgetNodeCache.get(fullName);\n\n if (!widgetNode) {\n // Create new widget node\n widgetNode = {\n type: definition.interface.type,\n name: fullName,\n defaultValue: defaultValue,\n options: definition.interface.options || {},\n };\n this.widgetNodeCache.set(fullName, widgetNode);\n } else {\n // Update defaultValue only if it actually changed (to prevent re-renders)\n if (widgetNode.defaultValue !== defaultValue) {\n widgetNode.defaultValue = defaultValue;\n }\n // Keep the same reference to prevent widget re-initialization\n }\n\n return widgetNode;\n }\n\n /**\n * Gets the current value (modules and features).\n */\n public getValue(): { modules: string[]; features: Record<string, any> } {\n return {\n modules: Array.from(this.selectedModules()),\n features: this.featureValues(),\n };\n }\n\n /**\n * Sets the value (modules and features).\n */\n public setValue(value: { modules?: string[]; features?: Record<string, any> }): void {\n if (value.modules) {\n this.selectedModules.set(new Set(value.modules));\n }\n if (value.features) {\n this.featureValues.set(value.features);\n }\n this.emitValueChanged();\n }\n\n /**\n * Emits the current value.\n */\n private emitValueChanged(): void {\n this.valueChanged.emit(this.getValue());\n }\n\n /**\n * Ensures all dependencies for the given modules are selected.\n * Recursively checks and adds dependencies.\n */\n private ensureDependencies(modules: Set<string>): void {\n const allManifests = this.manifestRegistry.getAll();\n let changed = true;\n\n while (changed) {\n changed = false;\n for (const manifest of allManifests) {\n if (modules.has(manifest.name) && manifest.dependencies) {\n for (const dep of manifest.dependencies) {\n // Only add module dependencies (skip features which contain a dot)\n if (!dep.includes('.')) {\n if (!modules.has(dep)) {\n modules.add(dep);\n changed = true;\n }\n }\n }\n }\n }\n }\n }\n\n /**\n * Gets features for a module with caching to prevent re-computation.\n * Features are loaded from feature definition providers and registered in the manifest registry.\n * This method is read-only and should not update signals during template rendering.\n */\n protected getModuleFeatures(module: AXPModuleManifest): Array<{\n key: string;\n fullName: string;\n definition: AXPModuleFeatureDefinition;\n isEnabled: boolean;\n widgetNode: AXPWidgetNode | null;\n }> {\n // Access featuresLoaded signal to make this reactive to feature loading\n // This is a read operation, which is safe during template rendering\n this.featuresLoaded();\n\n // Get features from manifest registry\n const moduleFeatures = this.manifestRegistry.getModuleFeatures(module.name);\n\n if (moduleFeatures.length === 0) {\n return [];\n }\n\n const cacheKey = module.name;\n const currentValues = this.featureValues();\n\n // Check if we need to invalidate cache (if feature values changed)\n const cached = this.moduleFeaturesCache.get(cacheKey);\n if (cached) {\n // Update isEnabled status and widget node values without recreating objects\n cached.forEach((feature) => {\n const currentValue = currentValues[feature.fullName];\n feature.isEnabled = currentValue !== undefined && currentValue !== null;\n\n // Update widget node defaultValue if it exists\n if (feature.widgetNode) {\n const newDefaultValue = currentValue !== undefined && currentValue !== null\n ? currentValue\n : feature.definition.defaultValue;\n if (feature.widgetNode.defaultValue !== newDefaultValue) {\n feature.widgetNode.defaultValue = newDefaultValue;\n }\n }\n });\n return cached;\n }\n\n // Create new cache entry from registry features\n const features = moduleFeatures.map((featureDef) => {\n const fullName = featureDef.name;\n const shortKey = featureDef.key;\n const currentValue = currentValues[fullName];\n const isEnabled = currentValue !== undefined && currentValue !== null;\n const widgetNode = this.createWidgetNode(featureDef, fullName);\n\n return {\n key: shortKey,\n fullName,\n definition: featureDef,\n isEnabled,\n widgetNode,\n };\n });\n\n this.moduleFeaturesCache.set(cacheKey, features);\n return features;\n }\n\n /**\n * Loads features for a module.\n * Features are already loaded and registered during manifest registry initialization,\n * so this method just triggers cache invalidation for change detection.\n */\n private async loadModuleFeatures(module: AXPModuleManifest): Promise<void> {\n try {\n // Features are already loaded during manifest registry initialization\n // Just clear cache to force re-computation\n this.moduleFeaturesCache.delete(module.name);\n // Trigger change detection\n this.featuresLoaded.update(v => v + 1);\n } finally {\n // Remove from loading set\n this.loadingFeatures.update(set => {\n const newSet = new Set(set);\n newSet.delete(module.name);\n return newSet;\n });\n }\n }\n\n //#endregion\n\n //#region ---- UI Handlers ----\n\n /**\n * Toggles module expansion.\n */\n protected toggleModule(module: AXPModuleManifest): void {\n const moduleName = module.name;\n const expanded = new Set(this.expandedModules());\n if (expanded.has(moduleName)) {\n expanded.delete(moduleName);\n } else {\n expanded.add(moduleName);\n // Features are already loaded during manifest registry initialization\n // Just trigger cache refresh if needed\n if (!this.loadingFeatures().has(moduleName)) {\n this.loadingFeatures.update(set => new Set(set).add(moduleName));\n this.loadModuleFeatures(module).catch(error => {\n console.error(`Failed to refresh features for module ${moduleName}:`, error);\n });\n }\n }\n this.expandedModules.set(expanded);\n }\n\n /**\n * Toggles feature expansion.\n */\n protected toggleFeature(fullName: string): void {\n const expanded = new Set(this.expandedFeatures());\n if (expanded.has(fullName)) {\n expanded.delete(fullName);\n } else {\n expanded.add(fullName);\n }\n this.expandedFeatures.set(expanded);\n }\n\n /**\n * Checks if module is expanded.\n */\n protected isModuleExpanded(moduleName: string): boolean {\n return this.expandedModules().has(moduleName);\n }\n\n /**\n * Checks if feature is expanded.\n */\n protected isFeatureExpanded(fullName: string): boolean {\n return this.expandedFeatures().has(fullName);\n }\n\n /**\n * Checks if module is selected.\n * A module is considered selected if:\n * 1. It's in the selectedModules set, OR\n * 2. The module name is enabled as a feature (module name itself is used as feature key)\n */\n protected isModuleSelected(moduleName: string): boolean {\n if (this.selectedModules().has(moduleName)) {\n return true;\n }\n // Check if module name is enabled as a feature\n const featureValue = this.featureValues()[moduleName];\n return featureValue !== undefined && featureValue !== null;\n }\n\n /**\n * Checks if module is required (always enabled, cannot be disabled).\n */\n protected isModuleRequired(moduleName: string): boolean {\n return this.requiredModules().has(moduleName);\n }\n\n /**\n * Checks if module is a dependency of other selected modules (auto-selected and disabled).\n */\n protected isModuleDependency(moduleName: string): boolean {\n return this.dependencyModules().has(moduleName);\n }\n\n /**\n * Checks if module should be disabled (required or dependency).\n */\n protected isModuleDisabled(moduleName: string): boolean {\n return this.isModuleRequired(moduleName) || this.isModuleDependency(moduleName);\n }\n\n /**\n * Checks if module can be enabled (dependencies are satisfied).\n */\n protected canEnableModule(moduleName: string): boolean {\n const manifest = this.manifestRegistry.get(moduleName);\n if (!manifest?.dependencies || manifest.dependencies.length === 0) {\n return true;\n }\n\n const selected = this.selectedModules();\n // Only check module dependencies (skip features which contain a dot)\n const moduleDeps = manifest.dependencies.filter((dep) => !dep.includes('.'));\n return moduleDeps.every((dep) => selected.has(dep));\n }\n\n /**\n * Gets missing dependencies for a module.\n */\n protected getMissingDependencies(moduleName: string): string[] {\n const manifest = this.manifestRegistry.get(moduleName);\n if (!manifest?.dependencies || manifest.dependencies.length === 0) {\n return [];\n }\n\n const selected = this.selectedModules();\n // Only check module dependencies (skip features which contain a dot)\n const moduleDeps = manifest.dependencies.filter((dep) => !dep.includes('.'));\n return moduleDeps.filter((dep) => !selected.has(dep));\n }\n\n /**\n * Gets modules that depend on the given module.\n */\n protected getDependentModules(moduleName: string): string[] {\n const allManifests = this.manifestRegistry.getAll();\n return allManifests\n .filter((m) => m.dependencies?.includes(moduleName))\n .map((m) => m.name);\n }\n\n /**\n * Gets the tooltip text for a dependency module showing which modules depend on it.\n */\n protected getDependencyTooltip(moduleName: string): string {\n const dependentModules = this.getDependentModules(moduleName);\n const selectedDependents = dependentModules.filter((m) => this.isModuleSelected(m));\n if (selectedDependents.length === 0) {\n return 'Required dependency';\n }\n return `Required dependency of: ${selectedDependents.join(', ')}`;\n }\n\n /**\n * Gets the icon class for a module, with fallback to default cube icon.\n */\n protected getModuleIcon(module: AXPModuleManifest): string {\n return module.icon || 'fa-light fa-cube';\n }\n\n /**\n * Checks if module has features.\n * Returns true if features are already loaded.\n * Features are loaded from feature definition providers on-demand.\n */\n protected hasModuleFeatures(module: AXPModuleManifest): boolean {\n const moduleFeatures = this.manifestRegistry.getModuleFeatures(module.name);\n // If features are already loaded, return true\n return moduleFeatures.length > 0;\n }\n\n /**\n * Handles module checkbox toggle.\n * When enabled, enables the module name as a feature (module name itself is used as feature key).\n * When disabled, removes the module name feature.\n */\n protected onModuleToggle(module: AXPModuleManifest, event: AXValueChangedEvent): void {\n if (this.readOnly() || this.isModuleDisabled(module.name)) {\n return;\n }\n\n const selectedModules = new Set(this.selectedModules());\n const currentValues = { ...this.featureValues() };\n\n if (event.value) {\n selectedModules.add(module.name);\n\n // Enable module name as feature (module name itself is used as feature key)\n currentValues[module.name] = true;\n\n // Auto-select dependencies recursively\n this.ensureDependencies(selectedModules);\n\n // Features are already loaded during manifest registry initialization\n // Just trigger cache refresh if needed\n if (!this.loadingFeatures().has(module.name)) {\n setTimeout(() => {\n this.loadingFeatures.update(set => new Set(set).add(module.name));\n this.loadModuleFeatures(module).catch(error => {\n console.error(`Failed to refresh features for module ${module.name}:`, error);\n this.loadingFeatures.update(set => {\n const newSet = new Set(set);\n newSet.delete(module.name);\n return newSet;\n });\n });\n }, 0);\n }\n } else {\n // Check if other modules depend on this one\n const dependentModules = this.getDependentModules(module.name);\n const hasSelectedDependents = dependentModules.some((dep) => selectedModules.has(dep));\n\n if (hasSelectedDependents) {\n // Don't allow disabling if other selected modules depend on it\n return;\n }\n\n selectedModules.delete(module.name);\n // Remove module name feature when module is deselected\n delete currentValues[module.name];\n }\n\n this.selectedModules.set(selectedModules);\n this.featureValues.set(currentValues);\n this.emitValueChanged();\n }\n\n /**\n * Handles feature checkbox toggle.\n */\n protected onFeatureToggle(feature: {\n fullName: string;\n definition: AXPModuleFeatureDefinition;\n widgetNode: AXPWidgetNode | null;\n }, event: AXValueChangedEvent): void {\n if (this.readOnly()) {\n return;\n }\n\n const currentValues = { ...this.featureValues() };\n\n if (event.value) {\n // Enable feature - use default value if not set\n if (currentValues[feature.fullName] === undefined || currentValues[feature.fullName] === null) {\n currentValues[feature.fullName] = feature.definition.defaultValue;\n }\n } else {\n // Disable feature - remove from values\n delete currentValues[feature.fullName];\n }\n\n this.featureValues.set(currentValues);\n this.emitValueChanged();\n }\n\n /**\n * Handles feature widget value change.\n */\n protected onFeatureValueChange(featureFullName: string, value: any): void {\n if (this.readOnly()) {\n return;\n }\n\n const currentValues = { ...this.featureValues() };\n currentValues[featureFullName] = value;\n this.featureValues.set(currentValues);\n this.emitValueChanged();\n }\n\n //#endregion\n}\n\n//#endregion\n","<div class=\"px-3 py-6\">\n <div class=\"flex flex-col gap-3\">\n @for (module of modules(); track module.name) {\n <ng-container *ngTemplateOutlet=\"moduleTemplate; context: { $implicit: module, level: 0 }\">\n </ng-container>\n }\n </div>\n</div>\n\n<!-- Module Template -->\n<ng-template #moduleTemplate let-module let-level=\"level\">\n <div class=\"flex flex-col\">\n <!-- Module Row -->\n <div class=\"flex items-center gap-3 rounded hover:bg-surface-lowest\"\n [style.padding-left.px]=\"level * 32\">\n <!-- Spacer for alignment -->\n <span class=\"w-4\"></span>\n\n <!-- Module Checkbox -->\n <ax-check-box [ngModel]=\"isModuleSelected(module.name)\" [readonly]=\"readOnly() || isModuleDisabled(module.name)\"\n [class.opacity-50]=\"isModuleDependency(module.name) && !isModuleRequired(module.name)\"\n (onValueChanged)=\"onModuleToggle(module, $event)\" (click)=\"$event.stopPropagation()\">\n </ax-check-box>\n\n <!-- Module Icon -->\n <i [class]=\"getModuleIcon(module) + ' text-primary fa-fw'\"></i>\n\n <!-- Module Title -->\n <span class=\"flex-1 font-semibold\">{{ module.title | translate | async }}</span>\n\n <!-- Required Badge -->\n @if (isModuleRequired(module.name)) {\n <span class=\"text-xs text-primary font-medium\" [axTooltip]=\"'Required module'\">\n (Required)\n </span>\n }\n\n <!-- Dependency Badge -->\n @if (isModuleDependency(module.name) && !isModuleRequired(module.name)) {\n <span class=\"text-xs text-secondary font-medium\" [axTooltip]=\"getDependencyTooltip(module.name)\">\n (Dependency)\n </span>\n }\n </div>\n\n <!-- Features (shown when module is checked and has features) -->\n @if (isModuleSelected(module.name) && hasModuleFeatures(module)) {\n <div class=\"flex flex-col gap-3 py-6 px-3\">\n @for (feature of getModuleFeatures(module); track feature.fullName) {\n <ng-container\n *ngTemplateOutlet=\"featureTemplate; context: { $implicit: feature, module: module, level: level + 1 }\">\n </ng-container>\n }\n </div>\n }\n </div>\n</ng-template>\n\n<!-- Feature Template -->\n<ng-template #featureTemplate let-feature let-module=\"module\" let-level=\"level\">\n <div class=\"flex flex-col\">\n <!-- Feature Row -->\n <div class=\"flex items-start gap-3 rounded hover:bg-surface-lowest\"\n [style.padding-left.px]=\"level * 32\">\n <!-- Spacer for alignment -->\n <span class=\"w-4\"></span>\n\n <!-- Feature Checkbox -->\n <ax-check-box [ngModel]=\"feature.isEnabled\" [readonly]=\"readOnly()\"\n (onValueChanged)=\"onFeatureToggle(feature, $event)\" (click)=\"$event.stopPropagation()\"></ax-check-box>\n\n <!-- Feature Content (Icon, Title, Description) -->\n <div class=\"flex flex-col flex-1 gap-1.5\">\n <div class=\"flex items-center gap-2\">\n <!-- Feature Icon -->\n <i class=\"fa-light fa-toggle-on text-secondary\"></i>\n <!-- Feature Title -->\n <span class=\"font-semibold\">{{ feature.definition.title | translate | async }}</span>\n </div>\n\n <!-- Feature Description -->\n @if (feature.definition.description) {\n <div class=\"text-sm text-muted ms-6 leading-relaxed\">\n {{ feature.definition.description | translate | async }}\n </div>\n }\n <!-- Widget (shown when feature is enabled and has widget) -->\n @if (feature.isEnabled && feature.widgetNode) {\n <div class=\"mt-3 ms-6 ax-sm\">\n <ng-container axp-widget-renderer [node]=\"feature.widgetNode\" [mode]=\"readOnly() ? 'view' : 'edit'\"\n (onValueChanged)=\"onFeatureValueChange(feature.fullName, $event.widget.getValue())\">\n </ng-container>\n </div>\n }\n </div>\n </div>\n\n\n </div>\n</ng-template>"],"names":["i3"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"acorex-platform-module-application-management-client-features-widget-column.component-CiBGmw6I.mjs","sources":["../../../../libs/modules/application-management/client/src/lib/features/features-widget/features-widget-column.component.ts"],"sourcesContent":["import { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPColumnWidgetComponent } from '@acorex-platform/framework-client/layout/widget-core';\nimport { AXPCommandService } from '@acorex-platform/framework-client/runtime';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, inject } from '@angular/core';\n\n@Component({\n template: `\n <span class=\"cursor-pointer text-primary underline\" (click)=\"openFeaturesEditor()\">\n {{ count() }} {{ '@application-management:features-widget.terms.features' | translate | async }}\n </span>\n `,\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, AXTranslationModule],\n inputs: ['rawValue', 'rowData']\n})\nexport class AXPFeaturesWidgetColumnComponent extends AXPColumnWidgetComponent<Record<string, any>> {\n\n protected count = computed(() => Object.keys(this.rawValue || {}).length);\n protected commandService = inject(AXPCommandService);\n\n async openFeaturesEditor() {\n await this.commandService.execute('assign-features', {\n __context__: {\n data: this.rowData,\n },\n });\n }\n}\n\n"],"names":["i2"],"mappings":";;;;;;;;;AAiBM,MAAO,gCAAiC,SAAQ,wBAA6C,CAAA;AAXnG,IAAA,WAAA,GAAA;;AAaY,QAAA,IAAA,CAAA,KAAK,GAAG,QAAQ,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,MAAM,4EAAC;AAC/D,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,iBAAiB,CAAC;AASrD,IAAA;AAPC,IAAA,MAAM,kBAAkB,GAAA;AACtB,QAAA,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,iBAAiB,EAAE;AACnD,YAAA,WAAW,EAAE;gBACX,IAAI,EAAE,IAAI,CAAC,OAAO;AACnB,aAAA;AACF,SAAA,CAAC;IACJ;8GAXW,gCAAgC,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAhC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gCAAgC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAVjC;;;;GAIT,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAGS,YAAY,8BAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,gBAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAGhC,gCAAgC,EAAA,UAAA,EAAA,CAAA;kBAX5C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE;;;;AAIT,EAAA,CAAA;AACD,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,OAAO,EAAE,CAAC,YAAY,EAAE,mBAAmB,CAAC;AAC5C,oBAAA,MAAM,EAAE,CAAC,UAAU,EAAE,SAAS;AAC/B,iBAAA;;;;;"}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import * as i0 from '@angular/core';
|
|
2
|
-
import { Injectable } from '@angular/core';
|
|
3
|
-
import { AXMPermissionsKeys, RootConfig } from '@acorex-platform/module-application-management-client/contracts';
|
|
4
|
-
|
|
5
|
-
//#endregion
|
|
6
|
-
//#region ---- Permission Definition Provider ----
|
|
7
|
-
class AXMPermissionDefinitionProvider {
|
|
8
|
-
//#region ---- Define Method ----
|
|
9
|
-
async define(context) {
|
|
10
|
-
const keys = AXMPermissionsKeys.ApplicationManagement;
|
|
11
|
-
context
|
|
12
|
-
.addGroup(RootConfig.module.name, '@application-management:permissions.manage.title', '@application-management:permissions.manage.description')
|
|
13
|
-
.addPermission(keys.Applications, '@application-management:applications.permissions.manage.title', '@application-management:applications.permissions.manage.description')
|
|
14
|
-
.endPermission()
|
|
15
|
-
//
|
|
16
|
-
.addPermission(keys.ReleaseNotes, '@application-management:release-notes.permissions.manage.title', '@application-management:release-notes.permissions.manage.description')
|
|
17
|
-
.endPermission()
|
|
18
|
-
//
|
|
19
|
-
.addPermission(keys.AppTerms, '@application-management:app-terms.permissions.manage.title', '@application-management:app-terms.permissions.manage.description')
|
|
20
|
-
.endPermission()
|
|
21
|
-
//
|
|
22
|
-
.endGroup();
|
|
23
|
-
}
|
|
24
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMPermissionDefinitionProvider, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
25
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMPermissionDefinitionProvider }); }
|
|
26
|
-
}
|
|
27
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMPermissionDefinitionProvider, decorators: [{
|
|
28
|
-
type: Injectable
|
|
29
|
-
}] });
|
|
30
|
-
|
|
31
|
-
export { AXMPermissionDefinitionProvider };
|
|
32
|
-
//# sourceMappingURL=acorex-platform-module-application-management-client-permission-definition.provider-Dn5WiubC.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"acorex-platform-module-application-management-client-permission-definition.provider-Dn5WiubC.mjs","sources":["../../../../libs/modules/application-management/client/src/lib/permission-definition.provider.ts"],"sourcesContent":["//#region ---- Imports ----\n\nimport { AXPPermissionDefinitionProvider, AXPPermissionDefinitionProviderContext } from '@acorex-platform/framework-client/auth';\nimport { Injectable } from '@angular/core';\nimport { AXMPermissionsKeys } from '@acorex-platform/module-application-management-client/contracts';\nimport { RootConfig } from '@acorex-platform/module-application-management-client/contracts';\n\n//#endregion\n\n//#region ---- Permission Definition Provider ----\n\n@Injectable()\nexport class AXMPermissionDefinitionProvider implements AXPPermissionDefinitionProvider {\n\n //#region ---- Define Method ----\n\n async define(context: AXPPermissionDefinitionProviderContext): Promise<void> {\n const keys = AXMPermissionsKeys.ApplicationManagement;\n\n context\n .addGroup(\n RootConfig.module.name,\n '@application-management:permissions.manage.title',\n '@application-management:permissions.manage.description'\n )\n .addPermission(\n keys.Applications,\n '@application-management:applications.permissions.manage.title',\n '@application-management:applications.permissions.manage.description'\n )\n .endPermission()\n //\n .addPermission(\n keys.ReleaseNotes,\n '@application-management:release-notes.permissions.manage.title',\n '@application-management:release-notes.permissions.manage.description'\n )\n .endPermission()\n //\n .addPermission(\n keys.AppTerms,\n '@application-management:app-terms.permissions.manage.title',\n '@application-management:app-terms.permissions.manage.description'\n )\n .endPermission()\n //\n .endGroup();\n }\n\n //#endregion\n}\n\n//#endregion\n"],"names":[],"mappings":";;;;AAOA;AAEA;MAGa,+BAA+B,CAAA;;IAI1C,MAAM,MAAM,CAAC,OAA+C,EAAA;AAC1D,QAAA,MAAM,IAAI,GAAG,kBAAkB,CAAC,qBAAqB;QAErD;aACG,QAAQ,CACP,UAAU,CAAC,MAAM,CAAC,IAAI,EACtB,kDAAkD,EAClD,wDAAwD;aAEzD,aAAa,CACZ,IAAI,CAAC,YAAY,EACjB,+DAA+D,EAC/D,qEAAqE;AAEtE,aAAA,aAAa;;aAEb,aAAa,CACZ,IAAI,CAAC,YAAY,EACjB,gEAAgE,EAChE,sEAAsE;AAEvE,aAAA,aAAa;;aAEb,aAAa,CACZ,IAAI,CAAC,QAAQ,EACb,4DAA4D,EAC5D,kEAAkE;AAEnE,aAAA,aAAa;;AAEb,aAAA,QAAQ,EAAE;IACf;8GAnCW,+BAA+B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAA/B,+BAA+B,EAAA,CAAA,CAAA;;2FAA/B,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAD3C;;;;;"}
|