import Api from "./Api"; import { ContainerWidgetProps } from "widgets/ContainerWidget"; import { ApiResponse } from "./ApiResponses"; import { WidgetProps } from "widgets/BaseWidget"; import { AxiosPromise } from "axios"; import { PageAction } from "constants/ActionConstants"; export interface FetchPageRequest { pageId: string; } export interface FetchPublishedPageRequest { pageId: string; bustCache?: boolean; } export interface SavePageRequest { dsl: ContainerWidgetProps; layoutId: string; pageId: string; } export interface PageLayout { id: string; dsl: Partial>; layoutOnLoadActions: PageAction[][]; layoutActions: PageAction[]; } export type FetchPageResponse = ApiResponse & { data: { id: string; name: string; applicationId: string; layouts: Array; }; }; export type FetchPublishedPageResponse = ApiResponse & { data: { id: string; dsl: Partial>; pageId: string; }; }; export interface SavePageResponse extends ApiResponse { pageId: string; } export interface CreatePageRequest { applicationId: string; name: string; } export interface UpdatePageRequest { id: string; name: string; } export interface CreatePageResponse extends ApiResponse { data: {}; } export interface FetchPageListResponse extends ApiResponse { data: { pages: Array<{ id: string; name: string; isDefault: boolean; layouts: Array; }>; organizationId: string; }; } export interface DeletePageRequest { pageId: string; } export interface UpdateWidgetNameRequest { pageId: string; layoutId: string; newName: string; oldName: string; } export interface UpdateWidgetNameResponse extends ApiResponse { data: PageLayout; } class PageApi extends Api { static url = "v1/pages"; static refactorLayoutURL = "v1/layouts/refactor"; static getLayoutUpdateURL = (pageId: string, layoutId: string) => { return `v1/layouts/${layoutId}/pages/${pageId}`; }; static getPublishedPageURL = (pageId: string, bustCache?: boolean) => { const url = `v1/pages/${pageId}/view`; return !!bustCache ? url + "?v=" + +new Date() : url; }; static updatePageUrl = (pageId: string) => `${PageApi.url}/${pageId}`; static fetchPage( pageRequest: FetchPageRequest, ): AxiosPromise { return Api.get(PageApi.url + "/" + pageRequest.pageId); } static savePage( savePageRequest: SavePageRequest, ): AxiosPromise { const body = { dsl: savePageRequest.dsl }; return Api.put( PageApi.getLayoutUpdateURL( savePageRequest.pageId, savePageRequest.layoutId, ), body, ); } static fetchPublishedPage( pageRequest: FetchPublishedPageRequest, ): AxiosPromise { return Api.get( PageApi.getPublishedPageURL(pageRequest.pageId, pageRequest.bustCache), ); } static createPage( createPageRequest: CreatePageRequest, ): AxiosPromise { return Api.post(PageApi.url, createPageRequest); } static updatePage(request: UpdatePageRequest): AxiosPromise { return Api.put(PageApi.updatePageUrl(request.id), request); } static fetchPageList( applicationId: string, ): AxiosPromise { return Api.get(PageApi.url + "/application/" + applicationId); } static deletePage(request: DeletePageRequest): AxiosPromise { return Api.delete(PageApi.url + "/" + request.pageId); } static updateWidgetName( request: UpdateWidgetNameRequest, ): AxiosPromise { return Api.put(PageApi.refactorLayoutURL, request); } } export default PageApi;