terriajs
Version:
Geospatial data visualization platform.
69 lines • 3.23 kB
JavaScript
import isDefined from "../../Core/isDefined";
export const DEFAULT_PLACEMENT = "default";
export const isEnum = (dim) => dim.type === "select" || dim.type === undefined;
export const isMultiEnum = (dim) => dim.type === "select-multi";
/** Return only SelectableDimensionSelect from array of SelectableDimension */
export const filterEnums = (dims) => dims.filter(isEnum);
export const isGroup = (dim) => dim.type === "group";
export const isNumeric = (dim) => dim.type === "numeric";
export const isText = (dim) => dim.type === "text";
export const isButton = (dim) => dim.type === "button";
export const isCheckbox = (dim) => dim.type === "checkbox";
export const isCheckboxGroup = (dim) => dim.type === "checkbox-group";
export const isColor = (dim) => dim.type === "color";
const isCorrectPlacement = (placement) => (dim) => dim.placement
? dim.placement === placement
: placement === DEFAULT_PLACEMENT;
const isEnabled = (dim) => !dim.disable;
/** Filter out dimensions with only 1 option (unless they have 1 option and allow undefined - which is 2 total options) */
const enumHasValidOptions = (dim) => {
const minLength = dim.allowUndefined ? 1 : 2;
return isDefined(dim.options) && dim.options.length >= minLength;
};
/** Multi enums just need one option (they don't have `allowUndefined`) */
const multiEnumHasValidOptions = (dim) => {
return isDefined(dim.options) && dim.options.length > 0;
};
/** Filter with SelectableDimension should be shown for a given placement.
* This will take into account whether SelectableDimension is valid, not disabled, etc...
*/
export const filterSelectableDimensions = (placement) => (selectableDimensions = []) => selectableDimensions.filter((dim) =>
// Filter by placement if defined, otherwise use default placement
(!isDefined(placement) || isCorrectPlacement(placement)(dim)) &&
isEnabled(dim) &&
// Check enum (select and checkbox) dimensions for valid options
((!isEnum(dim) && !isCheckbox(dim)) || enumHasValidOptions(dim)) &&
// Check multi-enum
(!isMultiEnum(dim) || multiEnumHasValidOptions(dim)) &&
// Only show groups if they have at least one SelectableDimension
(!isGroup(dim) || dim.selectableDimensions.length > 0));
/** Find human readable name for the current value for a SelectableDimension */
export const findSelectedValueName = (dim) => {
if (isCheckbox(dim)) {
return dim.selectedId === "true" ? "Enabled" : "Disabled";
}
if (isEnum(dim)) {
return dim.options?.find((opt) => opt.id === dim.selectedId)?.name;
}
if (isMultiEnum(dim)) {
// return names as CSV
return dim.options
?.filter((opt) => dim.selectedIds?.some((id) => opt.id === id))
?.map((option) => option.name)
?.join(", ");
}
if (isNumeric(dim)) {
return dim.value?.toString();
}
if (isText(dim))
return dim.value;
};
var SelectableDimensions;
(function (SelectableDimensions) {
function is(model) {
return "selectableDimensions" in model;
}
SelectableDimensions.is = is;
})(SelectableDimensions || (SelectableDimensions = {}));
export default SelectableDimensions;
//# sourceMappingURL=SelectableDimensions.js.map