@fdm-monster/client-next 0.0.1 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (199) hide show
  1. package/.yarn/install-state.gz +0 -0
  2. package/RELEASE_NOTES.MD +28 -1
  3. package/dist/assets/MaterialIcons-Regular-BjXOXp5c.eot +0 -0
  4. package/dist/assets/MaterialIcons-Regular-DEUTIz1o.ttf +0 -0
  5. package/dist/assets/MaterialIcons-Regular-DOtZ65Va.woff2 +0 -0
  6. package/dist/assets/MaterialIcons-Regular-FsbMSDLx.woff +0 -0
  7. package/dist/assets/index-CHzfWKPO.css +5 -0
  8. package/dist/assets/index-WVqTlgq7.js +90 -0
  9. package/dist/assets/index-WVqTlgq7.js.map +1 -0
  10. package/dist/favicon.ico +0 -0
  11. package/dist/img/DavidZwart.jpg +0 -0
  12. package/dist/img/OIG.JYDC2RaWdz7g9.jpg +0 -0
  13. package/dist/img/OIG.jpg +0 -0
  14. package/dist/img/icons/android-chrome-256x256.png +0 -0
  15. package/dist/img/icons/android-chrome-384x384.png +0 -0
  16. package/dist/img/icons/android-chrome-512x512.png +0 -0
  17. package/dist/img/icons/favicon.svg +1 -0
  18. package/dist/img/logo.png +0 -0
  19. package/dist/img/logo.svg +1 -0
  20. package/dist/img/manifest.webmanifest +33 -0
  21. package/dist/img/octoprint-tentacle.svg +144 -0
  22. package/dist/img/thumbail_unknown.jpg +0 -0
  23. package/dist/img/vbanner.jpg +0 -0
  24. package/dist/index.html +24 -0
  25. package/dist/robots.txt +2 -0
  26. package/package.json +1 -1
  27. package/.all-contributorsrc +0 -57
  28. package/.editorconfig +0 -5
  29. package/.eslintrc.js +0 -126
  30. package/.github/FUNDING.yml +0 -3
  31. package/.github/workflows/release-client.yml +0 -94
  32. package/.github/workflows/vue-publish.yml +0 -26
  33. package/.prettierignore +0 -15
  34. package/.whitesource +0 -12
  35. package/renovate.json +0 -30
  36. package/src/App.vue +0 -60
  37. package/src/AppLoader.vue +0 -383
  38. package/src/assets/adjectives.json +0 -1468
  39. package/src/assets/logo.svg +0 -6
  40. package/src/assets/nouns.json +0 -4309
  41. package/src/auto-imports.d.ts +0 -139
  42. package/src/backend/app.service.ts +0 -39
  43. package/src/backend/auth.service.ts +0 -56
  44. package/src/backend/base.service.ts +0 -57
  45. package/src/backend/batch.service.ts +0 -37
  46. package/src/backend/camera-stream.service.ts +0 -33
  47. package/src/backend/custom-gcode.service.ts +0 -11
  48. package/src/backend/dto/octoprint-settings.dto.ts +0 -168
  49. package/src/backend/first-time-setup.service.ts +0 -17
  50. package/src/backend/floor.service.ts +0 -84
  51. package/src/backend/index.ts +0 -4
  52. package/src/backend/print-completions.service.ts +0 -11
  53. package/src/backend/printer-file.service.ts +0 -91
  54. package/src/backend/printer-group.service.ts +0 -62
  55. package/src/backend/printer-job.service.ts +0 -20
  56. package/src/backend/printer-settings.service.ts +0 -28
  57. package/src/backend/printers.service.ts +0 -136
  58. package/src/backend/server-private.service.ts +0 -55
  59. package/src/backend/server.api.ts +0 -132
  60. package/src/backend/settings.service.ts +0 -85
  61. package/src/backend/user.service.ts +0 -51
  62. package/src/components/AboutHelp/AboutView.vue +0 -164
  63. package/src/components/CameraGrid/CameraGridView.vue +0 -111
  64. package/src/components/FirstTimeSetup/FirstTimeSetupView.vue +0 -354
  65. package/src/components/Generic/Actions/PrinterConnectionAction.vue +0 -56
  66. package/src/components/Generic/Actions/PrinterCreateAction.vue +0 -22
  67. package/src/components/Generic/Actions/PrinterDeleteAction.vue +0 -29
  68. package/src/components/Generic/Actions/PrinterQuickStopAction.vue +0 -35
  69. package/src/components/Generic/Actions/PrinterSettingsAction.vue +0 -35
  70. package/src/components/Generic/Actions/PrinterUrlAction.vue +0 -24
  71. package/src/components/Generic/Actions/RefreshFilesAction.vue +0 -50
  72. package/src/components/Generic/Actions/SyncPrinterNameAction.vue +0 -36
  73. package/src/components/Generic/Dialogs/AddOrUpdateCameraStreamDialog.vue +0 -131
  74. package/src/components/Generic/Dialogs/AddOrUpdateFloorDialog.vue +0 -141
  75. package/src/components/Generic/Dialogs/AddOrUpdatePrinterDialog.vue +0 -303
  76. package/src/components/Generic/Dialogs/BaseDialog.vue +0 -81
  77. package/src/components/Generic/Dialogs/BatchJsonCreateDialog.vue +0 -109
  78. package/src/components/Generic/Dialogs/BatchReprintDialog.vue +0 -190
  79. package/src/components/Generic/Dialogs/PrinterChecksPanel.vue +0 -37
  80. package/src/components/Generic/Dialogs/PrinterControlDialog.vue +0 -202
  81. package/src/components/Generic/Dialogs/PrinterMaintenanceDialog.vue +0 -130
  82. package/src/components/Generic/Dialogs/YamlImportExportDialog.vue +0 -186
  83. package/src/components/Generic/Dialogs/dialog.constants.ts +0 -19
  84. package/src/components/Generic/FileExplorerSideNav.vue +0 -734
  85. package/src/components/Generic/Loaders/GridLoader.vue +0 -68
  86. package/src/components/Generic/NavigationDrawer.vue +0 -69
  87. package/src/components/Generic/PrintJobsMenu.vue +0 -148
  88. package/src/components/Generic/Snackbars/AppErrorSnackbar.vue +0 -64
  89. package/src/components/Generic/Snackbars/AppInfoSnackbar.vue +0 -63
  90. package/src/components/Generic/Snackbars/AppProgressSnackbar.vue +0 -158
  91. package/src/components/Generic/Vuetify/TooltipButton.vue +0 -47
  92. package/src/components/HelpOverlay/HelpOverlay.vue +0 -57
  93. package/src/components/Login/LoginForm.vue +0 -206
  94. package/src/components/Login/LoginView.spec.ts +0 -64
  95. package/src/components/Login/LoginView.vue +0 -65
  96. package/src/components/Login/Logo.vue +0 -13
  97. package/src/components/Login/PermissionDenied.vue +0 -109
  98. package/src/components/Login/RegistrationForm.vue +0 -207
  99. package/src/components/Login/RegistrationView.vue +0 -17
  100. package/src/components/Login/__snapshots__/LoginView.spec.ts.snap +0 -1051
  101. package/src/components/NotFound/NotFoundView.vue +0 -39
  102. package/src/components/PrintStatistics/PrintStatistics.vue +0 -168
  103. package/src/components/PrintStatistics/PrintStatisticsView.vue +0 -15
  104. package/src/components/PrinterGrid/HomeToolbar.vue +0 -90
  105. package/src/components/PrinterGrid/PrinterGrid.vue +0 -164
  106. package/src/components/PrinterGrid/PrinterGridTile.vue +0 -438
  107. package/src/components/PrinterGrid/PrinterGridView.vue +0 -210
  108. package/src/components/PrinterList/FileControlList.vue +0 -40
  109. package/src/components/PrinterList/PrinterDetails.vue +0 -91
  110. package/src/components/PrinterList/PrintersView.vue +0 -492
  111. package/src/components/Settings/AccountSettings.vue +0 -163
  112. package/src/components/Settings/DiagnosticsSettings.vue +0 -137
  113. package/src/components/Settings/EmergencyCommands.vue +0 -265
  114. package/src/components/Settings/FloorSettings.vue +0 -276
  115. package/src/components/Settings/GridSettings.vue +0 -127
  116. package/src/components/Settings/OctoPrintSettings.vue +0 -188
  117. package/src/components/Settings/ServerProtectionSettings.vue +0 -370
  118. package/src/components/Settings/SettingsView.vue +0 -73
  119. package/src/components/Settings/SoftwareUpgradeSettings.vue +0 -297
  120. package/src/components/Settings/UserManagementSettings.vue +0 -257
  121. package/src/components/TopBar.vue +0 -147
  122. package/src/components.d.ts +0 -70
  123. package/src/directives/file-upload.directive.ts +0 -117
  124. package/src/directives/printer-drop-position.directive.ts +0 -92
  125. package/src/env.d.ts +0 -6
  126. package/src/main.ts +0 -76
  127. package/src/models/batch/reprint.dto.ts +0 -79
  128. package/src/models/batch.model.ts +0 -11
  129. package/src/models/camera-streams/camera-stream.ts +0 -19
  130. package/src/models/floors/floor.model.ts +0 -30
  131. package/src/models/octoprint/connection-options.model.ts +0 -8
  132. package/src/models/plugins/firmware-updates/prusa-firmware-release.model.ts +0 -57
  133. package/src/models/print-completions/print-completions.model.ts +0 -49
  134. package/src/models/printers/crud/create-printer.model.ts +0 -26
  135. package/src/models/printers/file-upload-commands.model.ts +0 -4
  136. package/src/models/printers/gcode/gcode-analysis.model.ts +0 -30
  137. package/src/models/printers/printer-current-job.model.ts +0 -90
  138. package/src/models/printers/printer-file.model.ts +0 -48
  139. package/src/models/printers/printer.model.ts +0 -18
  140. package/src/models/server/client-releases.model.ts +0 -27
  141. package/src/models/server/export-yaml.model.ts +0 -11
  142. package/src/models/server/features.model.ts +0 -37
  143. package/src/models/server/github-rate-limit.model.ts +0 -21
  144. package/src/models/server/version.model.ts +0 -14
  145. package/src/models/settings/printer-file-clean-settings.model.ts +0 -5
  146. package/src/models/settings/server-settings.dto.ts +0 -19
  147. package/src/models/settings/settings.model.ts +0 -57
  148. package/src/models/socketio-messages/socketio-message.model.ts +0 -53
  149. package/src/models/uploads/queued-upload.model.ts +0 -12
  150. package/src/models/user.model.ts +0 -15
  151. package/src/plugins/README.md +0 -3
  152. package/src/plugins/index.ts +0 -17
  153. package/src/plugins/vuetify.ts +0 -53
  154. package/src/router/index.ts +0 -192
  155. package/src/router/route-names.ts +0 -14
  156. package/src/router/utils.ts +0 -23
  157. package/src/shared/alert.events.ts +0 -14
  158. package/src/shared/app.constants.ts +0 -23
  159. package/src/shared/auth.constants.ts +0 -34
  160. package/src/shared/dialog.composable.ts +0 -41
  161. package/src/shared/drag.constants.ts +0 -19
  162. package/src/shared/experimental.constants.ts +0 -1
  163. package/src/shared/http-client.ts +0 -162
  164. package/src/shared/noun-adjectives.data.ts +0 -24
  165. package/src/shared/printer-grid.constants.ts +0 -5
  166. package/src/shared/printer-state.constants.ts +0 -194
  167. package/src/shared/snackbar.composable.ts +0 -66
  168. package/src/shared/socketio.service.ts +0 -104
  169. package/src/store/auth.store.ts +0 -255
  170. package/src/store/connection.store.ts +0 -66
  171. package/src/store/dialog.store.ts +0 -114
  172. package/src/store/features.store.ts +0 -57
  173. package/src/store/floor.store.ts +0 -173
  174. package/src/store/grid.store.ts +0 -10
  175. package/src/store/index.ts +0 -4
  176. package/src/store/printer-state.store.ts +0 -246
  177. package/src/store/printer.store.ts +0 -236
  178. package/src/store/profile.store.ts +0 -25
  179. package/src/store/settings.store.ts +0 -64
  180. package/src/store/test-printer.store.ts +0 -70
  181. package/src/store/uploads.store.ts +0 -75
  182. package/src/styles/README.md +0 -3
  183. package/src/styles/settings.scss +0 -10
  184. package/src/types/global.d.ts +0 -15
  185. package/src/utils/array.utils.ts +0 -15
  186. package/src/utils/date.utils.ts +0 -5
  187. package/src/utils/download-file.util.ts +0 -25
  188. package/src/utils/error.utils.ts +0 -3
  189. package/src/utils/file-size.util.ts +0 -11
  190. package/src/utils/id.type.ts +0 -1
  191. package/src/utils/sentry.util.ts +0 -8
  192. package/src/utils/test.util.ts +0 -30
  193. package/src/utils/time.utils.ts +0 -2
  194. package/src/utils/uploads-state.utils.ts +0 -58
  195. package/src/utils/validation.utils.ts +0 -14
  196. package/src/vite-env.d.ts +0 -7
  197. package/test/setup-axios-mock.ts +0 -15
  198. /package/{src/assets/logo.png → dist/assets/logo-CJVdjy51.png} +0 -0
  199. /package/{src/assets → dist/img/icons}/android-chrome-192x192.png +0 -0
@@ -1,303 +0,0 @@
1
- <template>
2
- <BaseDialog
3
- :id="dialog.dialogId"
4
- :max-width="showChecksPanel ? '900px' : '700px'"
5
- @escape="closeDialog()"
6
- >
7
- <v-card class="pa-4">
8
- <v-card-title>
9
- <span class="text-h5">
10
- <v-avatar
11
- color="primary"
12
- size="56"
13
- >
14
- {{ avatarInitials }}
15
- </v-avatar>
16
- <span v-if="isUpdating"> Updating Printer </span>
17
- <span v-else> New Printer </span>
18
- </span>
19
- </v-card-title>
20
- <v-card-text>
21
- <v-row>
22
- <v-col :cols="showChecksPanel ? 8 : 12">
23
- <v-row v-if="formData">
24
- <v-col>
25
- <!-- :rules="printerNameRules"-->
26
- <v-text-field
27
- v-model="formData.name"
28
- :counter="printerNameRules.max"
29
- autofocus
30
- class="ma-1"
31
- label="Printer name*"
32
- required
33
- />
34
- </v-col>
35
- <v-col>
36
- <v-checkbox
37
- v-model="formData.enabled"
38
- hint="Disabling makes the printer passive"
39
- label="Enabled*"
40
- persistent-hint
41
- required
42
- />
43
- </v-col>
44
- </v-row>
45
-
46
- <!-- persistent-hint-->
47
- <!-- rules="required|url">-->
48
- <v-text-field
49
- v-model="formData.printerURL"
50
- class="ma-1"
51
- hint="F.e. 'octopi.local' or 'https://my.printer.com'"
52
- label="Printer URL*"
53
- />
54
-
55
- <!-- :rules="apiKeyRules"-->
56
- <v-text-field
57
- v-model="formData.apiKey"
58
- :counter="apiKeyRules.length"
59
- class="ma-1"
60
- hint="User or Application Key only (Global API key fails)"
61
- label="API Key*"
62
- persistent-hint
63
- required
64
- />
65
- <!-- </validation-provider>-->
66
- </v-col>
67
-
68
- <PrinterChecksPanel
69
- v-if="showChecksPanel"
70
- :cols="4"
71
- >
72
- <v-btn @click="showChecksPanel = false"> Hide checks </v-btn>
73
- </PrinterChecksPanel>
74
- </v-row>
75
- <v-alert
76
- color="primary"
77
- class="my-3"
78
- v-if="printerValidationError?.length"
79
- >
80
- {{ printerValidationError }}
81
- <v-checkbox
82
- color="warning"
83
- v-model="forceSavePrinter"
84
- label="Force save"
85
- />
86
- </v-alert>
87
- <v-alert
88
- class="my-3"
89
- v-if="validatingPrinter"
90
- >
91
- Validating printer
92
- <v-progress-circular indeterminate />
93
- </v-alert>
94
- </v-card-text>
95
- <v-card-actions>
96
- <em class="text-red"> * indicates required field </em>
97
- <v-spacer />
98
- <v-btn
99
- variant="text"
100
- @click="closeDialog()"
101
- >
102
- Close
103
- </v-btn>
104
- <v-btn
105
- v-if="isUpdating"
106
- color="gray"
107
- variant="text"
108
- @click="duplicatePrinter()"
109
- >
110
- Duplicate
111
- </v-btn>
112
- <v-btn
113
- color="warning"
114
- variant="text"
115
- @click="testPrinter()"
116
- >
117
- Test connection
118
- </v-btn>
119
-
120
- <v-btn
121
- color="blue-darken-1"
122
- variant="text"
123
- @click="submit()"
124
- >
125
- {{ submitButtonText }}
126
- </v-btn>
127
- </v-card-actions>
128
- </v-card>
129
- </BaseDialog>
130
- </template>
131
-
132
- <script lang="ts" setup>
133
- import { inject } from 'vue'
134
- import {
135
- generateInitials,
136
- newRandomNamePair
137
- } from '@/shared/noun-adjectives.data'
138
- import { usePrinterStore } from '@/store/printer.store'
139
- import { PrintersService } from '@/backend'
140
- import { DialogName } from '@/components/Generic/Dialogs/dialog.constants'
141
- import { useTestPrinterStore } from '@/store/test-printer.store'
142
- import {
143
- CreatePrinter,
144
- getDefaultCreatePrinter
145
- } from '@/models/printers/crud/create-printer.model'
146
- import { useDialog } from '@/shared/dialog.composable'
147
- import { AppConstants } from '@/shared/app.constants'
148
- import { useSnackbar } from '@/shared/snackbar.composable'
149
- import { AxiosError } from 'axios'
150
-
151
- const dialog = useDialog(DialogName.AddOrUpdatePrinterDialog)
152
- const printersStore = usePrinterStore()
153
- const testPrinterStore = useTestPrinterStore()
154
- const appConstants = inject('appConstants') as AppConstants
155
- const snackbar = useSnackbar()
156
-
157
- const printerValidationError = ref<null | string>(null)
158
- const validatingPrinter = ref(false)
159
- const forceSavePrinter = ref(false)
160
- const showChecksPanel = ref(false)
161
- const copyPasteConnectionString = ref('')
162
- const formData = ref(getDefaultCreatePrinter())
163
-
164
- const printerId = computed(() => {
165
- return printersStore.updateDialogPrinter?.id
166
- })
167
-
168
- onMounted(async () => {
169
- if (printerId.value) {
170
- const crudeData = printersStore.printer(printerId.value) as CreatePrinter
171
- formData.value = PrintersService.convertPrinterToCreateForm(crudeData)
172
- }
173
- })
174
-
175
- watch(printerId, (val) => {
176
- if (!val) return
177
- const printer = printersStore.printer(val) as CreatePrinter
178
- formData.value = PrintersService.convertPrinterToCreateForm(printer)
179
- })
180
-
181
- const storedPrinter = computed(() => {
182
- return printersStore.updateDialogPrinter
183
- })
184
-
185
- const isUpdating = computed(() => {
186
- return !!storedPrinter
187
- })
188
-
189
- const submitButtonText = computed(() => {
190
- return isUpdating ? 'Save' : 'Create'
191
- })
192
-
193
- const avatarInitials = computed(() => {
194
- if (formData) {
195
- return generateInitials(formData.value?.name)
196
- }
197
- return '?'
198
- })
199
-
200
- const printerNameRules = computed(() => {
201
- return { required: true, max: appConstants.maxPrinterNameLength }
202
- })
203
-
204
- const apiKeyRules = computed(() => {
205
- return {
206
- required: true,
207
- length: appConstants.apiKeyLength,
208
- alpha_num: true
209
- }
210
- })
211
-
212
- function resetForm() {
213
- formData.value = getDefaultCreatePrinter()
214
- }
215
-
216
- function openTestPanel() {
217
- showChecksPanel.value = true
218
- }
219
-
220
- async function testPrinter() {
221
- if (!formData) return
222
-
223
- testPrinterStore.clearEvents()
224
- openTestPanel()
225
-
226
- const { correlationToken } = await testPrinterStore.createTestPrinter(
227
- formData.value as CreatePrinter
228
- )
229
- testPrinterStore.currentCorrelationToken = correlationToken
230
- }
231
-
232
- async function createPrinter(newPrinterData: CreatePrinter) {
233
- await printersStore.createPrinter(newPrinterData, forceSavePrinter.value)
234
- snackbar.openInfoMessage({
235
- title: `Printer ${newPrinterData.name} created`
236
- })
237
- }
238
-
239
- async function updatePrinter(updatedPrinter: CreatePrinter) {
240
- const printerId = updatedPrinter.id
241
-
242
- await printersStore.updatePrinter(
243
- {
244
- printerId: printerId as string,
245
- updatedPrinter
246
- },
247
- forceSavePrinter.value
248
- )
249
-
250
- snackbar.openInfoMessage({
251
- title: `Printer ${updatedPrinter.name} updated`
252
- })
253
- }
254
-
255
- async function submit() {
256
- // if (!(await isValid())) return
257
- if (!formData) return
258
-
259
- printerValidationError.value = null
260
- validatingPrinter.value = true
261
- const createdPrinter = formData.value as CreatePrinter
262
-
263
- try {
264
- if (isUpdating.value) {
265
- await updatePrinter(createdPrinter)
266
- } else {
267
- await createPrinter(createdPrinter)
268
- }
269
- closeDialog()
270
- } catch (error) {
271
- if (error instanceof AxiosError) {
272
- printerValidationError.value =
273
- error.response?.data?.error || error.message
274
- snackbar.error('Validation Failed', (error as Error).message)
275
- } else {
276
- printerValidationError.value = (error as Error).message
277
- snackbar.error('Error', (error as Error).message)
278
- }
279
- } finally {
280
- validatingPrinter.value = false
281
- forceSavePrinter.value = false
282
- }
283
- }
284
-
285
- async function duplicatePrinter() {
286
- formData.value.name = newRandomNamePair()
287
- printersStore.updateDialogPrinter = undefined
288
- printerValidationError.value = null
289
- forceSavePrinter.value = false
290
- printerValidationError.value = null
291
- }
292
-
293
- function closeDialog() {
294
- dialog.closeDialog()
295
- forceSavePrinter.value = false
296
- printerValidationError.value = null
297
- showChecksPanel.value = false
298
- testPrinterStore.clearEvents()
299
- resetForm()
300
- printersStore.updateDialogPrinter = undefined
301
- copyPasteConnectionString.value = ''
302
- }
303
- </script>
@@ -1,81 +0,0 @@
1
- <template>
2
- <v-dialog
3
- :max-width="maxWidth"
4
- :retain-focus="false"
5
- :model-value="showingDialog"
6
- persistent
7
- @close="emitEscape()"
8
- >
9
- <slot>
10
- <div class="pa-3 text--primary">
11
- No content defined in dialog.
12
- <v-btn @click="dialog.closeDialog()">
13
- <v-icon class="mr-3">close</v-icon>Close
14
- </v-btn>
15
- </div>
16
- </slot>
17
- </v-dialog>
18
- </template>
19
-
20
- <script lang="ts" setup>
21
- import { computed, onBeforeUnmount, onMounted } from 'vue'
22
- import { useDialogsStore } from '@/store/dialog.store'
23
- import { DialogName } from '@/components/Generic/Dialogs/dialog.constants'
24
- import { onKeyStroke } from '@vueuse/core'
25
- import { useDialog } from '@/shared/dialog.composable'
26
-
27
- const props = defineProps({
28
- id: {
29
- type: String as () => DialogName,
30
- required: true
31
- },
32
- maxWidth: {
33
- type: String,
34
- default: '400px'
35
- }
36
- })
37
- const dialogsStore = useDialogsStore()
38
- const emit = defineEmits(['escape', 'opened', 'beforeOpened'])
39
- const dialog = useDialog(props.id)
40
-
41
- function openedCallback(input: any) {
42
- return emit('opened', input)
43
- }
44
-
45
- function beforeOpenedCallback(input: any) {
46
- return emit('beforeOpened', input)
47
- }
48
-
49
- onMounted(async () => {
50
- onKeyStroke('Escape', (e) => {
51
- if (showingDialog.value) {
52
- e.preventDefault()
53
- emitEscape()
54
- }
55
- })
56
- dialogsStore.registerDialogReference(props.id, {
57
- beforeOpenedCallback,
58
- openedCallback
59
- })
60
- })
61
-
62
- onBeforeUnmount(() => {
63
- dialogsStore.unregisterDialogReference(props.id)
64
- })
65
-
66
- const showingDialog = computed(() => {
67
- if (!props.id) return
68
-
69
- const isOpened = dialogsStore.isDialogOpened(props.id)
70
- if (isOpened) {
71
- console.debug(
72
- `[BaseDialog ${props.id}] Showing dialog: ${dialog?.isDialogOpened()}`
73
- )
74
- }
75
- return isOpened
76
- })
77
-
78
- function emitEscape() {
79
- emit('escape')
80
- }
81
- </script>
@@ -1,109 +0,0 @@
1
- <template>
2
- <BaseDialog
3
- :id="dialog.dialogId"
4
- max-width="700px"
5
- @escape="closeDialog()"
6
- >
7
- <v-card class="pa-4">
8
- <v-card-title>
9
- <span class="text-h5"> Batch Import JSON printers </span>
10
- </v-card-title>
11
- <v-card-text>
12
- <v-row>
13
- <v-col cols="12">
14
- v-slot="{ errors }" name="JSON" rules="required|json">
15
- <v-textarea
16
- v-model="formData.json"
17
- data-vv-validate-on="change|blur"
18
- rows="10"
19
- @change="updatePrinterCount()"
20
- >
21
- <template #label>
22
- <div>JSON import <small> (optional) </small></div>
23
- </template>
24
- </v-textarea>
25
- {{ numPrinters }} printers found
26
- </v-col>
27
- </v-row>
28
- <v-btn class="mt-2"> Validate printers </v-btn>
29
- </v-card-text>
30
- <v-card-actions>
31
- <em class="text-red"> * indicates required field </em>
32
- <v-spacer />
33
- <v-btn
34
- variant="text"
35
- @click="closeDialog()"
36
- >
37
- Close
38
- </v-btn>
39
- <v-btn
40
- color="blue-darken-1"
41
- variant="text"
42
- @click="submit()"
43
- >
44
- Create
45
- </v-btn>
46
- </v-card-actions>
47
- </v-card>
48
- </BaseDialog>
49
- </template>
50
-
51
- <script lang="ts" setup>
52
- import { PrintersService } from '@/backend'
53
- import { DialogName } from '@/components/Generic/Dialogs/dialog.constants'
54
- import { useDialog } from '@/shared/dialog.composable'
55
-
56
- const dialog = useDialog(DialogName.BatchJsonCreate)
57
-
58
- const formData = {
59
- json: ''
60
- }
61
-
62
- let numPrinters = 0
63
-
64
- const parsedPrinters = async () => {
65
- const data = JSON.parse(formData.json)
66
- if (!Array.isArray(data)) return []
67
- return data
68
- }
69
-
70
- const updatePrinterCount = async () => {
71
- numPrinters = (await parsedPrinters()).length
72
- }
73
-
74
- const submit = async () => {
75
- const printers = await parsedPrinters()
76
-
77
- const numPrinters = printers.length
78
- const answer = confirm(`Are you sure to import ${numPrinters} printers?`)
79
- if (answer) {
80
- printers.forEach((p) => {
81
- if (p['_id']) {
82
- delete p['_id']
83
- }
84
- if (p['apikey']) {
85
- p.apiKey = p['apikey']
86
- delete p['apikey']
87
- }
88
- if (p['settingsApperance']) {
89
- p.settingsAppearance = p['settingsApperance']
90
- delete p['settingsApperance']
91
- }
92
- if (p['name']) {
93
- if (!p.settingsAppearance) {
94
- p.settingsAppearance = {}
95
- }
96
- p.settingsAppearance.name = p['name']
97
- delete p['name']
98
- }
99
- })
100
- await PrintersService.batchImportPrinters(printers)
101
- }
102
-
103
- closeDialog()
104
- }
105
-
106
- const closeDialog = () => {
107
- dialog.closeDialog()
108
- }
109
- </script>
@@ -1,190 +0,0 @@
1
- <template>
2
- <BaseDialog
3
- :id="dialog.dialogId"
4
- max-width="1000px"
5
- @before-opened="onBeforeDialogOpened"
6
- @escape="closeDialog()"
7
- @opened="onDialogOpened"
8
- >
9
- <v-card class="pa-4">
10
- <v-card-title>
11
- <span class="text-h5"> Batch - Submit Reprint Jobs </span>
12
- </v-card-title>
13
- <v-card-text>
14
- <v-alert
15
- v-if="errorLoading?.length"
16
- color="error"
17
- >
18
- {{ errorLoading }}
19
- </v-alert>
20
- <span v-if="loading"> Loading... </span>
21
- <div v-else>
22
- <v-list density="compact">
23
- <v-list-subheader>
24
- Reprinted Files - Select from list
25
- </v-list-subheader>
26
- <v-list-group
27
- v-model="selectedItems"
28
- multiple
29
- >
30
- <v-list-item
31
- v-for="(item, i) in reprintableFiles"
32
- :key="i"
33
- :value="item"
34
- :disabled="
35
- item.connectionState !== 'Operational' ||
36
- item.reprintState !== ReprintState.LastPrintReady
37
- "
38
- >
39
- <template #prepend>
40
- <v-icon
41
- v-if="item.reprintState == ReprintState.LastPrintReady"
42
- >checklist</v-icon
43
- >
44
- <v-icon v-if="item.reprintState == ReprintState.NoLastPrint">
45
- question_mark
46
- </v-icon>
47
- <v-icon
48
- v-if="item.reprintState == ReprintState.PrinterNotAvailable"
49
- >
50
- signal_disconnected
51
- </v-icon>
52
- </template>
53
-
54
- <v-list-item-title v-if="item.file?.path?.length">
55
- {{ item.file?.path }}
56
- <v-chip v-if="item.connectionState !== 'Operational'">
57
- Printer busy
58
- </v-chip>
59
- </v-list-item-title>
60
- <v-list-item-title
61
- v-else-if="item.reprintState == ReprintState.NoLastPrint"
62
- >
63
- No file is present to print again
64
- </v-list-item-title>
65
- <v-list-item-title v-else>
66
- OctoPrint cant be reached
67
- </v-list-item-title>
68
- <v-list-item-subtitle>
69
- Printer '{{
70
- printerStore.printer(item.printerId)?.name ??
71
- 'Unknown printer'
72
- }}'
73
- </v-list-item-subtitle>
74
- </v-list-item>
75
- </v-list-group>
76
- </v-list>
77
- </div>
78
-
79
- <div class="mt-3">
80
- <div v-if="submitting">
81
- <v-progress-circular
82
- class="ma-3"
83
- indeterminate
84
- color="blue"
85
- />
86
- Submitting
87
- </div>
88
- <div v-else-if="selectedItems.length > 0">
89
- {{ selectedItems.length }} reprint selected
90
- </div>
91
- <div v-else>Must select at least one file</div>
92
- </div>
93
- <br />
94
-
95
- <VBtn
96
- :disabled="submitting || selectedItems.length === 0"
97
- @click="submitBatchReprints()"
98
- >
99
- Submit Batch Reprint
100
- </VBtn>
101
- </v-card-text>
102
- <v-card-actions>
103
- <v-spacer />
104
- <v-btn
105
- variant="text"
106
- @click="dialog.closeDialog()"
107
- >
108
- Close
109
- </v-btn>
110
- </v-card-actions>
111
- </v-card>
112
- </BaseDialog>
113
- </template>
114
- <script lang="ts" setup>
115
- import { DialogName } from '@/components/Generic/Dialogs/dialog.constants'
116
- import { useDialog } from '@/shared/dialog.composable'
117
- import { onBeforeUnmount, onMounted, ref } from 'vue'
118
- import { BatchService } from '@/backend/batch.service'
119
- import { IdType } from '@/utils/id.type'
120
- import { ReprintFileDto, ReprintState } from '@/models/batch/reprint.dto'
121
- import { usePrinterStore } from '@/store/printer.store'
122
- import { errorSummary } from '@/utils/error.utils'
123
- import { useSnackbar } from '@/shared/snackbar.composable'
124
-
125
- const printerStore = usePrinterStore()
126
- const inputPrinterIds = ref()
127
- const dialog = useDialog(DialogName.BatchReprintDialog)
128
- const loading = ref(false)
129
- const submitting = ref(false)
130
- const reprintableFiles = ref<ReprintFileDto[]>([])
131
- const selectedItems = ref<ReprintFileDto[]>([])
132
- const errorLoading = ref('')
133
- const snackbar = useSnackbar()
134
-
135
- onMounted(() => {
136
- console.debug('Mounted')
137
- })
138
-
139
- onBeforeUnmount(() => {
140
- console.debug('Unmount')
141
- })
142
-
143
- function onBeforeDialogOpened(_: IdType[]) {
144
- loading.value = true
145
- }
146
-
147
- async function onDialogOpened(printerIds: IdType[]) {
148
- inputPrinterIds.value = printerIds
149
- try {
150
- const response = await BatchService.batchGetLastPrintedFiles(
151
- inputPrinterIds.value
152
- )
153
- reprintableFiles.value = response
154
- selectedItems.value = response.filter(
155
- (r) =>
156
- r.connectionState === 'Operational' &&
157
- r.reprintState == ReprintState.LastPrintReady
158
- )
159
- } catch (e: any) {
160
- errorLoading.value = e.code.toString() ?? ''
161
- }
162
-
163
- loading.value = false
164
- }
165
-
166
- async function submitBatchReprints() {
167
- submitting.value = true
168
- try {
169
- await BatchService.batchReprintFiles(
170
- selectedItems.value
171
- .filter((v) => v.file?.path)
172
- .map((v) => ({
173
- printerId: v.printerId,
174
- path: v.file?.path || ''
175
- }))
176
- )
177
- printerStore.clearSelectedPrinters()
178
- snackbar.info('Action completed', 'Your reprinted jobs are starting', 5000)
179
- closeDialog()
180
- } catch (e: any) {
181
- errorLoading.value = errorSummary(e)
182
- } finally {
183
- submitting.value = false
184
- }
185
- }
186
-
187
- function closeDialog() {
188
- dialog.closeDialog(dialog.context())
189
- }
190
- </script>