@alauda-fe/common
Version:
Alauda frontend team common codes.
47 lines • 5.79 kB
JavaScript
import { isBoolean } from 'lodash-es';
import { isObservable, of, switchMap } from 'rxjs';
import { publishRef } from './operators';
// 同步 Chain
function buildDisabledQueryChain(judgeFns, index) {
if (!judgeFns[index]) {
return null;
}
let result = judgeFns[index]();
if (isBoolean(result)) {
result = { disabled: result };
}
if (result?.disabled) {
return result;
}
return buildDisabledQueryChain(judgeFns, index + 1);
}
// 异步 Chain
function buildDisabledQueryChain$(judgeFns, index) {
if (!judgeFns[index]) {
return of(null);
}
let result$ = judgeFns[index]();
result$ = isObservable(result$) ? result$ : of(result$);
return result$.pipe(switchMap(result => {
if (isBoolean(result)) {
result = { disabled: result };
}
if (result?.disabled) {
return of(result);
}
return buildDisabledQueryChain$(judgeFns, index + 1);
}));
}
/**
* @description 获取同步状态
*/
export function getDisabledState(...judgeFns) {
return buildDisabledQueryChain(judgeFns, 0);
}
/**
* @description 获取异步状态
*/
export function getDisabledState$(...judgeFns) {
return buildDisabledQueryChain$(judgeFns, 0).pipe(publishRef());
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlzYWJsZWQtc3RhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbW1vbi9zcmMvY29yZS91dGlscy9kaXNhYmxlZC1zdGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3RDLE9BQU8sRUFBYyxZQUFZLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUvRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBYXpDLFdBQVc7QUFDWCxTQUFTLHVCQUF1QixDQUM5QixRQUE2QixFQUM3QixLQUFhO0lBRWIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3JCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUNELElBQUksTUFBTSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBb0IsQ0FBQztJQUVqRCxJQUFJLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQ3RCLE1BQU0sR0FBRyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBRUQsSUFBSSxNQUFNLEVBQUUsUUFBUSxFQUFFLENBQUM7UUFDckIsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELE9BQU8sdUJBQXVCLENBQUMsUUFBUSxFQUFFLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN0RCxDQUFDO0FBRUQsV0FBVztBQUNYLFNBQVMsd0JBQXdCLENBQy9CLFFBQTZCLEVBQzdCLEtBQWE7SUFFYixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDckIsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEIsQ0FBQztJQUNELElBQUksT0FBTyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO0lBQ2hDLE9BQU8sR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3hELE9BQU8sT0FBTyxDQUFDLElBQUksQ0FDakIsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1FBQ2pCLElBQUksU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDdEIsTUFBTSxHQUFHLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDO1FBQ2hDLENBQUM7UUFDRCxJQUFJLE1BQU0sRUFBRSxRQUFRLEVBQUUsQ0FBQztZQUNyQixPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNwQixDQUFDO1FBQ0QsT0FBTyx3QkFBd0IsQ0FBQyxRQUFRLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3ZELENBQUMsQ0FBQyxDQUNILENBQUM7QUFDSixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsR0FBRyxRQUE2QjtJQUMvRCxPQUFPLHVCQUF1QixDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QyxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsR0FBRyxRQUE2QjtJQUNoRSxPQUFPLHdCQUF3QixDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztBQUNsRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNCb29sZWFuIH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IE9ic2VydmFibGUsIGlzT2JzZXJ2YWJsZSwgb2YsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBwdWJsaXNoUmVmIH0gZnJvbSAnLi9vcGVyYXRvcnMnO1xuXG5leHBvcnQgdHlwZSBEaXNhYmxlZFJlc3VsdCA9XG4gIHwge1xuICAgICAgZGlzYWJsZWQ6IGJvb2xlYW47XG4gICAgICB0b29sdGlwPzogc3RyaW5nO1xuICAgIH1cbiAgfCBib29sZWFuO1xuXG5leHBvcnQgdHlwZSBRdWVyeURpc2FibGVkRnVuYyA9ICgpID0+XG4gIHwgRGlzYWJsZWRSZXN1bHRcbiAgfCBPYnNlcnZhYmxlPERpc2FibGVkUmVzdWx0PjtcblxuLy8g5ZCM5q2lIENoYWluXG5mdW5jdGlvbiBidWlsZERpc2FibGVkUXVlcnlDaGFpbihcbiAganVkZ2VGbnM6IFF1ZXJ5RGlzYWJsZWRGdW5jW10sXG4gIGluZGV4OiBudW1iZXIsXG4pOiBFeGNsdWRlPERpc2FibGVkUmVzdWx0LCBib29sZWFuPiB7XG4gIGlmICghanVkZ2VGbnNbaW5kZXhdKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgbGV0IHJlc3VsdCA9IGp1ZGdlRm5zW2luZGV4XSgpIGFzIERpc2FibGVkUmVzdWx0O1xuXG4gIGlmIChpc0Jvb2xlYW4ocmVzdWx0KSkge1xuICAgIHJlc3VsdCA9IHsgZGlzYWJsZWQ6IHJlc3VsdCB9O1xuICB9XG5cbiAgaWYgKHJlc3VsdD8uZGlzYWJsZWQpIHtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcmV0dXJuIGJ1aWxkRGlzYWJsZWRRdWVyeUNoYWluKGp1ZGdlRm5zLCBpbmRleCArIDEpO1xufVxuXG4vLyDlvILmraUgQ2hhaW5cbmZ1bmN0aW9uIGJ1aWxkRGlzYWJsZWRRdWVyeUNoYWluJChcbiAganVkZ2VGbnM6IFF1ZXJ5RGlzYWJsZWRGdW5jW10sXG4gIGluZGV4OiBudW1iZXIsXG4pOiBPYnNlcnZhYmxlPEV4Y2x1ZGU8RGlzYWJsZWRSZXN1bHQsIGJvb2xlYW4+PiB7XG4gIGlmICghanVkZ2VGbnNbaW5kZXhdKSB7XG4gICAgcmV0dXJuIG9mKG51bGwpO1xuICB9XG4gIGxldCByZXN1bHQkID0ganVkZ2VGbnNbaW5kZXhdKCk7XG4gIHJlc3VsdCQgPSBpc09ic2VydmFibGUocmVzdWx0JCkgPyByZXN1bHQkIDogb2YocmVzdWx0JCk7XG4gIHJldHVybiByZXN1bHQkLnBpcGUoXG4gICAgc3dpdGNoTWFwKHJlc3VsdCA9PiB7XG4gICAgICBpZiAoaXNCb29sZWFuKHJlc3VsdCkpIHtcbiAgICAgICAgcmVzdWx0ID0geyBkaXNhYmxlZDogcmVzdWx0IH07XG4gICAgICB9XG4gICAgICBpZiAocmVzdWx0Py5kaXNhYmxlZCkge1xuICAgICAgICByZXR1cm4gb2YocmVzdWx0KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBidWlsZERpc2FibGVkUXVlcnlDaGFpbiQoanVkZ2VGbnMsIGluZGV4ICsgMSk7XG4gICAgfSksXG4gICk7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIOiOt+WPluWQjOatpeeKtuaAgVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGlzYWJsZWRTdGF0ZSguLi5qdWRnZUZuczogUXVlcnlEaXNhYmxlZEZ1bmNbXSkge1xuICByZXR1cm4gYnVpbGREaXNhYmxlZFF1ZXJ5Q2hhaW4oanVkZ2VGbnMsIDApO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiDojrflj5blvILmraXnirbmgIFcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERpc2FibGVkU3RhdGUkKC4uLmp1ZGdlRm5zOiBRdWVyeURpc2FibGVkRnVuY1tdKSB7XG4gIHJldHVybiBidWlsZERpc2FibGVkUXVlcnlDaGFpbiQoanVkZ2VGbnMsIDApLnBpcGUocHVibGlzaFJlZigpKTtcbn1cbiJdfQ==