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.
152 lines
4.3 KiB
152 lines
4.3 KiB
import electron from "@/plugins/electron"
|
|
import { addTodo, removeTodo } from "@/store/action/todo"
|
|
import { Button, ButtonGroup, ControlGroup, FormGroup, HotkeysProvider, InputGroup } from "@blueprintjs/core"
|
|
import { Cell, Column, Table2 } from "@blueprintjs/table"
|
|
import cs from "classnames"
|
|
import _ from "lodash"
|
|
import React, { useEffect, useRef, useState } from "react"
|
|
import { connect } from "react-redux"
|
|
import Dialog from "./Dialog"
|
|
import style from "./index.module.scss"
|
|
import useLocation from "./useLocation"
|
|
|
|
export interface HomeProps {
|
|
add(text: string): void
|
|
|
|
todo: ITodo[]
|
|
|
|
remove(id: number): void
|
|
}
|
|
|
|
let keyGen = 0
|
|
|
|
function Home(props: HomeProps) {
|
|
const [isOpen, setIsOpen] = useState<boolean>(false)
|
|
const keyRef = useRef<HTMLInputElement>(null)
|
|
|
|
function delItem() {
|
|
let key = keyRef.current?.value
|
|
if (key) {
|
|
let index = _.findIndex(clockList, { key: +key })
|
|
if (index != -1) {
|
|
var list = [...clockList]
|
|
list.splice(index, 1)
|
|
setClockList(list)
|
|
keyRef.current!.value = ""
|
|
}
|
|
}
|
|
}
|
|
|
|
const { save, get } = useLocation()
|
|
const [clockList, setClockList] = useState<Record<string, any>[]>([])
|
|
const keyList = _.map(clockList, "key")
|
|
const titleList = _.map(clockList, "title")
|
|
const timeList = _.map(clockList, "time")
|
|
const descList = _.map(clockList, "desc")
|
|
|
|
function onConfrim(title: string, time: string, desc: string) {
|
|
if (title && time) {
|
|
const value = {
|
|
key: ++keyGen,
|
|
title: title,
|
|
time: time,
|
|
desc: desc,
|
|
}
|
|
setClockList([...clockList, value])
|
|
setIsOpen(false)
|
|
}
|
|
}
|
|
|
|
useEffect(() => {
|
|
;(async () => {
|
|
let list = await electron.ipcRenderer.invoke("@func:clock:getData")
|
|
if (list) {
|
|
setClockList(list)
|
|
const keyList = _.map(list, "key")
|
|
if (keyList.length) {
|
|
keyGen = Math.max(...keyList)
|
|
}
|
|
}
|
|
})()
|
|
}, [])
|
|
useEffect(() => {
|
|
electron.ipcRenderer.send("@func:clock:saveData", clockList)
|
|
}, [clockList])
|
|
|
|
return (
|
|
<div className={cs(style.container, "container")}>
|
|
<div className={style.title}>闹钟列表</div>
|
|
<div className={style.opeation}>
|
|
<ButtonGroup>
|
|
<Button
|
|
icon="insert"
|
|
onClick={() => {
|
|
setIsOpen(true)
|
|
}}
|
|
>
|
|
添加闹钟
|
|
</Button>
|
|
<Button icon="refresh">同步闹钟</Button>
|
|
</ButtonGroup>
|
|
</div>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Month</th>
|
|
<th>Savings</th>
|
|
</tr>
|
|
</thead>
|
|
|
|
<tfoot>
|
|
<tr>
|
|
<td>Sum</td>
|
|
<td>$180</td>
|
|
</tr>
|
|
</tfoot>
|
|
|
|
<tbody>
|
|
<tr>
|
|
<td>January</td>
|
|
<td>$100</td>
|
|
</tr>
|
|
<tr>
|
|
<td>February</td>
|
|
<td>$80</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
{/* <HotkeysProvider>
|
|
<Table2 numRows={titleList.length}>
|
|
<Column name="KEY" cellRenderer={index => <Cell>{keyList[index]}</Cell>}></Column>
|
|
<Column name="标题" cellRenderer={index => <Cell>{titleList[index]}</Cell>}></Column>
|
|
<Column name="时间" cellRenderer={index => <Cell>{timeList[index]}</Cell>}></Column>
|
|
<Column name="描述" cellRenderer={index => <Cell>{descList[index]}</Cell>}></Column>
|
|
</Table2>
|
|
</HotkeysProvider> */}
|
|
<div style={{ margin: "10px 0" }}>
|
|
<FormGroup helperText="需要填入指定的闹钟进行删除" label="Key" labelFor="text-input" labelInfo="(required)">
|
|
<ControlGroup fill={false} vertical={false}>
|
|
<InputGroup inputRef={keyRef} id="text-input" placeholder="请输入Key值进行删除" />
|
|
<Button onClick={() => delItem()} icon="trash" intent="danger" type="submit">
|
|
删除
|
|
</Button>
|
|
</ControlGroup>
|
|
</FormGroup>
|
|
</div>
|
|
<Dialog isOpen={isOpen} setIsOpen={setIsOpen} onConfrim={onConfrim}></Dialog>
|
|
</div>
|
|
)
|
|
}
|
|
|
|
const mapStateToProps = (state: any) => {
|
|
return {
|
|
todo: state.todo,
|
|
}
|
|
}
|
|
|
|
const mapDispatchToProps = (dispatch: any) => ({
|
|
add: (text: string) => dispatch(addTodo(text)),
|
|
remove: (id: string | number) => dispatch(removeTodo(id)),
|
|
})
|
|
|
|
export default connect(mapStateToProps, mapDispatchToProps)(Home)
|
|
|