musora-content-services 1.6.5 → 1.6.7
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/.github/workflows/conventional-commits.yaml +16 -0
- package/.github/workflows/docs.js.yml +58 -0
- package/.github/workflows/node.js.yml +0 -0
- package/.prettierignore +0 -0
- package/.prettierrc +0 -0
- package/.yarnrc.yml +1 -0
- package/CHANGELOG.md +9 -0
- package/README.md +1 -2
- package/babel.config.cjs +0 -0
- package/docs/fonts/Montserrat/Montserrat-Bold.eot +0 -0
- package/docs/fonts/Montserrat/Montserrat-Bold.ttf +0 -0
- package/docs/fonts/Montserrat/Montserrat-Bold.woff +0 -0
- package/docs/fonts/Montserrat/Montserrat-Bold.woff2 +0 -0
- package/docs/fonts/Montserrat/Montserrat-Regular.eot +0 -0
- package/docs/fonts/Montserrat/Montserrat-Regular.ttf +0 -0
- package/docs/fonts/Montserrat/Montserrat-Regular.woff +0 -0
- package/docs/fonts/Montserrat/Montserrat-Regular.woff2 +0 -0
- package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.eot +0 -0
- package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.svg +0 -0
- package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.ttf +0 -0
- package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.woff +0 -0
- package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.woff2 +0 -0
- package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.eot +0 -0
- package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.svg +0 -0
- package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.ttf +0 -0
- package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.woff +0 -0
- package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.woff2 +0 -0
- package/docs/scripts/collapse.js +0 -0
- package/docs/scripts/commonNav.js +0 -0
- package/docs/scripts/linenumber.js +0 -0
- package/docs/scripts/nav.js +0 -0
- package/docs/scripts/polyfill.js +0 -0
- package/docs/scripts/prettify/Apache-License-2.0.txt +0 -0
- package/docs/scripts/prettify/lang-css.js +0 -0
- package/docs/scripts/prettify/prettify.js +0 -0
- package/docs/scripts/search.js +0 -0
- package/docs/styles/jsdoc.css +0 -0
- package/docs/styles/prettify.css +0 -0
- package/docs/v2/Content-Organization.html +245 -0
- package/docs/v2/ContentOrganization.html +245 -0
- package/docs/v2/Gamification.html +245 -0
- package/docs/v2/UserManagement.html +269 -0
- package/docs/v2/UserManagementSystem.html +317 -0
- package/docs/v2/api_types.js.html +97 -0
- package/docs/v2/config.js.html +143 -0
- package/docs/v2/content-org_content-org.js.html +76 -0
- package/docs/v2/content-org_playlists-types.js.html +116 -0
- package/docs/v2/content-org_playlists.js.html +418 -0
- package/docs/v2/content.js.html +466 -0
- package/docs/v2/fonts/Montserrat/Montserrat-Bold.eot +0 -0
- package/docs/v2/fonts/Montserrat/Montserrat-Bold.ttf +0 -0
- package/docs/v2/fonts/Montserrat/Montserrat-Bold.woff +0 -0
- package/docs/v2/fonts/Montserrat/Montserrat-Bold.woff2 +0 -0
- package/docs/v2/fonts/Montserrat/Montserrat-Regular.eot +0 -0
- package/docs/v2/fonts/Montserrat/Montserrat-Regular.ttf +0 -0
- package/docs/v2/fonts/Montserrat/Montserrat-Regular.woff +0 -0
- package/docs/v2/fonts/Montserrat/Montserrat-Regular.woff2 +0 -0
- package/docs/v2/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.eot +0 -0
- package/docs/v2/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.svg +978 -0
- package/docs/v2/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.ttf +0 -0
- package/docs/v2/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.woff +0 -0
- package/docs/v2/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.woff2 +0 -0
- package/docs/v2/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.eot +0 -0
- package/docs/v2/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.svg +1049 -0
- package/docs/v2/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.ttf +0 -0
- package/docs/v2/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.woff +0 -0
- package/docs/v2/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.woff2 +0 -0
- package/docs/v2/gamification_awards.js.html +664 -0
- package/docs/v2/gamification_gamification.js.html +76 -0
- package/docs/v2/gamification_types.js.html +98 -0
- package/docs/v2/global.html +5812 -0
- package/docs/v2/global.html#User +293 -0
- package/docs/v2/index.html +168 -0
- package/docs/v2/module-Awards.html +354 -0
- package/docs/v2/module-Config.html +434 -0
- package/docs/v2/module-Content-Services-V2.html +2434 -0
- package/docs/v2/module-Interests.html +1066 -0
- package/docs/v2/module-Notifications.html +1183 -0
- package/docs/v2/module-Permissions.html +406 -0
- package/docs/v2/module-Playlists.html +2862 -0
- package/docs/v2/module-Railcontent-Services.html +7954 -0
- package/docs/v2/module-Sanity-Services.html +9608 -0
- package/docs/v2/module-Session-Management.html +575 -0
- package/docs/v2/module-Sessions.html +575 -0
- package/docs/v2/module-User-Activity.html +4410 -0
- package/docs/v2/module-User-Management.html +490 -0
- package/docs/v2/module-User-Permissions.html +406 -0
- package/docs/v2/module-UserActivity.html +4410 -0
- package/docs/v2/module-UserManagement.html +915 -0
- package/docs/v2/module-UserNotifications.html +1223 -0
- package/docs/v2/module-UserProfile.html +266 -0
- package/docs/v2/railcontent.js.html +984 -0
- package/docs/v2/sanity.js.html +2459 -0
- package/docs/v2/scripts/collapse.js +39 -0
- package/docs/v2/scripts/commonNav.js +28 -0
- package/docs/v2/scripts/linenumber.js +25 -0
- package/docs/v2/scripts/nav.js +12 -0
- package/docs/v2/scripts/polyfill.js +4 -0
- package/docs/v2/scripts/prettify/Apache-License-2.0.txt +202 -0
- package/docs/v2/scripts/prettify/lang-css.js +2 -0
- package/docs/v2/scripts/prettify/prettify.js +28 -0
- package/docs/v2/scripts/search.js +99 -0
- package/docs/v2/styles/jsdoc.css +776 -0
- package/docs/v2/styles/prettify.css +80 -0
- package/docs/v2/types.js.html +122 -0
- package/docs/v2/userActivity.js.html +1451 -0
- package/docs/v2/user_interests.js.html +150 -0
- package/docs/v2/user_management.js.html +178 -0
- package/docs/v2/user_notifications.js.html +192 -0
- package/docs/v2/user_permissions.js.html +110 -0
- package/docs/v2/user_profile.js.html +105 -0
- package/docs/v2/user_sessions.js.html +139 -0
- package/docs/v2/user_types.js.html +208 -0
- package/docs/v2/user_user-management-system.js.html +79 -0
- package/docs/v2/user_user-management.js.html +78 -0
- package/jest.config.js +0 -0
- package/package.json +1 -1
- package/src/contentTypeConfig.js +27 -12
- package/src/services/imageSRCVerify.js +0 -0
- package/src/services/sanity.js +124 -82
- package/test/dataContext.test.js +0 -0
- package/test/imageSRCBuilder.test.js +0 -0
- package/test/imageSRCVerify.test.js +0 -0
- package/test/live/contentProgressLive.test.js +0 -0
- package/test/live/railcontentLive.test.js +0 -0
- package/test/localStorageMock.js +0 -0
- package/test/log.js +0 -0
package/src/services/sanity.js
CHANGED
|
@@ -73,15 +73,22 @@ export async function fetchSongById(documentId) {
|
|
|
73
73
|
* @number contentPerPage
|
|
74
74
|
* @returns {Promise<Object|null>}
|
|
75
75
|
*/
|
|
76
|
-
export async function fetchLeaving(
|
|
77
|
-
|
|
78
|
-
{ pageNumber = 1, contentPerPage = 20 } = {}) {
|
|
79
|
-
const nextQuarter = getNextAndPreviousQuarterDates()['next'];
|
|
76
|
+
export async function fetchLeaving(brand, { pageNumber = 1, contentPerPage = 20 } = {}) {
|
|
77
|
+
const nextQuarter = getNextAndPreviousQuarterDates()['next']
|
|
80
78
|
const filterString = `brand == '${brand}' && quarter_removed == '${nextQuarter}'`
|
|
81
|
-
const startEndOrder = getQueryFromPage(pageNumber, contentPerPage)
|
|
82
|
-
const sortOrder = {
|
|
83
|
-
|
|
84
|
-
|
|
79
|
+
const startEndOrder = getQueryFromPage(pageNumber, contentPerPage)
|
|
80
|
+
const sortOrder = {
|
|
81
|
+
sortOrder: 'published_on desc, id desc',
|
|
82
|
+
start: startEndOrder['start'],
|
|
83
|
+
end: startEndOrder['end'],
|
|
84
|
+
}
|
|
85
|
+
const query = await buildQuery(
|
|
86
|
+
filterString,
|
|
87
|
+
{ pullFutureContent: false, availableContentStatuses: ['published'] },
|
|
88
|
+
getFieldsForContentType(),
|
|
89
|
+
sortOrder
|
|
90
|
+
)
|
|
91
|
+
return fetchSanity(query, true)
|
|
85
92
|
}
|
|
86
93
|
|
|
87
94
|
/**
|
|
@@ -92,16 +99,23 @@ export async function fetchLeaving(
|
|
|
92
99
|
* @number contentPerPage
|
|
93
100
|
* @returns {Promise<Object|null>}
|
|
94
101
|
*/
|
|
95
|
-
export async function fetchReturning(
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
const
|
|
99
|
-
const
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
102
|
+
export async function fetchReturning(brand, { pageNumber = 1, contentPerPage = 20 } = {}) {
|
|
103
|
+
const nextQuarter = getNextAndPreviousQuarterDates()['next']
|
|
104
|
+
const filterString = `brand == '${brand}' && quarter_published == '${nextQuarter}'`
|
|
105
|
+
const startEndOrder = getQueryFromPage(pageNumber, contentPerPage)
|
|
106
|
+
const sortOrder = {
|
|
107
|
+
sortOrder: 'published_on desc, id desc',
|
|
108
|
+
start: startEndOrder['start'],
|
|
109
|
+
end: startEndOrder['end'],
|
|
110
|
+
}
|
|
111
|
+
const query = await buildQuery(
|
|
112
|
+
filterString,
|
|
113
|
+
{ pullFutureContent: true, availableContentStatuses: ['draft'] },
|
|
114
|
+
getFieldsForContentType('returning'),
|
|
115
|
+
sortOrder
|
|
116
|
+
)
|
|
103
117
|
|
|
104
|
-
return fetchSanity(query, true)
|
|
118
|
+
return fetchSanity(query, true)
|
|
105
119
|
}
|
|
106
120
|
|
|
107
121
|
/**
|
|
@@ -112,14 +126,21 @@ export async function fetchReturning(
|
|
|
112
126
|
* @number contentPerPage
|
|
113
127
|
* @returns {Promise<Object|null>}
|
|
114
128
|
*/
|
|
115
|
-
export async function fetchComingSoon(
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
const
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
129
|
+
export async function fetchComingSoon(brand, { pageNumber = 1, contentPerPage = 20 } = {}) {
|
|
130
|
+
const filterString = `brand == '${brand}' && _type == 'song'`
|
|
131
|
+
const startEndOrder = getQueryFromPage(pageNumber, contentPerPage)
|
|
132
|
+
const sortOrder = {
|
|
133
|
+
sortOrder: 'published_on desc, id desc',
|
|
134
|
+
start: startEndOrder['start'],
|
|
135
|
+
end: startEndOrder['end'],
|
|
136
|
+
}
|
|
137
|
+
const query = await buildQuery(
|
|
138
|
+
filterString,
|
|
139
|
+
{ getFutureContentOnly: true },
|
|
140
|
+
getFieldsForContentType(),
|
|
141
|
+
sortOrder
|
|
142
|
+
)
|
|
143
|
+
return fetchSanity(query, true)
|
|
123
144
|
}
|
|
124
145
|
|
|
125
146
|
/**
|
|
@@ -128,12 +149,12 @@ export async function fetchComingSoon(
|
|
|
128
149
|
* @returns {number[]}
|
|
129
150
|
*/
|
|
130
151
|
function getQueryFromPage(pageNumber, contentPerPage) {
|
|
131
|
-
const start = contentPerPage*(pageNumber-1)
|
|
132
|
-
const end = contentPerPage*pageNumber
|
|
133
|
-
let result = []
|
|
134
|
-
result['start'] = start
|
|
135
|
-
result['end'] = end
|
|
136
|
-
return result
|
|
152
|
+
const start = contentPerPage * (pageNumber - 1)
|
|
153
|
+
const end = contentPerPage * pageNumber
|
|
154
|
+
let result = []
|
|
155
|
+
result['start'] = start
|
|
156
|
+
result['end'] = end
|
|
157
|
+
return result
|
|
137
158
|
}
|
|
138
159
|
|
|
139
160
|
/**
|
|
@@ -142,33 +163,33 @@ function getQueryFromPage(pageNumber, contentPerPage) {
|
|
|
142
163
|
* @returns {*[]}
|
|
143
164
|
*/
|
|
144
165
|
function getNextAndPreviousQuarterDates() {
|
|
145
|
-
const january = 1
|
|
146
|
-
const april = 4
|
|
147
|
-
const july = 7
|
|
148
|
-
const october = 10
|
|
149
|
-
const month = new Date().getMonth()
|
|
150
|
-
let year = new Date().getFullYear()
|
|
151
|
-
let nextQuarter = ''
|
|
152
|
-
let prevQuarter = ''
|
|
166
|
+
const january = 1
|
|
167
|
+
const april = 4
|
|
168
|
+
const july = 7
|
|
169
|
+
const october = 10
|
|
170
|
+
const month = new Date().getMonth()
|
|
171
|
+
let year = new Date().getFullYear()
|
|
172
|
+
let nextQuarter = ''
|
|
173
|
+
let prevQuarter = ''
|
|
153
174
|
if (month < april) {
|
|
154
|
-
nextQuarter = `${year}-0${april}-01
|
|
155
|
-
prevQuarter = `${year}-0${january}-01
|
|
175
|
+
nextQuarter = `${year}-0${april}-01`
|
|
176
|
+
prevQuarter = `${year}-0${january}-01`
|
|
156
177
|
} else if (month < july) {
|
|
157
|
-
nextQuarter = `${year}-0${july}-01
|
|
158
|
-
prevQuarter = `${year}-0${april}-01
|
|
178
|
+
nextQuarter = `${year}-0${july}-01`
|
|
179
|
+
prevQuarter = `${year}-0${april}-01`
|
|
159
180
|
} else if (month < october) {
|
|
160
|
-
nextQuarter = `${year}-${october}-01
|
|
161
|
-
prevQuarter = `${year}-0${july}-01
|
|
181
|
+
nextQuarter = `${year}-${october}-01`
|
|
182
|
+
prevQuarter = `${year}-0${july}-01`
|
|
162
183
|
} else {
|
|
163
|
-
prevQuarter = `${year}-${october}-01
|
|
164
|
-
year
|
|
165
|
-
nextQuarter = `${year}-0${january}-01
|
|
184
|
+
prevQuarter = `${year}-${october}-01`
|
|
185
|
+
year++
|
|
186
|
+
nextQuarter = `${year}-0${january}-01`
|
|
166
187
|
}
|
|
167
188
|
|
|
168
|
-
let result = []
|
|
169
|
-
result['next'] = nextQuarter
|
|
170
|
-
result['previous'] = prevQuarter
|
|
171
|
-
return result
|
|
189
|
+
let result = []
|
|
190
|
+
result['next'] = nextQuarter
|
|
191
|
+
result['previous'] = prevQuarter
|
|
192
|
+
return result
|
|
172
193
|
}
|
|
173
194
|
|
|
174
195
|
/**
|
|
@@ -202,8 +223,8 @@ export async function fetchArtists(brand) {
|
|
|
202
223
|
*/
|
|
203
224
|
export async function fetchSongArtistCount(brand) {
|
|
204
225
|
const filter = await new FilterBuilder(
|
|
205
|
-
|
|
206
|
-
|
|
226
|
+
`_type == "song" && brand == "${brand}" && references(^._id)`,
|
|
227
|
+
{ bypassPermissions: true }
|
|
207
228
|
).buildFilter()
|
|
208
229
|
const query = `
|
|
209
230
|
count(*[_type == "artist"]{
|
|
@@ -213,13 +234,13 @@ export async function fetchSongArtistCount(brand) {
|
|
|
213
234
|
return fetchSanity(query, true, { processNeedAccess: false })
|
|
214
235
|
}
|
|
215
236
|
|
|
216
|
-
export async function fetchPlayAlongsCount(
|
|
217
|
-
|
|
218
|
-
includedFields,
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
}
|
|
222
|
-
|
|
237
|
+
export async function fetchPlayAlongsCount(
|
|
238
|
+
brand,
|
|
239
|
+
{ searchTerm, includedFields, progressIds, progress }
|
|
240
|
+
) {
|
|
241
|
+
const searchFilter = searchTerm
|
|
242
|
+
? `&& (artist->name match "${searchTerm}*" || instructor[]->name match "${searchTerm}*" || title match "${searchTerm}*" || name match "${searchTerm}*")`
|
|
243
|
+
: ''
|
|
223
244
|
|
|
224
245
|
// Construct the included fields filter, replacing 'difficulty' with 'difficulty_string'
|
|
225
246
|
const includedFieldsFilter = includedFields.length > 0 ? filtersToGroq(includedFields) : ''
|
|
@@ -384,7 +405,7 @@ export async function fetchUpcomingEvents(brand, { page = 1, limit = 10 } = {})
|
|
|
384
405
|
"type": _type,
|
|
385
406
|
web_url_path,
|
|
386
407
|
"permission_id": permission[]->railcontent_id,
|
|
387
|
-
|
|
408
|
+
addevent_unique_key`
|
|
388
409
|
const query = buildRawQuery(
|
|
389
410
|
`_type in ${typesString} && brand == '${brand}' && published_on > '${now}' && status == 'scheduled'`,
|
|
390
411
|
fields,
|
|
@@ -490,7 +511,7 @@ export async function fetchByRailContentId(id, contentType) {
|
|
|
490
511
|
*/
|
|
491
512
|
export async function fetchByRailContentIds(ids, contentType = undefined) {
|
|
492
513
|
if (!ids) {
|
|
493
|
-
return []
|
|
514
|
+
return []
|
|
494
515
|
}
|
|
495
516
|
const idsString = ids.join(',')
|
|
496
517
|
|
|
@@ -1010,6 +1031,7 @@ export async function fetchMethod(brand, slug) {
|
|
|
1010
1031
|
|
|
1011
1032
|
const query = `*[_type == 'learning-path' && brand == "${brand}" && slug.current == "${slug}"] {
|
|
1012
1033
|
"description": ${descriptionField},
|
|
1034
|
+
description_portable,
|
|
1013
1035
|
"instructors":instructor[]->name,
|
|
1014
1036
|
published_on,
|
|
1015
1037
|
"id": railcontent_id,
|
|
@@ -1039,6 +1061,7 @@ export async function fetchMethod(brand, slug) {
|
|
|
1039
1061
|
title,
|
|
1040
1062
|
"type": _type,
|
|
1041
1063
|
"description": ${descriptionField},
|
|
1064
|
+
description_portable,
|
|
1042
1065
|
"url": web_url_path,
|
|
1043
1066
|
web_url_path,
|
|
1044
1067
|
xp,
|
|
@@ -1060,6 +1083,7 @@ export async function fetchMethodChildren(railcontentId) {
|
|
|
1060
1083
|
"child_count":coalesce(count(child[${childrenFilter}]->), 0),
|
|
1061
1084
|
"id": railcontent_id,
|
|
1062
1085
|
"description": ${descriptionField},
|
|
1086
|
+
description_portable,
|
|
1063
1087
|
"thumbnail_url": thumbnail.asset->url,
|
|
1064
1088
|
title,
|
|
1065
1089
|
xp,
|
|
@@ -1231,6 +1255,7 @@ export async function fetchLessonContent(railContentId) {
|
|
|
1231
1255
|
"light_logo": light_mode_logo_url.asset->url,
|
|
1232
1256
|
soundslice_slug,
|
|
1233
1257
|
"description": description[0].children[0].text,
|
|
1258
|
+
description_portable,
|
|
1234
1259
|
"chapters": chapter[]{
|
|
1235
1260
|
chapter_description,
|
|
1236
1261
|
chapter_timecode,
|
|
@@ -1268,16 +1293,16 @@ export async function fetchLessonContent(railContentId) {
|
|
|
1268
1293
|
isSingle: true,
|
|
1269
1294
|
})
|
|
1270
1295
|
const chapterProcess = (result) => {
|
|
1271
|
-
const chapters = result
|
|
1272
|
-
if(chapters.length == 0) return result
|
|
1296
|
+
const chapters = result?.chapters ?? []
|
|
1297
|
+
if (chapters.length == 0) return result
|
|
1273
1298
|
result.chapters = chapters.map((chapter, index) => ({
|
|
1274
1299
|
...chapter,
|
|
1275
|
-
chapter_thumbnail_url: `https://musora-web-platform.s3.amazonaws.com/chapters/${result.brand}/Chapter${index + 1}.jpg
|
|
1276
|
-
}))
|
|
1300
|
+
chapter_thumbnail_url: `https://musora-web-platform.s3.amazonaws.com/chapters/${result.brand}/Chapter${index + 1}.jpg`,
|
|
1301
|
+
}))
|
|
1277
1302
|
return result
|
|
1278
1303
|
}
|
|
1279
1304
|
|
|
1280
|
-
return fetchSanity(query, false, {customPostProcess:chapterProcess})
|
|
1305
|
+
return fetchSanity(query, false, { customPostProcess: chapterProcess })
|
|
1281
1306
|
}
|
|
1282
1307
|
|
|
1283
1308
|
/**
|
|
@@ -1368,9 +1393,25 @@ async function fetchRelatedLessonsSectionData(currentContent) {
|
|
|
1368
1393
|
async function buildRelatedLessonsQuery(currentContent) {
|
|
1369
1394
|
const defaultProjectionsAndSorting = `{_id, "id":railcontent_id, published_on, "instructor": instructor[0]->name, title, "thumbnail_url":thumbnail.asset->url, length_in_seconds, web_url_path, "type": _type, difficulty, difficulty_string, railcontent_id, artist->,"permission_id": permission[]->railcontent_id,_type,genre}|order(published_on desc, title asc)[0...10]`
|
|
1370
1395
|
const currentContentData = await getCurrentContentDataForQuery(currentContent)
|
|
1371
|
-
const tutorialQuery = await buildSubQueryForFetch(
|
|
1372
|
-
|
|
1373
|
-
|
|
1396
|
+
const tutorialQuery = await buildSubQueryForFetch(
|
|
1397
|
+
currentContentData.parentType,
|
|
1398
|
+
currentContentData.brand,
|
|
1399
|
+
currentContentData.parentId,
|
|
1400
|
+
currentContentData.difficulty_string,
|
|
1401
|
+
currentContentData.genres
|
|
1402
|
+
)
|
|
1403
|
+
const quickTipQuery = await buildSubQueryForFetch(
|
|
1404
|
+
'quick-tips',
|
|
1405
|
+
currentContentData.brand,
|
|
1406
|
+
currentContentData.parentId,
|
|
1407
|
+
currentContentData.difficulty_string
|
|
1408
|
+
)
|
|
1409
|
+
const songQuery = await buildSubQueryForFetch(
|
|
1410
|
+
'song',
|
|
1411
|
+
currentContentData.brand,
|
|
1412
|
+
currentContentData.parentId,
|
|
1413
|
+
currentContentData.difficulty_string
|
|
1414
|
+
)
|
|
1374
1415
|
return `[...*[${tutorialQuery}]${defaultProjectionsAndSorting}, ...*[${quickTipQuery}]${defaultProjectionsAndSorting}, ...*[${songQuery}]${defaultProjectionsAndSorting}, ]`
|
|
1375
1416
|
}
|
|
1376
1417
|
|
|
@@ -1383,9 +1424,7 @@ async function getCurrentContentDataForQuery(currentContent) {
|
|
|
1383
1424
|
const currentContentData = groupCurrentContentData(currentContent)
|
|
1384
1425
|
const genres = await fetchParentContentGenres(currentContentData)
|
|
1385
1426
|
const genreString = formatGenresToString(genres)
|
|
1386
|
-
return {...currentContentData,
|
|
1387
|
-
genres: genreString
|
|
1388
|
-
}
|
|
1427
|
+
return { ...currentContentData, genres: genreString }
|
|
1389
1428
|
}
|
|
1390
1429
|
|
|
1391
1430
|
/**
|
|
@@ -1398,7 +1437,7 @@ function groupCurrentContentData(currentContent) {
|
|
|
1398
1437
|
parentType: currentContent.parent_type,
|
|
1399
1438
|
parentId: currentContent.parent_content_data[0].id,
|
|
1400
1439
|
difficulty_string: currentContent.difficulty_string,
|
|
1401
|
-
brand: currentContent.brand
|
|
1440
|
+
brand: currentContent.brand,
|
|
1402
1441
|
}
|
|
1403
1442
|
}
|
|
1404
1443
|
|
|
@@ -1432,7 +1471,9 @@ function formatGenresToString(genres) {
|
|
|
1432
1471
|
*/
|
|
1433
1472
|
async function buildSubQueryForFetch(type, brand, id, difficulty, genres = null) {
|
|
1434
1473
|
const genreString = genres ? `&& references([${genres}])` : ``
|
|
1435
|
-
return new FilterBuilder(
|
|
1474
|
+
return new FilterBuilder(
|
|
1475
|
+
`_type == "${type}" && brand == "${brand}" && railcontent_id != ${id} && difficulty_string == "${difficulty}" ${genreString}`
|
|
1476
|
+
).buildFilter()
|
|
1436
1477
|
}
|
|
1437
1478
|
|
|
1438
1479
|
/**
|
|
@@ -1442,9 +1483,7 @@ async function buildSubQueryForFetch(type, brand, id, difficulty, genres = null)
|
|
|
1442
1483
|
* @returns {Object}
|
|
1443
1484
|
*/
|
|
1444
1485
|
function formatForResponse(parentObject, relatedLessonObject) {
|
|
1445
|
-
return {...parentObject,
|
|
1446
|
-
related_lessons: relatedLessonObject
|
|
1447
|
-
}
|
|
1486
|
+
return { ...parentObject, related_lessons: relatedLessonObject }
|
|
1448
1487
|
}
|
|
1449
1488
|
|
|
1450
1489
|
/**
|
|
@@ -1956,6 +1995,9 @@ export async function fetchSanity(
|
|
|
1956
1995
|
}
|
|
1957
1996
|
|
|
1958
1997
|
function needsAccessDecorator(results, userPermissions, isAdmin) {
|
|
1998
|
+
if (!results || (Array.isArray(results) && results.length === 0)) {
|
|
1999
|
+
return results; // nothing to decorate
|
|
2000
|
+
}
|
|
1959
2001
|
userPermissions = new Set(userPermissions)
|
|
1960
2002
|
|
|
1961
2003
|
if (Array.isArray(results)) {
|
|
@@ -2114,7 +2156,7 @@ function checkSanityConfig(config) {
|
|
|
2114
2156
|
function buildRawQuery(
|
|
2115
2157
|
filter = '',
|
|
2116
2158
|
fields = '...',
|
|
2117
|
-
{ sortOrder = 'published_on desc', start = 0, end = 10, isSingle = false}
|
|
2159
|
+
{ sortOrder = 'published_on desc', start = 0, end = 10, isSingle = false }
|
|
2118
2160
|
) {
|
|
2119
2161
|
const sortString = sortOrder ? `order(${sortOrder})` : ''
|
|
2120
2162
|
const countString = isSingle ? '[0...1]' : `[${start}...${end}]`
|
|
@@ -2128,10 +2170,10 @@ async function buildQuery(
|
|
|
2128
2170
|
baseFilter = '',
|
|
2129
2171
|
filterParams = { pullFutureContent: false },
|
|
2130
2172
|
fields = '...',
|
|
2131
|
-
{ sortOrder = 'published_on desc', start = 0, end = 10, isSingle = false}
|
|
2173
|
+
{ sortOrder = 'published_on desc', start = 0, end = 10, isSingle = false }
|
|
2132
2174
|
) {
|
|
2133
2175
|
const filter = await new FilterBuilder(baseFilter, filterParams).buildFilter()
|
|
2134
|
-
return buildRawQuery(filter, fields, { sortOrder, start, end, isSingle})
|
|
2176
|
+
return buildRawQuery(filter, fields, { sortOrder, start, end, isSingle })
|
|
2135
2177
|
}
|
|
2136
2178
|
|
|
2137
2179
|
function buildEntityAndTotalQuery(
|
package/test/dataContext.test.js
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/test/localStorageMock.js
CHANGED
|
File without changes
|
package/test/log.js
CHANGED
|
File without changes
|