Bug fixes
This commit is contained in:
@@ -21,6 +21,7 @@ export function HelpModal({
|
|||||||
classNames={modalClasses}
|
classNames={modalClasses}
|
||||||
opened={providerModalOpened}
|
opened={providerModalOpened}
|
||||||
fullScreen={isMobile}
|
fullScreen={isMobile}
|
||||||
|
centered
|
||||||
onClose={() => {
|
onClose={() => {
|
||||||
setSearchValue('');
|
setSearchValue('');
|
||||||
setProviderLabel('Google Search');
|
setProviderLabel('Google Search');
|
||||||
|
|||||||
@@ -39,6 +39,7 @@ export function WeatherModal({
|
|||||||
className={modalClasses.helpModal}
|
className={modalClasses.helpModal}
|
||||||
classNames={modalClasses}
|
classNames={modalClasses}
|
||||||
opened={weatherModalOpened}
|
opened={weatherModalOpened}
|
||||||
|
centered
|
||||||
onClose={() => {
|
onClose={() => {
|
||||||
setSearchValue('');
|
setSearchValue('');
|
||||||
setProviderLabel('Google Search');
|
setProviderLabel('Google Search');
|
||||||
|
|||||||
@@ -46,6 +46,7 @@ const ApplicationSettings = () => {
|
|||||||
const [searchValue, setSearchValue] = useState('');
|
const [searchValue, setSearchValue] = useState('');
|
||||||
const [debouncedSearch] = useDebouncedValue(searchValue, 500);
|
const [debouncedSearch] = useDebouncedValue(searchValue, 500);
|
||||||
const [dragging, setDragging] = useState(false);
|
const [dragging, setDragging] = useState(false);
|
||||||
|
const [isOpen, setIsOpen] = useState(false);
|
||||||
|
|
||||||
const reorder = (list: any, startIndex: any, endIndex: any) => {
|
const reorder = (list: any, startIndex: any, endIndex: any) => {
|
||||||
const result = Array.from(list);
|
const result = Array.from(list);
|
||||||
@@ -319,7 +320,12 @@ const ApplicationSettings = () => {
|
|||||||
<Grid columns={18} w={'75%'}>
|
<Grid columns={18} w={'75%'}>
|
||||||
{applicationData?.map((application: Application) => (
|
{applicationData?.map((application: Application) => (
|
||||||
<GridCol span={6} key={application.id}>
|
<GridCol span={6} key={application.id}>
|
||||||
<Popover withArrow withOverlay withinPortal={false}>
|
<Popover
|
||||||
|
withArrow
|
||||||
|
withOverlay
|
||||||
|
withinPortal={false}
|
||||||
|
closeOnClickOutside={!isOpen}
|
||||||
|
>
|
||||||
<Popover.Target>
|
<Popover.Target>
|
||||||
<Box
|
<Box
|
||||||
onClick={(e) => {
|
onClick={(e) => {
|
||||||
@@ -335,7 +341,10 @@ const ApplicationSettings = () => {
|
|||||||
</Box>
|
</Box>
|
||||||
</Popover.Target>
|
</Popover.Target>
|
||||||
<Popover.Dropdown>
|
<Popover.Dropdown>
|
||||||
<DebouncedApplication application={application} />
|
<DebouncedApplication
|
||||||
|
application={application}
|
||||||
|
setIsOpen={setIsOpen}
|
||||||
|
/>
|
||||||
</Popover.Dropdown>
|
</Popover.Dropdown>
|
||||||
</Popover>
|
</Popover>
|
||||||
</GridCol>
|
</GridCol>
|
||||||
|
|||||||
@@ -17,7 +17,10 @@ import { cardClasses, textInputClasses } from 'styles';
|
|||||||
import type { Application } from 'types';
|
import type { Application } from 'types';
|
||||||
import DeleteItemModal from '../Shared/DeleteItemModal';
|
import DeleteItemModal from '../Shared/DeleteItemModal';
|
||||||
|
|
||||||
function DebouncedApplication({ application }: { application: Application }) {
|
function DebouncedApplication({
|
||||||
|
application,
|
||||||
|
setIsOpen,
|
||||||
|
}: { application: Application; setIsOpen: any }) {
|
||||||
const { theme, handleDelete } = useCommonHooks();
|
const { theme, handleDelete } = useCommonHooks();
|
||||||
const [modalOpened, { open: openModal, close: closeModal }] = useDisclosure(false);
|
const [modalOpened, { open: openModal, close: closeModal }] = useDisclosure(false);
|
||||||
const { mutateAsync } = useMutationAPI();
|
const { mutateAsync } = useMutationAPI();
|
||||||
@@ -25,7 +28,10 @@ function DebouncedApplication({ application }: { application: Application }) {
|
|||||||
const [app, setApp] = useState<Application>(application);
|
const [app, setApp] = useState<Application>(application);
|
||||||
const [update, setUpdate] = useState<any>();
|
const [update, setUpdate] = useState<any>();
|
||||||
const [debounced] = useDebouncedValue(update, 1000);
|
const [debounced] = useDebouncedValue(update, 1000);
|
||||||
|
const handleClose = () => {
|
||||||
|
setIsOpen(false);
|
||||||
|
closeModal();
|
||||||
|
};
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (debounced && Object.keys(debounced).length > 0) {
|
if (debounced && Object.keys(debounced).length > 0) {
|
||||||
mutateAsync({ method: 'PATCH', endpoint: 'api/apps', body: debounced });
|
mutateAsync({ method: 'PATCH', endpoint: 'api/apps', body: debounced });
|
||||||
@@ -41,7 +47,7 @@ function DebouncedApplication({ application }: { application: Application }) {
|
|||||||
<Card className={cardClasses.settingsItem} classNames={cardClasses}>
|
<Card className={cardClasses.settingsItem} classNames={cardClasses}>
|
||||||
<DeleteItemModal
|
<DeleteItemModal
|
||||||
modalOpened={modalOpened}
|
modalOpened={modalOpened}
|
||||||
handleClose={closeModal}
|
handleClose={handleClose}
|
||||||
title='Delete Application'
|
title='Delete Application'
|
||||||
body={
|
body={
|
||||||
<Stack gap={0} w={'100%'} h={'150px'} align='center'>
|
<Stack gap={0} w={'100%'} h={'150px'} align='center'>
|
||||||
@@ -64,7 +70,7 @@ function DebouncedApplication({ application }: { application: Application }) {
|
|||||||
styles={{ label: { color: 'black' } }}
|
styles={{ label: { color: 'black' } }}
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
handleDelete(app, 'api/apps');
|
handleDelete(app, 'api/apps');
|
||||||
closeModal();
|
handleClose();
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
Delete
|
Delete
|
||||||
@@ -72,9 +78,7 @@ function DebouncedApplication({ application }: { application: Application }) {
|
|||||||
<Button
|
<Button
|
||||||
color={'grey'}
|
color={'grey'}
|
||||||
styles={{ label: { color: 'black' } }}
|
styles={{ label: { color: 'black' } }}
|
||||||
onClick={() => {
|
onClick={handleClose}
|
||||||
closeModal();
|
|
||||||
}}
|
|
||||||
>
|
>
|
||||||
Cancel
|
Cancel
|
||||||
</Button>
|
</Button>
|
||||||
@@ -92,6 +96,7 @@ function DebouncedApplication({ application }: { application: Application }) {
|
|||||||
right={16}
|
right={16}
|
||||||
color='red'
|
color='red'
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
|
setIsOpen(true);
|
||||||
openModal();
|
openModal();
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
|
|||||||
@@ -27,7 +27,10 @@ function DebouncedBookmarkItem({
|
|||||||
const [bookmark, setBookmark] = useState<Bookmark>(bookmarkItem);
|
const [bookmark, setBookmark] = useState<Bookmark>(bookmarkItem);
|
||||||
const [update, setUpdate] = useState<any>({});
|
const [update, setUpdate] = useState<any>({});
|
||||||
const [debounced] = useDebouncedValue(update, 1000);
|
const [debounced] = useDebouncedValue(update, 1000);
|
||||||
|
const handleClose = () => {
|
||||||
|
setIsOpen(false);
|
||||||
|
closeModal();
|
||||||
|
};
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (Object.keys(debounced).length) {
|
if (Object.keys(debounced).length) {
|
||||||
mutateAsync({ method: 'PATCH', endpoint: 'api/links', body: debounced });
|
mutateAsync({ method: 'PATCH', endpoint: 'api/links', body: debounced });
|
||||||
@@ -44,7 +47,7 @@ function DebouncedBookmarkItem({
|
|||||||
<Card className={cardClasses.settingsItem} classNames={cardClasses}>
|
<Card className={cardClasses.settingsItem} classNames={cardClasses}>
|
||||||
<DeleteItemModal
|
<DeleteItemModal
|
||||||
modalOpened={modalOpened}
|
modalOpened={modalOpened}
|
||||||
handleClose={closeModal}
|
handleClose={handleClose}
|
||||||
body={
|
body={
|
||||||
<Stack gap={0} w={'100%'} h={'150px'} align='center'>
|
<Stack gap={0} w={'100%'} h={'150px'} align='center'>
|
||||||
<Text>Are you sure you want to delete this bookmark?</Text>
|
<Text>Are you sure you want to delete this bookmark?</Text>
|
||||||
@@ -66,7 +69,7 @@ function DebouncedBookmarkItem({
|
|||||||
styles={{ label: { color: 'black' } }}
|
styles={{ label: { color: 'black' } }}
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
handleDelete(bookmark, 'api/links');
|
handleDelete(bookmark, 'api/links');
|
||||||
closeModal();
|
handleClose();
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
Delete
|
Delete
|
||||||
@@ -74,9 +77,7 @@ function DebouncedBookmarkItem({
|
|||||||
<Button
|
<Button
|
||||||
color={'grey'}
|
color={'grey'}
|
||||||
styles={{ label: { color: 'black' } }}
|
styles={{ label: { color: 'black' } }}
|
||||||
onClick={() => {
|
onClick={handleClose}
|
||||||
closeModal();
|
|
||||||
}}
|
|
||||||
>
|
>
|
||||||
Cancel
|
Cancel
|
||||||
</Button>
|
</Button>
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ import { cardClasses, textInputClasses } from 'styles';
|
|||||||
import type { Provider } from 'types';
|
import type { Provider } from 'types';
|
||||||
import DeleteItemModal from '../Shared/DeleteItemModal';
|
import DeleteItemModal from '../Shared/DeleteItemModal';
|
||||||
|
|
||||||
function DebouncedSearchProvider({ searchProvider }: any) {
|
function DebouncedSearchProvider({ searchProvider, setIsOpen }: any) {
|
||||||
const { theme, handleDelete } = useCommonHooks();
|
const { theme, handleDelete } = useCommonHooks();
|
||||||
const [modalOpened, { open: openModal, close: closeModal }] = useDisclosure(false);
|
const [modalOpened, { open: openModal, close: closeModal }] = useDisclosure(false);
|
||||||
const { mutateAsync } = useMutationAPI();
|
const { mutateAsync } = useMutationAPI();
|
||||||
@@ -25,6 +25,11 @@ function DebouncedSearchProvider({ searchProvider }: any) {
|
|||||||
const [update, setUpdate] = useState<any>({});
|
const [update, setUpdate] = useState<any>({});
|
||||||
const [debounced] = useDebouncedValue(update, 1000);
|
const [debounced] = useDebouncedValue(update, 1000);
|
||||||
|
|
||||||
|
const handleClose = () => {
|
||||||
|
setIsOpen(false);
|
||||||
|
closeModal();
|
||||||
|
};
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (Object.keys(debounced).length) {
|
if (Object.keys(debounced).length) {
|
||||||
mutateAsync({ method: 'PATCH', endpoint: 'api/providers', body: debounced });
|
mutateAsync({ method: 'PATCH', endpoint: 'api/providers', body: debounced });
|
||||||
@@ -41,7 +46,7 @@ function DebouncedSearchProvider({ searchProvider }: any) {
|
|||||||
<Card className={cardClasses.settingsItem} classNames={cardClasses}>
|
<Card className={cardClasses.settingsItem} classNames={cardClasses}>
|
||||||
<DeleteItemModal
|
<DeleteItemModal
|
||||||
modalOpened={modalOpened}
|
modalOpened={modalOpened}
|
||||||
handleClose={closeModal}
|
handleClose={handleClose}
|
||||||
title={'Delete Search Provider'}
|
title={'Delete Search Provider'}
|
||||||
body={
|
body={
|
||||||
<Stack gap={0} w={'100%'} h={'150px'} align='center'>
|
<Stack gap={0} w={'100%'} h={'150px'} align='center'>
|
||||||
@@ -64,7 +69,7 @@ function DebouncedSearchProvider({ searchProvider }: any) {
|
|||||||
styles={{ label: { color: 'black' } }}
|
styles={{ label: { color: 'black' } }}
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
handleDelete(provider, 'api/providers');
|
handleDelete(provider, 'api/providers');
|
||||||
closeModal();
|
handleClose();
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
Delete
|
Delete
|
||||||
@@ -72,9 +77,7 @@ function DebouncedSearchProvider({ searchProvider }: any) {
|
|||||||
<Button
|
<Button
|
||||||
color={'grey'}
|
color={'grey'}
|
||||||
styles={{ label: { color: 'black' } }}
|
styles={{ label: { color: 'black' } }}
|
||||||
onClick={() => {
|
onClick={handleClose}
|
||||||
closeModal();
|
|
||||||
}}
|
|
||||||
>
|
>
|
||||||
Cancel
|
Cancel
|
||||||
</Button>
|
</Button>
|
||||||
@@ -92,6 +95,7 @@ function DebouncedSearchProvider({ searchProvider }: any) {
|
|||||||
right={16}
|
right={16}
|
||||||
color='red'
|
color='red'
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
|
setIsOpen(true);
|
||||||
openModal();
|
openModal();
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
|
|||||||
@@ -37,6 +37,7 @@ const SearchProviderSettings = () => {
|
|||||||
const [modalOpened, { open: openModal, close: closeModal }] = useDisclosure(false);
|
const [modalOpened, { open: openModal, close: closeModal }] = useDisclosure(false);
|
||||||
const [searchValue, setSearchValue] = useState('');
|
const [searchValue, setSearchValue] = useState('');
|
||||||
const [debouncedSearch] = useDebouncedValue(searchValue, 500);
|
const [debouncedSearch] = useDebouncedValue(searchValue, 500);
|
||||||
|
const [isOpen, setIsOpen] = useState(false);
|
||||||
|
|
||||||
const handleClose = () => {
|
const handleClose = () => {
|
||||||
setNewProvider(defaultProvider);
|
setNewProvider(defaultProvider);
|
||||||
@@ -151,7 +152,12 @@ const SearchProviderSettings = () => {
|
|||||||
<Grid columns={18} w={'75%'}>
|
<Grid columns={18} w={'75%'}>
|
||||||
{providerData?.map((provider: Provider) => (
|
{providerData?.map((provider: Provider) => (
|
||||||
<GridCol span={isMobile ? 18 : 6} key={provider.id}>
|
<GridCol span={isMobile ? 18 : 6} key={provider.id}>
|
||||||
<Popover withArrow withOverlay withinPortal={false}>
|
<Popover
|
||||||
|
withArrow
|
||||||
|
withOverlay
|
||||||
|
withinPortal={false}
|
||||||
|
closeOnClickOutside={!isOpen}
|
||||||
|
>
|
||||||
<Popover.Target>
|
<Popover.Target>
|
||||||
<Box
|
<Box
|
||||||
onClick={(e) => {
|
onClick={(e) => {
|
||||||
@@ -162,7 +168,10 @@ const SearchProviderSettings = () => {
|
|||||||
</Box>
|
</Box>
|
||||||
</Popover.Target>
|
</Popover.Target>
|
||||||
<Popover.Dropdown>
|
<Popover.Dropdown>
|
||||||
<DebouncedSearchProvider searchProvider={provider} />
|
<DebouncedSearchProvider
|
||||||
|
searchProvider={provider}
|
||||||
|
setIsOpen={setIsOpen}
|
||||||
|
/>
|
||||||
</Popover.Dropdown>
|
</Popover.Dropdown>
|
||||||
</Popover>
|
</Popover>
|
||||||
</GridCol>
|
</GridCol>
|
||||||
|
|||||||
@@ -15,8 +15,9 @@ function AddItemModal({ modalOpened, handleClose, body, title }: any) {
|
|||||||
style={modalStyle}
|
style={modalStyle}
|
||||||
closeOnEscape
|
closeOnEscape
|
||||||
closeOnClickOutside
|
closeOnClickOutside
|
||||||
|
centered
|
||||||
>
|
>
|
||||||
<Modal.Overlay style={{ zIndex: 999 }} />
|
<Modal.Overlay style={{ zIndex: 999, backdropFilter: 'blur(5px)' }} />
|
||||||
<Modal.Content style={{ zIndex: 1000 }}>
|
<Modal.Content style={{ zIndex: 1000 }}>
|
||||||
<Modal.Header>
|
<Modal.Header>
|
||||||
<Modal.Title>{title}</Modal.Title>
|
<Modal.Title>{title}</Modal.Title>
|
||||||
|
|||||||
@@ -15,8 +15,9 @@ function DeleteItemModal({ modalOpened, handleClose, body, title }: any) {
|
|||||||
style={modalStyle}
|
style={modalStyle}
|
||||||
closeOnEscape
|
closeOnEscape
|
||||||
closeOnClickOutside
|
closeOnClickOutside
|
||||||
|
centered
|
||||||
>
|
>
|
||||||
<Modal.Overlay style={{ zIndex: 999 }} />
|
<Modal.Overlay style={{ zIndex: 999, backdropFilter: 'blur(5px)' }} />
|
||||||
<Modal.Content style={{ zIndex: 1000 }}>
|
<Modal.Content style={{ zIndex: 1000 }}>
|
||||||
<Modal.Header>
|
<Modal.Header>
|
||||||
<Modal.Title>{title}</Modal.Title>
|
<Modal.Title>{title}</Modal.Title>
|
||||||
|
|||||||
@@ -126,6 +126,7 @@ function ThemeModal({
|
|||||||
opened={opened}
|
opened={opened}
|
||||||
onClose={handleClose}
|
onClose={handleClose}
|
||||||
fullScreen={isMobile}
|
fullScreen={isMobile}
|
||||||
|
centered
|
||||||
style={{
|
style={{
|
||||||
'--color-text-pri': theme.primaryColor,
|
'--color-text-pri': theme.primaryColor,
|
||||||
'--color-text-acc': theme.accentColor,
|
'--color-text-acc': theme.accentColor,
|
||||||
@@ -135,7 +136,7 @@ function ThemeModal({
|
|||||||
'--image-background': `url("${theme.backgroundImage}")`,
|
'--image-background': `url("${theme.backgroundImage}")`,
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<Modal.Overlay />
|
<Modal.Overlay style={{ backdropFilter: 'blur(5px)' }} />
|
||||||
<Modal.Content>
|
<Modal.Content>
|
||||||
<Modal.Header style={{ justifyContent: 'center' }}>
|
<Modal.Header style={{ justifyContent: 'center' }}>
|
||||||
<Group pos={'absolute'}>
|
<Group pos={'absolute'}>
|
||||||
|
|||||||
@@ -45,6 +45,7 @@ function ThemePlaylistModal({
|
|||||||
classNames={modalClasses}
|
classNames={modalClasses}
|
||||||
opened={opened}
|
opened={opened}
|
||||||
fullScreen={isMobile}
|
fullScreen={isMobile}
|
||||||
|
centered
|
||||||
onClose={() => {
|
onClose={() => {
|
||||||
handleClose();
|
handleClose();
|
||||||
setThemeList('[]');
|
setThemeList('[]');
|
||||||
@@ -58,7 +59,7 @@ function ThemePlaylistModal({
|
|||||||
'--image-background': `url("${theme.backgroundImage}")`,
|
'--image-background': `url("${theme.backgroundImage}")`,
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<Modal.Overlay />
|
<Modal.Overlay style={{ backdropFilter: 'blur(5px)' }} />
|
||||||
<Modal.Content>
|
<Modal.Content>
|
||||||
<Modal.Header style={{ justifyContent: 'center' }}>
|
<Modal.Header style={{ justifyContent: 'center' }}>
|
||||||
<Group pos={'absolute'}>
|
<Group pos={'absolute'}>
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ import { FiTrash } from 'react-icons/fi';
|
|||||||
import { cardClasses, textInputClasses } from 'styles';
|
import { cardClasses, textInputClasses } from 'styles';
|
||||||
import DeleteItemModal from '../Shared/DeleteItemModal';
|
import DeleteItemModal from '../Shared/DeleteItemModal';
|
||||||
|
|
||||||
function DebouncedWolClient({ wolClient }: any) {
|
function DebouncedWolClient({ wolClient, setIsOpen }: any) {
|
||||||
const { theme, handleDelete } = useCommonHooks();
|
const { theme, handleDelete } = useCommonHooks();
|
||||||
const [modalOpened, { open: openModal, close: closeModal }] = useDisclosure(false);
|
const [modalOpened, { open: openModal, close: closeModal }] = useDisclosure(false);
|
||||||
const { mutateAsync } = useMutationAPI();
|
const { mutateAsync } = useMutationAPI();
|
||||||
@@ -23,6 +23,10 @@ function DebouncedWolClient({ wolClient }: any) {
|
|||||||
const [client, setClient] = useState<any>(wolClient);
|
const [client, setClient] = useState<any>(wolClient);
|
||||||
const [update, setUpdate] = useState({});
|
const [update, setUpdate] = useState({});
|
||||||
const [debounced] = useDebouncedValue(update, 1000);
|
const [debounced] = useDebouncedValue(update, 1000);
|
||||||
|
const handleClose = () => {
|
||||||
|
setIsOpen(false);
|
||||||
|
closeModal();
|
||||||
|
};
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (Object.keys(debounced).length) {
|
if (Object.keys(debounced).length) {
|
||||||
@@ -40,7 +44,7 @@ function DebouncedWolClient({ wolClient }: any) {
|
|||||||
<Card className={cardClasses.settingsItem} classNames={cardClasses}>
|
<Card className={cardClasses.settingsItem} classNames={cardClasses}>
|
||||||
<DeleteItemModal
|
<DeleteItemModal
|
||||||
modalOpened={modalOpened}
|
modalOpened={modalOpened}
|
||||||
handleClose={closeModal}
|
handleClose={handleClose}
|
||||||
title={'Delete WoL Client'}
|
title={'Delete WoL Client'}
|
||||||
body={
|
body={
|
||||||
<Stack gap={0} w={'100%'} h={'150px'} align='center'>
|
<Stack gap={0} w={'100%'} h={'150px'} align='center'>
|
||||||
@@ -63,7 +67,7 @@ function DebouncedWolClient({ wolClient }: any) {
|
|||||||
styles={{ label: { color: 'black' } }}
|
styles={{ label: { color: 'black' } }}
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
handleDelete(client, 'api/WolClients');
|
handleDelete(client, 'api/WolClients');
|
||||||
closeModal();
|
handleClose();
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
Delete
|
Delete
|
||||||
@@ -71,9 +75,7 @@ function DebouncedWolClient({ wolClient }: any) {
|
|||||||
<Button
|
<Button
|
||||||
color={'grey'}
|
color={'grey'}
|
||||||
styles={{ label: { color: 'black' } }}
|
styles={{ label: { color: 'black' } }}
|
||||||
onClick={() => {
|
onClick={handleClose}
|
||||||
closeModal();
|
|
||||||
}}
|
|
||||||
>
|
>
|
||||||
Cancel
|
Cancel
|
||||||
</Button>
|
</Button>
|
||||||
|
|||||||
@@ -35,6 +35,7 @@ const WolClientSettings = () => {
|
|||||||
const [modalOpened, { open: openModal, close: closeModal }] = useDisclosure(false);
|
const [modalOpened, { open: openModal, close: closeModal }] = useDisclosure(false);
|
||||||
const [searchValue, setSearchValue] = useState('');
|
const [searchValue, setSearchValue] = useState('');
|
||||||
const [debouncedSearch] = useDebouncedValue(searchValue, 500);
|
const [debouncedSearch] = useDebouncedValue(searchValue, 500);
|
||||||
|
const [isOpen, setIsOpen] = useState(false);
|
||||||
|
|
||||||
const handleClose = () => {
|
const handleClose = () => {
|
||||||
setNewWolClient(defaultWolClient);
|
setNewWolClient(defaultWolClient);
|
||||||
@@ -134,7 +135,12 @@ const WolClientSettings = () => {
|
|||||||
<Grid columns={18} w={'75%'}>
|
<Grid columns={18} w={'75%'}>
|
||||||
{wolClients?.map((client: WolClient) => (
|
{wolClients?.map((client: WolClient) => (
|
||||||
<GridCol w={'100%'} span={isMobile ? 18 : 6} key={client.id}>
|
<GridCol w={'100%'} span={isMobile ? 18 : 6} key={client.id}>
|
||||||
<Popover withArrow withOverlay withinPortal={false}>
|
<Popover
|
||||||
|
withArrow
|
||||||
|
withOverlay
|
||||||
|
withinPortal={false}
|
||||||
|
closeOnClickOutside={!isOpen}
|
||||||
|
>
|
||||||
<Popover.Target>
|
<Popover.Target>
|
||||||
<Group
|
<Group
|
||||||
onClick={(e) => {
|
onClick={(e) => {
|
||||||
@@ -146,7 +152,7 @@ const WolClientSettings = () => {
|
|||||||
</Group>
|
</Group>
|
||||||
</Popover.Target>
|
</Popover.Target>
|
||||||
<Popover.Dropdown>
|
<Popover.Dropdown>
|
||||||
<DebouncedWolClient wolClient={client} />
|
<DebouncedWolClient wolClient={client} setIsOpen={setIsOpen} />
|
||||||
</Popover.Dropdown>
|
</Popover.Dropdown>
|
||||||
</Popover>
|
</Popover>
|
||||||
</GridCol>
|
</GridCol>
|
||||||
|
|||||||
Reference in New Issue
Block a user