1- import React , { useState , useEffect , useContext , useMemo , useCallback } from "react" ;
1+ import React , { useState , useEffect , useContext , useMemo } from "react" ;
22import { useTranslation } from "react-i18next" ;
33import { useParams , Link } from "react-router-dom" ;
4- import { gameinfo , GameFactory } from "@abstractplay/gameslib" ;
4+ import { gameinfo } from "@abstractplay/gameslib" ;
55import { Auth } from "aws-amplify" ;
66import { API_ENDPOINT_OPEN } from "../config" ;
77import {
@@ -20,6 +20,7 @@ import ActivityMarker from "./ActivityMarker";
2020import NewChallengeModal from "./NewChallengeModal" ;
2121import { useStorageState } from "react-use-storage-state" ;
2222import { Helmet } from "react-helmet-async" ;
23+ import { useExpandVariants } from "../hooks/useExpandVariants" ;
2324
2425const allSize = Number . MAX_SAFE_INTEGER ;
2526
@@ -38,6 +39,7 @@ function StandingChallenges(props) {
3839 const [ sorting , setSorting ] = useState ( [ ] ) ;
3940 const [ showAccepted , showAcceptedSetter ] = useState ( false ) ;
4041 const [ showModal , showModalSetter ] = useState ( false ) ;
42+ const { expandVariants } = useExpandVariants ( metaGame ) ;
4143
4244 async function reportError ( error ) {
4345 try {
@@ -229,64 +231,6 @@ function StandingChallenges(props) {
229231 console . log ( metaGame ) ;
230232 const showRespond = loggedin && challenges ;
231233
232- const [ variantMap , setVariantMap ] = useState ( new Map ( ) ) ;
233- const [ variantGroups , setVariantGroups ] = useState ( new Set ( ) ) ;
234- const [ varId2Group , setVarId2Group ] = useState ( new Map ( ) ) ;
235-
236- useEffect ( ( ) => {
237- const info = gameinfo . get ( metaGame ) ;
238- let gameEngine ;
239- if ( info . playercounts . length > 1 ) {
240- gameEngine = GameFactory ( info . uid , 2 ) ;
241- } else {
242- gameEngine = GameFactory ( info . uid ) ;
243- }
244- const all = gameEngine . allvariants ( ) ;
245- if ( all !== undefined ) {
246- setVariantMap ( new Map (
247- all . map ( ( rec ) => [ rec . uid , rec . name ] )
248- ) ) ;
249- setVariantGroups ( new Set (
250- all . map ( ( rec ) => rec . group ) . filter ( Boolean )
251- ) ) ;
252- setVarId2Group ( new Map (
253- all . map ( ( rec ) => [ rec . uid , rec . group ] )
254- ) ) ;
255- } else {
256- setVariantMap ( new Map ( ) ) ;
257- setVariantGroups ( new Set ( ) ) ;
258- setVarId2Group ( new Map ( ) ) ;
259- }
260- } , [ metaGame ] ) ;
261-
262-
263- const vars2string = useCallback ( ( vars ) => {
264- // if the string is empty, return all the group defaults
265- if ( vars . length === 0 ) {
266- return [ ...variantMap . entries ( ) ]
267- . filter ( ( [ k ] ) => k . startsWith ( "#" ) )
268- . map ( ( [ , v ] ) => v )
269- . filter ( Boolean ) ;
270- }
271- // otherwise add any missing defaults and just look up the rest
272- else {
273- const groups = new Set ( [ ...variantGroups ] ) ;
274- for ( const v of vars ) {
275- const g = varId2Group . get ( v ) ;
276- if ( g !== undefined ) {
277- groups . delete ( g ) ;
278- }
279- }
280- console . log ( `Some groups not defined: ${ [ ...groups ] } ` ) ;
281- // if any groups are not defined, add the defaults to vars
282- for ( const g of groups ) {
283- vars . push ( `#${ g } ` ) ;
284- }
285- console . log ( `About to return: ${ vars } ` ) ;
286- return vars . map ( ( v ) => variantMap . get ( v ) ) . filter ( Boolean ) ;
287- }
288- } , [ variantMap , variantGroups , varId2Group ] ) ;
289-
290234 const data = useMemo (
291235 ( ) =>
292236 challenges . map ( ( rec ) => {
@@ -311,11 +255,11 @@ function StandingChallenges(props) {
311255 players : rec . players . filter ( ( p ) => p . id !== rec . challenger ?. id ) ,
312256 rated : rec . rated ,
313257 seating : rec . seating ,
314- variants : vars2string ( rec . variants ) ,
258+ variants : expandVariants ( rec . variants ) ,
315259 comment : rec . comment ,
316260 } ;
317261 } ) ,
318- [ challenges , allUsers , vars2string ]
262+ [ challenges , allUsers , expandVariants ]
319263 ) ;
320264
321265 const columnHelper = createColumnHelper ( ) ;
0 commit comments