fix: preserve hidden tool visibility
This commit is contained in:
@@ -5,4 +5,4 @@ TRAEFIK_CERT_RESOLVER=netcup
|
|||||||
|
|
||||||
# Keep these two values paired when deploying a newer published toolbox release.
|
# Keep these two values paired when deploying a newer published toolbox release.
|
||||||
TOOLBOX_RELEASE_VERSION=0.4.1
|
TOOLBOX_RELEASE_VERSION=0.4.1
|
||||||
TOOLBOX_RELEASE_SHA256=36133af8d2b3a7084874303a88c62a5581950c51e9e4786b985fe7ea48f71f0d
|
TOOLBOX_RELEASE_SHA256=7d8907990a8b91c2bfda48d007fd8136e95222858db8f51780cd10f4165e9124
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ ARG NGINX_IMAGE=nginxinc/nginx-unprivileged:1.31.3-alpine@sha256:18d67281256ded3
|
|||||||
FROM ${NGINX_IMAGE} AS release
|
FROM ${NGINX_IMAGE} AS release
|
||||||
|
|
||||||
ARG TOOLBOX_RELEASE_VERSION=0.4.1
|
ARG TOOLBOX_RELEASE_VERSION=0.4.1
|
||||||
ARG TOOLBOX_RELEASE_SHA256=36133af8d2b3a7084874303a88c62a5581950c51e9e4786b985fe7ea48f71f0d
|
ARG TOOLBOX_RELEASE_SHA256=7d8907990a8b91c2bfda48d007fd8136e95222858db8f51780cd10f4165e9124
|
||||||
ARG TOOLBOX_RELEASE_BASE_URL=https://git.add-ideas.de/zemion/toolbox-portal/releases/download
|
ARG TOOLBOX_RELEASE_BASE_URL=https://git.add-ideas.de/zemion/toolbox-portal/releases/download
|
||||||
|
|
||||||
RUN set -eu; \
|
RUN set -eu; \
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ services:
|
|||||||
dockerfile: Containerfile.release
|
dockerfile: Containerfile.release
|
||||||
args:
|
args:
|
||||||
TOOLBOX_RELEASE_VERSION: "${TOOLBOX_RELEASE_VERSION:-0.4.1}"
|
TOOLBOX_RELEASE_VERSION: "${TOOLBOX_RELEASE_VERSION:-0.4.1}"
|
||||||
TOOLBOX_RELEASE_SHA256: "${TOOLBOX_RELEASE_SHA256:-36133af8d2b3a7084874303a88c62a5581950c51e9e4786b985fe7ea48f71f0d}"
|
TOOLBOX_RELEASE_SHA256: "${TOOLBOX_RELEASE_SHA256:-7d8907990a8b91c2bfda48d007fd8136e95222858db8f51780cd10f4165e9124}"
|
||||||
image: "git.add-ideas.de/zemion/toolbox:${TOOLBOX_RELEASE_VERSION:-0.4.1}"
|
image: "git.add-ideas.de/zemion/toolbox:${TOOLBOX_RELEASE_VERSION:-0.4.1}"
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
read_only: true
|
read_only: true
|
||||||
|
|||||||
@@ -124,6 +124,34 @@ describe('portal UI', () => {
|
|||||||
).not.toBeInTheDocument();
|
).not.toBeInTheDocument();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('keeps remaining hidden tools visible while editing the hidden set', async () => {
|
||||||
|
vi.stubGlobal('fetch', vi.fn(catalogueFetch()));
|
||||||
|
const user = userEvent.setup();
|
||||||
|
render(<App />);
|
||||||
|
await screen.findByRole('heading', { name: 'PDF Workbench' });
|
||||||
|
|
||||||
|
await user.click(
|
||||||
|
screen.getByRole('button', { name: 'Hide PDF Workbench' })
|
||||||
|
);
|
||||||
|
const showHidden = screen.getByRole('checkbox', {
|
||||||
|
name: 'Show hidden (1)',
|
||||||
|
});
|
||||||
|
await user.click(showHidden);
|
||||||
|
await user.click(
|
||||||
|
screen.getByRole('button', { name: 'Hide XSLT Workbench' })
|
||||||
|
);
|
||||||
|
expect(showHidden).toHaveAccessibleName('Show hidden (2)');
|
||||||
|
await user.click(
|
||||||
|
screen.getByRole('button', { name: 'Show PDF Workbench' })
|
||||||
|
);
|
||||||
|
|
||||||
|
expect(showHidden).toBeChecked();
|
||||||
|
expect(showHidden).toHaveAccessibleName('Show hidden (1)');
|
||||||
|
expect(
|
||||||
|
screen.getByRole('heading', { name: 'XSLT Workbench' })
|
||||||
|
).toBeInTheDocument();
|
||||||
|
});
|
||||||
|
|
||||||
it('clears search filters without revealing hidden tools', async () => {
|
it('clears search filters without revealing hidden tools', async () => {
|
||||||
vi.stubGlobal('fetch', vi.fn(catalogueFetch()));
|
vi.stubGlobal('fetch', vi.fn(catalogueFetch()));
|
||||||
const user = userEvent.setup();
|
const user = userEvent.setup();
|
||||||
|
|||||||
@@ -123,7 +123,8 @@ export default function App() {
|
|||||||
const [preferences, setPreferences, storageAvailable] = usePreferences();
|
const [preferences, setPreferences, storageAvailable] = usePreferences();
|
||||||
const closeHelp = useCallback(() => setHelpOpen(false), []);
|
const closeHelp = useCallback(() => setHelpOpen(false), []);
|
||||||
const showHidden =
|
const showHidden =
|
||||||
preferences.hidden.length > 0 && shownHiddenIds === preferences.hidden;
|
preferences.hidden.length > 0 &&
|
||||||
|
shownHiddenIds?.some((id) => preferences.hidden.includes(id)) === true;
|
||||||
const sensors = useSensors(
|
const sensors = useSensors(
|
||||||
useSensor(PointerSensor, { activationConstraint: { distance: 8 } }),
|
useSensor(PointerSensor, { activationConstraint: { distance: 8 } }),
|
||||||
useSensor(KeyboardSensor, { coordinateGetter: sortableKeyboardCoordinates })
|
useSensor(KeyboardSensor, { coordinateGetter: sortableKeyboardCoordinates })
|
||||||
@@ -205,6 +206,9 @@ export default function App() {
|
|||||||
}));
|
}));
|
||||||
|
|
||||||
function toggleListItem(field: 'pinned' | 'hidden', id: string) {
|
function toggleListItem(field: 'pinned' | 'hidden', id: string) {
|
||||||
|
if (field === 'hidden' && showHidden && !preferences.hidden.includes(id)) {
|
||||||
|
setShownHiddenIds((current) => [...new Set([...(current ?? []), id])]);
|
||||||
|
}
|
||||||
setPreferences((current) => ({
|
setPreferences((current) => ({
|
||||||
...current,
|
...current,
|
||||||
[field]: current[field].includes(id)
|
[field]: current[field].includes(id)
|
||||||
@@ -332,7 +336,7 @@ export default function App() {
|
|||||||
disabled={preferences.hidden.length === 0}
|
disabled={preferences.hidden.length === 0}
|
||||||
onChange={(event) =>
|
onChange={(event) =>
|
||||||
setShownHiddenIds(
|
setShownHiddenIds(
|
||||||
event.target.checked ? preferences.hidden : null
|
event.target.checked ? [...preferences.hidden] : null
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
|
|||||||
Reference in New Issue
Block a user