@konfuzio/document-validation-ui 0.1.19 → 0.1.20

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 (143) hide show
  1. package/.eslintrc.js +10 -10
  2. package/.prettierrc.json +1 -1
  3. package/LICENSE +21 -21
  4. package/README.md +24 -24
  5. package/cypress.config.js +13 -13
  6. package/dist/js/app.js +1 -1
  7. package/dist/js/app.js.map +1 -1
  8. package/dist/js/chunk-vendors.js +1 -1
  9. package/dist/js/chunk-vendors.js.map +1 -1
  10. package/jest.config.js +4 -4
  11. package/package.json +66 -66
  12. package/src/api.js +82 -82
  13. package/src/assets/images/AcceptedCheckMark.vue +8 -8
  14. package/src/assets/images/AcceptedUser.vue +8 -8
  15. package/src/assets/images/ActionIcon.vue +60 -60
  16. package/src/assets/images/ArrowDownKey.vue +11 -11
  17. package/src/assets/images/ArrowUpKey.vue +11 -11
  18. package/src/assets/images/CategoryIconImg.vue +13 -13
  19. package/src/assets/images/CheckMark.vue +8 -8
  20. package/src/assets/images/DraggableIcon.vue +14 -14
  21. package/src/assets/images/EditDocIcon.vue +12 -12
  22. package/src/assets/images/EmptyStateImg.vue +129 -129
  23. package/src/assets/images/ErrorIcon.vue +28 -28
  24. package/src/assets/images/EyeIcon.vue +11 -11
  25. package/src/assets/images/FileNameNotSavedImage.vue +26 -26
  26. package/src/assets/images/FileNameSavedImage.vue +14 -14
  27. package/src/assets/images/FitZoomIcon.vue +16 -16
  28. package/src/assets/images/GridIcon.vue +16 -16
  29. package/src/assets/images/KeyboardIcon.vue +16 -16
  30. package/src/assets/images/MagicWandIcon.vue +16 -16
  31. package/src/assets/images/MinusIcon.vue +13 -13
  32. package/src/assets/images/NotFoundIcon.vue +16 -16
  33. package/src/assets/images/NotOptimizedIllustration.vue +651 -651
  34. package/src/assets/images/PlusIcon.vue +13 -13
  35. package/src/assets/images/QuestionMark.vue +12 -12
  36. package/src/assets/images/ServerImage.vue +73 -73
  37. package/src/assets/images/SettingsIcon.vue +14 -14
  38. package/src/assets/images/SplitLines.vue +18 -18
  39. package/src/assets/images/SplitZigZag.vue +49 -49
  40. package/src/assets/images/StarIcon.vue +16 -16
  41. package/src/assets/images/StatusImg.vue +14 -14
  42. package/src/assets/images/TranslateArrows.vue +33 -33
  43. package/src/assets/scss/ann_set_table_options.scss +26 -26
  44. package/src/assets/scss/annotation_details.scss +141 -141
  45. package/src/assets/scss/choose_label_set_modal.scss +65 -65
  46. package/src/assets/scss/document_action_bar.scss +37 -37
  47. package/src/assets/scss/document_annotations.scss +558 -558
  48. package/src/assets/scss/document_category.scss +85 -85
  49. package/src/assets/scss/document_dashboard.scss +52 -52
  50. package/src/assets/scss/document_edit.scss +410 -410
  51. package/src/assets/scss/document_error.scss +81 -81
  52. package/src/assets/scss/document_name.scss +60 -60
  53. package/src/assets/scss/document_page.scss +12 -12
  54. package/src/assets/scss/document_thumbnails.scss +41 -41
  55. package/src/assets/scss/document_toolbar.scss +111 -111
  56. package/src/assets/scss/document_top_bar.scss +171 -171
  57. package/src/assets/scss/document_viewport_modal.scss +25 -25
  58. package/src/assets/scss/documents_list.scss +141 -141
  59. package/src/assets/scss/edit_page_thumbnail.scss +53 -53
  60. package/src/assets/scss/empty_state.scss +34 -34
  61. package/src/assets/scss/extracting_data.scss +35 -35
  62. package/src/assets/scss/imports.scss +1 -1
  63. package/src/assets/scss/multi_ann_table_overlay.scss +38 -38
  64. package/src/assets/scss/multi_ann_table_popup.scss +12 -12
  65. package/src/assets/scss/new_annotation.scss +102 -102
  66. package/src/assets/scss/scrolling_document.scss +19 -19
  67. package/src/assets/scss/theme.scss +801 -801
  68. package/src/assets/scss/variables.scss +66 -66
  69. package/src/components/App.cy.js +7 -7
  70. package/src/components/App.vue +187 -187
  71. package/src/components/DocumentAnnotations/AnnotationActionButtons.vue +152 -152
  72. package/src/components/DocumentAnnotations/AnnotationContent.vue +210 -210
  73. package/src/components/DocumentAnnotations/AnnotationDetails.vue +251 -251
  74. package/src/components/DocumentAnnotations/AnnotationRow.vue +752 -752
  75. package/src/components/DocumentAnnotations/AnnotationSetActionButtons.vue +89 -89
  76. package/src/components/DocumentAnnotations/ChooseLabelSetModal.vue +186 -186
  77. package/src/components/DocumentAnnotations/DocumentAnnotations.cy.js +441 -441
  78. package/src/components/DocumentAnnotations/DocumentAnnotations.vue +534 -534
  79. package/src/components/DocumentAnnotations/DocumentLabel.vue +189 -189
  80. package/src/components/DocumentAnnotations/EmptyAnnotation.vue +193 -193
  81. package/src/components/DocumentAnnotations/EmptyState.vue +21 -21
  82. package/src/components/DocumentAnnotations/ExtractingData.vue +41 -41
  83. package/src/components/DocumentAnnotations/LoadingAnnotations.vue +43 -43
  84. package/src/components/DocumentAnnotations/LoadingLabels.vue +43 -43
  85. package/src/components/DocumentAnnotations/MultiAnnotationTableOverlay.vue +338 -338
  86. package/src/components/DocumentAnnotations/index.js +8 -8
  87. package/src/components/DocumentCategory.vue +281 -281
  88. package/src/components/DocumentDashboard.vue +170 -170
  89. package/src/components/DocumentEdit/DocumentEdit.cy.js +541 -541
  90. package/src/components/DocumentEdit/DocumentEdit.vue +503 -503
  91. package/src/components/DocumentEdit/EditConfirmationModal.vue +55 -55
  92. package/src/components/DocumentEdit/EditPageThumbnail.vue +114 -114
  93. package/src/components/DocumentEdit/EditPages.vue +161 -161
  94. package/src/components/DocumentEdit/EditSidebar.vue +154 -154
  95. package/src/components/DocumentEdit/RenameAndCategorize.vue +184 -184
  96. package/src/components/DocumentEdit/SidebarButtons.vue +53 -53
  97. package/src/components/DocumentEdit/SplitInfoBar.vue +21 -21
  98. package/src/components/DocumentEdit/index.js +4 -4
  99. package/src/components/DocumentModals/DocumentErrorModal.vue +58 -58
  100. package/src/components/DocumentModals/NotOptimizedViewportModal.vue +51 -51
  101. package/src/components/DocumentPage/ActionBar.vue +48 -48
  102. package/src/components/DocumentPage/AnnSetTableOptions.vue +111 -111
  103. package/src/components/DocumentPage/BoxSelection.vue +152 -152
  104. package/src/components/DocumentPage/DocumentPage.cy.js +92 -92
  105. package/src/components/DocumentPage/DocumentPage.vue +568 -568
  106. package/src/components/DocumentPage/DocumentToolbar.cy.js +215 -215
  107. package/src/components/DocumentPage/DocumentToolbar.vue +228 -228
  108. package/src/components/DocumentPage/DummyPage.vue +55 -55
  109. package/src/components/DocumentPage/MultiAnnSelection.vue +371 -371
  110. package/src/components/DocumentPage/NewAnnotation.vue +308 -308
  111. package/src/components/DocumentPage/ScrollingDocument.vue +149 -149
  112. package/src/components/DocumentPage/ScrollingPage.vue +179 -179
  113. package/src/components/DocumentPage/index.js +5 -5
  114. package/src/components/DocumentThumbnails/DocumentThumbnails.cy.js +67 -67
  115. package/src/components/DocumentThumbnails/DocumentThumbnails.vue +132 -132
  116. package/src/components/DocumentThumbnails/LoadingThumbnail.vue +25 -25
  117. package/src/components/DocumentThumbnails/index.js +1 -1
  118. package/src/components/DocumentTopBar/DocumentName.vue +236 -236
  119. package/src/components/DocumentTopBar/DocumentTopBar.cy.js +222 -222
  120. package/src/components/DocumentTopBar/DocumentTopBar.vue +202 -202
  121. package/src/components/DocumentTopBar/DocumentTopBarButtons.vue +183 -183
  122. package/src/components/DocumentTopBar/KeyboardActionsDescription.vue +74 -74
  123. package/src/components/DocumentTopBar/index.js +3 -3
  124. package/src/components/DocumentsList/DocumentsList.vue +121 -121
  125. package/src/components/DocumentsList/index.js +1 -1
  126. package/src/components/ErrorMessage.vue +40 -40
  127. package/src/components/index.js +1 -1
  128. package/src/constants.js +5 -5
  129. package/src/directives/scroll.js +28 -28
  130. package/src/i18n.js +22 -22
  131. package/src/icons.js +45 -45
  132. package/src/locales/de.json +148 -148
  133. package/src/locales/en.json +148 -148
  134. package/src/main.js +26 -26
  135. package/src/store/category.js +191 -191
  136. package/src/store/display.js +311 -311
  137. package/src/store/document.js +1438 -1438
  138. package/src/store/edit.js +316 -316
  139. package/src/store/index.js +21 -21
  140. package/src/store/project.js +143 -143
  141. package/src/store/selection.js +210 -210
  142. package/src/utils/utils.js +54 -54
  143. package/vue.config.js +25 -25
@@ -1,236 +1,236 @@
1
- <template>
2
- <div
3
- :class="['document-name-component', editMode && 'document-name-edit-mode']"
4
- >
5
- <div class="document-icon">
6
- <ServerImage
7
- :height="'22px'"
8
- :image-url="`${selectedDocument.thumbnail_url}?${selectedDocument.downloaded_at}`"
9
- >
10
- <b-skeleton width="15px" height="22px" :rounded="false" />
11
- </ServerImage>
12
- </div>
13
- <span class="file-name-section">
14
- <span
15
- :class="['document-name', isEditable && 'is-editable']"
16
- :contenteditable="isEditable"
17
- @input="handleInput"
18
- @paste="handlePaste"
19
- @keydown.enter="handleSave"
20
- @blur="handleSave"
21
- >{{ textContent }}</span
22
- >
23
- </span>
24
- <div
25
- v-if="
26
- !publicView &&
27
- !isDocumentReviewed &&
28
- showEditBtn &&
29
- !editMode &&
30
- !recalculatingAnnotations
31
- "
32
- class="edit-btn btn"
33
- @click="handleEdit"
34
- >
35
- {{ $t("edit") }}
36
- </div>
37
- <div
38
- v-if="showSaveBtn && !editMode"
39
- class="save-btn btn"
40
- @click="handleSave"
41
- >
42
- {{ $t("save") }}
43
- </div>
44
- <div v-if="saving" class="message-container">
45
- <span class="loading-container">
46
- <b-notification :closable="false" class="loading-background">
47
- <b-loading v-model="saving" :is-full-page="isFullPage">
48
- <b-icon icon="spinner" class="fa-spin loading-icon-size spinner" />
49
- </b-loading>
50
- </b-notification>
51
- </span>
52
- <span>{{ $t("autosaving") }}</span>
53
- </div>
54
- <div v-if="changed" class="message-container">
55
- <span v-if="saved" class="cloud-icon"><FileNameSaved /></span>
56
- <span v-else class="cloud-icon"><FileNameNotSaved /></span>
57
- <span>{{ saved ? $t("saved") : $t("not_saved") }}</span>
58
- </div>
59
- </div>
60
- </template>
61
-
62
- <script>
63
- import ServerImage from "../../assets/images/ServerImage";
64
- import FileNameSaved from "../../assets/images/FileNameSavedImage";
65
- import FileNameNotSaved from "../../assets/images/FileNameNotSavedImage";
66
- import { mapGetters, mapState } from "vuex";
67
-
68
- export default {
69
- name: "DocumentName",
70
- components: {
71
- ServerImage,
72
- FileNameSaved,
73
- FileNameNotSaved,
74
- },
75
- props: {
76
- dataFileName: {
77
- type: String,
78
- default: "",
79
- },
80
- },
81
- data() {
82
- return {
83
- isEditable: false,
84
- showEditBtn: true,
85
- showSaveBtn: false,
86
- fileExtension: null,
87
- fileName: null,
88
- oldFileName: null,
89
- saving: false,
90
- isFullPage: false,
91
- changed: false,
92
- saved: false,
93
- };
94
- },
95
- computed: {
96
- ...mapState("document", [
97
- "selectedDocument",
98
- "publicView",
99
- "recalculatingAnnotations",
100
- ]),
101
- ...mapState("display", ["optimalResolution"]),
102
- ...mapState("edit", ["editMode"]),
103
- ...mapGetters("document", ["isDocumentReviewed"]),
104
- textContent() {
105
- if (this.isEditable) {
106
- return this.oldFileName;
107
- } else if (this.fileName) {
108
- return this.shortFilenameIfNeeded(
109
- `${this.fileName}.${this.fileExtension}`
110
- );
111
- } else {
112
- return this.shortFilenameIfNeeded(this.dataFileName);
113
- }
114
- },
115
- },
116
- updated() {
117
- const contentEditable = document.querySelector(".document-name");
118
- if (this.isEditable && contentEditable) {
119
- contentEditable.focus();
120
- this.handleCaretPlacing(contentEditable);
121
- }
122
-
123
- if (this.changed) {
124
- const that = this;
125
- setTimeout(function () {
126
- that.saved = false;
127
- that.changed = false;
128
- that.showEditBtn = true;
129
- this.showSaveBtn = false;
130
- }, 4000);
131
- }
132
- },
133
- methods: {
134
- shortFilenameIfNeeded(filename) {
135
- if (
136
- filename &&
137
- (filename.length >= 70 ||
138
- (filename.length >= 25 && !this.optimalResolution))
139
- ) {
140
- return (
141
- filename.substr(0, 20) +
142
- "..." +
143
- filename.substr(filename.length - 10, filename.length)
144
- );
145
- }
146
- return filename;
147
- },
148
- handleFileName() {
149
- // Save the file name and the extension in different variables
150
- this.fileName = this.dataFileName.split(".").slice(0, -1).join(".");
151
-
152
- this.fileExtension = this.dataFileName.split(".").at(-1);
153
- },
154
- handleEdit() {
155
- // Split file name and extension to only edit name
156
- this.handleFileName();
157
-
158
- this.isEditable = true;
159
- this.showEditBtn = false;
160
- this.showSaveBtn = true;
161
- this.oldFileName = this.fileName;
162
- },
163
- handleCaretPlacing(contentEditable) {
164
- let range, selection;
165
- if (document.createRange) {
166
- range = document.createRange(); //Create a range (a range is a like the selection but invisible)
167
- range.selectNodeContents(contentEditable); //Select the entire contents of the element with the range
168
- range.collapse(false); //collapse the range to the end point. false means collapse to end rather than the start
169
- selection = window.getSelection(); //get the selection object (allows you to change selection)
170
- selection.removeAllRanges(); //remove any selections already made
171
- selection.addRange(range); //make the range you have just created the visible selection
172
- } else if (document.selection) {
173
- range = document.body.createTextRange(); //Create a range (a range is a like the selection but invisible)
174
- range.moveToElementText(contentEditable); //Select the entire contents of the element with the range
175
- range.collapse(false); //collapse the range to the end point. false means collapse to end rather than the start
176
- range.select(); //Select the range (make it the visible selection
177
- }
178
- },
179
- handlePaste(event) {
180
- // TODO: modify to only paste plain text
181
- event.preventDefault();
182
- },
183
- handleInput(event) {
184
- const input = event.target.textContent;
185
-
186
- // Set the new file name to the new input value
187
- if (input === "") {
188
- // If the user deletes the name:
189
- this.fileName = "untitled";
190
- } else {
191
- this.fileName = input.trim();
192
- }
193
- },
194
- handleSave(event) {
195
- this.isEditable = false;
196
-
197
- event.target.textContent = this.fileName;
198
-
199
- const updatedFileName = {
200
- data_file_name: `${this.fileName}.${this.fileExtension}`,
201
- };
202
-
203
- this.showSaveBtn = false;
204
- this.saving = true;
205
-
206
- this.$store
207
- .dispatch("document/updateDocument", updatedFileName)
208
- .then((response) => {
209
- // Check if the response is successful or not
210
- if (response) {
211
- // if successful, set the old name to be the new name
212
- this.changed = true;
213
- this.oldFileName = this.fileName;
214
- this.saved = true;
215
- }
216
- })
217
- .catch((error) => {
218
- this.changed = true;
219
- event.target.textContent = this.oldFileName;
220
- this.fileName = this.oldFileName;
221
- })
222
- .finally(() => {
223
- this.saving = false;
224
- });
225
-
226
- // Remove focus from contenteditable
227
- const contentNotEditable = document.querySelector(".document-name");
228
- if (contentNotEditable) {
229
- contentNotEditable.blur();
230
- }
231
- },
232
- },
233
- };
234
- </script>
235
-
236
- <style scoped lang="scss" src="../../assets/scss/document_name.scss"></style>
1
+ <template>
2
+ <div
3
+ :class="['document-name-component', editMode && 'document-name-edit-mode']"
4
+ >
5
+ <div class="document-icon">
6
+ <ServerImage
7
+ :height="'22px'"
8
+ :image-url="`${selectedDocument.thumbnail_url}?${selectedDocument.downloaded_at}`"
9
+ >
10
+ <b-skeleton width="15px" height="22px" :rounded="false" />
11
+ </ServerImage>
12
+ </div>
13
+ <span class="file-name-section">
14
+ <span
15
+ :class="['document-name', isEditable && 'is-editable']"
16
+ :contenteditable="isEditable"
17
+ @input="handleInput"
18
+ @paste="handlePaste"
19
+ @keydown.enter="handleSave"
20
+ @blur="handleSave"
21
+ >{{ textContent }}</span
22
+ >
23
+ </span>
24
+ <div
25
+ v-if="
26
+ !publicView &&
27
+ !isDocumentReviewed &&
28
+ showEditBtn &&
29
+ !editMode &&
30
+ !recalculatingAnnotations
31
+ "
32
+ class="edit-btn btn"
33
+ @click="handleEdit"
34
+ >
35
+ {{ $t("edit") }}
36
+ </div>
37
+ <div
38
+ v-if="showSaveBtn && !editMode"
39
+ class="save-btn btn"
40
+ @click="handleSave"
41
+ >
42
+ {{ $t("save") }}
43
+ </div>
44
+ <div v-if="saving" class="message-container">
45
+ <span class="loading-container">
46
+ <b-notification :closable="false" class="loading-background">
47
+ <b-loading v-model="saving" :is-full-page="isFullPage">
48
+ <b-icon icon="spinner" class="fa-spin loading-icon-size spinner" />
49
+ </b-loading>
50
+ </b-notification>
51
+ </span>
52
+ <span>{{ $t("autosaving") }}</span>
53
+ </div>
54
+ <div v-if="changed" class="message-container">
55
+ <span v-if="saved" class="cloud-icon"><FileNameSaved /></span>
56
+ <span v-else class="cloud-icon"><FileNameNotSaved /></span>
57
+ <span>{{ saved ? $t("saved") : $t("not_saved") }}</span>
58
+ </div>
59
+ </div>
60
+ </template>
61
+
62
+ <script>
63
+ import ServerImage from "../../assets/images/ServerImage";
64
+ import FileNameSaved from "../../assets/images/FileNameSavedImage";
65
+ import FileNameNotSaved from "../../assets/images/FileNameNotSavedImage";
66
+ import { mapGetters, mapState } from "vuex";
67
+
68
+ export default {
69
+ name: "DocumentName",
70
+ components: {
71
+ ServerImage,
72
+ FileNameSaved,
73
+ FileNameNotSaved,
74
+ },
75
+ props: {
76
+ dataFileName: {
77
+ type: String,
78
+ default: "",
79
+ },
80
+ },
81
+ data() {
82
+ return {
83
+ isEditable: false,
84
+ showEditBtn: true,
85
+ showSaveBtn: false,
86
+ fileExtension: null,
87
+ fileName: null,
88
+ oldFileName: null,
89
+ saving: false,
90
+ isFullPage: false,
91
+ changed: false,
92
+ saved: false,
93
+ };
94
+ },
95
+ computed: {
96
+ ...mapState("document", [
97
+ "selectedDocument",
98
+ "publicView",
99
+ "recalculatingAnnotations",
100
+ ]),
101
+ ...mapState("display", ["optimalResolution"]),
102
+ ...mapState("edit", ["editMode"]),
103
+ ...mapGetters("document", ["isDocumentReviewed"]),
104
+ textContent() {
105
+ if (this.isEditable) {
106
+ return this.oldFileName;
107
+ } else if (this.fileName) {
108
+ return this.shortFilenameIfNeeded(
109
+ `${this.fileName}.${this.fileExtension}`
110
+ );
111
+ } else {
112
+ return this.shortFilenameIfNeeded(this.dataFileName);
113
+ }
114
+ },
115
+ },
116
+ updated() {
117
+ const contentEditable = document.querySelector(".document-name");
118
+ if (this.isEditable && contentEditable) {
119
+ contentEditable.focus();
120
+ this.handleCaretPlacing(contentEditable);
121
+ }
122
+
123
+ if (this.changed) {
124
+ const that = this;
125
+ setTimeout(function () {
126
+ that.saved = false;
127
+ that.changed = false;
128
+ that.showEditBtn = true;
129
+ this.showSaveBtn = false;
130
+ }, 4000);
131
+ }
132
+ },
133
+ methods: {
134
+ shortFilenameIfNeeded(filename) {
135
+ if (
136
+ filename &&
137
+ (filename.length >= 70 ||
138
+ (filename.length >= 25 && !this.optimalResolution))
139
+ ) {
140
+ return (
141
+ filename.substr(0, 20) +
142
+ "..." +
143
+ filename.substr(filename.length - 10, filename.length)
144
+ );
145
+ }
146
+ return filename;
147
+ },
148
+ handleFileName() {
149
+ // Save the file name and the extension in different variables
150
+ this.fileName = this.dataFileName.split(".").slice(0, -1).join(".");
151
+
152
+ this.fileExtension = this.dataFileName.split(".").at(-1);
153
+ },
154
+ handleEdit() {
155
+ // Split file name and extension to only edit name
156
+ this.handleFileName();
157
+
158
+ this.isEditable = true;
159
+ this.showEditBtn = false;
160
+ this.showSaveBtn = true;
161
+ this.oldFileName = this.fileName;
162
+ },
163
+ handleCaretPlacing(contentEditable) {
164
+ let range, selection;
165
+ if (document.createRange) {
166
+ range = document.createRange(); //Create a range (a range is a like the selection but invisible)
167
+ range.selectNodeContents(contentEditable); //Select the entire contents of the element with the range
168
+ range.collapse(false); //collapse the range to the end point. false means collapse to end rather than the start
169
+ selection = window.getSelection(); //get the selection object (allows you to change selection)
170
+ selection.removeAllRanges(); //remove any selections already made
171
+ selection.addRange(range); //make the range you have just created the visible selection
172
+ } else if (document.selection) {
173
+ range = document.body.createTextRange(); //Create a range (a range is a like the selection but invisible)
174
+ range.moveToElementText(contentEditable); //Select the entire contents of the element with the range
175
+ range.collapse(false); //collapse the range to the end point. false means collapse to end rather than the start
176
+ range.select(); //Select the range (make it the visible selection
177
+ }
178
+ },
179
+ handlePaste(event) {
180
+ // TODO: modify to only paste plain text
181
+ event.preventDefault();
182
+ },
183
+ handleInput(event) {
184
+ const input = event.target.textContent;
185
+
186
+ // Set the new file name to the new input value
187
+ if (input === "") {
188
+ // If the user deletes the name:
189
+ this.fileName = "untitled";
190
+ } else {
191
+ this.fileName = input.trim();
192
+ }
193
+ },
194
+ handleSave(event) {
195
+ this.isEditable = false;
196
+
197
+ event.target.textContent = this.fileName;
198
+
199
+ const updatedFileName = {
200
+ data_file_name: `${this.fileName}.${this.fileExtension}`,
201
+ };
202
+
203
+ this.showSaveBtn = false;
204
+ this.saving = true;
205
+
206
+ this.$store
207
+ .dispatch("document/updateDocument", updatedFileName)
208
+ .then((response) => {
209
+ // Check if the response is successful or not
210
+ if (response) {
211
+ // if successful, set the old name to be the new name
212
+ this.changed = true;
213
+ this.oldFileName = this.fileName;
214
+ this.saved = true;
215
+ }
216
+ })
217
+ .catch((error) => {
218
+ this.changed = true;
219
+ event.target.textContent = this.oldFileName;
220
+ this.fileName = this.oldFileName;
221
+ })
222
+ .finally(() => {
223
+ this.saving = false;
224
+ });
225
+
226
+ // Remove focus from contenteditable
227
+ const contentNotEditable = document.querySelector(".document-name");
228
+ if (contentNotEditable) {
229
+ contentNotEditable.blur();
230
+ }
231
+ },
232
+ },
233
+ };
234
+ </script>
235
+
236
+ <style scoped lang="scss" src="../../assets/scss/document_name.scss"></style>