You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					54 lines
				
				1.4 KiB
			
		
		
			
		
	
	
					54 lines
				
				1.4 KiB
			| 
											3 years ago
										 | "use strict"; | ||
|  | 
 | ||
|  | Object.defineProperty(exports, "__esModule", { | ||
|  |   value: true | ||
|  | }); | ||
|  | exports.actionsToButtonGroup = void 0; | ||
|  | 
 | ||
|  | var _interfaces = require("../../../interfaces"); | ||
|  | 
 | ||
|  | const actionsToButtonGroup = options => { | ||
|  |   const { | ||
|  |     actions, | ||
|  |     params, | ||
|  |     handleClick | ||
|  |   } = options; | ||
|  |   const buttons = actions.map(action => { | ||
|  |     const href = (0, _interfaces.actionHref)(action, params); | ||
|  |     return { | ||
|  |       icon: action.icon, | ||
|  |       label: action.label, | ||
|  |       variant: action.variant, | ||
|  |       source: action, | ||
|  |       href: href || undefined, | ||
|  |       // when href is not defined - handle click should also be not defined
 | ||
|  |       // This prevents from "cursor: pointer;"
 | ||
|  |       onClick: href ? handleClick : undefined, | ||
|  |       'data-testid': (0, _interfaces.buildActionTestId)(action), | ||
|  |       buttons: [], | ||
|  |       'data-css': `${action.resourceId}-${action.name}-button` | ||
|  |     }; | ||
|  |   }); // nesting buttons
 | ||
|  | 
 | ||
|  |   const buttonsMap = buttons.reduce((memo, button) => { | ||
|  |     const action = button.source; | ||
|  | 
 | ||
|  |     if (action.parent) { | ||
|  |       const parent = memo[action.parent] || buttons.find(btn => btn.source.name === action.parent) || { | ||
|  |         label: action.parent | ||
|  |       }; | ||
|  |       parent.buttons = parent.buttons || []; | ||
|  |       parent.buttons.push(button); | ||
|  |       return { ...memo, | ||
|  |         [action.parent]: parent | ||
|  |       }; | ||
|  |     } | ||
|  | 
 | ||
|  |     return { ...memo, | ||
|  |       [button.source.name]: button | ||
|  |     }; | ||
|  |   }, {}); | ||
|  |   return Object.values(buttonsMap); | ||
|  | }; | ||
|  | 
 | ||
|  | exports.actionsToButtonGroup = actionsToButtonGroup; |