PromucFlow_constructor/app/client/src/api/ApplicationApi.tsx
Trisha Anand 8f3591615a
feat: RBAC framework (#14823)
Co-authored-by: Sidhant Goel <sidhant@appsmith.com>
Co-authored-by: Ankita Kinger <ankita@appsmith.com>
Co-authored-by: Sangeeth Sivan <sangeeth@appsmith.com>
Co-authored-by: Parthvi <80334441+Parthvi12@users.noreply.github.com>
2022-08-22 23:27:07 +05:30

297 lines
7.7 KiB
TypeScript

import Api from "api/Api";
import { ApiResponse } from "./ApiResponses";
import { AxiosPromise } from "axios";
import { AppColorCode } from "constants/DefaultTheme";
import { AppIconName } from "design-system";
import { AppLayoutConfig } from "reducers/entityReducers/pageListReducer";
import { APP_MODE } from "entities/App";
import { ApplicationVersion } from "actions/applicationActions";
import { Datasource } from "entities/Datasource";
export type EvaluationVersion = number;
export interface PublishApplicationRequest {
applicationId: string;
}
export interface ChangeAppViewAccessRequest {
applicationId: string;
publicAccess: boolean;
}
export type PublishApplicationResponse = ApiResponse;
export interface ApplicationPagePayload {
id: string;
name: string;
isDefault: boolean;
slug: string;
isHidden?: boolean;
customSlug?: string;
}
export type GitApplicationMetadata =
| {
branchName: string;
defaultBranchName: string;
remoteUrl: string;
repoName: string;
browserSupportedUrl?: string;
isRepoPrivate?: boolean;
browserSupportedRemoteUrl: string;
defaultApplicationId: string;
}
| undefined;
export interface ApplicationResponsePayload {
id: string;
name: string;
workspaceId: string;
evaluationVersion?: EvaluationVersion;
pages: ApplicationPagePayload[];
appIsExample: boolean;
appLayout?: AppLayoutConfig;
gitApplicationMetadata: GitApplicationMetadata;
slug: string;
applicationVersion: ApplicationVersion;
}
export interface FetchApplicationPayload {
applicationId?: string;
pageId?: string;
mode: APP_MODE;
}
export interface FetchApplicationResponseData {
application: Omit<ApplicationResponsePayload, "pages">;
pages: ApplicationPagePayload[];
workspaceId: string;
}
export type FetchApplicationResponse = ApiResponse<
FetchApplicationResponseData
>;
export type FetchApplicationsResponse = ApiResponse<
FetchApplicationResponseData[]
>;
export type CreateApplicationResponse = ApiResponse<ApplicationResponsePayload>;
export interface CreateApplicationRequest {
name: string;
workspaceId: string;
color?: AppColorCode;
icon?: AppIconName;
}
export interface SetDefaultPageRequest {
id: string;
applicationId: string;
}
export interface DeleteApplicationRequest {
applicationId: string;
}
export interface DuplicateApplicationRequest {
applicationId: string;
}
export interface ForkApplicationRequest {
applicationId: string;
workspaceId: string;
}
export type GetAllApplicationResponse = ApiResponse<ApplicationPagePayload[]>;
export type UpdateApplicationPayload = {
icon?: string;
color?: string;
name?: string;
currentApp?: boolean;
appLayout?: AppLayoutConfig;
applicationVersion?: number;
};
export type UpdateApplicationRequest = UpdateApplicationPayload & {
id: string;
callback?: () => void;
};
export interface ApplicationObject {
id: string;
name: string;
icon?: string;
color?: string;
workspaceId: string;
pages: ApplicationPagePayload[];
userPermissions: string[];
}
export interface PermissionGroup {
permissionGroupId: string;
permissionGroupName: string;
}
export interface UserRoles extends PermissionGroup {
name: string;
username: string;
userId: string;
}
export interface WorkspaceApplicationObject {
applications: Array<ApplicationObject>;
workspace: {
id: string;
name: string;
};
users: Array<UserRoles>;
}
export interface FetchUsersApplicationsWorkspacesResponse extends ApiResponse {
data: {
workspaceApplications: Array<WorkspaceApplicationObject>;
user: string;
newReleasesCount: string;
releaseItems: Array<Record<string, any>>;
};
}
export interface FetchUnconfiguredDatasourceListResponse extends ApiResponse {
data: Array<Datasource>;
}
export interface ImportApplicationRequest {
workspaceId: string;
applicationFile?: File;
progress?: (progressEvent: ProgressEvent) => void;
onSuccessCallback?: () => void;
}
class ApplicationApi extends Api {
static baseURL = "v1/applications";
static publishURLPath = (applicationId: string) =>
`/publish/${applicationId}`;
static createApplicationPath = (workspaceId: string) =>
`?workspaceId=${workspaceId}`;
static changeAppViewAccessPath = (applicationId: string) =>
`/${applicationId}/changeAccess`;
static setDefaultPagePath = (request: SetDefaultPageRequest) =>
`${ApplicationApi.baseURL}/${request.applicationId}/page/${request.id}/makeDefault`;
static publishApplication(
publishApplicationRequest: PublishApplicationRequest,
): AxiosPromise<PublishApplicationResponse> {
return Api.post(
ApplicationApi.baseURL +
ApplicationApi.publishURLPath(publishApplicationRequest.applicationId),
undefined,
{},
);
}
static fetchApplications(): AxiosPromise<FetchApplicationsResponse> {
return Api.get(ApplicationApi.baseURL);
}
static getAllApplication(): AxiosPromise<GetAllApplicationResponse> {
return Api.get(ApplicationApi.baseURL + "/new");
}
static fetchApplication(
applicationId: string,
): AxiosPromise<FetchApplicationResponse> {
return Api.get(ApplicationApi.baseURL + "/" + applicationId);
}
static fetchUnconfiguredDatasourceList(payload: {
applicationId: string;
workspaceId: string;
}): AxiosPromise<FetchUnconfiguredDatasourceListResponse> {
return Api.get(
`${ApplicationApi.baseURL}/import/${payload.workspaceId}/datasources?defaultApplicationId=${payload.applicationId}`,
);
}
static fetchApplicationForViewMode(
applicationId: string,
): AxiosPromise<FetchApplicationResponse> {
return Api.get(ApplicationApi.baseURL + `/view/${applicationId}`);
}
static createApplication(
request: CreateApplicationRequest,
): AxiosPromise<PublishApplicationResponse> {
return Api.post(
ApplicationApi.baseURL +
ApplicationApi.createApplicationPath(request.workspaceId),
{ name: request.name, color: request.color, icon: request.icon },
);
}
static setDefaultApplicationPage(
request: SetDefaultPageRequest,
): AxiosPromise<ApiResponse> {
return Api.put(ApplicationApi.setDefaultPagePath(request));
}
static changeAppViewAccess(
request: ChangeAppViewAccessRequest,
): AxiosPromise<ApiResponse> {
return Api.put(
ApplicationApi.baseURL +
ApplicationApi.changeAppViewAccessPath(request.applicationId),
{ publicAccess: request.publicAccess },
);
}
static updateApplication(
request: UpdateApplicationRequest,
): AxiosPromise<ApiResponse> {
const { id, ...rest } = request;
return Api.put(ApplicationApi.baseURL + "/" + id, rest);
}
static deleteApplication(
request: DeleteApplicationRequest,
): AxiosPromise<ApiResponse> {
return Api.delete(ApplicationApi.baseURL + "/" + request.applicationId);
}
static duplicateApplication(
request: DuplicateApplicationRequest,
): AxiosPromise<ApiResponse> {
return Api.post(ApplicationApi.baseURL + "/clone/" + request.applicationId);
}
static forkApplication(
request: ForkApplicationRequest,
): AxiosPromise<ApiResponse> {
return Api.post(
ApplicationApi.baseURL +
"/" +
request.applicationId +
"/fork/" +
request.workspaceId,
);
}
static importApplicationToWorkspace(
request: ImportApplicationRequest,
): AxiosPromise<ApiResponse> {
const formData = new FormData();
if (request.applicationFile) {
formData.append("file", request.applicationFile);
}
return Api.post(
ApplicationApi.baseURL + "/import/" + request.workspaceId,
formData,
null,
{
headers: {
"Content-Type": "multipart/form-data",
},
onUploadProgress: request.progress,
},
);
}
}
export default ApplicationApi;