UNPKG

matrix-react-sdk

Version:
76 lines (73 loc) 13.5 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.useNotificationSettings = useNotificationSettings; var _react = require("react"); var _reconcileNotificationSettings = require("../models/notificationsettings/reconcileNotificationSettings"); var _toNotificationSettings = require("../models/notificationsettings/toNotificationSettings"); /* Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only Please see LICENSE files in the repository root for full details. */ async function applyChanges(cli, changes) { await Promise.all(changes.deleted.map(change => cli.deletePushRule("global", change.kind, change.rule_id))); await Promise.all(changes.added.map(change => cli.addPushRule("global", change.kind, change.rule_id, change))); await Promise.all(changes.updated.map(async change => { if (change.enabled !== undefined) { await cli.setPushRuleEnabled("global", change.kind, change.rule_id, change.enabled); } if (change.actions !== undefined) { await cli.setPushRuleActions("global", change.kind, change.rule_id, change.actions); } })); } function useNotificationSettings(cli) { const run = useLinearisedPromise(); const supportsIntentionalMentions = (0, _react.useMemo)(() => cli.supportsIntentionalMentions(), [cli]); const pushRules = (0, _react.useRef)(null); const [model, setModel] = (0, _react.useState)(null); const [hasPendingChanges, setPendingChanges] = (0, _react.useState)(false); const updatePushRules = (0, _react.useCallback)(async () => { const rules = await cli.getPushRules(); const model = (0, _toNotificationSettings.toNotificationSettings)(rules, supportsIntentionalMentions); const pendingChanges = (0, _reconcileNotificationSettings.reconcileNotificationSettings)(rules, model, supportsIntentionalMentions); pushRules.current = rules; setPendingChanges(pendingChanges.updated.length > 0 || pendingChanges.added.length > 0 || pendingChanges.deleted.length > 0); setModel(model); }, [cli, supportsIntentionalMentions]); (0, _react.useEffect)(() => { run(updatePushRules).catch(err => console.error(err)); }, [cli, run, updatePushRules]); const reconcile = (0, _react.useCallback)(model => { setModel(model); run(async () => { if (pushRules.current !== null) { const changes = (0, _reconcileNotificationSettings.reconcileNotificationSettings)(pushRules.current, model, supportsIntentionalMentions); await applyChanges(cli, changes); await updatePushRules(); } }).catch(err => console.error(err)); }, [run, supportsIntentionalMentions, cli, updatePushRules]); return { model, hasPendingChanges, reconcile }; } function useLinearisedPromise() { const lastPromise = (0, _react.useRef)(null); return (0, _react.useCallback)(fun => { let next; if (lastPromise.current === null) { next = fun(); } else { next = lastPromise.current.then(fun); } lastPromise.current = next; return next; }, []); } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJyZXF1aXJlIiwiX3JlY29uY2lsZU5vdGlmaWNhdGlvblNldHRpbmdzIiwiX3RvTm90aWZpY2F0aW9uU2V0dGluZ3MiLCJhcHBseUNoYW5nZXMiLCJjbGkiLCJjaGFuZ2VzIiwiUHJvbWlzZSIsImFsbCIsImRlbGV0ZWQiLCJtYXAiLCJjaGFuZ2UiLCJkZWxldGVQdXNoUnVsZSIsImtpbmQiLCJydWxlX2lkIiwiYWRkZWQiLCJhZGRQdXNoUnVsZSIsInVwZGF0ZWQiLCJlbmFibGVkIiwidW5kZWZpbmVkIiwic2V0UHVzaFJ1bGVFbmFibGVkIiwiYWN0aW9ucyIsInNldFB1c2hSdWxlQWN0aW9ucyIsInVzZU5vdGlmaWNhdGlvblNldHRpbmdzIiwicnVuIiwidXNlTGluZWFyaXNlZFByb21pc2UiLCJzdXBwb3J0c0ludGVudGlvbmFsTWVudGlvbnMiLCJ1c2VNZW1vIiwicHVzaFJ1bGVzIiwidXNlUmVmIiwibW9kZWwiLCJzZXRNb2RlbCIsInVzZVN0YXRlIiwiaGFzUGVuZGluZ0NoYW5nZXMiLCJzZXRQZW5kaW5nQ2hhbmdlcyIsInVwZGF0ZVB1c2hSdWxlcyIsInVzZUNhbGxiYWNrIiwicnVsZXMiLCJnZXRQdXNoUnVsZXMiLCJ0b05vdGlmaWNhdGlvblNldHRpbmdzIiwicGVuZGluZ0NoYW5nZXMiLCJyZWNvbmNpbGVOb3RpZmljYXRpb25TZXR0aW5ncyIsImN1cnJlbnQiLCJsZW5ndGgiLCJ1c2VFZmZlY3QiLCJjYXRjaCIsImVyciIsImNvbnNvbGUiLCJlcnJvciIsInJlY29uY2lsZSIsImxhc3RQcm9taXNlIiwiZnVuIiwibmV4dCIsInRoZW4iXSwic291cmNlcyI6WyIuLi8uLi9zcmMvaG9va3MvdXNlTm90aWZpY2F0aW9uU2V0dGluZ3MudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgMjAyNCBOZXcgVmVjdG9yIEx0ZC5cbkNvcHlyaWdodCAyMDIzIFRoZSBNYXRyaXgub3JnIEZvdW5kYXRpb24gQy5JLkMuXG5cblNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMC1vbmx5IE9SIEdQTC0zLjAtb25seVxuUGxlYXNlIHNlZSBMSUNFTlNFIGZpbGVzIGluIHRoZSByZXBvc2l0b3J5IHJvb3QgZm9yIGZ1bGwgZGV0YWlscy5cbiovXG5cbmltcG9ydCB7IElQdXNoUnVsZXMsIE1hdHJpeENsaWVudCB9IGZyb20gXCJtYXRyaXgtanMtc2RrL3NyYy9tYXRyaXhcIjtcbmltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHsgTm90aWZpY2F0aW9uU2V0dGluZ3MgfSBmcm9tIFwiLi4vbW9kZWxzL25vdGlmaWNhdGlvbnNldHRpbmdzL05vdGlmaWNhdGlvblNldHRpbmdzXCI7XG5pbXBvcnQgeyBQdXNoUnVsZURpZmYgfSBmcm9tIFwiLi4vbW9kZWxzL25vdGlmaWNhdGlvbnNldHRpbmdzL1B1c2hSdWxlRGlmZlwiO1xuaW1wb3J0IHsgcmVjb25jaWxlTm90aWZpY2F0aW9uU2V0dGluZ3MgfSBmcm9tIFwiLi4vbW9kZWxzL25vdGlmaWNhdGlvbnNldHRpbmdzL3JlY29uY2lsZU5vdGlmaWNhdGlvblNldHRpbmdzXCI7XG5pbXBvcnQgeyB0b05vdGlmaWNhdGlvblNldHRpbmdzIH0gZnJvbSBcIi4uL21vZGVscy9ub3RpZmljYXRpb25zZXR0aW5ncy90b05vdGlmaWNhdGlvblNldHRpbmdzXCI7XG5cbmFzeW5jIGZ1bmN0aW9uIGFwcGx5Q2hhbmdlcyhjbGk6IE1hdHJpeENsaWVudCwgY2hhbmdlczogUHVzaFJ1bGVEaWZmKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoY2hhbmdlcy5kZWxldGVkLm1hcCgoY2hhbmdlKSA9PiBjbGkuZGVsZXRlUHVzaFJ1bGUoXCJnbG9iYWxcIiwgY2hhbmdlLmtpbmQsIGNoYW5nZS5ydWxlX2lkKSkpO1xuICAgIGF3YWl0IFByb21pc2UuYWxsKGNoYW5nZXMuYWRkZWQubWFwKChjaGFuZ2UpID0+IGNsaS5hZGRQdXNoUnVsZShcImdsb2JhbFwiLCBjaGFuZ2Uua2luZCwgY2hhbmdlLnJ1bGVfaWQsIGNoYW5nZSkpKTtcbiAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgY2hhbmdlcy51cGRhdGVkLm1hcChhc3luYyAoY2hhbmdlKSA9PiB7XG4gICAgICAgICAgICBpZiAoY2hhbmdlLmVuYWJsZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGF3YWl0IGNsaS5zZXRQdXNoUnVsZUVuYWJsZWQoXCJnbG9iYWxcIiwgY2hhbmdlLmtpbmQsIGNoYW5nZS5ydWxlX2lkLCBjaGFuZ2UuZW5hYmxlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY2hhbmdlLmFjdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGF3YWl0IGNsaS5zZXRQdXNoUnVsZUFjdGlvbnMoXCJnbG9iYWxcIiwgY2hhbmdlLmtpbmQsIGNoYW5nZS5ydWxlX2lkLCBjaGFuZ2UuYWN0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICk7XG59XG5cbnR5cGUgVXNlTm90aWZpY2F0aW9uU2V0dGluZ3MgPSB7XG4gICAgbW9kZWw6IE5vdGlmaWNhdGlvblNldHRpbmdzIHwgbnVsbDtcbiAgICBoYXNQZW5kaW5nQ2hhbmdlczogYm9vbGVhbjtcbiAgICByZWNvbmNpbGU6IChtb2RlbDogTm90aWZpY2F0aW9uU2V0dGluZ3MpID0+IHZvaWQ7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gdXNlTm90aWZpY2F0aW9uU2V0dGluZ3MoY2xpOiBNYXRyaXhDbGllbnQpOiBVc2VOb3RpZmljYXRpb25TZXR0aW5ncyB7XG4gICAgY29uc3QgcnVuID0gdXNlTGluZWFyaXNlZFByb21pc2U8dm9pZD4oKTtcbiAgICBjb25zdCBzdXBwb3J0c0ludGVudGlvbmFsTWVudGlvbnMgPSB1c2VNZW1vKCgpID0+IGNsaS5zdXBwb3J0c0ludGVudGlvbmFsTWVudGlvbnMoKSwgW2NsaV0pO1xuXG4gICAgY29uc3QgcHVzaFJ1bGVzID0gdXNlUmVmPElQdXNoUnVsZXMgfCBudWxsPihudWxsKTtcbiAgICBjb25zdCBbbW9kZWwsIHNldE1vZGVsXSA9IHVzZVN0YXRlPE5vdGlmaWNhdGlvblNldHRpbmdzIHwgbnVsbD4obnVsbCk7XG4gICAgY29uc3QgW2hhc1BlbmRpbmdDaGFuZ2VzLCBzZXRQZW5kaW5nQ2hhbmdlc10gPSB1c2VTdGF0ZTxib29sZWFuPihmYWxzZSk7XG4gICAgY29uc3QgdXBkYXRlUHVzaFJ1bGVzID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBydWxlcyA9IGF3YWl0IGNsaS5nZXRQdXNoUnVsZXMoKTtcbiAgICAgICAgY29uc3QgbW9kZWwgPSB0b05vdGlmaWNhdGlvblNldHRpbmdzKHJ1bGVzLCBzdXBwb3J0c0ludGVudGlvbmFsTWVudGlvbnMpO1xuICAgICAgICBjb25zdCBwZW5kaW5nQ2hhbmdlcyA9IHJlY29uY2lsZU5vdGlmaWNhdGlvblNldHRpbmdzKHJ1bGVzLCBtb2RlbCwgc3VwcG9ydHNJbnRlbnRpb25hbE1lbnRpb25zKTtcbiAgICAgICAgcHVzaFJ1bGVzLmN1cnJlbnQgPSBydWxlcztcbiAgICAgICAgc2V0UGVuZGluZ0NoYW5nZXMoXG4gICAgICAgICAgICBwZW5kaW5nQ2hhbmdlcy51cGRhdGVkLmxlbmd0aCA+IDAgfHwgcGVuZGluZ0NoYW5nZXMuYWRkZWQubGVuZ3RoID4gMCB8fCBwZW5kaW5nQ2hhbmdlcy5kZWxldGVkLmxlbmd0aCA+IDAsXG4gICAgICAgICk7XG4gICAgICAgIHNldE1vZGVsKG1vZGVsKTtcbiAgICB9LCBbY2xpLCBzdXBwb3J0c0ludGVudGlvbmFsTWVudGlvbnNdKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIHJ1bih1cGRhdGVQdXNoUnVsZXMpLmNhdGNoKChlcnIpID0+IGNvbnNvbGUuZXJyb3IoZXJyKSk7XG4gICAgfSwgW2NsaSwgcnVuLCB1cGRhdGVQdXNoUnVsZXNdKTtcblxuICAgIGNvbnN0IHJlY29uY2lsZSA9IHVzZUNhbGxiYWNrKFxuICAgICAgICAobW9kZWw6IE5vdGlmaWNhdGlvblNldHRpbmdzKSA9PiB7XG4gICAgICAgICAgICBzZXRNb2RlbChtb2RlbCk7XG4gICAgICAgICAgICBydW4oYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChwdXNoUnVsZXMuY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFuZ2VzID0gcmVjb25jaWxlTm90aWZpY2F0aW9uU2V0dGluZ3MoXG4gICAgICAgICAgICAgICAgICAgICAgICBwdXNoUnVsZXMuY3VycmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydHNJbnRlbnRpb25hbE1lbnRpb25zLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBhcHBseUNoYW5nZXMoY2xpLCBjaGFuZ2VzKTtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdXBkYXRlUHVzaFJ1bGVzKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkuY2F0Y2goKGVycikgPT4gY29uc29sZS5lcnJvcihlcnIpKTtcbiAgICAgICAgfSxcbiAgICAgICAgW3J1biwgc3VwcG9ydHNJbnRlbnRpb25hbE1lbnRpb25zLCBjbGksIHVwZGF0ZVB1c2hSdWxlc10sXG4gICAgKTtcblxuICAgIHJldHVybiB7IG1vZGVsLCBoYXNQZW5kaW5nQ2hhbmdlcywgcmVjb25jaWxlIH07XG59XG5cbmZ1bmN0aW9uIHVzZUxpbmVhcmlzZWRQcm9taXNlPFQ+KCk6IChmdW46ICgpID0+IFByb21pc2U8VD4pID0+IFByb21pc2U8VD4ge1xuICAgIGNvbnN0IGxhc3RQcm9taXNlID0gdXNlUmVmPFByb21pc2U8VD4gfCBudWxsPihudWxsKTtcblxuICAgIHJldHVybiB1c2VDYWxsYmFjaygoZnVuOiAoKSA9PiBQcm9taXNlPFQ+KTogUHJvbWlzZTxUPiA9PiB7XG4gICAgICAgIGxldCBuZXh0OiBQcm9taXNlPFQ+O1xuICAgICAgICBpZiAobGFzdFByb21pc2UuY3VycmVudCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgbmV4dCA9IGZ1bigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV4dCA9IGxhc3RQcm9taXNlLmN1cnJlbnQudGhlbihmdW4pO1xuICAgICAgICB9XG4gICAgICAgIGxhc3RQcm9taXNlLmN1cnJlbnQgPSBuZXh0O1xuICAgICAgICByZXR1cm4gbmV4dDtcbiAgICB9LCBbXSk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQVNBLElBQUFBLE1BQUEsR0FBQUMsT0FBQTtBQUlBLElBQUFDLDhCQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSx1QkFBQSxHQUFBRixPQUFBO0FBZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBVUEsZUFBZUcsWUFBWUEsQ0FBQ0MsR0FBaUIsRUFBRUMsT0FBcUIsRUFBaUI7RUFDakYsTUFBTUMsT0FBTyxDQUFDQyxHQUFHLENBQUNGLE9BQU8sQ0FBQ0csT0FBTyxDQUFDQyxHQUFHLENBQUVDLE1BQU0sSUFBS04sR0FBRyxDQUFDTyxjQUFjLENBQUMsUUFBUSxFQUFFRCxNQUFNLENBQUNFLElBQUksRUFBRUYsTUFBTSxDQUFDRyxPQUFPLENBQUMsQ0FBQyxDQUFDO0VBQzdHLE1BQU1QLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDRixPQUFPLENBQUNTLEtBQUssQ0FBQ0wsR0FBRyxDQUFFQyxNQUFNLElBQUtOLEdBQUcsQ0FBQ1csV0FBVyxDQUFDLFFBQVEsRUFBRUwsTUFBTSxDQUFDRSxJQUFJLEVBQUVGLE1BQU0sQ0FBQ0csT0FBTyxFQUFFSCxNQUFNLENBQUMsQ0FBQyxDQUFDO0VBQ2hILE1BQU1KLE9BQU8sQ0FBQ0MsR0FBRyxDQUNiRixPQUFPLENBQUNXLE9B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