import React, { useState } from 'react';
import dayjs from 'dayjs';
import { NEVER } from 'rxjs';
import { vi } from 'vitest';
import type {} from '@openmrs/esm-globals';
import * as utils from '@openmrs/esm-utils/mock';
window.i18next = { ...window.i18next, language: 'en' };
export * from '@openmrs/esm-api/mock';
export * from '@openmrs/esm-emr-api/mock';
export * from '@openmrs/esm-config/mock';
export * from '@openmrs/esm-context';
export * from '@openmrs/esm-expression-evaluator/src/public';
export * from '@openmrs/esm-extensions/mock';
export * from '@openmrs/esm-react-utils/mock';
export * from '@openmrs/esm-state/mock';
export * from '@openmrs/esm-styleguide/mock';
export * from '@openmrs/esm-translations/mock';
export { parseDate, formatDate, formatDatetime, formatTime, isOmrsDateToday, matchLocale } from '@openmrs/esm-utils';
/* esm-globals */
export function setupPaths(config: any) {
window.openmrsBase = config.apiUrl;
window.spaBase = config.spaPath;
window.spaEnv = config.env || 'production';
window.spaVersion = process.env.BUILD_VERSION ?? 'local';
window.getOpenmrsSpaBase = () => `${window.spaBase}/`;
}
/* esm-dynamic-loading */
export const importDynamic = vi.fn();
/* esm-error-handling */
export const createErrorHandler = () => vi.fn().mockReturnValue(NEVER);
export const reportError = vi.fn().mockImplementation((error) => {
throw error;
});
/* esm-feature-flags */
export const registerFeatureFlags = vi.fn();
export const getFeatureFlag = vi.fn().mockReturnValue(true);
export const subscribeToFeatureFlag = vi.fn((name: string, callback) => callback(true));
/* esm-navigation */
export { interpolateUrl, interpolateString } from '@openmrs/esm-navigation';
export const navigate = vi.fn();
export const getHistory = vi.fn(() => ['https://o3.openmrs.org/home']);
export const clearHistory = vi.fn();
export const goBackInHistory = vi.fn();
/* esm-offline */
export const useConnectivity = vi.fn().mockReturnValue(true);
export const subscribeConnectivity = vi.fn();
/* esm-styleguide */
export const showNotification = vi.fn();
export const showActionableNotification = vi.fn();
export const showToast = vi.fn();
export const showSnackbar = vi.fn();
export const showModal = vi.fn();
export const LeftNavMenu = vi.fn(() =>
Left Nav Menu
);
export const setLeftNav = vi.fn();
export const unsetLeftNav = vi.fn();
export const ResponsiveWrapper = vi.fn(({ children }) => <>{children}>);
export const ErrorState = vi.fn(() => Error State
);
export const CustomOverflowMenu = vi.fn(({ menuTitle, children }) => (
{children}
));
export const CustomOverflowMenuItem = vi.fn(({ itemText, ...props }) => (
));
export const PatientBannerActionsMenu = vi.fn(() => Patient Banner Actions Menu
);
export const PatientBannerContactDetails = vi.fn(() => Patient Banner Contact Details
);
export const PatientBannerPatientInfo = vi.fn(() => Patient Banner Patient Info
);
export const PatientBannerPatientIdentifiers = vi.fn(() => Patient Banner Patient Identifier
);
export const PatientBannerToggleContactDetailsButton = vi.fn(() => (
Patient Banner Toggle Contact Details Button
));
export const PatientPhoto = vi.fn(() => Patient Photo
);
export const usePatientPhoto = vi.fn(() => ({
isLoading: true,
data: null,
error: null,
}));
export const ActionMenuButton = vi.fn(({ handler }) => );
export const ActionMenuButton2 = vi.fn(({ label, tagContent, icon }) => (
));
export const ActionMenu = vi.fn(() => Action Menu
);
export const WorkspaceContainer = vi.fn(() => Workspace Container
);
export const closeWorkspace = vi.fn();
export const launchWorkspace = vi.fn();
export const launchWorkspace2 = vi.fn();
export const launchWorkspaceGroup = vi.fn();
export const launchWorkspaceGroup2 = vi.fn();
export const closeWorkspaceGroup2 = vi.fn();
export const navigateAndLaunchWorkspace = vi.fn();
export const useWorkspaces = vi.fn();
export const useWorkspace2Context = vi.fn();
export const OpenmrsDatePicker = vi.fn(({ id, labelText, value, onChange, isInvalid, invalidText }) => (
<>
onChange?.(dayjs(evt.target.value).toDate())}
/>
{isInvalid && {invalidText}}
>
));
export const OpenmrsDateRangePicker = vi.fn(({ id, labelText, value = [], onChange, isInvalid, invalidText }) => {
const [inputValue, setInputValue] = useState(() => {
const [start, end] = value;
const formattedStart = start ? dayjs(start).format('DD/MM/YYYY') : 'dd/mm/yyyy';
const formattedEnd = end ? dayjs(end).format('DD/MM/YYYY') : 'dd/mm/yyyy';
return `${formattedStart}–${formattedEnd}`;
});
const handleChange = (e) => {
const raw = e.target.value;
setInputValue(raw);
const [startStr, endStr] = raw.split('–');
const start = dayjs(startStr, 'DD/MM/YYYY', true);
const end = dayjs(endStr, 'DD/MM/YYYY', true);
if (start.isValid() && end.isValid()) {
onChange?.([start.toDate(), end.toDate()]);
}
};
return (
{isInvalid && {invalidText}}
);
});
/* esm-utils */
export {
getDefaultsFromConfigSchema,
getPatientName,
formatPatientName,
selectPreferredName,
} from '@openmrs/esm-utils';
export const age = vi.fn((arg) => utils.age(arg));
export function isVersionSatisfied() {
return true;
}