✨ Handling quota limit error (#437)
This commit is contained in:
@@ -102,13 +102,23 @@ export class DriveApiClient {
|
||||
data: { item: Partial<DriveItem>; version?: Partial<DriveItemVersion> },
|
||||
) {
|
||||
if (!data.version) data.version = {} as Partial<DriveItemVersion>;
|
||||
return await Api.post<
|
||||
{ item: Partial<DriveItem>; version: Partial<DriveItemVersion> },
|
||||
DriveItem
|
||||
>(
|
||||
`/internal/services/documents/v1/companies/${companyId}/item${appendTdriveToken()}`,
|
||||
data as { item: Partial<DriveItem>; version: Partial<DriveItemVersion> },
|
||||
);
|
||||
|
||||
return new Promise<DriveItem>((resolve, reject) => {
|
||||
Api.post<
|
||||
{ item: Partial<DriveItem>; version: Partial<DriveItemVersion> },
|
||||
DriveItem
|
||||
>(
|
||||
`/internal/services/documents/v1/companies/${companyId}/item${appendTdriveToken()}`,
|
||||
data as { item: Partial<DriveItem>; version: Partial<DriveItemVersion> },
|
||||
(res) => {
|
||||
if ((res as any)?.statusCode || (res as any)?.error) {
|
||||
reject(res);
|
||||
}
|
||||
|
||||
resolve(res);
|
||||
},
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
static async createVersion(companyId: string, id: string, version: Partial<DriveItemVersion>) {
|
||||
|
||||
@@ -7,7 +7,7 @@ import { DriveItemAtom, DriveItemChildrenAtom } from '../state/store';
|
||||
import { BrowseFilter, DriveItem, DriveItemVersion } from '../types';
|
||||
import { SharedWithMeFilterState } from '../state/shared-with-me-filter';
|
||||
import Languages from 'features/global/services/languages-service';
|
||||
import { useUserQuota } from "features/users/hooks/use-user-quota";
|
||||
import { useUserQuota } from 'features/users/hooks/use-user-quota';
|
||||
|
||||
/**
|
||||
* Returns the children of a drive item
|
||||
@@ -48,17 +48,30 @@ export const useDriveActions = () => {
|
||||
|
||||
const create = useCallback(
|
||||
async (item: Partial<DriveItem>, version: Partial<DriveItemVersion>) => {
|
||||
if (!item || !version) throw new Error("All ");
|
||||
let driveFile = null;
|
||||
if (!item || !version) throw new Error('All ');
|
||||
if (!item.company_id) item.company_id = companyId;
|
||||
|
||||
try {
|
||||
driveFile = await DriveApiClient.create(companyId, { item, version });
|
||||
await refresh(driveFile.parent_id!);
|
||||
const driveFile = await DriveApiClient.create(companyId, { item, version });
|
||||
|
||||
await refresh(driveFile.parent_id);
|
||||
await getQuota();
|
||||
} catch (e) {
|
||||
ToasterService.error(Languages.t('hooks.use-drive-actions.unable_create_file'));
|
||||
|
||||
return driveFile;
|
||||
} catch (e: any) {
|
||||
if (e.statusCode === 403) {
|
||||
ToasterService.info(
|
||||
<>
|
||||
<p>{Languages.t('hooks.use-drive-actions.quota_limit_exceeded_title')}</p>
|
||||
<p>{Languages.t('hooks.use-drive-actions.quota_limit_exceeded_message')}</p>
|
||||
<p>{Languages.t('hooks.use-drive-actions.quota_limit_exceeded_plans')}</p>
|
||||
</>,
|
||||
);
|
||||
} else {
|
||||
ToasterService.error(Languages.t('hooks.use-drive-actions.unable_create_file'));
|
||||
}
|
||||
return null;
|
||||
}
|
||||
return driveFile;
|
||||
},
|
||||
[refresh],
|
||||
);
|
||||
@@ -132,8 +145,8 @@ export const useDriveActions = () => {
|
||||
const updateBody = {
|
||||
company_id: companyId,
|
||||
user_id: userId,
|
||||
level: level
|
||||
}
|
||||
level: level,
|
||||
};
|
||||
await DriveApiClient.updateLevel(companyId, id, updateBody);
|
||||
await refresh(id || '');
|
||||
} catch (e) {
|
||||
|
||||
@@ -151,7 +151,7 @@ export default class Api {
|
||||
requestType?: 'post' | 'get' | 'put' | 'delete';
|
||||
} = {},
|
||||
): Promise<Response> {
|
||||
return new Promise(resolve => {
|
||||
return new Promise((resolve) => {
|
||||
Requests.request(
|
||||
options.requestType ? options.requestType : 'post',
|
||||
new URL(route, Globals.api_root_url).toString(),
|
||||
|
||||
@@ -142,9 +142,9 @@ class UserAPIClientService {
|
||||
});
|
||||
}
|
||||
|
||||
async getQuota(userId: string): Promise<UserQuota> {
|
||||
async getQuota(companyId: string, userId: string): Promise<UserQuota> {
|
||||
return Api.get<UserQuota>(
|
||||
`/internal/services/users/v1/users/${userId}/quota`,
|
||||
`/internal/services/users/v1/users/${userId}/quota?companyId=${companyId}`,
|
||||
undefined,
|
||||
false
|
||||
).then(result => {
|
||||
|
||||
@@ -4,6 +4,7 @@ import UserAPIClient from '@features/users/api/user-api-client';
|
||||
import { useCurrentUser } from "features/users/hooks/use-current-user";
|
||||
import { atom, useRecoilState } from "recoil";
|
||||
import useRouteState from "app/features/router/hooks/use-route-state";
|
||||
import useRouterCompany from "app/features/router/hooks/use-router-company";
|
||||
|
||||
export const QuotaState = atom<UserQuota>({
|
||||
key: 'QuotaState',
|
||||
@@ -22,13 +23,14 @@ export const useUserQuota = () => {
|
||||
}
|
||||
const { appName } = useRouteState();
|
||||
const isPublic = appName === 'drive';
|
||||
const companyId = useRouterCompany();
|
||||
const { user } = isPublic ? { user: null } : useCurrentUser();
|
||||
const [quota, setQuota] = useRecoilState(QuotaState);
|
||||
|
||||
const getQuota = useCallback(async () => {
|
||||
let data: UserQuota = nullQuota;
|
||||
if (user && user?.id) {
|
||||
data = await UserAPIClient.getQuota(user.id);
|
||||
data = await UserAPIClient.getQuota(companyId, user.id);
|
||||
} else {
|
||||
data = nullQuota;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user