import Api from "api/Api"; import { ApiResponse } from "./ApiResponses"; import { AxiosPromise } from "axios"; import { AppColorCode } from "constants/DefaultTheme"; import { AppIconName } from "components/ads/AppIcon"; import { AppLayoutConfig } from "reducers/entityReducers/pageListReducer"; export interface PublishApplicationRequest { applicationId: string; } export interface ChangeAppViewAccessRequest { applicationId: string; publicAccess: boolean; } export interface PublishApplicationResponse extends ApiResponse { data: unknown; } export interface ApplicationPagePayload { id: string; name: string; isDefault: boolean; } export type GitApplicationMetadata = { branchName?: string; remoteUrl?: string; repoName?: string; defaultApplicationId: string; }; export interface ApplicationResponsePayload { id: string; name: string; organizationId: string; pages?: ApplicationPagePayload[]; appIsExample: boolean; appLayout?: AppLayoutConfig; unreadCommentThreads?: number; gitApplicationMetadata?: GitApplicationMetadata; } export interface FetchApplicationResponse extends ApiResponse { data: ApplicationResponsePayload & { pages: ApplicationPagePayload[] }; } export interface FetchApplicationsResponse extends ApiResponse { data: Array; } export interface CreateApplicationResponse extends ApiResponse { data: ApplicationResponsePayload; } export interface CreateApplicationRequest { name: string; orgId: 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; organizationId: string; } export interface GetAllApplicationResponse extends ApiResponse { data: Array; } export type UpdateApplicationPayload = { icon?: string; color?: string; name?: string; currentApp?: boolean; appLayout?: AppLayoutConfig; }; export type UpdateApplicationRequest = UpdateApplicationPayload & { id: string; }; export interface ApplicationObject { id: string; name: string; icon?: string; color?: string; organizationId: string; pages: ApplicationPagePayload[]; userPermissions: string[]; } export interface UserRoles { name: string; roleName: string; username: string; } export interface OrganizationApplicationObject { applications: Array; organization: { id: string; name: string; }; userRoles: Array; } export interface FetchUsersApplicationsOrgsResponse extends ApiResponse { data: { organizationApplications: Array; user: string; newReleasesCount: string; releaseItems: Array>; }; } export interface ImportApplicationRequest { orgId: 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 = (orgId: string) => `?orgId=${orgId}`; static changeAppViewAccessPath = (applicationId: string) => `${applicationId}/changeAccess`; static setDefaultPagePath = (request: SetDefaultPageRequest) => `${ApplicationApi.baseURL}${request.applicationId}/page/${request.id}/makeDefault`; static publishApplication( publishApplicationRequest: PublishApplicationRequest, ): AxiosPromise { return Api.post( ApplicationApi.baseURL + ApplicationApi.publishURLPath(publishApplicationRequest.applicationId), undefined, {}, ); } static fetchApplications(): AxiosPromise { return Api.get(ApplicationApi.baseURL); } static getAllApplication(): AxiosPromise { return Api.get(ApplicationApi.baseURL + "new"); } static fetchApplication( applicationId: string, ): AxiosPromise { return Api.get(ApplicationApi.baseURL + applicationId); } static fetchApplicationForViewMode( applicationId: string, ): AxiosPromise { return Api.get(ApplicationApi.baseURL + `view/${applicationId}`); } static createApplication( request: CreateApplicationRequest, ): AxiosPromise { return Api.post( ApplicationApi.baseURL + ApplicationApi.createApplicationPath(request.orgId), { name: request.name, color: request.color, icon: request.icon }, ); } static setDefaultApplicationPage( request: SetDefaultPageRequest, ): AxiosPromise { return Api.put(ApplicationApi.setDefaultPagePath(request)); } static changeAppViewAccess( request: ChangeAppViewAccessRequest, ): AxiosPromise { return Api.put( ApplicationApi.baseURL + ApplicationApi.changeAppViewAccessPath(request.applicationId), { publicAccess: request.publicAccess }, ); } static updateApplication( request: UpdateApplicationRequest, ): AxiosPromise { const { id, ...rest } = request; return Api.put(ApplicationApi.baseURL + id, rest); } static deleteApplication( request: DeleteApplicationRequest, ): AxiosPromise { return Api.delete(ApplicationApi.baseURL + request.applicationId); } static duplicateApplication( request: DuplicateApplicationRequest, ): AxiosPromise { return Api.post(ApplicationApi.baseURL + "clone/" + request.applicationId); } static forkApplication( request: ForkApplicationRequest, ): AxiosPromise { return Api.post( "v1/applications/" + request.applicationId + "/fork/" + request.organizationId, ); } static importApplicationToOrg( request: ImportApplicationRequest, ): AxiosPromise { const formData = new FormData(); if (request.applicationFile) { formData.append("file", request.applicationFile); } return Api.post("v1/applications/import/" + request.orgId, formData, null, { headers: { "Content-Type": "multipart/form-data", }, onUploadProgress: request.progress, }); } static getSSHKeyPair(applicationId: string): AxiosPromise { return Api.get(ApplicationApi.baseURL + "ssh-keypair/" + applicationId); } static generateSSHKeyPair(applicationId: string): AxiosPromise { return Api.post(ApplicationApi.baseURL + "ssh-keypair/" + applicationId); } } export default ApplicationApi;