identity-admin 1.27.3 → 1.27.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -41,6 +41,8 @@ const ReportsGenerator_1 = __importDefault(require("../helpers/ReportsGenerator"
|
|
|
41
41
|
const IUserActionsLog_1 = require("../models/userActionsLog/IUserActionsLog");
|
|
42
42
|
const UserActionsLog_1 = __importDefault(require("../models/userActionsLog/UserActionsLog"));
|
|
43
43
|
const PermissionResource_1 = require("../helpers/Permissions/PermissionResource");
|
|
44
|
+
const RecordsCounter_1 = require("../helpers/RecordsCounter");
|
|
45
|
+
const FilterQueryHelper_1 = require("../helpers/FilterQueryHelper");
|
|
44
46
|
let DashboardController = DashboardController_1 = class DashboardController {
|
|
45
47
|
constructor(resource, repository, resources, modelConfigurations) {
|
|
46
48
|
this.resource = resource;
|
|
@@ -526,6 +528,7 @@ let DashboardController = DashboardController_1 = class DashboardController {
|
|
|
526
528
|
if (!record) {
|
|
527
529
|
return ResponseUtils_1.default.send(res, 404, 'record not found');
|
|
528
530
|
}
|
|
531
|
+
const recordPageResult = yield RecordsCounter_1.RecordsCounter.count(req, resource, repository, record, this.modelConfigurations);
|
|
529
532
|
record = record.toObject();
|
|
530
533
|
//record = await this.getExtras(record._id.toString(), record, this.getExtraRepository())
|
|
531
534
|
record = yield ResourceHelper_1.default.addExtraFields(modifiedResource.showProperties, modifiedResource.properties.model, record, StringUtils_1.default.lowerCaseFirstLetter(modifiedResource.properties.modelName), resource);
|
|
@@ -534,7 +537,7 @@ let DashboardController = DashboardController_1 = class DashboardController {
|
|
|
534
537
|
if (afterMethod && record) {
|
|
535
538
|
extras = yield afterMethod(req, record);
|
|
536
539
|
}
|
|
537
|
-
return ResponseUtils_1.default.ok(res, Object.assign(Object.assign({}, extras), { record: record ? record : null }));
|
|
540
|
+
return ResponseUtils_1.default.ok(res, Object.assign(Object.assign({}, extras), { record: record ? record : null, numberOfRecords: recordPageResult === null || recordPageResult === void 0 ? void 0 : recordPageResult.recordsCount, recordIndex: recordPageResult === null || recordPageResult === void 0 ? void 0 : recordPageResult.recordIndex }));
|
|
538
541
|
});
|
|
539
542
|
}
|
|
540
543
|
deleteAll(req, res) {
|
|
@@ -677,11 +680,12 @@ let DashboardController = DashboardController_1 = class DashboardController {
|
|
|
677
680
|
? resource.properties.crudOperations.show.nextPreviousButtonHandler
|
|
678
681
|
: undefined;
|
|
679
682
|
var neighbor;
|
|
683
|
+
const filter = yield FilterQueryHelper_1.FilterQueryHelper.getFilter(req, resource, this.modelConfigurations);
|
|
680
684
|
if (neighborRecordType === helpers_1.NeighborTypes.NEXT) {
|
|
681
|
-
neighbor = yield (model === null || model === void 0 ? void 0 : model.findOne(handler ? yield handler(req, nextQuery, currentUser, neighborRecordType) : nextQuery).sort(nextSortQuery).limit(1));
|
|
685
|
+
neighbor = yield (model === null || model === void 0 ? void 0 : model.findOne(handler ? yield handler(req, nextQuery, currentUser, neighborRecordType) : Object.assign(Object.assign({}, nextQuery), filter)).sort(nextSortQuery).limit(1));
|
|
682
686
|
}
|
|
683
687
|
else {
|
|
684
|
-
neighbor = yield (model === null || model === void 0 ? void 0 : model.findOne(handler ? yield handler(req, prevQuery, currentUser, neighborRecordType) : prevQuery).sort(previousSortQuery).limit(1));
|
|
688
|
+
neighbor = yield (model === null || model === void 0 ? void 0 : model.findOne(handler ? yield handler(req, prevQuery, currentUser, neighborRecordType) : Object.assign(Object.assign({}, prevQuery), filter)).sort(previousSortQuery).limit(1));
|
|
685
689
|
}
|
|
686
690
|
const hasNeighbor = record && neighbor && neighbor._id ? true : false;
|
|
687
691
|
const neighborRecordId = hasNeighbor ? neighbor._id : undefined;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { IRequest } from '../middlewares/isAuth';
|
|
2
|
+
import { IResourceFile } from '../types/IResourceFile';
|
|
3
|
+
import { IModelConfigurationDocument } from '../models/modelConfiguration/IModelConfigurations';
|
|
4
|
+
export declare class FilterQueryHelper {
|
|
5
|
+
static getFilter(req: IRequest, resource: IResourceFile, modelConfigurations?: Map<string, IModelConfigurationDocument> | undefined): Promise<{
|
|
6
|
+
[key: string]: any;
|
|
7
|
+
} | undefined>;
|
|
8
|
+
private static getSearchableSubStringFilter;
|
|
9
|
+
}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.FilterQueryHelper = void 0;
|
|
16
|
+
const mongoose_1 = __importDefault(require("mongoose"));
|
|
17
|
+
const FiltersHelper_1 = __importDefault(require("./FiltersHelper"));
|
|
18
|
+
const LocalizedStringHelper_1 = __importDefault(require("./LocalizedStringHelper"));
|
|
19
|
+
const ResourceHelper_1 = __importDefault(require("./ResourceHelper"));
|
|
20
|
+
class FilterQueryHelper {
|
|
21
|
+
static getFilter(req, resource, modelConfigurations) {
|
|
22
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
23
|
+
const searchableSubString = req.query.filter ? new RegExp(req.query.filter, 'i') : undefined;
|
|
24
|
+
const scope = req.query.scope;
|
|
25
|
+
const currentUser = req.user;
|
|
26
|
+
const filtersQuery = req.query.filters;
|
|
27
|
+
const filters = filtersQuery ? filtersQuery.split('^^') : undefined;
|
|
28
|
+
if (!resource) {
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
if (!currentUser) {
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
const sort = req.query.order;
|
|
35
|
+
const sortBy = req.query.orderBy;
|
|
36
|
+
const sortQuery = {};
|
|
37
|
+
sortQuery[sortBy] = sort;
|
|
38
|
+
if (sortBy !== '_id') {
|
|
39
|
+
sortQuery._id = 'asc';
|
|
40
|
+
}
|
|
41
|
+
var filter = {};
|
|
42
|
+
if (scope && resource.properties.filters && resource.properties.filters.scopes && resource.properties.filters.scopes.isAccessible) {
|
|
43
|
+
if (resource.properties.filters.scopes.manual) {
|
|
44
|
+
filter = yield resource.properties.filters.scopes.manual.handler(filter, scope, currentUser);
|
|
45
|
+
}
|
|
46
|
+
else if (resource.properties.filters.scopes.auto) {
|
|
47
|
+
const key = resource.properties.filters.scopes.auto.key;
|
|
48
|
+
if (key) {
|
|
49
|
+
filter[key] = scope;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
if (searchableSubString) {
|
|
54
|
+
filter = this.getSearchableSubStringFilter(resource, filter, searchableSubString, modelConfigurations);
|
|
55
|
+
}
|
|
56
|
+
filter = yield FiltersHelper_1.default.appendFilters(filter, filters, resource);
|
|
57
|
+
const crudOperations = resource.properties.crudOperations;
|
|
58
|
+
if (crudOperations && crudOperations.index && crudOperations.index.before) {
|
|
59
|
+
filter = yield crudOperations.index.before(req, filter, currentUser);
|
|
60
|
+
}
|
|
61
|
+
return filter;
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
static getSearchableSubStringFilter(resource, filter, subString, modelConfigurations) {
|
|
65
|
+
const schema = resource.properties.resource.schema.paths;
|
|
66
|
+
const searchBy = ResourceHelper_1.default.getSchemaTitle(schema, resource, modelConfigurations === null || modelConfigurations === void 0 ? void 0 : modelConfigurations.get(resource.properties.modelName));
|
|
67
|
+
if (searchBy === '_id') {
|
|
68
|
+
if (!mongoose_1.default.isValidObjectId(subString.source)) {
|
|
69
|
+
return filter;
|
|
70
|
+
}
|
|
71
|
+
filter[searchBy] = subString.source;
|
|
72
|
+
return filter;
|
|
73
|
+
}
|
|
74
|
+
if (LocalizedStringHelper_1.default.checkLocalizedStringType(resource, searchBy)) {
|
|
75
|
+
filter.$or = [LocalizedStringHelper_1.default.getFilterObject(searchBy, '0', subString), LocalizedStringHelper_1.default.getFilterObject(searchBy, '1', subString)];
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
filter[searchBy] = subString;
|
|
79
|
+
}
|
|
80
|
+
return filter;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
exports.FilterQueryHelper = FilterQueryHelper;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { IRequest } from '../middlewares/isAuth';
|
|
2
|
+
import Repository from '../repositories/Repository';
|
|
3
|
+
import { IResourceFile } from '../types/IResourceFile';
|
|
4
|
+
import { IModelConfigurationDocument } from '../models/modelConfiguration/IModelConfigurations';
|
|
5
|
+
export declare class RecordsCounter {
|
|
6
|
+
static count(req: IRequest, resource: IResourceFile, repository: Repository<any>, currentRecord: any, modelConfigurations?: Map<string, IModelConfigurationDocument> | undefined): Promise<{
|
|
7
|
+
recordsCount: number;
|
|
8
|
+
recordIndex: number;
|
|
9
|
+
}>;
|
|
10
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.RecordsCounter = void 0;
|
|
13
|
+
const FilterQueryHelper_1 = require("./FilterQueryHelper");
|
|
14
|
+
class RecordsCounter {
|
|
15
|
+
static count(req, resource, repository, currentRecord, modelConfigurations) {
|
|
16
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
17
|
+
const sort = req.query.order;
|
|
18
|
+
const sortBy = req.query.orderBy;
|
|
19
|
+
const sortQuery = {};
|
|
20
|
+
sortQuery[sortBy] = sort;
|
|
21
|
+
if (sortBy !== '_id') {
|
|
22
|
+
sortQuery._id = 'asc';
|
|
23
|
+
}
|
|
24
|
+
const filter = yield FilterQueryHelper_1.FilterQueryHelper.getFilter(req, resource, modelConfigurations);
|
|
25
|
+
const comparisonQuery = { $or: [] };
|
|
26
|
+
comparisonQuery.$or.push({ [sortBy]: { [sort === 'asc' ? '$lt' : '$gt']: currentRecord[sortBy] } }, { [sortBy]: currentRecord[sortBy], _id: { $lt: currentRecord._id } });
|
|
27
|
+
const recordIndex = (yield repository.count(Object.assign(Object.assign({}, filter), comparisonQuery))) + 1;
|
|
28
|
+
const recordsCount = yield repository.count(filter);
|
|
29
|
+
return { recordsCount, recordIndex };
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
exports.RecordsCounter = RecordsCounter;
|