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"; import { Datasource } from "entities/Datasource"; export type EvaluationVersion = number; 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; defaultBranchName: string; remoteUrl: string; repoName: string; browserSupportedUrl?: string; isRepoPrivate?: boolean; browserSupportedRemoteUrl: string; defaultApplicationId: string; } | undefined; export interface ApplicationResponsePayload { id: string; name: string; organizationId: string; evaluationVersion?: EvaluationVersion; 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 FetchUnconfiguredDatasourceListResponse extends ApiResponse { data: 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 fetchUnconfiguredDatasourceList(payload: { applicationId: string; orgId: string; }): AxiosPromise { return Api.get( `${ApplicationApi.baseURL}/import/${payload.orgId}/datasources?defaultApplicationId=${payload.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( ApplicationApi.baseURL + "/" + 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( ApplicationApi.baseURL + "/import/" + request.orgId, formData, null, { headers: { "Content-Type": "multipart/form-data", }, onUploadProgress: request.progress, }, ); } } export default ApplicationApi;