Spaces:
Sleeping
Sleeping
Update app.R
Browse files
app.R
CHANGED
|
@@ -139,10 +139,14 @@ build_pitcher_table <- function(lb, min_pitches, portal_only) {
|
|
| 139 |
'" data-height="', gsub('"', '"', ifelse(is.na(Height), "", Height)),
|
| 140 |
'" data-weight="', gsub('"', '"', ifelse(is.na(Weight), "", Weight)),
|
| 141 |
'">β Add</button>'),
|
| 142 |
-
Name
|
| 143 |
-
|
| 144 |
-
|
| 145 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 146 |
)
|
| 147 |
if (portal_only) df <- df %>% filter(Portal == "Yes")
|
| 148 |
df %>%
|
|
@@ -153,16 +157,17 @@ build_pitcher_table <- function(lb, min_pitches, portal_only) {
|
|
| 153 |
arrange(desc(Pitches))
|
| 154 |
}
|
| 155 |
|
| 156 |
-
# ββ Build hitter table from leaderboard ββββββββββββββββββββββββββββββββββββββββ
|
| 157 |
build_hitter_table <- function(lb, min_pa, portal_only, bat_side, hitter_pos) {
|
|
|
|
| 158 |
df <- lb %>%
|
| 159 |
filter(PA >= min_pa) %>%
|
| 160 |
mutate(
|
| 161 |
-
|
| 162 |
-
|
| 163 |
-
|
| 164 |
-
|
| 165 |
-
|
|
|
|
| 166 |
`Twitter` = paste0('<a href="https://x.com/search?q=',
|
| 167 |
gsub(" ", "+", sapply(Batter, format_name)),
|
| 168 |
'&src=typed_query&f=user" target="_blank">🐦 Search</a>'),
|
|
@@ -176,19 +181,19 @@ build_hitter_table <- function(lb, min_pa, portal_only, bat_side, hitter_pos) {
|
|
| 176 |
parts <- strsplit(n, ", ")[[1]]
|
| 177 |
if (length(parts)==2) trimws(parts[1]) else n
|
| 178 |
})),
|
| 179 |
-
'" data-team="', gsub('"', '"', ifelse(is.na(Team),
|
| 180 |
-
'" data-position="',gsub('"', '"', ifelse(is.na(Position),
|
| 181 |
-
'" data-batside="', gsub('"', '"', ifelse(is.na(BatSide),
|
| 182 |
-
'" data-height="', gsub('"', '"', ifelse(is.na(Height),
|
| 183 |
-
'" data-weight="', gsub('"', '"', ifelse(is.na(Weight),
|
| 184 |
'">β Add</button>')
|
| 185 |
)
|
| 186 |
-
if (portal_only)
|
| 187 |
-
if (bat_side != "All")
|
| 188 |
if (hitter_pos != "All") df <- df %>% filter(Position == hitter_pos)
|
| 189 |
df %>%
|
| 190 |
select(Name, Level, Team, Portal, Position, BatSide, `Twitter`, `Board`,
|
| 191 |
-
HomeState, Height, Weight, PA,
|
| 192 |
BA, OBP, SLG, wOBA, xwOBA, `BB%`, `K%`, `Swing%`, `Contact%`,
|
| 193 |
`IZ Whiff%`, `Chase%`, `Hard Hit%`, `Avg EV`, `GB%`, `FB%`, `LD%`) %>%
|
| 194 |
arrange(desc(PA))
|
|
@@ -470,6 +475,11 @@ ui <- fluidPage(
|
|
| 470 |
selected = "All", width = "120px")
|
| 471 |
)
|
| 472 |
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 473 |
)
|
| 474 |
),
|
| 475 |
|
|
@@ -622,6 +632,10 @@ server <- function(input, output, session) {
|
|
| 622 |
df <- df %>% filter(HomeState %in% p_states)
|
| 623 |
if (!is.null(input$throws) && input$throws != "All")
|
| 624 |
df <- df %>% filter(Throws == input$throws)
|
|
|
|
|
|
|
|
|
|
|
|
|
| 625 |
df
|
| 626 |
}, error = function(e) {
|
| 627 |
message("build_pitcher_table failed: ", e$message)
|
|
@@ -639,6 +653,10 @@ server <- function(input, output, session) {
|
|
| 639 |
h_states <- input$hitter_state
|
| 640 |
if (!is.null(h_states) && !("All" %in% h_states) && length(h_states) > 0)
|
| 641 |
df <- df %>% filter(HomeState %in% h_states)
|
|
|
|
|
|
|
|
|
|
|
|
|
| 642 |
df
|
| 643 |
}, error = function(e) {
|
| 644 |
message("build_hitter_table failed: ", e$message)
|
|
|
|
| 139 |
'" data-height="', gsub('"', '"', ifelse(is.na(Height), "", Height)),
|
| 140 |
'" data-weight="', gsub('"', '"', ifelse(is.na(Weight), "", Weight)),
|
| 141 |
'">β Add</button>'),
|
| 142 |
+
Name = ifelse(HasSinker,
|
| 143 |
+
paste0('<span style="background:#cce5ff; padding:2px 6px;',
|
| 144 |
+
'border-radius:3px; font-weight:700;">', Name,
|
| 145 |
+
ifelse(!is.na(DateAdded) & DateAdded == max(DateAdded[!is.na(DateAdded)]), ' *', ''),
|
| 146 |
+
'</span>'),
|
| 147 |
+
paste0('<span style="font-weight:700;">', Name,
|
| 148 |
+
ifelse(!is.na(DateAdded) & DateAdded == max(DateAdded[!is.na(DateAdded)]), ' *', ''),
|
| 149 |
+
'</span>'))
|
| 150 |
)
|
| 151 |
if (portal_only) df <- df %>% filter(Portal == "Yes")
|
| 152 |
df %>%
|
|
|
|
| 157 |
arrange(desc(Pitches))
|
| 158 |
}
|
| 159 |
|
|
|
|
| 160 |
build_hitter_table <- function(lb, min_pa, portal_only, bat_side, hitter_pos) {
|
| 161 |
+
latest_date <- max(lb$DateAdded, na.rm = TRUE)
|
| 162 |
df <- lb %>%
|
| 163 |
filter(PA >= min_pa) %>%
|
| 164 |
mutate(
|
| 165 |
+
is_new = !is.na(DateAdded) & DateAdded == latest_date,
|
| 166 |
+
Name = paste0('<button class="hitter-name-btn" data-batter="',
|
| 167 |
+
gsub('"', '"', Batter),
|
| 168 |
+
'" style="background:none;border:none;color:#002147;',
|
| 169 |
+
'font-weight:700;cursor:pointer;padding:0;font-size:13px;">',
|
| 170 |
+
Name, ifelse(is_new, ' *', ''), '</button>'),
|
| 171 |
`Twitter` = paste0('<a href="https://x.com/search?q=',
|
| 172 |
gsub(" ", "+", sapply(Batter, format_name)),
|
| 173 |
'&src=typed_query&f=user" target="_blank">🐦 Search</a>'),
|
|
|
|
| 181 |
parts <- strsplit(n, ", ")[[1]]
|
| 182 |
if (length(parts)==2) trimws(parts[1]) else n
|
| 183 |
})),
|
| 184 |
+
'" data-team="', gsub('"', '"', ifelse(is.na(Team), "", Team)),
|
| 185 |
+
'" data-position="',gsub('"', '"', ifelse(is.na(Position), "", Position)),
|
| 186 |
+
'" data-batside="', gsub('"', '"', ifelse(is.na(BatSide), "", BatSide)),
|
| 187 |
+
'" data-height="', gsub('"', '"', ifelse(is.na(Height), "", Height)),
|
| 188 |
+
'" data-weight="', gsub('"', '"', ifelse(is.na(Weight), "", Weight)),
|
| 189 |
'">β Add</button>')
|
| 190 |
)
|
| 191 |
+
if (portal_only) df <- df %>% filter(Portal == "Yes")
|
| 192 |
+
if (bat_side != "All") df <- df %>% filter(BatSide == bat_side)
|
| 193 |
if (hitter_pos != "All") df <- df %>% filter(Position == hitter_pos)
|
| 194 |
df %>%
|
| 195 |
select(Name, Level, Team, Portal, Position, BatSide, `Twitter`, `Board`,
|
| 196 |
+
HomeState, Height, Weight, DateAdded, PA,
|
| 197 |
BA, OBP, SLG, wOBA, xwOBA, `BB%`, `K%`, `Swing%`, `Contact%`,
|
| 198 |
`IZ Whiff%`, `Chase%`, `Hard Hit%`, `Avg EV`, `GB%`, `FB%`, `LD%`) %>%
|
| 199 |
arrange(desc(PA))
|
|
|
|
| 475 |
selected = "All", width = "120px")
|
| 476 |
)
|
| 477 |
)
|
| 478 |
+
),
|
| 479 |
+
tags$div(
|
| 480 |
+
tags$div("New Players", class = "filter-label"),
|
| 481 |
+
checkboxInput("new_only", label = "Show New Only",
|
| 482 |
+
value = FALSE)
|
| 483 |
)
|
| 484 |
),
|
| 485 |
|
|
|
|
| 632 |
df <- df %>% filter(HomeState %in% p_states)
|
| 633 |
if (!is.null(input$throws) && input$throws != "All")
|
| 634 |
df <- df %>% filter(Throws == input$throws)
|
| 635 |
+
if (isTRUE(input$new_only)) {
|
| 636 |
+
latest_date <- max(df$DateAdded, na.rm = TRUE)
|
| 637 |
+
df <- df %>% filter(!is.na(DateAdded) & DateAdded == latest_date)
|
| 638 |
+
}
|
| 639 |
df
|
| 640 |
}, error = function(e) {
|
| 641 |
message("build_pitcher_table failed: ", e$message)
|
|
|
|
| 653 |
h_states <- input$hitter_state
|
| 654 |
if (!is.null(h_states) && !("All" %in% h_states) && length(h_states) > 0)
|
| 655 |
df <- df %>% filter(HomeState %in% h_states)
|
| 656 |
+
if (isTRUE(input$new_only)) {
|
| 657 |
+
latest_date <- max(df$DateAdded, na.rm = TRUE)
|
| 658 |
+
df <- df %>% filter(!is.na(DateAdded) & DateAdded == latest_date)
|
| 659 |
+
}
|
| 660 |
df
|
| 661 |
}, error = function(e) {
|
| 662 |
message("build_hitter_table failed: ", e$message)
|