@pipedream/qualiobee 0.0.1 → 0.1.0
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/actions/get-learner/get-learner.mjs +31 -0
- package/actions/list-modules/list-modules.mjs +71 -0
- package/actions/update-customer/update-customer.mjs +132 -0
- package/package.json +4 -1
- package/qualiobee.app.mjs +137 -5
- package/sources/common/base-polling.mjs +65 -0
- package/sources/learner-updated/learner-updated.mjs +28 -0
- package/sources/new-customer-created/new-customer-created.mjs +24 -0
- package/sources/new-learner-created/new-learner-created.mjs +24 -0
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import qualiobee from "../../qualiobee.app.mjs";
|
|
2
|
+
|
|
3
|
+
export default {
|
|
4
|
+
key: "qualiobee-get-learner",
|
|
5
|
+
name: "Get Learner",
|
|
6
|
+
description: "Get a learner by UUID in Qualiobee. [See the documentation](https://app.qualiobee.fr/api/doc/#/Learner/PublicLearnerController_getOne)",
|
|
7
|
+
version: "0.0.1",
|
|
8
|
+
annotations: {
|
|
9
|
+
destructiveHint: false,
|
|
10
|
+
openWorldHint: true,
|
|
11
|
+
readOnlyHint: true,
|
|
12
|
+
},
|
|
13
|
+
type: "action",
|
|
14
|
+
props: {
|
|
15
|
+
qualiobee,
|
|
16
|
+
learnerUuid: {
|
|
17
|
+
propDefinition: [
|
|
18
|
+
qualiobee,
|
|
19
|
+
"learnerUuid",
|
|
20
|
+
],
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
async run({ $ }) {
|
|
24
|
+
const response = await this.qualiobee.getLearner({
|
|
25
|
+
$,
|
|
26
|
+
learnerUuid: this.learnerUuid,
|
|
27
|
+
});
|
|
28
|
+
$.export("$summary", `Successfully retrieved learner with UUID ${response.uuid}`);
|
|
29
|
+
return response;
|
|
30
|
+
},
|
|
31
|
+
};
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import qualiobee from "../../qualiobee.app.mjs";
|
|
2
|
+
|
|
3
|
+
export default {
|
|
4
|
+
key: "qualiobee-list-modules",
|
|
5
|
+
name: "List Modules",
|
|
6
|
+
description: "List modules available in the Qualiobee organization. [See the documentation](https://app.qualiobee.fr/api/doc/#/Module/PublicModuleController_getMany)",
|
|
7
|
+
version: "0.0.1",
|
|
8
|
+
annotations: {
|
|
9
|
+
destructiveHint: false,
|
|
10
|
+
openWorldHint: true,
|
|
11
|
+
readOnlyHint: true,
|
|
12
|
+
},
|
|
13
|
+
type: "action",
|
|
14
|
+
props: {
|
|
15
|
+
qualiobee,
|
|
16
|
+
withDeleted: {
|
|
17
|
+
type: "boolean",
|
|
18
|
+
label: "With Deleted",
|
|
19
|
+
description: "Whether to include deleted modules in the response",
|
|
20
|
+
optional: true,
|
|
21
|
+
},
|
|
22
|
+
name: {
|
|
23
|
+
type: "string",
|
|
24
|
+
label: "Name",
|
|
25
|
+
description: "Filter by name",
|
|
26
|
+
optional: true,
|
|
27
|
+
},
|
|
28
|
+
description: {
|
|
29
|
+
type: "string",
|
|
30
|
+
label: "Description",
|
|
31
|
+
description: "Filter by description",
|
|
32
|
+
optional: true,
|
|
33
|
+
},
|
|
34
|
+
moduleUuid: {
|
|
35
|
+
propDefinition: [
|
|
36
|
+
qualiobee,
|
|
37
|
+
"moduleUuid",
|
|
38
|
+
],
|
|
39
|
+
optional: true,
|
|
40
|
+
},
|
|
41
|
+
page: {
|
|
42
|
+
type: "integer",
|
|
43
|
+
label: "Page",
|
|
44
|
+
description: "The page number to return",
|
|
45
|
+
optional: true,
|
|
46
|
+
},
|
|
47
|
+
limit: {
|
|
48
|
+
type: "integer",
|
|
49
|
+
label: "Limit",
|
|
50
|
+
description: "The maximum number of modules to return",
|
|
51
|
+
optional: true,
|
|
52
|
+
},
|
|
53
|
+
},
|
|
54
|
+
async run({ $ }) {
|
|
55
|
+
const response = await this.qualiobee.listModules({
|
|
56
|
+
$,
|
|
57
|
+
params: {
|
|
58
|
+
withDeleted: this.withDeleted,
|
|
59
|
+
name: this.name,
|
|
60
|
+
description: this.description,
|
|
61
|
+
uuid: this.moduleUuid,
|
|
62
|
+
page: this.page,
|
|
63
|
+
limit: this.limit,
|
|
64
|
+
},
|
|
65
|
+
});
|
|
66
|
+
$.export("$summary", `Successfully listed ${response.data?.length} module${response.data?.length === 1
|
|
67
|
+
? ""
|
|
68
|
+
: "s"}`);
|
|
69
|
+
return response;
|
|
70
|
+
},
|
|
71
|
+
};
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import qualiobee from "../../qualiobee.app.mjs";
|
|
2
|
+
|
|
3
|
+
export default {
|
|
4
|
+
key: "qualiobee-update-customer",
|
|
5
|
+
name: "Update Customer",
|
|
6
|
+
description: "Update a customer in Qualiobee. [See the documentation](https://app.qualiobee.fr/api/doc/#/Customer/PublicCustomerController_updateOne)",
|
|
7
|
+
version: "0.0.1",
|
|
8
|
+
annotations: {
|
|
9
|
+
destructiveHint: false,
|
|
10
|
+
openWorldHint: true,
|
|
11
|
+
readOnlyHint: false,
|
|
12
|
+
},
|
|
13
|
+
type: "action",
|
|
14
|
+
props: {
|
|
15
|
+
qualiobee,
|
|
16
|
+
customerUuid: {
|
|
17
|
+
propDefinition: [
|
|
18
|
+
qualiobee,
|
|
19
|
+
"customerUuid",
|
|
20
|
+
],
|
|
21
|
+
},
|
|
22
|
+
name: {
|
|
23
|
+
type: "string",
|
|
24
|
+
label: "Name",
|
|
25
|
+
description: "The name of the company or the full name of the individual",
|
|
26
|
+
optional: true,
|
|
27
|
+
},
|
|
28
|
+
firstName: {
|
|
29
|
+
type: "string",
|
|
30
|
+
label: "First Name",
|
|
31
|
+
description: "The first name of the referent in the company or the first name of the individual",
|
|
32
|
+
optional: true,
|
|
33
|
+
},
|
|
34
|
+
lastName: {
|
|
35
|
+
type: "string",
|
|
36
|
+
label: "Last Name",
|
|
37
|
+
description: "The last name of the referent in the company or the last name of the individual",
|
|
38
|
+
optional: true,
|
|
39
|
+
},
|
|
40
|
+
email: {
|
|
41
|
+
type: "string",
|
|
42
|
+
label: "Email",
|
|
43
|
+
description: "The email of the customer",
|
|
44
|
+
optional: true,
|
|
45
|
+
},
|
|
46
|
+
phoneNumber: {
|
|
47
|
+
type: "string",
|
|
48
|
+
label: "Phone Number",
|
|
49
|
+
description: "The phone number of the customer",
|
|
50
|
+
optional: true,
|
|
51
|
+
},
|
|
52
|
+
note: {
|
|
53
|
+
type: "string",
|
|
54
|
+
label: "Note",
|
|
55
|
+
description: "A note about the customer",
|
|
56
|
+
optional: true,
|
|
57
|
+
},
|
|
58
|
+
isIndividual: {
|
|
59
|
+
type: "boolean",
|
|
60
|
+
label: "Is Individual",
|
|
61
|
+
description: "Whether the customer is an individual",
|
|
62
|
+
optional: true,
|
|
63
|
+
},
|
|
64
|
+
isSoloLearner: {
|
|
65
|
+
type: "boolean",
|
|
66
|
+
label: "Is Solo Learner",
|
|
67
|
+
description: "Whether the customer is a solo learner",
|
|
68
|
+
optional: true,
|
|
69
|
+
},
|
|
70
|
+
addressLine1: {
|
|
71
|
+
type: "string",
|
|
72
|
+
label: "Address Line 1",
|
|
73
|
+
description: "The first line of the address of the customer",
|
|
74
|
+
optional: true,
|
|
75
|
+
},
|
|
76
|
+
addressLine2: {
|
|
77
|
+
type: "string",
|
|
78
|
+
label: "Address Line 2",
|
|
79
|
+
description: "The second line of the address of the customer",
|
|
80
|
+
optional: true,
|
|
81
|
+
},
|
|
82
|
+
city: {
|
|
83
|
+
type: "string",
|
|
84
|
+
label: "City",
|
|
85
|
+
description: "The city of the address of the customer",
|
|
86
|
+
optional: true,
|
|
87
|
+
},
|
|
88
|
+
postalCode: {
|
|
89
|
+
type: "string",
|
|
90
|
+
label: "Postal Code",
|
|
91
|
+
description: "The postal code of the address of the customer",
|
|
92
|
+
optional: true,
|
|
93
|
+
},
|
|
94
|
+
country: {
|
|
95
|
+
type: "string",
|
|
96
|
+
label: "Country",
|
|
97
|
+
description: "The country of the address of the customer",
|
|
98
|
+
optional: true,
|
|
99
|
+
},
|
|
100
|
+
},
|
|
101
|
+
async run({ $ }) {
|
|
102
|
+
const hasLocation = this.addressLine1
|
|
103
|
+
|| this.addressLine2
|
|
104
|
+
|| this.city
|
|
105
|
+
|| this.postalCode
|
|
106
|
+
|| this.country;
|
|
107
|
+
|
|
108
|
+
const response = await this.qualiobee.updateCustomer({
|
|
109
|
+
$,
|
|
110
|
+
customerUuid: this.customerUuid,
|
|
111
|
+
data: {
|
|
112
|
+
name: this.name,
|
|
113
|
+
firstName: this.firstName,
|
|
114
|
+
lastName: this.lastName,
|
|
115
|
+
email: this.email,
|
|
116
|
+
phoneNumber: this.phoneNumber,
|
|
117
|
+
note: this.note,
|
|
118
|
+
isIndividual: this.isIndividual,
|
|
119
|
+
isSoloLearner: this.isSoloLearner,
|
|
120
|
+
location: hasLocation && {
|
|
121
|
+
addressLine1: this.addressLine1,
|
|
122
|
+
addressLine2: this.addressLine2,
|
|
123
|
+
city: this.city,
|
|
124
|
+
postalCode: this.postalCode,
|
|
125
|
+
country: this.country,
|
|
126
|
+
},
|
|
127
|
+
},
|
|
128
|
+
});
|
|
129
|
+
$.export("$summary", `Successfully updated customer with UUID ${response.uuid}`);
|
|
130
|
+
return response;
|
|
131
|
+
},
|
|
132
|
+
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pipedream/qualiobee",
|
|
3
|
-
"version": "0.0
|
|
3
|
+
"version": "0.1.0",
|
|
4
4
|
"description": "Pipedream Qualiobee Components",
|
|
5
5
|
"main": "qualiobee.app.mjs",
|
|
6
6
|
"keywords": [
|
|
@@ -11,5 +11,8 @@
|
|
|
11
11
|
"author": "Pipedream <support@pipedream.com> (https://pipedream.com/)",
|
|
12
12
|
"publishConfig": {
|
|
13
13
|
"access": "public"
|
|
14
|
+
},
|
|
15
|
+
"dependencies": {
|
|
16
|
+
"@pipedream/platform": "^3.1.1"
|
|
14
17
|
}
|
|
15
18
|
}
|
package/qualiobee.app.mjs
CHANGED
|
@@ -1,11 +1,143 @@
|
|
|
1
|
+
import { axios } from "@pipedream/platform";
|
|
2
|
+
|
|
1
3
|
export default {
|
|
2
4
|
type: "app",
|
|
3
5
|
app: "qualiobee",
|
|
4
|
-
propDefinitions: {
|
|
6
|
+
propDefinitions: {
|
|
7
|
+
moduleUuid: {
|
|
8
|
+
type: "string",
|
|
9
|
+
label: "Module UUID",
|
|
10
|
+
description: "The UUID of a module",
|
|
11
|
+
async options({ page }) {
|
|
12
|
+
const { data } = await this.listModules({
|
|
13
|
+
params: {
|
|
14
|
+
page: page + 1,
|
|
15
|
+
limit: 100,
|
|
16
|
+
},
|
|
17
|
+
});
|
|
18
|
+
return data?.map(({
|
|
19
|
+
uuid, name,
|
|
20
|
+
}) => ({
|
|
21
|
+
value: uuid,
|
|
22
|
+
label: name,
|
|
23
|
+
})) || [];
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
customerUuid: {
|
|
27
|
+
type: "string",
|
|
28
|
+
label: "Customer UUID",
|
|
29
|
+
description: "The UUID of a customer",
|
|
30
|
+
async options({ page }) {
|
|
31
|
+
const { data } = await this.listCustomers({
|
|
32
|
+
params: {
|
|
33
|
+
page: page + 1,
|
|
34
|
+
limit: 100,
|
|
35
|
+
},
|
|
36
|
+
});
|
|
37
|
+
return data?.map(({
|
|
38
|
+
uuid, name,
|
|
39
|
+
}) => ({
|
|
40
|
+
value: uuid,
|
|
41
|
+
label: name,
|
|
42
|
+
})) || [];
|
|
43
|
+
},
|
|
44
|
+
},
|
|
45
|
+
learnerUuid: {
|
|
46
|
+
type: "string",
|
|
47
|
+
label: "Learner UUID",
|
|
48
|
+
description: "The UUID of a learner",
|
|
49
|
+
async options({ page }) {
|
|
50
|
+
const { data } = await this.listLearners({
|
|
51
|
+
params: {
|
|
52
|
+
page: page + 1,
|
|
53
|
+
limit: 100,
|
|
54
|
+
},
|
|
55
|
+
});
|
|
56
|
+
return data?.map(({
|
|
57
|
+
uuid, firstName, lastName,
|
|
58
|
+
}) => ({
|
|
59
|
+
value: uuid,
|
|
60
|
+
label: `${firstName} ${lastName}`,
|
|
61
|
+
})) || [];
|
|
62
|
+
},
|
|
63
|
+
},
|
|
64
|
+
},
|
|
5
65
|
methods: {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
66
|
+
_baseUrl() {
|
|
67
|
+
return `https://app.beehelp.fr/api/${this.$auth.organization_uuid}`;
|
|
68
|
+
},
|
|
69
|
+
_makeRequest({
|
|
70
|
+
$ = this, path, ...opts
|
|
71
|
+
}) {
|
|
72
|
+
return axios($, {
|
|
73
|
+
url: `${this._baseUrl()}${path}`,
|
|
74
|
+
headers: {
|
|
75
|
+
"x-api-key": this.$auth.api_key,
|
|
76
|
+
},
|
|
77
|
+
...opts,
|
|
78
|
+
});
|
|
79
|
+
},
|
|
80
|
+
getLearner({
|
|
81
|
+
learnerUuid, ...opts
|
|
82
|
+
}) {
|
|
83
|
+
return this._makeRequest({
|
|
84
|
+
path: `/learner/${learnerUuid}`,
|
|
85
|
+
...opts,
|
|
86
|
+
});
|
|
87
|
+
},
|
|
88
|
+
listModules(opts = {}) {
|
|
89
|
+
return this._makeRequest({
|
|
90
|
+
path: "/module",
|
|
91
|
+
...opts,
|
|
92
|
+
});
|
|
93
|
+
},
|
|
94
|
+
listCustomers(opts = {}) {
|
|
95
|
+
return this._makeRequest({
|
|
96
|
+
path: "/customer",
|
|
97
|
+
...opts,
|
|
98
|
+
});
|
|
99
|
+
},
|
|
100
|
+
listLearners(opts = {}) {
|
|
101
|
+
return this._makeRequest({
|
|
102
|
+
path: "/learner",
|
|
103
|
+
...opts,
|
|
104
|
+
});
|
|
105
|
+
},
|
|
106
|
+
updateCustomer({
|
|
107
|
+
customerUuid, ...opts
|
|
108
|
+
}) {
|
|
109
|
+
return this._makeRequest({
|
|
110
|
+
method: "PATCH",
|
|
111
|
+
path: `/customer/${customerUuid}`,
|
|
112
|
+
...opts,
|
|
113
|
+
});
|
|
114
|
+
},
|
|
115
|
+
async *paginate({
|
|
116
|
+
resourceFn, params, max,
|
|
117
|
+
}) {
|
|
118
|
+
params = {
|
|
119
|
+
...params,
|
|
120
|
+
page: 1,
|
|
121
|
+
limit: 100,
|
|
122
|
+
};
|
|
123
|
+
let total, count = 0;
|
|
124
|
+
do {
|
|
125
|
+
const { data } = await resourceFn({
|
|
126
|
+
params,
|
|
127
|
+
});
|
|
128
|
+
if (!data?.length) {
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
for (const item of data) {
|
|
132
|
+
yield item;
|
|
133
|
+
count++;
|
|
134
|
+
if (max && count >= max) {
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
total = data?.length;
|
|
139
|
+
params.page++;
|
|
140
|
+
} while (total === params.limit);
|
|
9
141
|
},
|
|
10
142
|
},
|
|
11
|
-
};
|
|
143
|
+
};
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import qualiobee from "../../qualiobee.app.mjs";
|
|
2
|
+
import {
|
|
3
|
+
DEFAULT_POLLING_SOURCE_TIMER_INTERVAL, ConfigurationError,
|
|
4
|
+
} from "@pipedream/platform";
|
|
5
|
+
|
|
6
|
+
export default {
|
|
7
|
+
props: {
|
|
8
|
+
qualiobee,
|
|
9
|
+
db: "$.service.db",
|
|
10
|
+
timer: {
|
|
11
|
+
type: "$.interface.timer",
|
|
12
|
+
default: {
|
|
13
|
+
intervalSeconds: DEFAULT_POLLING_SOURCE_TIMER_INTERVAL,
|
|
14
|
+
},
|
|
15
|
+
},
|
|
16
|
+
},
|
|
17
|
+
methods: {
|
|
18
|
+
_getLastTs() {
|
|
19
|
+
return this.db.get("lastTs") || 0;
|
|
20
|
+
},
|
|
21
|
+
_setLastTs(lastTs) {
|
|
22
|
+
this.db.set("lastTs", lastTs);
|
|
23
|
+
},
|
|
24
|
+
getParams() {
|
|
25
|
+
return {};
|
|
26
|
+
},
|
|
27
|
+
getTsField() {
|
|
28
|
+
return "creationDate";
|
|
29
|
+
},
|
|
30
|
+
async processEvent(max) {
|
|
31
|
+
const lastTs = this._getLastTs();
|
|
32
|
+
let maxTs = lastTs;
|
|
33
|
+
const fn = this.getResourceFn();
|
|
34
|
+
const params = this.getParams();
|
|
35
|
+
const tsField = this.getTsField();
|
|
36
|
+
const results = this.qualiobee.paginate({
|
|
37
|
+
resourceFn: fn,
|
|
38
|
+
params,
|
|
39
|
+
max,
|
|
40
|
+
});
|
|
41
|
+
for await (const item of results) {
|
|
42
|
+
const ts = Date.parse(item[tsField]);
|
|
43
|
+
if (ts > lastTs) {
|
|
44
|
+
maxTs = Math.max(ts, maxTs);
|
|
45
|
+
this.$emit(item, this.generateMeta(item));
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
this._setLastTs(maxTs);
|
|
49
|
+
},
|
|
50
|
+
getResourceFn() {
|
|
51
|
+
throw new ConfigurationError("getResourceFn is not implemented");
|
|
52
|
+
},
|
|
53
|
+
generateMeta() {
|
|
54
|
+
throw new ConfigurationError("generateMeta is not implemented");
|
|
55
|
+
},
|
|
56
|
+
},
|
|
57
|
+
hooks: {
|
|
58
|
+
async deploy() {
|
|
59
|
+
await this.processEvent(10);
|
|
60
|
+
},
|
|
61
|
+
},
|
|
62
|
+
async run() {
|
|
63
|
+
await this.processEvent();
|
|
64
|
+
},
|
|
65
|
+
};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import common from "../common/base-polling.mjs";
|
|
2
|
+
|
|
3
|
+
export default {
|
|
4
|
+
...common,
|
|
5
|
+
key: "qualiobee-learner-updated",
|
|
6
|
+
name: "Learner Updated",
|
|
7
|
+
description: "Emit new event when a learner is updated in Qualiobee. [See the documentation](https://app.qualiobee.fr/api/doc/#/Learner/PublicLearnerController_getMany)",
|
|
8
|
+
version: "0.0.1",
|
|
9
|
+
type: "source",
|
|
10
|
+
dedupe: "unique",
|
|
11
|
+
methods: {
|
|
12
|
+
...common.methods,
|
|
13
|
+
getResourceFn() {
|
|
14
|
+
return this.qualiobee.listLearners;
|
|
15
|
+
},
|
|
16
|
+
getTsField() {
|
|
17
|
+
return "updateDate";
|
|
18
|
+
},
|
|
19
|
+
generateMeta(learner) {
|
|
20
|
+
const ts = Date.parse(learner.updateDate);
|
|
21
|
+
return {
|
|
22
|
+
id: `${learner.uuid}-${ts}`,
|
|
23
|
+
summary: `Learner Updated with UUID ${learner.uuid}`,
|
|
24
|
+
ts,
|
|
25
|
+
};
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import common from "../common/base-polling.mjs";
|
|
2
|
+
|
|
3
|
+
export default {
|
|
4
|
+
...common,
|
|
5
|
+
key: "qualiobee-new-customer-created",
|
|
6
|
+
name: "New Customer Created",
|
|
7
|
+
description: "Emit new event when a new customer is created in Qualiobee. [See the documentation](https://app.qualiobee.fr/api/doc/#/Customer/PublicCustomerController_getMany)",
|
|
8
|
+
version: "0.0.1",
|
|
9
|
+
type: "source",
|
|
10
|
+
dedupe: "unique",
|
|
11
|
+
methods: {
|
|
12
|
+
...common.methods,
|
|
13
|
+
getResourceFn() {
|
|
14
|
+
return this.qualiobee.listCustomers;
|
|
15
|
+
},
|
|
16
|
+
generateMeta(customer) {
|
|
17
|
+
return {
|
|
18
|
+
id: customer.uuid,
|
|
19
|
+
summary: `New Customer with UUID ${customer.uuid}`,
|
|
20
|
+
ts: Date.parse(customer.creationDate),
|
|
21
|
+
};
|
|
22
|
+
},
|
|
23
|
+
},
|
|
24
|
+
};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import common from "../common/base-polling.mjs";
|
|
2
|
+
|
|
3
|
+
export default {
|
|
4
|
+
...common,
|
|
5
|
+
key: "qualiobee-new-learner-created",
|
|
6
|
+
name: "New Learner Created",
|
|
7
|
+
description: "Emit new event when a new learner is created in Qualiobee. [See the documentation](https://app.qualiobee.fr/api/doc/#/Learner/PublicLearnerController_getMany)",
|
|
8
|
+
version: "0.0.1",
|
|
9
|
+
type: "source",
|
|
10
|
+
dedupe: "unique",
|
|
11
|
+
methods: {
|
|
12
|
+
...common.methods,
|
|
13
|
+
getResourceFn() {
|
|
14
|
+
return this.qualiobee.listLearners;
|
|
15
|
+
},
|
|
16
|
+
generateMeta(learner) {
|
|
17
|
+
return {
|
|
18
|
+
id: learner.uuid,
|
|
19
|
+
summary: `New Learner with UUID ${learner.uuid}`,
|
|
20
|
+
ts: Date.parse(learner.creationDate),
|
|
21
|
+
};
|
|
22
|
+
},
|
|
23
|
+
},
|
|
24
|
+
};
|