Skip to content

Commit 16fbd42

Browse files
authored
Revert "Revert "feat: O3-310: Add an application-writable config.json file in frontends/ (#629)" (#864)"
This reverts commit 41ce27a.
1 parent 41ce27a commit 16fbd42

File tree

11 files changed

+103
-2
lines changed

11 files changed

+103
-2
lines changed

packages/apps/esm-implementer-tools-app/src/backend-dependencies/openmrs-backend-dependencies.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { isVersionSatisfied, openmrsFetch } from '@openmrs/esm-framework';
22
import difference from 'lodash-es/difference';
3+
import { useMemo, useState } from 'react';
34

45
export type ResolvedBackendModuleType = 'missing' | 'version-mismatch' | 'okay';
56

@@ -155,3 +156,21 @@ export async function checkModules(): Promise<Array<ResolvedDependenciesModule>>
155156
export function hasInvalidDependencies(frontendModules: Array<ResolvedDependenciesModule>) {
156157
return frontendModules.some((m) => m.dependencies.some((n) => n.type !== 'okay'));
157158
}
159+
160+
export function useBackendDependencyCheck(moduleName: string) {
161+
const [backendDependencies, setBackendDependencies] = useState<Array<BackendModule>>([]);
162+
163+
useMemo(async () => {
164+
const dependencies = await initInstalledBackendModules();
165+
setBackendDependencies(dependencies);
166+
}, []);
167+
168+
const isPresent = useMemo(() => {
169+
if (backendDependencies) {
170+
return backendDependencies.some((module) => module.uuid === moduleName);
171+
}
172+
return false;
173+
}, [backendDependencies, moduleName]);
174+
175+
return isPresent;
176+
}

packages/apps/esm-implementer-tools-app/src/configuration/configuration.component.tsx

Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
11
import React, { useMemo, useState } from 'react';
22
import { Button, Column, FlexGrid, Row, TextInput, Toggle } from '@carbon/react';
33
import { useTranslation } from 'react-i18next';
4-
import { ChevronDown, ChevronUp, Download, TrashCan } from '@carbon/react/icons';
4+
import { ChevronDown, ChevronUp, Download, TrashCan, Upload } from '@carbon/react/icons';
55
import cloneDeep from 'lodash-es/cloneDeep';
66
import isEmpty from 'lodash-es/isEmpty';
77
import type { Config } from '@openmrs/esm-framework/src/internal';
88
import {
99
getExtensionInternalStore,
1010
implementerToolsConfigStore,
11+
navigate,
12+
showNotification,
13+
showToast,
1114
temporaryConfigStore,
1215
useStore,
1316
useStoreWithActions,
@@ -17,6 +20,8 @@ import { Description } from './interactive-editor/description.component';
1720
import type { ImplementerToolsStore } from '../store';
1821
import { implementerToolsStore } from '../store';
1922
import styles from './configuration.styles.scss';
23+
import { saveConfig } from './configuration.resource';
24+
import { useBackendDependencyCheck } from '../backend-dependencies/openmrs-backend-dependencies';
2025

2126
const JsonEditor = React.lazy(() => import('./json-editor/json-editor.component'));
2227

@@ -62,6 +67,7 @@ export interface ConfigurationProps {}
6267

6368
export const Configuration: React.FC<ConfigurationProps> = () => {
6469
const { t } = useTranslation();
70+
const isSpaModulePresent = useBackendDependencyCheck('spa');
6571
const {
6672
isUIEditorEnabled,
6773
toggleIsUIEditorEnabled,
@@ -158,6 +164,43 @@ export const Configuration: React.FC<ConfigurationProps> = () => {
158164
>
159165
{t('clearConfig', 'Clear Local Config')}
160166
</Button>
167+
{isSpaModulePresent ? (
168+
<Button
169+
kind="primary"
170+
iconDescription="Publish config to server"
171+
renderIcon={(props) => <Upload size={16} {...props} />}
172+
onClick={() => {
173+
saveConfig(tempConfig).then(
174+
(response) => {
175+
if (response.ok && !response.redirected) {
176+
temporaryConfigStore.setState({ config: {} });
177+
showToast({
178+
critical: true,
179+
title: t('savedConfiguration', 'Configuration published'),
180+
kind: 'success',
181+
description: t(
182+
'successfullySavedConfiguration',
183+
'Configuration has been pusblished to the server. It is now live for all users. Your local configuration overrides have been cleared.',
184+
),
185+
});
186+
} else if (response.ok && response.redirected) {
187+
navigate({ to: response.url });
188+
}
189+
},
190+
(error) => {
191+
showNotification({
192+
title: t('errorSavingConfiguration', 'Error saving configuration'),
193+
kind: 'error',
194+
critical: true,
195+
description: error?.message,
196+
});
197+
},
198+
);
199+
}}
200+
>
201+
{t('publishConfig', 'Publish Config')}
202+
</Button>
203+
) : null}
161204
<Button
162205
kind="secondary"
163206
iconDescription="Download config"
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import { type Config, openmrsFetch } from '@openmrs/esm-framework';
2+
3+
export async function saveConfig(config: Config) {
4+
return openmrsFetch(`/ws/frontend/config.json`, {
5+
headers: {
6+
'Content-Type': 'application/json',
7+
},
8+
method: 'POST',
9+
body: config,
10+
});
11+
}

packages/apps/esm-implementer-tools-app/src/popup/popup.styles.scss

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
bottom: 0;
66
left: 0;
77
width: 100%;
8-
z-index: 100000;
8+
z-index: 99000;
99
background-color: $ui-03;
1010
border-top: 2px solid $ui-05;
1111
color: $color-gray-100;

packages/apps/esm-implementer-tools-app/translations/am.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
"edit": "Edit",
1010
"editValueButtonText": "Edit",
1111
"enabled": "Enabled",
12+
"errorSavingConfiguration": "Error saving configuration",
1213
"extensions": "Extensions",
1314
"featureFlag": "Feature Flag",
1415
"featureFlags": "Feature Flags",
@@ -19,8 +20,11 @@
1920
"missing": "Missing",
2021
"moduleName": "Module Name",
2122
"modulesWithMissingDependenciesWarning": "Some modules have unresolved backend dependencies",
23+
"publishConfig": "Publish Config",
2224
"requiredVersion": "Required Version",
2325
"resetToDefaultValueButtonText": "Reset to default",
26+
"savedConfiguration": "Configuration published",
27+
"successfullySavedConfiguration": "Configuration has been pusblished to the server. It is now live for all users. Your local configuration overrides have been cleared.",
2428
"uiEditor": "UI Editor",
2529
"unknownVersion": "unknown",
2630
"value": "Value",

packages/apps/esm-implementer-tools-app/translations/ar.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
"edit": "تعديل",
1010
"editValueButtonText": "تعديل",
1111
"enabled": "مفعل",
12+
"errorSavingConfiguration": "Error saving configuration",
1213
"extensions": "الملحقات",
1314
"featureFlag": "علامة الميزة",
1415
"featureFlags": "علامات الميزة",
@@ -19,8 +20,11 @@
1920
"missing": "مفقود",
2021
"moduleName": "اسم الوحدة",
2122
"modulesWithMissingDependenciesWarning": "بعض الوحدات لديها اعتمادات خلفية غير محلولة",
23+
"publishConfig": "Publish Config",
2224
"requiredVersion": "الإصدار المطلوب",
2325
"resetToDefaultValueButtonText": "إعادة تعيين إلى القيمة الافتراضية",
26+
"savedConfiguration": "Configuration published",
27+
"successfullySavedConfiguration": "Configuration has been pusblished to the server. It is now live for all users. Your local configuration overrides have been cleared.",
2428
"uiEditor": "محرر الواجهة",
2529
"unknownVersion": "غير معروف",
2630
"value": "قيمة",

packages/apps/esm-implementer-tools-app/translations/en.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
"edit": "Edit",
1010
"editValueButtonText": "Edit",
1111
"enabled": "Enabled",
12+
"errorSavingConfiguration": "Error saving configuration",
1213
"extensions": "Extensions",
1314
"featureFlag": "Feature Flag",
1415
"featureFlags": "Feature Flags",
@@ -19,8 +20,11 @@
1920
"missing": "Missing",
2021
"moduleName": "Module Name",
2122
"modulesWithMissingDependenciesWarning": "Some modules have unresolved backend dependencies",
23+
"publishConfig": "Publish Config",
2224
"requiredVersion": "Required Version",
2325
"resetToDefaultValueButtonText": "Reset to default",
26+
"savedConfiguration": "Saved configuration",
27+
"successfullySavedConfiguration": "Successfully saved configuration",
2428
"uiEditor": "UI Editor",
2529
"unknownVersion": "unknown",
2630
"value": "Value",

packages/apps/esm-implementer-tools-app/translations/es.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
"edit": "Editar",
1010
"editValueButtonText": "Editar",
1111
"enabled": "Habilitado",
12+
"errorSavingConfiguration": "Error saving configuration",
1213
"extensions": "Extensiones",
1314
"featureFlag": "Feature Flag",
1415
"featureFlags": "Feature Flags",
@@ -19,8 +20,11 @@
1920
"missing": "Falta",
2021
"moduleName": "Nombre de modulo",
2122
"modulesWithMissingDependenciesWarning": "Some modules have unresolved backend dependencies",
23+
"publishConfig": "Publish Config",
2224
"requiredVersion": "Versión requerida",
2325
"resetToDefaultValueButtonText": "Volver al valor predeterminado",
26+
"savedConfiguration": "Configuration published",
27+
"successfullySavedConfiguration": "Configuration has been pusblished to the server. It is now live for all users. Your local configuration overrides have been cleared.",
2428
"uiEditor": "Editór visual",
2529
"unknownVersion": "desconocida",
2630
"value": "Valor",

packages/apps/esm-implementer-tools-app/translations/fr.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
"edit": "Edit",
1010
"editValueButtonText": "Edit",
1111
"enabled": "Enabled",
12+
"errorSavingConfiguration": "Error saving configuration",
1213
"extensions": "Extensions",
1314
"featureFlag": "Feature Flag",
1415
"featureFlags": "Feature Flags",
@@ -19,8 +20,11 @@
1920
"missing": "Missing",
2021
"moduleName": "Module Name",
2122
"modulesWithMissingDependenciesWarning": "Some modules have unresolved backend dependencies",
23+
"publishConfig": "Publish Config",
2224
"requiredVersion": "Required Version",
2325
"resetToDefaultValueButtonText": "Reset to default",
26+
"savedConfiguration": "Configuration published",
27+
"successfullySavedConfiguration": "Configuration has been pusblished to the server. It is now live for all users. Your local configuration overrides have been cleared.",
2428
"uiEditor": "UI Editor",
2529
"unknownVersion": "unknown",
2630
"value": "Value",

packages/apps/esm-implementer-tools-app/translations/he.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
"edit": "ערוך",
1010
"editValueButtonText": "ערוך",
1111
"enabled": "Enabled",
12+
"errorSavingConfiguration": "Error saving configuration",
1213
"extensions": "Extensions",
1314
"featureFlag": "Feature Flag",
1415
"featureFlags": "Feature Flags",
@@ -19,8 +20,11 @@
1920
"missing": "חסר",
2021
"moduleName": "שם המודול",
2122
"modulesWithMissingDependenciesWarning": "Some modules have unresolved backend dependencies",
23+
"publishConfig": "Publish Config",
2224
"requiredVersion": "גרסה נדרשת",
2325
"resetToDefaultValueButtonText": "איפוס לברירת מחדל",
26+
"savedConfiguration": "Configuration published",
27+
"successfullySavedConfiguration": "Configuration has been pusblished to the server. It is now live for all users. Your local configuration overrides have been cleared.",
2428
"uiEditor": "עורך ממשק משתמש",
2529
"unknownVersion": "לא ידוע",
2630
"value": "ערך",

0 commit comments

Comments
 (0)