Files
towercontrol/hooks/useJiraConfig.ts
Julien Froidefond 78a96b9c92 feat: add project key support for Jira analytics
- Introduced `projectKey` and `ignoredProjects` fields in Jira configuration to enhance analytics capabilities.
- Implemented project validation logic in `JiraConfigClient` and integrated it into the `JiraConfigForm` for user input.
- Updated `IntegrationsSettingsPageClient` to display analytics dashboard link based on the configured project key.
- Enhanced API routes to handle project key in Jira sync and user preferences.
- Marked related tasks as complete in `TODO.md`.
2025-09-18 22:08:29 +02:00

83 lines
2.4 KiB
TypeScript

import { useState, useEffect } from 'react';
import { jiraConfigClient, SaveJiraConfigRequest } from '@/clients/jira-config-client';
import { JiraConfig } from '@/lib/types';
export function useJiraConfig() {
const [config, setConfig] = useState<JiraConfig | null>(null);
const [isLoading, setIsLoading] = useState(true);
const [error, setError] = useState<string | null>(null);
// Charger la config au montage
useEffect(() => {
loadConfig();
}, []);
const loadConfig = async () => {
try {
setIsLoading(true);
setError(null);
const jiraConfig = await jiraConfigClient.getJiraConfig();
setConfig(jiraConfig);
} catch (err) {
console.error('Erreur lors du chargement de la config Jira:', err);
setError('Erreur lors du chargement de la configuration');
} finally {
setIsLoading(false);
}
};
const saveConfig = async (configData: SaveJiraConfigRequest) => {
try {
setError(null);
const response = await jiraConfigClient.saveJiraConfig(configData);
if (response.success) {
setConfig(response.jiraConfig);
return { success: true, message: response.message };
} else {
setError('Erreur lors de la sauvegarde');
return { success: false, message: 'Erreur lors de la sauvegarde' };
}
} catch (err) {
const errorMessage = err instanceof Error ? err.message : 'Erreur lors de la sauvegarde de la configuration';
setError(errorMessage);
return { success: false, message: errorMessage };
}
};
const deleteConfig = async () => {
try {
setError(null);
const response = await jiraConfigClient.deleteJiraConfig();
if (response.success) {
setConfig({
baseUrl: '',
email: '',
apiToken: '',
enabled: false,
projectKey: '',
ignoredProjects: []
});
return { success: true, message: response.message };
} else {
setError('Erreur lors de la suppression');
return { success: false, message: 'Erreur lors de la suppression' };
}
} catch (err) {
const errorMessage = err instanceof Error ? err.message : 'Erreur lors de la suppression de la configuration';
setError(errorMessage);
return { success: false, message: errorMessage };
}
};
return {
config,
isLoading,
error,
saveConfig,
deleteConfig,
refetch: loadConfig
};
}