import Api from "./Api"; import { ApiResponse } from "./ApiResponses"; import { AxiosPromise } from "axios"; export interface PublishApplicationRequest { applicationId: string; } export interface ChangeAppViewAccessRequest { applicationId: string; publicAccess: boolean; } export interface PublishApplicationResponse extends ApiResponse { data: {}; } export interface ApplicationPagePayload { id: string; name: string; isDefault: boolean; } export interface ApplicationResponsePayload { id: string; name: string; organizationId: string; pages?: ApplicationPagePayload[]; } // 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; } export interface SetDefaultPageRequest { pageId: string; applicationId: string; } export interface DeleteApplicationRequest { applicationId: string; } export interface GetAllApplicationResponse extends ApiResponse { data: Array; } export interface ApplicationObject { id: string; name: string; organizationId: string; pages: ApplicationPagePayload[]; userPermissions: string[]; } export interface OrganizationApplicationObject { applications: Array; organization: { id: string; name: string; }; } export interface FetchUsersApplicationsOrgsResponse extends ApiResponse { data: { organizationApplications: Array; user: string; }; } 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.pageId}/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 createApplication( request: CreateApplicationRequest, ): AxiosPromise { return Api.post( ApplicationApi.baseURL + ApplicationApi.createApplicationPath(request.orgId), { name: request.name }, ); } 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 deleteApplication( request: DeleteApplicationRequest, ): AxiosPromise { return Api.delete(ApplicationApi.baseURL + request.applicationId); } } export default ApplicationApi;