From c78f21380fb6da5c1863a9105cc2e4d75fc687bc Mon Sep 17 00:00:00 2001 From: Torben Ewert Date: Wed, 6 May 2020 18:38:54 +0200 Subject: [PATCH] TASK: Make onLoad optional --- src/Hermes.re | 122 +++++++++++++----------- src/Hermes/Hermes_Client.re | 3 +- src/Hermes/Hermes_ResponseType.re | 12 +-- src/Hermes/Types/Hermes_Types_Client.re | 3 +- 4 files changed, 71 insertions(+), 69 deletions(-) diff --git a/src/Hermes.re b/src/Hermes.re index c3d410a..567d757 100644 --- a/src/Hermes.re +++ b/src/Hermes.re @@ -22,13 +22,17 @@ let onLoad: { ...client, - onLoad: data => { - switch (data) { - | Hermes_Types_ResponseType.Ok(data) => callback(Ok(eval(data))) - | Hermes_Types_ResponseType.Error(message) => - callback(Error(message)) - }; - }, + onLoad: + Some( + data => { + switch (data) { + | Hermes_Types_ResponseType.Ok(data) => + callback(Ok(eval(data))) + | Hermes_Types_ResponseType.Error(message) => + callback(Error(message)) + } + }, + ), }; }; @@ -80,61 +84,65 @@ let send: xhr->Hermes_XHR.setRequestHeader(key, value) }); - xhr->Hermes_XHR.addEventListener( - `error( - _ => { - client.onLoad(Types.ResponseType.Error(xhr->Hermes_XHR.statusText)) - }, - ), - ); - xhr->Hermes_XHR.addEventListener( - `timeout( - _ => { - client.onLoad(Types.ResponseType.Error(xhr->Hermes_XHR.statusText)) - }, - ), - ); + switch (client.onLoad) { + | Some(onLoad) => + xhr->Hermes_XHR.addEventListener( + `error( + _ => { + onLoad(Types.ResponseType.Error(xhr->Hermes_XHR.statusText)) + }, + ), + ); + xhr->Hermes_XHR.addEventListener( + `timeout( + _ => { + onLoad(Types.ResponseType.Error(xhr->Hermes_XHR.statusText)) + }, + ), + ); - xhr->Hermes_XHR.addEventListener( - `load( - _ => { - switch (client.response) { - | Types.ResponseType.TextResponse(_) => - client.onLoad( - Types.ResponseType.Ok( - Types.ResponseType.TextResponse( - xhr->Hermes_XHR.responseText->Js.Nullable.toOption, + xhr->Hermes_XHR.addEventListener( + `load( + _ => { + switch (client.responseType) { + | Types.ResponseType.TextResponse(_) => + onLoad( + Types.ResponseType.Ok( + Types.ResponseType.TextResponse( + xhr->Hermes_XHR.responseText->Js.Nullable.toOption, + ), ), - ), - ) - | Types.ResponseType.JSONResponse(_) => - client.onLoad( - Types.ResponseType.Ok( - Types.ResponseType.JSONResponse( - xhr->Hermes_XHR.responseJson->Js.Nullable.toOption, + ) + | Types.ResponseType.JSONResponse(_) => + onLoad( + Types.ResponseType.Ok( + Types.ResponseType.JSONResponse( + xhr->Hermes_XHR.responseJson->Js.Nullable.toOption, + ), ), - ), - ) - | Types.ResponseType.DocumentResponse(_) => - client.onLoad( - Types.ResponseType.Ok( - Types.ResponseType.DocumentResponse( - xhr->Hermes_XHR.responseDocument->Js.Nullable.toOption, + ) + | Types.ResponseType.DocumentResponse(_) => + onLoad( + Types.ResponseType.Ok( + Types.ResponseType.DocumentResponse( + xhr->Hermes_XHR.responseDocument->Js.Nullable.toOption, + ), ), - ), - ) - | Types.ResponseType.ArrayBufferResponse(_) => - client.onLoad( - Types.ResponseType.Ok( - Types.ResponseType.ArrayBufferResponse( - xhr->Hermes_XHR.responseArrayBuffer->Js.Nullable.toOption, + ) + | Types.ResponseType.ArrayBufferResponse(_) => + onLoad( + Types.ResponseType.Ok( + Types.ResponseType.ArrayBufferResponse( + xhr->Hermes_XHR.responseArrayBuffer->Js.Nullable.toOption, + ), ), - ), - ) - } - }, - ), - ); + ) + } + }, + ), + ); + | None => () + }; xhr->Hermes_XHR.send; diff --git a/src/Hermes/Hermes_Client.re b/src/Hermes/Hermes_Client.re index fca2bf3..1afd4a6 100644 --- a/src/Hermes/Hermes_Client.re +++ b/src/Hermes/Hermes_Client.re @@ -5,8 +5,7 @@ let make = (~url, ~method) => { url, method, queryString: [], - response: Hermes_Types_ResponseType.TextResponse(None), - onLoad: _response => (), + onLoad: None, formData: [], headers: [], }; diff --git a/src/Hermes/Hermes_ResponseType.re b/src/Hermes/Hermes_ResponseType.re index f12d9af..33147f2 100644 --- a/src/Hermes/Hermes_ResponseType.re +++ b/src/Hermes/Hermes_ResponseType.re @@ -3,31 +3,27 @@ open Hermes_Types_Client; let setText = client => { { ...client, - response: Hermes_Types_ResponseType.TextResponse(None), - onLoad: _ => (), + onLoad: None, }; }; let setDocument = client => { { ...client, - response: Hermes_Types_ResponseType.DocumentResponse(None), - onLoad: _ => (), + onLoad: None, }; }; let setJson = client => { { ...client, - response: Hermes_Types_ResponseType.JSONResponse(None), - onLoad: _ => (), + onLoad: None, }; }; let setArrayBuffer = client => { { ...client, - response: Hermes_Types_ResponseType.ArrayBufferResponse(None), - onLoad: _ => (), + onLoad: None, }; }; \ No newline at end of file diff --git a/src/Hermes/Types/Hermes_Types_Client.re b/src/Hermes/Types/Hermes_Types_Client.re index 5795e19..721b99a 100644 --- a/src/Hermes/Types/Hermes_Types_Client.re +++ b/src/Hermes/Types/Hermes_Types_Client.re @@ -4,6 +4,5 @@ type t('a) = { queryString: list((string, string)), formData: list((string, string)), headers: list((string, string)), - response: 'a, - onLoad: Hermes_Types_ResponseType.t('a) => unit, + onLoad: option(Hermes_Types_ResponseType.t('a) => unit), }; \ No newline at end of file -- 2.51.2