petals-ui
Version:
Front-end UI components foundation
68 lines (67 loc) • 3.01 kB
JavaScript
import { isString, isFunction, isPlainObject, noop, mixin } from '@ntks/toolbox';
function resolveButtonProps(button) {
if (isString(button)) {
return { text: button };
}
return (isFunction(button)
? { handler: button }
: button);
}
function generateShortcutMethod(defaultOptions, callback) {
return (content, optsOrTitleOrHandler, optsOrHandler, options) => {
let resolvedTitle = '';
let resolvedAffirmButtonHandler = noop;
let resolvedDenyButtonHandler = noop;
let resolvedOptions;
if (options) {
resolvedOptions = isPlainObject(options) ? options : {};
}
if (optsOrHandler) {
if (!resolvedOptions && isPlainObject(optsOrHandler)) {
resolvedOptions = optsOrHandler;
}
else if (isFunction(optsOrHandler)) {
resolvedDenyButtonHandler = optsOrHandler;
}
}
if (optsOrTitleOrHandler) {
if (!resolvedOptions && isPlainObject(optsOrTitleOrHandler)) {
resolvedOptions = optsOrTitleOrHandler;
}
else if (isFunction(optsOrTitleOrHandler)) {
resolvedAffirmButtonHandler = optsOrTitleOrHandler;
}
else if (isString(optsOrTitleOrHandler)) {
resolvedTitle = optsOrTitleOrHandler;
}
}
if (!resolvedOptions) {
resolvedOptions = {};
}
const affirmButton = resolvedAffirmButtonHandler === noop ? {} : { handler: resolvedAffirmButtonHandler };
const denyButton = resolvedDenyButtonHandler === noop ? {} : { handler: resolvedDenyButtonHandler };
const defaultAffirmButton = defaultOptions.affirmButton
? resolveButtonProps(defaultOptions.affirmButton)
: {};
const defaultDenyButton = defaultOptions.denyButton
? resolveButtonProps(defaultOptions.denyButton)
: {};
const resolvedAffirmButton = resolvedOptions.affirmButton
? resolveButtonProps(resolvedOptions.affirmButton)
: {};
const resolvedDenyButton = resolvedOptions.denyButton
? resolveButtonProps(resolvedOptions.denyButton)
: {};
const mergedOptions = mixin(true, {}, defaultOptions, { title: resolvedTitle || defaultOptions.title, content, lazy: false, centered: false }, resolvedOptions);
mergedOptions.affirmButton = mixin({}, defaultAffirmButton, affirmButton, resolvedAffirmButton);
mergedOptions.denyButton = mixin({}, defaultDenyButton, denyButton, resolvedDenyButton);
callback(mergedOptions);
};
}
function generateAlert(callback) {
return generateShortcutMethod({ title: '提示', affirmButton: '知道了' }, callback);
}
function generateConfirm(callback) {
return generateShortcutMethod({ title: '提示', affirmButton: '确定', denyButton: '取消' }, callback);
}
export { generateAlert, generateConfirm };