@actuate-media/cms-admin 0.40.0 → 0.40.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/__tests__/views/general-settings.render.test.js +23 -2
- package/dist/__tests__/views/general-settings.render.test.js.map +1 -1
- package/dist/views/settings/SeoRobotsDefaultsCard.d.ts.map +1 -1
- package/dist/views/settings/SeoRobotsDefaultsCard.js +2 -1
- package/dist/views/settings/SeoRobotsDefaultsCard.js.map +1 -1
- package/dist/views/settings/components.d.ts.map +1 -1
- package/dist/views/settings/components.js +1 -1
- package/dist/views/settings/components.js.map +1 -1
- package/package.json +2 -2
- package/src/__tests__/views/general-settings.render.test.tsx +33 -2
- package/src/views/settings/SeoRobotsDefaultsCard.tsx +9 -0
- package/src/views/settings/components.tsx +5 -0
|
@@ -5,12 +5,13 @@ import { fireEvent, render, screen, waitFor, within } from '@testing-library/rea
|
|
|
5
5
|
// Own the three backends the General tab reads: the `settings` global
|
|
6
6
|
// (site info / locale), the shared `/seo/config` (site URL + robots), and the
|
|
7
7
|
// computed `/seo/index-status` (the status card).
|
|
8
|
+
// Mutable per-test environment so individual tests can simulate production.
|
|
9
|
+
let statusEnvironment = 'preview';
|
|
8
10
|
const STATUS = {
|
|
9
11
|
status: 'protected',
|
|
10
12
|
severity: 'warning',
|
|
11
13
|
label: 'Protected',
|
|
12
14
|
description: 'Non-production environment is noindexed. Production remains unaffected.',
|
|
13
|
-
environment: 'preview',
|
|
14
15
|
checks: [
|
|
15
16
|
{ key: 'environment', label: 'Environment', value: 'Preview', status: 'pass' },
|
|
16
17
|
{ key: 'siteUrl', label: 'Site URL configured', value: 'Yes', status: 'pass' },
|
|
@@ -52,7 +53,7 @@ const cmsApi = vi.fn(async (endpoint, options) => {
|
|
|
52
53
|
};
|
|
53
54
|
}
|
|
54
55
|
if (endpoint === '/seo/index-status' && method === 'GET') {
|
|
55
|
-
return { data: STATUS, status: 200 };
|
|
56
|
+
return { data: { ...STATUS, environment: statusEnvironment }, status: 200 };
|
|
56
57
|
}
|
|
57
58
|
return { data: {}, status: 200 };
|
|
58
59
|
});
|
|
@@ -60,6 +61,7 @@ vi.mock('../../lib/api.js', () => ({ cmsApi: (e, o) => cmsApi(e, o) }));
|
|
|
60
61
|
const { GeneralSettingsTab } = await import('../../views/settings/GeneralSettingsTab.js');
|
|
61
62
|
beforeEach(() => {
|
|
62
63
|
cmsApi.mockClear();
|
|
64
|
+
statusEnvironment = 'preview';
|
|
63
65
|
});
|
|
64
66
|
describe('GeneralSettingsTab', () => {
|
|
65
67
|
it('renders the index status pill, loaded site info, and a clean (disabled) save bar', async () => {
|
|
@@ -96,6 +98,25 @@ describe('GeneralSettingsTab', () => {
|
|
|
96
98
|
fireEvent.click(screen.getByRole('switch', { name: 'Noindex Non-Production Environments' }));
|
|
97
99
|
expect(await screen.findByText(/Preview and staging environments may become indexable/i)).toBeTruthy();
|
|
98
100
|
});
|
|
101
|
+
it('shows an "Unsaved changes" hint when a toggle is flipped but not yet saved', async () => {
|
|
102
|
+
render(_jsx(GeneralSettingsTab, { role: "ADMIN" }));
|
|
103
|
+
await screen.findByLabelText('Site Title');
|
|
104
|
+
expect(screen.queryByText('Unsaved changes')).toBeNull();
|
|
105
|
+
fireEvent.click(screen.getByRole('switch', { name: 'Default No Follow' }));
|
|
106
|
+
expect(await screen.findByText('Unsaved changes')).toBeTruthy();
|
|
107
|
+
expect(screen.getByRole('button', { name: 'Save Changes' }).disabled).toBe(false);
|
|
108
|
+
});
|
|
109
|
+
it('explains that noindex-non-production cannot affect a production deployment', async () => {
|
|
110
|
+
statusEnvironment = 'production';
|
|
111
|
+
render(_jsx(GeneralSettingsTab, { role: "ADMIN" }));
|
|
112
|
+
await screen.findByLabelText('Site Title');
|
|
113
|
+
expect(screen.getByText(/this setting does not change pages served here/i)).toBeTruthy();
|
|
114
|
+
});
|
|
115
|
+
it('hides the production note on non-production environments', async () => {
|
|
116
|
+
render(_jsx(GeneralSettingsTab, { role: "ADMIN" }));
|
|
117
|
+
await screen.findByLabelText('Site Title');
|
|
118
|
+
expect(screen.queryByText(/this setting does not change pages served here/i)).toBeNull();
|
|
119
|
+
});
|
|
99
120
|
it('is read-only for non-admins', async () => {
|
|
100
121
|
render(_jsx(GeneralSettingsTab, { role: "EDITOR" }));
|
|
101
122
|
expect(await screen.findByText(/read-only access to settings/i)).toBeTruthy();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"general-settings.render.test.js","sourceRoot":"","sources":["../../../src/__tests__/views/general-settings.render.test.tsx"],"names":[],"mappings":";AAAA,gCAAgC;AAChC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAEnF,sEAAsE;AACtE,8EAA8E;AAC9E,kDAAkD;AAClD,MAAM,MAAM,GAAG;IACb,MAAM,EAAE,WAAW;IACnB,QAAQ,EAAE,SAAS;IACnB,KAAK,EAAE,WAAW;IAClB,WAAW,EAAE,yEAAyE;IACtF,
|
|
1
|
+
{"version":3,"file":"general-settings.render.test.js","sourceRoot":"","sources":["../../../src/__tests__/views/general-settings.render.test.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SeoRobotsDefaultsCard.d.ts","sourceRoot":"","sources":["../../../src/views/settings/SeoRobotsDefaultsCard.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SeoRobotsDefaultsCard.d.ts","sourceRoot":"","sources":["../../../src/views/settings/SeoRobotsDefaultsCard.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAEnF,UAAU,0BAA0B;IAClC,IAAI,EAAE,mBAAmB,CAAA;IACzB,QAAQ,EAAE,CAAC,CAAC,SAAS,MAAM,mBAAmB,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,mBAAmB,CAAC,CAAC,CAAC,KAAK,IAAI,CAAA;IAC9F,YAAY,EAAE,OAAO,CAAA;IACrB,WAAW,EAAE,eAAe,GAAG,IAAI,CAAA;IACnC,OAAO,EAAE,OAAO,CAAA;IAChB,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;CACpC;AAUD,wBAAgB,qBAAqB,CAAC,EACpC,IAAI,EACJ,QAAQ,EACR,YAAY,EACZ,WAAW,EACX,OAAO,EACP,UAAU,GACX,EAAE,0BAA0B,2CA4G5B"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { useState } from 'react';
|
|
4
|
+
import { Info } from 'lucide-react';
|
|
4
5
|
import { ConfirmDangerousSettingDialog, SettingsCard, SettingsToggleRow } from './components.js';
|
|
5
6
|
export function SeoRobotsDefaultsCard({ form, setField, isProduction, indexStatus, canEdit, onNavigate, }) {
|
|
6
7
|
const [pending, setPending] = useState(null);
|
|
@@ -32,7 +33,7 @@ export function SeoRobotsDefaultsCard({ form, setField, isProduction, indexStatu
|
|
|
32
33
|
const effectiveProd = form.defaultNoIndex ? 'Blocked' : 'Indexable';
|
|
33
34
|
const sitemapCheck = indexStatus?.checks.find((c) => c.key === 'sitemap');
|
|
34
35
|
const sitemapStatus = sitemapCheck ? (sitemapCheck.value === 'Yes' ? 'Enabled' : 'Disabled') : '—';
|
|
35
|
-
return (_jsxs(SettingsCard, { title: "SEO & Robots Defaults", description: "Set the site-wide default for search engine indexing. Individual pages can inherit or override these rules in their SEO panel. These share the same configuration as the SEO section.", children: [_jsxs("div", { className: "space-y-4", children: [_jsx(SettingsToggleRow, { label: "Default No Index", description: "Ask search engines not to index pages unless a page explicitly allows indexing.", checked: form.defaultNoIndex, disabled: !canEdit, onChange: (v) => requestToggle('defaultNoIndex', v) }), _jsx(SettingsToggleRow, { label: "Default No Follow", description: "Ask search engines not to follow page links unless a page explicitly allows following.", checked: form.defaultNoFollow, disabled: !canEdit, onChange: (v) => requestToggle('defaultNoFollow', v) }), _jsx(SettingsToggleRow, { label: "Noindex Non-Production Environments", description: "Force noindex when the deployed environment is not production.", checked: form.noIndexNonProduction, disabled: !canEdit, onChange: (v) => requestToggle('noIndexNonProduction', v) })] }), _jsxs("div", { className: "border-border mt-4 space-y-2 border-t pt-4", children: [_jsx(SummaryRow, { label: "Effective production indexing", value: effectiveProd, danger: form.defaultNoIndex }), _jsx(SummaryRow, { label: "Effective current environment", value: indexStatus?.label ?? '—', danger: indexStatus?.severity === 'danger' }), _jsx(SummaryRow, { label: "Sitemap status", value: sitemapStatus }), onNavigate && (_jsx("button", { type: "button", onClick: () => onNavigate('/seo?tab=technical'), className: "text-brand mt-1 text-sm hover:underline", children: "Manage advanced robots.txt & sitemap in SEO \u2192" }))] }), _jsx(ConfirmDangerousSettingDialog, { open: pending !== null, title: pending?.title ?? '', description: pending?.description ?? '', confirmLabel: pending?.confirmLabel, onConfirm: () => {
|
|
36
|
+
return (_jsxs(SettingsCard, { title: "SEO & Robots Defaults", description: "Set the site-wide default for search engine indexing. Individual pages can inherit or override these rules in their SEO panel. These share the same configuration as the SEO section.", children: [_jsxs("div", { className: "space-y-4", children: [_jsx(SettingsToggleRow, { label: "Default No Index", description: "Ask search engines not to index pages unless a page explicitly allows indexing.", checked: form.defaultNoIndex, disabled: !canEdit, onChange: (v) => requestToggle('defaultNoIndex', v) }), _jsx(SettingsToggleRow, { label: "Default No Follow", description: "Ask search engines not to follow page links unless a page explicitly allows following.", checked: form.defaultNoFollow, disabled: !canEdit, onChange: (v) => requestToggle('defaultNoFollow', v) }), _jsx(SettingsToggleRow, { label: "Noindex Non-Production Environments", description: "Force noindex when the deployed environment is not production.", checked: form.noIndexNonProduction, disabled: !canEdit, onChange: (v) => requestToggle('noIndexNonProduction', v) }), isProduction && (_jsxs("p", { className: "text-muted-foreground flex items-start gap-2 text-sm", children: [_jsx(Info, { size: 16, className: "mt-0.5 shrink-0", "aria-hidden": "true" }), "This deployment is running in the production environment, so this setting does not change pages served here \u2014 it forces noindex only on preview, staging, and development deployments. To block search engines from this site, use Default No Index."] }))] }), _jsxs("div", { className: "border-border mt-4 space-y-2 border-t pt-4", children: [_jsx(SummaryRow, { label: "Effective production indexing", value: effectiveProd, danger: form.defaultNoIndex }), _jsx(SummaryRow, { label: "Effective current environment", value: indexStatus?.label ?? '—', danger: indexStatus?.severity === 'danger' }), _jsx(SummaryRow, { label: "Sitemap status", value: sitemapStatus }), onNavigate && (_jsx("button", { type: "button", onClick: () => onNavigate('/seo?tab=technical'), className: "text-brand mt-1 text-sm hover:underline", children: "Manage advanced robots.txt & sitemap in SEO \u2192" }))] }), _jsx(ConfirmDangerousSettingDialog, { open: pending !== null, title: pending?.title ?? '', description: pending?.description ?? '', confirmLabel: pending?.confirmLabel, onConfirm: () => {
|
|
36
37
|
if (pending)
|
|
37
38
|
setField(pending.field, pending.value);
|
|
38
39
|
setPending(null);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SeoRobotsDefaultsCard.js","sourceRoot":"","sources":["../../../src/views/settings/SeoRobotsDefaultsCard.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAChC,OAAO,EAAE,6BAA6B,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAoBhG,MAAM,UAAU,qBAAqB,CAAC,EACpC,IAAI,EACJ,QAAQ,EACR,YAAY,EACZ,WAAW,EACX,OAAO,EACP,UAAU,GACiB;IAC3B,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAuB,IAAI,CAAC,CAAA;IAElE,4EAA4E;IAC5E,+DAA+D;IAC/D,SAAS,aAAa,CAAC,KAAgC,EAAE,KAAc;QACrE,IAAI,KAAK,KAAK,gBAAgB,IAAI,KAAK,IAAI,YAAY,EAAE,CAAC;YACxD,UAAU,CAAC;gBACT,KAAK;gBACL,KAAK;gBACL,KAAK,EAAE,iDAAiD;gBACxD,WAAW,EACT,kJAAkJ;gBACpJ,YAAY,EAAE,iBAAiB;aAChC,CAAC,CAAA;YACF,OAAM;QACR,CAAC;QACD,IAAI,KAAK,KAAK,sBAAsB,IAAI,CAAC,KAAK,EAAE,CAAC;YAC/C,UAAU,CAAC;gBACT,KAAK;gBACL,KAAK;gBACL,KAAK,EAAE,kDAAkD;gBACzD,WAAW,EACT,8HAA8H;gBAChI,YAAY,EAAE,UAAU;aACzB,CAAC,CAAA;YACF,OAAM;QACR,CAAC;QACD,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;IACxB,CAAC;IAED,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAA;IACnE,MAAM,YAAY,GAAG,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,SAAS,CAAC,CAAA;IACzE,MAAM,aAAa,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA;IAElG,OAAO,CACL,MAAC,YAAY,IACX,KAAK,EAAC,uBAAuB,EAC7B,WAAW,EAAC,uLAAuL,aAEnM,eAAK,SAAS,EAAC,WAAW,aACxB,KAAC,iBAAiB,IAChB,KAAK,EAAC,kBAAkB,EACxB,WAAW,EAAC,iFAAiF,EAC7F,OAAO,EAAE,IAAI,CAAC,cAAc,EAC5B,QAAQ,EAAE,CAAC,OAAO,EAClB,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,gBAAgB,EAAE,CAAC,CAAC,GACnD,EACF,KAAC,iBAAiB,IAChB,KAAK,EAAC,mBAAmB,EACzB,WAAW,EAAC,wFAAwF,EACpG,OAAO,EAAE,IAAI,CAAC,eAAe,EAC7B,QAAQ,EAAE,CAAC,OAAO,EAClB,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,iBAAiB,EAAE,CAAC,CAAC,GACpD,EACF,KAAC,iBAAiB,IAChB,KAAK,EAAC,qCAAqC,EAC3C,WAAW,EAAC,gEAAgE,EAC5E,OAAO,EAAE,IAAI,CAAC,oBAAoB,EAClC,QAAQ,EAAE,CAAC,OAAO,EAClB,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,sBAAsB,EAAE,CAAC,CAAC,GACzD,
|
|
1
|
+
{"version":3,"file":"SeoRobotsDefaultsCard.js","sourceRoot":"","sources":["../../../src/views/settings/SeoRobotsDefaultsCard.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"components.d.ts","sourceRoot":"","sources":["../../../src/views/settings/components.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAS,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAC7C,OAAO,KAAK,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAEtF;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,EAC3B,KAAK,EACL,WAAW,EACX,OAAO,EACP,QAAQ,EACR,SAAS,EACT,YAAY,EAAE,OAAc,GAC7B,EAAE;IACD,KAAK,EAAE,SAAS,CAAA;IAChB,WAAW,CAAC,EAAE,SAAS,CAAA;IACvB,2EAA2E;IAC3E,OAAO,CAAC,EAAE,SAAS,CAAA;IACnB,QAAQ,EAAE,SAAS,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,yEAAyE;IACzE,YAAY,CAAC,EAAE,IAAI,GAAG,IAAI,CAAA;CAC3B,2CAmBA;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,KAAK,EACL,WAAW,EACX,QAAQ,EACR,SAAS,GACV,EAAE;IACD,KAAK,EAAE,SAAS,CAAA;IAChB,WAAW,CAAC,EAAE,SAAS,CAAA;IACvB,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,2CAQA;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,KAAK,EACL,WAAW,EACX,OAAO,EACP,OAAO,EACP,OAAO,EACP,KAAgB,EAChB,SAAS,GACV,EAAE;IACD,KAAK,EAAE,SAAS,CAAA;IAChB,WAAW,CAAC,EAAE,SAAS,CAAA;IACvB,6CAA6C;IAC7C,OAAO,EAAE,SAAS,CAAA;IAClB,sEAAsE;IACtE,OAAO,CAAC,EAAE,SAAS,CAAA;IACnB,2EAA2E;IAC3E,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,mEAAmE;IACnE,KAAK,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAA;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,2CAsBA;AAUD,8DAA8D;AAC9D,wBAAgB,mBAAmB,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,CAAC,EAAE,sBAAsB,CAAA;CAAE,kDAY9E;AAED,yEAAyE;AACzE,wBAAgB,iBAAiB,CAAC,EAChC,KAAK,EACL,WAAW,EACX,OAAO,EACP,QAAQ,EACR,QAAgB,EAChB,KAAK,GACN,EAAE;IACD,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,OAAO,CAAA;IAChB,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAA;IAClC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,KAAK,CAAC,EAAE,SAAS,CAAA;CAClB,2CA6BA;AAED,4DAA4D;AAC5D,wBAAgB,yBAAyB,CAAC,EAAE,MAAM,EAAE,EAAE;IAAE,MAAM,EAAE,eAAe,EAAE,CAAA;CAAE,kDAuBlF;AAED,6DAA6D;AAC7D,wBAAgB,eAAe,CAAC,EAC9B,KAAK,EACL,OAAO,EACP,SAAS,EACT,SAAS,EACT,MAAM,EACN,OAAO,GACR,EAAE;IACD,KAAK,EAAE,OAAO,CAAA;IACd,OAAO,EAAE,OAAO,CAAA;IAChB,SAAS,EAAE,OAAO,CAAA;IAClB,SAAS,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,CAAA;IAClD,MAAM,EAAE,MAAM,IAAI,CAAA;IAClB,OAAO,EAAE,MAAM,IAAI,CAAA;CACpB,
|
|
1
|
+
{"version":3,"file":"components.d.ts","sourceRoot":"","sources":["../../../src/views/settings/components.tsx"],"names":[],"mappings":"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"}
|
|
@@ -67,7 +67,7 @@ export function SettingsValidationSummary({ issues }) {
|
|
|
67
67
|
/** Sticky footer with Reset + Save, gated on dirty state. */
|
|
68
68
|
export function SettingsSaveBar({ dirty, canEdit, hasErrors, saveState, onSave, onReset, }) {
|
|
69
69
|
const saving = saveState === 'saving';
|
|
70
|
-
return (_jsxs("div", { className: "border-border bg-background/80 sticky bottom-0 z-10 flex items-center justify-end gap-4 border-t py-3 backdrop-blur", children: [saveState === 'success' && !dirty && (_jsxs("span", { className: "text-success flex items-center gap-1.5 text-sm", "aria-live": "polite", children: [_jsx(Check, { size: 16, "aria-hidden": "true" }), " Saved"] })), _jsx("button", { type: "button", onClick: onReset, disabled: !dirty || saving, className: "text-muted-foreground hover:text-foreground rounded-md px-3 py-2 text-base transition-colors disabled:cursor-not-allowed disabled:opacity-40", children: "Reset" }), _jsxs("button", { type: "button", onClick: onSave, disabled: !canEdit || !dirty || hasErrors || saving, className: "bg-brand text-brand-foreground focus-visible:ring-ring inline-flex items-center gap-2 rounded-md px-5 py-2 text-base font-medium transition-opacity hover:opacity-90 focus-visible:ring-2 focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-50", children: [saving && _jsx(Loader2, { size: 16, className: "animate-spin", "aria-hidden": "true" }), saving ? 'Saving…' : 'Save Changes'] })] }));
|
|
70
|
+
return (_jsxs("div", { className: "border-border bg-background/80 sticky bottom-0 z-10 flex items-center justify-end gap-4 border-t py-3 backdrop-blur", children: [saveState === 'success' && !dirty && (_jsxs("span", { className: "text-success flex items-center gap-1.5 text-sm", "aria-live": "polite", children: [_jsx(Check, { size: 16, "aria-hidden": "true" }), " Saved"] })), dirty && !saving && (_jsx("span", { className: "text-muted-foreground text-sm", "aria-live": "polite", children: "Unsaved changes" })), _jsx("button", { type: "button", onClick: onReset, disabled: !dirty || saving, className: "text-muted-foreground hover:text-foreground rounded-md px-3 py-2 text-base transition-colors disabled:cursor-not-allowed disabled:opacity-40", children: "Reset" }), _jsxs("button", { type: "button", onClick: onSave, disabled: !canEdit || !dirty || hasErrors || saving, className: "bg-brand text-brand-foreground focus-visible:ring-ring inline-flex items-center gap-2 rounded-md px-5 py-2 text-base font-medium transition-opacity hover:opacity-90 focus-visible:ring-2 focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-50", children: [saving && _jsx(Loader2, { size: 16, className: "animate-spin", "aria-hidden": "true" }), saving ? 'Saving…' : 'Save Changes'] })] }));
|
|
71
71
|
}
|
|
72
72
|
/** Confirmation dialog for dangerous indexing changes. */
|
|
73
73
|
export function ConfirmDangerousSettingDialog({ open, title, description, confirmLabel = 'Continue', onConfirm, onCancel, }) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"components.js","sourceRoot":"","sources":["../../../src/views/settings/components.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,KAAK,MAAM,MAAM,wBAAwB,CAAA;AAChD,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AAClE,OAAO,EAAE,KAAK,EAAkB,MAAM,OAAO,CAAA;AAG7C;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY,CAAC,EAC3B,KAAK,EACL,WAAW,EACX,OAAO,EACP,QAAQ,EACR,SAAS,EACT,YAAY,EAAE,OAAO,GAAG,IAAI,GAU7B;IACC,MAAM,SAAS,GAAG,KAAK,EAAE,CAAA;IACzB,OAAO,CACL,sCACmB,SAAS,EAC1B,SAAS,EAAE,+CAA+C,SAAS,IAAI,EAAE,EAAE,aAE3E,kBAAQ,SAAS,EAAC,6CAA6C,aAC7D,eAAK,SAAS,EAAC,SAAS,aACtB,KAAC,OAAO,IAAC,EAAE,EAAE,SAAS,EAAE,SAAS,EAAC,qCAAqC,YACpE,KAAK,GACE,EACT,WAAW,IAAI,YAAG,SAAS,EAAC,sCAAsC,YAAE,WAAW,GAAK,IACjF,EACL,OAAO,IAAI,cAAK,SAAS,EAAC,kCAAkC,YAAE,OAAO,GAAO,IACtE,EACR,QAAQ,IACD,CACX,CAAA;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,EACjC,KAAK,EACL,WAAW,EACX,QAAQ,EACR,SAAS,GAMV;IACC,OAAO,CACL,eAAK,SAAS,EAAE,+BAA+B,SAAS,IAAI,EAAE,EAAE,aAC9D,cAAK,SAAS,EAAC,uCAAuC,YAAE,KAAK,GAAO,EACnE,WAAW,IAAI,YAAG,SAAS,EAAC,sCAAsC,YAAE,WAAW,GAAK,EACpF,QAAQ,IACL,CACP,CAAA;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAAC,EACjC,KAAK,EACL,WAAW,EACX,OAAO,EACP,OAAO,EACP,OAAO,EACP,KAAK,GAAG,QAAQ,EAChB,SAAS,GAaV;IACC,MAAM,UAAU,GAAG,6CAA6C,CAAA;IAChE,OAAO,CACL,eACE,SAAS,EAAE,8BAA8B,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,aAAa,IAAI,SAAS,IAAI,EAAE,EAAE,aAEjH,eAAK,SAAS,EAAC,iCAAiC,aAC7C,OAAO,EACR,eAAK,SAAS,EAAC,SAAS,aACrB,OAAO,CAAC,CAAC,CAAC,CACT,gBAAO,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,YAC3C,KAAK,GACA,CACT,CAAC,CAAC,CAAC,CACF,eAAM,SAAS,EAAE,UAAU,YAAG,KAAK,GAAQ,CAC5C,EACA,WAAW,IAAI,YAAG,SAAS,EAAC,sCAAsC,YAAE,WAAW,GAAK,IACjF,IACF,EACN,cAAK,SAAS,EAAC,kCAAkC,YAAE,OAAO,GAAO,IAC7D,CACP,CAAA;AACH,CAAC;AAED,MAAM,YAAY,GAAqD;IACrE,MAAM,EAAE,gBAAgB;IACxB,WAAW,EAAE,qBAAqB;IAClC,QAAQ,EAAE,UAAU;IACpB,MAAM,EAAE,gBAAgB;IACxB,QAAQ,EAAE,UAAU;CACrB,CAAA;AAED,8DAA8D;AAC9D,MAAM,UAAU,mBAAmB,CAAC,EAAE,IAAI,EAAqC;IAC7E,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,UAAU,IAAI,IAAI,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAA;IACvE,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAA;IAC7B,OAAO,CACL,gBACE,SAAS,EAAC,qHAAqH,EAC/H,KAAK,EAAE,IAAI,CAAC,MAAM,aAEjB,MAAM,IAAI,KAAC,IAAI,IAAC,IAAI,EAAE,EAAE,iBAAc,MAAM,GAAG,EAC/C,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,IACrB,CACR,CAAA;AACH,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,iBAAiB,CAAC,EAChC,KAAK,EACL,WAAW,EACX,OAAO,EACP,QAAQ,EACR,QAAQ,GAAG,KAAK,EAChB,KAAK,GAQN;IACC,OAAO,CACL,eAAK,SAAS,EAAC,wCAAwC,aACrD,eAAK,SAAS,EAAC,QAAQ,aACrB,eAAK,SAAS,EAAC,yBAAyB,aACtC,eAAM,SAAS,EAAC,uCAAuC,YAAE,KAAK,GAAQ,EACrE,KAAK,IACF,EACN,YAAG,SAAS,EAAC,sCAAsC,YAAE,WAAW,GAAK,IACjE,EACN,iBACE,IAAI,EAAC,QAAQ,EACb,IAAI,EAAC,QAAQ,kBACC,OAAO,gBACT,KAAK,EACjB,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,EACjC,SAAS,EAAE,4LACT,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,sBACzB,EAAE,YAEF,eACE,SAAS,EAAE,uFACT,OAAO,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,iBACnC,EAAE,GACF,GACK,IACL,CACP,CAAA;AACH,CAAC;AAED,4DAA4D;AAC5D,MAAM,UAAU,yBAAyB,CAAC,EAAE,MAAM,EAAiC;IACjF,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAA;IACpC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAA;IAC3D,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAA;IAC/D,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAA;IACjC,OAAO,CACL,eACE,IAAI,EAAC,OAAO,eACF,QAAQ,EAClB,SAAS,EAAE,wDACT,OAAO;YACL,CAAC,CAAC,0DAA0D;YAC5D,CAAC,CAAC,8CACN,EAAE,aAEF,KAAC,aAAa,IAAC,IAAI,EAAE,EAAE,EAAE,SAAS,EAAC,iBAAiB,iBAAa,MAAM,GAAG,EAC1E,cAAK,SAAS,EAAC,WAAW,YACvB,CAAC,GAAG,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CAC1C,sBAAgC,KAAK,CAAC,OAAO,IAArC,GAAG,KAAK,CAAC,KAAK,IAAI,CAAC,EAAE,CAAqB,CACnD,CAAC,GACE,IACF,CACP,CAAA;AACH,CAAC;AAED,6DAA6D;AAC7D,MAAM,UAAU,eAAe,CAAC,EAC9B,KAAK,EACL,OAAO,EACP,SAAS,EACT,SAAS,EACT,MAAM,EACN,OAAO,GAQR;IACC,MAAM,MAAM,GAAG,SAAS,KAAK,QAAQ,CAAA;IACrC,OAAO,CACL,eAAK,SAAS,EAAC,qHAAqH,aACjI,SAAS,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI,CACpC,gBAAM,SAAS,EAAC,gDAAgD,eAAW,QAAQ,aACjF,KAAC,KAAK,IAAC,IAAI,EAAE,EAAE,iBAAc,MAAM,GAAG,cACjC,CACR,EACD,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,CAAC,KAAK,IAAI,MAAM,EAC1B,SAAS,EAAC,8IAA8I,sBAGjJ,EACT,kBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,CAAC,OAAO,IAAI,CAAC,KAAK,IAAI,SAAS,IAAI,MAAM,EACnD,SAAS,EAAC,sQAAsQ,aAE/Q,MAAM,IAAI,KAAC,OAAO,IAAC,IAAI,EAAE,EAAE,EAAE,SAAS,EAAC,cAAc,iBAAa,MAAM,GAAG,EAC3E,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,cAAc,IAC7B,IACL,CACP,CAAA;AACH,CAAC;AAED,0DAA0D;AAC1D,MAAM,UAAU,6BAA6B,CAAC,EAC5C,IAAI,EACJ,KAAK,EACL,WAAW,EACX,YAAY,GAAG,UAAU,EACzB,SAAS,EACT,QAAQ,GAQT;IACC,OAAO,CACL,KAAC,MAAM,CAAC,IAAI,IAAC,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,QAAQ,EAAE,YAC5D,MAAC,MAAM,CAAC,MAAM,eACZ,KAAC,MAAM,CAAC,OAAO,IAAC,SAAS,EAAC,gCAAgC,GAAG,EAC7D,MAAC,MAAM,CAAC,OAAO,IAAC,SAAS,EAAC,qIAAqI,aAC7J,eAAK,SAAS,EAAC,8BAA8B,aAC3C,eAAM,SAAS,EAAC,kFAAkF,YAChG,KAAC,aAAa,IAAC,IAAI,EAAE,EAAE,iBAAc,MAAM,GAAG,GACzC,EACP,KAAC,MAAM,CAAC,KAAK,IAAC,SAAS,EAAC,qCAAqC,YAAE,KAAK,GAAgB,IAChF,EACN,KAAC,MAAM,CAAC,WAAW,IAAC,SAAS,EAAC,oCAAoC,YAC/D,WAAW,GACO,EACrB,eAAK,SAAS,EAAC,qCAAqC,aAClD,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,QAAQ,EACjB,SAAS,EAAC,uGAAuG,uBAG1G,EACT,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,SAAS,EAClB,SAAS,EAAC,2HAA2H,YAEpI,YAAY,GACN,IACL,IACS,IACH,GACJ,CACf,CAAA;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"components.js","sourceRoot":"","sources":["../../../src/views/settings/components.tsx"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@actuate-media/cms-admin",
|
|
3
|
-
"version": "0.40.
|
|
3
|
+
"version": "0.40.1",
|
|
4
4
|
"repository": {
|
|
5
5
|
"type": "git",
|
|
6
6
|
"url": "https://github.com/actuate-media/actuatecms.git",
|
|
@@ -88,7 +88,7 @@
|
|
|
88
88
|
"tailwindcss": "^4.0.0",
|
|
89
89
|
"typescript": "^5.7.0",
|
|
90
90
|
"vitest": "^4.1.0",
|
|
91
|
-
"@actuate-media/cms-core": "0.
|
|
91
|
+
"@actuate-media/cms-core": "0.58.0",
|
|
92
92
|
"@actuate-media/component-blocks": "0.2.0"
|
|
93
93
|
},
|
|
94
94
|
"scripts": {
|
|
@@ -5,12 +5,14 @@ import { fireEvent, render, screen, waitFor, within } from '@testing-library/rea
|
|
|
5
5
|
// Own the three backends the General tab reads: the `settings` global
|
|
6
6
|
// (site info / locale), the shared `/seo/config` (site URL + robots), and the
|
|
7
7
|
// computed `/seo/index-status` (the status card).
|
|
8
|
+
// Mutable per-test environment so individual tests can simulate production.
|
|
9
|
+
let statusEnvironment = 'preview'
|
|
10
|
+
|
|
8
11
|
const STATUS = {
|
|
9
12
|
status: 'protected',
|
|
10
13
|
severity: 'warning',
|
|
11
14
|
label: 'Protected',
|
|
12
15
|
description: 'Non-production environment is noindexed. Production remains unaffected.',
|
|
13
|
-
environment: 'preview',
|
|
14
16
|
checks: [
|
|
15
17
|
{ key: 'environment', label: 'Environment', value: 'Preview', status: 'pass' },
|
|
16
18
|
{ key: 'siteUrl', label: 'Site URL configured', value: 'Yes', status: 'pass' },
|
|
@@ -53,7 +55,7 @@ const cmsApi = vi.fn(async (endpoint: string, options?: { method?: string }) =>
|
|
|
53
55
|
}
|
|
54
56
|
}
|
|
55
57
|
if (endpoint === '/seo/index-status' && method === 'GET') {
|
|
56
|
-
return { data: STATUS, status: 200 }
|
|
58
|
+
return { data: { ...STATUS, environment: statusEnvironment }, status: 200 }
|
|
57
59
|
}
|
|
58
60
|
return { data: {}, status: 200 }
|
|
59
61
|
})
|
|
@@ -64,6 +66,7 @@ const { GeneralSettingsTab } = await import('../../views/settings/GeneralSetting
|
|
|
64
66
|
|
|
65
67
|
beforeEach(() => {
|
|
66
68
|
cmsApi.mockClear()
|
|
69
|
+
statusEnvironment = 'preview'
|
|
67
70
|
})
|
|
68
71
|
|
|
69
72
|
describe('GeneralSettingsTab', () => {
|
|
@@ -126,6 +129,34 @@ describe('GeneralSettingsTab', () => {
|
|
|
126
129
|
).toBeTruthy()
|
|
127
130
|
})
|
|
128
131
|
|
|
132
|
+
it('shows an "Unsaved changes" hint when a toggle is flipped but not yet saved', async () => {
|
|
133
|
+
render(<GeneralSettingsTab role="ADMIN" />)
|
|
134
|
+
await screen.findByLabelText('Site Title')
|
|
135
|
+
|
|
136
|
+
expect(screen.queryByText('Unsaved changes')).toBeNull()
|
|
137
|
+
fireEvent.click(screen.getByRole('switch', { name: 'Default No Follow' }))
|
|
138
|
+
|
|
139
|
+
expect(await screen.findByText('Unsaved changes')).toBeTruthy()
|
|
140
|
+
expect(
|
|
141
|
+
(screen.getByRole('button', { name: 'Save Changes' }) as HTMLButtonElement).disabled,
|
|
142
|
+
).toBe(false)
|
|
143
|
+
})
|
|
144
|
+
|
|
145
|
+
it('explains that noindex-non-production cannot affect a production deployment', async () => {
|
|
146
|
+
statusEnvironment = 'production'
|
|
147
|
+
render(<GeneralSettingsTab role="ADMIN" />)
|
|
148
|
+
await screen.findByLabelText('Site Title')
|
|
149
|
+
|
|
150
|
+
expect(screen.getByText(/this setting does not change pages served here/i)).toBeTruthy()
|
|
151
|
+
})
|
|
152
|
+
|
|
153
|
+
it('hides the production note on non-production environments', async () => {
|
|
154
|
+
render(<GeneralSettingsTab role="ADMIN" />)
|
|
155
|
+
await screen.findByLabelText('Site Title')
|
|
156
|
+
|
|
157
|
+
expect(screen.queryByText(/this setting does not change pages served here/i)).toBeNull()
|
|
158
|
+
})
|
|
159
|
+
|
|
129
160
|
it('is read-only for non-admins', async () => {
|
|
130
161
|
render(<GeneralSettingsTab role="EDITOR" />)
|
|
131
162
|
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
'use client'
|
|
2
2
|
|
|
3
3
|
import { useState } from 'react'
|
|
4
|
+
import { Info } from 'lucide-react'
|
|
4
5
|
import { ConfirmDangerousSettingDialog, SettingsCard, SettingsToggleRow } from './components.js'
|
|
5
6
|
import type { GeneralSettingsForm, SiteIndexStatus } from './useGeneralSettings.js'
|
|
6
7
|
|
|
@@ -90,6 +91,14 @@ export function SeoRobotsDefaultsCard({
|
|
|
90
91
|
disabled={!canEdit}
|
|
91
92
|
onChange={(v) => requestToggle('noIndexNonProduction', v)}
|
|
92
93
|
/>
|
|
94
|
+
{isProduction && (
|
|
95
|
+
<p className="text-muted-foreground flex items-start gap-2 text-sm">
|
|
96
|
+
<Info size={16} className="mt-0.5 shrink-0" aria-hidden="true" />
|
|
97
|
+
This deployment is running in the production environment, so this setting does not
|
|
98
|
+
change pages served here — it forces noindex only on preview, staging, and development
|
|
99
|
+
deployments. To block search engines from this site, use Default No Index.
|
|
100
|
+
</p>
|
|
101
|
+
)}
|
|
93
102
|
</div>
|
|
94
103
|
|
|
95
104
|
<div className="border-border mt-4 space-y-2 border-t pt-4">
|
|
@@ -246,6 +246,11 @@ export function SettingsSaveBar({
|
|
|
246
246
|
<Check size={16} aria-hidden="true" /> Saved
|
|
247
247
|
</span>
|
|
248
248
|
)}
|
|
249
|
+
{dirty && !saving && (
|
|
250
|
+
<span className="text-muted-foreground text-sm" aria-live="polite">
|
|
251
|
+
Unsaved changes
|
|
252
|
+
</span>
|
|
253
|
+
)}
|
|
249
254
|
<button
|
|
250
255
|
type="button"
|
|
251
256
|
onClick={onReset}
|