您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

delete-selected.ts 1.6KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import Command from './command'
  2. import history from '../history'
  3. import { TranslateSnapshot } from 'state/sessions/translate-session'
  4. import { Data } from 'types'
  5. import { 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 shapes = selectedIds.map((id) => page.shapes[id])
  13. data.selectedIds.clear()
  14. history.execute(
  15. data,
  16. new Command({
  17. name: 'delete_shapes',
  18. category: 'canvas',
  19. manualSelection: true,
  20. do(data) {
  21. const page = getPage(data, currentPageId)
  22. for (let id of selectedIds) {
  23. const shape = page.shapes[id]
  24. if (shape.parentId !== data.currentPageId) {
  25. const parent = page.shapes[shape.parentId]
  26. getShapeUtils(parent)
  27. .setProperty(
  28. parent,
  29. 'children',
  30. parent.children.filter((childId) => childId !== shape.id)
  31. )
  32. .onChildrenChange(
  33. parent,
  34. parent.children.map((id) => page.shapes[id])
  35. )
  36. }
  37. delete page.shapes[id]
  38. }
  39. data.selectedIds.clear()
  40. },
  41. undo(data) {
  42. const page = getPage(data, currentPageId)
  43. data.selectedIds.clear()
  44. for (let shape of shapes) {
  45. page.shapes[shape.id] = shape
  46. data.selectedIds.add(shape.id)
  47. }
  48. },
  49. })
  50. )
  51. }