Platform polish: bulk invite, file requirements, filtering redesign, UX fixes
- F1: Set seed jury/mentors/observers to NONE status (not invited), remove passwords - F2: Add bulk invite UI with checkbox selection and floating toolbar - F3: Add getProjectRequirements backend query + requirement slots on project detail - F4: Redesign filtering section: AI criteria textarea, "What AI sees" card, field-aware eligibility rules with human-readable previews - F5: Auto-redirect to pipeline detail when only one pipeline exists - F6: Make project names clickable in pipeline intake panel - F7: Fix pipeline creation error: edition context fallback + .min(1) validation - Pipeline wizard sections: add isActive locking, info tooltips, UX improvements Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
import { z } from 'zod'
|
||||
import { router, observerProcedure } from '../trpc'
|
||||
import { normalizeCountryToCode } from '@/lib/countries'
|
||||
|
||||
const editionOrStageInput = z.object({
|
||||
stageId: z.string().optional(),
|
||||
@@ -384,9 +385,16 @@ export const analyticsRouter = router({
|
||||
_count: { id: true },
|
||||
})
|
||||
|
||||
return distribution.map((d) => ({
|
||||
countryCode: d.country || 'UNKNOWN',
|
||||
count: d._count.id,
|
||||
// Resolve country names to ISO codes (DB may store "France" instead of "FR")
|
||||
const codeMap = new Map<string, number>()
|
||||
for (const d of distribution) {
|
||||
const resolved = normalizeCountryToCode(d.country) ?? d.country ?? 'UNKNOWN'
|
||||
codeMap.set(resolved, (codeMap.get(resolved) ?? 0) + d._count.id)
|
||||
}
|
||||
|
||||
return Array.from(codeMap.entries()).map(([countryCode, count]) => ({
|
||||
countryCode,
|
||||
count,
|
||||
}))
|
||||
}),
|
||||
|
||||
|
||||
Reference in New Issue
Block a user