feat: implement project ignore list for Jira synchronization
- Updated `JiraConfigForm` to include an input for ignored projects, allowing users to specify projects to exclude from synchronization. - Enhanced `JiraService` with a method to filter out tasks from ignored projects, improving task management. - Modified user preferences to store ignored projects, ensuring persistence across sessions. - Updated API routes to handle ignored projects in configuration, enhancing overall functionality. - Marked the corresponding task as complete in TODO.md.
This commit is contained in:
@@ -11,7 +11,8 @@ export function JiraConfigForm() {
|
||||
const [formData, setFormData] = useState({
|
||||
baseUrl: '',
|
||||
email: '',
|
||||
apiToken: ''
|
||||
apiToken: '',
|
||||
ignoredProjects: [] as string[]
|
||||
});
|
||||
const [isSubmitting, setIsSubmitting] = useState(false);
|
||||
const [message, setMessage] = useState<{ type: 'success' | 'error', text: string } | null>(null);
|
||||
@@ -22,7 +23,8 @@ export function JiraConfigForm() {
|
||||
setFormData({
|
||||
baseUrl: config.baseUrl || '',
|
||||
email: config.email || '',
|
||||
apiToken: config.apiToken || ''
|
||||
apiToken: config.apiToken || '',
|
||||
ignoredProjects: config.ignoredProjects || []
|
||||
});
|
||||
}
|
||||
}, [config]);
|
||||
@@ -71,7 +73,8 @@ export function JiraConfigForm() {
|
||||
setFormData({
|
||||
baseUrl: '',
|
||||
email: '',
|
||||
apiToken: ''
|
||||
apiToken: '',
|
||||
ignoredProjects: []
|
||||
});
|
||||
setMessage({
|
||||
type: 'success',
|
||||
@@ -136,6 +139,20 @@ export function JiraConfigForm() {
|
||||
{config?.apiToken ? '••••••••' : 'Non défini'}
|
||||
</code>
|
||||
</div>
|
||||
<div>
|
||||
<span className="text-[var(--muted-foreground)]">Projets ignorés:</span>{' '}
|
||||
{config?.ignoredProjects && config.ignoredProjects.length > 0 ? (
|
||||
<div className="mt-1 space-x-1">
|
||||
{config.ignoredProjects.map(project => (
|
||||
<code key={project} className="bg-[var(--background)] px-2 py-1 rounded text-xs">
|
||||
{project}
|
||||
</code>
|
||||
))}
|
||||
</div>
|
||||
) : (
|
||||
<span className="text-xs">Aucun</span>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
@@ -201,6 +218,39 @@ export function JiraConfigForm() {
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<label className="block text-sm font-medium mb-2">
|
||||
Projets à ignorer (optionnel)
|
||||
</label>
|
||||
<input
|
||||
type="text"
|
||||
value={formData.ignoredProjects.join(', ')}
|
||||
onChange={(e) => {
|
||||
const projects = e.target.value
|
||||
.split(',')
|
||||
.map(p => p.trim().toUpperCase())
|
||||
.filter(p => p.length > 0);
|
||||
setFormData(prev => ({ ...prev, ignoredProjects: projects }));
|
||||
}}
|
||||
placeholder="DEMO, TEST, SANDBOX"
|
||||
className="w-full px-3 py-2 border border-[var(--border)] rounded bg-[var(--background)] text-[var(--foreground)] focus:outline-none focus:ring-2 focus:ring-[var(--primary)] focus:border-transparent"
|
||||
/>
|
||||
<p className="text-xs text-[var(--muted-foreground)] mt-1">
|
||||
Liste des clés de projets à ignorer lors de la synchronisation, séparées par des virgules (ex: DEMO, TEST, SANDBOX).
|
||||
Ces projets ne seront pas synchronisés vers TowerControl.
|
||||
</p>
|
||||
{formData.ignoredProjects.length > 0 && (
|
||||
<div className="mt-2 space-x-1">
|
||||
<span className="text-xs text-[var(--muted-foreground)]">Projets qui seront ignorés:</span>
|
||||
{formData.ignoredProjects.map(project => (
|
||||
<code key={project} className="bg-[var(--muted)] text-[var(--muted-foreground)] px-2 py-1 rounded text-xs">
|
||||
{project}
|
||||
</code>
|
||||
))}
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
|
||||
<div className="flex gap-3">
|
||||
<Button
|
||||
type="submit"
|
||||
|
||||
Reference in New Issue
Block a user