diff options
author | 2023-08-19 14:33:15 +0200 | |
---|---|---|
committer | 2023-08-19 14:33:15 +0200 | |
commit | 92de8fb396265d057f18aab4de0bc8aff4b90188 (patch) | |
tree | 46438b9ff550261f56aa58d038cdf2f1e15493e3 /web/source/settings/lib | |
parent | [bugfix] fix double firing bun.DB query hooks (#2124) (diff) | |
download | gotosocial-92de8fb396265d057f18aab4de0bc8aff4b90188.tar.xz |
[feature] Instance rules (#2125)
* init instance rules database model, admin api
* expose instance rules in public instance api
* public /api/v1/instance/rules route
* GET ruleById
* createRule route
* createRule auth check
* updateRule
* deleteRule
* list rules on about page
* ruleGet auth
* add about page ids for anchors
* process and store adding violated rules to reports
* admin api models for instance rules
* instance rule edit frontend
* change rule inputs to textareas
* database fixes after rebase (#2124)
* remove unused imports
* fix db migration column name
* fix tests
* fix more tests
* fix postgres error with wrongly used Ident
* add some tests, fiddle with rule model a bit, fix postgres migration
* swagger docs
---------
Co-authored-by: tsmethurst <tobi.smethurst@protonmail.com>
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); }), |