import axios from 'axios' import { useEffect, useState } from 'react' import Tabs from 'react-bootstrap/Tabs' import Tab from 'react-bootstrap/Tab' import ToggleButtonGroup from 'react-bootstrap/ButtonGroup' import ToggleButton from 'react-bootstrap/Button' import useSWR from 'swr' import Table from 'react-bootstrap/Table' import Spinner from 'react-bootstrap/Spinner' import {CameraReelsFill} from 'react-bootstrap-icons' import Gradient from 'rgt' import Container from 'react-bootstrap/Container' import 'bootstrap/dist/css/bootstrap.min.css'; const fetcher = url => axios.get(url).then(res => res.data) var RABI_RIBI_GAME_ID = "o6g0o8d2" function VariableSelector(p) { const {values} = p const displayValues = Object.keys(values.values.values).map((key)=>[values.values.values[key],key]) const [selected,setSelected] = useState(Object.keys(values.values.values)[0]) const handleChange=(e)=>{ setSelected(e.target.id) var arr = {...p.selectionValues} arr[p.category.id][p.selectionID]=values.id+","+e.target.id p.setSelectionValues(arr) } return <> {displayValues.map((value,i)=>{value[0].label})}
} function getLeaderboard(categoryID,variables) { const { data,error } = useSWR("https://www.speedrun.com/api/v1/leaderboards/"+RABI_RIBI_GAME_ID+"/category/"+categoryID+variables,fetcher) return { data: data, isLoading: !error && !data, isError: error } } function getPlatform(platformID) { const { data,error } = useSWR("https://www.speedrun.com/api/v1/platforms/"+platformID,fetcher) return { platform: data?.data.name, isLoading: !error && !data, isError: error } } function getVersion(versionID) { const { data,error } = useSWR("https://www.speedrun.com/api/v1/variables/p85me3lg",fetcher) return { version: data?.data.values.values[versionID].label, isLoading: !error && !data, isError: error } } function getPlayer(playerID) { const { data,error } = useSWR("https://www.speedrun.com/api/v1/users/"+playerID,fetcher) return { name: data?.data.names.international, link: data?.data.weblink, color1: data?.data["name-style"]["color-from"]?.dark, color2: data?.data["name-style"]["color-to"]?.dark, country_code: data?.data.location?.country.code, country_name: data?.data.location?.country.names.international, twitch: data?.data.twitch?.uri, youtube: data?.data.youtube?.uri, icon: data?.data.assets.icon.uri, image: data?.data.assets.image.uri, isLoading: !error && !data, isError: error } } function Player(p) { const {data}=p const playerData=getPlayer(data.id) return {playerData.name&&playerData.name.length>0&&{data.rel==="guest"?data.name:playerData.name}} } function TimeDisplay(time) { const hrs = Math.floor(time/3600)>0?Math.floor(time/3600):""; const min = Math.floor(time/60)>0?Math.floor(time/60%60):"00"; const sec = Math.floor(time%60)>0?Math.floor(time%60):"00"; const millis = time%1>0?Math.round(time%1*1000):""; return <>{(hrs>0?hrs+":":"")+min.toLocaleString('en-US',{minimumIntegerDigits:2})+":"+sec.toLocaleString('en-US',{minimumIntegerDigits:2})}{millis>0&&{"."+millis.toLocaleString('en-US',{minimumIntegerDigits:3})+""}} } function Platform(p) { const {data} = p const playerData=getPlatform(data) return <>{playerData.platform??""} } function Version(p) { const {data} = p const versionData=getVersion(data) return <>{versionData.version??""} } function Leaderboard(p) { const {data} = p return {!data?:data?.data.runs.map((run)=>{window.location.href=run.run.weblink}}> {/*#*/} {/*Player*/} {/*Time without loads*/} {/*Time with loads*/} {/*Platform*/} {/*Version*/} {/*Date*/} {/*Video*/} )}
# Player Time without loads Time with loads Platform Version Date Video
Buns are loading...
{run.place}{run.run.times.realtime_noloads_t?TimeDisplay(run.run.times.realtime_noloads_t):""}{TimeDisplay(run.run.times.realtime_t)}{}{}{run.run.date}{run.run.videos?.links[0].uri&&}
} export default function Home(p) { var {CATEGORIES,VARIABLES}= p const [selectedTab,setSelectedTab] = useState("") const [selectionValues,setSelectionValues] = useState({}) const [appendStr,setAppendStr] = useState("") const {data} = getLeaderboard(selectedTab,appendStr) useEffect(()=>{ var arr = {...p.selectionValues} CATEGORIES.forEach((cat,i)=>{ if (i==0) { setSelectedTab(cat.id) } arr[cat.id]={} VARIABLES.filter((v)=>(v.category===cat.id||v.category===null)&&v["is-subcategory"]).forEach((v,i)=>{ arr[cat.id][i]=(v.id+","+Object.keys(v.values.values)[0]) }) }) setSelectionValues(arr) },[]) useEffect(()=>{ var appendStr = "" //console.log(selectionValues[selectedTab]) for (var val in selectionValues[selectedTab]) { //console.log(selectionValues[selectedTab][val]) var split = selectionValues[selectedTab][val].split(",") if (appendStr.length===0) { appendStr="?" } else { appendStr+="&" } appendStr+="var-"+split[0]+"="+split[1] } setAppendStr(appendStr) },[selectedTab,selectionValues]) return {setSelectedTab(e)}}> {CATEGORIES.map((cat)=> {/*cat.rules*/} {VARIABLES.filter((v)=>(v.category===cat.id||v.category===null)&&v["is-subcategory"]).map((v,i)=>)} )} {} } export async function getStaticProps() { var CATEGORIES = {} var RUN_DATA = {} var VARIABLES = {} await axios.get("https://www.speedrun.com/api/v1/games/"+RABI_RIBI_GAME_ID+"/categories").then((data)=>{ CATEGORIES = data.data.data }) await axios.get("https://www.speedrun.com/api/v1/games/"+RABI_RIBI_GAME_ID+"/variables").then((data)=>{ VARIABLES = data.data.data }) return { props: { RUN_DATA, CATEGORIES, VARIABLES }, // Next.js will attempt to re-generate the page: // - When a request comes in // - At most once every 10 seconds revalidate: 10, // In seconds } }