aboutsummaryrefslogtreecommitdiffstats
path: root/server/sonar-web/src/main/js/queries/github-sync.ts
diff options
context:
space:
mode:
Diffstat (limited to 'server/sonar-web/src/main/js/queries/github-sync.ts')
-rw-r--r--server/sonar-web/src/main/js/queries/github-sync.ts34
1 files changed, 29 insertions, 5 deletions
diff --git a/server/sonar-web/src/main/js/queries/github-sync.ts b/server/sonar-web/src/main/js/queries/github-sync.ts
index d2be1351260..67f7e3c8edf 100644
--- a/server/sonar-web/src/main/js/queries/github-sync.ts
+++ b/server/sonar-web/src/main/js/queries/github-sync.ts
@@ -17,9 +17,33 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-import { useQuery } from '@tanstack/react-query';
-import { fetchGithubProvisioningStatus } from '../api/provisioning';
+import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
+import { useContext } from 'react';
+import { fetchGithubProvisioningStatus, syncNowGithubProvisioning } from '../api/provisioning';
+import { AvailableFeaturesContext } from '../app/components/available-features/AvailableFeaturesContext';
+import { Feature } from '../types/features';
-export const useSyncStatusQuery = ({ enabled }: { enabled?: boolean }) => {
- return useQuery(['github_sync', 'status'], fetchGithubProvisioningStatus, { enabled });
-};
+export function useSyncStatusQuery() {
+ const hasGithubProvisioning = useContext(AvailableFeaturesContext).includes(
+ Feature.GithubProvisioning
+ );
+ return useQuery(['github_sync', 'status'], fetchGithubProvisioningStatus, {
+ enabled: hasGithubProvisioning,
+ refetchInterval: 10_000,
+ });
+}
+
+export function useSyncNow() {
+ const queryClient = useQueryClient();
+ const { data } = useSyncStatusQuery();
+ const mutation = useMutation(syncNowGithubProvisioning, {
+ onSuccess: () => {
+ queryClient.invalidateQueries(['github_sync']);
+ },
+ });
+
+ return {
+ synchronizeNow: mutation.mutate,
+ canSyncNow: data && data.enabled && !data.nextSync && !mutation.isLoading,
+ };
+}