sr-npm 1.7.98 → 1.7.100
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/backend/collectionConsts.js +3 -7
- package/backend/consts.js +117 -89
- package/backend/data.js +19 -22
- package/backend/fetchPositionsFromSRAPI.js +4 -4
- package/backend/queries.js +2 -4
- package/package.json +1 -1
- package/pages/homePage.js +0 -1
- package/pages/positionPage.js +7 -8
|
@@ -17,8 +17,6 @@ const JOBS_COLLECTION_FIELDS = {
|
|
|
17
17
|
DEPARTMENT_REF: 'departmentRef',
|
|
18
18
|
CITY: 'city',
|
|
19
19
|
CITY_TEXT: 'cityText',
|
|
20
|
-
IMAGE: 'image',
|
|
21
|
-
APPLY_LINK: 'applyLink',
|
|
22
20
|
}
|
|
23
21
|
const AMOUNT_OF_JOBS_PER_DEPARTMENT_COLLECTION_FIELDS = {
|
|
24
22
|
TITLE: 'title',
|
|
@@ -55,11 +53,9 @@ const COLLECTIONS_FIELDS = {
|
|
|
55
53
|
{key:'language', type: 'TEXT'},
|
|
56
54
|
{key:'remote', type: 'BOOLEAN'},
|
|
57
55
|
{key:'jobDescription', type: 'OBJECT'},
|
|
58
|
-
{key:'cityText', type: 'TEXT'},
|
|
59
|
-
{key:'
|
|
60
|
-
{key:'
|
|
61
|
-
{key:'city', type: 'REFERENCE', typeMetadata: { reference: { referencedCollectionId: COLLECTIONS.CITIES } } },
|
|
62
|
-
{ key: 'image', type: 'IMAGE' },
|
|
56
|
+
{key:'cityText', type: 'TEXT'},
|
|
57
|
+
{key:'departmentRef', type: 'REFERENCE', typeMetadata: { reference: { referencedCollectionId: 'AmountOfJobsPerDepartment1' } } },
|
|
58
|
+
{key:'city', type: 'REFERENCE', typeMetadata: { reference: { referencedCollectionId: 'cities1' } } },
|
|
63
59
|
],
|
|
64
60
|
API_KEY: [
|
|
65
61
|
{key:'token', type: 'TEXT'},
|
package/backend/consts.js
CHANGED
|
@@ -1,4 +1,10 @@
|
|
|
1
|
-
const {
|
|
1
|
+
const {
|
|
2
|
+
saveJobsDataToCMS,
|
|
3
|
+
saveJobsDescriptionsAndLocationToCMS,
|
|
4
|
+
aggregateJobsByFieldToCMS,
|
|
5
|
+
referenceJobsToField,
|
|
6
|
+
createApiKeyCollectionAndFillIt,
|
|
7
|
+
} = require('./data');
|
|
2
8
|
const { createCollectionIfMissing } = require('@hisense-staging/velo-npm/backend');
|
|
3
9
|
const { COLLECTIONS, COLLECTIONS_FIELDS, JOBS_COLLECTION_FIELDS } = require('./collectionConsts');
|
|
4
10
|
|
|
@@ -7,7 +13,7 @@ const QUERY_MAX_LIMIT = 1000;
|
|
|
7
13
|
const TASKS_NAMES = {
|
|
8
14
|
SYNC_JOBS: 'syncJobsFromSRAPIToCMS',
|
|
9
15
|
INSERT_JOBS_TO_CMS: 'insertJobsToCMS',
|
|
10
|
-
|
|
16
|
+
INSERT_JOBS_DESCRIPTIONS_TO_CMS: 'insertJobsDescriptionsToCMS',
|
|
11
17
|
FILL_JOBS_PER_CITY_COLLECTION: 'fillJobsPerCityCollection',
|
|
12
18
|
FILL_JOBS_PER_DEPARTMENT_COLLECTION: 'fillJobsPerDepartmentCollection',
|
|
13
19
|
REFERENCE_JOBS_TO_LOCATIONS: 'referenceJobsToLocations',
|
|
@@ -20,93 +26,115 @@ const TASKS_NAMES = {
|
|
|
20
26
|
|
|
21
27
|
|
|
22
28
|
const TASKS = {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
}
|
|
109
|
-
|
|
29
|
+
[TASKS_NAMES.SYNC_JOBS]: {
|
|
30
|
+
name: TASKS_NAMES.SYNC_JOBS,
|
|
31
|
+
childTasks: [
|
|
32
|
+
{ name: TASKS_NAMES.CREATE_JOBS_COLLECTION },
|
|
33
|
+
{ name: TASKS_NAMES.CREATE_CITIES_COLLECTION },
|
|
34
|
+
{ name: TASKS_NAMES.CREATE_AMOUNT_OF_JOBS_PER_DEPARTMENT_COLLECTION },
|
|
35
|
+
{ name: TASKS_NAMES.INSERT_JOBS_TO_CMS },
|
|
36
|
+
{ name: TASKS_NAMES.INSERT_JOBS_DESCRIPTIONS_TO_CMS },
|
|
37
|
+
{ name: TASKS_NAMES.FILL_JOBS_PER_CITY_COLLECTION },
|
|
38
|
+
{ name: TASKS_NAMES.FILL_JOBS_PER_DEPARTMENT_COLLECTION },
|
|
39
|
+
{ name: TASKS_NAMES.REFERENCE_JOBS_TO_LOCATIONS },
|
|
40
|
+
{ name: TASKS_NAMES.REFERENCE_JOBS_TO_DEPARTMENT },
|
|
41
|
+
],
|
|
42
|
+
scheduleChildrenSequentially: true,
|
|
43
|
+
estimatedDurationSec: 30,
|
|
44
|
+
},
|
|
45
|
+
[TASKS_NAMES.CREATE_JOBS_COLLECTION]: {
|
|
46
|
+
name: TASKS_NAMES.CREATE_JOBS_COLLECTION,
|
|
47
|
+
getIdentifier: () => 'SHOULD_NEVER_SKIP',
|
|
48
|
+
process: () => createCollectionIfMissing(COLLECTIONS.JOBS, COLLECTIONS_FIELDS.JOBS,{ insert: 'ADMIN', update: 'ADMIN', remove: 'ADMIN', read: 'ANYONE' }),
|
|
49
|
+
shouldSkipCheck: () => false,
|
|
50
|
+
estimatedDurationSec: 3,
|
|
51
|
+
},
|
|
52
|
+
[TASKS_NAMES.CREATE_CITIES_COLLECTION]: {
|
|
53
|
+
name: TASKS_NAMES.CREATE_CITIES_COLLECTION,
|
|
54
|
+
getIdentifier: () => 'SHOULD_NEVER_SKIP',
|
|
55
|
+
process: () => createCollectionIfMissing(COLLECTIONS.CITIES, COLLECTIONS_FIELDS.CITIES),
|
|
56
|
+
shouldSkipCheck: () => false,
|
|
57
|
+
estimatedDurationSec: 3,
|
|
58
|
+
},
|
|
59
|
+
[TASKS_NAMES.CREATE_AMOUNT_OF_JOBS_PER_DEPARTMENT_COLLECTION]: {
|
|
60
|
+
name: TASKS_NAMES.CREATE_AMOUNT_OF_JOBS_PER_DEPARTMENT_COLLECTION,
|
|
61
|
+
getIdentifier: () => 'SHOULD_NEVER_SKIP',
|
|
62
|
+
process: () =>
|
|
63
|
+
createCollectionIfMissing(
|
|
64
|
+
COLLECTIONS.AMOUNT_OF_JOBS_PER_DEPARTMENT,
|
|
65
|
+
COLLECTIONS_FIELDS.AMOUNT_OF_JOBS_PER_DEPARTMENT
|
|
66
|
+
),
|
|
67
|
+
shouldSkipCheck: () => false,
|
|
68
|
+
estimatedDurationSec: 3,
|
|
69
|
+
},
|
|
70
|
+
[TASKS_NAMES.INSERT_JOBS_TO_CMS]: {
|
|
71
|
+
name: TASKS_NAMES.INSERT_JOBS_TO_CMS,
|
|
72
|
+
getIdentifier: () => 'SHOULD_NEVER_SKIP',
|
|
73
|
+
process: saveJobsDataToCMS,
|
|
74
|
+
shouldSkipCheck: () => false,
|
|
75
|
+
estimatedDurationSec: 20,
|
|
76
|
+
},
|
|
77
|
+
[TASKS_NAMES.INSERT_JOBS_DESCRIPTIONS_TO_CMS]: {
|
|
78
|
+
name: TASKS_NAMES.INSERT_JOBS_DESCRIPTIONS_TO_CMS,
|
|
79
|
+
getIdentifier: () => 'SHOULD_NEVER_SKIP',
|
|
80
|
+
process: saveJobsDescriptionsAndLocationToCMS,
|
|
81
|
+
shouldSkipCheck: () => false,
|
|
82
|
+
estimatedDurationSec: 20,
|
|
83
|
+
},
|
|
84
|
+
[TASKS_NAMES.FILL_JOBS_PER_CITY_COLLECTION]: {
|
|
85
|
+
name: TASKS_NAMES.FILL_JOBS_PER_CITY_COLLECTION,
|
|
86
|
+
getIdentifier: () => 'SHOULD_NEVER_SKIP',
|
|
87
|
+
process: () =>
|
|
88
|
+
aggregateJobsByFieldToCMS({
|
|
89
|
+
field: JOBS_COLLECTION_FIELDS.CITY_TEXT,
|
|
90
|
+
collection: COLLECTIONS.CITIES,
|
|
91
|
+
}),
|
|
92
|
+
shouldSkipCheck: () => false,
|
|
93
|
+
estimatedDurationSec: 3,
|
|
94
|
+
},
|
|
95
|
+
[TASKS_NAMES.FILL_JOBS_PER_DEPARTMENT_COLLECTION]: {
|
|
96
|
+
name: TASKS_NAMES.FILL_JOBS_PER_DEPARTMENT_COLLECTION,
|
|
97
|
+
getIdentifier: () => 'SHOULD_NEVER_SKIP',
|
|
98
|
+
process: () =>
|
|
99
|
+
aggregateJobsByFieldToCMS({
|
|
100
|
+
field: JOBS_COLLECTION_FIELDS.DEPARTMENT,
|
|
101
|
+
collection: COLLECTIONS.AMOUNT_OF_JOBS_PER_DEPARTMENT,
|
|
102
|
+
}),
|
|
103
|
+
shouldSkipCheck: () => false,
|
|
104
|
+
estimatedDurationSec: 3,
|
|
105
|
+
},
|
|
106
|
+
[TASKS_NAMES.REFERENCE_JOBS_TO_LOCATIONS]: {
|
|
107
|
+
name: TASKS_NAMES.REFERENCE_JOBS_TO_LOCATIONS,
|
|
108
|
+
getIdentifier: () => 'SHOULD_NEVER_SKIP',
|
|
109
|
+
process: () =>
|
|
110
|
+
referenceJobsToField({
|
|
111
|
+
referenceField: JOBS_COLLECTION_FIELDS.CITY,
|
|
112
|
+
sourceCollection: COLLECTIONS.CITIES,
|
|
113
|
+
jobField: JOBS_COLLECTION_FIELDS.CITY_TEXT,
|
|
114
|
+
}),
|
|
115
|
+
shouldSkipCheck: () => false,
|
|
116
|
+
estimatedDurationSec: 3,
|
|
117
|
+
},
|
|
118
|
+
[TASKS_NAMES.REFERENCE_JOBS_TO_DEPARTMENT]: {
|
|
119
|
+
name: TASKS_NAMES.REFERENCE_JOBS_TO_DEPARTMENT,
|
|
120
|
+
getIdentifier: () => 'SHOULD_NEVER_SKIP',
|
|
121
|
+
process: () =>
|
|
122
|
+
referenceJobsToField({
|
|
123
|
+
referenceField: JOBS_COLLECTION_FIELDS.DEPARTMENT_REF,
|
|
124
|
+
sourceCollection: COLLECTIONS.AMOUNT_OF_JOBS_PER_DEPARTMENT,
|
|
125
|
+
jobField: JOBS_COLLECTION_FIELDS.DEPARTMENT,
|
|
126
|
+
}),
|
|
127
|
+
shouldSkipCheck: () => false,
|
|
128
|
+
estimatedDurationSec: 3,
|
|
129
|
+
},
|
|
130
|
+
[TASKS_NAMES.CREATE_API_KEY_COLLECTION_AND_FILL_IT]: {
|
|
131
|
+
name: TASKS_NAMES.CREATE_API_KEY_COLLECTION_AND_FILL_IT,
|
|
132
|
+
getIdentifier:()=> "SHOULD_NEVER_SKIP",
|
|
133
|
+
process:()=>createApiKeyCollectionAndFillIt(),
|
|
134
|
+
shouldSkipCheck:()=>false,
|
|
135
|
+
estimatedDurationSec:3
|
|
136
|
+
}
|
|
137
|
+
};
|
|
110
138
|
|
|
111
139
|
|
|
112
140
|
|
package/backend/data.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
const { items: wixData
|
|
1
|
+
const { items: wixData } = require('@wix/data');
|
|
2
2
|
const { fetchPositionsFromSRAPI, fetchJobDescription } = require('./fetchPositionsFromSRAPI');
|
|
3
3
|
const { createCollectionIfMissing } = require('@hisense-staging/velo-npm/backend');
|
|
4
|
-
const { COLLECTIONS, COLLECTIONS_FIELDS
|
|
4
|
+
const { COLLECTIONS, COLLECTIONS_FIELDS } = require('./collectionConsts');
|
|
5
5
|
const { secrets } = require("@wix/secrets");
|
|
6
6
|
const { auth } = require('@wix/essentials');
|
|
7
7
|
const { chunkedBulkOperation, delay, countJobsPerGivenField, fillCityLocationAndLocationAddress ,prepareToSaveArray,normalizeCityName} = require('./utils');
|
|
@@ -58,7 +58,7 @@ async function saveJobsDataToCMS() {
|
|
|
58
58
|
processChunk: async (chunk, chunkNumber) => {
|
|
59
59
|
console.log(`Saving chunk ${chunkNumber}/${totalChunks}: ${chunk.length} jobs`);
|
|
60
60
|
try {
|
|
61
|
-
const result = await wixData.bulkSave(
|
|
61
|
+
const result = await wixData.bulkSave('Jobs1', chunk);
|
|
62
62
|
const saved = result.inserted + result.updated || chunk.length;
|
|
63
63
|
totalSaved += saved;
|
|
64
64
|
console.log(
|
|
@@ -74,7 +74,7 @@ async function saveJobsDataToCMS() {
|
|
|
74
74
|
console.log(`✓ All chunks processed. Total jobs saved: ${totalSaved}/${jobsData.length}`);
|
|
75
75
|
}
|
|
76
76
|
|
|
77
|
-
async function
|
|
77
|
+
async function saveJobsDescriptionsAndLocationToCMS() {
|
|
78
78
|
console.log('🚀 Starting job descriptions update process for ALL jobs');
|
|
79
79
|
|
|
80
80
|
try {
|
|
@@ -105,16 +105,13 @@ async function saveJobsDescriptionsAndLocationApplyUrlToCMS() {
|
|
|
105
105
|
try {
|
|
106
106
|
const jobDetails = await fetchJobDescription(job._id);
|
|
107
107
|
const jobLocation = fetchJobLocation(jobDetails);
|
|
108
|
-
const applyLink = fetchApplyLink(jobDetails);
|
|
109
|
-
|
|
110
108
|
|
|
111
109
|
const updatedJob = {
|
|
112
110
|
...job,
|
|
113
111
|
locationAddress: jobLocation,
|
|
114
112
|
jobDescription: jobDetails.jobAd.sections,
|
|
115
|
-
applyLink: applyLink,
|
|
116
113
|
};
|
|
117
|
-
await wixData.update(
|
|
114
|
+
await wixData.update('Jobs1', updatedJob);
|
|
118
115
|
return { success: true, jobId: job._id, title: job.title };
|
|
119
116
|
} catch (error) {
|
|
120
117
|
console.error(` ❌ Failed to update ${job.title} (${job._id}):`, error);
|
|
@@ -191,7 +188,7 @@ async function aggregateJobsByFieldToCMS({ field, collection }) {
|
|
|
191
188
|
|
|
192
189
|
async function getJobsWithNoDescriptions() {
|
|
193
190
|
let jobswithoutdescriptionsQuery = await wixData
|
|
194
|
-
.query(
|
|
191
|
+
.query('Jobs1')
|
|
195
192
|
.limit(1000)
|
|
196
193
|
.isEmpty('jobDescription')
|
|
197
194
|
.find();
|
|
@@ -200,9 +197,9 @@ async function getJobsWithNoDescriptions() {
|
|
|
200
197
|
|
|
201
198
|
/**
|
|
202
199
|
* @param {Object} params
|
|
203
|
-
* @param {
|
|
204
|
-
* @param {
|
|
205
|
-
* @param {
|
|
200
|
+
* @param {"city"|"departmentRef"} params.referenceField
|
|
201
|
+
* @param {"cities1"|"AmountOfJobsPerDepartment1"} params.sourceCollection
|
|
202
|
+
* @param {"cityText"|"department"} params.jobField
|
|
206
203
|
*/
|
|
207
204
|
async function referenceJobsToField({ referenceField, sourceCollection, jobField }) {
|
|
208
205
|
// Fetch all source items (cities or departments)
|
|
@@ -238,22 +235,22 @@ async function referenceJobsToField({ referenceField, sourceCollection, jobField
|
|
|
238
235
|
items: jobsToUpdate,
|
|
239
236
|
chunkSize,
|
|
240
237
|
processChunk: async chunk => {
|
|
241
|
-
await wixData.bulkUpdate(
|
|
238
|
+
await wixData.bulkUpdate('Jobs1', chunk);
|
|
242
239
|
},
|
|
243
240
|
});
|
|
244
241
|
|
|
245
242
|
return { success: true, updated: jobsToUpdate.length };
|
|
246
243
|
}
|
|
247
244
|
|
|
248
|
-
function fetchApplyLink(jobDetails) {
|
|
249
|
-
return jobDetails.actions.applyOnWeb.url;
|
|
250
|
-
}
|
|
251
|
-
|
|
252
245
|
function fetchJobLocation(jobDetails) {
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
246
|
+
const isZeroLocation =
|
|
247
|
+
jobDetails.location.latitude === '0.0000' && jobDetails.location.longitude === '0.0000';
|
|
248
|
+
const jobLocation = {
|
|
249
|
+
location: isZeroLocation
|
|
250
|
+
? {}
|
|
251
|
+
: {
|
|
252
|
+
latitude: parseFloat(jobDetails.location.latitude),
|
|
253
|
+
longitude: parseFloat(jobDetails.location.longitude),
|
|
257
254
|
},
|
|
258
255
|
city: jobDetails.location.city,
|
|
259
256
|
country: jobDetails.location.country,
|
|
@@ -303,7 +300,7 @@ async function createApiKeyCollectionAndFillIt() {
|
|
|
303
300
|
|
|
304
301
|
module.exports = {
|
|
305
302
|
saveJobsDataToCMS,
|
|
306
|
-
|
|
303
|
+
saveJobsDescriptionsAndLocationToCMS,
|
|
307
304
|
aggregateJobsByFieldToCMS,
|
|
308
305
|
referenceJobsToField,
|
|
309
306
|
createApiKeyCollectionAndFillIt,
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
const { fetch } = require('wix-fetch');
|
|
2
2
|
const { items: wixData } = require('@wix/data');
|
|
3
3
|
const { COLLECTIONS } = require('./collectionConsts');
|
|
4
|
+
|
|
4
5
|
async function makeSmartRecruitersRequest(path,token) {
|
|
5
6
|
// const baseUrl = 'https://api.smartrecruiters.com'; // PROD
|
|
6
|
-
const baseUrl = 'https://aoxley54.wixstudio.com/
|
|
7
|
-
|
|
7
|
+
const baseUrl = 'https://aoxley54.wixstudio.com/external-template/_functions'; // TEST
|
|
8
|
+
const fullUrl = `${baseUrl}${path}`;
|
|
8
9
|
|
|
9
10
|
//console.log(`Making request to: ${fullUrl}`);
|
|
10
11
|
try {
|
|
@@ -107,8 +108,7 @@ async function fetchPositionsFromSRAPI() {
|
|
|
107
108
|
}
|
|
108
109
|
|
|
109
110
|
async function fetchJobDescription(jobId) {
|
|
110
|
-
|
|
111
|
-
return await makeSmartRecruitersRequest(`/jobs/${jobId}`,token);
|
|
111
|
+
return await makeSmartRecruitersRequest(`/jobs/${jobId}`);
|
|
112
112
|
}
|
|
113
113
|
|
|
114
114
|
async function getSmartTokenFromCMS() {
|
package/backend/queries.js
CHANGED
|
@@ -1,10 +1,8 @@
|
|
|
1
|
-
const { COLLECTIONS } = require('./collectionConsts');
|
|
2
1
|
const { items: wixData } = require('@wix/data');
|
|
3
2
|
|
|
4
|
-
|
|
5
3
|
async function getAllPositions() {
|
|
6
4
|
return wixData
|
|
7
|
-
.query(
|
|
5
|
+
.query('Jobs')
|
|
8
6
|
.limit(1000)
|
|
9
7
|
.find()
|
|
10
8
|
.then(result => result.items);
|
|
@@ -12,7 +10,7 @@ async function getAllPositions() {
|
|
|
12
10
|
|
|
13
11
|
async function getPositionsByField(field, value) {
|
|
14
12
|
return wixData
|
|
15
|
-
.query(
|
|
13
|
+
.query('Jobs')
|
|
16
14
|
.eq(field, value)
|
|
17
15
|
.find()
|
|
18
16
|
.then(result => result.items);
|
package/package.json
CHANGED
package/pages/homePage.js
CHANGED
package/pages/positionPage.js
CHANGED
|
@@ -2,24 +2,23 @@ const {
|
|
|
2
2
|
htmlToText,
|
|
3
3
|
} = require('../public/utils');
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
function positionPageOnReady(_$w) {
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
bind(_$w);
|
|
8
8
|
}
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
_$w('#datasetJobsItem').onReady(
|
|
10
|
+
function bind(_$w) {
|
|
11
|
+
_$w('#datasetJobsItem').onReady( () => {
|
|
12
12
|
|
|
13
|
-
const item =
|
|
13
|
+
const item = _$w('#datasetJobsItem').getCurrentItem();
|
|
14
14
|
|
|
15
15
|
_$w('#companyDescriptionText').text = htmlToText(item.jobDescription.companyDescription.text);
|
|
16
16
|
_$w('#responsibilitiesText').text = htmlToText(item.jobDescription.jobDescription.text);
|
|
17
17
|
_$w('#qualificationsText').text = htmlToText(item.jobDescription.qualifications.text);
|
|
18
18
|
_$w('#relatedJobsTitleText').text = `More ${item.department} Positions`;
|
|
19
19
|
});
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
const count = await _$w('#relatedJobsDataset').getTotalCount();
|
|
20
|
+
_$w('#relatedJobsDataset').onReady(() => {
|
|
21
|
+
const count = _$w('#relatedJobsDataset').getTotalCount();
|
|
23
22
|
if(!count){
|
|
24
23
|
_$w('#relatedJobsSection').collapse();
|
|
25
24
|
}
|