package com.psddev.cms.view;
/**
* A renderer for {@link DelegateView delegate views} that forwards the
* rendering logic to another view.
*/
public final class DelegateViewRenderer implements ViewRenderer {
private static final String DELEGATE_VIEW_KEY = "delegate";
@Override
public ViewOutput render(Object view, ViewTemplateLoader templateLoader) {
ViewMap viewMap = null;
if (view instanceof ViewMap) {
viewMap = (ViewMap) view;
} else if (view != null) {
viewMap = new ViewMap(view);
}
if (viewMap != null) {
Object delegateView = viewMap.get(DELEGATE_VIEW_KEY);
if (delegateView != null) {
ViewRenderer delegateViewRenderer = ViewRenderer.createRenderer(delegateView);
if (delegateViewRenderer != null) {
return delegateViewRenderer.render(delegateView, templateLoader);
}
}
}
return () -> null;
}
}