Merge branch 'admin-relays' into 'main'
Nostr Admin Relays See merge request soapbox-pub/soapbox!3014
This commit is contained in:
commit
2869b2e9f3
|
@ -0,0 +1,21 @@
|
|||
import { useQuery } from '@tanstack/react-query';
|
||||
import { z } from 'zod';
|
||||
|
||||
import { useApi } from 'soapbox/hooks';
|
||||
|
||||
const relayEntitySchema = z.object({
|
||||
url: z.string().url(),
|
||||
marker: z.enum(['read', 'write']).optional(),
|
||||
});
|
||||
|
||||
export function useAdminNostrRelays() {
|
||||
const api = useApi();
|
||||
|
||||
return useQuery({
|
||||
queryKey: ['NostrRelay'],
|
||||
queryFn: async () => {
|
||||
const { data } = await api.get('/api/v1/admin/ditto/relays');
|
||||
return relayEntitySchema.array().parse(data);
|
||||
},
|
||||
});
|
||||
}
|
|
@ -0,0 +1,55 @@
|
|||
import { useMutation } from '@tanstack/react-query';
|
||||
import React, { useEffect, useState } from 'react';
|
||||
import { FormattedMessage, defineMessages, useIntl } from 'react-intl';
|
||||
|
||||
import { Button, Column, Form, FormActions, Stack } from 'soapbox/components/ui';
|
||||
import RelayEditor, { RelayData } from 'soapbox/features/nostr-relays/components/relay-editor';
|
||||
import { useApi } from 'soapbox/hooks';
|
||||
|
||||
import { useAdminNostrRelays } from './hooks/useAdminNostrRelays';
|
||||
|
||||
const messages = defineMessages({
|
||||
title: { id: 'column.admin.nostr_relays', defaultMessage: 'Relays' },
|
||||
});
|
||||
|
||||
const AdminNostrRelays: React.FC = () => {
|
||||
const api = useApi();
|
||||
const intl = useIntl();
|
||||
const result = useAdminNostrRelays();
|
||||
|
||||
const [relays, setRelays] = useState<RelayData[]>(result.data ?? []);
|
||||
|
||||
const mutation = useMutation({
|
||||
mutationFn: async () => api.put('/api/v1/admin/ditto/relays', relays),
|
||||
});
|
||||
|
||||
const handleSubmit = () => {
|
||||
mutation.mutate();
|
||||
};
|
||||
|
||||
useEffect(() => {
|
||||
setRelays(result.data ?? []);
|
||||
}, [result.data]);
|
||||
|
||||
return (
|
||||
<Column label={intl.formatMessage(messages.title)}>
|
||||
<Form onSubmit={handleSubmit}>
|
||||
<Stack space={4}>
|
||||
<RelayEditor relays={relays} setRelays={setRelays} />
|
||||
|
||||
<FormActions>
|
||||
<Button to='/soapbox/admin' theme='tertiary'>
|
||||
<FormattedMessage id='common.cancel' defaultMessage='Cancel' />
|
||||
</Button>
|
||||
|
||||
<Button theme='primary' type='submit' disabled={mutation.isPending}>
|
||||
<FormattedMessage id='edit_profile.save' defaultMessage='Save' />
|
||||
</Button>
|
||||
</FormActions>
|
||||
</Stack>
|
||||
</Form>
|
||||
</Column>
|
||||
);
|
||||
};
|
||||
|
||||
export default AdminNostrRelays;
|
|
@ -113,6 +113,13 @@ const Dashboard: React.FC = () => {
|
|||
label={<FormattedMessage id='column.admin.domains' defaultMessage='Domains' />}
|
||||
/>
|
||||
)}
|
||||
|
||||
{features.nostr && (
|
||||
<ListItem
|
||||
to='/soapbox/admin/nostr/relays'
|
||||
label={<FormattedMessage id='column.admin.nostr_relays' defaultMessage='Relays' />}
|
||||
/>
|
||||
)}
|
||||
</List>
|
||||
|
||||
{account.admin && (
|
||||
|
|
|
@ -142,6 +142,7 @@ import {
|
|||
Bech32Redirect,
|
||||
Relays,
|
||||
Rules,
|
||||
AdminNostrRelays,
|
||||
} from './util/async-components';
|
||||
import GlobalHotkeys from './util/global-hotkeys';
|
||||
import { WrappedRoute } from './util/react-router-helpers';
|
||||
|
@ -334,6 +335,7 @@ const SwitchingColumnsArea: React.FC<ISwitchingColumnsArea> = ({ children }) =>
|
|||
<WrappedRoute path='/soapbox/admin/users' staffOnly page={AdminPage} component={UserIndex} content={children} exact />
|
||||
<WrappedRoute path='/soapbox/admin/theme' staffOnly page={AdminPage} component={ThemeEditor} content={children} exact />
|
||||
<WrappedRoute path='/soapbox/admin/relays' staffOnly page={AdminPage} component={Relays} content={children} exact />
|
||||
{features.nostr && <WrappedRoute path='/soapbox/admin/nostr/relays' staffOnly page={AdminPage} component={AdminNostrRelays} content={children} exact />}
|
||||
{features.adminAnnouncements && <WrappedRoute path='/soapbox/admin/announcements' staffOnly page={AdminPage} component={Announcements} content={children} exact />}
|
||||
{features.domains && <WrappedRoute path='/soapbox/admin/domains' staffOnly page={AdminPage} component={Domains} content={children} exact />}
|
||||
{features.adminRules && <WrappedRoute path='/soapbox/admin/rules' staffOnly page={AdminPage} component={Rules} content={children} exact />}
|
||||
|
|
|
@ -175,3 +175,4 @@ export const Bech32Redirect = lazy(() => import('soapbox/features/nostr/Bech32Re
|
|||
export const Relays = lazy(() => import('soapbox/features/admin/relays'));
|
||||
export const Rules = lazy(() => import('soapbox/features/admin/rules'));
|
||||
export const EditRuleModal = lazy(() => import('soapbox/features/ui/components/modals/edit-rule-modal'));
|
||||
export const AdminNostrRelays = lazy(() => import('soapbox/features/admin/nostr-relays'));
|
||||
|
|
|
@ -338,6 +338,7 @@
|
|||
"column.admin.edit_domain": "Edit domain",
|
||||
"column.admin.edit_rule": "Edit rule",
|
||||
"column.admin.moderation_log": "Moderation Log",
|
||||
"column.admin.nostr_relays": "Relays",
|
||||
"column.admin.relays": "Instance relays",
|
||||
"column.admin.reports": "Reports",
|
||||
"column.admin.reports.menu.moderation_log": "Moderation Log",
|
||||
|
|
Loading…
Reference in New Issue