+
+ {children}
+
+
+ {i18n.t('Changes not applied')}
+
+
+ )
+}
diff --git a/src/components/layout-panel/bottom-bar/__fixtures__/unapplied-changes.ts b/src/components/layout-panel/bottom-bar/__fixtures__/unapplied-changes.ts
new file mode 100644
index 000000000..348b10fd1
--- /dev/null
+++ b/src/components/layout-panel/bottom-bar/__fixtures__/unapplied-changes.ts
@@ -0,0 +1,40 @@
+import type { CurrentVisualization } from '@types'
+
+export const PROGRAM_ID = 'program1'
+export const STAGE_ID = 'stage1'
+export const DIMENSION_ID = `${STAGE_ID}.de1`
+
+/* An event program, so the EVENT output type is the applicable one — the same
+ * shape a real layout dimension carries. Without the program the layout would
+ * have no program at all, which makes every output type inapplicable. */
+export const metadata = {
+ [PROGRAM_ID]: {
+ id: PROGRAM_ID,
+ name: 'Program 1',
+ programType: 'WITHOUT_REGISTRATION',
+ },
+ [STAGE_ID]: { id: STAGE_ID, name: 'Stage 1', program: { id: PROGRAM_ID } },
+ [DIMENSION_ID]: {
+ id: DIMENSION_ID,
+ name: 'Data element 1',
+ dimensionId: 'de1',
+ programId: PROGRAM_ID,
+ programStageId: STAGE_ID,
+ dimensionType: 'DATA_ELEMENT',
+ valueType: 'TEXT',
+ },
+}
+
+/* digitGroupSeparator is seeded onto the default store's visUiConfig from the
+ * mocked system settings (src/test-utils/__fixtures__/system-settings.json),
+ * so a currentVis that matches the default ui config must carry the same
+ * value. The real load path is not affected: the API always returns a
+ * digitGroupSeparator, so both sides agree there. */
+export const populatedVis = {
+ type: 'LINE_LIST',
+ outputType: 'EVENT',
+ digitGroupSeparator: 'SPACE',
+ columns: [],
+ rows: [],
+ filters: [],
+} as unknown as CurrentVisualization
diff --git a/src/components/layout-panel/bottom-bar/__tests__/bottom-bar.spec.tsx b/src/components/layout-panel/bottom-bar/__tests__/bottom-bar.spec.tsx
new file mode 100644
index 000000000..18f000f11
--- /dev/null
+++ b/src/components/layout-panel/bottom-bar/__tests__/bottom-bar.spec.tsx
@@ -0,0 +1,36 @@
+import { renderWithAppWrapper } from '@test-utils/app-wrapper'
+import { screen } from '@testing-library/react'
+import type { RootState } from '@types'
+import { describe, it, expect } from 'vitest'
+import { metadata, populatedVis } from '../__fixtures__/unapplied-changes'
+import { BottomBar } from '../bottom-bar'
+
+const renderBottomBar = (preloadedState: Partial