Hi @ all,
I have a question regarding the following code.
Is it possible to write this without mutating the “messageListener” variable?
If not, is there something else I can do, to optimize the code?
I basically want the “showMessage” function to be usable anywhere, to show Flash-Messages.
let messageListener = ref(None);
let setMessageListener = callback => {
messageListener := callback;
};
let removeMessageListener = () => {
messageListener := None;
};
let showMessage = (~options: messageOptions) => {
let listener = messageListener^;
switch (listener) {
| Some(listener) => listener(options)
| None => ()
};
};
[@react.component]
let make = () => {
let (messages, setMessages) = React.useState(() => []);
React.useEffect0(() => {
setMessageListener(
Some(
options => {
let newMessage = [options];
setMessages(currentMessages =>
List.append(currentMessages, newMessage)
);
();
},
),
);
Some(() => removeMessageListener());
});
<div id="NotificationProvider">
{List.map(
message => {
<Notification
typ={message##typ}
title={message##title}
message={message##message}
/>
},
messages,
)
->Array.of_list
->React.array}
</div>;
};
Thank you very much for your help!
Torben