You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
69 lines
2.5 KiB
69 lines
2.5 KiB
import { useEffect, useRef, useState } from 'react'
|
|
import {Button} from "../comps/button";
|
|
import { useText } from "../utils/usetext.jsx";
|
|
import { useNavigate } from "react-router-dom";
|
|
|
|
export default function Keywords() {
|
|
|
|
const { getText, getKeywords, selectedKeyword, select } = useText();
|
|
const keywords = getKeywords();
|
|
const rowCount=3;
|
|
const colCount = Math.ceil(keywords.length / rowCount);
|
|
|
|
const refContainer=useRef();
|
|
const navigate=useNavigate();
|
|
|
|
|
|
useEffect(()=>{
|
|
const container=refContainer.current;
|
|
// scroll to center
|
|
container.scrollLeft=(container.scrollWidth-container.clientWidth)/2;
|
|
|
|
return () => {
|
|
|
|
};
|
|
|
|
}, [keywords]);
|
|
|
|
|
|
|
|
return (
|
|
<main className="!px-0 !justify-between">
|
|
<h1 className="text-[1.125rem]">{getText('title_keywords')}</h1>
|
|
|
|
<section className='w-full flex-1 flex items-center justify-center'>
|
|
|
|
<div ref={refContainer} className="w-full overflow-x-auto">
|
|
<div className='w-[264%] grid grid-cols-6 aspect-[1036/424] overflow-y-hidden'>
|
|
{keywords.map((keyword, index) => (
|
|
<div key={index} className="w-full h-full bg-no-repeat relative" >
|
|
<div className="absolute top-[-15%] w-[123%] h-[128%] bg-no-repeat bg-contain flex items-center justify-center"
|
|
style={{
|
|
left: `${15*Math.floor(index/colCount)}%`,
|
|
backgroundImage: `url(/topic${selectedKeyword.includes(keyword) ? '_select' : ''}.svg)`,
|
|
}}
|
|
onClick={()=>{
|
|
console.log('clicked keyword', keyword.title);
|
|
select(keyword);
|
|
}}>
|
|
<span className="break-word text-center w-[50%]">{keyword.title}</span>
|
|
</div>
|
|
</div>
|
|
))}
|
|
</div>
|
|
</div>
|
|
|
|
</section>
|
|
|
|
<div className="w-full px-[1.5rem]">
|
|
<Button onClick={()=>{
|
|
navigate('/explore');
|
|
}}
|
|
disabled={selectedKeyword.length<4}
|
|
>
|
|
{getText('button_explore')}
|
|
</Button>
|
|
</div>
|
|
</main>
|
|
);
|
|
} |