浏览代码

Adds `isInSession` to prevent conflicts.

main
Steve Ruiz 4 年前
父节点
当前提交
badda0bb1c
共有 2 个文件被更改,包括 198 次插入70 次删除
  1. 4
    0
      state/session.ts
  2. 194
    70
      state/state.ts

+ 4
- 0
state/session.ts 查看文件

@@ -89,6 +89,10 @@ class SessionManager {
89 89
     this.#current = undefined
90 90
     return this
91 91
   }
92
+
93
+  get isInSession() {
94
+    return this.#current !== undefined
95
+  }
92 96
 }
93 97
 
94 98
 const session = new SessionManager()

+ 194
- 70
state/state.ts 查看文件

@@ -132,44 +132,158 @@ const state = createState({
132 132
         else: ['zoomCameraToActual'],
133 133
       },
134 134
       on: {
135
-        COPIED: { if: 'hasSelection', do: 'copyToClipboard' },
136
-        PASTED: { do: 'pasteFromClipboard' },
137
-        PASTED_SHAPES_FROM_CLIPBOARD: 'pasteShapesFromClipboard',
138
-        COPIED_STATE_TO_CLIPBOARD: 'copyStateToClipboard',
139 135
         LOADED_FONTS: 'resetShapes',
140
-        TOGGLED_SHAPE_LOCK: { if: 'hasSelection', do: 'lockSelection' },
141
-        TOGGLED_SHAPE_HIDE: { if: 'hasSelection', do: 'hideSelection' },
136
+        USED_PEN_DEVICE: 'enablePenLock',
137
+        DISABLED_PEN_LOCK: 'disablePenLock',
138
+        TOGGLED_CODE_PANEL_OPEN: 'toggleCodePanel',
139
+        TOGGLED_STYLE_PANEL_OPEN: 'toggleStylePanel',
140
+        PANNED_CAMERA: 'panCamera',
141
+        POINTED_CANVAS: ['closeStylePanel', 'clearCurrentParentId'],
142
+        COPIED_STATE_TO_CLIPBOARD: 'copyStateToClipboard',
143
+        COPIED: { if: 'hasSelection', do: 'copyToClipboard' },
144
+        PASTED: {
145
+          unlessAny: ['isReadOnly', 'isInSession'],
146
+          do: 'pasteFromClipboard',
147
+        },
148
+        PASTED_SHAPES_FROM_CLIPBOARD: {
149
+          unlessAny: ['isReadOnly', 'isInSession'],
150
+          do: 'pasteShapesFromClipboard',
151
+        },
152
+        TOGGLED_SHAPE_LOCK: {
153
+          unlessAny: ['isReadOnly', 'isInSession'],
154
+          if: 'hasSelection',
155
+          do: 'lockSelection',
156
+        },
157
+        TOGGLED_SHAPE_HIDE: {
158
+          unlessAny: ['isReadOnly', 'isInSession'],
159
+          if: 'hasSelection',
160
+          do: 'hideSelection',
161
+        },
142 162
         TOGGLED_SHAPE_ASPECT_LOCK: {
163
+          unlessAny: ['isReadOnly', 'isInSession'],
143 164
           if: 'hasSelection',
144 165
           do: 'aspectLockSelection',
145 166
         },
146
-        TOGGLED_CODE_PANEL_OPEN: 'toggleCodePanel',
147
-        TOGGLED_STYLE_PANEL_OPEN: 'toggleStylePanel',
148
-        POINTED_CANVAS: ['closeStylePanel', 'clearCurrentParentId'],
149
-        CHANGED_STYLE: ['updateStyles', 'applyStylesToSelection'],
150
-        USED_PEN_DEVICE: 'enablePenLock',
151
-        DISABLED_PEN_LOCK: 'disablePenLock',
167
+        CHANGED_STYLE: {
168
+          unlessAny: ['isReadOnly', 'isInSession'],
169
+          do: ['updateStyles', 'applyStylesToSelection'],
170
+        },
152 171
         CLEARED_PAGE: {
172
+          unlessAny: ['isReadOnly', 'isInSession'],
153 173
           if: 'hasSelection',
154 174
           do: 'deleteSelection',
155 175
           else: ['selectAll', 'deleteSelection'],
156 176
         },
157
-        SELECTED_ALL: { to: 'selecting', do: 'selectAll' },
158
-        CHANGED_PAGE: 'changePage',
159
-        CREATED_PAGE: ['clearSelectedIds', 'createPage'],
160
-        DELETED_PAGE: { unless: 'hasOnlyOnePage', do: 'deletePage' },
161
-        LOADED_FROM_FILE: ['loadDocumentFromJson', 'resetHistory'],
162
-        PANNED_CAMERA: 'panCamera',
163
-        SELECTED_SELECT_TOOL: { to: 'selecting' },
164
-        SELECTED_DRAW_TOOL: { unless: 'isReadOnly', to: 'draw' },
165
-        SELECTED_ARROW_TOOL: { unless: 'isReadOnly', to: 'arrow' },
166
-        SELECTED_DOT_TOOL: { unless: 'isReadOnly', to: 'dot' },
167
-        SELECTED_ELLIPSE_TOOL: { unless: 'isReadOnly', to: 'ellipse' },
168
-        SELECTED_RAY_TOOL: { unless: 'isReadOnly', to: 'ray' },
169
-        SELECTED_LINE_TOOL: { unless: 'isReadOnly', to: 'line' },
170
-        SELECTED_POLYLINE_TOOL: { unless: 'isReadOnly', to: 'polyline' },
171
-        SELECTED_RECTANGLE_TOOL: { unless: 'isReadOnly', to: 'rectangle' },
172
-        SELECTED_TEXT_TOOL: { unless: 'isReadOnly', to: 'text' },
177
+        CREATED_PAGE: {
178
+          unless: ['isReadOnly', 'isInSession'],
179
+          do: ['clearSelectedIds', 'createPage'],
180
+        },
181
+        DELETED_PAGE: {
182
+          unlessAny: ['isReadOnly', 'isInSession', 'hasOnlyOnePage'],
183
+          do: 'deletePage',
184
+        },
185
+        SELECTED_SELECT_TOOL: {
186
+          unless: 'isInSession',
187
+          to: 'selecting',
188
+        },
189
+        SELECTED_DRAW_TOOL: {
190
+          unlessAny: ['isReadOnly', 'isInSession'],
191
+          to: 'draw',
192
+        },
193
+        SELECTED_ARROW_TOOL: {
194
+          unless: ['isReadOnly', 'isInSession'],
195
+          to: 'arrow',
196
+        },
197
+        SELECTED_DOT_TOOL: {
198
+          unless: ['isReadOnly', 'isInSession'],
199
+          to: 'dot',
200
+        },
201
+        SELECTED_ELLIPSE_TOOL: {
202
+          unless: ['isReadOnly', 'isInSession'],
203
+          to: 'ellipse',
204
+        },
205
+        SELECTED_RAY_TOOL: {
206
+          unless: ['isReadOnly', 'isInSession'],
207
+          to: 'ray',
208
+        },
209
+        SELECTED_LINE_TOOL: {
210
+          unless: ['isReadOnly', 'isInSession'],
211
+          to: 'line',
212
+        },
213
+        SELECTED_POLYLINE_TOOL: {
214
+          unless: ['isReadOnly', 'isInSession'],
215
+          to: 'polyline',
216
+        },
217
+        SELECTED_RECTANGLE_TOOL: {
218
+          unless: ['isReadOnly', 'isInSession'],
219
+          to: 'rectangle',
220
+        },
221
+        SELECTED_TEXT_TOOL: {
222
+          unless: ['isReadOnly', 'isInSession'],
223
+          to: 'text',
224
+        },
225
+        GENERATED_FROM_CODE: {
226
+          unless: ['isReadOnly', 'isInSession'],
227
+          do: ['setCodeControls', 'setGeneratedShapes'],
228
+        },
229
+        UNDO: {
230
+          unless: 'isInSession',
231
+          do: 'undo',
232
+        },
233
+        REDO: {
234
+          unless: 'isInSession',
235
+          do: 'redo',
236
+        },
237
+        SAVED: {
238
+          unlessAny: ['isInSession', 'isReadOnly'],
239
+          do: 'forceSave',
240
+        },
241
+        LOADED_FROM_FILE: {
242
+          unless: 'isInSession',
243
+          do: ['loadDocumentFromJson', 'resetHistory'],
244
+        },
245
+        SELECTED_ALL: {
246
+          unless: 'isInSession',
247
+          to: 'selecting',
248
+          do: 'selectAll',
249
+        },
250
+        CHANGED_PAGE: {
251
+          unless: 'isInSession',
252
+          do: 'changePage',
253
+        },
254
+        ZOOMED_TO_ACTUAL: {
255
+          if: 'hasSelection',
256
+          do: 'zoomCameraToSelectionActual',
257
+          else: 'zoomCameraToActual',
258
+        },
259
+        ZOOMED_CAMERA: 'zoomCamera',
260
+        INCREASED_CODE_FONT_SIZE: 'increaseCodeFontSize',
261
+        DECREASED_CODE_FONT_SIZE: 'decreaseCodeFontSize',
262
+        CHANGED_CODE_CONTROL: 'updateControls',
263
+        TOGGLED_TOOL_LOCK: 'toggleToolLock',
264
+        ZOOMED_TO_SELECTION: {
265
+          if: 'hasSelection',
266
+          do: 'zoomCameraToSelection',
267
+        },
268
+        STARTED_PINCHING: {
269
+          unless: 'isInSession',
270
+          to: 'pinching',
271
+        },
272
+        ZOOMED_TO_FIT: ['zoomCameraToFit', 'zoomCameraToActual'],
273
+        ZOOMED_IN: 'zoomIn',
274
+        ZOOMED_OUT: 'zoomOut',
275
+        RESET_CAMERA: 'resetCamera',
276
+        COPIED_TO_SVG: 'copyToSvg',
277
+        LOADED_FROM_FILE_STSTEM: 'loadFromFileSystem',
278
+        SAVED_AS_TO_FILESYSTEM: 'saveAsToFileSystem',
279
+        SAVED_TO_FILESYSTEM: {
280
+          unless: 'isReadOnly',
281
+          then: {
282
+            if: 'isReadOnly',
283
+            do: 'saveAsToFileSystem',
284
+            else: 'saveToFileSystem',
285
+          },
286
+        },
173 287
       },
174 288
       initial: 'selecting',
175 289
       states: {
@@ -179,52 +293,60 @@ const state = createState({
179 293
             UNDO: 'undo',
180 294
             REDO: 'redo',
181 295
             SAVED: 'forceSave',
182
-            LOADED_FROM_FILE_STSTEM: 'loadFromFileSystem',
183
-            SAVED_TO_FILESYSTEM: 'saveToFileSystem',
184
-            SAVED_AS_TO_FILESYSTEM: 'saveAsToFileSystem',
185
-            SAVED_CODE: 'saveCode',
186
-            DELETED: 'deleteSelection',
187
-            INCREASED_CODE_FONT_SIZE: 'increaseCodeFontSize',
188
-            DECREASED_CODE_FONT_SIZE: 'decreaseCodeFontSize',
189
-            CHANGED_CODE_CONTROL: 'updateControls',
190
-            GENERATED_FROM_CODE: ['setCodeControls', 'setGeneratedShapes'],
191
-            TOGGLED_TOOL_LOCK: 'toggleToolLock',
296
+            DELETED: {
297
+              unless: 'isReadOnly',
298
+              do: 'deleteSelection',
299
+            },
300
+            SAVED_CODE: {
301
+              unless: 'isReadOnly',
302
+              do: 'saveCode',
303
+            },
192 304
             MOVED_TO_PAGE: {
305
+              unless: 'isReadOnly',
193 306
               if: 'hasSelection',
194 307
               do: ['moveSelectionToPage', 'zoomCameraToSelectionActual'],
195 308
             },
196
-            MOVED: { if: 'hasSelection', do: 'moveSelection' },
197
-            DUPLICATED: { if: 'hasSelection', do: 'duplicateSelection' },
198
-            ROTATED_CCW: { if: 'hasSelection', do: 'rotateSelectionCcw' },
199
-            ALIGNED: { if: 'hasMultipleSelection', do: 'alignSelection' },
200
-            STRETCHED: { if: 'hasMultipleSelection', do: 'stretchSelection' },
309
+            MOVED: {
310
+              unless: 'isReadOnly',
311
+              if: 'hasSelection',
312
+              do: 'moveSelection',
313
+            },
314
+            DUPLICATED: {
315
+              unless: 'isReadOnly',
316
+              if: 'hasSelection',
317
+              do: 'duplicateSelection',
318
+            },
319
+            ROTATED_CCW: {
320
+              unless: 'isReadOnly',
321
+              if: 'hasSelection',
322
+              do: 'rotateSelectionCcw',
323
+            },
324
+            ALIGNED: {
325
+              unless: 'isReadOnly',
326
+              if: 'hasMultipleSelection',
327
+              do: 'alignSelection',
328
+            },
329
+            STRETCHED: {
330
+              unless: 'isReadOnly',
331
+              if: 'hasMultipleSelection',
332
+              do: 'stretchSelection',
333
+            },
201 334
             DISTRIBUTED: {
335
+              unless: 'isReadOnly',
202 336
               if: 'hasMultipleSelection',
203 337
               do: 'distributeSelection',
204 338
             },
205
-            GROUPED: { if: 'hasMultipleSelection', do: 'groupSelection' },
339
+            GROUPED: {
340
+              unless: 'isReadOnly',
341
+              if: 'hasMultipleSelection',
342
+              do: 'groupSelection',
343
+            },
206 344
             UNGROUPED: {
345
+              unless: 'isReadOnly',
207 346
               if: ['hasSelection', 'selectionIncludesGroups'],
208 347
               do: 'ungroupSelection',
209 348
             },
210 349
             NUDGED: { do: 'nudgeSelection' },
211
-            ZOOMED_CAMERA: {
212
-              do: 'zoomCamera',
213
-            },
214
-            ZOOMED_TO_ACTUAL: {
215
-              if: 'hasSelection',
216
-              do: 'zoomCameraToSelectionActual',
217
-              else: 'zoomCameraToActual',
218
-            },
219
-            ZOOMED_TO_SELECTION: {
220
-              if: 'hasSelection',
221
-              do: 'zoomCameraToSelection',
222
-            },
223
-            ZOOMED_TO_FIT: ['zoomCameraToFit', 'zoomCameraToActual'],
224
-            ZOOMED_IN: 'zoomIn',
225
-            ZOOMED_OUT: 'zoomOut',
226
-            RESET_CAMERA: 'resetCamera',
227
-            COPIED_TO_SVG: 'copyToSvg',
228 350
           },
229 351
           initial: 'notPointing',
230 352
           states: {
@@ -232,7 +354,6 @@ const state = createState({
232 354
               onEnter: 'clearPointedId',
233 355
               on: {
234 356
                 CANCELLED: 'clearSelectedIds',
235
-                STARTED_PINCHING: { to: 'pinching' },
236 357
                 POINTED_CANVAS: { to: 'brushSelecting' },
237 358
                 POINTED_BOUNDS: [
238 359
                   {
@@ -242,21 +363,27 @@ const state = createState({
242 363
                   { to: 'pointingBounds' },
243 364
                 ],
244 365
                 POINTED_BOUNDS_HANDLE: {
366
+                  unless: 'isReadOnly',
245 367
                   if: 'isPointingRotationHandle',
246 368
                   to: 'rotatingSelection',
247 369
                   else: { to: 'transformingSelection' },
248 370
                 },
249 371
                 STARTED_EDITING_SHAPE: {
372
+                  unless: 'isReadOnly',
250 373
                   get: 'firstSelectedShape',
251 374
                   if: ['hasSingleSelection', 'canEditSelectedShape'],
252 375
                   do: 'setEditingId',
253 376
                   to: 'editingShape',
254 377
                 },
255 378
                 DOUBLE_POINTED_BOUNDS_HANDLE: {
379
+                  unless: 'isReadOnly',
256 380
                   if: 'hasSingleSelection',
257 381
                   do: 'resetShapeBounds',
258 382
                 },
259
-                POINTED_HANDLE: { to: 'translatingHandles' },
383
+                POINTED_HANDLE: {
384
+                  unless: 'isReadOnly',
385
+                  to: 'translatingHandles',
386
+                },
260 387
                 MOVED_OVER_SHAPE: {
261 388
                   if: 'pointHitsShape',
262 389
                   then: {
@@ -360,7 +487,7 @@ const state = createState({
360 487
                   { to: 'notPointing' },
361 488
                 ],
362 489
                 MOVED_POINTER: {
363
-                  unless: 'isReadOnly',
490
+                  unless: ['isReadOnly', 'isInSession'],
364 491
                   if: 'distanceImpliesDrag',
365 492
                   to: 'translatingSelection',
366 493
                 },
@@ -506,12 +633,6 @@ const state = createState({
506 633
                       do: 'createShape',
507 634
                       to: 'draw.editing',
508 635
                     },
509
-                    UNDO: 'undo',
510
-                    REDO: 'redo',
511
-                    SAVED: 'forceSave',
512
-                    LOADED_FROM_FILE_STSTEM: 'loadFromFileSystem',
513
-                    SAVED_TO_FILESYSTEM: 'saveToFileSystem',
514
-                    SAVED_AS_TO_FILESYSTEM: 'saveAsToFileSystem',
515 636
                   },
516 637
                 },
517 638
                 editing: {
@@ -883,6 +1004,9 @@ const state = createState({
883 1004
     isReadOnly(data) {
884 1005
       return data.isReadOnly
885 1006
     },
1007
+    isInSession() {
1008
+      return session.isInSession
1009
+    },
886 1010
     canEditSelectedShape(data, payload, result: Shape) {
887 1011
       return getShapeUtils(result).canEdit && !result.isLocked
888 1012
     },

正在加载...
取消
保存