From d99f6fa4931c2894ae4e3e3a190fbbf803c08545 Mon Sep 17 00:00:00 2001 From: Hans-Peter Herzog Date: Fri, 6 Jul 2018 13:45:56 +0200 Subject: [PATCH] TT#39948 Reminder: Refactor api methods, component, mutations and actions Change-Id: Ic9308c71bfc45bc34d8e4d910fc655453a664a04 --- src/api/reminder.js | 144 +++++++++++++----- src/components/pages/Reminder.vue | 237 ++++++++++++++++++------------ src/locales/en.json | 9 +- src/store/reminder.js | 168 ++++++++++++--------- t/api/reminder.js | 157 -------------------- t/store/reminder.js | 54 ------- 6 files changed, 352 insertions(+), 417 deletions(-) delete mode 100644 t/api/reminder.js delete mode 100644 t/store/reminder.js diff --git a/src/api/reminder.js b/src/api/reminder.js index 6245e2ad..40ecb1a8 100644 --- a/src/api/reminder.js +++ b/src/api/reminder.js @@ -1,68 +1,134 @@ -import Vue from 'vue'; -export function createReminder(id) { +import _ from 'lodash' +import Vue from 'vue' +import { + getList, + patchReplace +} from './common' + +export function createReminder(subscriberId) { return new Promise((resolve, reject) => { - var data = { - subscriber_id: id, + Vue.http.post('api/reminders/', { + subscriber_id: subscriberId, time: '00:00', recur: 'never', active: false - }; - Vue.http.post('api/reminders/', data).then((result) => { - var reminderID = result.headers.get('Location').split('/')[3]; - resolve(reminderID); + }).then((result) => { + let parts = result.headers.get('Location').split('/'); + resolve(_.last(parts)); }).catch((err) => { reject(err); }); }); } -export function getReminder(id) { +export function getFirstReminder(subscriberId) { return new Promise((resolve, reject) => { - Vue.http.get('api/reminders/', { + getList({ + path: 'api/reminders/', + root: '_embedded.ngcp:reminders', params: { - supplier_id: id + page: 1, + rows: 1, + subscriber_id: subscriberId } - }).then((result) => { - resolve(JSON.parse(result.body)); - }).catch((err) => { + }).then((reminders)=>{ + resolve(_.get(reminders, 'items.0', null)); + }).catch((err)=>{ reject(err); }); }); } -export function enableReminder(id) { - return patchReminder(id, '/active', true); +export function getReminder(subscriberId) { + return new Promise((resolve, reject)=>{ + Promise.resolve().then(()=>{ + return getFirstReminder(subscriberId); + }).then((reminder)=>{ + if(reminder === null) { + return createAndGetReminder(subscriberId); + } + else { + return Promise.resolve(reminder); + } + }).then((reminder)=>{ + resolve(reminder); + }).catch((err)=>{ + reject(err); + }); + }); } -export function disableReminder(id) { - return patchReminder(id, '/active', false); +export function createAndGetReminder(subscriberId) { + return new Promise((resolve, reject)=>{ + Promise.resolve().then(()=>{ + return createReminder(subscriberId); + }).then(()=>{ + return getFirstReminder(subscriberId); + }).then((reminder)=>{ + resolve(reminder); + }).catch((err)=>{ + reject(err); + }); + }); } -export function setTime(id, time) { - return patchReminder(id, '/time', time); +export function setReminderActive(reminderId, active) { + return patchReplace({ + path: 'api/reminders/' + reminderId, + fieldPath: 'active', + value: active + }); } -export function setRecurrence(id, recurrence) { - return patchReminder(id, '/recur', recurrence); +export function setReminderTime(reminderId, time) { + return patchReplace({ + path: 'api/reminders/' + reminderId, + fieldPath: 'time', + value: time + }); } -function patchReminder(id, field, value) { - return new Promise((resolve, reject) => { - var data = [{ - "op": "replace", - "path": field, - "value": value - }]; - var patchHeaders = { - headers: { - 'Content-Type': 'application/json-patch+json' - } - }; - Vue.http.patch('api/reminders/' + id, data, patchHeaders).then(() => { - resolve(); - }).catch((err) => { - reject(err); - }); +export function setReminderRecurrence(reminderId, reccurence) { + return patchReplace({ + path: 'api/reminders/' + reminderId, + fieldPath: 'recur', + value: reccurence }); } + +// export function enableReminder(id) { +// return patchReminder(id, '/active', true); +// } +// +// export function disableReminder(id) { +// return patchReminder(id, '/active', false); +// } +// +// export function setTime(id, time) { +// return patchReminder(id, '/time', time); +// } +// +// export function setRecurrence(id, recurrence) { +// return patchReminder(id, '/recur', recurrence); +// } +// +// function patchReminder(id, field, value) { +// return new Promise((resolve, reject) => { +// var data = [{ +// "op": "replace", +// "path": field, +// "value": value +// }]; +// var patchHeaders = { +// headers: { +// 'Content-Type': 'application/json-patch+json' +// } +// }; +// Vue.http.patch('api/reminders/' + id, data, patchHeaders).then(() => { +// resolve(); +// }).catch((err) => { +// reject(err); +// }); +// }); +// } diff --git a/src/components/pages/Reminder.vue b/src/components/pages/Reminder.vue index 45b4d1c4..cf9206da 100644 --- a/src/components/pages/Reminder.vue +++ b/src/components/pages/Reminder.vue @@ -1,117 +1,166 @@