mirror of
https://github.com/shlinkio/shlink-web-client.git
synced 2026-03-11 18:13:47 +00:00
Merge pull request #1573 from acelaya-forks/feature/update-frontend-kit
Update shlink frontend dependencies
This commit is contained in:
33
package-lock.json
generated
33
package-lock.json
generated
@@ -16,9 +16,9 @@
|
|||||||
"@json2csv/plainjs": "^7.0.6",
|
"@json2csv/plainjs": "^7.0.6",
|
||||||
"@reduxjs/toolkit": "^2.8.2",
|
"@reduxjs/toolkit": "^2.8.2",
|
||||||
"@shlinkio/data-manipulation": "^1.0.3",
|
"@shlinkio/data-manipulation": "^1.0.3",
|
||||||
"@shlinkio/shlink-frontend-kit": "^0.9.8",
|
"@shlinkio/shlink-frontend-kit": "^0.9.10",
|
||||||
"@shlinkio/shlink-js-sdk": "^2.1.0",
|
"@shlinkio/shlink-js-sdk": "^2.1.0",
|
||||||
"@shlinkio/shlink-web-component": "^0.14.1",
|
"@shlinkio/shlink-web-component": "^0.14.2",
|
||||||
"bootstrap": "5.2.3",
|
"bootstrap": "5.2.3",
|
||||||
"bottlejs": "^2.0.1",
|
"bottlejs": "^2.0.1",
|
||||||
"clsx": "^2.1.1",
|
"clsx": "^2.1.1",
|
||||||
@@ -3509,9 +3509,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@shlinkio/shlink-frontend-kit": {
|
"node_modules/@shlinkio/shlink-frontend-kit": {
|
||||||
"version": "0.9.8",
|
"version": "0.9.10",
|
||||||
"resolved": "https://registry.npmjs.org/@shlinkio/shlink-frontend-kit/-/shlink-frontend-kit-0.9.8.tgz",
|
"resolved": "https://registry.npmjs.org/@shlinkio/shlink-frontend-kit/-/shlink-frontend-kit-0.9.10.tgz",
|
||||||
"integrity": "sha512-DA2IYNZqvXusaTgC9jsnmgkXDEGwfh8oiChz8BSSsPvLoj+Tsre2V46pFvvS4jAPL4d6EvQ2bJnRrvYdVSq3Vw==",
|
"integrity": "sha512-L1+z3imvoSXHYWaO+H39JXGg40eQW1ytY3hMIE8JUuqJYNmWWLrafmfj1MHenCWGZEhymbQnpGD1yyziy6a9Lw==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@floating-ui/react": "^0.27.12",
|
"@floating-ui/react": "^0.27.12",
|
||||||
@@ -3543,9 +3543,9 @@
|
|||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/@shlinkio/shlink-web-component": {
|
"node_modules/@shlinkio/shlink-web-component": {
|
||||||
"version": "0.14.1",
|
"version": "0.14.2",
|
||||||
"resolved": "https://registry.npmjs.org/@shlinkio/shlink-web-component/-/shlink-web-component-0.14.1.tgz",
|
"resolved": "https://registry.npmjs.org/@shlinkio/shlink-web-component/-/shlink-web-component-0.14.2.tgz",
|
||||||
"integrity": "sha512-cgi12ovvprD+0ozKYZu1ZTHzfQQa4Gaju6VOoBZuheucg8whr3NyNQ3YZKWhmqWaWeW0qK3/I3lsDGSkuWs0sQ==",
|
"integrity": "sha512-4GRT1nLuhVCGuKP8fwRv1EBtgQ2wCvpJqJ6ipYM/QKwA2uJIXChom4TDia+s4X8mESIOjV0++aoPOEr6y6H2iA==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@formkit/drag-and-drop": "^0.5.3",
|
"@formkit/drag-and-drop": "^0.5.3",
|
||||||
@@ -3572,13 +3572,12 @@
|
|||||||
"@fortawesome/free-solid-svg-icons": "^6.7.2",
|
"@fortawesome/free-solid-svg-icons": "^6.7.2",
|
||||||
"@fortawesome/react-fontawesome": "^0.2.2",
|
"@fortawesome/react-fontawesome": "^0.2.2",
|
||||||
"@reduxjs/toolkit": "^2.5.0",
|
"@reduxjs/toolkit": "^2.5.0",
|
||||||
"@shlinkio/shlink-frontend-kit": "^0.9.7",
|
"@shlinkio/shlink-frontend-kit": "^0.9.10",
|
||||||
"@shlinkio/shlink-js-sdk": "^2.0.0",
|
"@shlinkio/shlink-js-sdk": "^2.0.0",
|
||||||
"react": "^18.3 || ^19.0",
|
"react": "^18.3 || ^19.0",
|
||||||
"react-dom": "^18.3 || ^19.0",
|
"react-dom": "^18.3 || ^19.0",
|
||||||
"react-redux": "^9.2.0",
|
"react-redux": "^9.2.0",
|
||||||
"react-router": "^7.1.5",
|
"react-router": "^7.1.5"
|
||||||
"reactstrap": "^9.2.0"
|
|
||||||
},
|
},
|
||||||
"peerDependenciesMeta": {
|
"peerDependenciesMeta": {
|
||||||
"@shlinkio/shlink-js-sdk": {
|
"@shlinkio/shlink-js-sdk": {
|
||||||
@@ -14040,9 +14039,9 @@
|
|||||||
"requires": {}
|
"requires": {}
|
||||||
},
|
},
|
||||||
"@shlinkio/shlink-frontend-kit": {
|
"@shlinkio/shlink-frontend-kit": {
|
||||||
"version": "0.9.8",
|
"version": "0.9.10",
|
||||||
"resolved": "https://registry.npmjs.org/@shlinkio/shlink-frontend-kit/-/shlink-frontend-kit-0.9.8.tgz",
|
"resolved": "https://registry.npmjs.org/@shlinkio/shlink-frontend-kit/-/shlink-frontend-kit-0.9.10.tgz",
|
||||||
"integrity": "sha512-DA2IYNZqvXusaTgC9jsnmgkXDEGwfh8oiChz8BSSsPvLoj+Tsre2V46pFvvS4jAPL4d6EvQ2bJnRrvYdVSq3Vw==",
|
"integrity": "sha512-L1+z3imvoSXHYWaO+H39JXGg40eQW1ytY3hMIE8JUuqJYNmWWLrafmfj1MHenCWGZEhymbQnpGD1yyziy6a9Lw==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"@floating-ui/react": "^0.27.12",
|
"@floating-ui/react": "^0.27.12",
|
||||||
"clsx": "^2.1.1"
|
"clsx": "^2.1.1"
|
||||||
@@ -14054,9 +14053,9 @@
|
|||||||
"integrity": "sha512-K6zmA/A7Ux9hTn+ZjAm85YmMl7/v5XgZBM62syCxCsK7Tdw7Gg4+C06cZ2gUv+HWrHtv5IXsi4ax00++8Kg5vw=="
|
"integrity": "sha512-K6zmA/A7Ux9hTn+ZjAm85YmMl7/v5XgZBM62syCxCsK7Tdw7Gg4+C06cZ2gUv+HWrHtv5IXsi4ax00++8Kg5vw=="
|
||||||
},
|
},
|
||||||
"@shlinkio/shlink-web-component": {
|
"@shlinkio/shlink-web-component": {
|
||||||
"version": "0.14.1",
|
"version": "0.14.2",
|
||||||
"resolved": "https://registry.npmjs.org/@shlinkio/shlink-web-component/-/shlink-web-component-0.14.1.tgz",
|
"resolved": "https://registry.npmjs.org/@shlinkio/shlink-web-component/-/shlink-web-component-0.14.2.tgz",
|
||||||
"integrity": "sha512-cgi12ovvprD+0ozKYZu1ZTHzfQQa4Gaju6VOoBZuheucg8whr3NyNQ3YZKWhmqWaWeW0qK3/I3lsDGSkuWs0sQ==",
|
"integrity": "sha512-4GRT1nLuhVCGuKP8fwRv1EBtgQ2wCvpJqJ6ipYM/QKwA2uJIXChom4TDia+s4X8mESIOjV0++aoPOEr6y6H2iA==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"@formkit/drag-and-drop": "^0.5.3",
|
"@formkit/drag-and-drop": "^0.5.3",
|
||||||
"@json2csv/plainjs": "^7.0.6",
|
"@json2csv/plainjs": "^7.0.6",
|
||||||
|
|||||||
@@ -29,9 +29,9 @@
|
|||||||
"@json2csv/plainjs": "^7.0.6",
|
"@json2csv/plainjs": "^7.0.6",
|
||||||
"@reduxjs/toolkit": "^2.8.2",
|
"@reduxjs/toolkit": "^2.8.2",
|
||||||
"@shlinkio/data-manipulation": "^1.0.3",
|
"@shlinkio/data-manipulation": "^1.0.3",
|
||||||
"@shlinkio/shlink-frontend-kit": "^0.9.8",
|
"@shlinkio/shlink-frontend-kit": "^0.9.10",
|
||||||
"@shlinkio/shlink-js-sdk": "^2.1.0",
|
"@shlinkio/shlink-js-sdk": "^2.1.0",
|
||||||
"@shlinkio/shlink-web-component": "^0.14.1",
|
"@shlinkio/shlink-web-component": "^0.14.2",
|
||||||
"bootstrap": "5.2.3",
|
"bootstrap": "5.2.3",
|
||||||
"bottlejs": "^2.0.1",
|
"bottlejs": "^2.0.1",
|
||||||
"clsx": "^2.1.1",
|
"clsx": "^2.1.1",
|
||||||
|
|||||||
@@ -61,7 +61,7 @@ const App: FCWithDeps<AppProps, AppDeps> = (
|
|||||||
}, [settings.ui?.theme]);
|
}, [settings.ui?.theme]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="tw:px-3 tw:h-full">
|
<div className="tw:h-full">
|
||||||
<MainHeader />
|
<MainHeader />
|
||||||
|
|
||||||
<div className="tw:h-full tw:pt-(--header-height)">
|
<div className="tw:h-full tw:pt-(--header-height)">
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ interface AppUpdateBannerProps {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export const AppUpdateBanner: FC<AppUpdateBannerProps> = ({ isOpen, onClose, forceUpdate }) => {
|
export const AppUpdateBanner: FC<AppUpdateBannerProps> = ({ isOpen, onClose, forceUpdate }) => {
|
||||||
const [isUpdating,, setUpdating] = useToggle();
|
const { flag: isUpdating, setToTrue: setUpdating } = useToggle(false, true);
|
||||||
const update = useCallback(() => {
|
const update = useCallback(() => {
|
||||||
setUpdating();
|
setUpdating();
|
||||||
forceUpdate();
|
forceUpdate();
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ export const Home = ({ servers }: HomeProps) => {
|
|||||||
}, [serversList, navigate]);
|
}, [serversList, navigate]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="tw:w-full">
|
<div className="tw:px-3 tw:w-full">
|
||||||
<Card className="tw:mx-auto tw:max-w-[720px] tw:overflow-hidden">
|
<Card className="tw:mx-auto tw:max-w-[720px] tw:overflow-hidden">
|
||||||
<div className="tw:flex tw:flex-col tw:md:flex-row">
|
<div className="tw:flex tw:flex-col tw:md:flex-row">
|
||||||
<div className="tw:p-6 tw:hidden tw:md:flex tw:items-center tw:w-[40%]">
|
<div className="tw:p-6 tw:hidden tw:md:flex tw:items-center tw:w-[40%]">
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ type MainHeaderDeps = {
|
|||||||
|
|
||||||
const MainHeader: FCWithDeps<unknown, MainHeaderDeps> = () => {
|
const MainHeader: FCWithDeps<unknown, MainHeaderDeps> = () => {
|
||||||
const { ServersDropdown } = useDependencies(MainHeader);
|
const { ServersDropdown } = useDependencies(MainHeader);
|
||||||
const [isNotCollapsed, toggleCollapse, , collapse] = useToggle();
|
const { flag: isNotCollapsed, toggle: toggleCollapse, setToFalse: collapse } = useToggle(false, true);
|
||||||
const location = useLocation();
|
const location = useLocation();
|
||||||
const { pathname } = location;
|
const { pathname } = location;
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ export type NoMenuLayoutProps = PropsWithChildren & {
|
|||||||
};
|
};
|
||||||
|
|
||||||
export const NoMenuLayout: FC<NoMenuLayoutProps> = ({ children, className }) => (
|
export const NoMenuLayout: FC<NoMenuLayoutProps> = ({ children, className }) => (
|
||||||
<div className={clsx('tw:container tw:mx-auto tw:p-5 tw:pt-8 tw:max-md:p-0 tw:max-md:py-4', className)}>
|
<div className={clsx('tw:container tw:mx-auto tw:p-5 tw:pt-8 tw:max-md:p-3 tw:max-md:py-4', className)}>
|
||||||
{children}
|
{children}
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -6,10 +6,9 @@ import {
|
|||||||
faPlug as connectIcon,
|
faPlug as connectIcon,
|
||||||
} from '@fortawesome/free-solid-svg-icons';
|
} from '@fortawesome/free-solid-svg-icons';
|
||||||
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
|
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
|
||||||
import { RowDropdownBtn, useToggle } from '@shlinkio/shlink-frontend-kit';
|
import { useToggle } from '@shlinkio/shlink-frontend-kit';
|
||||||
|
import { RowDropdown } from '@shlinkio/shlink-frontend-kit/tailwind';
|
||||||
import type { FC } from 'react';
|
import type { FC } from 'react';
|
||||||
import { Link } from 'react-router';
|
|
||||||
import { DropdownItem } from 'reactstrap';
|
|
||||||
import type { FCWithDeps } from '../container/utils';
|
import type { FCWithDeps } from '../container/utils';
|
||||||
import { componentFactory, useDependencies } from '../container/utils';
|
import { componentFactory, useDependencies } from '../container/utils';
|
||||||
import type { ServerWithId } from './data';
|
import type { ServerWithId } from './data';
|
||||||
@@ -31,28 +30,28 @@ const ManageServersRowDropdown: FCWithDeps<ManageServersRowDropdownConnectProps,
|
|||||||
{ server, setAutoConnect },
|
{ server, setAutoConnect },
|
||||||
) => {
|
) => {
|
||||||
const { DeleteServerModal } = useDependencies(ManageServersRowDropdown);
|
const { DeleteServerModal } = useDependencies(ManageServersRowDropdown);
|
||||||
const [isModalOpen,, showModal, hideModal] = useToggle();
|
const { flag: isModalOpen, setToTrue: showModal, setToFalse: hideModal } = useToggle(false, true);
|
||||||
const serverUrl = `/server/${server.id}`;
|
const serverUrl = `/server/${server.id}`;
|
||||||
const { autoConnect: isAutoConnect } = server;
|
const { autoConnect: isAutoConnect } = server;
|
||||||
const autoConnectIcon = isAutoConnect ? toggleOffIcon : toggleOnIcon;
|
const autoConnectIcon = isAutoConnect ? toggleOffIcon : toggleOnIcon;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<RowDropdownBtn minWidth={isAutoConnect ? 210 : 170}>
|
<RowDropdown menuAlignment="right">
|
||||||
<DropdownItem tag={Link} to={serverUrl}>
|
<RowDropdown.Item to={serverUrl} className="tw:gap-1.5">
|
||||||
<FontAwesomeIcon icon={connectIcon} fixedWidth /> Connect
|
<FontAwesomeIcon icon={connectIcon} fixedWidth /> Connect
|
||||||
</DropdownItem>
|
</RowDropdown.Item>
|
||||||
<DropdownItem tag={Link} to={`${serverUrl}/edit`}>
|
<RowDropdown.Item to={`${serverUrl}/edit`} className="tw:gap-1.5">
|
||||||
<FontAwesomeIcon icon={editIcon} fixedWidth /> Edit server
|
<FontAwesomeIcon icon={editIcon} fixedWidth /> Edit server
|
||||||
</DropdownItem>
|
</RowDropdown.Item>
|
||||||
<DropdownItem onClick={() => setAutoConnect(server, !isAutoConnect)}>
|
<RowDropdown.Item onClick={() => setAutoConnect(server, !isAutoConnect)} className="tw:gap-1.5">
|
||||||
<FontAwesomeIcon icon={autoConnectIcon} fixedWidth /> {isAutoConnect ? 'Do not a' : 'A'}uto-connect
|
<FontAwesomeIcon icon={autoConnectIcon} fixedWidth /> {isAutoConnect ? 'Do not a' : 'A'}uto-connect
|
||||||
</DropdownItem>
|
</RowDropdown.Item>
|
||||||
<DropdownItem divider tag="hr" />
|
<RowDropdown.Separator />
|
||||||
<DropdownItem className="tw:text-danger" onClick={showModal}>
|
<RowDropdown.Item className="tw:[&]:text-danger tw:gap-1.5" onClick={showModal}>
|
||||||
<FontAwesomeIcon icon={deleteIcon} fixedWidth /> Remove server
|
<FontAwesomeIcon icon={deleteIcon} fixedWidth /> Remove server
|
||||||
</DropdownItem>
|
</RowDropdown.Item>
|
||||||
</RowDropdownBtn>
|
</RowDropdown>
|
||||||
|
|
||||||
<DeleteServerModal server={server} open={isModalOpen} onClose={hideModal} />
|
<DeleteServerModal server={server} open={isModalOpen} onClose={hideModal} />
|
||||||
</>
|
</>
|
||||||
|
|||||||
@@ -3,18 +3,19 @@
|
|||||||
exports[`<ManageServersRowDropdown /> > renders expected size and icon 1`] = `
|
exports[`<ManageServersRowDropdown /> > renders expected size and icon 1`] = `
|
||||||
<div>
|
<div>
|
||||||
<div
|
<div
|
||||||
class="dropdown"
|
class="tw:relative tw:inline-block"
|
||||||
>
|
>
|
||||||
<button
|
<button
|
||||||
|
aria-controls="«r9»"
|
||||||
aria-expanded="false"
|
aria-expanded="false"
|
||||||
aria-haspopup="true"
|
aria-haspopup="true"
|
||||||
aria-label="Options"
|
aria-label="Options"
|
||||||
class="dropdown-btn__toggle btn btn-primary btn-sm"
|
class="tw:flex tw:items-center tw:rounded-md tw:focus-ring tw:cursor-pointer tw:border tw:border-lm-border tw:dark:border-dm-border tw:bg-lm-primary tw:dark:bg-dm-primary tw:group-[&]/card:bg-lm-input tw:group-[&]/card:dark:bg-dm-input tw:px-3 tw:py-1.5 tw:gap-x-2"
|
||||||
type="button"
|
type="button"
|
||||||
>
|
>
|
||||||
<svg
|
<svg
|
||||||
aria-hidden="true"
|
aria-hidden="true"
|
||||||
class="svg-inline--fa fa-ellipsis-vertical px-1"
|
class="svg-inline--fa fa-ellipsis-vertical "
|
||||||
data-icon="ellipsis-vertical"
|
data-icon="ellipsis-vertical"
|
||||||
data-prefix="fas"
|
data-prefix="fas"
|
||||||
focusable="false"
|
focusable="false"
|
||||||
@@ -28,14 +29,6 @@ exports[`<ManageServersRowDropdown /> > renders expected size and icon 1`] = `
|
|||||||
/>
|
/>
|
||||||
</svg>
|
</svg>
|
||||||
</button>
|
</button>
|
||||||
<div
|
|
||||||
aria-hidden="true"
|
|
||||||
class="w-100 dropdown-menu dropdown-menu-end"
|
|
||||||
data-bs-popper="static"
|
|
||||||
role="menu"
|
|
||||||
style="min-width: 210px;"
|
|
||||||
tabindex="-1"
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
<span>
|
<span>
|
||||||
DeleteServerModal
|
DeleteServerModal
|
||||||
@@ -47,18 +40,19 @@ exports[`<ManageServersRowDropdown /> > renders expected size and icon 1`] = `
|
|||||||
exports[`<ManageServersRowDropdown /> > renders expected size and icon 2`] = `
|
exports[`<ManageServersRowDropdown /> > renders expected size and icon 2`] = `
|
||||||
<div>
|
<div>
|
||||||
<div
|
<div
|
||||||
class="dropdown"
|
class="tw:relative tw:inline-block"
|
||||||
>
|
>
|
||||||
<button
|
<button
|
||||||
|
aria-controls="«rb»"
|
||||||
aria-expanded="false"
|
aria-expanded="false"
|
||||||
aria-haspopup="true"
|
aria-haspopup="true"
|
||||||
aria-label="Options"
|
aria-label="Options"
|
||||||
class="dropdown-btn__toggle btn btn-primary btn-sm"
|
class="tw:flex tw:items-center tw:rounded-md tw:focus-ring tw:cursor-pointer tw:border tw:border-lm-border tw:dark:border-dm-border tw:bg-lm-primary tw:dark:bg-dm-primary tw:group-[&]/card:bg-lm-input tw:group-[&]/card:dark:bg-dm-input tw:px-3 tw:py-1.5 tw:gap-x-2"
|
||||||
type="button"
|
type="button"
|
||||||
>
|
>
|
||||||
<svg
|
<svg
|
||||||
aria-hidden="true"
|
aria-hidden="true"
|
||||||
class="svg-inline--fa fa-ellipsis-vertical px-1"
|
class="svg-inline--fa fa-ellipsis-vertical "
|
||||||
data-icon="ellipsis-vertical"
|
data-icon="ellipsis-vertical"
|
||||||
data-prefix="fas"
|
data-prefix="fas"
|
||||||
focusable="false"
|
focusable="false"
|
||||||
@@ -72,14 +66,6 @@ exports[`<ManageServersRowDropdown /> > renders expected size and icon 2`] = `
|
|||||||
/>
|
/>
|
||||||
</svg>
|
</svg>
|
||||||
</button>
|
</button>
|
||||||
<div
|
|
||||||
aria-hidden="true"
|
|
||||||
class="w-100 dropdown-menu dropdown-menu-end"
|
|
||||||
data-bs-popper="static"
|
|
||||||
role="menu"
|
|
||||||
style="min-width: 170px;"
|
|
||||||
tabindex="-1"
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
<span>
|
<span>
|
||||||
DeleteServerModal
|
DeleteServerModal
|
||||||
|
|||||||
Reference in New Issue
Block a user