diff options
Diffstat (limited to 'web/source/settings/lib')
-rw-r--r-- | web/source/settings/lib/query/admin/index.js | 48 | ||||
-rw-r--r-- | web/source/settings/lib/query/base.js | 2 | ||||
-rw-r--r-- | web/source/settings/lib/query/lib.js | 7 |
3 files changed, 55 insertions, 2 deletions
diff --git a/web/source/settings/lib/query/admin/index.js b/web/source/settings/lib/query/admin/index.js index dd4a61b51..515d8edcf 100644 --- a/web/source/settings/lib/query/admin/index.js +++ b/web/source/settings/lib/query/admin/index.js @@ -22,7 +22,8 @@ const { replaceCacheOnMutation, removeFromCacheOnMutation, - domainListToObject + domainListToObject, + idListToObject } = require("../lib"); const base = require("../base"); @@ -104,6 +105,51 @@ const endpoints = (build) => ({ return res.accounts ?? []; } }), + instanceRules: build.query({ + query: () => ({ + url: `/api/v1/admin/instance/rules` + }), + transformResponse: idListToObject + }), + addInstanceRule: build.mutation({ + query: (formData) => ({ + method: "POST", + url: `/api/v1/admin/instance/rules`, + asForm: true, + body: formData, + discardEmpty: true + }), + transformResponse: (data) => { + return { + [data.id]: data + }; + }, + ...replaceCacheOnMutation("instanceRules") + }), + updateInstanceRule: build.mutation({ + query: ({ id, ...edit }) => ({ + method: "PATCH", + url: `/api/v1/admin/instance/rules/${id}`, + asForm: true, + body: edit, + discardEmpty: true + }), + transformResponse: (data) => { + return { + [data.id]: data + }; + }, + ...replaceCacheOnMutation("instanceRules") + }), + deleteInstanceRule: build.mutation({ + query: (id) => ({ + method: "DELETE", + url: `/api/v1/admin/instance/rules/${id}` + }), + ...removeFromCacheOnMutation("instanceRules", { + findKey: (_draft, rule) => rule.id + }) + }), ...require("./import-export")(build), ...require("./custom-emoji")(build), ...require("./reports")(build) diff --git a/web/source/settings/lib/query/base.js b/web/source/settings/lib/query/base.js index 653fc449b..ba02d4e07 100644 --- a/web/source/settings/lib/query/base.js +++ b/web/source/settings/lib/query/base.js @@ -59,7 +59,7 @@ function instanceBasedQuery(args, api, extraOptions) { module.exports = createApi({ reducerPath: "api", baseQuery: instanceBasedQuery, - tagTypes: ["Auth", "Emoji", "Reports", "Account"], + tagTypes: ["Auth", "Emoji", "Reports", "Account", "InstanceRules"], endpoints: (build) => ({ instance: build.query({ query: () => ({ diff --git a/web/source/settings/lib/query/lib.js b/web/source/settings/lib/query/lib.js index 78a9291b7..56ce05478 100644 --- a/web/source/settings/lib/query/lib.js +++ b/web/source/settings/lib/query/lib.js @@ -37,6 +37,13 @@ module.exports = { (_) => Object.fromEntries(_) ]); }, + idListToObject: (data) => { + // Turn flat Array into Object keyed by entry id field + return syncpipe(data, [ + (_) => _.map((entry) => [entry.id, entry]), + (_) => Object.fromEntries(_) + ]); + }, replaceCacheOnMutation: makeCacheMutation((draft, newData) => { Object.assign(draft, newData); }), |