@sparklink-pro/apant
Version:
Apollo & Antd tools
44 lines • 2.07 kB
JavaScript
import { __awaiter, __rest } from "tslib";
import { useEffect, useState } from 'react';
import { isFunction } from 'lodash-es';
import { useConfiguration } from './useConfiguration';
import { useRegistry } from './useRegistry';
import { useTypeAdminConfiguration } from './useTypeAdminConfiguration';
/**
* Columns can have async filters definition
*/
const initializeColumns = (cols, params) => __awaiter(void 0, void 0, void 0, function* () {
const columns = isFunction(cols) ? yield cols(params) : cols;
return Promise.all(columns.map((column) => __awaiter(void 0, void 0, void 0, function* () {
let { filters } = column;
if (isFunction(filters)) {
filters = yield filters(params);
}
return Object.assign(Object.assign({}, column), { filters });
})));
});
// This hook returns the admin config for the given type.
export function useTypeAdmin({ type, context }) {
var _a;
const registry = useRegistry();
const admin = useTypeAdminConfiguration({ type });
const columnTitleCallback = (_a = useConfiguration().admin) === null || _a === void 0 ? void 0 : _a.columnTitleCallback;
const [loading, setLoading] = useState(true);
const [columns, setColumns] = useState([]);
const params = { type, registry, context };
const loadColumns = () => __awaiter(this, void 0, void 0, function* () {
setLoading(true);
const cols = (admin === null || admin === void 0 ? void 0 : admin.columns) ? yield initializeColumns(admin.columns, params) : [];
setColumns(cols.map((_a) => {
var { title } = _a, col = __rest(_a, ["title"]);
return (Object.assign(Object.assign({}, col), { title: columnTitleCallback && title ? columnTitleCallback(type, title) : title }));
}));
setLoading(false);
});
useEffect(() => {
loadColumns();
}, [type, context]);
return Object.assign(Object.assign({}, admin), { loading, columns: loading ? [] : columns });
}
export default useTypeAdmin;
//# sourceMappingURL=useTypeAdmin.js.map