/* GoToSocial Copyright (C) 2021-2022 GoToSocial Authors admin@gotosocial.org This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ "use strict"; const React = require("react"); const { Link, useLocation } = require("wouter"); const { matchSorter } = require("match-sorter"); const { useTextInput } = require("../../lib/form"); const { TextInput } = require("../../components/form/inputs"); const query = require("../../lib/query"); const Loading = require("../../components/loading"); const ImportExport = require("./import-export"); module.exports = function InstanceOverview({ baseUrl }) { const { data: blockedInstances = [], isLoading } = query.useInstanceBlocksQuery(); const [_location, setLocation] = useLocation(); const filterField = useTextInput("filter"); const filter = filterField.value; const filteredInstances = React.useMemo(() => { return matchSorter(Object.values(blockedInstances), filter, { keys: ["domain"] }); }, [blockedInstances, filter]); let filtered = blockedInstances.length - filteredInstances.length; function filterFormSubmit(e) { e.preventDefault(); setLocation(`${baseUrl}/${filter}`); } if (isLoading) { return ; } return ( <>

Federation

Suspended instances

Suspending a domain blocks all current and future accounts on that instance. Stored content will be removed, and no more data is sent to the remote server.
Suspend
{blockedInstances.length} blocked instance{blockedInstances.length != 1 ? "s" : ""} {filtered > 0 && `(${filtered} filtered)`}
{filteredInstances.map((entry) => { return ( {entry.domain} {new Date(entry.created_at).toLocaleString()} ); })}
Or use the bulk import/export interface ); };