Skip to content

Feat/skill selector create#90

Merged
YnotMax merged 2 commits into
MatchDock:developfrom
karinaperes:feat/skill-selector-create
Jun 29, 2026
Merged

Feat/skill selector create#90
YnotMax merged 2 commits into
MatchDock:developfrom
karinaperes:feat/skill-selector-create

Conversation

@karinaperes

Copy link
Copy Markdown
Contributor

feat: busca e cadastro de skills por categoria no onboarding

Descrição

Substitui o modelo fixo de seleção de skills por um autocomplete inline em cada quadro de categoria, permitindo que o usuário pesquise skills existentes e cadastre novas diretamente no fluxo de onboarding.

Problema resolvido

O usuário ficava limitado às skills pré-cadastradas. Tecnologias que não estavam na lista não podiam ser adicionadas ao perfil, tornando o cadastro incompleto. Com a lista crescendo, localizar uma skill também se tornava difícil.

O que mudou

tagCategories.ts

  • Adicionado campo key em cada categoria (core_tech, ia_future, etc.) para identificação única no estado e no Firestore
  • Tags ordenadas alfabeticamente por localeCompare com locale pt-BR

TagCategoryCard.tsx

  • Campo de busca inline no topo de cada quadro com filtro em tempo real (case-insensitive)
  • Quando nenhuma skill é encontrada, exibe botão + Adicionar "X" que cria a skill no Firestore com a categoria do quadro
  • Skill criada aparece imediatamente na lista com badge NOVA, sem reload
  • Fechamento do dropdown via mousedown no document — mais confiável que onBlur + setTimeout

SkillService.ts

  • createOrGetSkill passa a aceitar category: string | null como segundo parâmetro (retrocompatível)
  • createdAt tipado com Timestamp.now() em vez de new Date() as any

useOnboardingForm.ts

  • Novo estado extraTagsByCategory: Record<string, string[]> para guardar skills criadas por categoria
  • handleCreateSkillInCategory cria a skill no Firestore e atualiza o estado local imediatamente
  • extraTagsByCategory persistido e restaurado do Firestore no fetchMemberData
  • profileData tipado explicitamente — removido any
  • skillList removido (não era mais necessário nessa arquitetura)

FirebaseSkillRepository.ts

  • Parâmetros de updateSkill renomeados para _id e _data para satisfazer o lint (no-unused-vars)

firestore.rules

  • Nova regra para a coleção skills: leitura para autenticados, criação com validação de campos obrigatórios e ID determinístico (skillId == normalizedName), update/delete bloqueados para usuários comuns
  • extraTagsByCategory adicionado à validação de profiles (isValidProfile, hasOnly em create e update)

Arquivos alterados

  • src/features/onboarding/constants/tagCategories.ts
  • src/features/onboarding/components/TagCategoryCard.tsx
  • src/features/onboarding/hooks/useOnboardingForm.ts
  • src/application/services/SkillService.ts
  • src/infrastructure/firebase/skillRepository.ts
  • firestore.rules

Critérios de aceite atendidos

  • Busca em tempo real dentro de cada categoria
  • Seleção de skill existente fecha o dropdown e limpa o campo
  • Skill inexistente pode ser criada com um clique
  • Nova skill salva no Firestore com categoria e aparece imediatamente no quadro
  • Sem duplicatas (validação case-insensitive no hook e na regra do Firestore)
  • Ordenação alfabética em todas as listas
  • extraTagsByCategory persistido no perfil e restaurado na próxima sessão

Pendente

  • Deploy das firestore.rules em produção (aguardando acesso ao projeto Firebase)

@karinaperes
karinaperes requested a review from YnotMax June 28, 2026 23:59
@vercel

vercel Bot commented Jun 28, 2026

Copy link
Copy Markdown

@karinaperes is attempting to deploy a commit to the ynotmax's projects Team on Vercel.

A member of the Team first needs to authorize it.

@coderabbitai

coderabbitai Bot commented Jun 28, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: f38337eb-f913-4824-a5da-2eca4b8ee125

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@YnotMax
YnotMax merged commit 43b1eb8 into MatchDock:develop Jun 29, 2026
2 of 3 checks passed
@karinaperes
karinaperes deleted the feat/skill-selector-create branch June 30, 2026 19:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants