You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

delete-page.ts 1.3KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. import Command from './command'
  2. import history from '../history'
  3. import { Data } from 'types'
  4. import storage from 'state/storage'
  5. import { deepClone } from 'utils'
  6. import tld from 'utils/tld'
  7. export default function deletePage(data: Data, pageId: string): void {
  8. const snapshot = getSnapshot(data, pageId)
  9. history.execute(
  10. data,
  11. new Command({
  12. name: 'delete_page',
  13. category: 'canvas',
  14. do(data) {
  15. data.currentPageId = snapshot.nextPageId
  16. delete data.document.pages[pageId]
  17. delete data.pageStates[pageId]
  18. storage.loadPage(data, snapshot.nextPageId)
  19. },
  20. undo(data) {
  21. data.currentPageId = snapshot.currentPageId
  22. data.document.pages[pageId] = snapshot.page
  23. data.pageStates[pageId] = snapshot.pageState
  24. storage.loadPage(data, snapshot.currentPageId)
  25. },
  26. })
  27. )
  28. }
  29. function getSnapshot(data: Data, pageId: string) {
  30. const { currentPageId, document } = data
  31. const page = deepClone(tld.getPage(data))
  32. const pageState = deepClone(tld.getPageState(data))
  33. const isCurrent = data.currentPageId === pageId
  34. const nextPageId = isCurrent
  35. ? Object.values(document.pages).filter((page) => page.id !== pageId)[0]?.id // TODO: should be at nextIndex
  36. : currentPageId
  37. return {
  38. nextPageId,
  39. isCurrent,
  40. currentPageId,
  41. page,
  42. pageState,
  43. }
  44. }