@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,22 +0,0 @@
1
- <template>
2
- <v-btn
3
- class="ma-2"
4
- color="primary"
5
- fab
6
- size="small"
7
- @click.c.capture.native.stop="openCreatePrinterDialog()"
8
- >
9
- <v-icon>add</v-icon>
10
- </v-btn>
11
- </template>
12
-
13
- <script lang="ts" setup>
14
- import { useDialogsStore } from '@/store/dialog.store'
15
- import { DialogName } from '../Dialogs/dialog.constants'
16
-
17
- const dialogsStore = useDialogsStore()
18
-
19
- function openCreatePrinterDialog() {
20
- dialogsStore.openDialogWithContext(DialogName.AddOrUpdatePrinterDialog)
21
- }
22
- </script>
@@ -1,29 +0,0 @@
1
- <template>
2
- <v-btn
3
- class="ma-2"
4
- color="primary"
5
- fab
6
- size="small"
7
- @click.prevent.stop="deletePrinter"
8
- >
9
- <v-icon>delete</v-icon>
10
- </v-btn>
11
- </template>
12
-
13
- <script lang="ts" setup>
14
- import { defineProps } from 'vue'
15
- import { PrinterDto } from '@/models/printers/printer.model'
16
- import { usePrinterStore } from '@/store/printer.store'
17
-
18
- const props = defineProps<{
19
- printer: PrinterDto
20
- }>()
21
-
22
- const printersStore = usePrinterStore()
23
-
24
- async function deletePrinter() {
25
- if (!confirm('Are you sure to delete this printer?')) return
26
-
27
- await printersStore.deletePrinter(props.printer.id)
28
- }
29
- </script>
@@ -1,35 +0,0 @@
1
- <template>
2
- <v-badge
3
- v-if="printer.enabled"
4
- bordered
5
- class="ma-2"
6
- overlap
7
- >
8
- <template #badge>
9
- <v-icon>bolt</v-icon>
10
- </template>
11
- <v-btn
12
- fab
13
- size="small"
14
- @click.stop="clickQuickStop"
15
- >
16
- <v-icon>stop</v-icon>
17
- </v-btn>
18
- </v-badge>
19
- </template>
20
-
21
- <script lang="ts" setup>
22
- import { defineProps } from 'vue'
23
- import { PrinterDto } from '@/models/printers/printer.model'
24
- import { CustomGcodeService } from '@/backend/custom-gcode.service'
25
-
26
- const props = defineProps<{
27
- printer: PrinterDto
28
- }>()
29
-
30
- async function clickQuickStop() {
31
- if (confirm('Are you sure to abort the print? Please reconnect after.')) {
32
- await CustomGcodeService.postQuickStopM112Command(props.printer.id)
33
- }
34
- }
35
- </script>
@@ -1,35 +0,0 @@
1
- <template>
2
- <v-btn
3
- class="ma-2"
4
- color="primary"
5
- fab
6
- size="small"
7
- @click.c.capture.native.stop="openSettings()"
8
- >
9
- <v-icon>settings</v-icon>
10
- </v-btn>
11
- </template>
12
-
13
- <script lang="ts">
14
- import { defineComponent, PropType } from 'vue'
15
- import { PrinterDto } from '@/models/printers/printer.model'
16
-
17
- export default defineComponent({
18
- name: 'PrinterSettingsAction',
19
- props: {
20
- printer: Object as PropType<PrinterDto>
21
- },
22
-
23
- computed: {
24
- printerId() {
25
- return this.printer!.id
26
- }
27
- },
28
-
29
- methods: {
30
- openSettings() {
31
- this.$emit('update:show', this.printer!.id)
32
- }
33
- }
34
- })
35
- </script>
@@ -1,24 +0,0 @@
1
- <template>
2
- <v-btn
3
- class="ma-2"
4
- color="primary"
5
- fab
6
- size="small"
7
- @click.c.capture.native.stop="openPrinterURL()"
8
- >
9
- <v-icon>directions</v-icon>
10
- </v-btn>
11
- </template>
12
-
13
- <script lang="ts" setup>
14
- import { PrinterDto } from '@/models/printers/printer.model'
15
- import { PrintersService } from '@/backend'
16
-
17
- const props = defineProps<{
18
- printer: PrinterDto
19
- }>()
20
-
21
- async function openPrinterURL() {
22
- PrintersService.openPrinterURL(props.printer.printerURL)
23
- }
24
- </script>
@@ -1,50 +0,0 @@
1
- <template>
2
- <v-btn
3
- color="secondary"
4
- @click="getFiles()"
5
- >
6
- <v-icon>refresh</v-icon>
7
- <span class="d-none d-lg-inline"> Refresh files </span>
8
- </v-btn>
9
- </template>
10
-
11
- <script lang="ts">
12
- import { usePrinterStore } from '@/store/printer.store'
13
- import { defineComponent, PropType } from 'vue'
14
- import { PrinterDto } from '@/models/printers/printer.model'
15
-
16
- interface Data {
17
- property: number
18
- }
19
-
20
- export default defineComponent({
21
- name: 'RefreshFilesAction',
22
- components: {},
23
- props: {
24
- printer: Object as PropType<PrinterDto>
25
- },
26
- setup: () => {
27
- return {
28
- printersStore: usePrinterStore()
29
- }
30
- },
31
-
32
- data: (): Data => ({
33
- property: 0
34
- }),
35
-
36
- computed: {},
37
-
38
- watch: {},
39
-
40
- async created() {},
41
- async mounted() {},
42
- methods: {
43
- async getFiles() {
44
- if (!this.printer) return
45
-
46
- await this.printersStore.loadPrinterFiles(this.printer.id, false)
47
- }
48
- }
49
- })
50
- </script>
@@ -1,36 +0,0 @@
1
- <template>
2
- <v-tooltip location="top">
3
- <template #activator="{ props }">
4
- <v-btn
5
- v-bind="props"
6
- class="ma-2"
7
- color="primary"
8
- fab
9
- size="small"
10
- @click.c.capture.native.stop="syncPrinterName()"
11
- >
12
- <v-icon>badge</v-icon>
13
- </v-btn>
14
- </template>
15
- <template #default> Set OctoPrints name to the FDM Monster Name </template>
16
- </v-tooltip>
17
- </template>
18
-
19
- <script lang="ts" setup>
20
- import { PrinterDto } from '@/models/printers/printer.model'
21
- import { PrinterSettingsService } from '@/backend/printer-settings.service'
22
- import { useSnackbar } from '@/shared/snackbar.composable'
23
-
24
- const props = defineProps<{
25
- printer: PrinterDto
26
- }>()
27
-
28
- const snackbar = useSnackbar()
29
-
30
- async function syncPrinterName() {
31
- await PrinterSettingsService.syncPrinterName(props.printer.id)
32
- snackbar.openInfoMessage({
33
- title: 'Synced printer name to OctoPrint'
34
- })
35
- }
36
- </script>
@@ -1,131 +0,0 @@
1
- <template>
2
- <BaseDialog
3
- :id="dialog.dialogId"
4
- max-width="800px"
5
- @escape="closeDialog()"
6
- >
7
- <v-card>
8
- <v-card-title>
9
- <span class="text-h5">
10
- <v-avatar
11
- class="mr-2"
12
- color="primary"
13
- size="56"
14
- >
15
- {{ avatarInitials }}
16
- </v-avatar>
17
- <span v-if="isUpdating"> Updating Camera </span>
18
- <span v-else> New Camera </span>
19
- </span>
20
- </v-card-title>
21
-
22
- <v-card-text>
23
- <v-container grid-list-md>
24
- <v-layout wrap>
25
- <v-text-field
26
- v-model="cameraStream.name"
27
- label="Name"
28
- required
29
- />
30
- <v-text-field
31
- v-model="cameraStream.streamURL"
32
- label="Url (MJPEG)"
33
- required
34
- />
35
- </v-layout>
36
- </v-container>
37
- </v-card-text>
38
-
39
- <v-card-actions>
40
- <v-spacer />
41
- <v-btn
42
- color="primary-darken-2"
43
- @click="close"
44
- >
45
- Cancel
46
- </v-btn>
47
- <v-btn
48
- color="primary"
49
- @click="isUpdating ? updateCamera() : createCamera()"
50
- >
51
- {{ isUpdating ? 'Update' : 'Create' }}
52
- </v-btn>
53
- </v-card-actions>
54
- </v-card>
55
- </BaseDialog>
56
- </template>
57
-
58
- <script lang="ts" setup>
59
- import { computed, ref, watch } from 'vue'
60
- import { DialogName } from '@/components/Generic/Dialogs/dialog.constants'
61
- import { useDialog } from '@/shared/dialog.composable'
62
- import {
63
- CameraStream,
64
- CameraWithPrinter
65
- } from '@/models/camera-streams/camera-stream'
66
- import { CameraStreamService } from '@/backend/camera-stream.service'
67
- import { useQueryClient } from '@tanstack/vue-query'
68
-
69
- const queryClient = useQueryClient()
70
- const dialog = useDialog(DialogName.AddOrUpdateCameraDialog)
71
-
72
- const avatarInitials = computed(() => {
73
- return 'C'
74
- })
75
-
76
- const cameraStream = ref<CameraStream>({
77
- name: '',
78
- streamURL: ''
79
- })
80
-
81
- const isDialogUpdate = () => dialog.context()?.addOrUpdate === 'update'
82
-
83
- const isUpdating = computed(() => {
84
- return isDialogUpdate()
85
- })
86
-
87
- watch(
88
- () => dialog.context(),
89
- (context) => {
90
- if (!context || context?.addOrUpdate !== 'update') {
91
- cameraStream.value.streamURL = ''
92
- cameraStream.value.name = ''
93
- return
94
- }
95
-
96
- const stream = queryClient
97
- .getQueryData<CameraWithPrinter[]>(['cameraStream'])
98
- ?.find(
99
- (cameraStream) => cameraStream.cameraStream.id === context.cameraId
100
- )
101
- cameraStream.value.name = stream?.cameraStream.name
102
- cameraStream.value.streamURL = stream?.cameraStream.streamURL || ''
103
- }
104
- )
105
-
106
- function closeDialog() {
107
- dialog.closeDialog()
108
- }
109
-
110
- async function createCamera() {
111
- await CameraStreamService.createCameraStream({
112
- streamURL: cameraStream.value.streamURL,
113
- name: cameraStream.value.name
114
- })
115
- await queryClient.refetchQueries({ queryKey: ['cameraStream'] })
116
- dialog.closeDialog()
117
- }
118
-
119
- async function updateCamera() {
120
- await CameraStreamService.updateCameraStream(dialog.context()?.cameraId, {
121
- streamURL: cameraStream.value.streamURL,
122
- name: cameraStream.value.name
123
- })
124
- await queryClient.refetchQueries({ queryKey: ['cameraStream'] })
125
- dialog.closeDialog()
126
- }
127
-
128
- function close() {
129
- dialog.closeDialog()
130
- }
131
- </script>
@@ -1,141 +0,0 @@
1
- <template>
2
- <BaseDialog
3
- :id="dialog.dialogId"
4
- :max-width="'700px'"
5
- @escape="closeDialog"
6
- >
7
- <v-card>
8
- <v-card-title>
9
- <span class="text-h5">
10
- <v-avatar
11
- color="primary"
12
- size="56"
13
- >{{ avatarInitials }}</v-avatar
14
- >
15
- New Floor
16
- </span>
17
- </v-card-title>
18
- <v-card-text>
19
- <v-row>
20
- <v-col :cols="12">
21
- <v-container>
22
- <v-row>
23
- <v-col
24
- v-if="formData"
25
- cols="12"
26
- md="6"
27
- >
28
- <v-text-field
29
- v-model="formData.name"
30
- autofocus
31
- label="Floor name*"
32
- required
33
- />
34
- <v-text-field
35
- v-model="formData.floor"
36
- label="Floor number"
37
- required
38
- type="number"
39
- />
40
- </v-col>
41
- </v-row>
42
- </v-container>
43
- </v-col>
44
- </v-row>
45
- </v-card-text>
46
- <v-card-actions>
47
- <em class="text-red"> * indicates required field </em>
48
- <v-spacer />
49
- <v-btn
50
- variant="text"
51
- @click="closeDialog"
52
- >Close</v-btn
53
- >
54
- <v-btn
55
- color="blue-darken-1"
56
- variant="text"
57
- @click="submit"
58
- >Create</v-btn
59
- >
60
- </v-card-actions>
61
- </v-card>
62
- </BaseDialog>
63
- </template>
64
-
65
- <script lang="ts" setup>
66
- import { inject, ref, computed, watch, onMounted } from 'vue'
67
- import {
68
- generateInitials,
69
- newRandomNamePair
70
- } from '@/shared/noun-adjectives.data'
71
- import { FloorService } from '@/backend/floor.service'
72
- import { DialogName } from '@/components/Generic/Dialogs/dialog.constants'
73
- import { useFloorStore } from '@/store/floor.store'
74
- import { useDialog } from '@/shared/dialog.composable'
75
- import { AppConstants } from '@/shared/app.constants'
76
- import {
77
- getDefaultCreateFloor,
78
- PreCreateFloor
79
- } from '@/models/floors/floor.model'
80
- import { useSnackbar } from '@/shared/snackbar.composable'
81
-
82
- const dialog = useDialog(DialogName.AddOrUpdateFloorDialog)
83
- const floorStore = useFloorStore()
84
- const appConstants = inject('appConstants') as AppConstants
85
- const snackbar = useSnackbar()
86
-
87
- const formData = ref<PreCreateFloor>(getDefaultCreateFloor())
88
-
89
- const printerFloorId = computed(() => dialog.context()?.printerFloorId)
90
-
91
- const avatarInitials = computed(() => {
92
- return formData.value ? generateInitials(formData.value.name) : ''
93
- })
94
-
95
- const validateFormData = () => {
96
- if (
97
- !formData.value.name ||
98
- formData.value.name.length < appConstants.minPrinterFloorNameLength
99
- ) {
100
- snackbar.openErrorMessage({ title: 'Invalid floor name' })
101
- return false
102
- }
103
- if (!Number.isInteger(Number(formData.value.floor))) {
104
- snackbar.openErrorMessage({ title: 'Floor number must be an integer' })
105
- return false
106
- }
107
- return true
108
- }
109
-
110
- const submit = async () => {
111
- if (!validateFormData()) return
112
- const floorData = FloorService.convertCreateFormToFloor(formData.value)
113
- await floorStore.createFloor(floorData)
114
- snackbar.openInfoMessage({ title: `Floor ${floorData.name} created` })
115
- formData.value.name = newRandomNamePair()
116
- const maxIndex = Math.max(...floorStore.floors.map((f) => f.floor)) + 1
117
- formData.value.floor = maxIndex.toString()
118
- closeDialog()
119
- }
120
-
121
- const closeDialog = () => {
122
- dialog.closeDialog()
123
- }
124
-
125
- watch(printerFloorId, (val) => {
126
- if (val) {
127
- const printerFloor = floorStore.floor(val)
128
- formData.value = FloorService.convertPrinterFloorToCreateForm(printerFloor)
129
- }
130
- })
131
-
132
- onMounted(() => {
133
- if (printerFloorId.value) {
134
- const crudeData = floorStore.floor(printerFloorId.value)
135
- formData.value = FloorService.convertPrinterFloorToCreateForm(crudeData)
136
- } else if (floorStore.floors?.length) {
137
- const maxIndex = Math.max(...floorStore.floors.map((pf) => pf.floor)) + 1
138
- formData.value.floor = maxIndex.toString()
139
- }
140
- })
141
- </script>