feat(core): make permission and invoice offline available (#8123)

This commit is contained in:
EYHN
2024-09-05 15:11:27 +00:00
parent 8be67dce82
commit f4db4058f8
17 changed files with 236 additions and 186 deletions

View File

@@ -1,14 +0,0 @@
import { getMemberCountByWorkspaceIdQuery } from '@affine/graphql';
import { useQuery } from '../use-query';
export function useMemberCount(workspaceId: string) {
const { data } = useQuery({
query: getMemberCountByWorkspaceIdQuery,
variables: {
workspaceId,
},
});
return data.workspace.memberCount;
}

View File

@@ -1,59 +0,0 @@
import type { GetMembersByWorkspaceIdQuery } from '@affine/graphql';
import { getMembersByWorkspaceIdQuery, Permission } from '@affine/graphql';
import { useMemo } from 'react';
import { useQuery } from '../use-query';
export function calculateWeight(member: Member) {
const permissionWeight = {
[Permission.Owner]: 4,
[Permission.Admin]: 3,
[Permission.Write]: 2,
[Permission.Read]: 1,
};
const factors = [
Number(member.permission === Permission.Owner), // Owner weight is the highest
Number(!member.accepted), // Unaccepted members are before accepted members
permissionWeight[member.permission] || 0,
];
return factors.reduce((ret, factor, index, arr) => {
return ret + factor * Math.pow(10, arr.length - 1 - index);
}, 0);
}
export type Member = Omit<
GetMembersByWorkspaceIdQuery['workspace']['members'][number],
'__typename'
>;
export function useMembers(
workspaceId: string,
skip: number,
take: number = 8
) {
const { data } = useQuery({
query: getMembersByWorkspaceIdQuery,
variables: {
workspaceId,
skip,
take,
},
});
const members = data.workspace.members;
return useMemo(() => {
// sort members by weight
return members.sort((a, b) => {
const weightDifference = calculateWeight(b) - calculateWeight(a);
if (weightDifference !== 0) {
return weightDifference;
}
// if weight is the same, sort by name
if (a.name === null) return 1;
if (b.name === null) return -1;
return a.name.localeCompare(b.name);
});
}, [members]);
}