Skip to content

Commit f4db405

Browse files
committed
feat(core): make permission and invoice offline available (#8123)
1 parent 8be67dc commit f4db405

File tree

17 files changed

+236
-186
lines changed

17 files changed

+236
-186
lines changed

packages/backend/server/src/core/permission/service.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,14 @@ export class PermissionService {
7575
return owner.user;
7676
}
7777

78+
async getWorkspaceMemberCount(workspaceId: string) {
79+
return this.prisma.workspaceUserPermission.count({
80+
where: {
81+
workspaceId,
82+
},
83+
});
84+
}
85+
7886
async tryGetWorkspaceOwner(workspaceId: string) {
7987
return this.prisma.workspaceUserPermission.findFirst({
8088
where: {

packages/backend/server/src/core/quota/storage.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,8 @@ export class QuotaManagementService {
113113
// quota was apply to owner's account
114114
async getWorkspaceUsage(workspaceId: string): Promise<QuotaBusinessType> {
115115
const owner = await this.permissions.getWorkspaceOwner(workspaceId);
116+
const memberCount =
117+
await this.permissions.getWorkspaceMemberCount(workspaceId);
116118
const {
117119
feature: {
118120
name,
@@ -145,6 +147,7 @@ export class QuotaManagementService {
145147
humanReadable,
146148
usedSize,
147149
unlimited,
150+
memberCount,
148151
};
149152

150153
if (quota.unlimited) {

packages/backend/server/src/core/quota/types.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,9 @@ export class QuotaQueryType {
8787
@Field(() => SafeIntResolver)
8888
memberLimit!: number;
8989

90+
@Field(() => SafeIntResolver)
91+
memberCount!: number;
92+
9093
@Field(() => SafeIntResolver)
9194
storageQuota!: number;
9295

packages/backend/server/src/core/workspaces/resolvers/workspace.ts

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -115,11 +115,7 @@ export class WorkspaceResolver {
115115
complexity: 2,
116116
})
117117
memberCount(@Parent() workspace: WorkspaceType) {
118-
return this.prisma.workspaceUserPermission.count({
119-
where: {
120-
workspaceId: workspace.id,
121-
},
122-
});
118+
return this.permissions.getWorkspaceMemberCount(workspace.id);
123119
}
124120

125121
@ResolveField(() => Boolean, {
@@ -388,13 +384,8 @@ export class WorkspaceResolver {
388384
}
389385

390386
// member limit check
391-
const [memberCount, quota] = await Promise.all([
392-
this.prisma.workspaceUserPermission.count({
393-
where: { workspaceId },
394-
}),
395-
this.quota.getWorkspaceUsage(workspaceId),
396-
]);
397-
if (memberCount >= quota.memberLimit) {
387+
const quota = await this.quota.getWorkspaceUsage(workspaceId);
388+
if (quota.memberCount >= quota.memberLimit) {
398389
return new MemberQuotaExceeded();
399390
}
400391

packages/backend/server/src/schema.gql

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -603,6 +603,7 @@ type QuotaQueryType {
603603
copilotActionLimit: SafeInt
604604
historyPeriod: SafeInt!
605605
humanReadable: HumanReadableQuotaType!
606+
memberCount: SafeInt!
606607
memberLimit: SafeInt!
607608
name: String!
608609
storageQuota: SafeInt!

packages/frontend/component/src/components/member-components/pagination.tsx

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,19 +6,21 @@ import ReactPaginate from 'react-paginate';
66
import * as styles from './styles.css';
77
export interface PaginationProps {
88
totalCount: number;
9+
pageNum?: number;
910
countPerPage: number;
10-
onPageChange: (skip: number) => void;
11+
onPageChange: (skip: number, pageNum: number) => void;
1112
}
1213

1314
export const Pagination = ({
1415
totalCount,
1516
countPerPage,
17+
pageNum,
1618
onPageChange,
1719
}: PaginationProps) => {
1820
const handlePageClick = useCallback(
1921
(e: { selected: number }) => {
2022
const newOffset = (e.selected * countPerPage) % totalCount;
21-
onPageChange(newOffset);
23+
onPageChange(newOffset, e.selected);
2224
},
2325
[countPerPage, onPageChange, totalCount]
2426
);
@@ -34,6 +36,7 @@ export const Pagination = ({
3436
pageRangeDisplayed={3}
3537
marginPagesDisplayed={2}
3638
pageCount={pageCount}
39+
forcePage={pageNum}
3740
previousLabel={<ArrowLeftSmallIcon />}
3841
nextLabel={<ArrowRightSmallIcon />}
3942
pageClassName={styles.pageItem}

0 commit comments

Comments
 (0)