refactor: change the selected background color of the item (#421)

This commit is contained in:
ayangweb
2025-04-23 17:54:41 +08:00
committed by GitHub
parent 2caeb4090a
commit 9715a92f36
4 changed files with 23 additions and 34 deletions

View File

@@ -18,14 +18,7 @@ const Calculator: FC<CalculatorProps> = (props) => {
const renderItem = (result: string, description: string) => { const renderItem = (result: string, description: string) => {
return ( return (
<div <div className="flex-1 flex flex-col gap-1 items-center justify-center h-[90px] overflow-hidden rounded-[4px] border border-transparent transition bg-[#F8F8F8] dark:bg-[#141414]">
className={clsx(
"flex-1 flex flex-col gap-1 items-center justify-center h-[90px] overflow-hidden rounded-md border border-transparent transition bg-[#ededed] dark:bg-[#202126]",
{
"!border-[#881C94]": isSelected,
}
)}
>
<div className="w-[90%] text-xl text-[#333] dark:text-[#d8d8d8] truncate text-center"> <div className="w-[90%] text-xl text-[#333] dark:text-[#d8d8d8] truncate text-center">
{result} {result}
</div> </div>
@@ -38,7 +31,12 @@ const Calculator: FC<CalculatorProps> = (props) => {
return ( return (
<div <div
className="flex items-center gap-1 w-full children:flex" className={clsx(
"flex items-center gap-1 p-2 w-full rounded-lg transition",
{
"bg-[#EDEDED] dark:bg-[#202126]": isSelected,
}
)}
onDoubleClick={() => { onDoubleClick={() => {
copyToClipboard(result.value); copyToClipboard(result.value);
}} }}

View File

@@ -1,7 +1,6 @@
import { useEffect, useRef, useState, useCallback, MouseEvent } from "react"; import { useEffect, useRef, useState, useCallback, MouseEvent } from "react";
import { CircleAlert, Bolt, X, ArrowBigRight } from "lucide-react"; import { CircleAlert, Bolt, X, ArrowBigRight } from "lucide-react";
import { isNil } from "lodash-es"; import { isNil } from "lodash-es";
import clsx from "clsx";
import { useDebounceFn, useUnmount } from "ahooks"; import { useDebounceFn, useUnmount } from "ahooks";
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
@@ -33,7 +32,7 @@ function DropdownList({
isChatMode, isChatMode,
}: DropdownListProps) { }: DropdownListProps) {
const { t } = useTranslation(); const { t } = useTranslation();
let globalIndex = 0; let globalIndex = 0;
const globalItemIndexMap: any[] = []; const globalItemIndexMap: any[] = [];
@@ -46,7 +45,9 @@ function DropdownList({
const containerRef = useRef<HTMLDivElement>(null); const containerRef = useRef<HTMLDivElement>(null);
const itemRefs = useRef<(HTMLDivElement | null)[]>([]); const itemRefs = useRef<(HTMLDivElement | null)[]>([]);
const setSelectedSearchContent = useSearchStore((state) => state.setSelectedSearchContent); const setSelectedSearchContent = useSearchStore(
(state) => state.setSelectedSearchContent
);
const hideArrowRight = (item: any) => { const hideArrowRight = (item: any) => {
const categories = ["Calculator"]; const categories = ["Calculator"];
@@ -242,28 +243,21 @@ function DropdownList({
</div> </div>
)} )}
{items.map((hit: any, index: number) => { {items.map((hit: any) => {
const isSelected = selectedItem === globalIndex; const isSelected = selectedItem === globalIndex;
const currentIndex = globalIndex; const currentIndex = globalIndex;
const item = hit.document; const item = hit.document;
globalItemIndexMap.push(item); globalItemIndexMap.push(item);
globalIndex++; globalIndex++;
// TODOhttps://lanhuapp.com/web/#/item/project/detailDetach?pid=fed58f5b-a117-4fe4-a521-c71f2e9b88c3&project_id=fed58f5b-a117-4fe4-a521-c71f2e9b88c3&image_id=a0afd01b-da7d-47c8-818b-90496fb28a71&fromEditor=true
return ( return (
<div key={item.id + index} onContextMenu={handleContextMenu}> <div key={item.id} onContextMenu={handleContextMenu}>
{hideArrowRight(item) ? ( {hideArrowRight(item) ? (
<div <div
ref={(el) => (itemRefs.current[currentIndex] = el)}
onMouseEnter={() => setSelectedItem(currentIndex)} onMouseEnter={() => setSelectedItem(currentIndex)}
className={clsx({
"mt-1": !showHeader,
})}
> >
<Calculator item={item} isSelected={isSelected} /> <Calculator item={item} isSelected={isSelected} />
{!showHeader && (
<div className="h-px mt-3 mx-2 bg-[#E6E6E6] dark:bg-[#262626]" />
)}
</div> </div>
) : ( ) : (
<SearchListItem <SearchListItem

View File

@@ -118,7 +118,7 @@ export default function ListRight({
> >
<RichCategories <RichCategories
item={item} item={item}
isSelected={isSelected} isSelected={false}
goToTwoPage={goToTwoPage} goToTwoPage={goToTwoPage}
/> />
@@ -128,9 +128,6 @@ export default function ListRight({
rootClassName={clsx("!absolute", [ rootClassName={clsx("!absolute", [
showIndex && currentIndex < 10 ? "right-9" : "right-2", showIndex && currentIndex < 10 ? "right-9" : "right-2",
])} ])}
shortcutClassName={clsx({
"!shadow-[-6px_0px_6px_2px_#950599]": isSelected,
})}
/> />
)} )}
@@ -138,9 +135,6 @@ export default function ListRight({
<VisibleKey <VisibleKey
shortcut={String(currentIndex === 9 ? 0 : currentIndex + 1)} shortcut={String(currentIndex === 9 ? 0 : currentIndex + 1)}
rootClassName="!absolute right-2" rootClassName="!absolute right-2"
shortcutClassName={clsx({
"!shadow-[-6px_0px_6px_2px_#950599]": isSelected,
})}
/> />
)} )}
</div> </div>

View File

@@ -1,4 +1,5 @@
import React from "react"; import React from "react";
import clsx from "clsx";
import ItemIcon from "@/components/Common/Icons/ItemIcon"; import ItemIcon from "@/components/Common/Icons/ItemIcon";
import ListRight from "./ListRight"; import ListRight from "./ListRight";
@@ -38,11 +39,13 @@ const SearchListItem: React.FC<SearchListItemProps> = React.memo(
ref={itemRef} ref={itemRef}
onMouseEnter={onMouseEnter} onMouseEnter={onMouseEnter}
onClick={onItemClick} onClick={onItemClick}
className={`w-full px-2 py-2.5 text-sm flex mb-0 flex-row items-center mobile:mb-2 mobile:flex-col mobile:items-start justify-between rounded-lg transition-colors cursor-pointer ${ className={clsx(
isSelected "w-full px-2 py-2.5 text-sm flex mb-0 flex-row items-center mobile:mb-2 mobile:flex-col mobile:items-start justify-between rounded-lg transition-colors cursor-pointer text-[#333] dark:text-[#d8d8d8] mobile:bg-gray-200/80 mobile:dark:bg-gray-700/50",
? "text-white bg-[var(--coco-primary-color)] hover:bg-[var(--coco-primary-color)]" {
: "text-[#333] dark:text-[#d8d8d8] mobile:bg-gray-200/80 mobile:dark:bg-gray-700/50" "bg-[#EDEDED] dark:bg-[#202126]": isSelected,
} ${showListRight ? "gap-7 mobile:gap-1" : ""}`} "gap-7 mobile:gap-1": showListRight,
}
)}
> >
<div <div
className={`${ className={`${