mirror of https://github.com/buster-so/buster.git
Merge pull request #1053 from buster-so/big-nate-bus-1857-add-report-id-to-the-get-metric-stuff
Update query request for get data
This commit is contained in:
commit
9ee6013bef
|
@ -143,11 +143,11 @@ export const useGetMetricData = <TData = BusterMetricDataExtended>(
|
||||||
{
|
{
|
||||||
id = '',
|
id = '',
|
||||||
versionNumber: versionNumberProp,
|
versionNumber: versionNumberProp,
|
||||||
reportFileId,
|
cacheDataId,
|
||||||
}: {
|
}: {
|
||||||
id: string | undefined;
|
id: string | undefined;
|
||||||
versionNumber?: number | 'LATEST';
|
versionNumber?: number | 'LATEST';
|
||||||
reportFileId?: string;
|
cacheDataId?: string;
|
||||||
},
|
},
|
||||||
params?: Omit<UseQueryOptions<BusterMetricData, RustApiError, TData>, 'queryKey' | 'queryFn'>
|
params?: Omit<UseQueryOptions<BusterMetricData, RustApiError, TData>, 'queryKey' | 'queryFn'>
|
||||||
) => {
|
) => {
|
||||||
|
@ -172,7 +172,7 @@ export const useGetMetricData = <TData = BusterMetricDataExtended>(
|
||||||
id,
|
id,
|
||||||
version_number: chosenVersionNumber || undefined,
|
version_number: chosenVersionNumber || undefined,
|
||||||
password,
|
password,
|
||||||
report_file_id: reportFileId,
|
report_file_id: cacheDataId,
|
||||||
});
|
});
|
||||||
const latestVersionNumber = getLatestMetricVersion(id);
|
const latestVersionNumber = getLatestMetricVersion(id);
|
||||||
const isLatest =
|
const isLatest =
|
||||||
|
|
|
@ -26,9 +26,19 @@ export const metricsGetList = (
|
||||||
initialDataUpdatedAt: 0,
|
initialDataUpdatedAt: 0,
|
||||||
});
|
});
|
||||||
|
|
||||||
export const metricsGetData = (id: string, version_number: number | 'LATEST') =>
|
export const metricsGetData = (
|
||||||
|
id: string,
|
||||||
|
version_number: number | 'LATEST',
|
||||||
|
cacheDataId?: string
|
||||||
|
) =>
|
||||||
queryOptions<BusterMetricDataExtended>({
|
queryOptions<BusterMetricDataExtended>({
|
||||||
queryKey: ['metrics', 'data', id, version_number || 'LATEST'] as const,
|
queryKey: [
|
||||||
|
'metrics',
|
||||||
|
'data',
|
||||||
|
id,
|
||||||
|
version_number || 'LATEST',
|
||||||
|
cacheDataId || 'live-data',
|
||||||
|
] as const,
|
||||||
staleTime: 1000 * 60 * 30, // 30 minutes,
|
staleTime: 1000 * 60 * 30, // 30 minutes,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -24,6 +24,7 @@ export type MetricChartCardProps = {
|
||||||
animate?: boolean;
|
animate?: boolean;
|
||||||
renderChartContent?: boolean; // we do this to avoid expensive rendering if off screen
|
renderChartContent?: boolean; // we do this to avoid expensive rendering if off screen
|
||||||
disableTooltip?: boolean;
|
disableTooltip?: boolean;
|
||||||
|
cacheDataId?: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
const stableMetricSelect = ({
|
const stableMetricSelect = ({
|
||||||
|
@ -60,6 +61,7 @@ export const MetricChartCard = React.memo(
|
||||||
animate = true,
|
animate = true,
|
||||||
renderChartContent = true,
|
renderChartContent = true,
|
||||||
disableTooltip,
|
disableTooltip,
|
||||||
|
cacheDataId,
|
||||||
},
|
},
|
||||||
ref
|
ref
|
||||||
) => {
|
) => {
|
||||||
|
@ -71,7 +73,7 @@ export const MetricChartCard = React.memo(
|
||||||
data: metricData,
|
data: metricData,
|
||||||
isFetched: isFetchedMetricData,
|
isFetched: isFetchedMetricData,
|
||||||
error: metricDataError,
|
error: metricDataError,
|
||||||
} = useGetMetricData({ id: metricId, versionNumber });
|
} = useGetMetricData({ id: metricId, versionNumber, cacheDataId });
|
||||||
|
|
||||||
//data config
|
//data config
|
||||||
const loadingData = !isFetchedMetricData;
|
const loadingData = !isFetchedMetricData;
|
||||||
|
|
|
@ -21,11 +21,13 @@ import {
|
||||||
export const ReportMetricThreeDotMenu = ({
|
export const ReportMetricThreeDotMenu = ({
|
||||||
metricId,
|
metricId,
|
||||||
metricVersionNumber,
|
metricVersionNumber,
|
||||||
|
reportId,
|
||||||
}: {
|
}: {
|
||||||
metricId: string;
|
metricId: string;
|
||||||
metricVersionNumber: number | undefined;
|
metricVersionNumber: number | undefined;
|
||||||
|
reportId: string;
|
||||||
}) => {
|
}) => {
|
||||||
const items = useReportMetricThreeDotMenu({ metricId, metricVersionNumber });
|
const items = useReportMetricThreeDotMenu({ metricId, metricVersionNumber, reportId });
|
||||||
|
|
||||||
return <MetricHeaderSecondaryWrapperDropdown dropdownItems={items} />;
|
return <MetricHeaderSecondaryWrapperDropdown dropdownItems={items} />;
|
||||||
};
|
};
|
||||||
|
@ -33,9 +35,11 @@ export const ReportMetricThreeDotMenu = ({
|
||||||
const useReportMetricThreeDotMenu = ({
|
const useReportMetricThreeDotMenu = ({
|
||||||
metricId,
|
metricId,
|
||||||
metricVersionNumber,
|
metricVersionNumber,
|
||||||
|
reportId,
|
||||||
}: {
|
}: {
|
||||||
metricId: string;
|
metricId: string;
|
||||||
metricVersionNumber: number | undefined;
|
metricVersionNumber: number | undefined;
|
||||||
|
reportId: string;
|
||||||
}): IDropdownItems => {
|
}): IDropdownItems => {
|
||||||
const editor = useEditorRef();
|
const editor = useEditorRef();
|
||||||
const element = useElement();
|
const element = useElement();
|
||||||
|
@ -52,7 +56,11 @@ const useReportMetricThreeDotMenu = ({
|
||||||
metricId,
|
metricId,
|
||||||
metricVersionNumber,
|
metricVersionNumber,
|
||||||
});
|
});
|
||||||
const downloadCSV = useDownloadMetricDataCSV({ metricId, metricVersionNumber });
|
const downloadCSV = useDownloadMetricDataCSV({
|
||||||
|
metricId,
|
||||||
|
metricVersionNumber,
|
||||||
|
cacheDataId: reportId,
|
||||||
|
});
|
||||||
const downloadPNG = useDownloadPNGSelectMenu({ metricId, metricVersionNumber });
|
const downloadPNG = useDownloadPNGSelectMenu({ metricId, metricVersionNumber });
|
||||||
const renameMetric = useRenameMetricOnPage({
|
const renameMetric = useRenameMetricOnPage({
|
||||||
metricId,
|
metricId,
|
||||||
|
|
|
@ -159,16 +159,21 @@ export const useRenameMetricOnPage = ({
|
||||||
export const useDownloadMetricDataCSV = ({
|
export const useDownloadMetricDataCSV = ({
|
||||||
metricId,
|
metricId,
|
||||||
metricVersionNumber,
|
metricVersionNumber,
|
||||||
|
cacheDataId,
|
||||||
}: {
|
}: {
|
||||||
metricId: string;
|
metricId: string;
|
||||||
metricVersionNumber: number | undefined;
|
metricVersionNumber: number | undefined;
|
||||||
|
cacheDataId?: string;
|
||||||
}) => {
|
}) => {
|
||||||
const [isDownloading, setIsDownloading] = useState(false);
|
const [isDownloading, setIsDownloading] = useState(false);
|
||||||
const { data: metricData } = useGetMetricData(
|
const { data: metricData } = useGetMetricData(
|
||||||
{ id: metricId, versionNumber: metricVersionNumber },
|
{ id: metricId, versionNumber: metricVersionNumber, cacheDataId },
|
||||||
{ enabled: false }
|
{ enabled: false }
|
||||||
);
|
);
|
||||||
const { data: name } = useGetMetric({ id: metricId }, { select: (x) => x.name });
|
const { data: name } = useGetMetric(
|
||||||
|
{ id: metricId },
|
||||||
|
{ select: useCallback((x: BusterMetric) => x.name, []) }
|
||||||
|
);
|
||||||
|
|
||||||
return useMemo(
|
return useMemo(
|
||||||
() => ({
|
() => ({
|
||||||
|
|
|
@ -1,27 +1,31 @@
|
||||||
import React, { useRef } from 'react';
|
import React, { useRef } from 'react';
|
||||||
import { MetricChartCard } from '@/components/features/metrics/MetricChartCard';
|
import { MetricChartCard } from '@/components/features/metrics/MetricChartCard';
|
||||||
import { ReportMetricThreeDotMenu } from '@/components/features/metrics/ReportMetricItem';
|
import { ReportMetricThreeDotMenu } from '@/components/features/metrics/ReportMetricItem';
|
||||||
|
import { useGetReportParams } from '@/context/Reports/useGetReportParams';
|
||||||
import { useInViewport } from '@/hooks/useInViewport';
|
import { useInViewport } from '@/hooks/useInViewport';
|
||||||
|
|
||||||
export const MetricContent = React.memo(
|
export const MetricContent = React.memo(
|
||||||
({
|
({
|
||||||
metricId,
|
metricId,
|
||||||
metricVersionNumber,
|
metricVersionNumber,
|
||||||
|
|
||||||
isExportMode = false,
|
isExportMode = false,
|
||||||
readOnly = false,
|
readOnly = false,
|
||||||
className,
|
className,
|
||||||
}: {
|
}: {
|
||||||
metricId: string;
|
metricId: string;
|
||||||
metricVersionNumber: number | undefined;
|
metricVersionNumber: number | undefined;
|
||||||
|
|
||||||
readOnly?: boolean;
|
readOnly?: boolean;
|
||||||
isExportMode?: boolean;
|
isExportMode?: boolean;
|
||||||
className?: string;
|
className?: string;
|
||||||
}) => {
|
}) => {
|
||||||
|
const { reportId = '' } = useGetReportParams();
|
||||||
const ref = useRef<HTMLDivElement>(null);
|
const ref = useRef<HTMLDivElement>(null);
|
||||||
const hasBeenInViewport = useRef(false);
|
const hasBeenInViewport = useRef(false);
|
||||||
|
|
||||||
const [inViewport] = useInViewport(ref, {
|
const [inViewport] = useInViewport(ref, {
|
||||||
threshold: 0.25,
|
threshold: 0.275,
|
||||||
});
|
});
|
||||||
if (inViewport && !hasBeenInViewport.current) {
|
if (inViewport && !hasBeenInViewport.current) {
|
||||||
hasBeenInViewport.current = true;
|
hasBeenInViewport.current = true;
|
||||||
|
@ -38,11 +42,13 @@ export const MetricContent = React.memo(
|
||||||
renderChartContent={renderChart}
|
renderChartContent={renderChart}
|
||||||
animate={!isExportMode}
|
animate={!isExportMode}
|
||||||
className={className}
|
className={className}
|
||||||
|
cacheDataId={reportId}
|
||||||
headerSecondaryContent={
|
headerSecondaryContent={
|
||||||
!readOnly && (
|
!readOnly && (
|
||||||
<ReportMetricThreeDotMenu
|
<ReportMetricThreeDotMenu
|
||||||
metricId={metricId}
|
metricId={metricId}
|
||||||
metricVersionNumber={metricVersionNumber}
|
metricVersionNumber={metricVersionNumber}
|
||||||
|
reportId={reportId}
|
||||||
/>
|
/>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,39 +0,0 @@
|
||||||
import {
|
|
||||||
SlateElement,
|
|
||||||
type SlateElementProps,
|
|
||||||
type TCaptionProps,
|
|
||||||
type TResizableProps,
|
|
||||||
} from 'platejs';
|
|
||||||
import type { TMetricElement } from '../../plugins/metric-kit';
|
|
||||||
import { MetricContent } from './MetricContent';
|
|
||||||
import { MetricEmbedPlaceholder } from './MetricPlaceholder';
|
|
||||||
|
|
||||||
export const MetricElementStatic = (
|
|
||||||
props: SlateElementProps<TMetricElement & TCaptionProps & TResizableProps>
|
|
||||||
) => {
|
|
||||||
const metricId = props.element.metricId;
|
|
||||||
const metricVersionNumber = props.element.metricVersionNumber;
|
|
||||||
const readOnly = true;
|
|
||||||
const { align = 'center', caption, url, width } = props.element;
|
|
||||||
|
|
||||||
const content = metricId ? (
|
|
||||||
<MetricContent
|
|
||||||
metricId={metricId}
|
|
||||||
metricVersionNumber={metricVersionNumber}
|
|
||||||
readOnly={readOnly}
|
|
||||||
/>
|
|
||||||
) : (
|
|
||||||
<MetricEmbedPlaceholder />
|
|
||||||
);
|
|
||||||
|
|
||||||
return (
|
|
||||||
<SlateElement {...props} className="mt-2.5 mb-4.5">
|
|
||||||
<figure className="relative m-0 inline-block" style={{ width }}>
|
|
||||||
<div className="relative max-w-full min-w-[92px]" style={{ textAlign: align }}>
|
|
||||||
{content}
|
|
||||||
</div>
|
|
||||||
<div className="h-0">{props.children}</div>
|
|
||||||
</figure>
|
|
||||||
</SlateElement>
|
|
||||||
);
|
|
||||||
};
|
|
|
@ -37,11 +37,11 @@ export function SlashInputElement(props: PlateElementProps<TSlashInputElement>)
|
||||||
<InlineCombobox
|
<InlineCombobox
|
||||||
element={element}
|
element={element}
|
||||||
trigger="/"
|
trigger="/"
|
||||||
className="bg-item-select relative rounded pl-2 pr-1.5 mr-1 overflow-hidden w-fit flex items-center"
|
className="bg-item-select relative rounded pl-2 pr-1.5 mr-1 overflow-hidden w-fit flex items-center text-gray-dark"
|
||||||
>
|
>
|
||||||
<InlineComboboxInput
|
<InlineComboboxInput
|
||||||
placeholder={placeholder}
|
placeholder={placeholder}
|
||||||
className="bg-item-select text-gray-light ml-1 rounded-r"
|
className="bg-item-select text-gray-light ml-0.5 rounded-r"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<InlineComboboxContent>
|
<InlineComboboxContent>
|
||||||
|
|
Loading…
Reference in New Issue