Skip to content

Commit 1babb57

Browse files
committed
ui: Export URL setters from useQueryState for external wrapper hooks
This PR refactors the URL state hooks to export raw setters that external wrapper hooks can use. Changes: - useQueryState: Exports raw URL setters (setExpressionParam, setSumByParam, setGroupByParam) for external wrapper hooks - useProfileFilters: Exports setAppliedFilters for wrapper hooks
1 parent 464c52b commit 1babb57

File tree

12 files changed

+841
-36
lines changed

12 files changed

+841
-36
lines changed

ui/packages/shared/components/src/ParcaContext/index.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ interface Props {
6868
disableProfileTypesDropdown?: boolean;
6969
labelnames?: string[];
7070
disableExplorativeQuerying?: boolean;
71+
profileFilterDefaults?: unknown[];
7172
};
7273
profileViewExternalMainActions?: ReactNode;
7374
profileViewExternalSubActions?: ReactNode;

ui/packages/shared/components/src/hooks/URLState/index.test.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,10 @@
1111
// See the License for the specific language governing permissions and
1212
// limitations under the License.
1313

14-
import {ReactNode} from 'react';
14+
import {ReactNode, act} from 'react';
1515

1616
// eslint-disable-next-line import/named
17-
import {act, renderHook, waitFor} from '@testing-library/react';
17+
import {renderHook, waitFor} from '@testing-library/react';
1818
import {beforeEach, describe, expect, it, vi} from 'vitest';
1919

2020
import {

ui/packages/shared/profile/src/ProfileSelector/index.tsx

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,10 @@ import {TEST_IDS, testId} from '@parca/test-utils';
3030
import {millisToProtoTimestamp, type NavigateFunction} from '@parca/utilities';
3131

3232
import {useMetricsGraphDimensions} from '../MetricsGraph/useMetricsGraphDimensions';
33+
import {
34+
ProfileFilter,
35+
useProfileFilters,
36+
} from '../ProfileView/components/ProfileFilters/useProfileFilters';
3337
import {QueryControls} from '../QueryControls';
3438
import {LabelsQueryProvider, useLabelsQueryProvider} from '../contexts/LabelsQueryProvider';
3539
import {UnifiedLabelsProvider} from '../contexts/UnifiedLabelsContext';
@@ -119,6 +123,15 @@ const ProfileSelector = ({
119123
const [queryBrowserMode, setQueryBrowserMode] = useURLState('query_browser_mode');
120124
const batchUpdates = useURLStateBatch();
121125

126+
const profileFilterDefaults = viewComponent?.profileFilterDefaults as ProfileFilter[] | undefined;
127+
const {forceApplyFilters} = useProfileFilters();
128+
129+
const handleProfileTypeChange = useCallback(() => {
130+
if (profileFilterDefaults != null && profileFilterDefaults.length > 0) {
131+
forceApplyFilters(profileFilterDefaults);
132+
}
133+
}, [forceApplyFilters, profileFilterDefaults]);
134+
122135
// Use the new useQueryState hook - reads directly from URL params
123136
const {
124137
querySelection,
@@ -133,7 +146,7 @@ const ProfileSelector = ({
133146
setProfileSelection,
134147
sumByLoading,
135148
draftParsedQuery,
136-
} = useQueryState({suffix});
149+
} = useQueryState({suffix, onProfileTypeChange: handleProfileTypeChange});
137150

138151
// Use draft state for local state instead of committed state
139152
const [timeRangeSelection, setTimeRangeSelection] = useState(

ui/packages/shared/profile/src/ProfileSelector/useAutoQuerySelector.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ export const useAutoQuerySelector = ({
137137
}
138138
dispatch(setAutoQuery('true'));
139139
let profileType = profileTypesData.types.find(
140-
type => type.name === 'parca_agent' && type.delta
140+
type => type.name === 'parca_agent' && type.sampleType === 'samples' && type.delta
141141
);
142142
if (profileType == null) {
143143
profileType = profileTypesData.types.find(

ui/packages/shared/profile/src/ProfileView/components/ProfileFilters/useProfileFilters.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -237,8 +237,10 @@ export const useProfileFilters = (): {
237237
removeFilter: (id: string) => void;
238238
updateFilter: (id: string, updates: Partial<ProfileFilter>) => void;
239239
resetFilters: () => void;
240+
setAppliedFilters: (filters: ProfileFilter[]) => void;
241+
forceApplyFilters: (filters: ProfileFilter[]) => void;
240242
} => {
241-
const {appliedFilters, setAppliedFilters} = useProfileFiltersUrlState();
243+
const {appliedFilters, setAppliedFilters, forceApplyFilters} = useProfileFiltersUrlState();
242244
const resetFlameGraphState = useResetFlameGraphState();
243245

244246
const [localFilters, setLocalFilters] = useState<ProfileFilter[]>(appliedFilters ?? []);
@@ -422,5 +424,7 @@ export const useProfileFilters = (): {
422424
removeFilter,
423425
updateFilter,
424426
resetFilters,
427+
setAppliedFilters,
428+
forceApplyFilters,
425429
};
426430
};

0 commit comments

Comments
 (0)