mirror of
https://github.com/superseriousbusiness/gotosocial.git
synced 2025-12-19 09:43:01 -06:00
[feature] Admin accounts endpoints; approve/reject sign-ups (#2826)
* update settings panels, add pending overview + approve/deny functions * add admin accounts get, approve, reject * send approved/rejected emails * use signup URL * docs! * email * swagger * web linting * fix email tests * wee lil fixerinos * use new paging logic for GetAccounts() series of admin endpoints, small changes to query building * shuffle useAccountIDIn check *before* adding to query * fix parse from toot react error * use `netip.Addr` * put valid slices in globals * optimistic updates for account state --------- Co-authored-by: kim <grufwub@gmail.com>
This commit is contained in:
parent
1439042104
commit
89e0cfd874
74 changed files with 4102 additions and 545 deletions
|
|
@ -17,26 +17,23 @@
|
|||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
const React = require("react");
|
||||
const { useRoute, Redirect } = require("wouter");
|
||||
import React, { useState } from "react";
|
||||
import { useRoute, Redirect } from "wouter";
|
||||
|
||||
const FormWithData = require("../../lib/form/form-with-data").default;
|
||||
const BackButton = require("../../components/back-button");
|
||||
import FormWithData from "../../lib/form/form-with-data";
|
||||
import BackButton from "../../components/back-button";
|
||||
|
||||
const { useValue, useTextInput } = require("../../lib/form");
|
||||
const useFormSubmit = require("../../lib/form/submit").default;
|
||||
import { useValue, useTextInput } from "../../lib/form";
|
||||
import useFormSubmit from "../../lib/form/submit";
|
||||
|
||||
const { TextArea } = require("../../components/form/inputs");
|
||||
import { TextArea } from "../../components/form/inputs";
|
||||
|
||||
const MutationButton = require("../../components/form/mutation-button");
|
||||
const Username = require("./username");
|
||||
const { useBaseUrl } = require("../../lib/navigation/util");
|
||||
const {
|
||||
useGetReportQuery,
|
||||
useResolveReportMutation,
|
||||
} = require("../../lib/query/admin/reports");
|
||||
import MutationButton from "../../components/form/mutation-button";
|
||||
import Username from "./username";
|
||||
import { useBaseUrl } from "../../lib/navigation/util";
|
||||
import { useGetReportQuery, useResolveReportMutation } from "../../lib/query/admin/reports";
|
||||
|
||||
module.exports = function ReportDetail({ }) {
|
||||
export default function ReportDetail({ }) {
|
||||
const baseUrl = useBaseUrl();
|
||||
let [_match, params] = useRoute(`${baseUrl}/:reportId`);
|
||||
if (params?.reportId == undefined) {
|
||||
|
|
@ -55,7 +52,7 @@ module.exports = function ReportDetail({ }) {
|
|||
</div>
|
||||
);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
function ReportDetailForm({ data: report }) {
|
||||
const from = report.account;
|
||||
|
|
@ -131,7 +128,11 @@ function ReportActionForm({ report }) {
|
|||
field={form.comment}
|
||||
label="Comment"
|
||||
/>
|
||||
<MutationButton label="Resolve" result={result} />
|
||||
<MutationButton
|
||||
disabled={false}
|
||||
label="Resolve"
|
||||
result={result}
|
||||
/>
|
||||
</form>
|
||||
);
|
||||
}
|
||||
|
|
@ -170,10 +171,10 @@ function ReportedToot({ toot }) {
|
|||
}
|
||||
</section>
|
||||
<aside className="status-info">
|
||||
<dl class="status-stats">
|
||||
<div class="stats-grouping">
|
||||
<div class="stats-item published-at text-cutoff">
|
||||
<dt class="sr-only">Published</dt>
|
||||
<dl className="status-stats">
|
||||
<div className="stats-grouping">
|
||||
<div className="stats-item published-at text-cutoff">
|
||||
<dt className="sr-only">Published</dt>
|
||||
<dd>
|
||||
<time dateTime={toot.created_at}>{new Date(toot.created_at).toLocaleString()}</time>
|
||||
</dd>
|
||||
|
|
@ -186,7 +187,7 @@ function ReportedToot({ toot }) {
|
|||
}
|
||||
|
||||
function TootCW({ note, content }) {
|
||||
const [visible, setVisible] = React.useState(false);
|
||||
const [visible, setVisible] = useState(false);
|
||||
|
||||
function toggleVisible() {
|
||||
setVisible(!visible);
|
||||
|
|
@ -217,12 +218,12 @@ function TootMedia({ media, sensitive }) {
|
|||
<input id={`sensitiveMedia-${m.id}`} type="checkbox" className="sensitive-checkbox hidden" />
|
||||
<div className="sensitive">
|
||||
<div className="open">
|
||||
<label htmlFor={`sensitiveMedia-${m.id}`} className="button" role="button" tabIndex="0">
|
||||
<label htmlFor={`sensitiveMedia-${m.id}`} className="button" role="button" tabIndex={0}>
|
||||
<i className="fa fa-eye-slash" title="Hide sensitive media"></i>
|
||||
</label>
|
||||
</div>
|
||||
<div className="closed" title={m.description}>
|
||||
<label htmlFor={`sensitiveMedia-${m.id}`} className="button" role="button" tabIndex="0">
|
||||
<label htmlFor={`sensitiveMedia-${m.id}`} className="button" role="button" tabIndex={0}>
|
||||
Show sensitive media
|
||||
</label>
|
||||
</div>
|
||||
|
|
@ -241,12 +242,11 @@ function TootMedia({ media, sensitive }) {
|
|||
alt={m.description}
|
||||
src={m.url}
|
||||
// thumb={m.preview_url}
|
||||
size={m.meta?.original}
|
||||
type={m.type}
|
||||
sizes={m.meta?.original}
|
||||
/>
|
||||
</a>
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -17,17 +17,17 @@
|
|||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
const React = require("react");
|
||||
const { Link, Switch, Route } = require("wouter");
|
||||
import React from "react";
|
||||
import { Link, Switch, Route } from "wouter";
|
||||
|
||||
const FormWithData = require("../../lib/form/form-with-data").default;
|
||||
import FormWithData from "../../lib/form/form-with-data";
|
||||
|
||||
const ReportDetail = require("./detail");
|
||||
const Username = require("./username");
|
||||
const { useBaseUrl } = require("../../lib/navigation/util");
|
||||
const { useListReportsQuery } = require("../../lib/query/admin/reports");
|
||||
import ReportDetail from "./detail";
|
||||
import Username from "./username";
|
||||
import { useBaseUrl } from "../../lib/navigation/util";
|
||||
import { useListReportsQuery } from "../../lib/query/admin/reports";
|
||||
|
||||
module.exports = function Reports({ baseUrl }) {
|
||||
export default function Reports({ baseUrl }) {
|
||||
return (
|
||||
<div className="reports">
|
||||
<Switch>
|
||||
|
|
@ -38,7 +38,7 @@ module.exports = function Reports({ baseUrl }) {
|
|||
</Switch>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
}
|
||||
|
||||
function ReportOverview({ }) {
|
||||
return (
|
||||
|
|
@ -100,4 +100,4 @@ function ReportEntry({ report }) {
|
|||
</a>
|
||||
</Link>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -17,10 +17,10 @@
|
|||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
const React = require("react");
|
||||
const { Link } = require("wouter");
|
||||
import React from "react";
|
||||
import { Link } from "wouter";
|
||||
|
||||
module.exports = function Username({ user, link = true }) {
|
||||
export default function Username({ user, link = true }) {
|
||||
let className = "user";
|
||||
let isLocal = user.domain == null;
|
||||
|
||||
|
|
@ -36,8 +36,8 @@ module.exports = function Username({ user, link = true }) {
|
|||
? { fa: "fa-home", info: "Local user" }
|
||||
: { fa: "fa-external-link-square", info: "Remote user" };
|
||||
|
||||
let Element = "div";
|
||||
let href = null;
|
||||
let Element: any = "div";
|
||||
let href: any = null;
|
||||
|
||||
if (link) {
|
||||
Element = Link;
|
||||
|
|
@ -51,4 +51,4 @@ module.exports = function Username({ user, link = true }) {
|
|||
<span className="sr-only">{icon.info}</span>
|
||||
</Element>
|
||||
);
|
||||
};
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue