2023-03-04

This commit is contained in:
2024-03-04 13:32:25 -06:00
parent 6576d17539
commit a505747b06
85 changed files with 13977 additions and 2881 deletions

134
src/helpers/eventsheet.js Normal file
View 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})
}