mirror of
https://github.com/makeplane/plane.git
synced 2026-07-13 05:49:40 +02:00
sync: community changes (#1109)
* fix: issue properties dropdown (#5592) * fix: not authorized flicker (#5593) --------- Co-authored-by: Anmol Singh Bhatia <121005188+anmolsinghbhatia@users.noreply.github.com> Co-authored-by: sriram veeraghanta <veeraghanta.sriram@gmail.com>
This commit is contained in:
@@ -84,6 +84,7 @@ export const CycleDropdown: React.FC<Props> = observer((props) => {
|
||||
buttonContainerClassName
|
||||
)}
|
||||
onClick={handleOnClick}
|
||||
disabled={disabled}
|
||||
>
|
||||
{button}
|
||||
</button>
|
||||
@@ -100,6 +101,7 @@ export const CycleDropdown: React.FC<Props> = observer((props) => {
|
||||
buttonContainerClassName
|
||||
)}
|
||||
onClick={handleOnClick}
|
||||
disabled={disabled}
|
||||
>
|
||||
<DropdownButton
|
||||
className={buttonClassName}
|
||||
|
||||
@@ -146,6 +146,7 @@ export const DateRangeDropdown: React.FC<Props> = (props) => {
|
||||
buttonContainerClassName
|
||||
)}
|
||||
onClick={handleOnClick}
|
||||
disabled={disabled}
|
||||
>
|
||||
<DropdownButton
|
||||
className={buttonClassName}
|
||||
|
||||
@@ -115,6 +115,7 @@ export const DateDropdown: React.FC<Props> = (props) => {
|
||||
)}
|
||||
ref={setReferenceElement}
|
||||
onClick={handleOnClick}
|
||||
disabled={disabled}
|
||||
>
|
||||
<DropdownButton
|
||||
className={buttonClassName}
|
||||
|
||||
@@ -154,6 +154,7 @@ export const EstimateDropdown: React.FC<Props> = observer((props) => {
|
||||
type="button"
|
||||
className={cn("clickable block h-full w-full outline-none", buttonContainerClassName)}
|
||||
onClick={handleOnClick}
|
||||
disabled={disabled}
|
||||
>
|
||||
{button}
|
||||
</button>
|
||||
@@ -170,6 +171,7 @@ export const EstimateDropdown: React.FC<Props> = observer((props) => {
|
||||
buttonContainerClassName
|
||||
)}
|
||||
onClick={handleOnClick}
|
||||
disabled={disabled}
|
||||
>
|
||||
<DropdownButton
|
||||
className={buttonClassName}
|
||||
|
||||
@@ -106,6 +106,7 @@ export const MemberDropdown: React.FC<Props> = observer((props) => {
|
||||
type="button"
|
||||
className={cn("clickable block h-full w-full outline-none", buttonContainerClassName)}
|
||||
onClick={handleOnClick}
|
||||
disabled={disabled}
|
||||
>
|
||||
{button}
|
||||
</button>
|
||||
@@ -122,6 +123,7 @@ export const MemberDropdown: React.FC<Props> = observer((props) => {
|
||||
buttonContainerClassName
|
||||
)}
|
||||
onClick={handleOnClick}
|
||||
disabled={disabled}
|
||||
>
|
||||
<DropdownButton
|
||||
className={cn("text-xs", buttonClassName)}
|
||||
|
||||
@@ -234,6 +234,7 @@ export const ModuleDropdown: React.FC<Props> = observer((props) => {
|
||||
buttonContainerClassName
|
||||
)}
|
||||
onClick={handleOnClick}
|
||||
disabled={disabled}
|
||||
>
|
||||
{button}
|
||||
</button>
|
||||
@@ -250,6 +251,7 @@ export const ModuleDropdown: React.FC<Props> = observer((props) => {
|
||||
buttonContainerClassName
|
||||
)}
|
||||
onClick={handleOnClick}
|
||||
disabled={disabled}
|
||||
>
|
||||
<DropdownButton
|
||||
className={buttonClassName}
|
||||
|
||||
@@ -379,6 +379,7 @@ export const PriorityDropdown: React.FC<Props> = (props) => {
|
||||
type="button"
|
||||
className={cn("clickable block h-full w-full outline-none", buttonContainerClassName)}
|
||||
onClick={handleOnClick}
|
||||
disabled={disabled}
|
||||
>
|
||||
{button}
|
||||
</button>
|
||||
@@ -395,6 +396,7 @@ export const PriorityDropdown: React.FC<Props> = (props) => {
|
||||
buttonContainerClassName
|
||||
)}
|
||||
onClick={handleOnClick}
|
||||
disabled={disabled}
|
||||
>
|
||||
<ButtonToRender
|
||||
priority={value ?? undefined}
|
||||
|
||||
@@ -124,6 +124,7 @@ export const ProjectDropdown: React.FC<Props> = observer((props) => {
|
||||
type="button"
|
||||
className={cn("clickable block h-full w-full outline-none", buttonContainerClassName)}
|
||||
onClick={handleOnClick}
|
||||
disabled={disabled}
|
||||
>
|
||||
{button}
|
||||
</button>
|
||||
@@ -140,6 +141,7 @@ export const ProjectDropdown: React.FC<Props> = observer((props) => {
|
||||
buttonContainerClassName
|
||||
)}
|
||||
onClick={handleOnClick}
|
||||
disabled={disabled}
|
||||
>
|
||||
<DropdownButton
|
||||
className={buttonClassName}
|
||||
|
||||
@@ -135,6 +135,7 @@ export const StateDropdown: React.FC<Props> = observer((props) => {
|
||||
type="button"
|
||||
className={cn("clickable block h-full w-full outline-none", buttonContainerClassName)}
|
||||
onClick={handleOnClick}
|
||||
disabled={disabled}
|
||||
>
|
||||
{button}
|
||||
</button>
|
||||
@@ -151,6 +152,7 @@ export const StateDropdown: React.FC<Props> = observer((props) => {
|
||||
buttonContainerClassName
|
||||
)}
|
||||
onClick={handleOnClick}
|
||||
disabled={disabled}
|
||||
>
|
||||
<DropdownButton
|
||||
className={buttonClassName}
|
||||
|
||||
@@ -241,6 +241,7 @@ export const IssuePropertyLabels: React.FC<IIssuePropertyLabels> = observer((pro
|
||||
: "cursor-pointer hover:bg-custom-background-80"
|
||||
} ${buttonClassName}`}
|
||||
onClick={handleOnClick}
|
||||
disabled={disabled}
|
||||
>
|
||||
{label}
|
||||
{!hideDropdownArrow && !disabled && <ChevronDown className="h-3 w-3" aria-hidden="true" />}
|
||||
|
||||
@@ -49,7 +49,7 @@ export const WorkspaceAuthWrapper: FC<IWorkspaceAuthWrapper> = observer((props)
|
||||
|
||||
const { fetchAllIssueTypes } = useIssueTypes();
|
||||
const { isMobile } = usePlatformOS();
|
||||
const { workspaceInfoBySlug, fetchUserWorkspaceInfo, fetchUserProjectPermissions, allowPermissions } =
|
||||
const { loader, workspaceInfoBySlug, fetchUserWorkspaceInfo, fetchUserProjectPermissions, allowPermissions } =
|
||||
useUserPermissions();
|
||||
// derived values
|
||||
const canPerformWorkspaceMemberActions = allowPermissions(
|
||||
@@ -141,7 +141,7 @@ export const WorkspaceAuthWrapper: FC<IWorkspaceAuthWrapper> = observer((props)
|
||||
const currentWorkspaceInfo = workspaceSlug && workspaceInfoBySlug(workspaceSlug.toString());
|
||||
|
||||
// if list of workspaces are not there then we have to render the spinner
|
||||
if ((flagsLoader && !flagsError) || allWorkspaces === undefined) {
|
||||
if ((flagsLoader && !flagsError) || allWorkspaces === undefined || loader) {
|
||||
return (
|
||||
<div className="grid h-screen place-items-center bg-custom-background-100 p-4">
|
||||
<div className="flex flex-col items-center gap-3 text-center">
|
||||
|
||||
@@ -23,6 +23,7 @@ import { CoreRootStore } from "@/store/root.store";
|
||||
const workspaceService = new WorkspaceService();
|
||||
|
||||
export interface IUserPermissionStore {
|
||||
loader: boolean;
|
||||
// observables
|
||||
workspaceUserInfo: Record<string, IWorkspaceMemberMe>; // workspaceSlug -> IWorkspaceMemberMe
|
||||
projectUserInfo: Record<string, Record<string, IProjectMember>>; // workspaceSlug -> projectId -> IProjectMember
|
||||
@@ -52,6 +53,7 @@ export interface IUserPermissionStore {
|
||||
}
|
||||
|
||||
export class UserPermissionStore implements IUserPermissionStore {
|
||||
loader: boolean = false;
|
||||
// constants
|
||||
workspaceUserInfo: Record<string, IWorkspaceMemberMe> = {};
|
||||
projectUserInfo: Record<string, Record<string, IProjectMember>> = {};
|
||||
@@ -61,6 +63,7 @@ export class UserPermissionStore implements IUserPermissionStore {
|
||||
constructor(private store: CoreRootStore) {
|
||||
makeObservable(this, {
|
||||
// observables
|
||||
loader: observable.ref,
|
||||
workspaceUserInfo: observable,
|
||||
projectUserInfo: observable,
|
||||
workspaceProjectsPermissions: observable,
|
||||
@@ -156,15 +159,18 @@ export class UserPermissionStore implements IUserPermissionStore {
|
||||
*/
|
||||
fetchUserWorkspaceInfo = async (workspaceSlug: string): Promise<IWorkspaceMemberMe | undefined> => {
|
||||
try {
|
||||
this.loader = true;
|
||||
const response = await workspaceService.workspaceMemberMe(workspaceSlug);
|
||||
if (response) {
|
||||
runInAction(() => {
|
||||
set(this.workspaceUserInfo, [workspaceSlug], response);
|
||||
this.loader = false;
|
||||
});
|
||||
}
|
||||
return response;
|
||||
} catch (error) {
|
||||
console.error("Error fetching user workspace information", error);
|
||||
this.loader = false;
|
||||
throw error;
|
||||
}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user