perf: optimize getEntityConfig lookups (#10665)

Replaces array-based lookups in `getEntityConfig` with a map, reducing
time complexity from O(n) to O(1).
This commit is contained in:
Alessio Gravili
2025-01-20 12:32:38 -07:00
committed by GitHub
parent 56667cdc8d
commit c07c9e9129
50 changed files with 183 additions and 181 deletions

View File

@@ -69,7 +69,7 @@ export const LinkElement = () => {
const { id, collectionSlug, docPermissions, getDocPreferences, globalSlug } = useDocumentInfo()
const editor = useSlate()
const { config } = useConfig()
const { config, getEntityConfig } = useConfig()
const { code: locale } = useLocale()
const { i18n, t } = useTranslation()
const { closeModal, openModal, toggleModal } = useModal()
@@ -179,8 +179,7 @@ export const LinkElement = () => {
t={t}
variables={{
label: getTranslation(
config.collections.find(({ slug }) => slug === element.doc.relationTo)?.labels
?.singular,
getEntityConfig({ collectionSlug: element.doc.relationTo })?.labels?.singular,
i18n,
),
}}

View File

@@ -40,6 +40,7 @@ const RelationshipElementComponent: React.FC = () => {
routes: { api },
serverURL,
},
getEntityConfig,
} = useConfig()
const [enabledCollectionSlugs] = useState(() =>
collections
@@ -47,7 +48,7 @@ const RelationshipElementComponent: React.FC = () => {
.map(({ slug }) => slug),
)
const [relatedCollection, setRelatedCollection] = useState(() =>
collections.find((coll) => coll.slug === relationTo),
getEntityConfig({ collectionSlug: relationTo }),
)
const selected = useSelected()
@@ -117,7 +118,7 @@ const RelationshipElementComponent: React.FC = () => {
{ at: elementPath },
)
setRelatedCollection(collections.find((coll) => coll.slug === collectionSlug))
setRelatedCollection(getEntityConfig({ collectionSlug }))
setParams({
...initialParams,
@@ -127,7 +128,7 @@ const RelationshipElementComponent: React.FC = () => {
closeListDrawer()
dispatchCacheBust()
},
[closeListDrawer, editor, element, cacheBust, setParams, collections],
[closeListDrawer, editor, element, cacheBust, setParams, getEntityConfig],
)
return (

View File

@@ -46,15 +46,15 @@ const UploadElementComponent: React.FC<{ enabledCollectionSlugs?: string[] }> =
const {
config: {
collections,
routes: { api },
serverURL,
},
getEntityConfig,
} = useConfig()
const { i18n, t } = useTranslation()
const [cacheBust, dispatchCacheBust] = useReducer((state) => state + 1, 0)
const [relatedCollection, setRelatedCollection] = useState<ClientCollectionConfig>(() =>
collections.find((coll) => coll.slug === relationTo),
getEntityConfig({ collectionSlug: relationTo }),
)
const drawerSlug = useDrawerSlug('upload-drawer')
@@ -121,14 +121,14 @@ const UploadElementComponent: React.FC<{ enabledCollectionSlugs?: string[] }> =
const elementPath = ReactEditor.findPath(editor, element)
setRelatedCollection(collections.find((coll) => coll.slug === collectionSlug))
setRelatedCollection(getEntityConfig({ collectionSlug }))
Transforms.setNodes(editor, newNode, { at: elementPath })
dispatchCacheBust()
closeListDrawer()
},
[closeListDrawer, editor, element, collections],
[closeListDrawer, editor, element, getEntityConfig],
)
const relatedFieldSchemaPath = `${uploadFieldsSchemaPath}.${relatedCollection.slug}`