Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

delete-selected.ts 2.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. import Command from './command'
  2. import history from '../history'
  3. import { TranslateSnapshot } from 'state/sessions/translate-session'
  4. import { Data, ShapeType } from 'types'
  5. import {
  6. getDocumentBranch,
  7. getPage,
  8. getSelectedIds,
  9. setSelectedIds,
  10. setToArray,
  11. updateParents,
  12. } from 'utils/utils'
  13. import { current } from 'immer'
  14. import { getShapeUtils } from 'lib/shape-utils'
  15. export default function deleteSelected(data: Data) {
  16. const { currentPageId } = data
  17. const selectedIds = getSelectedIds(data)
  18. const selectedIdsArr = setToArray(selectedIds)
  19. const page = getPage(current(data))
  20. const childrenToDelete = selectedIdsArr
  21. .flatMap((id) => getDocumentBranch(data, id))
  22. .map((id) => page.shapes[id])
  23. selectedIds.clear()
  24. history.execute(
  25. data,
  26. new Command({
  27. name: 'delete_shapes',
  28. category: 'canvas',
  29. manualSelection: true,
  30. do(data) {
  31. const page = getPage(data, currentPageId)
  32. for (let id of selectedIdsArr) {
  33. const shape = page.shapes[id]
  34. if (!shape) {
  35. console.error('no shape ' + id)
  36. continue
  37. }
  38. if (shape.parentId !== data.currentPageId) {
  39. const parent = page.shapes[shape.parentId]
  40. getShapeUtils(parent)
  41. .setProperty(
  42. parent,
  43. 'children',
  44. parent.children.filter((childId) => childId !== shape.id)
  45. )
  46. .onChildrenChange(
  47. parent,
  48. parent.children.map((id) => page.shapes[id])
  49. )
  50. }
  51. }
  52. for (let shape of childrenToDelete) {
  53. delete page.shapes[shape.id]
  54. }
  55. setSelectedIds(data, [])
  56. },
  57. undo(data) {
  58. const page = getPage(data, currentPageId)
  59. for (let shape of childrenToDelete) {
  60. page.shapes[shape.id] = shape
  61. }
  62. for (let shape of childrenToDelete) {
  63. if (shape.parentId !== data.currentPageId) {
  64. const parent = page.shapes[shape.parentId]
  65. getShapeUtils(parent)
  66. .setProperty(parent, 'children', [...parent.children, shape.id])
  67. .onChildrenChange(
  68. parent,
  69. parent.children.map((id) => page.shapes[id])
  70. )
  71. }
  72. }
  73. setSelectedIds(data, selectedIdsArr)
  74. },
  75. })
  76. )
  77. }