first-npm-package-nicule
Version:
This isi first npm package
34 lines (29 loc) • 1.35 kB
text/typescript
import { makePropDecorator } from '../../google-decorator-factories';
import { BindDecorator } from '../bind.decorator';
import { Hypermedia, HypermediaAction } from 'first-npm-package-nicule/core';
interface ActionBindingSettings {
transforms?: Array<(hypermediaAction: HypermediaAction, hypermedia: Hypermedia) => HypermediaAction>;
secure?: boolean;
}
export interface BindActionDecorator {
(actionName: string, settings?: ActionBindingSettings): any;
new(actionName: string, settings?: ActionBindingSettings): any;
}
export const Action: BindActionDecorator = makePropDecorator('BindAction', (actionName: string, { transforms }: ActionBindingSettings = {} as any) => {
return ({
binding: {
priority: 1,
bind: hypermedia => {
const { actions = [] } = hypermedia;
let action = actions.find(({ name }) => actionName === name);
if (action === undefined) {
return undefined;
}
if (transforms instanceof Array && transforms.length > 0) {
action = transforms.reduce((newAction, transformer) => transformer(newAction, hypermedia), action);
}
return action;
}
} as BindDecorator
}) as any;
});