diff --git a/src/renderer/components/+preferences/__tests__/extensions.test.tsx b/src/renderer/components/+preferences/__tests__/extensions.test.tsx
index 61e3c75a9f..99200cf546 100644
--- a/src/renderer/components/+preferences/__tests__/extensions.test.tsx
+++ b/src/renderer/components/+preferences/__tests__/extensions.test.tsx
@@ -36,7 +36,7 @@ describe("", () => {
it("renders proper page title", () => {
const { getByText } = render();
- expect(getByText("some-test-extension-id settings")).toBeInTheDocument();
+ expect(getByText("some-test-extension-id preferences")).toBeInTheDocument();
});
it("renders relevant preference items", () => {
@@ -50,6 +50,24 @@ describe("", () => {
expect(queryByTestId(`extension-preference-item-for-some-unrelated-preference-item-id`)).not.toBeInTheDocument();
});
+
+ describe("when tabId param is passed and extension has same showInPreferencesTab param", () => {
+ beforeEach(() => {
+ di.override(currentPathParametersInjectable, () => computed(() => ({ extensionId: "some-test-extension-id", tabId: "license-extension-tab" })));
+ });
+
+ it("does render related preferences for specific tab", () => {
+ const { getByTestId } = render();
+
+ expect(getByTestId(`extension-preference-item-for-preference-for-tab-item-id`)).toBeInTheDocument();
+ });
+
+ it("does not render irrelevant preference items", () => {
+ const { queryByTestId } = render();
+
+ expect(queryByTestId(`extension-preference-item-for-some-unrelated-preference-item-id`)).not.toBeInTheDocument();
+ });
+ });
});
const extensionWithSpecificPreferenceItems: Partial = {
@@ -85,5 +103,22 @@ const extensionWithSpecificPreferenceItems: Partial = {
Input: () => ,
},
},
+
+ {
+ title: "preference for specific tab",
+ id: "preference-for-tab-item-id",
+ showInPreferencesTab: "license-extension-tab",
+
+ components: {
+ Hint: () => ,
+ Input: () => ,
+ },
+ },
],
+
+ appPreferenceTabs: [{
+ title: "License tab",
+ id: "license-extension-tab",
+ orderNumber: 100,
+ }],
};
diff --git a/src/renderer/components/+preferences/extension-preference-items.injectable.ts b/src/renderer/components/+preferences/extension-preference-items.injectable.ts
index 30263369fa..5e54ce45ac 100644
--- a/src/renderer/components/+preferences/extension-preference-items.injectable.ts
+++ b/src/renderer/components/+preferences/extension-preference-items.injectable.ts
@@ -22,21 +22,25 @@ export const extensionPreferenceItemInjectionToken = getInjectionToken => {
+ instantiate: (di, pathParams: IComputedValue>): IComputedValue => {
const extensions = di.inject(rendererExtensionsInjectable);
+ const { extensionId, tabId } = pathParams.get();
const extension = extensions.get().find((extension) => extension.sanitizedExtensionId === extensionId);
+ const preferences = extension.appPreferences.map(preference => ({
+ id: preference.id,
+ ...preference,
+ }));
return computed(() => {
if (!extension) {
return [];
}
- return extension.appPreferences
- .filter(preference => !preference.showInPreferencesTab)
- .map(preference => ({
- id: preference.id,
- ...preference,
- }));
+ if (tabId) {
+ return preferences.filter(preference => preference.showInPreferencesTab == tabId);
+ }
+
+ return preferences.filter(preference => !preference.showInPreferencesTab);
});
},
lifecycle: lifecycleEnum.transient,
diff --git a/src/renderer/components/+preferences/extensions.tsx b/src/renderer/components/+preferences/extensions.tsx
index ca3500b05a..22ff381470 100644
--- a/src/renderer/components/+preferences/extensions.tsx
+++ b/src/renderer/components/+preferences/extensions.tsx
@@ -46,7 +46,7 @@ export const Extensions = withInjectables(
const extension = extensions.get().find((extension) => extension.sanitizedExtensionId === extensionId);
return {
- preferenceItems: di.inject(extensionsPreferenceItemsInjectable, extensionId),
+ preferenceItems: di.inject(extensionsPreferenceItemsInjectable, pathParameters),
extensionName: extension?.manifest.name,
};
},