diff --git a/back/services/cookie.ts b/back/services/cookie.ts index 7ff736c2..689e6abc 100644 --- a/back/services/cookie.ts +++ b/back/services/cookie.ts @@ -120,7 +120,7 @@ export default class CookieService { }); } - public async create(payload: string[]): Promise { + public async create(payload: string[]): Promise { const cookies = await this.cookies('', { postion: 1 }); let position = initCookiePosition; if (cookies && cookies.length > 0) { @@ -131,16 +131,47 @@ export default class CookieService { position = position / 2; return cookie; }); - this.cronDb.insert(tabs); + const docs = await this.insert(tabs); await this.set_cookies(); + return docs; } - public async update(payload: Cookie): Promise { + public async insert(payload: Cookie[]): Promise { + return new Promise((resolve) => { + this.cronDb.insert(payload, (err, docs) => { + if (err) { + this.logger.error(err); + } else { + resolve(docs); + } + }); + }); + } + + public async update(payload: Cookie): Promise { const { _id, ...other } = payload; const doc = await this.get(_id); const tab = new Cookie({ ...doc, ...other }); - this.cronDb.update({ _id }, tab, { returnUpdatedDocs: true }); + const newDoc = await this.updateDb(tab); await this.set_cookies(); + return newDoc; + } + + public async updateDb(payload: Cookie): Promise { + return new Promise((resolve) => { + this.cronDb.update( + { _id: payload._id }, + payload, + { returnUpdatedDocs: true }, + (err, docs) => { + if (err) { + this.logger.error(err); + } else { + resolve(docs as Cookie); + } + }, + ); + }); } public async remove(_id: string) { @@ -163,8 +194,8 @@ export default class CookieService { const cookies = await this.cookies(); if (toIndex === 0 || toIndex === cookies.length - 1) { targetPosition = isUpward - ? (cookies[0].position * 2 + 1) / 2 - : (cookies[toIndex].position * 2 - 1) / 2; + ? cookies[0].position * 2 + : cookies[toIndex].position / 2; } else { targetPosition = isUpward ? (cookies[toIndex].position + cookies[toIndex - 1].position) / 2 diff --git a/back/services/cron.ts b/back/services/cron.ts index b44ebbf0..4eb24a61 100644 --- a/back/services/cron.ts +++ b/back/services/cron.ts @@ -22,21 +22,52 @@ export default class CronService { return this.cronDb; } - public async create(payload: Crontab): Promise { + public async create(payload: Crontab): Promise { const tab = new Crontab(payload); tab.created = new Date().valueOf(); tab.saved = false; - this.cronDb.insert(tab); + const doc = await this.insert(tab); await this.set_crontab(); + return doc; } - public async update(payload: Crontab): Promise { + public async insert(payload: Crontab): Promise { + return new Promise((resolve) => { + this.cronDb.insert(payload, (err, docs) => { + if (err) { + this.logger.error(err); + } else { + resolve(docs); + } + }); + }); + } + + public async update(payload: Crontab): Promise { const { _id, ...other } = payload; const doc = await this.get(_id); const tab = new Crontab({ ...doc, ...other }); tab.saved = false; - this.cronDb.update({ _id }, tab, { returnUpdatedDocs: true }); + const newDoc = await this.update(tab); await this.set_crontab(); + return newDoc; + } + + public async updateDb(payload: Crontab): Promise { + return new Promise((resolve) => { + this.cronDb.update( + { _id: payload._id }, + payload, + { returnUpdatedDocs: true }, + (err, num, docs: any) => { + if (err) { + this.logger.error(err); + } else { + resolve(docs); + } + }, + ); + }); } public async status(_id: string, stopped: boolean) { diff --git a/src/pages/cookie/index.tsx b/src/pages/cookie/index.tsx index e5c10943..8ace424c 100644 --- a/src/pages/cookie/index.tsx +++ b/src/pages/cookie/index.tsx @@ -322,26 +322,24 @@ const Config = () => { }); }; - const handleCancel = (needUpdate?: boolean) => { + const handleCancel = (cookie: any) => { setIsModalVisible(false); - if (needUpdate) { - getCookieDetail(editedCookie); + if (cookie) { + handleCookies(cookie); } }; - const getCookieDetail = (cookie: any) => { - request - .get(`${config.apiPrefix}cookies/${cookie._id}`) - .then((data: any) => { - const index = value.findIndex((x) => x._id === cookie._id); - const result = [...value]; - result.splice(index, 1, { - ...cookie, - ...data.data, - }); - setValue(result); - }) - .finally(() => setLoading(false)); + const handleCookies = (cookie: any) => { + const index = value.findIndex((x) => x._id === cookie._id); + const result = [...value]; + if (index === -1) { + result.push(...cookie); + } else { + result.splice(index, 1, { + ...cookie, + }); + } + setValue(result); }; const components = { @@ -352,6 +350,9 @@ const Config = () => { const moveRow = useCallback( (dragIndex, hoverIndex) => { + if (dragIndex === hoverIndex) { + return; + } const dragRow = value[dragIndex]; const newData = [...value]; newData.splice(dragIndex, 1); diff --git a/src/pages/cookie/modal.tsx b/src/pages/cookie/modal.tsx index c2b469d2..aa21d609 100644 --- a/src/pages/cookie/modal.tsx +++ b/src/pages/cookie/modal.tsx @@ -43,7 +43,7 @@ const CookieModal = ({ message: data, }); } - handleCancel(true); + handleCancel(data); }; useEffect(() => { diff --git a/src/pages/crontab/index.tsx b/src/pages/crontab/index.tsx index 61bd1bf7..78f88f90 100644 --- a/src/pages/crontab/index.tsx +++ b/src/pages/crontab/index.tsx @@ -347,10 +347,10 @@ const Crontab = () => { } }; - const handleCancel = (needUpdate?: boolean) => { + const handleCancel = (cron?: any) => { setIsModalVisible(false); - if (needUpdate) { - getCronDetail(editedCron); + if (cron) { + handleCrons(cron); } }; @@ -358,6 +358,19 @@ const Crontab = () => { setSearchText(value); }; + const handleCrons = (cron: any) => { + const index = value.findIndex((x) => x._id === cron._id); + const result = [...value]; + if (index === -1) { + result.push(cron); + } else { + result.splice(index, 1, { + ...cron, + }); + } + setValue(result); + }; + const getCronDetail = (cron: any) => { request .get(`${config.apiPrefix}crons/${cron._id}`) diff --git a/src/pages/crontab/modal.tsx b/src/pages/crontab/modal.tsx index db1643dd..79a18cb0 100644 --- a/src/pages/crontab/modal.tsx +++ b/src/pages/crontab/modal.tsx @@ -33,7 +33,7 @@ const CronModal = ({ message: data, }); } - handleCancel(true); + handleCancel(data); }; useEffect(() => {