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:
Plane Bot
2024-09-12 17:00:48 +05:30
committed by GitHub
parent 8b07d391f8
commit b01228073d
12 changed files with 25 additions and 2 deletions

View File

@@ -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}

View File

@@ -146,6 +146,7 @@ export const DateRangeDropdown: React.FC<Props> = (props) => {
buttonContainerClassName
)}
onClick={handleOnClick}
disabled={disabled}
>
<DropdownButton
className={buttonClassName}

View File

@@ -115,6 +115,7 @@ export const DateDropdown: React.FC<Props> = (props) => {
)}
ref={setReferenceElement}
onClick={handleOnClick}
disabled={disabled}
>
<DropdownButton
className={buttonClassName}

View File

@@ -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}

View File

@@ -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)}

View File

@@ -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}

View File

@@ -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}

View File

@@ -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}

View File

@@ -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}

View File

@@ -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" />}

View File

@@ -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">

View File

@@ -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;
}
};