107 lines
3.2 KiB
TypeScript
Raw Normal View History

2023-08-17 19:05:27 +08:00
import { keys } from 'idb-keyval'
import '../css/list.css'
import { createSignal } from 'solid-js'
type dataList = {
id: string
}
interface Props {
instanceData: Omit<dataList, 'messages'> & {
current?: boolean,
Topping:boolean
},
key: any,
setList:Function,
infoList:any
}
export default ({ instanceData, key,setList,infoList }: Props) => {
//设置数据
const instanceItem=instanceData
let instance = instanceItem||{id:'',name:''}
const isTouchDevice = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0
const handleClick = () => {
// console.log(dataList)
}
//获取置顶数据
const getToppingItem=(arr:any)=>{
let toppingArr: {id:string,Topping:boolean}[]=[]
arr.map((res: { Topping: boolean; id: string },i:number)=>{
if(res.Topping){
toppingArr.push(arr.splice(i,1)[0] as {Topping: boolean; id: string})
}
})
return toppingArr
}
//删除记录
const handleDelete = (e: MouseEvent, key:string) => {
let arr=JSON.parse(JSON.stringify(infoList))
arr.splice(key,1)
setList('data',(list: null[])=> [...arr])
e.stopPropagation()
}
//置顶排序
const setDataTop=(e:MouseEvent,key:string)=>{
let arr=JSON.parse(JSON.stringify(infoList))
let item = arr[key]
item.Topping=!item.Topping
let toppindItem=getToppingItem(arr)
setList('data',(list: null[])=> [...toppindItem,...arr])
e.stopPropagation()
}
//新建对话框
const newlyAdded=()=>{
window.open(`${location.protocol}//${location.host}` )
}
return (
<div
class={[
'group fi h-10 my-0.5 px-2 gap-2 hv-base rounded-md'
].join(' ')}
onClick={handleClick}
>
<div class="fcc w-8 h-8 rounded-full text-xl shrink-0">
<div class="text-base i-carbon-chat" />
</div>
<div class="flex-1 truncate text-sm">{instance.id as any}-{key}-{instance.Topping.toString()}</div>
<div class={[isTouchDevice||instance.Topping.toString()=='true' ? '' : 'hidden group-hover:block'].join('')}>
<div
class="inline-flex p-2 items-center gap-1 rounded-md hv-base"
onClick={()=>newlyAdded()}
>
<div class='add-new-icon'></div>
</div>
</div>
<div class={[isTouchDevice||instance.Topping.toString()=='true' ? '' : 'hidden group-hover:block'].join('')}>
<div
class="inline-flex p-2 items-center gap-1 rounded-md hv-base"
onClick={e => setDataTop(e,key())}
>
<div class='list-top-icon'></div>
</div>
</div>
<div class={isTouchDevice ? '' : 'hidden group-hover:block'}>
<div
class="inline-flex p-2 items-center gap-1 rounded-md hv-base"
onClick={e => handleDelete(e, key())}
>
<div class="i-carbon-close" />
</div>
</div>
</div>
)
}