chore: export

This commit is contained in:
lencx
2023-01-14 23:31:12 +08:00
parent a2fcfa3b89
commit ae2c56805c
15 changed files with 264 additions and 69 deletions

View File

@@ -1,4 +1,7 @@
import { useState, useCallback } from 'react';
import { FC, useState, useCallback } from 'react';
import { Input } from 'antd';
import { DISABLE_AUTO_COMPLETE } from '@/utils';
export default function useColumns(columns: any[] = []) {
const [opType, setOpType] = useState('');
@@ -41,4 +44,40 @@ export default function useColumns(columns: any[] = []) {
setExtra,
opExtra,
};
}
}
interface EditRowProps {
rowKey: string;
row: Record<string, any>;
actions: any;
}
export const EditRow: FC<EditRowProps> = ({ rowKey, row, actions }) => {
const [isEdit, setEdit] = useState(false);
const [val, setVal] = useState(row[rowKey]);
const handleEdit = () => {
setEdit(true);
};
const handleChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {
setVal(e.target.value)
};
const handleSave = () => {
setEdit(false);
row[rowKey] = val;
actions?.setRecord(row, 'rowedit')
};
return isEdit
? (
<Input.TextArea
value={val}
rows={1}
onChange={handleChange}
{...DISABLE_AUTO_COMPLETE}
onPressEnter={handleSave}
/>
)
: (
<div className='rowedit' onClick={handleEdit}>{val}</div>
);
};

View File

@@ -1,6 +1,6 @@
import { useState } from 'react';
import { readJSON } from '@/utils';
import { readJSON, writeJSON } from '@/utils';
import useInit from '@/hooks/useInit';
export default function useJson<T>(file: string) {
@@ -11,7 +11,12 @@ export default function useJson<T>(file: string) {
setData(data);
};
const updateJson = async (data: any) => {
await writeJSON(file, data);
await refreshJson();
};
useInit(refreshJson);
return { json, refreshJson };
return { json, refreshJson, updateJson };
}

View File

@@ -4,14 +4,35 @@ import type { TableRowSelection } from 'antd/es/table/interface';
import { safeKey } from '@/hooks/useData';
export default function useTableRowSelection() {
type rowSelectionOptions = {
key: 'id' | string;
rowType: 'id' | 'row' | 'all';
}
export function useTableRowSelection(options: Partial<rowSelectionOptions> = {}) {
const { key = 'id', rowType = 'id' } = options;
const [selectedRowKeys, setSelectedRowKeys] = useState<React.Key[]>([]);
const [selectedRowIDs, setSelectedRowIDs] = useState<string[]>([]);
const [selectedRows, setSelectedRows] = useState<Record<string|symbol, any>[]>([]);
const onSelectChange = (newSelectedRowKeys: React.Key[], selectedRows: Record<string|symbol, any>) => {
const keys = selectedRows.map((i: any) => i[safeKey]);
setSelectedRowIDs(keys);
const onSelectChange = (newSelectedRowKeys: React.Key[], newSelectedRows: Record<string|symbol, any>[]) => {
const keys = newSelectedRows.map((i: any) => i[safeKey] || i[key]);
setSelectedRowKeys(newSelectedRowKeys);
if (rowType === 'id') {
setSelectedRowIDs(keys);
}
if (rowType === 'row') {
setSelectedRows(newSelectedRows);
}
if (rowType === 'all') {
setSelectedRowIDs(keys);
setSelectedRows(newSelectedRows);
}
};
const rowReset = () => {
setSelectedRowKeys([]);
setSelectedRowIDs([]);
setSelectedRows([]);
};
const rowSelection: TableRowSelection<Record<string, any>> = {
@@ -24,14 +45,14 @@ export default function useTableRowSelection() {
],
};
return { rowSelection, selectedRowIDs };
return { rowSelection, selectedRowIDs, selectedRows, rowReset };
}
export const TABLE_PAGINATION = {
hideOnSinglePage: true,
showSizeChanger: true,
showQuickJumper: true,
defaultPageSize: 5,
defaultPageSize: 10,
pageSizeOptions: [5, 10, 15, 20],
showTotal: (total: number) => <span>Total {total} items</span>,
};