@saltcorn/data 0.9.3-beta.4 → 0.9.3-beta.5
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.
- package/dist/base-plugin/index.d.ts +43 -42
- package/dist/base-plugin/index.d.ts.map +1 -1
- package/dist/base-plugin/types.js +2 -2
- package/dist/base-plugin/types.js.map +1 -1
- package/dist/base-plugin/viewtemplates/edit.d.ts +3 -2
- package/dist/base-plugin/viewtemplates/edit.d.ts.map +1 -1
- package/dist/base-plugin/viewtemplates/edit.js +35 -5
- package/dist/base-plugin/viewtemplates/edit.js.map +1 -1
- package/dist/base-plugin/viewtemplates/filter.js +2 -2
- package/dist/base-plugin/viewtemplates/filter.js.map +1 -1
- package/dist/base-plugin/viewtemplates/show.d.ts.map +1 -1
- package/dist/base-plugin/viewtemplates/show.js +5 -0
- package/dist/base-plugin/viewtemplates/show.js.map +1 -1
- package/dist/db/fixtures.d.ts.map +1 -1
- package/dist/db/fixtures.js +71 -0
- package/dist/db/fixtures.js.map +1 -1
- package/dist/db/state.d.ts +3 -0
- package/dist/db/state.d.ts.map +1 -1
- package/dist/db/state.js +34 -1
- package/dist/db/state.js.map +1 -1
- package/dist/migrations/202210051058.d.ts.map +1 -1
- package/dist/migrations/202210051058.js +6 -1
- package/dist/migrations/202210051058.js.map +1 -1
- package/dist/migrations/202210101540.d.ts.map +1 -1
- package/dist/migrations/202210101540.js +6 -1
- package/dist/migrations/202210101540.js.map +1 -1
- package/dist/migrations/202304281224.d.ts.map +1 -1
- package/dist/migrations/202304281224.js +6 -1
- package/dist/migrations/202304281224.js.map +1 -1
- package/dist/migrations/202311231355.d.ts +2 -0
- package/dist/migrations/202311231355.d.ts.map +1 -0
- package/dist/migrations/202311231355.js +19 -0
- package/dist/migrations/202311231355.js.map +1 -0
- package/dist/models/config.d.ts.map +1 -1
- package/dist/models/config.js +17 -0
- package/dist/models/config.js.map +1 -1
- package/dist/models/field.d.ts +1 -1
- package/dist/models/field.d.ts.map +1 -1
- package/dist/models/field.js +1 -1
- package/dist/models/field.js.map +1 -1
- package/dist/models/index.d.ts +1 -1
- package/dist/models/layout.d.ts.map +1 -1
- package/dist/models/layout.js +8 -0
- package/dist/models/layout.js.map +1 -1
- package/dist/models/page.d.ts +1 -1
- package/dist/models/page.d.ts.map +1 -1
- package/dist/models/page.js +4 -2
- package/dist/models/page.js.map +1 -1
- package/dist/models/page_group.d.ts +111 -0
- package/dist/models/page_group.d.ts.map +1 -0
- package/dist/models/page_group.js +347 -0
- package/dist/models/page_group.js.map +1 -0
- package/dist/models/page_group_member.d.ts +61 -0
- package/dist/models/page_group_member.d.ts.map +1 -0
- package/dist/models/page_group_member.js +133 -0
- package/dist/models/page_group_member.js.map +1 -0
- package/dist/tests/auxtest.test.js +1 -1
- package/dist/tests/edit.test.js +1 -0
- package/dist/tests/edit.test.js.map +1 -1
- package/dist/tests/models.test.js +94 -0
- package/dist/tests/models.test.js.map +1 -1
- package/dist/tests/page_group.test.d.ts +2 -0
- package/dist/tests/page_group.test.d.ts.map +1 -0
- package/dist/tests/page_group.test.js +51 -0
- package/dist/tests/page_group.test.js.map +1 -0
- package/dist/tests/state.test.js +5 -0
- package/dist/tests/state.test.js.map +1 -1
- package/dist/tests/workflow.test.js +3 -0
- package/dist/tests/workflow.test.js.map +1 -1
- package/package.json +7 -7
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import type { AbstractPageGroup, PageGroupCfg } from "@saltcorn/types/model-abstracts/abstract_page_group";
|
|
2
|
+
import Page from "./page";
|
|
3
|
+
import { Row, SelectOptions, Where } from "@saltcorn/db-common/internal";
|
|
4
|
+
import type { AbstractPageGroupMember, PageGroupMemberCfg } from "@saltcorn/types/model-abstracts/abstract_page_group_member";
|
|
5
|
+
import type { ConnectedObjects } from "@saltcorn/types/base_types";
|
|
6
|
+
import PageGroupMember from "./page_group_member";
|
|
7
|
+
/**
|
|
8
|
+
* PageGroup class
|
|
9
|
+
* This is a collection of pages that can be requested like a normal page.
|
|
10
|
+
* Each member of the group has an eligibility formula, and the first page whose eligibility formula matches is shown.
|
|
11
|
+
* This can be used to show different pages on different devices.
|
|
12
|
+
*/
|
|
13
|
+
declare class PageGroup implements AbstractPageGroup {
|
|
14
|
+
id?: number;
|
|
15
|
+
name: string;
|
|
16
|
+
description?: string;
|
|
17
|
+
members: Array<AbstractPageGroupMember>;
|
|
18
|
+
min_role: number;
|
|
19
|
+
constructor(cfg: PageGroupCfg);
|
|
20
|
+
/**
|
|
21
|
+
* determine the first page in the group that matches the client screen size
|
|
22
|
+
* @param data client screen and window size
|
|
23
|
+
* @param user the user or just { role_id: 100 }
|
|
24
|
+
* @param locale
|
|
25
|
+
* @returns the matching page, or null
|
|
26
|
+
*/
|
|
27
|
+
getEligiblePage(data: ScreenInfoParams, user: any, locale?: string): Promise<Page | null>;
|
|
28
|
+
/**
|
|
29
|
+
* manipulate the sequence of a member
|
|
30
|
+
* @param member
|
|
31
|
+
* @param mode
|
|
32
|
+
* @returns
|
|
33
|
+
*/
|
|
34
|
+
moveMember(member: AbstractPageGroupMember, mode: "Up" | "Down"): Promise<void>;
|
|
35
|
+
/**
|
|
36
|
+
* @returns the members sorted by sequence
|
|
37
|
+
*/
|
|
38
|
+
sortedMembers(): Array<AbstractPageGroupMember>;
|
|
39
|
+
loadPages(): Promise<Array<Page>>;
|
|
40
|
+
/**
|
|
41
|
+
* find groups
|
|
42
|
+
* @param where
|
|
43
|
+
* @param selectopts
|
|
44
|
+
* @returns an array of page groups
|
|
45
|
+
*/
|
|
46
|
+
static find(where?: Where, selectopts?: SelectOptions): Promise<PageGroup[]>;
|
|
47
|
+
/**
|
|
48
|
+
* find one group
|
|
49
|
+
* @param where
|
|
50
|
+
* @returns one page group or null
|
|
51
|
+
*/
|
|
52
|
+
static findOne(where: Where): PageGroup | null;
|
|
53
|
+
/**
|
|
54
|
+
* create a new group and add members
|
|
55
|
+
* @param cfg
|
|
56
|
+
* @param noTransaction
|
|
57
|
+
* @returns the created group
|
|
58
|
+
*/
|
|
59
|
+
static create(cfg: PageGroupCfg, noTransaction?: boolean): Promise<PageGroup>;
|
|
60
|
+
/**
|
|
61
|
+
* update a group
|
|
62
|
+
* @param id id of the group
|
|
63
|
+
* @param row values to update
|
|
64
|
+
*/
|
|
65
|
+
static update(id: number, row: Row): Promise<void>;
|
|
66
|
+
/**
|
|
67
|
+
* delete a group
|
|
68
|
+
* @param where
|
|
69
|
+
*/
|
|
70
|
+
static delete(where: Where | number): Promise<void>;
|
|
71
|
+
/**
|
|
72
|
+
* delete this group
|
|
73
|
+
*/
|
|
74
|
+
delete(): Promise<void>;
|
|
75
|
+
/**
|
|
76
|
+
* duplicate this group with a new name
|
|
77
|
+
* @returns the created group
|
|
78
|
+
*/
|
|
79
|
+
clone(): Promise<PageGroup>;
|
|
80
|
+
/**
|
|
81
|
+
* add a member to this group
|
|
82
|
+
* @param cfg
|
|
83
|
+
*/
|
|
84
|
+
addMember(cfg: PageGroupMemberCfg, noRrefresh?: boolean): Promise<PageGroupMember>;
|
|
85
|
+
/**
|
|
86
|
+
* clear all members from this group
|
|
87
|
+
*/
|
|
88
|
+
clearMembers(): Promise<void>;
|
|
89
|
+
/**
|
|
90
|
+
* remove a member from this group
|
|
91
|
+
* @param id id of the member
|
|
92
|
+
*/
|
|
93
|
+
removeMember(id: number): Promise<void>;
|
|
94
|
+
/**
|
|
95
|
+
* find a member
|
|
96
|
+
* @param where
|
|
97
|
+
*/
|
|
98
|
+
findMember(where: any): Array<AbstractPageGroupMember>;
|
|
99
|
+
connected_objects(): ConnectedObjects;
|
|
100
|
+
}
|
|
101
|
+
declare namespace PageGroup {
|
|
102
|
+
type ScreenInfoParams = {
|
|
103
|
+
width: number;
|
|
104
|
+
height: number;
|
|
105
|
+
innerWidth: number;
|
|
106
|
+
innerHeight: number;
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
declare type ScreenInfoParams = PageGroup.ScreenInfoParams;
|
|
110
|
+
export = PageGroup;
|
|
111
|
+
//# sourceMappingURL=page_group.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page_group.d.ts","sourceRoot":"","sources":["../../models/page_group.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,iBAAiB,EACjB,YAAY,EACb,MAAM,qDAAqD,CAAC;AAC7D,OAAO,IAAI,MAAM,QAAQ,CAAC;AAC1B,OAAO,EAAE,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAC;AACzE,OAAO,KAAK,EACV,uBAAuB,EACvB,kBAAkB,EACnB,MAAM,4DAA4D,CAAC;AAGpE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,eAAe,MAAM,qBAAqB,CAAC;AAIlD;;;;;GAKG;AACH,cAAM,SAAU,YAAW,iBAAiB;IAC1C,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,KAAK,CAAC,uBAAuB,CAAC,CAAC;IACxC,QAAQ,EAAE,MAAM,CAAC;gBACL,GAAG,EAAE,YAAY;IAU7B;;;;;;OAMG;IACG,eAAe,CAAC,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,MAAM;IAuBxE;;;;;OAKG;IACG,UAAU,CAAC,MAAM,EAAE,uBAAuB,EAAE,IAAI,EAAE,IAAI,GAAG,MAAM;IAoCrE;;OAEG;IACH,aAAa,IAAI,KAAK,CAAC,uBAAuB,CAAC;IAIzC,SAAS,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAQvC;;;;;OAKG;WACU,IAAI,CACf,KAAK,CAAC,EAAE,KAAK,EACb,UAAU,GAAE,aAAiD,GAC5D,OAAO,CAAC,SAAS,EAAE,CAAC;IA8BvB;;;;OAIG;IACH,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,SAAS,GAAG,IAAI;IAY9C;;;;;OAKG;WACU,MAAM,CACjB,GAAG,EAAE,YAAY,EACjB,aAAa,CAAC,EAAE,OAAO,GACtB,OAAO,CAAC,SAAS,CAAC;IAiCrB;;;;OAIG;WACU,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAKxD;;;OAGG;WACU,MAAM,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgCzD;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAK7B;;;OAGG;IACG,KAAK,IAAI,OAAO,CAAC,SAAS,CAAC;IA2BjC;;;OAGG;IACG,SAAS,CACb,GAAG,EAAE,kBAAkB,EACvB,UAAU,CAAC,EAAE,OAAO,GACnB,OAAO,CAAC,eAAe,CAAC;IAwB3B;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAMnC;;;OAGG;IACG,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAM7C;;;OAGG;IACH,UAAU,CAAC,KAAK,EAAE,GAAG,GAAG,KAAK,CAAC,uBAAuB,CAAC;IAKtD,iBAAiB,IAAI,gBAAgB;CAGtC;AAGD,kBAAU,SAAS,CAAC;IAClB,KAAY,gBAAgB,GAAG;QAC7B,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;CACH;AAED,aAAK,gBAAgB,GAAG,SAAS,CAAC,gBAAgB,CAAC;AAEnD,SAAS,SAAS,CAAC"}
|
|
@@ -0,0 +1,347 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
+
};
|
|
28
|
+
const db_1 = __importDefault(require("../db"));
|
|
29
|
+
const page_1 = __importDefault(require("./page"));
|
|
30
|
+
const utils_1 = __importDefault(require("../utils"));
|
|
31
|
+
const { satisfies } = utils_1.default;
|
|
32
|
+
const page_group_member_1 = __importDefault(require("./page_group_member"));
|
|
33
|
+
const expression_1 = __importDefault(require("./expression"));
|
|
34
|
+
const { eval_expression } = expression_1.default;
|
|
35
|
+
/**
|
|
36
|
+
* PageGroup class
|
|
37
|
+
* This is a collection of pages that can be requested like a normal page.
|
|
38
|
+
* Each member of the group has an eligibility formula, and the first page whose eligibility formula matches is shown.
|
|
39
|
+
* This can be used to show different pages on different devices.
|
|
40
|
+
*/
|
|
41
|
+
class PageGroup {
|
|
42
|
+
constructor(cfg) {
|
|
43
|
+
this.id = cfg.id;
|
|
44
|
+
this.name = cfg.name;
|
|
45
|
+
this.description = cfg.description;
|
|
46
|
+
this.members = cfg.members
|
|
47
|
+
? cfg.members.map((m) => new page_group_member_1.default(m))
|
|
48
|
+
: [];
|
|
49
|
+
this.min_role = cfg.min_role || 100;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* determine the first page in the group that matches the client screen size
|
|
53
|
+
* @param data client screen and window size
|
|
54
|
+
* @param user the user or just { role_id: 100 }
|
|
55
|
+
* @param locale
|
|
56
|
+
* @returns the matching page, or null
|
|
57
|
+
*/
|
|
58
|
+
async getEligiblePage(data, user, locale) {
|
|
59
|
+
const Page = (await Promise.resolve().then(() => __importStar(require("./page")))).default;
|
|
60
|
+
const sorted = this.members.sort((a, b) => a.sequence - b.sequence);
|
|
61
|
+
const expressionRow = { ...data, locale: locale || "en" };
|
|
62
|
+
for (const member of sorted) {
|
|
63
|
+
const res = eval_expression(member.eligible_formula, expressionRow, user);
|
|
64
|
+
if (res === true) {
|
|
65
|
+
const page = Page.findOne({ id: member.page_id });
|
|
66
|
+
if (page) {
|
|
67
|
+
if (user.role_id <= page.min_role)
|
|
68
|
+
return page;
|
|
69
|
+
else
|
|
70
|
+
await require("../db/state")
|
|
71
|
+
.getState()
|
|
72
|
+
.log(4, `page ${page.name} is not accessible for role_id ${user.role_id}`);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* manipulate the sequence of a member
|
|
80
|
+
* @param member
|
|
81
|
+
* @param mode
|
|
82
|
+
* @returns
|
|
83
|
+
*/
|
|
84
|
+
async moveMember(member, mode) {
|
|
85
|
+
let transactionOpen = false;
|
|
86
|
+
try {
|
|
87
|
+
await db_1.default.begin();
|
|
88
|
+
transactionOpen = true;
|
|
89
|
+
const sorted = this.members.sort((a, b) => a.sequence - b.sequence);
|
|
90
|
+
const idx = sorted.findIndex((m) => m.id === member.id);
|
|
91
|
+
if (idx === -1)
|
|
92
|
+
return;
|
|
93
|
+
if (mode === "Up" && idx > 0) {
|
|
94
|
+
const prev = sorted[idx - 1];
|
|
95
|
+
const tmp = prev.sequence;
|
|
96
|
+
await page_group_member_1.default.update(prev.id, { sequence: member.sequence }, true);
|
|
97
|
+
await page_group_member_1.default.update(member.id, { sequence: tmp }, true);
|
|
98
|
+
}
|
|
99
|
+
if (mode === "Down" && idx < sorted.length - 1) {
|
|
100
|
+
const next = sorted[idx + 1];
|
|
101
|
+
const tmp = next.sequence;
|
|
102
|
+
await page_group_member_1.default.update(next.id, { sequence: member.sequence }, true);
|
|
103
|
+
await page_group_member_1.default.update(member.id, { sequence: tmp }, true);
|
|
104
|
+
}
|
|
105
|
+
await db_1.default.commit();
|
|
106
|
+
await require("../db/state").getState().refresh_page_groups();
|
|
107
|
+
}
|
|
108
|
+
catch (e) {
|
|
109
|
+
if (transactionOpen)
|
|
110
|
+
await db_1.default.rollback();
|
|
111
|
+
throw e;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* @returns the members sorted by sequence
|
|
116
|
+
*/
|
|
117
|
+
sortedMembers() {
|
|
118
|
+
return this.members.sort((a, b) => a.sequence - b.sequence);
|
|
119
|
+
}
|
|
120
|
+
async loadPages() {
|
|
121
|
+
const pageIds = this.members.map(({ page_id }) => page_id);
|
|
122
|
+
const idsLookup = new Set(pageIds);
|
|
123
|
+
return !db_1.default.isSQLite
|
|
124
|
+
? await page_1.default.find({ id: { in: pageIds } })
|
|
125
|
+
: (await page_1.default.find({})).filter(({ id }) => id && idsLookup.has(id));
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* find groups
|
|
129
|
+
* @param where
|
|
130
|
+
* @param selectopts
|
|
131
|
+
* @returns an array of page groups
|
|
132
|
+
*/
|
|
133
|
+
static async find(where, selectopts = { orderBy: "name", nocase: true }) {
|
|
134
|
+
if (selectopts.cached) {
|
|
135
|
+
const { getState } = require("../db/state");
|
|
136
|
+
return getState()
|
|
137
|
+
.page_groups.map((t) => new PageGroup(t))
|
|
138
|
+
.filter(satisfies(where || {}));
|
|
139
|
+
}
|
|
140
|
+
const groupsDb = await db_1.default.select("_sc_page_groups", where, selectopts);
|
|
141
|
+
const groupIds = groupsDb.map((g) => g.id);
|
|
142
|
+
const members = !db_1.default.isSQLite
|
|
143
|
+
? await db_1.default.select("_sc_page_group_members", {
|
|
144
|
+
page_group_id: { in: groupIds },
|
|
145
|
+
})
|
|
146
|
+
: (await db_1.default.select("_sc_page_group_members")).filter((m) => groupIds.includes(m.page_group_id));
|
|
147
|
+
const memberToGroup = members.reduce((acc, member) => {
|
|
148
|
+
acc[member.page_group_id] = acc[member.page_group_id] || [];
|
|
149
|
+
acc[member.page_group_id].push(member);
|
|
150
|
+
return acc;
|
|
151
|
+
}, {});
|
|
152
|
+
return groupsDb.map((dbGroup) => {
|
|
153
|
+
const members = (memberToGroup[dbGroup.id] || []).map((m) => new page_group_member_1.default(m));
|
|
154
|
+
dbGroup.members = members;
|
|
155
|
+
return new PageGroup(dbGroup);
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* find one group
|
|
160
|
+
* @param where
|
|
161
|
+
* @returns one page group or null
|
|
162
|
+
*/
|
|
163
|
+
static findOne(where) {
|
|
164
|
+
const { getState } = require("../db/state");
|
|
165
|
+
const p = getState().page_groups.find(where.id
|
|
166
|
+
? (t) => t.id === +where.id
|
|
167
|
+
: where.name
|
|
168
|
+
? (t) => t.name === where.name
|
|
169
|
+
: satisfies(where));
|
|
170
|
+
return p ? new PageGroup({ ...p }) : p;
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* create a new group and add members
|
|
174
|
+
* @param cfg
|
|
175
|
+
* @param noTransaction
|
|
176
|
+
* @returns the created group
|
|
177
|
+
*/
|
|
178
|
+
static async create(cfg, noTransaction // or within transaction ?
|
|
179
|
+
) {
|
|
180
|
+
const pageGroup = new PageGroup(cfg);
|
|
181
|
+
const membersToCopy = pageGroup.members;
|
|
182
|
+
pageGroup.members = [];
|
|
183
|
+
const { id, members, ...rest } = pageGroup;
|
|
184
|
+
let transactionOpen = false;
|
|
185
|
+
try {
|
|
186
|
+
if (!noTransaction) {
|
|
187
|
+
await db_1.default.begin();
|
|
188
|
+
transactionOpen = true;
|
|
189
|
+
}
|
|
190
|
+
const fid = await db_1.default.insert("_sc_page_groups", rest);
|
|
191
|
+
pageGroup.id = fid;
|
|
192
|
+
for (const member of membersToCopy) {
|
|
193
|
+
await pageGroup.addMember({
|
|
194
|
+
page_id: member.page_id,
|
|
195
|
+
eligible_formula: member.eligible_formula,
|
|
196
|
+
description: member.description,
|
|
197
|
+
}, true);
|
|
198
|
+
}
|
|
199
|
+
if (transactionOpen)
|
|
200
|
+
await db_1.default.commit();
|
|
201
|
+
}
|
|
202
|
+
catch (e) {
|
|
203
|
+
if (transactionOpen)
|
|
204
|
+
await db_1.default.rollback();
|
|
205
|
+
throw e;
|
|
206
|
+
}
|
|
207
|
+
if (!noTransaction)
|
|
208
|
+
await require("../db/state").getState().refresh_page_groups();
|
|
209
|
+
return pageGroup;
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* update a group
|
|
213
|
+
* @param id id of the group
|
|
214
|
+
* @param row values to update
|
|
215
|
+
*/
|
|
216
|
+
static async update(id, row) {
|
|
217
|
+
await db_1.default.update("_sc_page_groups", row, id);
|
|
218
|
+
await require("../db/state").getState().refresh_page_groups();
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* delete a group
|
|
222
|
+
* @param where
|
|
223
|
+
*/
|
|
224
|
+
static async delete(where) {
|
|
225
|
+
try {
|
|
226
|
+
await db_1.default.begin();
|
|
227
|
+
if (typeof where === "number") {
|
|
228
|
+
const id = where;
|
|
229
|
+
await db_1.default.deleteWhere("_sc_page_group_members", { page_group_id: id });
|
|
230
|
+
await db_1.default.deleteWhere("_sc_page_groups", { id });
|
|
231
|
+
}
|
|
232
|
+
else {
|
|
233
|
+
const pageGroups = await PageGroup.find(where);
|
|
234
|
+
if (pageGroups.length > 0) {
|
|
235
|
+
const pageGroupIds = pageGroups.map((p) => p.id);
|
|
236
|
+
if (!db_1.default.isSQLite)
|
|
237
|
+
await db_1.default.deleteWhere("_sc_page_group_members", {
|
|
238
|
+
page_group_id: { in: pageGroupIds },
|
|
239
|
+
});
|
|
240
|
+
else
|
|
241
|
+
db_1.default.query(`DELETE FROM _sc_page_group_members WHERE page_group_id IN (${pageGroupIds.join(",")})`);
|
|
242
|
+
await db_1.default.deleteWhere("_sc_page_groups", where);
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
await db_1.default.commit();
|
|
246
|
+
await require("../db/state").getState().refresh_page_groups();
|
|
247
|
+
}
|
|
248
|
+
catch (e) {
|
|
249
|
+
await db_1.default.rollback();
|
|
250
|
+
throw e;
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* delete this group
|
|
255
|
+
*/
|
|
256
|
+
async delete() {
|
|
257
|
+
if (!this.id)
|
|
258
|
+
throw new Error("Page group must be saved before deleting");
|
|
259
|
+
await PageGroup.delete({ id: this.id });
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* duplicate this group with a new name
|
|
263
|
+
* @returns the created group
|
|
264
|
+
*/
|
|
265
|
+
async clone() {
|
|
266
|
+
let transactionOpen = false;
|
|
267
|
+
try {
|
|
268
|
+
await db_1.default.begin();
|
|
269
|
+
transactionOpen = true;
|
|
270
|
+
const basename = this.name + " copy";
|
|
271
|
+
let newname;
|
|
272
|
+
for (let i = 0; i < 100; i++) {
|
|
273
|
+
newname = i ? `${basename} (${i})` : basename;
|
|
274
|
+
const existing = PageGroup.findOne({ name: newname });
|
|
275
|
+
if (!existing)
|
|
276
|
+
break;
|
|
277
|
+
}
|
|
278
|
+
const createObj = {
|
|
279
|
+
...this,
|
|
280
|
+
name: newname,
|
|
281
|
+
};
|
|
282
|
+
delete createObj.id;
|
|
283
|
+
const newGroup = await PageGroup.create(createObj, true);
|
|
284
|
+
await db_1.default.commit();
|
|
285
|
+
await require("../db/state").getState().refresh_page_groups();
|
|
286
|
+
return newGroup;
|
|
287
|
+
}
|
|
288
|
+
catch (e) {
|
|
289
|
+
if (transactionOpen)
|
|
290
|
+
await db_1.default.rollback();
|
|
291
|
+
throw e;
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
/**
|
|
295
|
+
* add a member to this group
|
|
296
|
+
* @param cfg
|
|
297
|
+
*/
|
|
298
|
+
async addMember(cfg, noRrefresh) {
|
|
299
|
+
const PageGroupMember = (await Promise.resolve().then(() => __importStar(require("./page_group_member")))).default;
|
|
300
|
+
if (!this.id)
|
|
301
|
+
throw new Error("Page group must be saved before adding members");
|
|
302
|
+
const maxSeq = this.members?.length > 0
|
|
303
|
+
? Math.max(...this.members.map((m) => m.sequence))
|
|
304
|
+
: 0;
|
|
305
|
+
const newMember = await PageGroupMember.create({
|
|
306
|
+
page_group_id: this.id,
|
|
307
|
+
page_id: cfg.page_id,
|
|
308
|
+
sequence: maxSeq + 1,
|
|
309
|
+
eligible_formula: cfg.eligible_formula,
|
|
310
|
+
description: cfg.description,
|
|
311
|
+
}, true);
|
|
312
|
+
this.members.push(newMember);
|
|
313
|
+
if (!noRrefresh)
|
|
314
|
+
await require("../db/state").getState().refresh_page_groups();
|
|
315
|
+
return new PageGroupMember(newMember);
|
|
316
|
+
}
|
|
317
|
+
/**
|
|
318
|
+
* clear all members from this group
|
|
319
|
+
*/
|
|
320
|
+
async clearMembers() {
|
|
321
|
+
await db_1.default.deleteWhere("_sc_page_group_members", { page_group_id: this.id });
|
|
322
|
+
this.members = [];
|
|
323
|
+
await require("../db/state").getState().refresh_page_groups();
|
|
324
|
+
}
|
|
325
|
+
/**
|
|
326
|
+
* remove a member from this group
|
|
327
|
+
* @param id id of the member
|
|
328
|
+
*/
|
|
329
|
+
async removeMember(id) {
|
|
330
|
+
const PageGroupMember = (await Promise.resolve().then(() => __importStar(require("./page_group_member")))).default;
|
|
331
|
+
await PageGroupMember.delete(id, true);
|
|
332
|
+
await require("../db/state").getState().refresh_page_groups();
|
|
333
|
+
}
|
|
334
|
+
/**
|
|
335
|
+
* find a member
|
|
336
|
+
* @param where
|
|
337
|
+
*/
|
|
338
|
+
findMember(where) {
|
|
339
|
+
const pred = page_group_member_1.default.findPred(where) || satisfies(where);
|
|
340
|
+
return this.members.filter(pred);
|
|
341
|
+
}
|
|
342
|
+
connected_objects() {
|
|
343
|
+
return {};
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
module.exports = PageGroup;
|
|
347
|
+
//# sourceMappingURL=page_group.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page_group.js","sourceRoot":"","sources":["../../models/page_group.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { AbstractPageGroupMember, PageGroupMemberCfg } from "@saltcorn/types/model-abstracts/abstract_page_group_member";
|
|
2
|
+
import { Row, SelectOptions, Where } from "@saltcorn/db-common/internal";
|
|
3
|
+
import type { ConnectedObjects } from "@saltcorn/types/base_types";
|
|
4
|
+
/**
|
|
5
|
+
* PageGroupMember class
|
|
6
|
+
*/
|
|
7
|
+
declare class PageGroupMember implements AbstractPageGroupMember {
|
|
8
|
+
id?: number;
|
|
9
|
+
description?: string;
|
|
10
|
+
page_group_id: number;
|
|
11
|
+
page_id: number;
|
|
12
|
+
sequence: number;
|
|
13
|
+
eligible_formula: string;
|
|
14
|
+
constructor(cfg: PageGroupMemberCfg);
|
|
15
|
+
/**
|
|
16
|
+
* find members
|
|
17
|
+
* @param where
|
|
18
|
+
* @param selectopts
|
|
19
|
+
* @returns an array of page group members
|
|
20
|
+
*/
|
|
21
|
+
static find(where?: Where, selectopts?: SelectOptions): Promise<PageGroupMember[]>;
|
|
22
|
+
static findOne(where: number | FindOneObj): PageGroupMember | null;
|
|
23
|
+
/**
|
|
24
|
+
* for internal use
|
|
25
|
+
*/
|
|
26
|
+
static findPred(where: number | FindOneObj): ((m: AbstractPageGroupMember) => boolean) | null;
|
|
27
|
+
/**
|
|
28
|
+
* create a page group member
|
|
29
|
+
* @param f
|
|
30
|
+
* @param noRrefresh
|
|
31
|
+
* @returns the created member
|
|
32
|
+
*/
|
|
33
|
+
static create(f: PageGroupMemberCfg, noRrefresh?: boolean): Promise<PageGroupMember>;
|
|
34
|
+
/**
|
|
35
|
+
* update a page group member
|
|
36
|
+
* @param id id of the member
|
|
37
|
+
* @param row values to update
|
|
38
|
+
* @param noRrefresh if true, the state won't reload
|
|
39
|
+
*/
|
|
40
|
+
static update(id: number, row: Row, noRrefresh?: boolean): Promise<void>;
|
|
41
|
+
/**
|
|
42
|
+
* delete this page group member
|
|
43
|
+
* @param noRrefresh if true, the state won't reload
|
|
44
|
+
*/
|
|
45
|
+
delete(noRrefresh?: boolean): Promise<void>;
|
|
46
|
+
/**
|
|
47
|
+
* delete one page group member
|
|
48
|
+
* @param id id of the member
|
|
49
|
+
* @param noRrefresh if true, the state won't reload
|
|
50
|
+
*/
|
|
51
|
+
static delete(id: number, noRrefresh?: boolean): Promise<void>;
|
|
52
|
+
connected_objects(): ConnectedObjects;
|
|
53
|
+
}
|
|
54
|
+
declare type FindOneObj = {
|
|
55
|
+
page_group_id?: number;
|
|
56
|
+
sequence?: number;
|
|
57
|
+
id?: number | string;
|
|
58
|
+
name?: string;
|
|
59
|
+
};
|
|
60
|
+
export = PageGroupMember;
|
|
61
|
+
//# sourceMappingURL=page_group_member.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page_group_member.d.ts","sourceRoot":"","sources":["../../models/page_group_member.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,kBAAkB,EACnB,MAAM,4DAA4D,CAAC;AACpE,OAAO,EAAE,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAC;AAEzE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAInE;;GAEG;AACH,cAAM,eAAgB,YAAW,uBAAuB;IACtD,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;gBACb,GAAG,EAAE,kBAAkB;IAUnC;;;;;OAKG;WACU,IAAI,CACf,KAAK,CAAC,EAAE,KAAK,EACb,UAAU,GAAE,aAAkB,GAC7B,OAAO,CAAC,eAAe,EAAE,CAAC;IAqB7B,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,eAAe,GAAG,IAAI;IAYlE;;OAEG;IACH,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,QAI3B,uBAAuB;IAYtC;;;;;OAKG;WACU,MAAM,CACjB,CAAC,EAAE,kBAAkB,EACrB,UAAU,CAAC,EAAE,OAAO,GACnB,OAAO,CAAC,eAAe,CAAC;IAU3B;;;;;OAKG;WACU,MAAM,CACjB,EAAE,EAAE,MAAM,EACV,GAAG,EAAE,GAAG,EACR,UAAU,CAAC,EAAE,OAAO,GACnB,OAAO,CAAC,IAAI,CAAC;IAMhB;;;OAGG;IACG,MAAM,CAAC,UAAU,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAKjD;;;;OAIG;WACU,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAMpE,iBAAiB,IAAI,gBAAgB;CAGtC;AAED,aAAK,UAAU,GAAG;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAYF,SAAS,eAAe,CAAC"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
const db_1 = __importDefault(require("../db"));
|
|
6
|
+
const utils_1 = __importDefault(require("../utils"));
|
|
7
|
+
const { satisfies } = utils_1.default;
|
|
8
|
+
/**
|
|
9
|
+
* PageGroupMember class
|
|
10
|
+
*/
|
|
11
|
+
class PageGroupMember {
|
|
12
|
+
constructor(cfg) {
|
|
13
|
+
this.id = cfg.id;
|
|
14
|
+
if (!cfg.page_group_id)
|
|
15
|
+
throw new Error("page_group_id is required");
|
|
16
|
+
this.page_group_id = cfg.page_group_id;
|
|
17
|
+
this.page_id = cfg.page_id;
|
|
18
|
+
this.sequence = cfg.sequence || 0;
|
|
19
|
+
this.eligible_formula = cfg.eligible_formula;
|
|
20
|
+
this.description = cfg.description;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* find members
|
|
24
|
+
* @param where
|
|
25
|
+
* @param selectopts
|
|
26
|
+
* @returns an array of page group members
|
|
27
|
+
*/
|
|
28
|
+
static async find(where, selectopts = {}) {
|
|
29
|
+
if (selectopts.cached) {
|
|
30
|
+
const { getState } = require("../db/state");
|
|
31
|
+
const groups = getState().page_groups;
|
|
32
|
+
const allMembers = [];
|
|
33
|
+
for (const group of groups) {
|
|
34
|
+
allMembers.push(...group.members);
|
|
35
|
+
}
|
|
36
|
+
return allMembers
|
|
37
|
+
.map((m) => new PageGroupMember(m))
|
|
38
|
+
.filter(satisfies(where || {}));
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
const db_flds = await db_1.default.select("_sc_page_group_members", where, selectopts);
|
|
42
|
+
return db_flds.map((dbf) => new PageGroupMember(dbf));
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
static findOne(where) {
|
|
46
|
+
const { getState } = require("../db/state");
|
|
47
|
+
const groups = getState().page_groups;
|
|
48
|
+
let pred = PageGroupMember.findPred(where);
|
|
49
|
+
if (!pred)
|
|
50
|
+
throw new Error("Invalid where");
|
|
51
|
+
for (const group of groups) {
|
|
52
|
+
const member = group.members.find(pred);
|
|
53
|
+
if (member)
|
|
54
|
+
return member;
|
|
55
|
+
}
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* for internal use
|
|
60
|
+
*/
|
|
61
|
+
static findPred(where) {
|
|
62
|
+
let pred = null;
|
|
63
|
+
if (typeof where === "number" || typeof where === "string") {
|
|
64
|
+
const searchId = +where;
|
|
65
|
+
pred = (m) => m.id === searchId;
|
|
66
|
+
}
|
|
67
|
+
else if (instanceOfFindOneObj(where))
|
|
68
|
+
pred = where.id
|
|
69
|
+
? (m) => m.id === +where.id
|
|
70
|
+
: where.page_group_id && where.sequence
|
|
71
|
+
? (m) => m.page_group_id === where.page_group_id &&
|
|
72
|
+
m.sequence === where.sequence
|
|
73
|
+
: null;
|
|
74
|
+
return pred;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* create a page group member
|
|
78
|
+
* @param f
|
|
79
|
+
* @param noRrefresh
|
|
80
|
+
* @returns the created member
|
|
81
|
+
*/
|
|
82
|
+
static async create(f, noRrefresh) {
|
|
83
|
+
const pageGroupMember = new PageGroupMember(f);
|
|
84
|
+
const { id, ...rest } = pageGroupMember;
|
|
85
|
+
const fid = await db_1.default.insert("_sc_page_group_members", rest);
|
|
86
|
+
pageGroupMember.id = fid;
|
|
87
|
+
if (!noRrefresh)
|
|
88
|
+
await require("../db/state").getState().refresh_page_groups();
|
|
89
|
+
return pageGroupMember;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* update a page group member
|
|
93
|
+
* @param id id of the member
|
|
94
|
+
* @param row values to update
|
|
95
|
+
* @param noRrefresh if true, the state won't reload
|
|
96
|
+
*/
|
|
97
|
+
static async update(id, row, noRrefresh) {
|
|
98
|
+
await db_1.default.update("_sc_page_group_members", row, id);
|
|
99
|
+
if (!noRrefresh)
|
|
100
|
+
await require("../db/state").getState().refresh_page_groups();
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* delete this page group member
|
|
104
|
+
* @param noRrefresh if true, the state won't reload
|
|
105
|
+
*/
|
|
106
|
+
async delete(noRrefresh) {
|
|
107
|
+
if (!this.id)
|
|
108
|
+
throw new Error("Cannot delete page group member without id");
|
|
109
|
+
await PageGroupMember.delete(this.id, noRrefresh);
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* delete one page group member
|
|
113
|
+
* @param id id of the member
|
|
114
|
+
* @param noRrefresh if true, the state won't reload
|
|
115
|
+
*/
|
|
116
|
+
static async delete(id, noRrefresh) {
|
|
117
|
+
await db_1.default.deleteWhere("_sc_page_group_members", { id });
|
|
118
|
+
if (!noRrefresh)
|
|
119
|
+
await require("../db/state").getState().refresh_page_groups();
|
|
120
|
+
}
|
|
121
|
+
connected_objects() {
|
|
122
|
+
return {};
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
function instanceOfFindOneObj(object) {
|
|
126
|
+
return (object &&
|
|
127
|
+
typeof object !== "string" &&
|
|
128
|
+
(("page_group_id" in object &&
|
|
129
|
+
("sequence" in object || "name" in object)) ||
|
|
130
|
+
"id" in object));
|
|
131
|
+
}
|
|
132
|
+
module.exports = PageGroupMember;
|
|
133
|
+
//# sourceMappingURL=page_group_member.js.map
|