@applicaster/zapp-react-native-ui-components
Version:
Applicaster Zapp React Native ui components for the Quick Brick App
37 lines (32 loc) • 1.4 kB
text/typescript
import { masterCellBuilder } from "@applicaster/zapp-react-native-ui-components/Components/MasterCell";
import { containerStyleResolver } from "./containerStyles";
import { viewTreeResolver } from "./viewTrees";
// @ts-ignore
import { labelBuilder } from "./Label";
/**
* Find matching view tree for the component type,
* inject styles into the view tree, and returns a MasterCell.
* The MasterCell accepts an item (the entry data) and a state (default/focused).
* @param {object} configuration "styles" object from UI builder: grid / horizontal_list etc.
* @returns {function} renderer, an instance of MasterCell.
*/
function defaultCellRendererFactory({ component, styles, cellOptions }) {
if (!component || !component.component_type) {
throw new Error("Missing component or component type");
}
// Important! Not every renderer has to be a master cell.
// The label, for example, is just a function returning a react component.
// e.g.: <MyCellRenderer item={item} state="focused" />
switch (component.component_type) {
case "header":
return labelBuilder(styles);
default:
return masterCellBuilder({
containerStyle: containerStyleResolver(component),
cellConfiguration: viewTreeResolver(component)(styles),
cellOptions,
});
}
}
const DefaultCellRenderer = defaultCellRendererFactory;
export default DefaultCellRenderer;