dashboard updates

This commit is contained in:
Nate Kelley 2025-09-25 14:39:54 -06:00
parent dac705c1bd
commit 8bf1ad1cff
No known key found for this signature in database
GPG Key ID: FD90372AB8D98B4F
7 changed files with 30 additions and 10 deletions

View File

@ -16,7 +16,10 @@ import { useSaveDashboard } from '../queryRequests';
export const useAddAndRemoveMetricsFromDashboard = () => { export const useAddAndRemoveMetricsFromDashboard = () => {
const { openErrorMessage, openConfirmModal } = useBusterNotifications(); const { openErrorMessage, openConfirmModal } = useBusterNotifications();
const ensureDashboardConfig = useEnsureDashboardConfig({ prefetchData: false }); const ensureDashboardConfig = useEnsureDashboardConfig({ prefetchData: false });
const { mutateAsync: dashboardsUpdateDashboard } = useSaveDashboard({ updateOnSave: true }); const { mutateAsync: dashboardsUpdateDashboard } = useSaveDashboard({
updateOnSave: true,
updateVersion: true,
});
const addAndRemoveMetrics = async ({ const addAndRemoveMetrics = async ({
metrics, metrics,
@ -57,6 +60,7 @@ export const useAddAndRemoveMetricsFromDashboard = () => {
const data = await dashboardsUpdateDashboard({ const data = await dashboardsUpdateDashboard({
id: dashboardId, id: dashboardId,
config: newConfig, config: newConfig,
update_version: true,
}); });
return data; return data;
@ -108,7 +112,10 @@ export const useAddMetricsToDashboard = () => {
const queryClient = useQueryClient(); const queryClient = useQueryClient();
const { openErrorMessage, openConfirmModal } = useBusterNotifications(); const { openErrorMessage, openConfirmModal } = useBusterNotifications();
const ensureDashboardConfig = useEnsureDashboardConfig({ prefetchData: false }); const ensureDashboardConfig = useEnsureDashboardConfig({ prefetchData: false });
const { mutateAsync: dashboardsUpdateDashboard } = useSaveDashboard({ updateOnSave: true }); const { mutateAsync: dashboardsUpdateDashboard } = useSaveDashboard({
updateOnSave: true,
updateVersion: true,
});
const addMetricToDashboard = async ({ const addMetricToDashboard = async ({
metricIds, metricIds,
@ -169,7 +176,10 @@ export const useRemoveMetricsFromDashboard = () => {
const { openConfirmModal, openErrorMessage } = useBusterNotifications(); const { openConfirmModal, openErrorMessage } = useBusterNotifications();
const queryClient = useQueryClient(); const queryClient = useQueryClient();
const ensureDashboardConfig = useEnsureDashboardConfig({ prefetchData: false }); const ensureDashboardConfig = useEnsureDashboardConfig({ prefetchData: false });
const { mutateAsync: dashboardsUpdateDashboard } = useSaveDashboard({ updateOnSave: true }); const { mutateAsync: dashboardsUpdateDashboard } = useSaveDashboard({
updateOnSave: true,
updateVersion: true,
});
const removeMetricFromDashboard = async ({ const removeMetricFromDashboard = async ({
metricIds, metricIds,

View File

@ -10,13 +10,19 @@ import { dashboardsUpdateDashboard } from '../requests';
* useSaveDashboard * useSaveDashboard
* Saves the dashboard to the server and updates cache optionally. * Saves the dashboard to the server and updates cache optionally.
*/ */
export const useSaveDashboard = (params?: { updateOnSave?: boolean }) => { export const useSaveDashboard = (params?: { updateOnSave?: boolean; updateVersion?: boolean }) => {
const updateOnSave = params?.updateOnSave || false; const updateOnSave = params?.updateOnSave || false;
const updateVersion = params?.updateVersion || true;
const queryClient = useQueryClient(); const queryClient = useQueryClient();
const navigate = useNavigate(); const navigate = useNavigate();
return useMutation({ return useMutation({
mutationFn: dashboardsUpdateDashboard, mutationFn: (variables: Parameters<typeof dashboardsUpdateDashboard>[0]) =>
dashboardsUpdateDashboard({
...variables,
update_version: variables.update_version ?? updateVersion,
}),
onMutate: (variables) => { onMutate: (variables) => {
const options = dashboardQueryKeys.dashboardGetDashboard(variables.id, 'LATEST'); const options = dashboardQueryKeys.dashboardGetDashboard(variables.id, 'LATEST');
queryClient.setQueryData(options.queryKey, (old) => { queryClient.setQueryData(options.queryKey, (old) => {

View File

@ -15,7 +15,10 @@ export const useUpdateDashboard = (params?: {
}) => { }) => {
const { updateOnSave = false, updateVersion = false, saveToServer = false } = params || {}; const { updateOnSave = false, updateVersion = false, saveToServer = false } = params || {};
const queryClient = useQueryClient(); const queryClient = useQueryClient();
const { mutateAsync: dashboardsUpdateDashboard } = useSaveDashboard({ updateOnSave }); const { mutateAsync: dashboardsUpdateDashboard } = useSaveDashboard({
updateOnSave,
updateVersion,
});
const mutationFn = async (variables: Parameters<typeof dashboardsUpdateDashboard>[0]) => { const mutationFn = async (variables: Parameters<typeof dashboardsUpdateDashboard>[0]) => {
if (saveToServer) { if (saveToServer) {

View File

@ -3,13 +3,14 @@ import { create } from 'mutative';
import type { BusterDashboard } from '@/api/asset_interfaces/dashboard'; import type { BusterDashboard } from '@/api/asset_interfaces/dashboard';
import { dashboardQueryKeys } from '@/api/query_keys/dashboard'; import { dashboardQueryKeys } from '@/api/query_keys/dashboard';
import { useSaveDashboard } from './useSaveDashboard'; import { useSaveDashboard } from './useSaveDashboard';
import { useUpdateDashboard } from './useUpdateDashboard';
/** /**
* useUpdateDashboardConfig * useUpdateDashboardConfig
* Client-optmistic update for the dashboard.config field, then persists. * Client-optmistic update for the dashboard.config field, then persists.
*/ */
export const useUpdateDashboardConfig = () => { export const useUpdateDashboardConfig = () => {
const { mutateAsync: dashboardsUpdateDashboard } = useSaveDashboard({ const { mutateAsync: dashboardsUpdateDashboard } = useUpdateDashboard({
updateOnSave: true, updateOnSave: true,
}); });
const queryClient = useQueryClient(); const queryClient = useQueryClient();

View File

@ -154,7 +154,6 @@ export const prefetchGetDashboard = async ({
version_number, version_number,
}: Parameters<typeof getDashboardAndInitializeMetrics>[0]) => { }: Parameters<typeof getDashboardAndInitializeMetrics>[0]) => {
const chosenVersionNumber = version_number || 'LATEST'; const chosenVersionNumber = version_number || 'LATEST';
console.log('prefetchGetDashboard', chosenVersionNumber);
const queryFn = async () => const queryFn = async () =>
getDashboardAndInitializeMetrics({ getDashboardAndInitializeMetrics({
id, id,

View File

@ -26,6 +26,7 @@ export const DashboardVersionModal = React.memo(
); );
const { mutateAsync: updateDashboard, isPending: isRestoringVersion } = useSaveDashboard({ const { mutateAsync: updateDashboard, isPending: isRestoringVersion } = useSaveDashboard({
updateOnSave: true, updateOnSave: true,
updateVersion: true,
}); });
const { const {

View File

@ -14,8 +14,8 @@ export const DataGridRow: React.FC<DataGridRowProps> = ({ row, virtualRow }) =>
<tr <tr
className={cn( className={cn(
'hover:bg-item-hover absolute inset-x-0 border-b flex', 'hover:bg-item-hover absolute inset-x-0 border-b flex',
row.getIsSelected() && 'bg-primary/10', row.getIsSelected() && 'bg-primary/10'
'last:border-b-0' // 'last:border-b-0' //don't do it
)} )}
style={{ style={{
transform: `translateY(${virtualRow.start}px)`, transform: `translateY(${virtualRow.start}px)`,