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.

101 lines
2.8 KiB

2 years ago
2 years ago
  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>Personnaliser les préférences en matière de consentement</h4>
  37. <p>
  38. Nous n\'utilisons que des cookies nécessaires pour vous aider à naviguer efficacement et à exécuter certaines fonctionnalités. 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.
  39. </p>
  40. <p className="text-center">
  41. <a onClick={deny} className="btn btn-secondary btn-lg" >Tout Refuser</a>
  42. &nbsp;
  43. <a onClick={submit} className="btn btn-primary btn-lg" ><span className="glyphicon glyphicon-user"></span> Tout Accepter</a>
  44. </p>
  45. </form>
  46. </div>');
  47. }
  48. /**
  49. * @doc https://facebook.github.io/react/docs/forms.html
  50. */
  51. function onChange(e:js.html.Event) {
  52. e.preventDefault();
  53. var name:String = untyped e.target.name;
  54. var value:String = untyped /*(e.target.value == "") ? null :*/ e.target.value;
  55. Reflect.setField(state, name, value);
  56. this.setState(this.state);
  57. }
  58. public function submit(?e:js.html.Event) {
  59. // lock button
  60. var el:js.html.Element = null;
  61. if (e != null) {
  62. el = cast e.target;
  63. el.classList.add("disabled");
  64. }
  65. // var cookie = js.Browser.document.cookie;
  66. var newCookie = "rgpd=true; SameSite=Lax";
  67. js.Browser.document.cookie = newCookie;
  68. // js.Browser.window.location.href = props.redirectUrl;
  69. js.Browser.window.location.href = '/';
  70. }
  71. public function deny(?e:js.html.Event) {
  72. // lock button
  73. var el:js.html.Element = null;
  74. if (e != null) {
  75. el = cast e.target;
  76. el.classList.add("disabled");
  77. }
  78. var newCookie = "rgpd=false; SameSite=Lax";
  79. js.Browser.document.cookie = newCookie;
  80. // js.Browser.window.location.href = props.redirectUrl;
  81. js.Browser.window.location.href = '/';
  82. }
  83. function onKeyPress(e:js.html.KeyboardEvent) {
  84. if (e.key == "Enter")
  85. submit();
  86. }
  87. }