From c732324128483ba4225d86739847cb2afe3aab7d Mon Sep 17 00:00:00 2001 From: Dennis Kigen Date: Wed, 29 Jan 2025 23:00:08 +0300 Subject: [PATCH] (chore) Optimize lodash imports This PR optimizes lodash imports in Core by standardizing lodash imports to using named imports from `lodash-es`. Other unrelated changes include: - Improving component import ordering patterns - Rewriting type imports to use the `type` keyword The lodash imports change may marginally reduce bundle size through better tree-shaking, but the primary benefit is improved code readability and maintainability. --- .../configuration/configuration.component.tsx | 6 ++--- .../config-subtree.component.tsx | 4 ++-- .../config-tree-for-module.component.tsx | 2 +- .../editable-value.component.tsx | 24 ++++++++++--------- .../offline-patient-table.component.tsx | 14 +++++------ .../offline-tools-page.component.tsx | 6 ++--- .../esm-primary-navigation-app/jest.config.js | 1 - .../change-language-link.extension.tsx | 2 +- .../change-language/change-language.modal.tsx | 2 +- 9 files changed, 30 insertions(+), 31 deletions(-) diff --git a/packages/apps/esm-implementer-tools-app/src/configuration/configuration.component.tsx b/packages/apps/esm-implementer-tools-app/src/configuration/configuration.component.tsx index ecfea9515..3c086f206 100644 --- a/packages/apps/esm-implementer-tools-app/src/configuration/configuration.component.tsx +++ b/packages/apps/esm-implementer-tools-app/src/configuration/configuration.component.tsx @@ -1,8 +1,7 @@ import React, { useMemo, useState } from 'react'; import { Button, Column, FlexGrid, Row, TextInput, Toggle } from '@carbon/react'; import { useTranslation } from 'react-i18next'; -import cloneDeep from 'lodash-es/cloneDeep'; -import isEmpty from 'lodash-es/isEmpty'; +import { cloneDeep, isEmpty } from 'lodash-es'; import type { Config } from '@openmrs/esm-framework/src/internal'; import { ChevronDownIcon, @@ -18,8 +17,7 @@ import { } from '@openmrs/esm-framework/src/internal'; import { ConfigTree } from './interactive-editor/config-tree.component'; import { Description } from './interactive-editor/description.component'; -import type { ImplementerToolsStore } from '../store'; -import { implementerToolsStore } from '../store'; +import { implementerToolsStore, type ImplementerToolsStore } from '../store'; import styles from './configuration.styles.scss'; const JsonEditor = React.lazy(() => import('./json-editor/json-editor.component')); diff --git a/packages/apps/esm-implementer-tools-app/src/configuration/interactive-editor/config-subtree.component.tsx b/packages/apps/esm-implementer-tools-app/src/configuration/interactive-editor/config-subtree.component.tsx index 7c1b6592a..574029031 100644 --- a/packages/apps/esm-implementer-tools-app/src/configuration/interactive-editor/config-subtree.component.tsx +++ b/packages/apps/esm-implementer-tools-app/src/configuration/interactive-editor/config-subtree.component.tsx @@ -1,8 +1,8 @@ import React from 'react'; -import EditableValue from './editable-value.component'; +import { isEqual } from 'lodash-es'; import { implementerToolsStore } from '../../store'; -import isEqual from 'lodash-es/isEqual'; import { Subtree } from './layout/subtree.component'; +import EditableValue from './editable-value.component'; export interface ConfigSubtreeProps { config: Record; diff --git a/packages/apps/esm-implementer-tools-app/src/configuration/interactive-editor/config-tree-for-module.component.tsx b/packages/apps/esm-implementer-tools-app/src/configuration/interactive-editor/config-tree-for-module.component.tsx index 6a7b68694..46c682a27 100644 --- a/packages/apps/esm-implementer-tools-app/src/configuration/interactive-editor/config-tree-for-module.component.tsx +++ b/packages/apps/esm-implementer-tools-app/src/configuration/interactive-editor/config-tree-for-module.component.tsx @@ -1,7 +1,7 @@ import React from 'react'; +import { pickBy } from 'lodash-es'; import { ExtensionSlotsConfigTree } from './extension-slots-config-tree'; import { ConfigSubtree } from './config-subtree.component'; -import pickBy from 'lodash-es/pickBy'; import { TreeContainer } from './layout/tree-container.component'; export interface ConfigTreeForModuleProps { diff --git a/packages/apps/esm-implementer-tools-app/src/configuration/interactive-editor/editable-value.component.tsx b/packages/apps/esm-implementer-tools-app/src/configuration/interactive-editor/editable-value.component.tsx index 596744881..8d3a3d550 100644 --- a/packages/apps/esm-implementer-tools-app/src/configuration/interactive-editor/editable-value.component.tsx +++ b/packages/apps/esm-implementer-tools-app/src/configuration/interactive-editor/editable-value.component.tsx @@ -1,18 +1,20 @@ import React, { useState, useEffect, useRef } from 'react'; -import isEqual from 'lodash-es/isEqual'; -import unset from 'lodash-es/unset'; -import cloneDeep from 'lodash-es/cloneDeep'; -import styles from './editable-value.styles.scss'; +import { useTranslation } from 'react-i18next'; +import { isEqual, cloneDeep, unset } from 'lodash-es'; import { Button } from '@carbon/react'; -import type { ConfigValue, Validator, Type, Config } from '@openmrs/esm-framework/src/internal'; import { EditIcon, ResetIcon } from '@openmrs/esm-framework'; -import { clearConfigErrors, temporaryConfigStore } from '@openmrs/esm-framework/src/internal'; -import type { CustomValueType } from './value-editor'; -import { ValueEditor } from './value-editor'; -import type { ImplementerToolsStore } from '../../store'; -import { implementerToolsStore } from '../../store'; +import { + clearConfigErrors, + temporaryConfigStore, + type ConfigValue, + type Config, + type Validator, + type Type, +} from '@openmrs/esm-framework/src/internal'; +import { implementerToolsStore, type ImplementerToolsStore } from '../../store'; import { DisplayValue } from './display-value'; -import { useTranslation } from 'react-i18next'; +import { ValueEditor, type CustomValueType } from './value-editor'; +import styles from './editable-value.styles.scss'; export interface EditableValueProps { path: Array; diff --git a/packages/apps/esm-offline-tools-app/src/offline-patients/offline-patient-table.component.tsx b/packages/apps/esm-offline-tools-app/src/offline-patients/offline-patient-table.component.tsx index d386abc89..c8fb0fffa 100644 --- a/packages/apps/esm-offline-tools-app/src/offline-patients/offline-patient-table.component.tsx +++ b/packages/apps/esm-offline-tools-app/src/offline-patients/offline-patient-table.component.tsx @@ -1,4 +1,6 @@ import React, { useMemo, useState } from 'react'; +import { capitalize } from 'lodash-es'; +import { useTranslation } from 'react-i18next'; import { Button, DataTable, @@ -18,24 +20,22 @@ import { TableSelectRow, } from '@carbon/react'; import { Renew } from '@carbon/react/icons'; -import type { DynamicOfflineDataSyncState } from '@openmrs/esm-framework'; import { age, - isDesktop, - showModal, deleteSynchronizationItem, + getDynamicOfflineDataEntries, getFullSynchronizationItems, + isDesktop, removeDynamicOfflineData, + showModal, syncDynamicOfflineData, - getDynamicOfflineDataEntries, useLayoutType, + type DynamicOfflineDataSyncState, } from '@openmrs/esm-framework'; -import { useTranslation } from 'react-i18next'; -import capitalize from 'lodash-es/capitalize'; +import { useOfflinePatientsWithEntries, useOfflineRegisteredPatients } from '../hooks/offline-patient-data-hooks'; import EmptyState from './empty-state.component'; import LastUpdatedTableCell from './last-updated-table-cell.component'; import PatientNameTableCell from './patient-name-table-cell.component'; -import { useOfflinePatientsWithEntries, useOfflineRegisteredPatients } from '../hooks/offline-patient-data-hooks'; import styles from './offline-patient-table.scss'; export interface OfflinePatientTableProps { diff --git a/packages/apps/esm-offline-tools-app/src/offline-tools-page/offline-tools-page.component.tsx b/packages/apps/esm-offline-tools-app/src/offline-tools-page/offline-tools-page.component.tsx index ea6005538..fc236df76 100644 --- a/packages/apps/esm-offline-tools-app/src/offline-tools-page/offline-tools-page.component.tsx +++ b/packages/apps/esm-offline-tools-app/src/offline-tools-page/offline-tools-page.component.tsx @@ -1,8 +1,8 @@ -import { ExtensionSlot, useExtensionSlotMeta } from '@openmrs/esm-framework'; import React from 'react'; +import { trimEnd } from 'lodash-es'; +import { useLocation, useParams } from 'react-router-dom'; +import { ExtensionSlot, useExtensionSlotMeta } from '@openmrs/esm-framework'; import type { OfflineToolsPageConfig } from '../types'; -import trimEnd from 'lodash-es/trimEnd'; -import { useLocation, useMatch, useParams } from 'react-router-dom'; export interface OfflineToolsPageParams { page: string; diff --git a/packages/apps/esm-primary-navigation-app/jest.config.js b/packages/apps/esm-primary-navigation-app/jest.config.js index 2e886e4a7..9f8667aa9 100644 --- a/packages/apps/esm-primary-navigation-app/jest.config.js +++ b/packages/apps/esm-primary-navigation-app/jest.config.js @@ -5,7 +5,6 @@ module.exports = { }, transformIgnorePatterns: [], moduleNameMapper: { - 'lodash-es/(.*)': 'lodash/$1', 'lodash-es': 'lodash', '@openmrs/esm-framework': '@openmrs/esm-framework/mock.tsx', '\\.(s?css)$': 'identity-obj-proxy', diff --git a/packages/apps/esm-primary-navigation-app/src/components/change-language/change-language-link.extension.tsx b/packages/apps/esm-primary-navigation-app/src/components/change-language/change-language-link.extension.tsx index c67d6c193..94f6fe5a3 100644 --- a/packages/apps/esm-primary-navigation-app/src/components/change-language/change-language-link.extension.tsx +++ b/packages/apps/esm-primary-navigation-app/src/components/change-language/change-language-link.extension.tsx @@ -1,7 +1,7 @@ import React, { useCallback } from 'react'; import { useTranslation } from 'react-i18next'; import { Button, SwitcherItem } from '@carbon/react'; -import capitalize from 'lodash-es/capitalize'; +import { capitalize } from 'lodash-es'; import { TranslateIcon, showModal, useSession } from '@openmrs/esm-framework'; import styles from './change-language-link.scss'; diff --git a/packages/apps/esm-primary-navigation-app/src/components/change-language/change-language.modal.tsx b/packages/apps/esm-primary-navigation-app/src/components/change-language/change-language.modal.tsx index 4149b2c09..a1cf9e17e 100644 --- a/packages/apps/esm-primary-navigation-app/src/components/change-language/change-language.modal.tsx +++ b/packages/apps/esm-primary-navigation-app/src/components/change-language/change-language.modal.tsx @@ -9,7 +9,7 @@ import { RadioButton, RadioButtonGroup, } from '@carbon/react'; -import capitalize from 'lodash-es/capitalize'; +import { capitalize } from 'lodash-es'; import { useConnectivity, useSession } from '@openmrs/esm-framework'; import { postUserPropertiesOffline, postUserPropertiesOnline } from './change-language.resource'; import styles from './change-language.scss';