From ae45f57f95c370c95ff656ac559332a41e30ea2c Mon Sep 17 00:00:00 2001 From: leekelleher Date: Mon, 30 Sep 2024 10:23:07 +0100 Subject: [PATCH] Refactored the extension grouping to use `Object.groupBy` Also added sorting, to show the extensions in alphabetical order per group --- ...tiptap-extensions-configuration.element.ts | 40 +++++++++---------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/rte/tiptap/property-editors/property-editor-ui-tiptap-extensions-configuration.element.ts b/src/Umbraco.Web.UI.Client/src/packages/rte/tiptap/property-editors/property-editor-ui-tiptap-extensions-configuration.element.ts index a454a02829..394dde72a0 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/rte/tiptap/property-editors/property-editor-ui-tiptap-extensions-configuration.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/rte/tiptap/property-editors/property-editor-ui-tiptap-extensions-configuration.element.ts @@ -56,14 +56,16 @@ export class UmbPropertyEditorUiTiptapExtensionsConfigurationElement super.firstUpdated(_changedProperties); this.observe(umbExtensionsRegistry.byType('tiptapExtension'), (extensions) => { - this._extensionConfigs = extensions.map((ext) => { - return { - alias: ext.alias, - label: ext.meta.label, - icon: ext.meta.icon, - group: ext.meta.group, - }; - }); + this._extensionConfigs = extensions + .sort((a, b) => a.alias.localeCompare(b.alias)) + .map((ext) => { + return { + alias: ext.alias, + label: ext.meta.label, + icon: ext.meta.icon, + group: ext.meta.group, + }; + }); if (!this.value) { // The default value is all extensions enabled @@ -84,18 +86,16 @@ export class UmbPropertyEditorUiTiptapExtensionsConfigurationElement }; }); - const grouped = withSelectedProperty.reduce((acc: any, item) => { - const group = item.group || 'Uncategorized'; // Assign to "Uncategorized" if no group - if (!acc[group]) { - acc[group] = []; - } - acc[group].push(item); - return acc; - }, {}); - this._extensionCategories = Object.keys(grouped).map((group) => ({ - category: group.charAt(0).toUpperCase() + group.slice(1).replace(/-/g, ' '), - extensions: grouped[group], - })); + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-expect-error + const grouped = Object.groupBy(withSelectedProperty, (item: ExtensionConfig) => item.group || 'Uncategorized'); + + this._extensionCategories = Object.keys(grouped) + .sort((a, b) => a.localeCompare(b)) + .map((key) => ({ + category: key, + extensions: grouped[key], + })); } #onExtensionClick(item: ExtensionCategoryItem) {