support for flags in eventLineup edit
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
const path = require('path')
|
||||
const fs = require('fs')
|
||||
const {embeddedSvgFromPath, parsePositionLabel} = require("../lib/utils")
|
||||
const {embeddedSvgFromPath, parsePositionLabel, compilePositionLabel} = require("../lib/utils")
|
||||
const tsUtils = require('../lib/utils')
|
||||
const { loadEventLineupEntries } = require('teamsnap.js')
|
||||
|
||||
@@ -15,6 +15,7 @@ const statusCodeIcons = {
|
||||
}
|
||||
|
||||
exports.helpers = {
|
||||
flagsString: (flags) => flags?.join(","),
|
||||
plus1: (i) => Number(i)+1,
|
||||
positions: () => ["P", "C", "1B", "2B", "3B", "SS", "LF", "CF", "RF", "EH", "DH"],
|
||||
defense_positions: () => ["C", "1B", "2B", "3B", "SS", "LF", "CF", "RF", "P"],
|
||||
@@ -49,7 +50,7 @@ exports.helpers = {
|
||||
return (member.benchcoach?.eventLineupEntry != null);
|
||||
},
|
||||
isInStartingLineup: (member) => {
|
||||
if (member.benchcoach.eventLineupEntry == null) return false;
|
||||
if (member.benchcoach.eventLineupEntry == null || member.benchcoach.eventLineupEntry.label == '') return false;
|
||||
const {positionFlags} = parsePositionLabel(member.benchcoach.eventLineupEntry?.label);
|
||||
return (positionFlags != "PO")
|
||||
},
|
||||
@@ -59,11 +60,11 @@ exports.helpers = {
|
||||
return (member.benchcoach.eventLineupEntry != null && positionFlags == "PO")
|
||||
},
|
||||
isInBench: (member) => {
|
||||
if (member.benchcoach.eventLineupEntry != null || member.isNonPlayer) return false;
|
||||
if ((member.benchcoach.eventLineupEntry != null && member.benchcoach.eventLineupEntry.label != '') || member.isNonPlayer) return false;
|
||||
return (member.benchcoach.availability?.statusCode != 0 && member.benchcoach.availability?.statusCode != null)
|
||||
},
|
||||
isInOut: (member) => {
|
||||
if (member.benchcoach.eventLineupEntry != null || member.isNonPlayer) return false;
|
||||
if ((member.benchcoach.eventLineupEntry != null && member.benchcoach.eventLineupEntry.label != '') || member.isNonPlayer) return false;
|
||||
return (member.benchcoach.availability?.statusCode == 0 || member.benchcoach.availability?.statusCode == null)
|
||||
},
|
||||
availabilityStatusShort: (availability) => {
|
||||
@@ -103,8 +104,9 @@ attachBenchcoachPropertiesToMember = (members, event_lineup_entries, availabilit
|
||||
if (event_lineup_entry != null) {
|
||||
// member.link('eventLineupEntry', event_lineup_entry)
|
||||
member.benchcoach.eventLineupEntry = event_lineup_entry
|
||||
const {positionLabelWithoutFlag} = parsePositionLabel(event_lineup_entry.label);
|
||||
const {positionLabelWithoutFlag, positionFlags} = parsePositionLabel(event_lineup_entry.label);
|
||||
member.benchcoach.eventLineupEntry.positionLabelWithoutFlag = positionLabelWithoutFlag
|
||||
member.benchcoach.eventLineupEntry.flags = positionFlags
|
||||
}
|
||||
else {
|
||||
member.benchcoach.eventLineupEntry = null
|
||||
@@ -157,11 +159,12 @@ const processPostedEventLineupEntries = (body, eventLineupEntries, eventLineup)
|
||||
const lineupEntryId = body.eventLineupEntryId[i]
|
||||
const lineupEntryLabel = body.label[i]
|
||||
const lineupEntrySequence = body.sequence[i]
|
||||
const lineupEntryFlags = body.flags[i]
|
||||
if (lineupEntryId != '') {
|
||||
// Update lineup entry
|
||||
const eventLineupEntry = eventLineupEntries.find((e)=>e.id==Number(lineupEntryId))
|
||||
eventLineupEntry.sequence = lineupEntrySequence
|
||||
eventLineupEntry.label = lineupEntryLabel
|
||||
eventLineupEntry.label = compilePositionLabel(lineupEntryLabel, lineupEntryFlags)
|
||||
newEventLineupEntries.push(eventLineupEntry)
|
||||
}
|
||||
else if (lineupEntryLabel != '') {
|
||||
@@ -170,7 +173,7 @@ const processPostedEventLineupEntries = (body, eventLineupEntries, eventLineup)
|
||||
eventLineupEntry.eventLineupId = eventLineup.id
|
||||
eventLineupEntry.memberId = memberId
|
||||
eventLineupEntry.sequence = lineupEntrySequence
|
||||
eventLineupEntry.label = lineupEntryLabel
|
||||
eventLineupEntry.label = compilePositionLabel(lineupEntryLabel, lineupEntryFlags)
|
||||
newEventLineupEntries.push(eventLineupEntry)
|
||||
}
|
||||
else {
|
||||
|
||||
@@ -150,7 +150,19 @@ exports.parsePositionLabel = (label) => {
|
||||
positionFlags: null
|
||||
}
|
||||
}
|
||||
const positionLabelWithoutFlags= label.replace(/(.*?)\s\[(.*?)\]/, "$1")
|
||||
const positionFlags = label.replace(/(.*?)\s\[(.*?)\]/, "$2")
|
||||
const pattern = /(?<pos>[A-Z0-9]+)(?:\s\[(?<flags>.[A-z,]+)\])?/g
|
||||
const {pos, flags} = pattern.exec(label)?.groups || {}
|
||||
const positionLabelWithoutFlags= pos
|
||||
const positionFlags = flags?.split(',').map(f=>f.trim()) || []
|
||||
return {positionLabelWithoutFlags, positionFlags}
|
||||
}
|
||||
}
|
||||
|
||||
exports.compilePositionLabel = (label, flags) => {
|
||||
if (flags == null || flags == '' || flags.lengh == 0) {
|
||||
return label
|
||||
}
|
||||
else {
|
||||
const flags_set = new Set(flags.split(',').map(s=>s.trim()))
|
||||
return `${label} [${Array.from(flags_set).sort().join(',')}]`
|
||||
}
|
||||
}
|
||||
@@ -8,7 +8,7 @@ function onPositionSelectChange(elem) {
|
||||
}
|
||||
});
|
||||
colorPositions();
|
||||
refreshLineupOrder();
|
||||
refreshLineup();
|
||||
}
|
||||
|
||||
function togglePopup(el) {
|
||||
@@ -39,7 +39,7 @@ function colorPositions() {
|
||||
}
|
||||
}
|
||||
|
||||
function refreshLineupOrder() {
|
||||
function refreshLineup() {
|
||||
Array.from(document.querySelectorAll("[id^=event-lineup]")).forEach((bcLineup) => {
|
||||
Array.from(
|
||||
bcLineup.querySelectorAll(
|
||||
@@ -55,6 +55,20 @@ function refreshLineupOrder() {
|
||||
} else {
|
||||
slot.querySelector("input[name*=label]").value = null;
|
||||
}
|
||||
if (slot.closest('.position-only')){
|
||||
const flags = new Set(slot.querySelector("input[name*=flags]").value.split(',').map(s=>s.trim()))
|
||||
flags.add('PO');flags.delete('')
|
||||
slot.querySelector("input[name*=flags]").value = Array.from(flags).join(",");
|
||||
}
|
||||
else {
|
||||
const flags = new Set(slot.querySelector("input[name*=flags]").value.split(',').map(s=>s.trim()))
|
||||
flags.delete('PO');flags.delete('')
|
||||
slot.querySelector("input[name*=flags]").value = Array.from(flags).join(",");
|
||||
}
|
||||
if (slot.closest('.bench')){
|
||||
slot.querySelector("input[name*=sequence]").value = '';
|
||||
slot.querySelector("input[name*=label]").value = '';
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
@@ -74,13 +88,13 @@ for (bcLineup of document.querySelectorAll("[id^=event-lineup]")) {
|
||||
// Add to Lineup
|
||||
var itemEl = evt.item; // dragged HTMLElement
|
||||
|
||||
refreshLineupOrder();
|
||||
refreshLineup();
|
||||
},
|
||||
onUpdate: function (/**Event*/ evt) {
|
||||
console.log("update to lineup");
|
||||
// var itemEl = evt.item; // dragged HTMLElement
|
||||
// refresh_lineup_order(itemEl);
|
||||
refreshLineupOrder();
|
||||
refreshLineup();
|
||||
},
|
||||
};
|
||||
new Sortable.create(bcLineup.querySelector("[id^=lineup-starting] .slot-set"), options);
|
||||
@@ -91,13 +105,16 @@ for (bcLineup of document.querySelectorAll("[id^=event-lineup]")) {
|
||||
}
|
||||
|
||||
for (lineup_slot of document.querySelectorAll("[id^=lineup-out] .lineup-slot")) {
|
||||
console.log(lineup_slot)
|
||||
const cells = lineup_slot.querySelectorAll('.Panel-cell:has(.sequence), .Panel-cell:has(.drag-handle), .Panel-cell:has(.position-select-box) ')
|
||||
Array.from(cells).forEach(cell=>{
|
||||
cell.classList.add('u-hidden')
|
||||
})
|
||||
}
|
||||
|
||||
function refreshFlags(){
|
||||
|
||||
}
|
||||
|
||||
function copyEmailTable(itemEl, subject, recipients) {
|
||||
// Create container for the HTML
|
||||
// [1]
|
||||
|
||||
@@ -114,7 +114,7 @@
|
||||
<script>
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
colorPositions();
|
||||
refreshLineupOrder();
|
||||
refreshLineup();
|
||||
})
|
||||
</script>
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
<div class="Panel-expandableRow lineup-slot">
|
||||
<input type="hidden" name="label" value="{{member.benchcoach.eventLineupEntry.label}}">
|
||||
<input type="hidden" name="flags" value="{{flagsString member.benchcoach.eventLineupEntry.flags}}">
|
||||
<input type="hidden" name="sequence" value="{{member.benchcoach.eventLineupEntry.sequence}}">
|
||||
<input type="hidden" name="eventId" value="{{event.id}}">
|
||||
<input type="hidden" name="eventLineupEntryId" value="{{member.benchcoach.eventLineupEntry.id}}">
|
||||
|
||||
Reference in New Issue
Block a user