Bladeren bron

improve session api

main
Steve Ruiz 4 jaren geleden
bovenliggende
commit
5b514e07f9
2 gewijzigde bestanden met toevoegingen van 90 en 60 verwijderingen
  1. 19
    3
      state/session.ts
  2. 71
    57
      state/state.ts

+ 19
- 3
state/session.ts Bestand weergeven

@@ -13,12 +13,28 @@ class SessionManager {
13 13
     return this
14 14
   }
15 15
 
16
-  get current() {
17
-    return this._current
16
+  update<T extends BaseSession>(...args: Parameters<T['update']>) {
17
+    this._current.update.call(null, ...args)
18
+    return this
18 19
   }
19 20
 
20
-  set current(session: BaseSession) {
21
+  start(session: BaseSession) {
21 22
     this._current = session
23
+    return this
24
+  }
25
+
26
+  compplete<T extends BaseSession>(...args: Parameters<T['complete']>) {
27
+    this._current.complete.call(null, ...args)
28
+    return this
29
+  }
30
+
31
+  cancel<T extends BaseSession>(...args: Parameters<T['cancel']>) {
32
+    this._current.cancel.call(null, ...args)
33
+    return this
34
+  }
35
+
36
+  get current() {
37
+    return this._current
22 38
   }
23 39
 }
24 40
 

+ 71
- 57
state/state.ts Bestand weergeven

@@ -1003,39 +1003,40 @@ const state = createState({
1003 1003
 
1004 1004
     // Editing
1005 1005
     startEditSession(data) {
1006
-      session.current = new Sessions.EditSession(data)
1006
+      session.start(new Sessions.EditSession(data))
1007 1007
     },
1008 1008
     updateEditSession(data, payload: { change: Partial<Shape> }) {
1009
-      session.current.update(data, payload.change)
1009
+      session.update<Sessions.EditSession>(data, payload.change)
1010 1010
     },
1011 1011
 
1012 1012
     // Brushing
1013 1013
     startBrushSession(data, payload: PointerInfo) {
1014
-      session.current = new Sessions.BrushSession(
1015
-        data,
1016
-        screenToWorld(payload.point, data)
1014
+      session.start(
1015
+        new Sessions.BrushSession(data, screenToWorld(payload.point, data))
1017 1016
       )
1018 1017
     },
1019 1018
     updateBrushSession(data, payload: PointerInfo) {
1020
-      session.current.update(data, screenToWorld(payload.point, data))
1019
+      session.update<Sessions.BrushSession>(
1020
+        data,
1021
+        screenToWorld(payload.point, data)
1022
+      )
1021 1023
     },
1022 1024
 
1023 1025
     // Rotating
1024 1026
     startRotateSession(data, payload: PointerInfo) {
1025
-      session.current = new Sessions.RotateSession(
1026
-        data,
1027
-        screenToWorld(payload.point, data)
1027
+      session.start(
1028
+        new Sessions.RotateSession(data, screenToWorld(payload.point, data))
1028 1029
       )
1029 1030
     },
1030 1031
     keyUpdateRotateSession(data, payload: PointerInfo) {
1031
-      session.current.update(
1032
+      session.update<Sessions.RotateSession>(
1032 1033
         data,
1033 1034
         screenToWorld(inputs.pointer.point, data),
1034 1035
         payload.shiftKey
1035 1036
       )
1036 1037
     },
1037 1038
     updateRotateSession(data, payload: PointerInfo) {
1038
-      session.current.update(
1039
+      session.update<Sessions.RotateSession>(
1039 1040
         data,
1040 1041
         screenToWorld(payload.point, data),
1041 1042
         payload.shiftKey
@@ -1044,16 +1045,18 @@ const state = createState({
1044 1045
 
1045 1046
     // Dragging / Translating
1046 1047
     startTranslateSession(data) {
1047
-      session.current = new Sessions.TranslateSession(
1048
-        data,
1049
-        screenToWorld(inputs.pointer.origin, data)
1048
+      session.start(
1049
+        new Sessions.TranslateSession(
1050
+          data,
1051
+          screenToWorld(inputs.pointer.origin, data)
1052
+        )
1050 1053
       )
1051 1054
     },
1052 1055
     keyUpdateTranslateSession(
1053 1056
       data,
1054 1057
       payload: { shiftKey: boolean; altKey: boolean }
1055 1058
     ) {
1056
-      session.current.update(
1059
+      session.update<Sessions.TranslateSession>(
1057 1060
         data,
1058 1061
         screenToWorld(inputs.pointer.point, data),
1059 1062
         payload.shiftKey,
@@ -1061,7 +1064,7 @@ const state = createState({
1061 1064
       )
1062 1065
     },
1063 1066
     updateTranslateSession(data, payload: PointerInfo) {
1064
-      session.current.update(
1067
+      session.update<Sessions.TranslateSession>(
1065 1068
         data,
1066 1069
         screenToWorld(payload.point, data),
1067 1070
         payload.shiftKey,
@@ -1080,30 +1083,30 @@ const state = createState({
1080 1083
       const shapeId = Array.from(getSelectedIds(data).values())[0]
1081 1084
       const handleId = payload.target
1082 1085
 
1083
-      session.current = new Sessions.HandleSession(
1084
-        data,
1085
-        shapeId,
1086
-        handleId,
1087
-        screenToWorld(inputs.pointer.origin, data)
1086
+      session.start(
1087
+        new Sessions.HandleSession(
1088
+          data,
1089
+          shapeId,
1090
+          handleId,
1091
+          screenToWorld(inputs.pointer.origin, data)
1092
+        )
1088 1093
       )
1089 1094
     },
1090 1095
     keyUpdateHandleSession(
1091 1096
       data,
1092 1097
       payload: { shiftKey: boolean; altKey: boolean }
1093 1098
     ) {
1094
-      session.current.update(
1099
+      session.update<Sessions.HandleSession>(
1095 1100
         data,
1096 1101
         screenToWorld(inputs.pointer.point, data),
1097
-        payload.shiftKey,
1098
-        payload.altKey
1102
+        payload.shiftKey
1099 1103
       )
1100 1104
     },
1101 1105
     updateHandleSession(data, payload: PointerInfo) {
1102
-      session.current.update(
1106
+      session.update<Sessions.HandleSession>(
1103 1107
         data,
1104 1108
         screenToWorld(payload.point, data),
1105
-        payload.shiftKey,
1106
-        payload.altKey
1109
+        payload.shiftKey
1107 1110
       )
1108 1111
     },
1109 1112
 
@@ -1113,59 +1116,67 @@ const state = createState({
1113 1116
       payload: PointerInfo & { target: Corner | Edge }
1114 1117
     ) {
1115 1118
       const point = screenToWorld(inputs.pointer.origin, data)
1116
-      session.current =
1119
+      session.start(
1117 1120
         getSelectedIds(data).size === 1
1118 1121
           ? new Sessions.TransformSingleSession(data, payload.target, point)
1119 1122
           : new Sessions.TransformSession(data, payload.target, point)
1123
+      )
1120 1124
     },
1121 1125
     startDrawTransformSession(data, payload: PointerInfo) {
1122
-      session.current = new Sessions.TransformSingleSession(
1123
-        data,
1124
-        Corner.BottomRight,
1125
-        screenToWorld(payload.point, data),
1126
-        true
1126
+      session.start(
1127
+        new Sessions.TransformSingleSession(
1128
+          data,
1129
+          Corner.BottomRight,
1130
+          screenToWorld(payload.point, data),
1131
+          true
1132
+        )
1127 1133
       )
1128 1134
     },
1129 1135
     keyUpdateTransformSession(data, payload: PointerInfo) {
1130
-      session.current.update(
1136
+      session.update<Sessions.TransformSession>(
1131 1137
         data,
1132 1138
         screenToWorld(inputs.pointer.point, data),
1133
-        payload.shiftKey,
1134
-        payload.altKey
1139
+        payload.shiftKey
1135 1140
       )
1136 1141
     },
1137 1142
     updateTransformSession(data, payload: PointerInfo) {
1138
-      session.current.update(
1143
+      session.update<Sessions.TransformSession>(
1139 1144
         data,
1140 1145
         screenToWorld(payload.point, data),
1141
-        payload.shiftKey,
1142
-        payload.altKey
1146
+        payload.shiftKey
1143 1147
       )
1144 1148
     },
1145 1149
 
1146 1150
     // Direction
1147 1151
     startDirectionSession(data) {
1148
-      session.current = new Sessions.DirectionSession(
1149
-        data,
1150
-        screenToWorld(inputs.pointer.origin, data)
1152
+      session.start(
1153
+        new Sessions.DirectionSession(
1154
+          data,
1155
+          screenToWorld(inputs.pointer.origin, data)
1156
+        )
1151 1157
       )
1152 1158
     },
1153 1159
     updateDirectionSession(data, payload: PointerInfo) {
1154
-      session.current.update(data, screenToWorld(payload.point, data))
1160
+      session.update<Sessions.DirectionSession>(
1161
+        data,
1162
+        screenToWorld(payload.point, data)
1163
+      )
1155 1164
     },
1156 1165
 
1157 1166
     // Drawing
1158 1167
     startDrawSession(data, payload: PointerInfo) {
1159 1168
       const id = Array.from(getSelectedIds(data).values())[0]
1160
-      session.current = new Sessions.DrawSession(
1161
-        data,
1162
-        id,
1163
-        screenToWorld(inputs.pointer.origin, data),
1164
-        payload.shiftKey
1169
+      session.start(
1170
+        new Sessions.DrawSession(
1171
+          data,
1172
+          id,
1173
+          screenToWorld(inputs.pointer.origin, data),
1174
+          payload.shiftKey
1175
+        )
1165 1176
       )
1166 1177
     },
1167 1178
     keyUpdateDrawSession(data, payload: PointerInfo) {
1168
-      session.current.update(
1179
+      session.update<Sessions.DrawSession>(
1169 1180
         data,
1170 1181
         screenToWorld(inputs.pointer.point, data),
1171 1182
         payload.pressure,
@@ -1173,7 +1184,7 @@ const state = createState({
1173 1184
       )
1174 1185
     },
1175 1186
     updateDrawSession(data, payload: PointerInfo) {
1176
-      session.current.update(
1187
+      session.update<Sessions.DrawSession>(
1177 1188
         data,
1178 1189
         screenToWorld(payload.point, data),
1179 1190
         payload.pressure,
@@ -1184,22 +1195,25 @@ const state = createState({
1184 1195
     // Arrow
1185 1196
     startArrowSession(data, payload: PointerInfo) {
1186 1197
       const id = Array.from(getSelectedIds(data).values())[0]
1187
-      session.current = new Sessions.ArrowSession(
1188
-        data,
1189
-        id,
1190
-        screenToWorld(inputs.pointer.origin, data),
1191
-        payload.shiftKey
1198
+
1199
+      session.start(
1200
+        new Sessions.ArrowSession(
1201
+          data,
1202
+          id,
1203
+          screenToWorld(inputs.pointer.origin, data),
1204
+          payload.shiftKey
1205
+        )
1192 1206
       )
1193 1207
     },
1194 1208
     keyUpdateArrowSession(data, payload: PointerInfo) {
1195
-      session.current.update(
1209
+      session.update<Sessions.ArrowSession>(
1196 1210
         data,
1197 1211
         screenToWorld(inputs.pointer.point, data),
1198 1212
         payload.shiftKey
1199 1213
       )
1200 1214
     },
1201 1215
     updateArrowSession(data, payload: PointerInfo) {
1202
-      session.current.update(
1216
+      session.update<Sessions.ArrowSession>(
1203 1217
         data,
1204 1218
         screenToWorld(payload.point, data),
1205 1219
         payload.shiftKey

Laden…
Annuleren
Opslaan