@adaptabletools/adaptable-cjs
Version:
Powerful data-agnostic HTML5 AG Grid extension which provides advanced, cutting-edge functionality to meet all DataGrid requirements
73 lines (72 loc) • 3.5 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.useAdaptableFilterWrapper = void 0;
const tslib_1 = require("tslib");
const React = tslib_1.__importStar(require("react"));
const react_1 = require("react");
const react_redux_1 = require("react-redux");
const LayoutRedux = tslib_1.__importStar(require("../../../Redux/ActionsReducers/LayoutRedux"));
const LayoutRedux_1 = require("../../../Redux/ActionsReducers/LayoutRedux");
const adaptableQlUtils_1 = require("../../../Utilities/adaptableQlUtils");
const AdaptableContext_1 = require("../../AdaptableContext");
const utils_1 = require("./utils");
const useAdaptableFilterWrapper = (columnId, filterComponent, handleOnChangeOverride) => {
const adaptable = (0, AdaptableContext_1.useAdaptable)();
const dispatch = (0, react_redux_1.useDispatch)();
const api = adaptable.api;
const columnType = api.columnApi.getColumnDataTypeForColumnId(columnId);
const column = api.columnApi.getColumnWithColumnId(columnId);
const columnFilterOptions = api.optionsApi.getFilterOptions().columnFilterOptions;
const qlPredicateDefs = React.useMemo(() => {
const predicateDefs = api.filterApi.columnFilterApi.getFilterPredicateDefsForColumn(column);
const qlDataType = (0, adaptableQlUtils_1.mapColumnDataTypeToExpressionFunctionType)(columnType);
return predicateDefs.map((predDef) => (0, utils_1.mapAdaptablePredicateDefToQlPredicateDef)(predDef, qlDataType));
}, [columnId]);
const currentLayout = (0, react_redux_1.useSelector)(LayoutRedux_1.getCurrentLayoutSelector);
const columnFilter = (0, react_1.useMemo)(() => {
return currentLayout?.ColumnFilters?.find((cf) => cf.ColumnId === columnId);
}, [currentLayout?.ColumnFilters, columnId]);
const qlPredicate = column
? (0, utils_1.mapColumnFilterToQlPredicate)(columnFilter, column, qlPredicateDefs, columnFilterOptions, filterComponent, api)
: null;
const handleOnChange = (adaptablePredicate, logic = 'AND') => {
// make sure we always have the latest columnFiler
const columnFilter = adaptable.api.filterApi.columnFilterApi.getColumnFilterForColumn(columnId);
const newFilter = {
...columnFilter,
ColumnId: columnId,
Predicates: adaptablePredicate,
PredicatesOperator: logic,
};
if (handleOnChangeOverride) {
handleOnChangeOverride(newFilter);
}
else {
dispatch(columnFilter?.Uuid
? LayoutRedux.LayoutColumnFilterEdit(newFilter)
: LayoutRedux.LayoutColumnFilterAdd(newFilter));
}
};
const handleClear = React.useCallback(() => dispatch(LayoutRedux.LayoutColumnFilterClear(columnId)), [columnId]);
/**
* Converts a QlPredicate to an AdaptablePredicate and dispatches the change.
*/
const handlePredicateChange = React.useCallback((newPredicate) => {
if (!newPredicate) {
handleClear();
return;
}
const newAdaptablePredicates = newPredicate.args.map(utils_1.mapQlPredicateToAdaptablePredicate);
handleOnChange(newAdaptablePredicates, newPredicate.operator);
}, [columnId]);
return {
qlPredicate,
qlPredicateDefs,
columnFilter,
handleClear,
handlePredicateChange,
handleOnChange,
column,
};
};
exports.useAdaptableFilterWrapper = useAdaptableFilterWrapper;