first-npm-package-nicule
Version:
This isi first npm package
33 lines (30 loc) • 1.18 kB
text/typescript
import { Hypermedia, HypermediaAction, HypermediaField } from 'first-npm-package-nicule/core';
export function groupAs(newName: string, fieldNamesToGroup: Array<string>, flex: Array<number> = [1]): (hypermediaAction: HypermediaAction, hypermedia: Hypermedia) => HypermediaAction {
return (hypermediaAction: HypermediaAction) => {
const { fields: oldFields, ...rest } = hypermediaAction;
const fields = [];
const groupedFields = [];
let insertionIndex: number;
oldFields.forEach((oldField, index) => {
if (fieldNamesToGroup.includes(oldField.name)) {
if (insertionIndex === undefined) {
insertionIndex = index;
}
groupedFields.push(oldField);
} else {
fields.push(oldField);
}
});
const newField: HypermediaField = {
name: newName,
fields: groupedFields,
type: 'group',
flex
};
fields.splice(insertionIndex, 0, newField);
return {
...rest,
fields
};
};
}