Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

delete-selected.ts 2.3KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  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 { getDocumentBranch, getPage, updateParents } from 'utils/utils'
  6. import { current } from 'immer'
  7. import { getShapeUtils } from 'lib/shape-utils'
  8. export default function deleteSelected(data: Data) {
  9. const { currentPageId } = data
  10. const selectedIds = Array.from(data.selectedIds.values())
  11. const page = getPage(current(data))
  12. const childrenToDelete = selectedIds
  13. .flatMap((id) => getDocumentBranch(data, id))
  14. .map((id) => page.shapes[id])
  15. data.selectedIds.clear()
  16. history.execute(
  17. data,
  18. new Command({
  19. name: 'delete_shapes',
  20. category: 'canvas',
  21. manualSelection: true,
  22. do(data) {
  23. const page = getPage(data, currentPageId)
  24. for (let id of selectedIds) {
  25. const shape = page.shapes[id]
  26. if (!shape) {
  27. console.error('no shape ' + id)
  28. continue
  29. }
  30. if (shape.parentId !== data.currentPageId) {
  31. const parent = page.shapes[shape.parentId]
  32. getShapeUtils(parent)
  33. .setProperty(
  34. parent,
  35. 'children',
  36. parent.children.filter((childId) => childId !== shape.id)
  37. )
  38. .onChildrenChange(
  39. parent,
  40. parent.children.map((id) => page.shapes[id])
  41. )
  42. }
  43. }
  44. for (let shape of childrenToDelete) {
  45. delete page.shapes[shape.id]
  46. }
  47. data.selectedIds.clear()
  48. },
  49. undo(data) {
  50. const page = getPage(data, currentPageId)
  51. for (let shape of childrenToDelete) {
  52. page.shapes[shape.id] = shape
  53. }
  54. for (let shape of childrenToDelete) {
  55. if (shape.parentId !== data.currentPageId) {
  56. const parent = page.shapes[shape.parentId]
  57. getShapeUtils(parent)
  58. .setProperty(parent, 'children', [...parent.children, shape.id])
  59. .onChildrenChange(
  60. parent,
  61. parent.children.map((id) => page.shapes[id])
  62. )
  63. }
  64. }
  65. data.selectedIds = new Set(selectedIds)
  66. },
  67. })
  68. )
  69. }