Thank you very much for your reply Sorawee. I'll go with your proposed 
solution for the time being. However it feels like I'm adding unnecessary 
code to make the xexpr valid which can be really annoying if having nested 
cases or other more complex situations. Thanks again for your fast reply!

On Sunday, March 1, 2020 at 7:43:20 PM UTC+11, Sorawee Porncharoenwase 
wrote:
>
> One possible way is to have the first case returns a list of one element, 
> and the else case returns an empty list. You then splice this list into 
> body via ,@.
>
> `(body
>   (form ((action "") (method "post"))
>         (label ((for "username")) "Username:")
>         (input ((type "text") (name "username") (maxlength "64")))
>         (label ((for "password")) "Password:")
>         (input ((type "password") (name "password") (maxlength "64")))
>         (button ((type "submit") (value "Login")) "Login"))
>   ,@(cond
>       [(not (eq? login-error "")) `((p ,login-error))]
>       [else '()]))
>
> If the then branch is taken, the value will be:
>
> `(body
>   (form ((action "") (method "post"))
>         (label ((for "username")) "Username:")
>         (input ((type "text") (name "username") (maxlength "64")))
>         (label ((for "password")) "Password:")
>         (input ((type "password") (name "password") (maxlength "64")))
>         (button ((type "submit") (value "Login")) "Login"))
>   (p ,login-error))
>
> On the other hand, if the else branch is taken, the value will be:
>
> `(body
>   (form ((action "") (method "post"))
>         (label ((for "username")) "Username:")
>         (input ((type "text") (name "username") (maxlength "64")))
>         (label ((for "password")) "Password:")
>         (input ((type "password") (name "password") (maxlength "64")))
>         (button ((type "submit") (value "Login")) "Login")))
>
>
> On Sun, Mar 1, 2020 at 12:31 AM liendolucas84 <liendo...@gmail.com 
> <javascript:>> wrote:
>
>> Hi everyone! Just joined the Racket User's group. I'm trying to 
>> conditionally render a paragraph element using a cond and an xexpr but I 
>> can't make the "xexpr?" function return a #t value and of course the 
>> response/xexpr function call fails as well. I've kind of fix this by always 
>> returning a paragraph element regardless is needed or not (of course this 
>> is not what I want). Here's the working code:
>>
>> (define (login-template (login-error ""))
>>   `(html
>>      (head
>>        (link ((rel "icon") (href "data:,")))
>>        (title "Please login"))
>>      (body
>>        (form ((action "") (method "post"))
>>              (label ((for "username")) "Username:")
>>              (input ((type "text") (name "username") (maxlength "64")))
>>              (label ((for "password")) "Password:")
>>              (input ((type "password") (name "password") (maxlength 
>> "64")))
>>              (button ((type "submit") (value "Login")) "Login"))
>>        ,(cond
>>           ((not (eq? login-error "")) `(p, login-error))
>>           (else '(p "Enter your username/password."))))))
>>
>> However I don't want to display at all the "else" clause as is not needed 
>> at all, here's the failing code:
>>
>> (define (login-template (login-error ""))
>>   `(html
>>      (head
>>        (link ((rel "icon") (href "data:,")))
>>        (title "Please login"))
>>      (body
>>        (form ((action "") (method "post"))
>>              (label ((for "username")) "Username:")
>>              (input ((type "text") (name "username") (maxlength "64")))
>>              (label ((for "password")) "Password:")
>>              (input ((type "password") (name "password") (maxlength 
>> "64")))
>>              (button ((type "submit") (value "Login")) "Login"))
>>        ,(cond
>>           ((not (eq? login-error "")) `(p, login-error))))))
>>
>> The last example fails if the login-error is indeed "" (an empty string). 
>> Am I missing something like a "null xexpr" usage for the "else" clause or 
>> something different that needs to be used in these situations? Of the all 
>> examples out there that I could find and read none of them shows how to do 
>> something like this. Is there a doc page where can I read about caveats 
>> using xexprs (if any) or situations like the one I've described?
>>
>> Thanks for your time,
>> Lucas.
>>
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "Racket Users" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to racket...@googlegroups.com <javascript:>.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/racket-users/48f5b3c7-3ec2-43cc-8f01-60e36acb1e74%40googlegroups.com
>>  
>> <https://groups.google.com/d/msgid/racket-users/48f5b3c7-3ec2-43cc-8f01-60e36acb1e74%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to racket-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/racket-users/1286c435-bbff-4b0a-8a3a-eb1ccf731b27%40googlegroups.com.

Reply via email to