@avonjs/avonjs
Version:
A fluent Node.js API generator.
58 lines (57 loc) • 1.9 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const collect_js_1 = __importDefault(require("collect.js"));
const Contracts_1 = require("../../Contracts");
const Filters_1 = require("../../Filters");
const FilterableFields_1 = __importDefault(require("../../Mixins/FilterableFields"));
class BelongsToFilter extends (0, FilterableFields_1.default)(Filters_1.Filter) {
field;
/**
* The help text for the filter.
*/
helpText = 'Filter records by related resource IDs.';
constructor(field) {
super();
this.field = field;
}
/**
* Apply the filter into the given repository.
*/
async apply(request, queryBuilder, value) {
if (typeof this.field.filterableCallback === 'function') {
super.apply(request, queryBuilder, value);
}
else if (this.field.filterableCallback) {
queryBuilder.where({
key: this.field.foreignKeyName(request),
operator: Contracts_1.Operator.in, //@ts-ignore
value: (0, collect_js_1.default)(value).filter().all(),
});
}
}
filterableAttribute(request) {
return this.field.foreignKeyName(request);
}
parseValue(value) {
//@ts-ignore
return (0, collect_js_1.default)(value).filter().all();
}
/**
* Get the swagger-ui schema.
*/
schema(request) {
return {
type: 'array',
items: { $ref: '#components/schemas/PrimaryKey' },
nullable: this.isNullable(),
};
}
isValidNullValue(value) {
//@ts-ignore
return (0, collect_js_1.default)(value).filter().isEmpty();
}
}
exports.default = BelongsToFilter;