import {IPage, IPageMap, Page} from '../../models'; import {getLastValueInMap, moveItemInMap, updateElementPositionInMap} from '../utils'; import {IPageFlow} from '../../models'; export function createNextPage(pages: IPageMap, surveyId: string, pageId: string): IPageMap { const newPage: IPage = new Page(pageId, surveyId); if (pages.size >= 1) { const lastPage: IPage = getLastValueInMap(pages); newPage.orderNo = lastPage.orderNo + 1; } pages.set(newPage.id, newPage); return new Map(pages); } export function insertPage(pages: IPageMap, previousPageId: string, surveyId: string, pageId: string): IPageMap { const newPage: IPage = new Page(pageId, surveyId); const pagesMap = new Map(); pages.forEach((value, key) => { if (key === previousPageId) { pagesMap.set(key, value); pagesMap.set(newPage.id, newPage); } else { pagesMap.set(key, value); } }); updateElementPositionInMap(pagesMap); return new Map(pagesMap); } export function movePageUp(pages: IPageMap, pageId: string): IPageMap { const currentPage = pages.get(pageId); const index = currentPage.orderNo - 2; pages.delete(pageId); const pagesMap = moveItemInMap(pages, index, currentPage); updateElementPositionInMap(pagesMap); return new Map(pagesMap); } export function movePageDown(pages: IPageMap, pageId: string): IPageMap { const currentPage = pages.get(pageId); const index = currentPage.orderNo; pages.delete(pageId); const pagesMap = moveItemInMap(pages, index, currentPage); updateElementPositionInMap(pagesMap); return new Map(pagesMap); } export function removePage(pages: IPageMap, pageId: string): IPageMap { pages.delete(pageId); updateElementPositionInMap(pages); return new Map(pages); } export function updatePageName(pages: IPageMap, pageId: string, name: string): IPageMap { const currentPage: IPage = pages.get(pageId); currentPage.name = name; return new Map(pages); } export function updatePageDescription(pages: IPageMap, pageId: string, description: string): IPageMap { const currentPage: IPage = pages.get(pageId); currentPage.description = description; return new Map(pages); } export function updatePagePageFlow(pages: IPageMap, pageId: string, pageFlow: IPageFlow): IPageMap { const currentPage: IPage = pages.get(pageId); currentPage.pageFlow = pageFlow; return new Map(pages); }