Skip to content

vortesnail/qier-text-cursor-popup

Repository files navigation

Devlopment

npm install qier-text-cursor-popup
npm run dev

Usage

import React, { useRef, useEffect, useState } from 'react';
import ReactDOM from 'react-dom';
import QierTextCursorPopup, { getCursorPosition, insertStr } from 'qier-text-cursor-pop';
import './App.less';

const usersLists = [
  {
    id: '1',
    avatar: 'http://img2.imgtn.bdimg.com/it/u=23084897,262291329&fm=11&gp=0.jpg',
    name: 'vortesnail',
  },
  {
    id: '2',
    avatar: 'http://img4.imgtn.bdimg.com/it/u=2436369410,2358044874&fm=11&gp=0.jpg',
    name: '那你的哟',
  },
  {
    id: 3,
    avatar: 'http://img2.imgtn.bdimg.com/it/u=23084897,262291329&fm=11&gp=0.jpg',
    name: '我是一个小猫猫',
  },
  {
    id: 4,
    avatar: 'http://img4.imgtn.bdimg.com/it/u=2436369410,2358044874&fm=11&gp=0.jpg',
    name: '我好痒哦哦哦',
  },
  {
    id: 5,
    avatar: 'http://img2.imgtn.bdimg.com/it/u=23084897,262291329&fm=11&gp=0.jpg',
    name: '叮叮当当的笑爷爷',
  },
  {
    id: 6,
    avatar: 'http://img4.imgtn.bdimg.com/it/u=2436369410,2358044874&fm=11&gp=0.jpg',
    name: '自行车界离开家阿里事情',
  },
  {
    id: 7,
    avatar: 'http://img2.imgtn.bdimg.com/it/u=23084897,262291329&fm=11&gp=0.jpg',
    name: '互不干扰的生活',
  },
  {
    id: 8,
    avatar: 'http://img4.imgtn.bdimg.com/it/u=2436369410,2358044874&fm=11&gp=0.jpg',
    name: '是吧',
  },
];

const App = () => {
  const [usersList, setUsersList] = useState<IUser[]>([]);
  const [value, setValue] = useState<any>('');
  const [cursorPos, setCursorPos] = useState<number>(0);

  const onSelectUser = (selectedUser: IUser) => {
    setValue((tempValue: string) => {
      let resultStr = '';
      if (selectedUser.name) {
        resultStr = insertStr(tempValue, cursorPos, selectedUser.name);
      } else {
        resultStr = tempValue;
      }
      return resultStr;
    });
    setUsersList([]);
  };

  const onInputChange = (e: any) => {
    const curPos = getCursorPosition(e.target);
    if (e.target.value[curPos - 1] === '@') {
      setUsersList(usersLists);
    } else {
      setUsersList([]);
    }
    setCursorPos(curPos);
    setValue(e.target.value);
  };

  return (
    <div className='App'>
      <QierTextCursorPopup usersList={usersList} onSelectUser={onSelectUser}>
        <div className='test'>
          {' '}
          <textarea id='textareaId' value={value} onChange={onInputChange} />
          {/* <input type='text' name='app-input' id='textareaId' value={value} onChange={onInputChange} /> */}
        </div>
      </QierTextCursorPopup>
    </div>
  );
};

ReactDOM.render(<App />, document.querySelector('#example'));