Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/app/(auth)/login/page.js
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ export default function Login() {

return (
<div className="flex-col flex items-center justify-center p-3 min-h-full">
<h1 className="text-5xl font-bold mb-6">{process.env.NEXT_PUBLIC_APP_PRETTY_NAME}</h1>
<h1 className="text-5xl font-bold mb-6">ProjetIn</h1>
<div className="card w-full max-w-sm shrink-0 custom_shadow">
<form
className="card-body"
Expand Down
2 changes: 1 addition & 1 deletion src/app/(auth)/signup/aluno/page.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ export default function Signup() {

return (
<div className="flex-col flex items-center justify-center p-3 min-h-full">
<h1 className="text-5xl font-bold p-6">{process.env.NEXT_PUBLIC_APP_PRETTY_NAME}</h1>
<h1 className="text-5xl font-bold p-6">ProjetIn</h1>
<div className="card w-full max-w-sm shrink-0 custom_shadow">
<form
className="card-body"
Expand Down
2 changes: 1 addition & 1 deletion src/app/(auth)/signup/professor/page.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ export default function Signup() {

return (
<div className="flex-col flex items-center justify-center p-3 pb-10 min-h-full">
<h1 className="text-5xl font-bold p-6">{process.env.NEXT_PUBLIC_APP_PRETTY_NAME}</h1>
<h1 className="text-5xl font-bold p-6">{"ProjetIn"}</h1>
<div className="card w-full max-w-sm shrink-0 custom_shadow">
<form
className="card-body"
Expand Down
9 changes: 5 additions & 4 deletions src/app/(main)/student/projects/page.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ export default function AvailableProjects() {
})

useEffect(() => {
console.log("PROJECT DATA")
console.log(projects.data)
}, [projects.isLoading])

Expand Down Expand Up @@ -46,10 +47,10 @@ export default function AvailableProjects() {
</search>
{
projects.data
.filter(project =>
project.name.toLowerCase().includes(searchString.toLowerCase()) ||
project.description.toLowerCase().includes(searchString.toLowerCase()) ||
project.professor.nome.toLowerCase().includes(searchString.toLowerCase())
?.filter(project =>
project?.name.toLowerCase().includes(searchString.toLowerCase()) ||
project.description?.toLowerCase().includes(searchString.toLowerCase()) ||
project?.professor.nome.toLowerCase().includes(searchString.toLowerCase())
)
.map(project => <StudentProjectCard key={project.id} {...project} isCandidate={false} />)
}
Expand Down
62 changes: 40 additions & 22 deletions src/components/CandidateFilter.js
Original file line number Diff line number Diff line change
Expand Up @@ -74,23 +74,27 @@ function filterByCra(candidates, input) {

function filterByExperiencias(candidates, selectedExperiences) {
if (selectedExperiences.length === 0) return candidates;

return candidates.filter((candidate) => {
return (
candidate.aluno.experiencias &&
candidate.aluno.experiencias.some((experienciaObj) => {
return selectedExperiences.includes(experienciaObj.nome);
const experienciaNome = experienciaObj.nome.toLowerCase();
return selectedExperiences.includes(experienciaNome);
})
);
});
}

function filterByInteresses(candidates, selectedInteresses) {
if (selectedInteresses.length === 0) return candidates;

return candidates.filter((candidate) => {
return (
candidate.aluno.interesses &&
candidate.aluno.interesses.some((interesseObj) => {
return selectedInteresses.includes(interesseObj.nome);
const interesseNome = interesseObj.nome.toLowerCase();
return selectedInteresses.includes(interesseNome);
})
);
});
Expand All @@ -102,7 +106,8 @@ function filterByHabilidades(candidates, selectedHabilidades) {
return (
candidate.aluno.habilidades &&
candidate.aluno.habilidades.some((habilidadeObj) => {
return selectedHabilidades.includes(habilidadeObj.nome);
const habilidadeNome = habilidadeObj.nome.toLowerCase();
return selectedHabilidades.includes(habilidadeNome);
})
);
});
Expand All @@ -111,28 +116,28 @@ function filterByHabilidades(candidates, selectedHabilidades) {
function filterByDisciplinas(candidates, { nomeDisciplina, notaMinima }) {
if (!nomeDisciplina && !notaMinima) return candidates;

return candidates.filter(candidate => {
const candidatos = candidates.filter(candidate => {
if (!candidate.aluno.disciplinas_matriculadas || candidate.aluno.disciplinas_matriculadas.length === 0) {
return false;
}

return candidate.aluno.disciplinas_matriculadas.some(disciplinaObj => {
const disciplinaMatch = !nomeDisciplina ||
(disciplinaObj.disciplina && disciplinaObj.disciplina.nome.toLowerCase().includes(nomeDisciplina.toLowerCase()));
(disciplinaObj.disciplina && disciplinaObj.disciplina.toLowerCase().includes(nomeDisciplina.toLowerCase()));

const notaMatch = !notaMinima ||
(disciplinaObj.media !== undefined && disciplinaObj.media >= parseFloat(notaMinima));

return disciplinaMatch && notaMatch;
});
});
return candidatos
}

export default function CandidateFilter({ emitFilteredData, project }) {
const session = useContext(SessionContext)
const [ isOpen, setIsOpen ] = useState(false);
const [ genericFilter, setGenericFilter ] = useState("")
const [ selectedList, setSelectedList ] = useState("")
const [isOpen, setIsOpen] = useState(false);
const [genericFilter, setGenericFilter ] = useState("")
const [selectedList, setSelectedList ] = useState("")
const [ listUsed, setListUsed ] = useState({})
const [newListName, setNewListName] = useState("Lista sem nome")
const [isExperiencesDropdownOpen, setIsExperiencesDropdownOpen] = useState(false);
Expand All @@ -148,9 +153,9 @@ export default function CandidateFilter({ emitFilteredData, project }) {
cra: "",
nomeDisciplina: "",
notaMinima: "",
experiencias: [], // Multiple experiences selection
interesses: [], // Multiple interests selection
habilidades: [], // Multiple skills selection
experiencias: [],
interesses: [],
habilidades: [],
});

const { data: allExperiences, isLoading: isLoadingExperiences } = useQuery({
Expand Down Expand Up @@ -196,6 +201,11 @@ export default function CandidateFilter({ emitFilteredData, project }) {
useEffect(() => {
if (!project.data || project.isLoading) return;

const normalizedExperiences = filters.experiencias.map(e => e.nome.toLowerCase());
const normalizedInteresses = filters.interesses.map(i => i.nome.toLowerCase());
const normalizedHabilidades = filters.habilidades.map(h => h.nome.toLowerCase());


let filteredData = filterByName(project.data.candidates, filters.nome);
filteredData = filterByEmail(filteredData, filters.email);
filteredData = filterByMatricula(filteredData, filters.matricula);
Expand All @@ -205,9 +215,11 @@ export default function CandidateFilter({ emitFilteredData, project }) {
nomeDisciplina: filters.nomeDisciplina,
notaMinima: filters.notaMinima,
});
filteredData = filterByExperiencias(filteredData, filters.experiencias); // Multiple experiences filter
filteredData = filterByInteresses(filteredData, filters.interesses); // Multiple interests filter
filteredData = filterByHabilidades(filteredData, filters.habilidades);

filteredData = filterByExperiencias(filteredData, normalizedExperiences);
filteredData = filterByInteresses(filteredData, normalizedInteresses);
filteredData = filterByHabilidades(filteredData, normalizedHabilidades);

emitFilteredData(filteredData);
}, [project.data, filters]);

Expand All @@ -221,7 +233,13 @@ export default function CandidateFilter({ emitFilteredData, project }) {
}, [genericFilter])

useEffect(() => {
if(!project.data || project.isLoading || selectedList === "") return;
if(!project.data || project.isLoading) return;
if (selectedList === "") {
const filteredData = project.data.candidates;
emitFilteredData(filteredData);
return;
}

mutationGetList.mutate({listId: project.data.lists[selectedList].id_lista, token: session.data.token})

}, [selectedList])
Expand All @@ -232,7 +250,7 @@ export default function CandidateFilter({ emitFilteredData, project }) {
filteredData = filterByDisciplinas(filteredData, {
nomeDisciplina: listUsed.filtro_disciplinas[0].codigo_da_disciplina,
notaMinima: listUsed.filtro_disciplinas[0].nota,
});
});
filteredData = filterByExperiencias(filteredData, listUsed.filtro_experiencias); // Multiple experiences filter
filteredData = filterByInteresses(filteredData, listUsed.filtro_interesses); // Multiple interests filter
filteredData = filterByHabilidades(filteredData, listUsed.filtro_habilidades);
Expand Down Expand Up @@ -566,10 +584,10 @@ export default function CandidateFilter({ emitFilteredData, project }) {
disabled={!isOpen}
onChange={e => setSelectedList(e.target.value)}
>
<option value="">Listar todos alunos</option>
{project.data?.lists.map((list, index) => (
<option value={index}>{list.titulo}</option>
))}
<option value="">Listar todos alunos</option>
{project.data?.lists.map((list, index) => (
<option key={index} value={index}>{list.titulo}</option>
))}
</select>

<button className="btn btn-m"
Expand Down
2 changes: 1 addition & 1 deletion src/lib/adapters/localStorage.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
const APP_NAME = process.env.NEXT_PUBLIC_APP_NAME;
const APP_NAME = "projetin_esinco";

export async function getStorageData(key = APP_NAME) {
const storagedData = localStorage.getItem(key);
Expand Down
2 changes: 1 addition & 1 deletion src/lib/api/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import axios from 'axios';
import { notifyUser, notifyError } from '../adapters/notifier';

const api = axios.create({
baseURL: process.env.NEXT_PUBLIC_API_URL,
baseURL: 'http://localhost:8000/',
});

api.interceptors.response.use(
Expand Down