feat: adds doc permissions to account view

This commit is contained in:
Jarrod Flesch
2022-12-20 09:13:19 -05:00
parent 0d06b8c178
commit 8d643fb29d
2 changed files with 19 additions and 16 deletions

View File

@@ -188,7 +188,7 @@ export const DocumentInfoProvider: React.FC<Props> = ({
const json = await res.json();
setDocPermissions(json);
} else {
// fallback to permissions from the collection
// fallback to permissions from the entity type
// (i.e. create has no id)
setDocPermissions(permissions[pluralType][slug]);
}

View File

@@ -18,9 +18,9 @@ const AccountView: React.FC = () => {
const { state: locationState } = useLocation<{ data: unknown }>();
const locale = useLocale();
const { setStepNav } = useStepNav();
const { user, permissions } = useAuth();
const { user } = useAuth();
const [initialState, setInitialState] = useState<Fields>();
const { id, preferencesKey } = useDocumentInfo();
const { id, preferencesKey, docPermissions, slug } = useDocumentInfo();
const { getPreference } = usePreferences();
const {
@@ -28,7 +28,6 @@ const AccountView: React.FC = () => {
routes: { api },
collections,
admin: {
user: adminUser,
components: {
views: {
Account: CustomAccount,
@@ -36,20 +35,16 @@ const AccountView: React.FC = () => {
Account: undefined,
},
} = {},
} = {
user: 'users',
},
} = useConfig();
const { t } = useTranslation('authentication');
const collection = collections.find((coll) => coll.slug === adminUser);
const collection = collections.find((coll) => coll.slug === slug);
const { fields } = collection;
const collectionPermissions = permissions?.collections?.[adminUser];
const [{ data }] = usePayloadAPI(
`${serverURL}${api}/${collection?.slug}/${user?.id}`,
`${serverURL}${api}/${slug}/${id}`,
{
initialParams: {
'fallback-locale': 'null',
@@ -58,11 +53,11 @@ const AccountView: React.FC = () => {
},
);
const hasSavePermission = collectionPermissions?.update?.permission;
const hasSavePermission = docPermissions?.update?.permission;
const dataToRender = locationState?.data || data;
const apiURL = `${serverURL}${api}/${user.collection}/${data?.id}`;
const apiURL = `${serverURL}${api}/${slug}/${data?.id}`;
const action = `${serverURL}${api}/${user.collection}/${data?.id}?locale=${locale}&depth=0`;
const action = `${serverURL}${api}/${slug}/${data?.id}?locale=${locale}&depth=0`;
useEffect(() => {
const nav = [{
@@ -74,7 +69,15 @@ const AccountView: React.FC = () => {
useEffect(() => {
const awaitInitialState = async () => {
const state = await buildStateFromSchema({ fieldSchema: fields, data: dataToRender, operation: 'update', id, user, locale, t });
const state = await buildStateFromSchema({
fieldSchema: fields,
data: dataToRender,
operation: 'update',
id,
user,
locale,
t,
});
await getPreference(preferencesKey);
setInitialState(state);
};
@@ -90,11 +93,11 @@ const AccountView: React.FC = () => {
action,
data,
collection,
permissions: collectionPermissions,
permissions: docPermissions,
hasSavePermission,
initialState,
apiURL,
isLoading: !initialState,
isLoading: !initialState || !docPermissions,
}}
/>
);