diff --git a/src/vs/workbench/contrib/positronVariables/browser/components/groupingMenuButton.tsx b/src/vs/workbench/contrib/positronVariables/browser/components/groupingMenuButton.tsx index 0b1c7916eedf..3f6d36c884b2 100644 --- a/src/vs/workbench/contrib/positronVariables/browser/components/groupingMenuButton.tsx +++ b/src/vs/workbench/contrib/positronVariables/browser/components/groupingMenuButton.tsx @@ -7,7 +7,7 @@ import './groupingMenuButton.css'; // React. -import React from 'react'; +import React, { useState, useEffect } from 'react'; // Other dependencies. import { localize } from '../../../../../nls.js'; @@ -16,6 +16,7 @@ import { ActionBarMenuButton } from '../../../../../platform/positronActionBar/b import { usePositronVariablesContext } from '../positronVariablesContext.js'; import { PositronVariablesGrouping } from '../../../../services/positronVariables/common/interfaces/positronVariablesInstance.js'; import { ThemeIcon } from '../../../../../base/common/themables.js'; +import { DisposableStore } from '../../../../../base/common/lifecycle.js'; /** * Localized strings. @@ -30,6 +31,28 @@ export const GroupingMenuButton = () => { // Context hooks. const positronVariablesContext = usePositronVariablesContext(); + // State for current grouping + const [currentGrouping, setCurrentGrouping] = useState(); + + // Subscribe to changes in entries (which happen when grouping changes) + useEffect(() => { + const disposableStore = new DisposableStore(); + + if (positronVariablesContext.activePositronVariablesInstance) { + // Subscribe to entries changes + disposableStore.add( + positronVariablesContext.activePositronVariablesInstance.onDidChangeEntries(() => { + setCurrentGrouping(positronVariablesContext.activePositronVariablesInstance?.grouping); + }) + ); + + // Set initial value + setCurrentGrouping(positronVariablesContext.activePositronVariablesInstance.grouping); + } + + return () => disposableStore.dispose(); + }, [positronVariablesContext.activePositronVariablesInstance]); + // Builds the actions. const actions = () => { // This can't happen. @@ -37,9 +60,6 @@ export const GroupingMenuButton = () => { return []; } - // Get the current grouping. - const grouping = positronVariablesContext.activePositronVariablesInstance.grouping; - // Build the actions. const actions: IAction[] = []; @@ -50,7 +70,7 @@ export const GroupingMenuButton = () => { tooltip: '', class: undefined, enabled: true, - checked: grouping === PositronVariablesGrouping.None, + checked: currentGrouping === PositronVariablesGrouping.None, run: () => { if (!positronVariablesContext.activePositronVariablesInstance) { return; @@ -71,7 +91,7 @@ export const GroupingMenuButton = () => { tooltip: '', class: undefined, enabled: true, - checked: grouping === PositronVariablesGrouping.Kind, + checked: currentGrouping === PositronVariablesGrouping.Kind, run: () => { if (!positronVariablesContext.activePositronVariablesInstance) { return; @@ -89,7 +109,7 @@ export const GroupingMenuButton = () => { tooltip: '', class: undefined, enabled: true, - checked: grouping === PositronVariablesGrouping.Size, + checked: currentGrouping === PositronVariablesGrouping.Size, run: () => { if (!positronVariablesContext.activePositronVariablesInstance) { return; diff --git a/src/vs/workbench/contrib/positronVariables/browser/components/sortingMenuButton.tsx b/src/vs/workbench/contrib/positronVariables/browser/components/sortingMenuButton.tsx index fa96796354fa..1bc794d871d7 100644 --- a/src/vs/workbench/contrib/positronVariables/browser/components/sortingMenuButton.tsx +++ b/src/vs/workbench/contrib/positronVariables/browser/components/sortingMenuButton.tsx @@ -7,7 +7,7 @@ import './groupingMenuButton.css'; // React. -import React from 'react'; +import React, { useState, useEffect } from 'react'; // Other dependencies. import { localize } from '../../../../../nls.js'; @@ -16,6 +16,7 @@ import { ActionBarMenuButton } from '../../../../../platform/positronActionBar/b import { usePositronVariablesContext } from '../positronVariablesContext.js'; import { PositronVariablesSorting } from '../../../../services/positronVariables/common/interfaces/positronVariablesInstance.js'; import { ThemeIcon } from '../../../../../base/common/themables.js'; +import { DisposableStore } from '../../../../../base/common/lifecycle.js'; /** * Localized strings. @@ -30,6 +31,31 @@ export const SortingMenuButton = () => { // Context hooks. const positronVariablesContext = usePositronVariablesContext(); + // State for current sorting and highlight recent + const [currentSorting, setCurrentSorting] = useState(); + const [currentHighlightRecent, setCurrentHighlightRecent] = useState(); + + // Subscribe to changes in entries (which happen when sorting changes) + useEffect(() => { + const disposableStore = new DisposableStore(); + + if (positronVariablesContext.activePositronVariablesInstance) { + // Subscribe to entries changes + disposableStore.add( + positronVariablesContext.activePositronVariablesInstance.onDidChangeEntries(() => { + setCurrentSorting(positronVariablesContext.activePositronVariablesInstance?.sorting); + setCurrentHighlightRecent(positronVariablesContext.activePositronVariablesInstance?.highlightRecent); + }) + ); + + // Set initial values + setCurrentSorting(positronVariablesContext.activePositronVariablesInstance.sorting); + setCurrentHighlightRecent(positronVariablesContext.activePositronVariablesInstance.highlightRecent); + } + + return () => disposableStore.dispose(); + }, [positronVariablesContext.activePositronVariablesInstance]); + // Builds the actions. const actions = () => { // This can't happen. @@ -37,12 +63,6 @@ export const SortingMenuButton = () => { return []; } - // Get the current sorting. - const sorting = positronVariablesContext.activePositronVariablesInstance. - sorting; - const highlightRecent = positronVariablesContext.activePositronVariablesInstance. - highlightRecent; - // Build the actions. const actions: IAction[] = []; @@ -53,7 +73,7 @@ export const SortingMenuButton = () => { tooltip: '', class: undefined, enabled: true, - checked: sorting === PositronVariablesSorting.Name, + checked: currentSorting === PositronVariablesSorting.Name, run: () => { if (!positronVariablesContext.activePositronVariablesInstance) { return; @@ -71,7 +91,7 @@ export const SortingMenuButton = () => { tooltip: '', class: undefined, enabled: true, - checked: sorting === PositronVariablesSorting.Size, + checked: currentSorting === PositronVariablesSorting.Size, run: () => { if (!positronVariablesContext.activePositronVariablesInstance) { return; @@ -89,7 +109,7 @@ export const SortingMenuButton = () => { tooltip: '', class: undefined, enabled: true, - checked: sorting === PositronVariablesSorting.Recent, + checked: currentSorting === PositronVariablesSorting.Recent, run: () => { if (!positronVariablesContext.activePositronVariablesInstance) { return; @@ -110,14 +130,14 @@ export const SortingMenuButton = () => { tooltip: '', class: undefined, enabled: true, - checked: highlightRecent, + checked: currentHighlightRecent, run: () => { if (!positronVariablesContext.activePositronVariablesInstance) { return; } positronVariablesContext.activePositronVariablesInstance.highlightRecent = - !highlightRecent; + !currentHighlightRecent; } }); diff --git a/src/vs/workbench/services/positronVariables/common/positronVariablesInstance.ts b/src/vs/workbench/services/positronVariables/common/positronVariablesInstance.ts index bcf3338a8cdc..c570cdd17981 100644 --- a/src/vs/workbench/services/positronVariables/common/positronVariablesInstance.ts +++ b/src/vs/workbench/services/positronVariables/common/positronVariablesInstance.ts @@ -242,6 +242,9 @@ export class PositronVariablesInstance extends Disposable implements IPositronVa */ set highlightRecent(highlighRecent: boolean) { this._highlightRecent = highlighRecent; + + // Update entries to trigger onDidChangeEntries event + this.updateEntries(); } /**