@dssp/supervision 1.0.0-alpha.77 → 1.0.0-alpha.78

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 (30) hide show
  1. package/dist-client/pages/building-inspection/building-inspection-management.d.ts +1 -0
  2. package/dist-client/pages/building-inspection/building-inspection-management.js +6 -2
  3. package/dist-client/pages/building-inspection/building-inspection-management.js.map +1 -1
  4. package/dist-client/pages/building-inspection/component/field-document/field-document-list-panel.d.ts +3 -0
  5. package/dist-client/pages/building-inspection/component/field-document/field-document-list-panel.js +104 -31
  6. package/dist-client/pages/building-inspection/component/field-document/field-document-list-panel.js.map +1 -1
  7. package/dist-client/pages/building-inspection/component/field-document/field-document-popup.d.ts +5 -4
  8. package/dist-client/pages/building-inspection/component/field-document/field-document-popup.js +89 -65
  9. package/dist-client/pages/building-inspection/component/field-document/field-document-popup.js.map +1 -1
  10. package/dist-client/route.d.ts +1 -1
  11. package/dist-client/tsconfig.tsbuildinfo +1 -1
  12. package/dist-server/service/building-inspection/building-inspection-mutation.js +30 -0
  13. package/dist-server/service/building-inspection/building-inspection-mutation.js.map +1 -1
  14. package/dist-server/service/building-inspection/index.d.ts +1 -1
  15. package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog-mutation.js +10 -0
  16. package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog-mutation.js.map +1 -1
  17. package/dist-server/service/field-document/field-document-query.d.ts +1 -0
  18. package/dist-server/service/field-document/field-document-query.js +14 -1
  19. package/dist-server/service/field-document/field-document-query.js.map +1 -1
  20. package/dist-server/service/field-document/field-document-type.d.ts +2 -1
  21. package/dist-server/service/field-document/field-document-type.js +2 -1
  22. package/dist-server/service/field-document/field-document-type.js.map +1 -1
  23. package/dist-server/service/field-document/field-document.d.ts +1 -0
  24. package/dist-server/service/field-document/field-document.js +4 -0
  25. package/dist-server/service/field-document/field-document.js.map +1 -1
  26. package/dist-server/service/index.d.ts +2 -1
  27. package/dist-server/service/index.js +4 -0
  28. package/dist-server/service/index.js.map +1 -1
  29. package/dist-server/tsconfig.tsbuildinfo +1 -1
  30. package/package.json +2 -2
@@ -8,10 +8,8 @@ import { css, html, LitElement } from 'lit';
8
8
  import { customElement, property, state } from 'lit/decorators.js';
9
9
  import { client } from '@operato/graphql';
10
10
  import { notify } from '@operato/layout';
11
- import { openPopup } from '@operato/layout';
12
11
  import gql from 'graphql-tag';
13
12
  import { FIELD_DOCUMENT_CLASSIFICATIONS, findClassificationPath } from './field-document-constants';
14
- import './field-document-detail-popup';
15
13
  let FieldDocumentPopup = class FieldDocumentPopup extends LitElement {
16
14
  constructor() {
17
15
  super(...arguments);
@@ -23,6 +21,9 @@ let FieldDocumentPopup = class FieldDocumentPopup extends LitElement {
23
21
  this.selectedDocIds = new Set();
24
22
  this.codeCounts = new Map();
25
23
  this.dragOverItem = '';
24
+ this._tooltipText = '';
25
+ this._tooltipX = 0;
26
+ this._tooltipY = 0;
26
27
  }
27
28
  render() {
28
29
  var _a, _b, _c, _d;
@@ -30,14 +31,17 @@ let FieldDocumentPopup = class FieldDocumentPopup extends LitElement {
30
31
  const middles = ((_a = this.selectedMajor) === null || _a === void 0 ? void 0 : _a.children) || [];
31
32
  const minors = ((_b = this.selectedMiddle) === null || _b === void 0 ? void 0 : _b.children) || [];
32
33
  return html `
34
+ ${this._tooltipText
35
+ ? html `<div tooltip style="left:${this._tooltipX + 12}px;top:${this._tooltipY + 12}px">${this._tooltipText}</div>`
36
+ : ''}
37
+
33
38
  <div header>
34
39
  <h2>
35
40
  <md-icon>folder_open</md-icon>
36
41
  현장 문서 확인
37
42
  </h2>
38
43
  <span breadcrumb>
39
- ${this.selectedMajor ? this.selectedMajor.name : ''}
40
- ${this.selectedMiddle ? ` > ${this.selectedMiddle.name}` : ''}
44
+ ${this.selectedMajor ? this.selectedMajor.name : ''} ${this.selectedMiddle ? ` > ${this.selectedMiddle.name}` : ''}
41
45
  ${this.selectedMinor ? ` > ${this.selectedMinor.name}` : ''}
42
46
  </span>
43
47
  </div>
@@ -53,16 +57,15 @@ let FieldDocumentPopup = class FieldDocumentPopup extends LitElement {
53
57
  item
54
58
  ?selected=${((_a = this.selectedMajor) === null || _a === void 0 ? void 0 : _a.code) === item.code}
55
59
  @click=${() => this._selectMajor(item)}
60
+ @mousemove=${(e) => this._showTooltip(e, item.name)}
61
+ @mouseleave=${() => (this._tooltipText = '')}
56
62
  @dragover=${(e) => this._onFolderDragOver(e, item.code)}
57
63
  @dragleave=${() => (this.dragOverItem = '')}
58
64
  @drop=${(e) => this._onFolderDrop(e, item.code)}
59
65
  ?drag-over=${this.dragOverItem === item.code}
60
66
  >
61
- <span code>${item.code}</span>
62
67
  <span name>${item.name}</span>
63
- ${this._getMajorCount(item.code) > 0
64
- ? html `<span count>${this._getMajorCount(item.code)}</span>`
65
- : ''}
68
+ ${this._getMajorCount(item.code) > 0 ? html `<span count>${this._getMajorCount(item.code)}</span>` : ''}
66
69
  </div>
67
70
  `;
68
71
  })}
@@ -77,16 +80,15 @@ let FieldDocumentPopup = class FieldDocumentPopup extends LitElement {
77
80
  item
78
81
  ?selected=${((_a = this.selectedMiddle) === null || _a === void 0 ? void 0 : _a.code) === item.code}
79
82
  @click=${() => this._selectMiddle(item)}
83
+ @mousemove=${(e) => this._showTooltip(e, item.name)}
84
+ @mouseleave=${() => (this._tooltipText = '')}
80
85
  @dragover=${(e) => this._onFolderDragOver(e, item.code)}
81
86
  @dragleave=${() => (this.dragOverItem = '')}
82
87
  @drop=${(e) => this._onFolderDrop(e, item.code)}
83
88
  ?drag-over=${this.dragOverItem === item.code}
84
89
  >
85
- <span code>${item.code}</span>
86
90
  <span name>${item.name}</span>
87
- ${this._getMiddleCount(item.code) > 0
88
- ? html `<span count>${this._getMiddleCount(item.code)}</span>`
89
- : ''}
91
+ ${this._getMiddleCount(item.code) > 0 ? html `<span count>${this._getMiddleCount(item.code)}</span>` : ''}
90
92
  </div>
91
93
  `;
92
94
  })}
@@ -101,6 +103,8 @@ let FieldDocumentPopup = class FieldDocumentPopup extends LitElement {
101
103
  item
102
104
  ?selected=${((_a = this.selectedMinor) === null || _a === void 0 ? void 0 : _a.code) === item.code}
103
105
  @click=${() => this._selectMinor(item)}
106
+ @mousemove=${(e) => this._showTooltip(e, item.name)}
107
+ @mouseleave=${() => (this._tooltipText = '')}
104
108
  @dragover=${(e) => this._onFolderDragOver(e, item.code)}
105
109
  @dragleave=${() => (this.dragOverItem = '')}
106
110
  @drop=${(e) => this._onFolderDrop(e, item.code)}
@@ -108,9 +112,7 @@ let FieldDocumentPopup = class FieldDocumentPopup extends LitElement {
108
112
  >
109
113
  <span code>${item.code}</span>
110
114
  <span name>${item.name}</span>
111
- ${(this.codeCounts.get(item.code) || 0) > 0
112
- ? html `<span count>${this.codeCounts.get(item.code)}</span>`
113
- : ''}
115
+ ${(this.codeCounts.get(item.code) || 0) > 0 ? html `<span count>${this.codeCounts.get(item.code)}</span>` : ''}
114
116
  </div>
115
117
  `;
116
118
  })}
@@ -124,34 +126,25 @@ let FieldDocumentPopup = class FieldDocumentPopup extends LitElement {
124
126
  .documents=${this.documents}
125
127
  @document-selected=${(e) => (this.selectedDocIds = e.detail)}
126
128
  @documents-changed=${(e) => this._onDocumentsChanged(e)}
127
- @open-detail=${(e) => this._openDetail(e.detail)}
128
129
  ></field-document-list-panel>
129
130
  </div>
130
131
 
131
132
  <div footer>
132
- <md-filled-button share @click=${this._shareDocuments}>
133
- <md-icon slot="icon">share</md-icon>공유
134
- </md-filled-button>
135
- <md-filled-button move @click=${this._openMoveDialog}>
136
- <md-icon slot="icon">drive_file_move</md-icon>이동
137
- </md-filled-button>
133
+ <md-filled-button share @click=${this._shareDocuments}> <md-icon slot="icon">share</md-icon>공유 </md-filled-button>
138
134
  <md-filled-button favorite @click=${this._toggleFavorites}>
139
135
  <md-icon slot="icon">star</md-icon>즐겨찾기
140
136
  </md-filled-button>
141
- <md-filled-button upload @click=${this._triggerUpload}>
142
- <md-icon slot="icon">upload</md-icon>업로드
143
- </md-filled-button>
144
- <md-filled-button delete @click=${this._deleteDocuments}>
145
- <md-icon slot="icon">delete</md-icon>삭제
146
- </md-filled-button>
137
+ <md-filled-button upload @click=${this._triggerUpload}> <md-icon slot="icon">upload</md-icon>업로드 </md-filled-button>
138
+ <md-filled-button delete @click=${this._deleteDocuments}> <md-icon slot="icon">delete</md-icon>삭제 </md-filled-button>
147
139
 
148
- <ox-input-file
149
- id="file-input"
140
+ <input
141
+ type="file"
142
+ id="native-file-input"
143
+ multiple
150
144
  accept="*/*"
151
- multiple="true"
152
- hide-filelist
153
- @change=${this._onFileSelected}
154
- ></ox-input-file>
145
+ style="display:none"
146
+ @change=${this._onNativeFileSelected}
147
+ />
155
148
  </div>
156
149
  `;
157
150
  }
@@ -207,6 +200,7 @@ let FieldDocumentPopup = class FieldDocumentPopup extends LitElement {
207
200
  aiSummaryStatus
208
201
  sourceType
209
202
  fullpath
203
+ fileSize
210
204
  createdAt
211
205
  creator {
212
206
  id
@@ -279,13 +273,6 @@ let FieldDocumentPopup = class FieldDocumentPopup extends LitElement {
279
273
  notify({ message: '링크가 복사되었습니다.' });
280
274
  }
281
275
  }
282
- _openMoveDialog() {
283
- if (!this.selectedDocIds.size) {
284
- notify({ message: '이동할 문서를 선택해주세요.', level: 'info' });
285
- return;
286
- }
287
- notify({ message: '이동할 폴더를 왼쪽 분류 패널에서 선택하거나, 문서를 드래그하여 폴더에 놓으세요.', level: 'info' });
288
- }
289
276
  async _toggleFavorites() {
290
277
  if (!this.selectedDocIds.size) {
291
278
  notify({ message: '즐겨찾기할 문서를 선택해주세요.', level: 'info' });
@@ -313,13 +300,17 @@ let FieldDocumentPopup = class FieldDocumentPopup extends LitElement {
313
300
  notify({ message: '파일을 업로드할 소분류 폴더를 먼저 선택해주세요.', level: 'info' });
314
301
  return;
315
302
  }
316
- const fileInput = this.renderRoot.querySelector('#file-input');
317
- fileInput === null || fileInput === void 0 ? void 0 : fileInput.click();
303
+ const fileInput = this.renderRoot.querySelector('#native-file-input');
304
+ if (fileInput) {
305
+ fileInput.value = '';
306
+ fileInput.click();
307
+ }
318
308
  }
319
- async _onFileSelected(e) {
309
+ async _onNativeFileSelected(e) {
320
310
  var _a;
321
- const files = e.detail;
322
- if (!(files === null || files === void 0 ? void 0 : files.length) || !((_a = this.selectedMinor) === null || _a === void 0 ? void 0 : _a.code))
311
+ const input = e.target;
312
+ const files = Array.from(input.files || []);
313
+ if (!files.length || !((_a = this.selectedMinor) === null || _a === void 0 ? void 0 : _a.code))
323
314
  return;
324
315
  await this._uploadFiles(files, this.selectedMinor.code);
325
316
  }
@@ -437,8 +428,11 @@ let FieldDocumentPopup = class FieldDocumentPopup extends LitElement {
437
428
  await this._loadDocuments();
438
429
  }
439
430
  }
440
- _openDetail(doc) {
441
- openPopup(html `<field-document-detail-popup .document=${doc}></field-document-detail-popup>`, { backdrop: true, size: 'large', title: doc.name });
431
+ _showTooltip(e, text) {
432
+ this._tooltipText = text;
433
+ const rect = this.getBoundingClientRect();
434
+ this._tooltipX = e.clientX - rect.left;
435
+ this._tooltipY = e.clientY - rect.top;
442
436
  }
443
437
  };
444
438
  FieldDocumentPopup.styles = [
@@ -451,6 +445,7 @@ FieldDocumentPopup.styles = [
451
445
  width: 100%;
452
446
  height: 80vh;
453
447
  overflow: hidden;
448
+ position: relative;
454
449
  }
455
450
 
456
451
  div[header] {
@@ -482,22 +477,35 @@ FieldDocumentPopup.styles = [
482
477
 
483
478
  div[content] {
484
479
  display: grid;
485
- grid-template-columns: 3fr 7fr;
480
+ grid-template-columns: 3.5fr 6.5fr;
486
481
  overflow: hidden;
487
482
  }
488
483
 
489
484
  div[classification-panel] {
490
485
  display: grid;
491
- grid-template-columns: 1fr 1fr 1fr;
486
+ grid-template-columns: 0.8fr 1fr 2fr;
492
487
  border-right: 1px solid #e0e0e0;
493
488
  overflow: hidden;
494
489
  }
495
490
 
491
+ div[tooltip] {
492
+ position: absolute;
493
+ background: rgba(0, 0, 0, 0.85);
494
+ color: #fff;
495
+ font-size: 12px;
496
+ padding: 4px 10px;
497
+ border-radius: 4px;
498
+ white-space: nowrap;
499
+ z-index: 9999;
500
+ pointer-events: none;
501
+ }
502
+
496
503
  div[column] {
497
504
  display: flex;
498
505
  flex-direction: column;
499
506
  border-right: 1px solid #eee;
500
507
  overflow-y: auto;
508
+ overflow-x: hidden;
501
509
 
502
510
  &:last-child {
503
511
  border-right: none;
@@ -524,6 +532,7 @@ FieldDocumentPopup.styles = [
524
532
  color: #333;
525
533
  border-bottom: 1px solid #f0f0f0;
526
534
  transition: background-color 0.15s;
535
+ position: relative;
527
536
 
528
537
  &:hover {
529
538
  background-color: #e3f2fd;
@@ -544,14 +553,18 @@ FieldDocumentPopup.styles = [
544
553
  }
545
554
 
546
555
  span[count] {
547
- font-size: 11px;
556
+ position: absolute;
557
+ right: 3px;
558
+ top: 50%;
559
+ transform: translateY(-50%);
560
+ font-size: 8px;
548
561
  color: #fff;
549
562
  background: #0595e5;
550
- border-radius: 10px;
551
- padding: 1px 6px;
552
- min-width: 16px;
563
+ border-radius: 7px;
564
+ padding: 0 3px;
565
+ min-width: 10px;
553
566
  text-align: center;
554
- margin-left: 4px;
567
+ line-height: 14px;
555
568
  }
556
569
  }
557
570
 
@@ -584,26 +597,25 @@ FieldDocumentPopup.styles = [
584
597
  background: #f8f8f8;
585
598
 
586
599
  md-filled-button {
600
+ cursor: pointer;
587
601
  --md-filled-button-container-height: 36px;
588
602
  --md-filled-button-trailing-space: 16px;
589
603
  --md-filled-button-leading-space: 16px;
604
+ --md-filled-button-container-color: #0595e5;
605
+ --md-filled-button-label-text-color: var(--md-sys-color-on-primary);
606
+ --md-filled-button-hover-label-text-color: var(--md-sys-color-on-primary);
607
+ --md-filled-button-icon-color: var(--md-sys-color-on-primary);
608
+ --md-filled-button-hover-icon-color: var(--md-sys-color-on-primary);
590
609
  }
591
610
 
592
611
  md-filled-button[share] {
593
- --md-filled-button-container-color: #607d8b;
594
- }
595
- md-filled-button[move] {
596
- --md-filled-button-container-color: #ff9800;
597
- }
598
- md-filled-button[favorite] {
599
- --md-filled-button-container-color: #ffc107;
600
- --md-filled-button-label-text-color: #333;
612
+ --md-filled-button-container-color: #3f71a0;
601
613
  }
602
614
  md-filled-button[upload] {
603
- --md-filled-button-container-color: #4caf50;
615
+ --md-filled-button-container-color: #008000;
604
616
  }
605
617
  md-filled-button[delete] {
606
- --md-filled-button-container-color: #f44336;
618
+ --md-filled-button-container-color: #e15757;
607
619
  }
608
620
  }
609
621
 
@@ -644,6 +656,18 @@ __decorate([
644
656
  state(),
645
657
  __metadata("design:type", String)
646
658
  ], FieldDocumentPopup.prototype, "dragOverItem", void 0);
659
+ __decorate([
660
+ state(),
661
+ __metadata("design:type", String)
662
+ ], FieldDocumentPopup.prototype, "_tooltipText", void 0);
663
+ __decorate([
664
+ state(),
665
+ __metadata("design:type", Number)
666
+ ], FieldDocumentPopup.prototype, "_tooltipX", void 0);
667
+ __decorate([
668
+ state(),
669
+ __metadata("design:type", Number)
670
+ ], FieldDocumentPopup.prototype, "_tooltipY", void 0);
647
671
  FieldDocumentPopup = __decorate([
648
672
  customElement('field-document-popup')
649
673
  ], FieldDocumentPopup);
@@ -1 +1 @@
1
- {"version":3,"file":"field-document-popup.js","sourceRoot":"","sources":["../../../../../client/pages/building-inspection/component/field-document/field-document-popup.ts"],"names":[],"mappings":"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","sourcesContent":["import '@material/web/icon/icon.js'\nimport '@material/web/button/filled-button.js'\nimport '@material/web/button/outlined-button.js'\nimport './field-document-list-panel'\n\nimport { ScrollbarStyles } from '@operato/styles'\nimport { css, html, LitElement } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { client } from '@operato/graphql'\nimport { notify } from '@operato/layout'\nimport { openPopup } from '@operato/layout'\nimport gql from 'graphql-tag'\n\nimport {\n Classification,\n FIELD_DOCUMENT_CLASSIFICATIONS,\n findClassificationPath\n} from './field-document-constants'\nimport './field-document-detail-popup'\n\n@customElement('field-document-popup')\nexport class FieldDocumentPopup extends LitElement {\n static styles = [\n ScrollbarStyles,\n css`\n :host {\n display: grid;\n grid-template-rows: auto 1fr auto;\n background-color: #fff;\n width: 100%;\n height: 80vh;\n overflow: hidden;\n }\n\n div[header] {\n display: flex;\n align-items: center;\n padding: 12px 20px;\n border-bottom: 1px solid #e0e0e0;\n background: linear-gradient(135deg, #f8f9fa, #e8eef5);\n\n h2 {\n display: flex;\n align-items: center;\n gap: 8px;\n margin: 0;\n font-size: 16px;\n color: #3f71a0;\n\n md-icon {\n --md-icon-size: 22px;\n }\n }\n\n span[breadcrumb] {\n margin-left: auto;\n font-size: 12px;\n color: #888;\n }\n }\n\n div[content] {\n display: grid;\n grid-template-columns: 3fr 7fr;\n overflow: hidden;\n }\n\n div[classification-panel] {\n display: grid;\n grid-template-columns: 1fr 1fr 1fr;\n border-right: 1px solid #e0e0e0;\n overflow: hidden;\n }\n\n div[column] {\n display: flex;\n flex-direction: column;\n border-right: 1px solid #eee;\n overflow-y: auto;\n\n &:last-child {\n border-right: none;\n }\n\n div[column-header] {\n position: sticky;\n top: 0;\n background: #f5f5f5;\n padding: 8px 12px;\n font-size: 12px;\n font-weight: bold;\n color: #666;\n border-bottom: 1px solid #e0e0e0;\n z-index: 1;\n }\n\n div[item] {\n display: flex;\n align-items: center;\n padding: 8px 12px;\n cursor: pointer;\n font-size: 13px;\n color: #333;\n border-bottom: 1px solid #f0f0f0;\n transition: background-color 0.15s;\n\n &:hover {\n background-color: #e3f2fd;\n }\n\n span[code] {\n font-size: 11px;\n color: #999;\n margin-right: 6px;\n min-width: 32px;\n }\n\n span[name] {\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n span[count] {\n font-size: 11px;\n color: #fff;\n background: #0595e5;\n border-radius: 10px;\n padding: 1px 6px;\n min-width: 16px;\n text-align: center;\n margin-left: 4px;\n }\n }\n\n div[item][selected] {\n background-color: #0595e5;\n color: #fff;\n\n span[code] {\n color: rgba(255, 255, 255, 0.7);\n }\n\n span[count] {\n background: rgba(255, 255, 255, 0.3);\n }\n }\n\n div[item][drag-over] {\n background-color: #bbdefb;\n outline: 2px dashed #1976d2;\n }\n }\n\n div[footer] {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n padding: 12px 20px;\n border-top: 1px solid #e0e0e0;\n background: #f8f8f8;\n\n md-filled-button {\n --md-filled-button-container-height: 36px;\n --md-filled-button-trailing-space: 16px;\n --md-filled-button-leading-space: 16px;\n }\n\n md-filled-button[share] {\n --md-filled-button-container-color: #607d8b;\n }\n md-filled-button[move] {\n --md-filled-button-container-color: #ff9800;\n }\n md-filled-button[favorite] {\n --md-filled-button-container-color: #ffc107;\n --md-filled-button-label-text-color: #333;\n }\n md-filled-button[upload] {\n --md-filled-button-container-color: #4caf50;\n }\n md-filled-button[delete] {\n --md-filled-button-container-color: #f44336;\n }\n }\n\n ox-input-file {\n display: none;\n }\n `\n ]\n\n @property({ type: String }) projectId: string = ''\n\n @state() private selectedMajor: Classification | null = null\n @state() private selectedMiddle: Classification | null = null\n @state() private selectedMinor: Classification | null = null\n @state() private documents: any[] = []\n @state() private selectedDocIds: Set<string> = new Set()\n @state() private codeCounts: Map<string, number> = new Map()\n @state() private dragOverItem: string = ''\n\n render() {\n const majors = FIELD_DOCUMENT_CLASSIFICATIONS\n const middles = this.selectedMajor?.children || []\n const minors = this.selectedMiddle?.children || []\n\n return html`\n <div header>\n <h2>\n <md-icon>folder_open</md-icon>\n 현장 문서 확인\n </h2>\n <span breadcrumb>\n ${this.selectedMajor ? this.selectedMajor.name : ''}\n ${this.selectedMiddle ? ` > ${this.selectedMiddle.name}` : ''}\n ${this.selectedMinor ? ` > ${this.selectedMinor.name}` : ''}\n </span>\n </div>\n\n <div content>\n <div classification-panel>\n <div column>\n <div column-header>대분류</div>\n ${majors.map(\n item => html`\n <div\n item\n ?selected=${this.selectedMajor?.code === item.code}\n @click=${() => this._selectMajor(item)}\n @dragover=${(e: DragEvent) => this._onFolderDragOver(e, item.code)}\n @dragleave=${() => (this.dragOverItem = '')}\n @drop=${(e: DragEvent) => this._onFolderDrop(e, item.code)}\n ?drag-over=${this.dragOverItem === item.code}\n >\n <span code>${item.code}</span>\n <span name>${item.name}</span>\n ${this._getMajorCount(item.code) > 0\n ? html`<span count>${this._getMajorCount(item.code)}</span>`\n : ''}\n </div>\n `\n )}\n </div>\n\n <div column>\n <div column-header>중분류</div>\n ${middles.map(\n item => html`\n <div\n item\n ?selected=${this.selectedMiddle?.code === item.code}\n @click=${() => this._selectMiddle(item)}\n @dragover=${(e: DragEvent) => this._onFolderDragOver(e, item.code)}\n @dragleave=${() => (this.dragOverItem = '')}\n @drop=${(e: DragEvent) => this._onFolderDrop(e, item.code)}\n ?drag-over=${this.dragOverItem === item.code}\n >\n <span code>${item.code}</span>\n <span name>${item.name}</span>\n ${this._getMiddleCount(item.code) > 0\n ? html`<span count>${this._getMiddleCount(item.code)}</span>`\n : ''}\n </div>\n `\n )}\n </div>\n\n <div column>\n <div column-header>소분류</div>\n ${minors.map(\n item => html`\n <div\n item\n ?selected=${this.selectedMinor?.code === item.code}\n @click=${() => this._selectMinor(item)}\n @dragover=${(e: DragEvent) => this._onFolderDragOver(e, item.code)}\n @dragleave=${() => (this.dragOverItem = '')}\n @drop=${(e: DragEvent) => this._onFolderDrop(e, item.code)}\n ?drag-over=${this.dragOverItem === item.code}\n >\n <span code>${item.code}</span>\n <span name>${item.name}</span>\n ${(this.codeCounts.get(item.code) || 0) > 0\n ? html`<span count>${this.codeCounts.get(item.code)}</span>`\n : ''}\n </div>\n `\n )}\n </div>\n </div>\n\n <field-document-list-panel\n .projectId=${this.projectId}\n .code=${this.selectedMinor?.code || ''}\n .folderName=${this.selectedMinor?.name || ''}\n .documents=${this.documents}\n @document-selected=${(e: CustomEvent) => (this.selectedDocIds = e.detail)}\n @documents-changed=${(e: CustomEvent) => this._onDocumentsChanged(e)}\n @open-detail=${(e: CustomEvent) => this._openDetail(e.detail)}\n ></field-document-list-panel>\n </div>\n\n <div footer>\n <md-filled-button share @click=${this._shareDocuments}>\n <md-icon slot=\"icon\">share</md-icon>공유\n </md-filled-button>\n <md-filled-button move @click=${this._openMoveDialog}>\n <md-icon slot=\"icon\">drive_file_move</md-icon>이동\n </md-filled-button>\n <md-filled-button favorite @click=${this._toggleFavorites}>\n <md-icon slot=\"icon\">star</md-icon>즐겨찾기\n </md-filled-button>\n <md-filled-button upload @click=${this._triggerUpload}>\n <md-icon slot=\"icon\">upload</md-icon>업로드\n </md-filled-button>\n <md-filled-button delete @click=${this._deleteDocuments}>\n <md-icon slot=\"icon\">delete</md-icon>삭제\n </md-filled-button>\n\n <ox-input-file\n id=\"file-input\"\n accept=\"*/*\"\n multiple=\"true\"\n hide-filelist\n @change=${this._onFileSelected}\n ></ox-input-file>\n </div>\n `\n }\n\n async firstUpdated() {\n await this._loadCounts()\n // 첫 번째 대분류 자동 선택\n if (FIELD_DOCUMENT_CLASSIFICATIONS.length > 0) {\n this._selectMajor(FIELD_DOCUMENT_CLASSIFICATIONS[0])\n }\n }\n\n private _selectMajor(item: Classification) {\n this.selectedMajor = item\n this.selectedMiddle = null\n this.selectedMinor = null\n this.documents = []\n this.selectedDocIds = new Set()\n\n if (item.children?.length) {\n this._selectMiddle(item.children[0])\n }\n }\n\n private _selectMiddle(item: Classification) {\n this.selectedMiddle = item\n this.selectedMinor = null\n this.documents = []\n this.selectedDocIds = new Set()\n\n if (item.children?.length) {\n this._selectMinor(item.children[0])\n }\n }\n\n private async _selectMinor(item: Classification) {\n this.selectedMinor = item\n this.selectedDocIds = new Set()\n await this._loadDocuments()\n }\n\n private async _loadDocuments() {\n if (!this.selectedMinor?.code || !this.projectId) {\n this.documents = []\n return\n }\n\n const response = await client.query({\n query: gql`\n query FieldDocumentsByCode($projectId: String!, $code: String!) {\n fieldDocumentsByCode(projectId: $projectId, code: $code) {\n items {\n id\n name\n code\n isFavorite\n aiSummary\n aiSummaryStatus\n sourceType\n fullpath\n createdAt\n creator {\n id\n name\n }\n }\n total\n }\n }\n `,\n variables: { projectId: this.projectId, code: this.selectedMinor.code }\n })\n\n this.documents = response.data?.fieldDocumentsByCode?.items || []\n }\n\n private async _loadCounts() {\n if (!this.projectId) return\n\n const response = await client.query({\n query: gql`\n query FieldDocumentCountsByProject($projectId: String!) {\n fieldDocumentCountsByProject(projectId: $projectId) {\n code\n count\n }\n }\n `,\n variables: { projectId: this.projectId }\n })\n\n const counts = response.data?.fieldDocumentCountsByProject || []\n this.codeCounts = new Map(counts.map((c: any) => [c.code, c.count]))\n }\n\n private _getMajorCount(majorCode: string): number {\n let total = 0\n for (const [code, count] of this.codeCounts) {\n if (code.startsWith(majorCode)) total += count\n }\n return total\n }\n\n private _getMiddleCount(middleCode: string): number {\n let total = 0\n for (const [code, count] of this.codeCounts) {\n if (code.startsWith(middleCode)) total += count\n }\n return total\n }\n\n private async _shareDocuments() {\n const selected = this.documents.filter(d => this.selectedDocIds.has(d.id))\n if (!selected.length) {\n notify({ message: '공유할 문서를 선택해주세요.', level: 'info' })\n return\n }\n\n if (navigator.share) {\n try {\n await navigator.share({\n title: '현장 문서',\n text: selected.map(d => d.name).join(', '),\n url: window.location.href\n })\n } catch {\n // 사용자 취소\n }\n } else {\n const links = selected.map(d => d.fullpath || d.name).join('\\n')\n await navigator.clipboard.writeText(links)\n notify({ message: '링크가 복사되었습니다.' })\n }\n }\n\n private _openMoveDialog() {\n if (!this.selectedDocIds.size) {\n notify({ message: '이동할 문서를 선택해주세요.', level: 'info' })\n return\n }\n notify({ message: '이동할 폴더를 왼쪽 분류 패널에서 선택하거나, 문서를 드래그하여 폴더에 놓으세요.', level: 'info' })\n }\n\n private async _toggleFavorites() {\n if (!this.selectedDocIds.size) {\n notify({ message: '즐겨찾기할 문서를 선택해주세요.', level: 'info' })\n return\n }\n\n for (const id of this.selectedDocIds) {\n await client.mutate({\n mutation: gql`\n mutation ToggleFieldDocumentFavorite($id: String!) {\n toggleFieldDocumentFavorite(id: $id) {\n id\n isFavorite\n }\n }\n `,\n variables: { id }\n })\n }\n\n await this._loadDocuments()\n notify({ message: '즐겨찾기가 변경되었습니다.' })\n }\n\n private _triggerUpload() {\n if (!this.selectedMinor?.code) {\n notify({ message: '파일을 업로드할 소분류 폴더를 먼저 선택해주세요.', level: 'info' })\n return\n }\n\n const fileInput = this.renderRoot.querySelector('#file-input') as HTMLElement\n fileInput?.click()\n }\n\n private async _onFileSelected(e: CustomEvent) {\n const files = e.detail as File[]\n if (!files?.length || !this.selectedMinor?.code) return\n\n await this._uploadFiles(files, this.selectedMinor.code)\n }\n\n private async _uploadFiles(files: File[], code: string) {\n for (const file of files) {\n await client.mutate({\n mutation: gql`\n mutation CreateFieldDocument($patch: NewFieldDocument!) {\n createFieldDocument(patch: $patch) {\n id\n }\n }\n `,\n variables: {\n patch: {\n projectId: this.projectId,\n code,\n name: file.name,\n file\n }\n },\n context: { hasUpload: true }\n })\n }\n\n await this._loadDocuments()\n await this._loadCounts()\n notify({ message: `${files.length}개 파일이 업로드되었습니다.` })\n }\n\n private async _deleteDocuments() {\n if (!this.selectedDocIds.size) {\n notify({ message: '삭제할 문서를 선택해주세요.', level: 'info' })\n return\n }\n\n if (!confirm('선택한 문서를 삭제하시겠습니까?')) return\n\n const ids = Array.from(this.selectedDocIds)\n\n const response = await client.mutate({\n mutation: gql`\n mutation DeleteFieldDocuments($ids: [String!]!) {\n deleteFieldDocuments(ids: $ids)\n }\n `,\n variables: { ids }\n })\n\n if (!response.errors) {\n this.selectedDocIds = new Set()\n await this._loadDocuments()\n await this._loadCounts()\n notify({ message: '삭제되었습니다.' })\n }\n }\n\n private _onFolderDragOver(e: DragEvent, code: string) {\n const types = e.dataTransfer?.types || []\n if (types.includes('application/x-field-document-ids')) {\n e.preventDefault()\n this.dragOverItem = code\n\n // 대분류/중분류 위에 hover 시 자동 확장\n if (code.length === 2) {\n const major = FIELD_DOCUMENT_CLASSIFICATIONS.find(m => m.code === code)\n if (major && this.selectedMajor?.code !== code) {\n clearTimeout(this._expandTimeout)\n this._expandTimeout = setTimeout(() => this._selectMajor(major), 500)\n }\n } else if (code.length === 4) {\n const middles = this.selectedMajor?.children || []\n const middle = middles.find(m => m.code === code)\n if (middle && this.selectedMiddle?.code !== code) {\n clearTimeout(this._expandTimeout)\n this._expandTimeout = setTimeout(() => {\n this.selectedMiddle = middle\n this.selectedMinor = null\n }, 500)\n }\n }\n }\n }\n\n private _expandTimeout: any\n\n private async _onFolderDrop(e: DragEvent, code: string) {\n e.preventDefault()\n this.dragOverItem = ''\n clearTimeout(this._expandTimeout)\n\n const idsJson = e.dataTransfer?.getData('application/x-field-document-ids')\n if (!idsJson) return\n\n const ids: string[] = JSON.parse(idsJson)\n\n // 소분류 코드에만 이동 가능\n if (code.length !== 6) {\n notify({ message: '소분류 폴더에만 이동할 수 있습니다.', level: 'info' })\n return\n }\n\n const response = await client.mutate({\n mutation: gql`\n mutation MoveFieldDocuments($ids: [String!]!, $targetCode: String!) {\n moveFieldDocuments(ids: $ids, targetCode: $targetCode)\n }\n `,\n variables: { ids, targetCode: code }\n })\n\n if (!response.errors) {\n const path = findClassificationPath(code)\n notify({ message: `${ids.length}개 문서가 \"${path.minor?.name || code}\" 폴더로 이동되었습니다.` })\n await this._loadDocuments()\n await this._loadCounts()\n }\n }\n\n private async _onDocumentsChanged(e: CustomEvent) {\n const files = e.detail?.files as File[]\n if (files?.length && this.selectedMinor?.code) {\n await this._uploadFiles(files, this.selectedMinor.code)\n } else {\n await this._loadDocuments()\n }\n }\n\n private _openDetail(doc: any) {\n openPopup(\n html`<field-document-detail-popup .document=${doc}></field-document-detail-popup>`,\n { backdrop: true, size: 'large', title: doc.name }\n )\n }\n}\n"]}
1
+ {"version":3,"file":"field-document-popup.js","sourceRoot":"","sources":["../../../../../client/pages/building-inspection/component/field-document/field-document-popup.ts"],"names":[],"mappings":"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","sourcesContent":["import '@material/web/icon/icon.js'\nimport '@material/web/button/filled-button.js'\nimport '@material/web/button/outlined-button.js'\nimport './field-document-list-panel'\n\nimport { ScrollbarStyles } from '@operato/styles'\nimport { css, html, LitElement } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { client } from '@operato/graphql'\nimport { notify } from '@operato/layout'\nimport gql from 'graphql-tag'\n\nimport { Classification, FIELD_DOCUMENT_CLASSIFICATIONS, findClassificationPath } from './field-document-constants'\n\n@customElement('field-document-popup')\nexport class FieldDocumentPopup extends LitElement {\n static styles = [\n ScrollbarStyles,\n css`\n :host {\n display: grid;\n grid-template-rows: auto 1fr auto;\n background-color: #fff;\n width: 100%;\n height: 80vh;\n overflow: hidden;\n position: relative;\n }\n\n div[header] {\n display: flex;\n align-items: center;\n padding: 12px 20px;\n border-bottom: 1px solid #e0e0e0;\n background: linear-gradient(135deg, #f8f9fa, #e8eef5);\n\n h2 {\n display: flex;\n align-items: center;\n gap: 8px;\n margin: 0;\n font-size: 16px;\n color: #3f71a0;\n\n md-icon {\n --md-icon-size: 22px;\n }\n }\n\n span[breadcrumb] {\n margin-left: auto;\n font-size: 12px;\n color: #888;\n }\n }\n\n div[content] {\n display: grid;\n grid-template-columns: 3.5fr 6.5fr;\n overflow: hidden;\n }\n\n div[classification-panel] {\n display: grid;\n grid-template-columns: 0.8fr 1fr 2fr;\n border-right: 1px solid #e0e0e0;\n overflow: hidden;\n }\n\n div[tooltip] {\n position: absolute;\n background: rgba(0, 0, 0, 0.85);\n color: #fff;\n font-size: 12px;\n padding: 4px 10px;\n border-radius: 4px;\n white-space: nowrap;\n z-index: 9999;\n pointer-events: none;\n }\n\n div[column] {\n display: flex;\n flex-direction: column;\n border-right: 1px solid #eee;\n overflow-y: auto;\n overflow-x: hidden;\n\n &:last-child {\n border-right: none;\n }\n\n div[column-header] {\n position: sticky;\n top: 0;\n background: #f5f5f5;\n padding: 8px 12px;\n font-size: 12px;\n font-weight: bold;\n color: #666;\n border-bottom: 1px solid #e0e0e0;\n z-index: 1;\n }\n\n div[item] {\n display: flex;\n align-items: center;\n padding: 8px 12px;\n cursor: pointer;\n font-size: 13px;\n color: #333;\n border-bottom: 1px solid #f0f0f0;\n transition: background-color 0.15s;\n position: relative;\n\n &:hover {\n background-color: #e3f2fd;\n }\n\n span[code] {\n font-size: 11px;\n color: #999;\n margin-right: 6px;\n min-width: 32px;\n }\n\n span[name] {\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n span[count] {\n position: absolute;\n right: 3px;\n top: 50%;\n transform: translateY(-50%);\n font-size: 8px;\n color: #fff;\n background: #0595e5;\n border-radius: 7px;\n padding: 0 3px;\n min-width: 10px;\n text-align: center;\n line-height: 14px;\n }\n }\n\n div[item][selected] {\n background-color: #0595e5;\n color: #fff;\n\n span[code] {\n color: rgba(255, 255, 255, 0.7);\n }\n\n span[count] {\n background: rgba(255, 255, 255, 0.3);\n }\n }\n\n div[item][drag-over] {\n background-color: #bbdefb;\n outline: 2px dashed #1976d2;\n }\n }\n\n div[footer] {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n padding: 12px 20px;\n border-top: 1px solid #e0e0e0;\n background: #f8f8f8;\n\n md-filled-button {\n cursor: pointer;\n --md-filled-button-container-height: 36px;\n --md-filled-button-trailing-space: 16px;\n --md-filled-button-leading-space: 16px;\n --md-filled-button-container-color: #0595e5;\n --md-filled-button-label-text-color: var(--md-sys-color-on-primary);\n --md-filled-button-hover-label-text-color: var(--md-sys-color-on-primary);\n --md-filled-button-icon-color: var(--md-sys-color-on-primary);\n --md-filled-button-hover-icon-color: var(--md-sys-color-on-primary);\n }\n\n md-filled-button[share] {\n --md-filled-button-container-color: #3f71a0;\n }\n md-filled-button[upload] {\n --md-filled-button-container-color: #008000;\n }\n md-filled-button[delete] {\n --md-filled-button-container-color: #e15757;\n }\n }\n\n ox-input-file {\n display: none;\n }\n `\n ]\n\n @property({ type: String }) projectId: string = ''\n\n @state() private selectedMajor: Classification | null = null\n @state() private selectedMiddle: Classification | null = null\n @state() private selectedMinor: Classification | null = null\n @state() private documents: any[] = []\n @state() private selectedDocIds: Set<string> = new Set()\n @state() private codeCounts: Map<string, number> = new Map()\n @state() private dragOverItem: string = ''\n @state() private _tooltipText: string = ''\n @state() private _tooltipX: number = 0\n @state() private _tooltipY: number = 0\n\n render() {\n const majors = FIELD_DOCUMENT_CLASSIFICATIONS\n const middles = this.selectedMajor?.children || []\n const minors = this.selectedMiddle?.children || []\n\n return html`\n ${this._tooltipText\n ? html`<div tooltip style=\"left:${this._tooltipX + 12}px;top:${this._tooltipY + 12}px\">${this._tooltipText}</div>`\n : ''}\n\n <div header>\n <h2>\n <md-icon>folder_open</md-icon>\n 현장 문서 확인\n </h2>\n <span breadcrumb>\n ${this.selectedMajor ? this.selectedMajor.name : ''} ${this.selectedMiddle ? ` > ${this.selectedMiddle.name}` : ''}\n ${this.selectedMinor ? ` > ${this.selectedMinor.name}` : ''}\n </span>\n </div>\n\n <div content>\n <div classification-panel>\n <div column>\n <div column-header>대분류</div>\n ${majors.map(\n item => html`\n <div\n item\n ?selected=${this.selectedMajor?.code === item.code}\n @click=${() => this._selectMajor(item)}\n @mousemove=${(e: MouseEvent) => this._showTooltip(e, item.name)}\n @mouseleave=${() => (this._tooltipText = '')}\n @dragover=${(e: DragEvent) => this._onFolderDragOver(e, item.code)}\n @dragleave=${() => (this.dragOverItem = '')}\n @drop=${(e: DragEvent) => this._onFolderDrop(e, item.code)}\n ?drag-over=${this.dragOverItem === item.code}\n >\n <span name>${item.name}</span>\n ${this._getMajorCount(item.code) > 0 ? html`<span count>${this._getMajorCount(item.code)}</span>` : ''}\n </div>\n `\n )}\n </div>\n\n <div column>\n <div column-header>중분류</div>\n ${middles.map(\n item => html`\n <div\n item\n ?selected=${this.selectedMiddle?.code === item.code}\n @click=${() => this._selectMiddle(item)}\n @mousemove=${(e: MouseEvent) => this._showTooltip(e, item.name)}\n @mouseleave=${() => (this._tooltipText = '')}\n @dragover=${(e: DragEvent) => this._onFolderDragOver(e, item.code)}\n @dragleave=${() => (this.dragOverItem = '')}\n @drop=${(e: DragEvent) => this._onFolderDrop(e, item.code)}\n ?drag-over=${this.dragOverItem === item.code}\n >\n <span name>${item.name}</span>\n ${this._getMiddleCount(item.code) > 0 ? html`<span count>${this._getMiddleCount(item.code)}</span>` : ''}\n </div>\n `\n )}\n </div>\n\n <div column>\n <div column-header>소분류</div>\n ${minors.map(\n item => html`\n <div\n item\n ?selected=${this.selectedMinor?.code === item.code}\n @click=${() => this._selectMinor(item)}\n @mousemove=${(e: MouseEvent) => this._showTooltip(e, item.name)}\n @mouseleave=${() => (this._tooltipText = '')}\n @dragover=${(e: DragEvent) => this._onFolderDragOver(e, item.code)}\n @dragleave=${() => (this.dragOverItem = '')}\n @drop=${(e: DragEvent) => this._onFolderDrop(e, item.code)}\n ?drag-over=${this.dragOverItem === item.code}\n >\n <span code>${item.code}</span>\n <span name>${item.name}</span>\n ${(this.codeCounts.get(item.code) || 0) > 0 ? html`<span count>${this.codeCounts.get(item.code)}</span>` : ''}\n </div>\n `\n )}\n </div>\n </div>\n\n <field-document-list-panel\n .projectId=${this.projectId}\n .code=${this.selectedMinor?.code || ''}\n .folderName=${this.selectedMinor?.name || ''}\n .documents=${this.documents}\n @document-selected=${(e: CustomEvent) => (this.selectedDocIds = e.detail)}\n @documents-changed=${(e: CustomEvent) => this._onDocumentsChanged(e)}\n ></field-document-list-panel>\n </div>\n\n <div footer>\n <md-filled-button share @click=${this._shareDocuments}> <md-icon slot=\"icon\">share</md-icon>공유 </md-filled-button>\n <md-filled-button favorite @click=${this._toggleFavorites}>\n <md-icon slot=\"icon\">star</md-icon>즐겨찾기\n </md-filled-button>\n <md-filled-button upload @click=${this._triggerUpload}> <md-icon slot=\"icon\">upload</md-icon>업로드 </md-filled-button>\n <md-filled-button delete @click=${this._deleteDocuments}> <md-icon slot=\"icon\">delete</md-icon>삭제 </md-filled-button>\n\n <input\n type=\"file\"\n id=\"native-file-input\"\n multiple\n accept=\"*/*\"\n style=\"display:none\"\n @change=${this._onNativeFileSelected}\n />\n </div>\n `\n }\n\n async firstUpdated() {\n await this._loadCounts()\n // 첫 번째 대분류 자동 선택\n if (FIELD_DOCUMENT_CLASSIFICATIONS.length > 0) {\n this._selectMajor(FIELD_DOCUMENT_CLASSIFICATIONS[0])\n }\n }\n\n private _selectMajor(item: Classification) {\n this.selectedMajor = item\n this.selectedMiddle = null\n this.selectedMinor = null\n this.documents = []\n this.selectedDocIds = new Set()\n\n if (item.children?.length) {\n this._selectMiddle(item.children[0])\n }\n }\n\n private _selectMiddle(item: Classification) {\n this.selectedMiddle = item\n this.selectedMinor = null\n this.documents = []\n this.selectedDocIds = new Set()\n\n if (item.children?.length) {\n this._selectMinor(item.children[0])\n }\n }\n\n private async _selectMinor(item: Classification) {\n this.selectedMinor = item\n this.selectedDocIds = new Set()\n await this._loadDocuments()\n }\n\n private async _loadDocuments() {\n if (!this.selectedMinor?.code || !this.projectId) {\n this.documents = []\n return\n }\n\n const response = await client.query({\n query: gql`\n query FieldDocumentsByCode($projectId: String!, $code: String!) {\n fieldDocumentsByCode(projectId: $projectId, code: $code) {\n items {\n id\n name\n code\n isFavorite\n aiSummary\n aiSummaryStatus\n sourceType\n fullpath\n fileSize\n createdAt\n creator {\n id\n name\n }\n }\n total\n }\n }\n `,\n variables: { projectId: this.projectId, code: this.selectedMinor.code }\n })\n\n this.documents = response.data?.fieldDocumentsByCode?.items || []\n }\n\n private async _loadCounts() {\n if (!this.projectId) return\n\n const response = await client.query({\n query: gql`\n query FieldDocumentCountsByProject($projectId: String!) {\n fieldDocumentCountsByProject(projectId: $projectId) {\n code\n count\n }\n }\n `,\n variables: { projectId: this.projectId }\n })\n\n const counts = response.data?.fieldDocumentCountsByProject || []\n this.codeCounts = new Map(counts.map((c: any) => [c.code, c.count]))\n }\n\n private _getMajorCount(majorCode: string): number {\n let total = 0\n for (const [code, count] of this.codeCounts) {\n if (code.startsWith(majorCode)) total += count\n }\n return total\n }\n\n private _getMiddleCount(middleCode: string): number {\n let total = 0\n for (const [code, count] of this.codeCounts) {\n if (code.startsWith(middleCode)) total += count\n }\n return total\n }\n\n private async _shareDocuments() {\n const selected = this.documents.filter(d => this.selectedDocIds.has(d.id))\n if (!selected.length) {\n notify({ message: '공유할 문서를 선택해주세요.', level: 'info' })\n return\n }\n\n if (navigator.share) {\n try {\n await navigator.share({\n title: '현장 문서',\n text: selected.map(d => d.name).join(', '),\n url: window.location.href\n })\n } catch {\n // 사용자 취소\n }\n } else {\n const links = selected.map(d => d.fullpath || d.name).join('\\n')\n await navigator.clipboard.writeText(links)\n notify({ message: '링크가 복사되었습니다.' })\n }\n }\n\n private async _toggleFavorites() {\n if (!this.selectedDocIds.size) {\n notify({ message: '즐겨찾기할 문서를 선택해주세요.', level: 'info' })\n return\n }\n\n for (const id of this.selectedDocIds) {\n await client.mutate({\n mutation: gql`\n mutation ToggleFieldDocumentFavorite($id: String!) {\n toggleFieldDocumentFavorite(id: $id) {\n id\n isFavorite\n }\n }\n `,\n variables: { id }\n })\n }\n\n await this._loadDocuments()\n notify({ message: '즐겨찾기가 변경되었습니다.' })\n }\n\n private _triggerUpload() {\n if (!this.selectedMinor?.code) {\n notify({ message: '파일을 업로드할 소분류 폴더를 먼저 선택해주세요.', level: 'info' })\n return\n }\n\n const fileInput = this.renderRoot.querySelector('#native-file-input') as HTMLInputElement\n if (fileInput) {\n fileInput.value = ''\n fileInput.click()\n }\n }\n\n private async _onNativeFileSelected(e: Event) {\n const input = e.target as HTMLInputElement\n const files = Array.from(input.files || [])\n if (!files.length || !this.selectedMinor?.code) return\n\n await this._uploadFiles(files, this.selectedMinor.code)\n }\n\n private async _uploadFiles(files: File[], code: string) {\n for (const file of files) {\n await client.mutate({\n mutation: gql`\n mutation CreateFieldDocument($patch: NewFieldDocument!) {\n createFieldDocument(patch: $patch) {\n id\n }\n }\n `,\n variables: {\n patch: {\n projectId: this.projectId,\n code,\n name: file.name,\n file\n }\n },\n context: { hasUpload: true }\n })\n }\n\n await this._loadDocuments()\n await this._loadCounts()\n notify({ message: `${files.length}개 파일이 업로드되었습니다.` })\n }\n\n private async _deleteDocuments() {\n if (!this.selectedDocIds.size) {\n notify({ message: '삭제할 문서를 선택해주세요.', level: 'info' })\n return\n }\n\n if (!confirm('선택한 문서를 삭제하시겠습니까?')) return\n\n const ids = Array.from(this.selectedDocIds)\n\n const response = await client.mutate({\n mutation: gql`\n mutation DeleteFieldDocuments($ids: [String!]!) {\n deleteFieldDocuments(ids: $ids)\n }\n `,\n variables: { ids }\n })\n\n if (!response.errors) {\n this.selectedDocIds = new Set()\n await this._loadDocuments()\n await this._loadCounts()\n notify({ message: '삭제되었습니다.' })\n }\n }\n\n private _onFolderDragOver(e: DragEvent, code: string) {\n const types = e.dataTransfer?.types || []\n if (types.includes('application/x-field-document-ids')) {\n e.preventDefault()\n this.dragOverItem = code\n\n // 대분류/중분류 위에 hover 시 자동 확장\n if (code.length === 2) {\n const major = FIELD_DOCUMENT_CLASSIFICATIONS.find(m => m.code === code)\n if (major && this.selectedMajor?.code !== code) {\n clearTimeout(this._expandTimeout)\n this._expandTimeout = setTimeout(() => this._selectMajor(major), 500)\n }\n } else if (code.length === 4) {\n const middles = this.selectedMajor?.children || []\n const middle = middles.find(m => m.code === code)\n if (middle && this.selectedMiddle?.code !== code) {\n clearTimeout(this._expandTimeout)\n this._expandTimeout = setTimeout(() => {\n this.selectedMiddle = middle\n this.selectedMinor = null\n }, 500)\n }\n }\n }\n }\n\n private _expandTimeout: any\n\n private async _onFolderDrop(e: DragEvent, code: string) {\n e.preventDefault()\n this.dragOverItem = ''\n clearTimeout(this._expandTimeout)\n\n const idsJson = e.dataTransfer?.getData('application/x-field-document-ids')\n if (!idsJson) return\n\n const ids: string[] = JSON.parse(idsJson)\n\n // 소분류 코드에만 이동 가능\n if (code.length !== 6) {\n notify({ message: '소분류 폴더에만 이동할 수 있습니다.', level: 'info' })\n return\n }\n\n const response = await client.mutate({\n mutation: gql`\n mutation MoveFieldDocuments($ids: [String!]!, $targetCode: String!) {\n moveFieldDocuments(ids: $ids, targetCode: $targetCode)\n }\n `,\n variables: { ids, targetCode: code }\n })\n\n if (!response.errors) {\n const path = findClassificationPath(code)\n notify({ message: `${ids.length}개 문서가 \"${path.minor?.name || code}\" 폴더로 이동되었습니다.` })\n await this._loadDocuments()\n await this._loadCounts()\n }\n }\n\n private async _onDocumentsChanged(e: CustomEvent) {\n const files = e.detail?.files as File[]\n if (files?.length && this.selectedMinor?.code) {\n await this._uploadFiles(files, this.selectedMinor.code)\n } else {\n await this._loadDocuments()\n }\n }\n\n private _showTooltip(e: MouseEvent, text: string) {\n this._tooltipText = text\n const rect = this.getBoundingClientRect()\n this._tooltipX = e.clientX - rect.left\n this._tooltipY = e.clientY - rect.top\n }\n}\n"]}
@@ -1 +1 @@
1
- export default function route(page: string): "checklist-template-list" | "construction-checklist-template-list" | "checklist-type-management" | "building-inspection-list" | "building-inspection-detail-drawing" | "building-inspection-detail-checklist" | "building-inspection-detail-camera" | "building-inspection-detail-ai-measurement" | "building-inspection-detail-ai-defect" | "building-inspection-grid-detail" | "building-inspection-management" | "project-checklist-management" | "checklist-database" | undefined;
1
+ export default function route(page: string): "checklist-type-management" | "building-inspection-list" | "checklist-template-list" | "construction-checklist-template-list" | "building-inspection-detail-drawing" | "building-inspection-detail-checklist" | "building-inspection-detail-camera" | "building-inspection-detail-ai-measurement" | "building-inspection-detail-ai-defect" | "building-inspection-grid-detail" | "building-inspection-management" | "project-checklist-management" | "checklist-database" | undefined;