Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

(feat) O3-3112: Add form collapse toggle to the esm-form-engine-app #1814

Merged
merged 5 commits into from Apr 29, 2024
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
@@ -0,0 +1,46 @@
import React, { useEffect, useState } from 'react';
import { useTranslation } from 'react-i18next';
import { Toggle } from '@carbon/react';
import styles from './styles.scss';

const FormCollapseToggle = () => {
const { t } = useTranslation();
const [isFormEmbedded, setIsFormEmbedded] = useState<boolean>(false);

useEffect(() => {
const handleFormEmbedded = (event) => {
setIsFormEmbedded(event?.detail?.value || false);
};

window.addEventListener('openmrs:form-view-embedded', handleFormEmbedded);

return () => {
window.removeEventListener('openmrs:form-view-embedded', handleFormEmbedded);
};
}, []);

const handleOnToggle = (value: boolean) => {
usamaidrsk marked this conversation as resolved.
Show resolved Hide resolved
const FormCollapseToggleEvent = new CustomEvent('openmrs:form-collapse-toggle', { detail: { value } });
window.dispatchEvent(FormCollapseToggleEvent);
};

if (!isFormEmbedded) {
return null;
}

return (
<div className={styles.toggleContainer}>
<Toggle
size="sm"
aria-label={t('toggleCollapseOrExpand', 'Toggle collapse or expand')}
defaultToggled
id="collapsable-toggle"
labelA={t('expandAll', 'Expand all')}
labelB={t('collapseAll', 'Collapse all')}
onToggle={handleOnToggle}
/>
</div>
);
};

export default FormCollapseToggle;
@@ -0,0 +1,6 @@
.toggleContainer {
display: flex;
align-items: center;
height: var(--workspace-header-height);
margin-right: 0.5rem;
}
8 changes: 7 additions & 1 deletion packages/esm-form-engine-app/src/index.ts
@@ -1,5 +1,4 @@
import { defineConfigSchema, getAsyncLifecycle } from '@openmrs/esm-framework';
import { registerWorkspace } from '@openmrs/esm-patient-common-lib';
import { configSchema } from './config-schema';

const moduleName = '@openmrs/esm-form-engine-app';
Expand All @@ -16,3 +15,10 @@ export function startupApp() {
}

export const formRenderer = getAsyncLifecycle(() => import('./form-renderer/form-renderer.component'), options);
export const formCollapseToggle = getAsyncLifecycle(
usamaidrsk marked this conversation as resolved.
Show resolved Hide resolved
() => import('./form-collapse-toggle/form-collapse-toggle.component'),
{
featureName: 'rfe-form-collapse-toggle',
moduleName,
},
);
5 changes: 5 additions & 0 deletions packages/esm-form-engine-app/src/routes.json
Expand Up @@ -8,6 +8,11 @@
"name": "react-form-engine-widget",
"component": "formRenderer",
"slot": "form-widget-slot"
},
{
"name": "rfe-form-collapse-toggle",
"component": "formCollapseToggle",
"slot": "patient-chart-workspace-header-slot"
}
],
"pages": []
Expand Down
3 changes: 3 additions & 0 deletions packages/esm-form-engine-app/translations/en.json
@@ -1,8 +1,11 @@
{
"closeThisPanel": "Close this panel",
"collapseAll": "Collapse all",
"errorTitle": "There was an error with this form",
"expandAll": "Expand all",
"loading": "Loading",
"or": "or",
"thisList": "this list",
"toggleCollapseOrExpand": "Toggle collapse or expand",
"tryAgainMessage": "Try opening another form from"
}