-
Notifications
You must be signed in to change notification settings - Fork 4
#3 Kátia poderá solicitar doador - MVP 1 #3
Comments
…ontes dos titulos e tamanhos do componente Modal
…1 de solicitacao de doadores
…ncar no processo de solicitar doacoes
…rmite solicitar numero menor que 0 doadores
…ava valores repetidos ao clicar em confirmar
Primeira Parte do Code ReviewVou escrevendo o code review aos poucos, para não atrasar vocês por muito tempo. O que eu for encontrando, vou colocando aqui. 0
1
2
3
4
Sugestões:Refatorando o hospital_necessities.jsAproveitem os first class functions do Javascript:Ao invés de: var allInputNumbers = document.getElementsByClassName('js-necessityInput');
for(var i = 0; i < allInputNumbers.length; i++){
var inputNumber = allInputNumbers[i];
inputNumber.addEventListener("keyup", function(){
validateFormService.validatePositiveNumber();
validateFormService.validateEmptyInput();
})
inputNumber.addEventListener("click", function(){
validateFormService.validatePositiveNumber();
validateFormService.validateEmptyInput();
})
} Não poderia ser como abaixo? var allInputNumbers = document.getElementsByClassName('js-necessityInput');
var validateOnAction = function() {
validateFormService.validatePositiveNumber();
validateFormService.validateEmptyInput();
};
//For each maneiro
allInputNumbers.forEach(function(input) {
input.addEventListener("keyup", validateOnAction);
input.addEventListener("click", validateOnAction);
}); Ou, ainda, poderia-se criar uma função que faça binding de múltiplos eventos à uma função de uma vez só (isso me parece interessante, pois vai ter bastante reuso desta função em outros scripts): var bindMultiple = function(component, events, action) {
events.split(' ').forEach(function(event) {
component.addEventListener(event, action);
});
};
var validateOnAction = function() {
validateFormService.validatePositiveNumber();
validateFormService.validateEmptyInput();
};
allInputNumbers.forEach(function(input) {
bindMultiple(input, "keyup click", validateOnAction);
}); Ou var bindMultiple = function(component, events, action) {
events.split(' ').forEach(function(event) {
component.addEventListener(event, action);
});
};
allInputNumbers.forEach(function(input) {
bindMultiple(input, "keyup click", validateFormService.validatePositiveNumber);
bindMultiple(input, "keyup click", validateFormService.validateEmptyInput);
});
|
Segunda parte do ReviewDúvida de negócioOs campos do form de demanda podem ser 0?
Review técnicoPonto 0
Ponto 1
Ponto 2
SugestõesPonto 0Um pouco mais sobre o template duplicadoObservando o template abaixo, podemos isolar duas coisas que não se repetem: <div class="Form-groupDemand">
<label class="Form-inputLabel u-desktop-size3of12 u-tablet-size3of12 u-mobile-3of12">A+</label>
<%= f.number_field :a_positive, min: "0", max: "100", data: { type: "A+" },
class: "Form-inputValue u-desktop-size4of12 u-tablet-size3of12 u-mobile-2of12 js-necessityInput js-confirmRequest"%>
<span class="Form-inputDescription u-size4of12 u-tablet-size3of12 u-mobile-7of12 u-padding-0-0-0-10">doadores</span>
</div>
<div class="Form-groupDemand">
<label class="Form-inputLabel u-desktop-size3of12 u-tablet-size3of12 u-mobile-3of12">B+</label>
<%= f.number_field :b_positive, min: "0", max: "100", data: { type: "B+" },
class: "Form-inputValue u-desktop-size4of12 u-tablet-size3of12 u-mobile-2of12 js-necessityInput js-confirmRequest" %>
<span class="Form-inputDescription u-size4of12 u-tablet-size3of12 u-mobile-7of12 u-padding-0-0-0-10">doadores</span>
</div> Os símbolos Não é possível mandar uma lista de maps/hashes do controller para esta view nas actions de new e edit para processeramos esse pedaço do layout substituindo apenas estas duas informações dinamicamente? Ponto 1Nomes confusos
Separando responsabilidades da função confirmRequestVamos analisar a função: var confirmRequest = function(){
var confirmRequestButton = document.querySelector('.js-nextButton');
confirmRequestButton.addEventListener("click", function(){
var inputsToConfirm = document.getElementsByClassName('js-confirmRequest');
var valuesOfConfirmInput = {};
for(var counter = 0, inputsToConfirmlength = inputsToConfirm.length; counter < inputsToConfirmlength; counter++) {
var dataTypeAttribute = inputsToConfirm[counter].getAttribute('data-type');
valuesOfConfirmInput[dataTypeAttribute] = inputsToConfirm[counter].value;
}
var confirmRequestList = document.querySelector('.js-confirmRequestList');
Object.keys(valuesOfConfirmInput).forEach(function(key){
if(valuesOfConfirmInput[key] != "") {
var liTag = document.createElement("li");
var requestText = document.createTextNode(valuesOfConfirmInput[key] + " do tipo " + key);
confirmRequestList.appendChild(liTag);
liTag.appendChild(requestText);
}
});
});
}; Quantas responsabilidades ela possui:
Tema de casa (ou para um possível Dojo): Como resolver o problema da função confirmRequest possuir múltiplas responsabilidades? Podemos separá-las em funções menores e mais simples? Metendo o loco e resolvendo o problema usando uma abordagem mais funcionalJavascript possui muitos aspectos e recursos de linguagens funcionais, e às vezes, estes aspectos nos ajudam bastante no dia a dia. Porém, há uma grande desvantagem nisso: a curva de aprendizado. Por conta disso, creio que esta segunda solução seja só para ter uma ideia de como poderíamos solucionar o problema usando as famosas funções var _createInformationItemFromInput = function (input) {
return document
.createElement("li")
.appendChild(
document.createTextNode(input.value + " do tipo " + input['data-type'])
);
};
var confirmRequest = function(){
var confirmRequestList = document.querySelector('.js-confirmRequestList');
document
.querySelector('.js-nextButton')
.addEventListener("click", function(){
document
.getElementsByClassName('js-confirmRequest')
.filter(function(input) { return input.value !== ''})
.map(_createInformationItemFromInput)
.forEach(confirmRequestList.appendChild);
});
}; Ponto 2Corrigindo o problema do
|
Terceira e última parte do ReviewPorque o arquivo [0]
Era isso!Bom trabalho nesta estória pessoal! A única coisa que impede ela de ir adiante no board é o problema no Controller, que causa um bug sério à aplicação. Mas eu recomendaria fortemente que vocês refatorassem tudo. Lembrando também que as sugestões que deixei não são a única verdade absoluta do universo (afinal, são sugestões hehehe) e vocês podem refatorar o código da forma que acharem melhor. Se precisarem de ajuda com alguma coisa, estarei à um Slack de distância, só chamar! o/ |
… nao seja inserido nenhum dado
… nao seja inserido nenhum dado
… apagar dados em form de solicitar doadores
…nvalidos em input de solicitar doacao
… botao avancar ira abrir modal
…o aberta apos solicitar doadores
…bre ao confirmar solicitacao de doadores
…namento apos dar o ok na modal de sucesso
COMO: Kátia
QUERO: Solicitar os doadores de determinados tipo sanguíneo.
PARA: Conseguir mais doações para completar o estoque de sangue.
Cenários:
Tarefas:
Notas:
Detalhes técnicos:
The text was updated successfully, but these errors were encountered: