mirror of
https://github.com/FranP-code/ChatGPT.git
synced 2025-10-13 00:13:25 +00:00
feat: chatgpt prompts
This commit is contained in:
23
src/hooks/useChatModel.ts
vendored
Normal file
23
src/hooks/useChatModel.ts
vendored
Normal file
@@ -0,0 +1,23 @@
|
||||
import { useState } from 'react';
|
||||
import { clone } from 'lodash';
|
||||
|
||||
import { CHAT_MODEL_JSON, readJSON, writeJSON } from '@/utils';
|
||||
import useInit from '@/hooks/useInit';
|
||||
|
||||
export default function useChatModel() {
|
||||
const [modelJson, setModelJson] = useState<Record<string, any>>({});
|
||||
|
||||
useInit(async () => {
|
||||
const data = await readJSON(CHAT_MODEL_JSON, { name: 'ChatGPT Model', data: [] });
|
||||
setModelJson(data);
|
||||
});
|
||||
|
||||
const modelSet = async (data: Record<string, any>[]) => {
|
||||
const oData = clone(modelJson);
|
||||
oData.data = data;
|
||||
await writeJSON(CHAT_MODEL_JSON, oData);
|
||||
setModelJson(oData);
|
||||
}
|
||||
|
||||
return { modelJson, modelSet, modelData: modelJson?.data || [] }
|
||||
}
|
||||
44
src/hooks/useColumns.ts
vendored
Normal file
44
src/hooks/useColumns.ts
vendored
Normal file
@@ -0,0 +1,44 @@
|
||||
import { useState, useCallback } from 'react';
|
||||
|
||||
export default function useColumns(columns: any[] = []) {
|
||||
const [opType, setOpType] = useState('');
|
||||
const [opRecord, setRecord] = useState<Record<string|symbol, any> | null>(null);
|
||||
const [opTime, setNow] = useState<number | null>(null);
|
||||
const [opExtra, setExtra] = useState<any>(null);
|
||||
|
||||
const handleRecord = useCallback((row: Record<string, any> | null, type: string) => {
|
||||
setOpType(type);
|
||||
setRecord(row);
|
||||
setNow(Date.now());
|
||||
}, []);
|
||||
|
||||
const resetRecord = useCallback(() => {
|
||||
setRecord(null);
|
||||
setOpType('');
|
||||
setNow(Date.now());
|
||||
}, []);
|
||||
|
||||
const opNew = useCallback(() => handleRecord(null, 'new'), [handleRecord]);
|
||||
|
||||
const cols = columns.map((i: any) => {
|
||||
if (i.render) {
|
||||
const opRender = i.render;
|
||||
i.render = (text: string, row: Record<string, any>) => {
|
||||
return opRender(text, row, { setRecord: handleRecord, setExtra });
|
||||
};
|
||||
}
|
||||
return i;
|
||||
});
|
||||
|
||||
return {
|
||||
opTime,
|
||||
opType,
|
||||
opNew,
|
||||
columns: cols,
|
||||
opRecord,
|
||||
setRecord: handleRecord,
|
||||
resetRecord,
|
||||
setExtra,
|
||||
opExtra,
|
||||
};
|
||||
}
|
||||
35
src/hooks/useData.ts
vendored
Normal file
35
src/hooks/useData.ts
vendored
Normal file
@@ -0,0 +1,35 @@
|
||||
import { useState, useEffect } from 'react';
|
||||
import { v4 } from 'uuid';
|
||||
|
||||
const safeKey = Symbol('chat-id');
|
||||
|
||||
export default function useData(oData: any[]) {
|
||||
const [opData, setData] = useState<any[]>([]);
|
||||
|
||||
useEffect(() => {
|
||||
const nData = oData.map(i => ({ [safeKey]: v4(), ...i }));
|
||||
setData(nData);
|
||||
}, [oData])
|
||||
|
||||
const opAdd = (val: any) => {
|
||||
const v = [val, ...opData];
|
||||
setData(v);
|
||||
return v;
|
||||
};
|
||||
|
||||
const opRemove = (id: string) => {
|
||||
const nData = opData.filter(i => i[safeKey] !== id);
|
||||
setData(nData);
|
||||
return nData;
|
||||
};
|
||||
|
||||
const opReplace = (id: string, data: any) => {
|
||||
const nData = [...opData];
|
||||
const idx = opData.findIndex(v => v[safeKey] === id);
|
||||
nData[idx] = data;
|
||||
setData(nData);
|
||||
return nData;
|
||||
};
|
||||
|
||||
return { opSafeKey: safeKey, opReplace, opAdd, opRemove, opData };
|
||||
}
|
||||
12
src/hooks/useInit.ts
vendored
Normal file
12
src/hooks/useInit.ts
vendored
Normal file
@@ -0,0 +1,12 @@
|
||||
import { useRef, useEffect } from 'react';
|
||||
|
||||
// fix: Two interface requests will be made in development mode
|
||||
export default function useInit(callback: () => void) {
|
||||
const isInit = useRef(true);
|
||||
useEffect(() => {
|
||||
if (isInit.current) {
|
||||
callback();
|
||||
isInit.current = false;
|
||||
}
|
||||
}, [])
|
||||
}
|
||||
Reference in New Issue
Block a user