/**
*
*/
package xapi.components.impl;
import static xapi.components.impl.JsFunctionSupport.mergeConsumer;
import com.google.gwt.core.client.js.JsProperty;
import com.google.gwt.core.client.js.JsType;
import java.util.function.Consumer;
import xapi.components.api.IsWebComponent;
import xapi.components.api.OnWebComponentCreated;
import elemental.dom.Element;
/**
* @author "James X. Nelson (james@wetheinter.net)"
*
*/
@JsType
public interface WebComponentWithCallbacks <E extends Element> extends
IsWebComponent<E>,
OnWebComponentCreated<E>{
@Override
default void onCreated(final Element element) {
final Consumer<Element> callback = getAfterCreated();
if (callback != null) {
callback.accept(element);
}
}
@JsProperty
Consumer<Element> getAfterCreated();
@JsProperty
void setAfterCreated(Consumer<Element> callback);
default void onAfterCreated(final Consumer<Element> callback, final boolean prepend) {
final Consumer<Element> existing = getAfterCreated();
if (existing == null) {
setAfterCreated(callback);
} else if (prepend){
setAfterCreated(mergeConsumer(callback, existing));
} else {
setAfterCreated(mergeConsumer(existing, callback));
}
}
}