Newer
Older
import {
skipToken,
useGetDatabaseQuery,
usePersistModelMutation,
useUnpersistModelMutation,
} from "metabase/api";
import { DelayedLoadingAndErrorWrapper } from "metabase/components/LoadingAndErrorWrapper/DelayedLoadingAndErrorWrapper";
import { Switch, Tooltip } from "metabase/ui";
import type Question from "metabase-lib/v1/Question";
import type { ModelCacheRefreshStatus } from "metabase-types/api";
export function ModelCacheToggle({
persistedModel,
model,
}: {
persistedModel?: ModelCacheRefreshStatus;
}) {
const [persistModel] = usePersistModelMutation();
const [unpersistModel] = useUnpersistModelMutation();
const {
data: database,
isLoading: isLoadingDb,
error: dbError,
} = useGetDatabaseQuery(
model.databaseId() ? { id: model.databaseId() as number } : skipToken,
);
if (isLoadingDb || dbError) {
return (
<DelayedLoadingAndErrorWrapper loading={isLoadingDb} error={dbError} />
);
const isPersisted = persistedModel && persistedModel.state !== "off";
const modelId = model.id();
Noah Moss
committed
const userCanPersist = model.canManageDB();
const canPersistDatabase = database?.settings?.["persist-models-enabled"];
if (!canPersistDatabase || !userCanPersist) {
const tooltipLabel = !canPersistDatabase
? t`Model persistence is disabled for this database`
: t`You don't have permission to modify model persistence`;
Noah Moss
committed
<Tooltip label={tooltipLabel}>
{/* need this div so that disabled input doesn't swallow pointer events */}
<div>
<Switch
label={t`Persist model data`}
size="sm"
Noah Moss
committed
checked={isPersisted}
disabled
/>
</div>
</Tooltip>
);
}
const toggleModelPersistence = isPersisted
? () => unpersistModel(modelId)
: () => persistModel(modelId);
<Switch
label={t`Persist model data`}
size="sm"
checked={isPersisted}
onChange={toggleModelPersistence}
Noah Moss
committed
disabled={false}