@avonjs/avonjs
Version:
A fluent Node.js API generator.
40 lines (39 loc) • 1.46 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const Contracts_1 = require("../../Contracts");
const BelongsToFilter_1 = __importDefault(require("./BelongsToFilter"));
class HasOneOrManyFilter extends BelongsToFilter_1.default {
field;
constructor(field) {
super(field);
this.field = field;
}
/**
* Apply the filter into the given repository.
*/
async apply(request, queryBuilder, value) {
if (typeof this.field.filterableCallback === 'function') {
this.field.applyFilter(request, queryBuilder, this.parseValue(value));
}
else if (this.field.filterableCallback) {
const related = await this.field.relatedResource
.resolveRepository(request)
.whereKeys(Array.isArray(value) ? value : [value])
.all();
queryBuilder.where({
key: this.field.ownerKeyName(request),
value: related.map((model) => {
return model.getAttribute(this.field.foreignKeyName(request));
}),
operator: Contracts_1.Operator.in,
});
}
}
filterableAttribute(request) {
return this.field.ownerKeyName(request);
}
}
exports.default = HasOneOrManyFilter;