@@ -243,7 +243,8 @@ defmodule PetalComponents.Form do
243
243
attr ( :rest , :global , include: @ form_attrs )
244
244
245
245
def text_input ( assigns ) do
246
- assigns = assign_defaults ( assigns , text_input_classes ( field_has_errors? ( assigns ) ) )
246
+ errors = used_input_errors ( assigns )
247
+ assigns = assign_defaults ( assigns , text_input_classes ( errors ) )
247
248
248
249
~H"""
249
250
{ Form . text_input ( @ form , @ field , [ class: @ classes ] ++ Map . to_list ( @ rest ) ) }
@@ -257,7 +258,8 @@ defmodule PetalComponents.Form do
257
258
attr ( :rest , :global , include: @ form_attrs )
258
259
259
260
def email_input ( assigns ) do
260
- assigns = assign_defaults ( assigns , text_input_classes ( field_has_errors? ( assigns ) ) )
261
+ errors = used_input_errors ( assigns )
262
+ assigns = assign_defaults ( assigns , text_input_classes ( errors ) )
261
263
262
264
~H"""
263
265
{ Form . email_input ( @ form , @ field , [ class: @ classes ] ++ Map . to_list ( @ rest ) ) }
@@ -271,7 +273,8 @@ defmodule PetalComponents.Form do
271
273
attr ( :rest , :global , include: @ form_attrs )
272
274
273
275
def number_input ( assigns ) do
274
- assigns = assign_defaults ( assigns , text_input_classes ( field_has_errors? ( assigns ) ) )
276
+ errors = used_input_errors ( assigns )
277
+ assigns = assign_defaults ( assigns , text_input_classes ( errors ) )
275
278
276
279
~H"""
277
280
{ Form . number_input ( @ form , @ field , [ class: @ classes ] ++ Map . to_list ( @ rest ) ) }
@@ -285,7 +288,8 @@ defmodule PetalComponents.Form do
285
288
attr ( :rest , :global , include: @ form_attrs )
286
289
287
290
def password_input ( assigns ) do
288
- assigns = assign_defaults ( assigns , text_input_classes ( field_has_errors? ( assigns ) ) )
291
+ errors = used_input_errors ( assigns )
292
+ assigns = assign_defaults ( assigns , text_input_classes ( errors ) )
289
293
290
294
~H"""
291
295
{ Form . password_input ( @ form , @ field , [ class: @ classes ] ++ Map . to_list ( @ rest ) ) }
@@ -299,7 +303,8 @@ defmodule PetalComponents.Form do
299
303
attr ( :rest , :global , include: @ form_attrs )
300
304
301
305
def search_input ( assigns ) do
302
- assigns = assign_defaults ( assigns , text_input_classes ( field_has_errors? ( assigns ) ) )
306
+ errors = used_input_errors ( assigns )
307
+ assigns = assign_defaults ( assigns , text_input_classes ( errors ) )
303
308
304
309
~H"""
305
310
{ Form . search_input ( @ form , @ field , [ class: @ classes ] ++ Map . to_list ( @ rest ) ) }
@@ -313,7 +318,8 @@ defmodule PetalComponents.Form do
313
318
attr ( :rest , :global , include: @ form_attrs )
314
319
315
320
def telephone_input ( assigns ) do
316
- assigns = assign_defaults ( assigns , text_input_classes ( field_has_errors? ( assigns ) ) )
321
+ errors = used_input_errors ( assigns )
322
+ assigns = assign_defaults ( assigns , text_input_classes ( errors ) )
317
323
318
324
~H"""
319
325
{ Form . telephone_input ( @ form , @ field , [ class: @ classes ] ++ Map . to_list ( @ rest ) ) }
@@ -327,7 +333,8 @@ defmodule PetalComponents.Form do
327
333
attr ( :rest , :global , include: @ form_attrs )
328
334
329
335
def url_input ( assigns ) do
330
- assigns = assign_defaults ( assigns , text_input_classes ( field_has_errors? ( assigns ) ) )
336
+ errors = used_input_errors ( assigns )
337
+ assigns = assign_defaults ( assigns , text_input_classes ( errors ) )
331
338
332
339
~H"""
333
340
{ Form . url_input ( @ form , @ field , [ class: @ classes ] ++ Map . to_list ( @ rest ) ) }
@@ -341,7 +348,8 @@ defmodule PetalComponents.Form do
341
348
attr ( :rest , :global , include: @ form_attrs )
342
349
343
350
def time_input ( assigns ) do
344
- assigns = assign_defaults ( assigns , text_input_classes ( field_has_errors? ( assigns ) ) )
351
+ errors = used_input_errors ( assigns )
352
+ assigns = assign_defaults ( assigns , text_input_classes ( errors ) )
345
353
346
354
~H"""
347
355
{ Form . time_input ( @ form , @ field , [ class: @ classes , bob: "yo" ] ++ Map . to_list ( @ rest ) ) }
@@ -355,7 +363,8 @@ defmodule PetalComponents.Form do
355
363
attr ( :rest , :global , include: @ form_attrs )
356
364
357
365
def time_select ( assigns ) do
358
- assigns = assign_defaults ( assigns , text_input_classes ( field_has_errors? ( assigns ) ) )
366
+ errors = used_input_errors ( assigns )
367
+ assigns = assign_defaults ( assigns , text_input_classes ( errors ) )
359
368
360
369
~H"""
361
370
< div class = "pc-time-select " >
@@ -371,7 +380,8 @@ defmodule PetalComponents.Form do
371
380
attr ( :rest , :global , include: @ form_attrs )
372
381
373
382
def datetime_local_input ( assigns ) do
374
- assigns = assign_defaults ( assigns , text_input_classes ( field_has_errors? ( assigns ) ) )
383
+ errors = used_input_errors ( assigns )
384
+ assigns = assign_defaults ( assigns , text_input_classes ( errors ) )
375
385
376
386
~H"""
377
387
{ Form . datetime_local_input ( @ form , @ field , [ class: @ classes ] ++ Map . to_list ( @ rest ) ) }
@@ -385,7 +395,8 @@ defmodule PetalComponents.Form do
385
395
attr ( :rest , :global , include: @ form_attrs )
386
396
387
397
def datetime_select ( assigns ) do
388
- assigns = assign_defaults ( assigns , text_input_classes ( field_has_errors? ( assigns ) ) )
398
+ errors = used_input_errors ( assigns )
399
+ assigns = assign_defaults ( assigns , text_input_classes ( errors ) )
389
400
390
401
~H"""
391
402
< div class = "pc-datetime-select " >
@@ -401,7 +412,8 @@ defmodule PetalComponents.Form do
401
412
attr ( :rest , :global , include: @ form_attrs )
402
413
403
414
def date_select ( assigns ) do
404
- assigns = assign_defaults ( assigns , text_input_classes ( field_has_errors? ( assigns ) ) )
415
+ errors = used_input_errors ( assigns )
416
+ assigns = assign_defaults ( assigns , text_input_classes ( errors ) )
405
417
406
418
~H"""
407
419
< div class = "pc-date-select " >
@@ -417,7 +429,8 @@ defmodule PetalComponents.Form do
417
429
attr ( :rest , :global , include: @ form_attrs )
418
430
419
431
def date_input ( assigns ) do
420
- assigns = assign_defaults ( assigns , text_input_classes ( field_has_errors? ( assigns ) ) )
432
+ errors = used_input_errors ( assigns )
433
+ assigns = assign_defaults ( assigns , text_input_classes ( errors ) )
421
434
422
435
~H"""
423
436
{ Form . date_input ( @ form , @ field , [ class: @ classes ] ++ Map . to_list ( @ rest ) ) }
@@ -431,7 +444,8 @@ defmodule PetalComponents.Form do
431
444
attr ( :rest , :global , include: @ form_attrs )
432
445
433
446
def color_input ( assigns ) do
434
- assigns = assign_defaults ( assigns , color_input_classes ( field_has_errors? ( assigns ) ) )
447
+ errors = used_input_errors ( assigns )
448
+ assigns = assign_defaults ( assigns , color_input_classes ( errors ) )
435
449
436
450
~H"""
437
451
{ Form . color_input ( @ form , @ field , [ class: @ classes ] ++ Map . to_list ( @ rest ) ) }
@@ -445,7 +459,8 @@ defmodule PetalComponents.Form do
445
459
attr ( :rest , :global , include: @ form_attrs )
446
460
447
461
def file_input ( assigns ) do
448
- assigns = assign_defaults ( assigns , file_input_classes ( field_has_errors? ( assigns ) ) )
462
+ errors = used_input_errors ( assigns )
463
+ assigns = assign_defaults ( assigns , file_input_classes ( errors ) )
449
464
450
465
~H"""
451
466
{ Form . file_input ( @ form , @ field , [ class: @ classes ] ++ Map . to_list ( @ rest ) ) }
@@ -459,7 +474,8 @@ defmodule PetalComponents.Form do
459
474
attr ( :rest , :global , include: @ form_attrs )
460
475
461
476
def range_input ( assigns ) do
462
- assigns = assign_defaults ( assigns , range_input_classes ( field_has_errors? ( assigns ) ) )
477
+ errors = used_input_errors ( assigns )
478
+ assigns = assign_defaults ( assigns , range_input_classes ( errors ) )
463
479
464
480
~H"""
465
481
{ Form . range_input ( @ form , @ field , [ class: @ classes ] ++ Map . to_list ( @ rest ) ) }
@@ -473,7 +489,8 @@ defmodule PetalComponents.Form do
473
489
attr ( :rest , :global , include: @ form_attrs )
474
490
475
491
def textarea ( assigns ) do
476
- assigns = assign_defaults ( assigns , text_input_classes ( field_has_errors? ( assigns ) ) )
492
+ errors = used_input_errors ( assigns )
493
+ assigns = assign_defaults ( assigns , text_input_classes ( errors ) )
477
494
478
495
~H"""
479
496
{ Form . textarea ( @ form , @ field , [ class: @ classes , rows: "4" ] ++ Map . to_list ( @ rest ) ) }
@@ -488,7 +505,8 @@ defmodule PetalComponents.Form do
488
505
attr ( :rest , :global , include: @ form_attrs )
489
506
490
507
def select ( assigns ) do
491
- assigns = assign_defaults ( assigns , select_classes ( field_has_errors? ( assigns ) ) )
508
+ errors = used_input_errors ( assigns )
509
+ assigns = assign_defaults ( assigns , select_classes ( errors ) )
492
510
493
511
~H"""
494
512
{ Form . select ( @ form , @ field , @ options , [ class: @ classes ] ++ Map . to_list ( @ rest ) ) }
@@ -505,7 +523,8 @@ defmodule PetalComponents.Form do
505
523
)
506
524
507
525
def checkbox ( assigns ) do
508
- assigns = assign_defaults ( assigns , checkbox_classes ( field_has_errors? ( assigns ) ) )
526
+ errors = used_input_errors ( assigns )
527
+ assigns = assign_defaults ( assigns , checkbox_classes ( errors ) )
509
528
510
529
~H"""
511
530
{ Form . checkbox ( @ form , @ field , [ class: @ classes ] ++ Map . to_list ( @ rest ) ) }
@@ -522,9 +541,11 @@ defmodule PetalComponents.Form do
522
541
attr ( :rest , :global , include: @ form_attrs )
523
542
524
543
def checkbox_group ( assigns ) do
544
+ errors = used_input_errors ( assigns )
545
+
525
546
assigns =
526
547
assigns
527
- |> assign_defaults ( checkbox_classes ( field_has_errors? ( assigns ) ) )
548
+ |> assign_defaults ( checkbox_classes ( errors ) )
528
549
|> assign_new ( :checked , fn ->
529
550
values =
530
551
case Phoenix.HTML.Form . input_value ( assigns [ :form ] , assigns [ :field ] ) do
@@ -576,7 +597,8 @@ defmodule PetalComponents.Form do
576
597
attr ( :rest , :global , include: @ checkbox_form_attrs )
577
598
578
599
def switch ( assigns ) do
579
- assigns = assign_defaults ( assigns , switch_classes ( field_has_errors? ( assigns ) ) )
600
+ errors = used_input_errors ( assigns )
601
+ assigns = assign_defaults ( assigns , switch_classes ( errors ) )
580
602
581
603
~H"""
582
604
< label class = { [ "pc-switch" , "pc-switch--#{ @ size } " ] } >
@@ -587,8 +609,8 @@ defmodule PetalComponents.Form do
587
609
"""
588
610
end
589
611
590
- defp switch_classes ( has_errors ) do
591
- "#{ if has_errors , do: "has-error" , else: "" } sr-only peer"
612
+ defp switch_classes ( errors ) do
613
+ "#{ if errors != [ ] , do: "has-error" , else: "" } sr-only peer"
592
614
end
593
615
594
616
attr ( :form , :any , default: nil , doc: "" )
@@ -599,7 +621,8 @@ defmodule PetalComponents.Form do
599
621
attr ( :rest , :global , include: @ form_attrs )
600
622
601
623
def radio ( assigns ) do
602
- assigns = assign_defaults ( assigns , radio_classes ( field_has_errors? ( assigns ) ) )
624
+ errors = used_input_errors ( assigns )
625
+ assigns = assign_defaults ( assigns , radio_classes ( errors ) )
603
626
604
627
~H"""
605
628
{ Form . radio_button ( @ form , @ field , @ value , [ class: @ classes ] ++ Map . to_list ( @ rest ) ) }
@@ -615,9 +638,11 @@ defmodule PetalComponents.Form do
615
638
attr ( :rest , :global , include: @ form_attrs )
616
639
617
640
def radio_group ( assigns ) do
641
+ errors = used_input_errors ( assigns )
642
+
618
643
assigns =
619
644
assigns
620
- |> assign_defaults ( radio_classes ( field_has_errors? ( assigns ) ) )
645
+ |> assign_defaults ( radio_classes ( errors ) )
621
646
622
647
~H"""
623
648
< div class = { radio_group_layout_classes ( % { layout: @ layout } ) } >
@@ -636,7 +661,8 @@ defmodule PetalComponents.Form do
636
661
attr ( :rest , :global , include: @ form_attrs )
637
662
638
663
def hidden_input ( assigns ) do
639
- assigns = assign_defaults ( assigns , text_input_classes ( field_has_errors? ( assigns ) ) )
664
+ errors = used_input_errors ( assigns )
665
+ assigns = assign_defaults ( assigns , text_input_classes ( errors ) )
640
666
641
667
~H"""
642
668
{ Form . hidden_input ( @ form , @ field , Map . to_list ( @ rest ) ) }
@@ -650,18 +676,14 @@ defmodule PetalComponents.Form do
650
676
def form_field_error ( assigns ) do
651
677
assigns =
652
678
assigns
653
- |> assign ( :translated_errors , generated_translated_errors ( assigns . form , assigns . field ) )
679
+ |> assign ( :translated_errors , generated_translated_errors ( assigns ) )
654
680
655
681
~H"""
656
- <%= if field_has_errors? ( assigns ) and used_input? ( @ form [ @ field ] ) do %>
657
- < div class = { @ class } >
658
- <%= for translated_error <- @ translated_errors do %>
659
- < div class = "pc-form-field-error invalid-feedback " >
660
- { translated_error }
661
- </ div >
662
- <% end %>
682
+ < div :if = { @ translated_errors != [ ] } class = { @ class } >
683
+ < div :for = { translated_error <- @ translated_errors } class = "pc-form-field-error invalid-feedback " >
684
+ { translated_error }
663
685
</ div >
664
- <% end % >
686
+ </ div >
665
687
"""
666
688
end
667
689
@@ -678,10 +700,10 @@ defmodule PetalComponents.Form do
678
700
"""
679
701
end
680
702
681
- defp generated_translated_errors ( form , field ) do
703
+ defp generated_translated_errors ( assigns ) do
682
704
translate_error = translator_from_config ( ) || ( & translate_error / 1 )
683
705
684
- Keyword . get_values ( form . errors || [ ] , field )
706
+ used_input_errors ( assigns )
685
707
|> Enum . map ( fn error ->
686
708
translate_error . ( error )
687
709
end )
@@ -731,38 +753,40 @@ defmodule PetalComponents.Form do
731
753
end
732
754
733
755
defp label_classes ( assigns ) do
756
+ errors = used_input_errors ( assigns )
757
+
734
758
type_classes =
735
759
if Enum . member? ( [ "checkbox" , "radio" ] , assigns [ :type ] ) do
736
760
"pc-label--for-checkbox"
737
761
else
738
762
""
739
763
end
740
764
741
- "#{ if field_has_errors? ( assigns ) , do: "has-error" , else: "" } #{ type_classes } #{ assigns [ :class ] || "" } pc-label"
765
+ "#{ if errors != [ ] , do: "has-error" , else: "" } #{ type_classes } #{ assigns [ :class ] || "" } pc-label"
742
766
end
743
767
744
- defp text_input_classes ( has_error ) do
745
- "#{ if has_error , do: "has-error" , else: "" } pc-text-input"
768
+ defp text_input_classes ( errors ) do
769
+ "#{ if errors != [ ] , do: "has-error" , else: "" } pc-text-input"
746
770
end
747
771
748
- defp select_classes ( has_error ) do
749
- "#{ if has_error , do: "has-error" , else: "" } pc-select"
772
+ defp select_classes ( errors ) do
773
+ "#{ if errors != [ ] , do: "has-error" , else: "" } pc-select"
750
774
end
751
775
752
- defp file_input_classes ( has_error ) do
753
- "#{ if has_error , do: "has-error" , else: "" } pc-file-input"
776
+ defp file_input_classes ( errors ) do
777
+ "#{ if errors != [ ] , do: "has-error" , else: "" } pc-file-input"
754
778
end
755
779
756
- defp color_input_classes ( has_error ) do
757
- "#{ if has_error , do: "has-error" , else: "" } pc-color-input"
780
+ defp color_input_classes ( errors ) do
781
+ "#{ if errors != [ ] , do: "has-error" , else: "" } pc-color-input"
758
782
end
759
783
760
- defp range_input_classes ( has_error ) do
761
- "#{ if has_error , do: "has-error" , else: "" } pc-range-input"
784
+ defp range_input_classes ( errors ) do
785
+ "#{ if errors != [ ] , do: "has-error" , else: "" } pc-range-input"
762
786
end
763
787
764
- defp checkbox_classes ( has_error ) do
765
- "#{ if has_error , do: "has-error" , else: "" } pc-checkbox"
788
+ defp checkbox_classes ( errors ) do
789
+ "#{ if errors != [ ] , do: "has-error" , else: "" } pc-checkbox"
766
790
end
767
791
768
792
defp checkbox_group_layout_classes ( assigns ) do
@@ -805,16 +829,13 @@ defmodule PetalComponents.Form do
805
829
end
806
830
end
807
831
808
- defp radio_classes ( has_error ) do
809
- "#{ if has_error , do: "has-error" , else: "" } pc-radio"
832
+ defp radio_classes ( errors ) do
833
+ "#{ if errors != [ ] , do: "has-error" , else: "" } pc-radio"
810
834
end
811
835
812
- defp field_has_errors? ( % { form: form , field: field } ) when is_map ( form ) do
813
- case Keyword . get_values ( form . errors || [ ] , field ) do
814
- [ ] -> false
815
- _ -> used_input? ( form [ field ] )
816
- end
836
+ defp used_input_errors ( % { form: form , field: field } ) when not is_nil ( form ) do
837
+ if used_input? ( form [ field ] ) , do: form [ field ] . errors , else: [ ]
817
838
end
818
839
819
- defp field_has_errors? ( _ ) , do: false
840
+ defp used_input_errors ( _ ) , do: [ ]
820
841
end
0 commit comments