packages/issue-dashboard-widgets/widgets/due-dates-calendar/app/components/service-resource.js (36 lines of code) (raw):
const SERVICE_FIELDS = 'id,name,applicationName,homeUrl,version';
async function getYouTrackServices(fetchHub, optionalMinYouTrackVersion) {
const data = await fetchHub(`api/rest/services?fields=${SERVICE_FIELDS}&query=applicationName:YouTrack`);
return (data && data.services || []).filter(
service => !!service.homeUrl && (!optionalMinYouTrackVersion ||
satisfyingVersion(service.version, optionalMinYouTrackVersion))
);
// eslint-disable-next-line complexity
function satisfyingVersion(currentVersion, minVersion) {
const currentVersionTokens = currentVersion.split('.').map(Number);
const requestedVersionTokens = minVersion.
split('.').map(Number);
for (let i = 0; i < requestedVersionTokens.length; ++i) {
if ((currentVersionTokens[i] > requestedVersionTokens[i]) ||
(!isNaN(currentVersionTokens[i]) && isNaN(requestedVersionTokens[i]))
) {
return true;
}
if (requestedVersionTokens[i] > currentVersionTokens[i] ||
(isNaN(currentVersionTokens[i]) && !isNaN(requestedVersionTokens[i]))
) {
return false;
}
}
return true;
}
}
async function getYouTrackService(fetchHub, optionalYtId) {
let services = await getYouTrackServices(fetchHub);
if (optionalYtId) {
services = services.filter(service => service.id === optionalYtId);
}
return services[0];
}
export default {
getYouTrackServices, getYouTrackService
};