shadcn/ui Combobox command 组合筛选下拉. inputOtp 光标闪烁

<Popover open={open} onOpenChange={setOpen}>
          <PopoverTrigger asChild>
            <Button
              role="combobox"
              aria-expanded={open}
              className="w-full justify-between h-11 bg-background rounded-lg search-supplier-popover"
            >
              <span className="flex items-center text-gray  text-sm">
                <Image
                  src="/images/supplier.svg"
                  alt="supplier"
                  decoding="async"
                  loading="lazy"
                  width={24}
                  height={24}
                  className="w-6 h-6 mr-2"
                ></Image>
                {searchVal ? <span className='text-white'>{searchVal}</span> : <span className='text-gray'>{t("SUPPLIER_TEXT_TIP")}</span>}
              </span>
              {open ? <BiSolidUpArrow className='text-gray w-3 h-3' /> : <BiSolidDownArrow className='text-gray w-3 h-3' />}
            </Button>
          </PopoverTrigger>
          <PopoverContent asChild className="py-0 px-2" style={{ width: pxToRem(contentWidth) }}>
            <Command className='pt-2'>
              <CommandInput
                placeholder={t("SUPPLIER_INPUT_TEXT_TIP")}
                ref={inputItemRef}
                value={inputVal}
                onValueChange={(val: string) => onValueChange(val)}
                className="h-9 text-white "
                endIconNode={inputVal ? <Image src={'/images/inputClear.svg'} width={20} height={20} alt='clear' /> : <></>}
                endIconClick={() => endIconClick()}
              />
              <CommandList className="px-2 pt-2">
                <CommandGroup className="" heading=''>
                  {filterList?.length === 0 && <CommandEmpty>{t('SUPPLIER_TEXT_TIP_NO_DATA')}.</CommandEmpty>}
                  {!inputVal && popularList?.length > 0 && (
                    <>
                      <SearchTitle title={t('SUPPLIER_LINE_TITLE_TIP')} />
                      {popularList && popularList.map((item: any) => <SearchItem key={item.id} item={item}></SearchItem>)}
                    </>
                  )}
                </CommandGroup>
                {!inputVal && searchSupplierList?.length > 0 && <SearchTitle title={t('SUPPLIER_LINE_TITLE_TIP_ALL')} />}
                <CommandGroup className="" heading=''>
                  {
                    filterList?.map((item: any) => <SearchItem key={item.id} item={item}></SearchItem>)
                  }
                </CommandGroup>
              </CommandList>
            </Command>
          </PopoverContent>
        </Popover >

  

  const SearchItem = ({ item }: any) => {
    return (
      <CommandItem
        value={item.name}
        onSelect={currentValue => onselect(currentValue)}
        className="space-y-0.5 px-0 h-8"
      >
        <div className="flex justify-between items-center flex-1">
          <span className="text-[#99A4B0]">{item.name}</span>
          <span className="text-xs text-[#FFD205]">{item.gamesNumber}</span>
        </div>
      </CommandItem>
    )
  }

  切记name搜索的时候value写name,否则会默认搜索,打空格之后匹配不到结果

inputOtp 光标闪烁效果
https://github.com/guilhermerodz/input-otp

posted @ 2024-09-02 20:30  红苹果学园  阅读(10)  评论(0编辑  收藏  举报