diff options
Diffstat (limited to 'web/source/settings/admin/federation')
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 }) |