diff options
| author | syuilo <syuilotan@yahoo.co.jp> | 2018-06-06 19:22:45 +0900 |
|---|---|---|
| committer | syuilo <syuilotan@yahoo.co.jp> | 2018-06-06 19:22:45 +0900 |
| commit | b0f989dbacbdbdd091b0d220496d22f47c795576 (patch) | |
| tree | c4af330d8eb11c1d0d5dc0a991409060e9287c6b /src/server/api/endpoints/i/update_widget.ts | |
| parent | Update README.md (diff) | |
| download | sharkey-b0f989dbacbdbdd091b0d220496d22f47c795576.tar.gz sharkey-b0f989dbacbdbdd091b0d220496d22f47c795576.tar.bz2 sharkey-b0f989dbacbdbdd091b0d220496d22f47c795576.zip | |
Deckにウィジェットを置けるように
Diffstat (limited to 'src/server/api/endpoints/i/update_widget.ts')
| -rw-r--r-- | src/server/api/endpoints/i/update_widget.ts | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/src/server/api/endpoints/i/update_widget.ts b/src/server/api/endpoints/i/update_widget.ts new file mode 100644 index 0000000000..b37761bde1 --- /dev/null +++ b/src/server/api/endpoints/i/update_widget.ts @@ -0,0 +1,79 @@ +import $ from 'cafy'; +import User from '../../../../models/user'; +import event from '../../../../publishers/stream'; + +module.exports = async (params, user) => new Promise(async (res, rej) => { + // Get 'id' parameter + const [id, idErr] = $.str.get(params.id); + if (idErr) return rej('invalid id param'); + + // Get 'data' parameter + const [data, dataErr] = $.obj.get(params.data); + if (dataErr) return rej('invalid data param'); + + if (id == null && data == null) return rej('you need to set id and data params if home param unset'); + + let widget; + + //#region Desktop home + if (widget == null && user.clientSettings.home) { + const desktopHome = user.clientSettings.home; + widget = desktopHome.find(w => w.id == id); + if (widget) { + widget.data = data; + + await User.update(user._id, { + $set: { + 'clientSettings.home': desktopHome + } + }); + } + } + //#endregion + + //#region Mobile home + if (widget == null && user.clientSettings.mobileHome) { + const mobileHome = user.clientSettings.mobileHome; + widget = mobileHome.find(w => w.id == id); + if (widget) { + widget.data = data; + + await User.update(user._id, { + $set: { + 'clientSettings.mobileHome': mobileHome + } + }); + } + } + //#endregion + + //#region Deck + if (widget == null && user.clientSettings.deck && user.clientSettings.deck.columns) { + const deck = user.clientSettings.deck; + deck.columns.filter(c => c.type == 'widgets').forEach(c => { + c.widgets.forEach(w => { + if (w.id == id) widget = w; + }); + }); + if (widget) { + widget.data = data; + + await User.update(user._id, { + $set: { + 'clientSettings.deck': deck + } + }); + } + } + //#endregion + + if (widget) { + event(user._id, 'widgetUpdated', { + id, data + }); + + res(); + } else { + rej('widget not found'); + } +}); |