1212/**
1313 * Componente Livewire responsável pelo gerenciamento das palavras-chave
1414 * de um projeto de revisão sistemática da literatura.
15- *
15+ *
1616 * As palavras-chave são termos ou frases que representam conceitos-chave
1717 * na pesquisa e são fundamentais para:
1818 * - Categorizar e organizar as fontes de literatura
1919 * - Facilitar a identificação de informações relevantes
2020 * - Auxiliar na construção de strings de busca
2121 * - Definir o escopo temático da revisão sistemática
22- *
22+ *
2323 * Este componente faz parte da fase de planejamento geral da revisão sistemática,
2424 * onde os pesquisadores definem os termos principais que guiarão suas buscas
2525 * nas bases de dados acadêmicas.
26- *
26+ *
2727 * Funcionalidades:
2828 * - Adicionar novas palavras-chave ao projeto
2929 * - Editar palavras-chave existentes
@@ -39,64 +39,64 @@ class Keywords extends Component
3939 /**
4040 * Caminho base para as traduções específicas deste componente.
4141 * Utilizado para internacionalização (PT/BR e EN).
42- *
42+ *
4343 * @var string
4444 */
4545 private $ translationPath = 'project/planning.overall.keyword.livewire ' ;
46-
46+
4747 /**
4848 * Caminho para as mensagens de toast específicas deste componente.
4949 * Utilizado para feedback visual ao usuário após operações CRUD.
50- *
50+ *
5151 * @var string
5252 */
5353 private $ toastMessages = 'project/planning.overall.keyword.livewire.toasts ' ;
5454
5555 /**
5656 * Instância do projeto atual sendo editado.
5757 * Contém todos os dados do projeto de revisão sistemática.
58- *
58+ *
5959 * @var ProjectModel
6060 */
6161 public $ currentProject ;
62-
62+
6363 /**
6464 * Palavra-chave atualmente sendo editada.
6565 * Null quando não há edição em andamento (modo criação).
66- *
66+ *
6767 * @var KeywordModel|null
6868 */
6969 public $ currentKeyword ;
70-
70+
7171 /**
7272 * Coleção de todas as palavras-chave associadas ao projeto atual.
7373 * Atualizada dinamicamente conforme operações CRUD são realizadas.
74- *
74+ *
7575 * @var \Illuminate\Database\Eloquent\Collection
7676 */
7777 public $ keywords = [];
7878
7979 /**
8080 * Fields to be filled by the form.
8181 */
82-
82+
8383 /**
8484 * Descrição da palavra-chave.
8585 * Campo principal que define o termo ou frase da palavra-chave.
8686 * Utilizado tanto para criação quanto para edição.
87- *
87+ *
8888 * @var string|null
8989 */
9090 public $ description ;
9191
9292 /**
9393 * Form state.
9494 */
95-
95+
9696 /**
9797 * Estado do formulário para controle de operações.
9898 * Controla se o formulário está em modo de edição ou criação.
99- *
99+ *
100100 * @var array
101101 */
102102 public $ form = [
@@ -108,7 +108,7 @@ class Keywords extends Component
108108 */
109109 protected $ rules = [
110110 'currentProject ' => 'required ' ,
111- 'description ' => 'required|string|max:255 ' ,
111+ 'description ' => 'required|string|regex:/^[\pL\pN\s\.,;:\?" \' \(\)\[\]\{\}\/ \\\\ _\-+=#@!%&*]+$/u| max:255 ' ,
112112 ];
113113
114114 /**
@@ -130,13 +130,13 @@ public function mount()
130130 // Obtém o ID do projeto a partir da URL (segundo segmento)
131131 // Ex: /projects/123/planning/overall -> projectId = 123
132132 $ projectId = request ()->segment (2 );
133-
133+
134134 // Carrega o projeto atual ou falha se não encontrado
135135 $ this ->currentProject = ProjectModel::findOrFail ($ projectId );
136-
136+
137137 // Inicializa a palavra-chave atual como null (modo criação)
138138 $ this ->currentKeyword = null ;
139-
139+
140140 // Carrega todas as palavras-chave associadas ao projeto
141141 $ this ->keywords = KeywordModel::where (
142142 'id_project ' ,
@@ -159,10 +159,10 @@ public function resetFields()
159159 {
160160 // Limpa o campo de descrição
161161 $ this ->description = '' ;
162-
162+
163163 // Remove a referência à palavra-chave atual
164164 $ this ->currentKeyword = null ;
165-
165+
166166 // Retorna o formulário ao modo de criação
167167 $ this ->form ['isEditing ' ] = false ;
168168 }
@@ -200,7 +200,7 @@ public function submit()
200200 $ updateIf = [
201201 'id_keyword ' => $ this ->currentKeyword ?->id_keyword,
202202 ];
203-
203+
204204 // Verifica se já existe uma palavra-chave com a mesma descrição no projeto
205205 // Importante para evitar duplicatas que podem confundir a estratégia de busca
206206 $ existingKeyword = KeywordModel::where ('description ' , $ this ->description )
@@ -300,7 +300,7 @@ public function delete(string $keywordId)
300300
301301 // Localiza a palavra-chave a ser excluída
302302 $ currentKeyword = KeywordModel::findOrFail ($ keywordId );
303-
303+
304304 // Remove a palavra-chave do banco de dados
305305 $ currentKeyword ->delete ();
306306
@@ -313,7 +313,7 @@ public function delete(string $keywordId)
313313
314314 // Atualiza a lista de palavras-chave na interface
315315 $ this ->updateKeywords ();
316-
316+
317317 // Limpa os campos do formulário
318318 $ this ->resetFields ();
319319 $ this ->toast (
0 commit comments