Skip to content

Commit 1ae71a3

Browse files
authored
fix(ui): not updating permissions when locale changes (#7245)
Closes #7163
1 parent e83eb99 commit 1ae71a3

File tree

1 file changed

+26
-21
lines changed
  • packages/ui/src/providers/DocumentInfo

1 file changed

+26
-21
lines changed

packages/ui/src/providers/DocumentInfo/index.tsx

Lines changed: 26 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -94,14 +94,16 @@ const DocumentInfo: React.FC<
9494
hasPublishPermissionFromProps,
9595
)
9696
const isInitializing = initialState === undefined || data === undefined
97-
const hasInitializedDocPermissions = useRef(false)
9897
const [unpublishedVersions, setUnpublishedVersions] =
9998
useState<PaginatedDocs<TypeWithVersion<any>>>(null)
10099

101100
const { getPreference, setPreference } = usePreferences()
102101
const { permissions } = useAuth()
103102
const { code: locale } = useLocale()
104103
const prevLocale = useRef(locale)
104+
const hasInitializedDocPermissions = useRef(false)
105+
// Separate locale cache used for handling permissions
106+
const prevLocalePermissions = useRef(locale)
105107

106108
const versionsConfig = docConfig?.versions
107109

@@ -262,11 +264,12 @@ const DocumentInfo: React.FC<
262264
locale: locale || undefined,
263265
}
264266

265-
const newIsEditing = getIsEditing({ id: data?.id, collectionSlug, globalSlug })
267+
const idToUse = data?.id || id
268+
const newIsEditing = getIsEditing({ id: idToUse, collectionSlug, globalSlug })
266269

267270
if (newIsEditing) {
268271
const docAccessURL = collectionSlug
269-
? `/${collectionSlug}/access/${data.id}`
272+
? `/${collectionSlug}/access/${idToUse}`
270273
: globalSlug
271274
? `/globals/${globalSlug}/access`
272275
: null
@@ -329,7 +332,7 @@ const DocumentInfo: React.FC<
329332
)
330333
}
331334
},
332-
[serverURL, api, permissions, i18n.language, locale, collectionSlug, globalSlug],
335+
[serverURL, api, id, permissions, i18n.language, locale, collectionSlug, globalSlug],
333336
)
334337

335338
const getDocPreferences = useCallback(() => {
@@ -485,26 +488,24 @@ const DocumentInfo: React.FC<
485488
}, [collectionConfig, data, dateFormat, i18n, id, globalConfig])
486489

487490
useEffect(() => {
488-
const loadDocPermissions = async () => {
489-
const docPermissions: DocumentPermissions = docPermissionsFromProps
490-
const hasSavePermission: boolean = hasSavePermissionFromProps
491-
const hasPublishPermission: boolean = hasPublishPermissionFromProps
492-
493-
if (
494-
!docPermissions ||
495-
hasSavePermission === undefined ||
496-
hasSavePermission === null ||
497-
hasPublishPermission === undefined ||
498-
hasPublishPermission === null
491+
const localeChanged = locale !== prevLocalePermissions.current
492+
493+
if (data && (collectionSlug || globalSlug)) {
494+
if (localeChanged) {
495+
prevLocalePermissions.current = locale
496+
void getDocPermissions(data)
497+
} else if (
498+
hasInitializedDocPermissions.current === false &&
499+
(!docPermissions ||
500+
hasSavePermission === undefined ||
501+
hasSavePermission === null ||
502+
hasPublishPermission === undefined ||
503+
hasPublishPermission === null)
499504
) {
500-
await getDocPermissions(data)
505+
hasInitializedDocPermissions.current = true
506+
void getDocPermissions(data)
501507
}
502508
}
503-
504-
if (!hasInitializedDocPermissions.current && data && (collectionSlug || globalSlug)) {
505-
hasInitializedDocPermissions.current = true
506-
void loadDocPermissions()
507-
}
508509
}, [
509510
getDocPermissions,
510511
docPermissionsFromProps,
@@ -514,6 +515,10 @@ const DocumentInfo: React.FC<
514515
collectionSlug,
515516
globalSlug,
516517
data,
518+
locale,
519+
docPermissions,
520+
hasSavePermission,
521+
hasPublishPermission,
517522
])
518523

519524
const action: string = React.useMemo(() => {

0 commit comments

Comments
 (0)