You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

103 lines
3.0 KiB

  1. package react.user;
  2. import react.ReactComponent;
  3. import react.ReactMacro.jsx;
  4. import Common;
  5. typedef CookieConsentBoxProps = {
  6. redirectUrl:String,
  7. message:String,
  8. ?phoneRequired:Bool
  9. }
  10. typedef CookieConsentBoxState = {
  11. email:String,
  12. password:String,
  13. error:String
  14. }
  15. /**
  16. * CookieConsent Box
  17. * @author fbarbut
  18. */
  19. class CookieConsentBox extends react.ReactComponentOfPropsAndState<CookieConsentBoxProps, CookieConsentBoxState> {
  20. public function new(props:CookieConsentBoxProps) {
  21. if (props.redirectUrl == null || props.redirectUrl == "null")
  22. props.redirectUrl = "/";
  23. if (props.message == "")
  24. props.message = null;
  25. super(props);
  26. this.state = {email: "", password: "", error: null};
  27. }
  28. function setError(err:String) {
  29. this.setState(cast {error: err});
  30. }
  31. override public function render() {
  32. return jsx('<div onKeyPress=$onKeyPress>
  33. <$Error error="${state.error}" />
  34. <$Message message="${props.message}" />
  35. <form action="" method="post" className="form-horizontal">
  36. <h4>Personnalisation du paramétrage</h4>
  37. <p>L\'outil CagettePéi n\'utilise que des cookies nécessaires pour vous aider à naviguer efficacement et à exécuter certaines fonctionnalités. Pas de cookie publicitaire, en provenance de site tiers ou de mesure d\'audience.
  38. </p>
  39. <p>
  40. Seuls les cookies nécessaires sont cruciaux pour les fonctions de base du site Web et celui-ci ne fonctionnera pas comme prévu sans eux. Ces cookies ne stockent aucune donnée personnellement identifiable.
  41. </p>
  42. <p className="text-center">
  43. <a onClick={deny} className="btn btn-secondary btn-lg" ><span className="glyphicon glyphicon-remove"></span> Tout Refuser</a>
  44. &nbsp;
  45. <a onClick={submit} className="btn btn-primary btn-lg" ><span className="glyphicon glyphicon-ok"></span> Tout Accepter</a>
  46. </p>
  47. </form>
  48. </div>');
  49. }
  50. /**
  51. * @doc https://facebook.github.io/react/docs/forms.html
  52. */
  53. function onChange(e:js.html.Event) {
  54. e.preventDefault();
  55. var name:String = untyped e.target.name;
  56. var value:String = untyped /*(e.target.value == "") ? null :*/ e.target.value;
  57. Reflect.setField(state, name, value);
  58. this.setState(this.state);
  59. }
  60. public function submit(?e:js.html.Event) {
  61. // lock button
  62. var el:js.html.Element = null;
  63. if (e != null) {
  64. el = cast e.target;
  65. el.classList.add("disabled");
  66. }
  67. // var cookie = js.Browser.document.cookie;
  68. var newCookie = "rgpd=true; SameSite=Lax";
  69. js.Browser.document.cookie = newCookie;
  70. // js.Browser.window.location.href = props.redirectUrl;
  71. js.Browser.window.location.href = '/';
  72. }
  73. public function deny(?e:js.html.Event) {
  74. // lock button
  75. var el:js.html.Element = null;
  76. if (e != null) {
  77. el = cast e.target;
  78. el.classList.add("disabled");
  79. }
  80. var newCookie = "rgpd=false; SameSite=Lax";
  81. js.Browser.document.cookie = newCookie;
  82. // js.Browser.window.location.href = props.redirectUrl;
  83. js.Browser.window.location.href = '/';
  84. }
  85. function onKeyPress(e:js.html.KeyboardEvent) {
  86. if (e.key == "Enter")
  87. submit();
  88. }
  89. }