You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tailchat/web/src/components/modals/GroupDetail/Role/useModifyPermission.ts

39 lines
1.1 KiB
TypeScript

import { useCallback, useEffect, useMemo, useState } from 'react';
import _isEqual from 'lodash/isEqual';
import _uniq from 'lodash/uniq';
import _without from 'lodash/without';
import { useAsyncFn } from 'tailchat-shared';
/**
* 权限编辑
*/
export function useModifyPermission(originPermission: string[]) {
const [editingPermission, setEditingPermission] = useState<string[]>([]);
const isEditing = useMemo(
() => !_isEqual(new Set(originPermission), new Set(editingPermission)),
[originPermission, editingPermission]
);
useEffect(() => {
setEditingPermission([...originPermission]);
}, [originPermission]);
const handleSwitchPermission = useCallback(
(permissionKey: string, enabled: boolean) => {
if (enabled) {
setEditingPermission(_uniq([...editingPermission, permissionKey]));
} else {
setEditingPermission(_without(editingPermission, permissionKey));
}
},
[editingPermission]
);
return {
isEditing,
editingPermission,
setEditingPermission,
handleSwitchPermission,
};
}