2023-03-04
This commit is contained in:
134
src/helpers/eventsheet.js
Normal file
134
src/helpers/eventsheet.js
Normal file
@@ -0,0 +1,134 @@
|
||||
const { parsePositionLabel, teamsnapMembersSortLineupAvailabilityLastName, teamsnapMembersSortAvailabilityLastName } = require('../lib/utils')
|
||||
const {attachBenchcoachPropertiesToMember} = require('../controllers/eventlineup')
|
||||
|
||||
exports.offenseLineup = (number_of_slots, options) => {
|
||||
var results = ""
|
||||
const {event_lineup_entries, members} = options.data.root
|
||||
|
||||
for (let i = 0; i < number_of_slots; i++){
|
||||
const event_lineup_entry = event_lineup_entries ? event_lineup_entries[i] : null
|
||||
if (event_lineup_entry && !parsePositionLabel(event_lineup_entry.label).positionFlags.includes('PO')){
|
||||
results += options.fn({
|
||||
sequence: event_lineup_entry.sequence,
|
||||
member: members.find(member=> event_lineup_entry.memberId == member.id || event_lineup_entry.memberName == `${member.firstName} ${member.lastName}`),
|
||||
label: event_lineup_entry.label
|
||||
})
|
||||
}
|
||||
else {
|
||||
results += options.fn({
|
||||
sequence: i,
|
||||
member: {},
|
||||
label: ""
|
||||
})
|
||||
}
|
||||
}
|
||||
return results
|
||||
}
|
||||
|
||||
exports.defenseLineup = (options) => {
|
||||
var results = ""
|
||||
const {event_lineup_entries, members} = options.data.root
|
||||
const positions = ["C", "1B", "2B", "3B", "SS", "LF", "CF", "RF", "P"]
|
||||
positions.forEach(position=>{
|
||||
const event_lineup_entry = event_lineup_entries ? event_lineup_entries.find(e=>parsePositionLabel(e.label).positionLabelWithoutFlags == position) : null
|
||||
if (event_lineup_entry) {
|
||||
results += options.fn({position, eventLineupEntry:event_lineup_entry, member:members.find(member=> event_lineup_entry.memberId == member.id || event_lineup_entry.memberName == `${member.firstName} ${member.lastName}`)})
|
||||
}
|
||||
else {
|
||||
results += options.fn({position, member:{}})
|
||||
}
|
||||
})
|
||||
return results
|
||||
}
|
||||
|
||||
|
||||
exports.rosterHistoryHeader = (options) => {
|
||||
var results = ""
|
||||
events = ["+1", "+2", "+3", "+4","-1","-2","-3","-4"]
|
||||
|
||||
events.forEach(event => {
|
||||
const class_name = event.includes("+") ? "plus": "minus"
|
||||
const past_or_future = event.includes("+") ? "future": "past"
|
||||
const index = Number(event.replace("+","").replace("-",""))
|
||||
results += options.fn({class:`today-${class_name}-${index} ${past_or_future}`, event})
|
||||
})
|
||||
return results;
|
||||
}
|
||||
|
||||
exports.rosterHistory = (options) => {
|
||||
var results = ""
|
||||
const {event, event_lineup_entries, members, availabilities} = options.data.root
|
||||
const players = members.filter(m=>!m.isNonPlayer)
|
||||
attachBenchcoachPropertiesToMember(players, event_lineup_entries ? event_lineup_entries.filter(i=>i.eventId==event.id) : [], availabilities.filter(i=>i.eventId==event.id))
|
||||
players.sort(teamsnapMembersSortAvailabilityLastName)
|
||||
|
||||
players.forEach(member=>{
|
||||
const {firstName, lastName, jerseyNumber, benchcoach, position, id} = member
|
||||
results += options.fn({
|
||||
id, firstName, lastName, jerseyNumber, position, benchcoach
|
||||
})
|
||||
}
|
||||
)
|
||||
return results;
|
||||
}
|
||||
|
||||
const positionGroups = {
|
||||
"P":"P",
|
||||
"IF":"IF",
|
||||
"1B":"IF",
|
||||
"2B":"IF",
|
||||
"3B":"IF",
|
||||
"SS":"IF",
|
||||
"OF":"OF",
|
||||
"LF":"OF",
|
||||
"CF":"OF",
|
||||
"RF":"OF",
|
||||
"C":"C"
|
||||
}
|
||||
|
||||
exports.positionCapabilityFor = (member, position, options) => {
|
||||
const member_positions = member.position.split(",").map(s=>s.trim())
|
||||
const member_position_groups = new Set(member.position.split(",").map(s=>positionGroups[s.trim()]))
|
||||
|
||||
if (member_position_groups.has(position)){
|
||||
return "\u2713"
|
||||
}
|
||||
else {
|
||||
return ""
|
||||
}
|
||||
}
|
||||
|
||||
exports.firstLetter = (s, options) => {
|
||||
return s[0];
|
||||
}
|
||||
|
||||
exports.repeat = (n, options) => {
|
||||
var results = "";
|
||||
[...Array(n).keys()].forEach(i => {
|
||||
results += options.fn({index: i})
|
||||
});
|
||||
return results;
|
||||
}
|
||||
|
||||
exports.loopEvents = (events, options) => {
|
||||
var results = "";
|
||||
events.forEach(event => {
|
||||
results += options.fn(event)
|
||||
}
|
||||
)
|
||||
return results;
|
||||
}
|
||||
|
||||
exports.timepointForMember = (member, timeline, event, options) => {
|
||||
var results = ""
|
||||
const availability = timeline.availabilities.find(a=>a.memberId==member.id && a.eventId==event.id)
|
||||
const eventLineupEntry = timeline.event_lineup_entries.find(a=>(a.memberId==member.id || a.memberName == `${member.firstName} ${member.lastName}`) && a.eventId==event.id)
|
||||
var value = ""
|
||||
if (eventLineupEntry){
|
||||
value = parsePositionLabel(eventLineupEntry.label).positionLabelWithoutFlags
|
||||
}
|
||||
else {
|
||||
value = availability.status[0]
|
||||
}
|
||||
return options.fn({availability: availability, eventLineupEntry: eventLineupEntry, value})
|
||||
}
|
||||
Reference in New Issue
Block a user