summaryrefslogtreecommitdiff
path: root/web/source/settings/admin/federation
diff options
context:
space:
mode:
Diffstat (limited to 'web/source/settings/admin/federation')
-rw-r--r--web/source/settings/admin/federation/detail.js29
-rw-r--r--web/source/settings/admin/federation/import-export/form.jsx10
-rw-r--r--web/source/settings/admin/federation/import-export/index.jsx2
-rw-r--r--web/source/settings/admin/federation/import-export/process.jsx2
4 files changed, 25 insertions, 18 deletions
diff --git a/web/source/settings/admin/federation/detail.js b/web/source/settings/admin/federation/detail.js
index ecace90cd..ea9109720 100644
--- a/web/source/settings/admin/federation/detail.js
+++ b/web/source/settings/admin/federation/detail.js
@@ -19,7 +19,7 @@
"use strict";
const React = require("react");
-const { useRoute, Redirect } = require("wouter");
+const { useRoute, Redirect, useLocation } = require("wouter");
const query = require("../../lib/query");
@@ -69,12 +69,12 @@ module.exports = function InstanceDetail({ baseUrl }) {
<div>
<h1 className="text-cutoff"><BackButton to={baseUrl} /> Federation settings for: <span title={domain}>{domain}</span></h1>
{infoContent}
- <DomainBlockForm defaultDomain={domain} block={existingBlock} />
+ <DomainBlockForm defaultDomain={domain} block={existingBlock} baseUrl={baseUrl} />
</div>
);
};
-function DomainBlockForm({ defaultDomain, block = {} }) {
+function DomainBlockForm({ defaultDomain, block = {}, baseUrl }) {
const isExistingBlock = block.domain != undefined;
const disabledForm = isExistingBlock
@@ -85,18 +85,31 @@ function DomainBlockForm({ defaultDomain, block = {} }) {
: {};
const form = {
- domain: useTextInput("domain", { defaultValue: block.domain ?? defaultDomain }),
- obfuscate: useBoolInput("obfuscate", { defaultValue: block.obfuscate }),
- commentPrivate: useTextInput("private_comment", { defaultValue: block.private_comment }),
- commentPublic: useTextInput("public_comment", { defaultValue: block.public_comment })
+ domain: useTextInput("domain", { source: block, defaultValue: defaultDomain }),
+ obfuscate: useBoolInput("obfuscate", { source: block }),
+ commentPrivate: useTextInput("private_comment", { source: block }),
+ commentPublic: useTextInput("public_comment", { source: block })
};
const [submitForm, addResult] = useFormSubmit(form, query.useAddInstanceBlockMutation(), { changedOnly: false });
const [removeBlock, removeResult] = query.useRemoveInstanceBlockMutation({ fixedCacheKey: block.id });
+ const [location, setLocation] = useLocation();
+
+ function verifyUrlThenSubmit(e) {
+ // Adding a new block happens on /settings/admin/federation/domain.com
+ // but if domain input changes, that doesn't match anymore and causes issues later on
+ // so, before submitting the form, silently change url, then submit
+ let correctUrl = `${baseUrl}/${form.domain.value}`;
+ if (location != correctUrl) {
+ setLocation(correctUrl);
+ }
+ return submitForm(e);
+ }
+
return (
- <form onSubmit={submitForm}>
+ <form onSubmit={verifyUrlThenSubmit}>
<TextInput
field={form.domain}
label="Domain"
diff --git a/web/source/settings/admin/federation/import-export/form.jsx b/web/source/settings/admin/federation/import-export/form.jsx
index afd2d775d..7b6ad9206 100644
--- a/web/source/settings/admin/federation/import-export/form.jsx
+++ b/web/source/settings/admin/federation/import-export/form.jsx
@@ -36,13 +36,11 @@ const ExportFormatTable = require("./export-format-table");
module.exports = function ImportExportForm({ form, submitParse, parseResult }) {
const [submitExport, exportResult] = useFormSubmit(form, query.useExportDomainListMutation());
- const [updateFromFile, setUpdateFromFile] = React.useState(false);
-
function fileChanged(e) {
const reader = new FileReader();
reader.onload = function (read) {
- form.domains.setter(read.target.result);
- setUpdateFromFile(true);
+ form.domains.value = read.target.result;
+ submitParse();
};
reader.readAsText(e.target.files[0]);
}
@@ -54,10 +52,6 @@ module.exports = function ImportExportForm({ form, submitParse, parseResult }) {
/* eslint-disable-next-line react-hooks/exhaustive-deps */
}, [exportResult]);
- if (updateFromFile) {
- setUpdateFromFile(false);
- submitParse();
- }
return (
<>
<h1>Import / Export suspended domains</h1>
diff --git a/web/source/settings/admin/federation/import-export/index.jsx b/web/source/settings/admin/federation/import-export/index.jsx
index 3039b98f3..ca55296f8 100644
--- a/web/source/settings/admin/federation/import-export/index.jsx
+++ b/web/source/settings/admin/federation/import-export/index.jsx
@@ -40,7 +40,7 @@ module.exports = function ImportExport() {
exportType: useTextInput("exportType", { defaultValue: "plain", dontReset: true })
};
- const [submitParse, parseResult] = useFormSubmit(form, query.useProcessDomainListMutation());
+ const [submitParse, parseResult] = useFormSubmit(form, query.useProcessDomainListMutation(), { changedOnly: false });
const [_location, setLocation] = useLocation();
diff --git a/web/source/settings/admin/federation/import-export/process.jsx b/web/source/settings/admin/federation/import-export/process.jsx
index 0b2d10099..6b9d98f01 100644
--- a/web/source/settings/admin/federation/import-export/process.jsx
+++ b/web/source/settings/admin/federation/import-export/process.jsx
@@ -234,7 +234,7 @@ const UpdateableEntry = React.memo(
return (
<>
<span className="text-cutoff">{entry.domain}</span>
- <i class="fa fa-long-arrow-right" aria-hidden="true"></i>
+ <i className="fa fa-long-arrow-right" aria-hidden="true"></i>
<span>{entry.suggest}</span>
<a role="button" onClick={() =>
updateEntry(entry.key, { domain: entry.suggest, suggest: null })