diff --git a/README.md b/README.md index 39ba628..e7b4b1d 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ PortalSettings V3 ist ein providerbasiertes SPFx-WebPart für SharePoint Server | Eigenschaft | Wert | |---|---| -| Version | 3.2.4 | +| Version | 3.2.5 | | SharePoint Framework | 1.4.1 | | Build-Node | 8.17.0 | | npm | 6.x | @@ -171,7 +171,7 @@ sharepoint/solution/portal-settings.sppkg ## Installation -1. `portal-settings.sppkg` im App Catalog durch Version `3.2.4.0` ersetzen. +1. `portal-settings.sppkg` im App Catalog durch Version `3.2.5.0` ersetzen. 2. Die App im Root Web der gewünschten Site Collection installieren oder aktualisieren. 3. Die Seite mit dem PnP-PowerShell-Skript erzeugen beziehungsweise reparieren: diff --git a/ToDo.md b/ToDo.md index e6f4642..34cc7fb 100644 --- a/ToDo.md +++ b/ToDo.md @@ -2,7 +2,7 @@ Stand: 21.07.2026 Branch: `dev-3.0` -Zielversion: 3.2.4 +Zielversion: 3.2.5 ## Architektur diff --git a/config/package-solution.json b/config/package-solution.json index e686b37..77534e5 100644 --- a/config/package-solution.json +++ b/config/package-solution.json @@ -3,7 +3,7 @@ "solution": { "name": "portal-settings-client-side-solution", "id": "1c98e32d-bb7b-43b7-9625-074d6e4ea286", - "version": "3.2.4.0", + "version": "3.2.5.0", "includeClientSideAssets": true, "skipFeatureDeployment": false }, diff --git a/package-lock.json b/package-lock.json index d708da4..7f8f6be 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "portal-settings", - "version": "3.2.4", + "version": "3.2.5", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 6e249a9..54d30e3 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "portal-settings", - "version": "3.2.4", + "version": "3.2.5", "private": true, "main": "lib/index.js", "engines": { diff --git a/src/providers/CurrentNavigationSettingsProvider.ts b/src/providers/CurrentNavigationSettingsProvider.ts index 8e91842..02592a7 100644 --- a/src/providers/CurrentNavigationSettingsProvider.ts +++ b/src/providers/CurrentNavigationSettingsProvider.ts @@ -13,6 +13,7 @@ export interface ICurrentNavigationSettings { cacheVersion: string; maxDepth: number; showRoot: boolean; + initialExpansion: 'activePath' | 'expanded' | 'collapsed'; debug: boolean; [key: string]: any; // tslint:disable-line:no-any } @@ -54,6 +55,15 @@ export const CurrentNavigationSettingsProvider: ISettingsProvider { // tslint:disable-line:no-any const source: any = value && typeof value === 'object' ? value : {}; // tslint:disable-line:no-any @@ -115,6 +125,8 @@ export const CurrentNavigationSettingsProvider: ISettingsProvider 8) { errors.push('Die maximale Tiefe muss zwischen 1 und 8 liegen.'); } + if (['activePath', 'expanded', 'collapsed'].indexOf(value.initialExpansion) < 0) { + errors.push('Der initiale Aufklappzustand ist ungültig.'); + } return errors; } }; diff --git a/tests/ProviderRegistry.test.ts b/tests/ProviderRegistry.test.ts index 3341918..cc28e2f 100644 --- a/tests/ProviderRegistry.test.ts +++ b/tests/ProviderRegistry.test.ts @@ -38,16 +38,20 @@ assert(!!current.storage.action, 'CurrentNavigation-Aktivierungsdefinition fehlt assert(current.storage.action.name === 'CurrentNavigation', 'CurrentNavigation Action-Name ist nicht stabil.'); assert(current.storage.action.sequence === 110, 'CurrentNavigation Action-Sequenz ist nicht stabil.'); const normalizedCurrent: any = current.normalize({ // tslint:disable-line:no-any - cacheMinutes: 5000, cacheVersion: '', maxDepth: 99, showRoot: true, future: 'keep' + cacheMinutes: 5000, cacheVersion: '', maxDepth: 99, showRoot: true, + initialExpansion: 'expanded', future: 'keep' }); assert(normalizedCurrent.cacheMinutes === 1440, 'CurrentNavigation Cache-Maximum greift nicht.'); assert(normalizedCurrent.cacheVersion === '1', 'CurrentNavigation Cache-Fallback fehlt.'); assert(normalizedCurrent.maxDepth === 8, 'CurrentNavigation Tiefenlimit greift nicht.'); assert(normalizedCurrent.showRoot === true, 'CurrentNavigation Root-Anzeige geht verloren.'); +assert(normalizedCurrent.initialExpansion === 'expanded', 'CurrentNavigation Aufklappzustand geht verloren.'); assert(normalizedCurrent.future === 'keep', 'Unbekannte CurrentNavigation-Properties gehen verloren.'); const invalidCurrent: any = current.createDefault(); // tslint:disable-line:no-any invalidCurrent.termSetName = 'Nur ein Name'; assert(current.validate(invalidCurrent).length > 0, 'CurrentNavigation muss eine Termset-ID verlangen.'); +assert(current.normalize({ initialExpansion: 'invalid' }).initialExpansion === 'activePath', + 'CurrentNavigation benötigt einen kompatiblen Fallback für den Aufklappzustand.'); const branding: ISettingsProvider = getSettingsProvider('custombranding'); // tslint:disable-line:no-any assert(!!branding.storage.action, 'CustomBranding-Aktivierungsdefinition fehlt.'); diff --git a/tests/validate-static-assets.js b/tests/validate-static-assets.js index 7cebec3..c4e6465 100644 --- a/tests/validate-static-assets.js +++ b/tests/validate-static-assets.js @@ -22,8 +22,8 @@ var sourceFiles = [ ].map(read).join('\n'); var dataService = read('src/services/PortalSettingsDataService.ts'); -assert(packageJson.version === '3.2.4', 'Package-Version ist nicht 3.2.4.'); -assert(solution.version === '3.2.4.0', 'Solution-Version ist nicht 3.2.4.0.'); +assert(packageJson.version === '3.2.5', 'Package-Version ist nicht 3.2.5.'); +assert(solution.version === '3.2.5.0', 'Solution-Version ist nicht 3.2.5.0.'); assert(!solution.features, 'Das inkompatible Seiten-Provisioning-Feature darf nicht paketiert werden.'); assert(!!config.bundles['portal-settings-web-part'], 'WebPart-Bundle fehlt.'); assert(copyAssets.deployCdnPath === 'temp/deploy', 'Ship-Assets werden nicht nach temp/deploy geschrieben.');