@twocatmoon/react-template-helpers
Version:
Branching and iterative logic helpers for React, to help make your templates cleaner.
57 lines (56 loc) • 1.44 kB
JavaScript
import React from "react";
function If(condition, children) {
let result = React.createElement(React.Fragment, {});
let shouldContinue = true;
if (condition) {
result = children();
shouldContinue = false;
}
const response = {
ElseIf(elseCondition, children2) {
if (shouldContinue && elseCondition) {
result = children2();
shouldContinue = false;
}
return response;
},
Else(children2) {
if (shouldContinue) {
result = children2();
}
return {
EndIf: response.EndIf
};
},
EndIf() {
return result;
}
};
return response;
}
function For(collection, callbackFn, _returnArrayOnly) {
let children;
if (!collection) {
throw new Error(`Collection passed to 'For' must be of type Array or Object and must be iterable.`);
} else if (Array.isArray(collection)) {
const fn = callbackFn;
children = collection.map((item, i) => {
return fn(item, i, {
isFirst: i === 0,
isLast: i === collection.length - 1,
isEven: i % 2 === 0,
isNth: (n) => i % n === 0
});
});
} else {
const fn = callbackFn;
const keys = Object.keys(collection);
children = keys.map((key, i) => {
return fn(collection[key], key);
});
}
if (_returnArrayOnly)
return children;
return React.createElement(React.Fragment, {}, ...children);
}
export { For, If };