UNPKG

@itrocks/action

Version:

An abstract class for applying actions in your framework, with @Actions and @Need decorators for assignment

54 lines 2.6 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.actionTemplates = exports.actionCss = exports.actionRepository = void 0; exports.getActions = getActions; exports.setAction = setAction; exports.setActionCss = setActionCss; exports.setActionTemplates = setActionTemplates; const class_type_1 = require("@itrocks/class-type"); const rename_1 = require("@itrocks/rename"); exports.actionRepository = {}; exports.actionCss = []; exports.actionTemplates = []; const DEFAULT = Symbol('DEFAULT'); function filterFile(actionAssets, definition) { return actionAssets .filter(entry => Object.entries(definition).every(([filter, value]) => entry[filter] === value)) .find(entry => Object.entries(entry).every(([filter, value]) => ['file', 'target'].includes(filter) || (definition[filter] === value))) ?? actionAssets.find(entry => Object.keys(entry).length === 1) ?? { file: 'noMatch' }; } function getActions(source, sourceAction) { const actions = []; const sourceActions = exports.actionRepository[sourceAction]; if (!sourceActions) { return actions; } const type = (0, class_type_1.typeOf)(source); const targetIdentifier = (0, class_type_1.typeIdentifier)(type); for (const targetAction in sourceActions) { const action = sourceActions[targetAction][targetIdentifier] ?? sourceActions[targetAction][DEFAULT]; if (action) { action.object = source; action.type = type; actions.push(action); } } return actions; } function setAction(sourceAction, targetAction, definition = {}, source) { const sourceActions = exports.actionRepository[sourceAction] ?? (exports.actionRepository[sourceAction] = {}); const target = definition.target ?? '#'; const targetActions = sourceActions[targetAction] ?? (sourceActions[targetAction] = {}); const caption = definition.caption ?? (0, rename_1.ucFirst)((0, rename_1.toDisplay)(targetAction)); const css = definition.css ?? filterFile(exports.actionCss, definition).file.replaceAll('(action)', targetAction); const template = definition.template ?? filterFile(exports.actionTemplates, definition).file; targetActions[source ? (0, class_type_1.typeIdentifier)(source) : DEFAULT] = Object.assign({ action: targetAction, caption, target, css, template }, definition); } function setActionCss(...css) { exports.actionCss.push(...css); } function setActionTemplates(...templates) { exports.actionTemplates.push(...templates); } //# sourceMappingURL=repository.js.map