From 73609ca7e31c6cc628f46319f0b9502f7b8afcd3 Mon Sep 17 00:00:00 2001 From: Mo Date: Tue, 1 Aug 2023 13:53:15 -0500 Subject: [PATCH] fix: Fixes issue where selecting a third-party editor/note-type as default for a tag would not correctly apply editor --- .../Component/ComponentManagerInterface.ts | 1 + .../ComponentManager/ComponentManager.ts | 6 ++++++ .../Header/NewNotePreferences.tsx | 21 ++++++++++++++----- .../Utils/DropdownItemsForEditors.ts | 2 +- 4 files changed, 24 insertions(+), 6 deletions(-) diff --git a/packages/services/src/Domain/Component/ComponentManagerInterface.ts b/packages/services/src/Domain/Component/ComponentManagerInterface.ts index 8461e29b8..e27c765fe 100644 --- a/packages/services/src/Domain/Component/ComponentManagerInterface.ts +++ b/packages/services/src/Domain/Component/ComponentManagerInterface.ts @@ -31,6 +31,7 @@ export interface ComponentManagerInterface { setPermissionDialogUIHandler(handler: (dialog: PermissionDialog) => void): void + findComponentWithPackageIdentifier(identifier: string): ComponentInterface | undefined editorForNote(note: SNNote): UIFeature getDefaultEditorIdentifier(currentTag?: SNTag): string diff --git a/packages/snjs/lib/Services/ComponentManager/ComponentManager.ts b/packages/snjs/lib/Services/ComponentManager/ComponentManager.ts index fec2bda05..a9583932a 100644 --- a/packages/snjs/lib/Services/ComponentManager/ComponentManager.ts +++ b/packages/snjs/lib/Services/ComponentManager/ComponentManager.ts @@ -358,6 +358,12 @@ export class SNComponentManager return this.viewers.find((viewer) => viewer.identifier === identifier) } + public findComponentWithPackageIdentifier(identifier: string): ComponentInterface | undefined { + return this.items.getDisplayableComponents().find((component) => { + return component.identifier === identifier + }) + } + private componentViewerForSessionKey(key: string): ComponentViewerInterface | undefined { return this.viewers.find((viewer) => viewer.sessionKey === key) } diff --git a/packages/web/src/javascripts/Components/ContentListView/Header/NewNotePreferences.tsx b/packages/web/src/javascripts/Components/ContentListView/Header/NewNotePreferences.tsx index 33a5b6c48..56d03a4c1 100644 --- a/packages/web/src/javascripts/Components/ContentListView/Header/NewNotePreferences.tsx +++ b/packages/web/src/javascripts/Components/ContentListView/Header/NewNotePreferences.tsx @@ -119,12 +119,23 @@ const NewNotePreferences: FunctionComponent = ({ const selectEditorForNewNoteDefault = useCallback( (value: EditorOption['value']) => { - const uuid = Uuid.create(value) + let identifier: NativeFeatureIdentifier | Uuid | undefined = undefined + const feature = NativeFeatureIdentifier.create(value) - if ( - application.features.getFeatureStatus(!uuid.isFailed() ? uuid.getValue() : feature.getValue()) !== - FeatureStatus.Entitled - ) { + if (!feature.isFailed()) { + identifier = feature.getValue() + } else { + const thirdPartyEditor = application.componentManager.findComponentWithPackageIdentifier(value) + if (thirdPartyEditor) { + identifier = Uuid.create(thirdPartyEditor.uuid).getValue() + } + } + + if (!identifier) { + return + } + + if (application.features.getFeatureStatus(identifier) !== FeatureStatus.Entitled) { const editorItem = editorItems.find((item) => item.value === value) if (editorItem) { premiumModal.activate(editorItem.label) diff --git a/packages/web/src/javascripts/Utils/DropdownItemsForEditors.ts b/packages/web/src/javascripts/Utils/DropdownItemsForEditors.ts index 58d0aa9b1..3a53bd0a0 100644 --- a/packages/web/src/javascripts/Utils/DropdownItemsForEditors.ts +++ b/packages/web/src/javascripts/Utils/DropdownItemsForEditors.ts @@ -39,7 +39,7 @@ export function getDropdownItemsForAllEditors(application: WebApplicationInterfa return { label: editor.displayName, - value: editor.uuid, + value: editor.identifier, ...(iconType ? { icon: iconType } : null), ...(tint ? { iconClassName: `text-accessory-tint-${tint}` } : null), }