mirror of https://github.com/buster-so/buster.git
61 lines
1.5 KiB
TypeScript
61 lines
1.5 KiB
TypeScript
import { useGetMetric } from '@/api/buster_rest/metrics';
|
|
import { canEdit } from '@/lib/share';
|
|
import { useMemo } from 'react';
|
|
import last from 'lodash/last';
|
|
import { useChatLayoutContextSelector } from '@/layouts/ChatLayout';
|
|
|
|
export const useIsMetricReadOnly = ({
|
|
metricId,
|
|
readOnly
|
|
}: {
|
|
metricId: string;
|
|
readOnly?: boolean;
|
|
}) => {
|
|
const isVersionHistoryMode = useChatLayoutContextSelector((x) => x.isVersionHistoryMode);
|
|
const metricVersionNumber = useChatLayoutContextSelector((x) => x.metricVersionNumber);
|
|
const {
|
|
data: metricData,
|
|
isFetched,
|
|
isError
|
|
} = useGetMetric(
|
|
{ id: metricId },
|
|
{
|
|
enabled: false,
|
|
select: (x) => ({
|
|
permission: x.permission,
|
|
versions: x.versions,
|
|
version_number: x.version_number
|
|
})
|
|
}
|
|
);
|
|
|
|
const isViewingOldVersion = useMemo(() => {
|
|
if (!metricVersionNumber) return false;
|
|
if (metricVersionNumber !== last(metricData?.versions)?.version_number) return true;
|
|
return false;
|
|
}, [metricVersionNumber, metricData]);
|
|
|
|
const isReadOnly = useMemo(() => {
|
|
if (readOnly) return true;
|
|
if (isError) return true;
|
|
if (!isFetched) return true;
|
|
if (!canEdit(metricData?.permission)) return true;
|
|
if (isVersionHistoryMode) return true;
|
|
if (isViewingOldVersion) return true;
|
|
return false;
|
|
}, [
|
|
isError,
|
|
isFetched,
|
|
metricData,
|
|
metricVersionNumber,
|
|
isVersionHistoryMode,
|
|
isViewingOldVersion
|
|
]);
|
|
|
|
return {
|
|
isVersionHistoryMode,
|
|
isReadOnly,
|
|
isViewingOldVersion
|
|
};
|
|
};
|