diff --git a/src/components/blocked-pubkeys/BlockedPubkeys.styles.ts b/src/components/blocked-pubkeys/BlockedPubkeys.styles.ts index 97076bf6..3a65298b 100644 --- a/src/components/blocked-pubkeys/BlockedPubkeys.styles.ts +++ b/src/components/blocked-pubkeys/BlockedPubkeys.styles.ts @@ -1,4 +1,37 @@ import styled from 'styled-components'; +import Card from 'antd/lib/card/Card'; +import { Table, TableProps } from 'antd'; +import { Input } from 'antd'; +import { BaseCol } from '../common/BaseCol/BaseCol'; +export const InputRoot = styled(Input)` + background-color: var(--layout-sider-bg-color); + & input { + background-color: var(--layout-sider-bg-color); + } +`; +export const BaseColRoot = styled(BaseCol)` + overflow: auto; + border-radius: 8px; + height: 100%; +`; +export const TableContainer = styled.div` + border-radius: 12px; + margin: 0 2px; + padding-top: 0.4rem; + padding-bottom: 2rem; + background-color: var(--secondary-background-color); + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3); + border: 1px solid var(--border-base-color); +`; +export const CardRoot = styled(Card)` + border: none; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); + background-color: var(--background-color); + padding-left: 1.5rem; + padding-right: 1.5rem; + padding-top: 1rem; + padding-bottom: 2rem; +`; export const HeaderWrapper = styled.div` display: flex; @@ -6,7 +39,7 @@ export const HeaderWrapper = styled.div` margin-bottom: 1.5rem; flex-wrap: wrap; gap: 1rem; - + @media (max-width: 768px) { flex-direction: column; } @@ -54,3 +87,11 @@ export const CircularBadge = styled.div<{ color: string }>` font-weight: bold; margin-right: 8px; `; +export const EmptyList = styled.div` + min-height: 4rem; + display: flex; + align-items: center; + justify-content: center; + color: var(--text-light-color); + border-bottom: none; +`; diff --git a/src/components/blocked-pubkeys/BlockedPubkeys.tsx b/src/components/blocked-pubkeys/BlockedPubkeys.tsx index 6f1acb28..70ddbb2e 100644 --- a/src/components/blocked-pubkeys/BlockedPubkeys.tsx +++ b/src/components/blocked-pubkeys/BlockedPubkeys.tsx @@ -1,5 +1,5 @@ -import React, { useState } from 'react'; -import { Card, Space, Typography } from 'antd'; +import React, { useState, FC } from 'react'; +import { Space, Typography, Table, TableProps } from 'antd'; import useBlockedPubkeys from '@app/hooks/useBlockedPubkeys'; import { BaseButton } from '@app/components/common/BaseButton/BaseButton'; import { ReloadOutlined } from '@ant-design/icons'; @@ -7,20 +7,39 @@ import { BlockedPubkeysTable } from './components/BlockedPubkeysTable'; import { FlaggedPubkeysTable } from './components/FlaggedPubkeysTable'; import { BlockPubkeyForm } from './components/BlockPubkeyForm'; import { useModerationStats } from '@app/hooks/useModerationStats'; +import { LockFilled } from '@ant-design/icons'; +import styled from 'styled-components'; import * as S from './BlockedPubkeys.styles'; const { Title, Text } = Typography; +export function createStyledTable() { + const GenericTable: FC> = (props) => ; + + const StyledTable = styled(GenericTable)` + border-radius: 12px; + + & .ant-table-thead .ant-table-cell { + background-color: var(--secondary-background-color); + } + + .ant-table-tbody { + background-color: var(--layout-sider-bg-color); + } + .ant-table-placeholder .ant-table-cell { + background-color: var(--layout-sider-bg-color); + transition: none; + } + .ant-table-placeholder .ant-table-cell:hover { + background-color: var(--layout-sider-bg-color); + } + `; + return StyledTable; +} export const BlockedPubkeys: React.FC = () => { const [activeView, setActiveView] = useState<'blocked' | 'flagged'>('blocked'); - const { - blockedPubkeys, - count, - loading, - fetchBlockedPubkeys, - addBlockedPubkey, - removeBlockedPubkey, - } = useBlockedPubkeys(); + const { blockedPubkeys, count, loading, fetchBlockedPubkeys, addBlockedPubkey, removeBlockedPubkey } = + useBlockedPubkeys(); const { fetchStats, loading: statsLoading } = useModerationStats(); // Refresh all data @@ -30,57 +49,41 @@ export const BlockedPubkeys: React.FC = () => { }; return ( - - -
-
- Access Control - - Control access to your relay and manage flagged pubkeys - + + + +
+
+ + Access Control <LockFilled /> + + + Control access to your relay and manage flagged pubkeys + +
+ } onClick={handleRefresh} loading={loading || statsLoading}> + Refresh +
- } - onClick={handleRefresh} - loading={loading || statsLoading} - > - Refresh - -
- - {activeView === 'blocked' && ( - - )} - - - setActiveView('blocked')} - > - Blocked Access - - setActiveView('flagged')} - > - Flagged Access - - - - {activeView === 'blocked' ? ( - - ) : ( - - )} - - + + {activeView === 'blocked' && } + + + setActiveView('blocked')}> + Blocked Access + + setActiveView('flagged')}> + Flagged Access + + + + {activeView === 'blocked' ? ( + + ) : ( + + )} + + + ); }; diff --git a/src/components/blocked-pubkeys/components/BlockPubkeyForm.tsx b/src/components/blocked-pubkeys/components/BlockPubkeyForm.tsx index d54c1fff..5fcabead 100644 --- a/src/components/blocked-pubkeys/components/BlockPubkeyForm.tsx +++ b/src/components/blocked-pubkeys/components/BlockPubkeyForm.tsx @@ -1,16 +1,38 @@ import React, { useState } from 'react'; import { Form, Input, Button, Card } from 'antd'; import { PlusOutlined } from '@ant-design/icons'; +import styled from 'styled-components'; +import { BREAKPOINTS } from '@app/styles/themes/constants'; interface BlockPubkeyFormProps { onSubmit: (pubkey: string, reason?: string) => Promise; disabled: boolean; } +const CardRoot = styled(Card)` + border-color: var(--border-base-color) !important; + border-width: 1px; + box-shadow: 0 2px 6px rgba(0, 0, 0, 0.4); + background-color: var(--secondary-background-color) !important; -export const BlockPubkeyForm: React.FC = ({ - onSubmit, - disabled, -}) => { + & .ant-card-head { + border-bottom-color: var(--border-base-color) !important; + } +} +`; +const TextArea = styled(Input.TextArea)` + background-color: var(--layout-sider-bg-color) !important; +`; +const InputArea = styled(Input)` + background-color: var(--layout-sider-bg-color) !important; +`; +export const FormItemContainer = styled.div` + width: 100%; + @media screen and (min-width: ${BREAKPOINTS.md}px) { + padding-right: 1.5rem; + } +`; + +export const BlockPubkeyForm: React.FC = ({ onSubmit, disabled }) => { const [form] = Form.useForm(); const [submitting, setSubmitting] = useState(false); @@ -36,42 +58,26 @@ export const BlockPubkeyForm: React.FC = ({ }; return ( - -
- - - + + + + + + + - - - + + +