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:
@@ -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,
|
||||
),
|
||||
}}
|
||||
|
||||
@@ -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 (
|
||||
|
||||
@@ -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}`
|
||||
|
||||
Reference in New Issue
Block a user