@code-mancers/strapi-plugin-multi-site-vercel-deploy
Version:
Strapi v4 plugin to trigger and monitor deployment of multiple applications on Vercel
49 lines (42 loc) • 1.61 kB
JavaScript
import { useState, useEffect } from "react";
import { deployAvailability } from "../utils/api";
/**
* @typedef {import('../../../types/typedefs').DeployAvailability} DeployAvailability
* @typedef {import('../../../types/typedefs').ApiErrorType} ApiErrorType
*/
/**
* Fetch and return the availability of the deploy features
* @returns {[Boolean, DeployAvailability, ApiErrorType?]} [isLoading, availability, apiError]
*/
export function useDeployAvailability(selectedSite) {
/** @type {DeployAvailability} */
const initialAvailability = {};
const [availability, setAvailability] = useState(initialAvailability);
/** @type {[ApiErrorType?, (error: ApiErrorType?) => void]} */
const [apiError, setApiError] = useState(undefined);
const [isLoadingAvailability, setIsLoadingAvailability] = useState(true);
useEffect(() => {
if (selectedSite && selectedSite.appFilter) {
deployAvailability(selectedSite)
.then((response) => {
setAvailability(response.data);
})
.catch((error) => {
console.error(
"[vercel-deploy] error while retrieving availability",
error
);
setAvailability({});
if (error && error.response && error.response.status === 403) {
setApiError("FORBIDDEN");
} else {
setApiError("GENERIC_ERROR");
}
})
.finally(() => {
setIsLoadingAvailability(false);
});
}
}, [setIsLoadingAvailability, setAvailability, selectedSite]);
return [isLoadingAvailability, availability, apiError];
}