Files
Alex Khomenko 6a11d462cb API: Support versioned frontend clients (#106545)
* Update the generator to include version

* Add versioned APIs

* Update imports

* Prettier
2025-06-13 13:24:37 +03:00

66 lines
1.9 KiB
TypeScript

import { useState } from 'react';
import { useNavigate } from 'react-router-dom-v5-compat';
import { Trans, t } from '@grafana/i18n';
import { Button, ConfirmModal } from '@grafana/ui';
import { Repository, useCreateRepositoryJobsMutation } from 'app/api/clients/provisioning/v0alpha1';
import { PROVISIONING_URL } from '../constants';
interface Props {
repository: Repository;
}
export function SyncRepository({ repository }: Props) {
const [createJob, jobQuery] = useCreateRepositoryJobsMutation();
const [isModalOpen, setIsModalOpen] = useState(false);
const navigate = useNavigate();
const name = repository.metadata?.name;
const onClick = () => {
if (!name) {
return;
}
createJob({
name,
jobSpec: {
pull: {
incremental: false, // will queue a full resync job
},
},
});
setIsModalOpen(false);
};
const isHealthy = Boolean(repository.status?.health.healthy);
return (
<>
<Button
icon="cloud-download"
variant={'secondary'}
tooltip={
isHealthy
? undefined
: t('provisioning.sync-repository.tooltip-unhealthy-repository', 'Unable to pull an unhealthy repository')
}
disabled={jobQuery.isLoading || !name || !isHealthy}
onClick={onClick}
>
<Trans i18nKey="provisioning.sync-repository.pull">Pull</Trans>
</Button>
{!repository.spec?.sync.enabled && (
<ConfirmModal
isOpen={isModalOpen}
title={t('provisioning.sync-repository.title-pull-not-enabled', 'Pull is not enabled')}
body={t('provisioning.sync-repository.body-edit-configuration', 'Edit the configuration')}
confirmText={t('provisioning.sync-repository.button-edit', 'Edit')}
onConfirm={() => navigate(`${PROVISIONING_URL}/${name}/edit`)}
onDismiss={() => setIsModalOpen(false)}
/>
)}
</>
);
}