From b0f989dbacbdbdd091b0d220496d22f47c795576 Mon Sep 17 00:00:00 2001 From: syuilo Date: Wed, 6 Jun 2018 19:22:45 +0900 Subject: Deckにウィジェットを置けるように MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/api/endpoints/i/update_widget.ts | 79 +++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 src/server/api/endpoints/i/update_widget.ts (limited to 'src/server/api/endpoints/i/update_widget.ts') 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'); + } +}); -- cgit v1.2.3-freya