@genesislcap/pbc-documents-ui 0.0.1

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 (144) hide show
  1. package/README.md +27 -0
  2. package/dist/dts/components/components.d.ts +4 -0
  3. package/dist/dts/components/components.d.ts.map +1 -0
  4. package/dist/dts/components/foundation-document-manager/component/document-grid/column-config.d.ts +83 -0
  5. package/dist/dts/components/foundation-document-manager/component/document-grid/column-config.d.ts.map +1 -0
  6. package/dist/dts/components/foundation-document-manager/component/document-grid/document-grid.d.ts +11 -0
  7. package/dist/dts/components/foundation-document-manager/component/document-grid/document-grid.d.ts.map +1 -0
  8. package/dist/dts/components/foundation-document-manager/component/document-grid/document-grid.styles.d.ts +3 -0
  9. package/dist/dts/components/foundation-document-manager/component/document-grid/document-grid.styles.d.ts.map +1 -0
  10. package/dist/dts/components/foundation-document-manager/component/document-grid/document-grid.template.d.ts +3 -0
  11. package/dist/dts/components/foundation-document-manager/component/document-grid/document-grid.template.d.ts.map +1 -0
  12. package/dist/dts/components/foundation-document-manager/component/document-tile/document-tile.d.ts +14 -0
  13. package/dist/dts/components/foundation-document-manager/component/document-tile/document-tile.d.ts.map +1 -0
  14. package/dist/dts/components/foundation-document-manager/component/document-tile/document-tile.styles.d.ts +3 -0
  15. package/dist/dts/components/foundation-document-manager/component/document-tile/document-tile.styles.d.ts.map +1 -0
  16. package/dist/dts/components/foundation-document-manager/component/document-tile/document-tile.template.d.ts +3 -0
  17. package/dist/dts/components/foundation-document-manager/component/document-tile/document-tile.template.d.ts.map +1 -0
  18. package/dist/dts/components/foundation-document-manager/component/document-upload/document-upload.d.ts +35 -0
  19. package/dist/dts/components/foundation-document-manager/component/document-upload/document-upload.d.ts.map +1 -0
  20. package/dist/dts/components/foundation-document-manager/component/document-upload/document-upload.styles.d.ts +3 -0
  21. package/dist/dts/components/foundation-document-manager/component/document-upload/document-upload.styles.d.ts.map +1 -0
  22. package/dist/dts/components/foundation-document-manager/component/document-upload/document-upload.template.d.ts +3 -0
  23. package/dist/dts/components/foundation-document-manager/component/document-upload/document-upload.template.d.ts.map +1 -0
  24. package/dist/dts/components/foundation-document-manager/document-manager.d.ts +45 -0
  25. package/dist/dts/components/foundation-document-manager/document-manager.d.ts.map +1 -0
  26. package/dist/dts/components/foundation-document-manager/document-manager.styles.d.ts +3 -0
  27. package/dist/dts/components/foundation-document-manager/document-manager.styles.d.ts.map +1 -0
  28. package/dist/dts/components/foundation-document-manager/document-manager.template.d.ts +3 -0
  29. package/dist/dts/components/foundation-document-manager/document-manager.template.d.ts.map +1 -0
  30. package/dist/dts/components/foundation-document-manager/index.d.ts +2 -0
  31. package/dist/dts/components/foundation-document-manager/index.d.ts.map +1 -0
  32. package/dist/dts/components/foundation-document-manager/utils/action-cell-renderer.d.ts +19 -0
  33. package/dist/dts/components/foundation-document-manager/utils/action-cell-renderer.d.ts.map +1 -0
  34. package/dist/dts/components/foundation-document-manager/utils/file-type-cell-renderer.d.ts +9 -0
  35. package/dist/dts/components/foundation-document-manager/utils/file-type-cell-renderer.d.ts.map +1 -0
  36. package/dist/dts/components/foundation-document-manager/utils/icons.d.ts +16 -0
  37. package/dist/dts/components/foundation-document-manager/utils/icons.d.ts.map +1 -0
  38. package/dist/dts/components/index.d.ts +2 -0
  39. package/dist/dts/components/index.d.ts.map +1 -0
  40. package/dist/dts/index.d.ts +3 -0
  41. package/dist/dts/index.d.ts.map +1 -0
  42. package/dist/dts/index.federated.d.ts +1 -0
  43. package/dist/dts/index.federated.d.ts.map +1 -0
  44. package/dist/dts/services/document.service.d.ts +8 -0
  45. package/dist/dts/services/document.service.d.ts.map +1 -0
  46. package/dist/dts/utils/dataserver.d.ts +2 -0
  47. package/dist/dts/utils/dataserver.d.ts.map +1 -0
  48. package/dist/dts/utils/endpoint.d.ts +2 -0
  49. package/dist/dts/utils/endpoint.d.ts.map +1 -0
  50. package/dist/dts/utils/formatting.d.ts +6 -0
  51. package/dist/dts/utils/formatting.d.ts.map +1 -0
  52. package/dist/dts/utils/index.d.ts +2 -0
  53. package/dist/dts/utils/index.d.ts.map +1 -0
  54. package/dist/dts/utils/logger.d.ts +2 -0
  55. package/dist/dts/utils/logger.d.ts.map +1 -0
  56. package/dist/dts/utils/types.d.ts +12 -0
  57. package/dist/dts/utils/types.d.ts.map +1 -0
  58. package/dist/esm/components/components.js +41 -0
  59. package/dist/esm/components/components.js.map +1 -0
  60. package/dist/esm/components/foundation-document-manager/component/document-grid/column-config.js +107 -0
  61. package/dist/esm/components/foundation-document-manager/component/document-grid/column-config.js.map +1 -0
  62. package/dist/esm/components/foundation-document-manager/component/document-grid/document-grid.js +42 -0
  63. package/dist/esm/components/foundation-document-manager/component/document-grid/document-grid.js.map +1 -0
  64. package/dist/esm/components/foundation-document-manager/component/document-grid/document-grid.styles.js +10 -0
  65. package/dist/esm/components/foundation-document-manager/component/document-grid/document-grid.styles.js.map +1 -0
  66. package/dist/esm/components/foundation-document-manager/component/document-grid/document-grid.template.js +10 -0
  67. package/dist/esm/components/foundation-document-manager/component/document-grid/document-grid.template.js.map +1 -0
  68. package/dist/esm/components/foundation-document-manager/component/document-tile/document-tile.js +108 -0
  69. package/dist/esm/components/foundation-document-manager/component/document-tile/document-tile.js.map +1 -0
  70. package/dist/esm/components/foundation-document-manager/component/document-tile/document-tile.styles.js +137 -0
  71. package/dist/esm/components/foundation-document-manager/component/document-tile/document-tile.styles.js.map +1 -0
  72. package/dist/esm/components/foundation-document-manager/component/document-tile/document-tile.template.js +55 -0
  73. package/dist/esm/components/foundation-document-manager/component/document-tile/document-tile.template.js.map +1 -0
  74. package/dist/esm/components/foundation-document-manager/component/document-upload/document-upload.js +143 -0
  75. package/dist/esm/components/foundation-document-manager/component/document-upload/document-upload.js.map +1 -0
  76. package/dist/esm/components/foundation-document-manager/component/document-upload/document-upload.styles.js +157 -0
  77. package/dist/esm/components/foundation-document-manager/component/document-upload/document-upload.styles.js.map +1 -0
  78. package/dist/esm/components/foundation-document-manager/component/document-upload/document-upload.template.js +61 -0
  79. package/dist/esm/components/foundation-document-manager/component/document-upload/document-upload.template.js.map +1 -0
  80. package/dist/esm/components/foundation-document-manager/document-manager.js +130 -0
  81. package/dist/esm/components/foundation-document-manager/document-manager.js.map +1 -0
  82. package/dist/esm/components/foundation-document-manager/document-manager.styles.js +245 -0
  83. package/dist/esm/components/foundation-document-manager/document-manager.styles.js.map +1 -0
  84. package/dist/esm/components/foundation-document-manager/document-manager.template.js +93 -0
  85. package/dist/esm/components/foundation-document-manager/document-manager.template.js.map +1 -0
  86. package/dist/esm/components/foundation-document-manager/index.js +2 -0
  87. package/dist/esm/components/foundation-document-manager/index.js.map +1 -0
  88. package/dist/esm/components/foundation-document-manager/utils/action-cell-renderer.js +39 -0
  89. package/dist/esm/components/foundation-document-manager/utils/action-cell-renderer.js.map +1 -0
  90. package/dist/esm/components/foundation-document-manager/utils/file-type-cell-renderer.js +26 -0
  91. package/dist/esm/components/foundation-document-manager/utils/file-type-cell-renderer.js.map +1 -0
  92. package/dist/esm/components/foundation-document-manager/utils/icons.js +238 -0
  93. package/dist/esm/components/foundation-document-manager/utils/icons.js.map +1 -0
  94. package/dist/esm/components/index.js +2 -0
  95. package/dist/esm/components/index.js.map +1 -0
  96. package/dist/esm/index.federated.js +2 -0
  97. package/dist/esm/index.federated.js.map +1 -0
  98. package/dist/esm/index.js +3 -0
  99. package/dist/esm/index.js.map +1 -0
  100. package/dist/esm/services/document.service.js +69 -0
  101. package/dist/esm/services/document.service.js.map +1 -0
  102. package/dist/esm/utils/dataserver.js +35 -0
  103. package/dist/esm/utils/dataserver.js.map +1 -0
  104. package/dist/esm/utils/endpoint.js +22 -0
  105. package/dist/esm/utils/endpoint.js.map +1 -0
  106. package/dist/esm/utils/formatting.js +49 -0
  107. package/dist/esm/utils/formatting.js.map +1 -0
  108. package/dist/esm/utils/index.js +2 -0
  109. package/dist/esm/utils/index.js.map +1 -0
  110. package/dist/esm/utils/logger.js +3 -0
  111. package/dist/esm/utils/logger.js.map +1 -0
  112. package/dist/esm/utils/types.js +2 -0
  113. package/dist/esm/utils/types.js.map +1 -0
  114. package/index.html +14 -0
  115. package/license.txt +46 -0
  116. package/package.json +132 -0
  117. package/src/components/components.ts +49 -0
  118. package/src/components/foundation-document-manager/component/document-grid/column-config.ts +108 -0
  119. package/src/components/foundation-document-manager/component/document-grid/document-grid.styles.ts +10 -0
  120. package/src/components/foundation-document-manager/component/document-grid/document-grid.template.ts +14 -0
  121. package/src/components/foundation-document-manager/component/document-grid/document-grid.ts +39 -0
  122. package/src/components/foundation-document-manager/component/document-tile/document-tile.styles.ts +137 -0
  123. package/src/components/foundation-document-manager/component/document-tile/document-tile.template.ts +71 -0
  124. package/src/components/foundation-document-manager/component/document-tile/document-tile.ts +119 -0
  125. package/src/components/foundation-document-manager/component/document-upload/document-upload.styles.ts +157 -0
  126. package/src/components/foundation-document-manager/component/document-upload/document-upload.template.ts +82 -0
  127. package/src/components/foundation-document-manager/component/document-upload/document-upload.ts +146 -0
  128. package/src/components/foundation-document-manager/document-manager.styles.ts +245 -0
  129. package/src/components/foundation-document-manager/document-manager.template.ts +111 -0
  130. package/src/components/foundation-document-manager/document-manager.ts +128 -0
  131. package/src/components/foundation-document-manager/index.ts +1 -0
  132. package/src/components/foundation-document-manager/utils/action-cell-renderer.ts +55 -0
  133. package/src/components/foundation-document-manager/utils/file-type-cell-renderer.ts +33 -0
  134. package/src/components/foundation-document-manager/utils/icons.ts +251 -0
  135. package/src/components/index.ts +1 -0
  136. package/src/index.federated.ts +1 -0
  137. package/src/index.ts +3 -0
  138. package/src/services/document.service.ts +83 -0
  139. package/src/utils/dataserver.ts +42 -0
  140. package/src/utils/endpoint.ts +19 -0
  141. package/src/utils/formatting.ts +59 -0
  142. package/src/utils/index.ts +1 -0
  143. package/src/utils/logger.ts +2 -0
  144. package/src/utils/types.ts +11 -0
@@ -0,0 +1,245 @@
1
+ import { ElementStyles, css } from '@microsoft/fast-element';
2
+
3
+ export const DocumentManagerStyles: ElementStyles = css`
4
+ :host {
5
+ font-family: var(--body-font);
6
+ }
7
+
8
+ ::-webkit-scrollbar {
9
+ width: calc(var(--base-height-multiplier) * 1px);
10
+ }
11
+
12
+ ::-webkit-scrollbar-track {
13
+ background: var(--neutral-layer-1);
14
+ }
15
+
16
+ ::-webkit-scrollbar-thumb {
17
+ background: var(--neutral-fill-rest);
18
+ }
19
+
20
+ .body {
21
+ display: flex;
22
+ height: inherit;
23
+ }
24
+
25
+ .container {
26
+ height: 100%;
27
+ width: 100%;
28
+ background: var(--neutral-layer-3);
29
+ position: relative;
30
+ border-radius: calc((var(--control-corner-radius) + 2) * 1px);
31
+ box-shadow: 0px 0px 20px 0px rgba(0, 0, 0, 0.44);
32
+ border: calc(var(--stroke-width) * 1px) solid var(--neutral-stroke-divider-rest);
33
+ display: flex;
34
+ flex-direction: column;
35
+ }
36
+
37
+ .close-btn {
38
+ min-width: calc((var(--base-height-multiplier) - 2 )* 3px);
39
+ display: flex;
40
+ width: calc((var(--base-height-multiplier) - 2 ) * 3px);
41
+ height: calc((var(--base-height-multiplier) - 2 ) * 3px);
42
+ border-radius: calc(var(--control-corner-radius) * 1px);
43
+ background-color: var(--neutral-layer-3);
44
+ box-sizing: border-box;
45
+ justify-content: center;
46
+ align-items: center;
47
+ margin: 0;
48
+ }
49
+
50
+ .close-btn:hover {
51
+ background-color: color-mix(in srgb, var(--neutral-foreground-rest), transparent 95%);
52
+ }
53
+
54
+ .close-btn::part(control):focus-visible {
55
+ border-color: transparent;
56
+ box-shadow: none;
57
+ }
58
+
59
+ .directory-list {
60
+ display: flex;
61
+ flex-direction: column;
62
+ }
63
+
64
+ .directory-btn,
65
+ .directory-btn-selected {
66
+ border-left: 3px solid transparent;
67
+ margin: 0;
68
+ border-radius: 0px;
69
+ height: calc((var(--base-height-multiplier) - 1) * 4px);
70
+ background-color: transparent;
71
+ box-sizing: border-box;
72
+ font-size: var(--type-ramp-minus-1-font-size);
73
+ color: var(--neutral-foreground-hint);
74
+ text-align: left;
75
+ line-height: var(--type-ramp-base-line-height);
76
+ }
77
+
78
+ .directory-btn-selected {
79
+ border-left: 3px solid;
80
+ color: var(--neutral-foreground-rest);
81
+ border-image-slice: 1;
82
+ border-image-source: linear-gradient(to bottom, #47bce0, #654df9);
83
+ background-color: color-mix(in srgb, var(--neutral-foreground-rest), transparent 96%);
84
+ }
85
+
86
+ .footer {
87
+ display: flex;
88
+ align-items: center;
89
+ justify-content: end;
90
+ padding: calc(var(--design-unit) * 3px) calc(var(--design-unit) * 4px);
91
+ font-size: var(--type-ramp-minus-2-font-size);
92
+ border-top: calc(var(--stroke-width) * 1px) solid var(--neutral-stroke-divider-rest);;
93
+ }
94
+
95
+ .header {
96
+ padding: calc(var(--design-unit) * 2px);
97
+ padding-left: calc(var(--design-unit) * 4px);
98
+ box-sizing: border-box;
99
+ display: flex;
100
+ align-items: center;
101
+ justify-content: space-between;
102
+ border-bottom: calc(var(--stroke-width) * 1px) solid var(--neutral-stroke-divider-rest);;
103
+ }
104
+
105
+ .title {
106
+ font-weight: 500;
107
+ font-size: var(--type-ramp-minus-1-font-size);
108
+ color: var(--neutral-foreground-rest);
109
+ text-align: left;
110
+ line-height: normal;
111
+ }
112
+
113
+ .pinned-left {
114
+ width: 163px;
115
+ padding: 0;
116
+ border-right: calc(var(--stroke-width) * 1px) solid var(--neutral-stroke-divider-rest);;
117
+ background-color: var(--neutral-layer-4);
118
+ box-sizing: border-box;
119
+ display: flex;
120
+ flex-direction: column;
121
+ }
122
+
123
+ .pinned-left-header {
124
+ display: flex;
125
+ height: calc(var(--base-height-multiplier) * 4px);
126
+ padding: calc(var(--design-unit) * 2px) calc(var(--design-unit) * 4px);
127
+ font-weight: 500;
128
+ font-size: var(--type-ramp-minus-2-font-size);
129
+ color: var(--neutral-foreground-hint);
130
+ line-height: var(--type-ramp-base-line-height);
131
+ align-items: center;
132
+ }
133
+
134
+ .pinned-right {
135
+ display: flex;
136
+ height: 100%;
137
+ width: 100%;
138
+ flex-direction: column;
139
+ }
140
+
141
+ .pinned-right-body {
142
+ height: 100%;
143
+ position: relative;
144
+ }
145
+
146
+ .pinned-right-header {
147
+ display: flex;
148
+ align-items: center;
149
+ gap: calc(var(--design-unit) * 4px);
150
+ height: calc(var(--base-height-multiplier) * 4px);
151
+ border-bottom: calc(var(--stroke-width) * 1px) solid var(--neutral-stroke-divider-rest);;
152
+ padding: calc(var(--design-unit) * 2px) calc(var(--design-unit) * 4px);
153
+ justify-content: space-between;
154
+ }
155
+
156
+ .pinned-right-header-left-group {
157
+ flex: 1 1;
158
+ display: flex;
159
+ flex-direction: row;
160
+ align-items: center;
161
+ gap: calc(var(--design-unit) * 4px);
162
+ }
163
+
164
+ .pinned-right-header-left-group > zero-text-field {
165
+ max-width: 418px;
166
+ flex: 1 1;
167
+ }
168
+
169
+ .upload-btn {
170
+ color: var(--neutral-foreground-hint);
171
+ font-size: var(--type-ramp-minus-1-font-size);
172
+ background-color: var(--neutral-layer-3);
173
+ margin: 0;
174
+ }
175
+
176
+ .uploading {
177
+ color: var(--neutral-foreground-rest);
178
+ background-color: var(--neutral-layer-1);
179
+ }
180
+
181
+ .upload-btn:hover {
182
+ color: var(--neutral-foreground-rest);
183
+ }
184
+
185
+ .upload-btn > svg {
186
+ width: calc((var(--base-height-multiplier) - 2 )* 3px);
187
+ }
188
+
189
+ .upload-btn::part(start) {
190
+ margin-inline-end: calc(var(--design-unit) * 2px);
191
+ }
192
+
193
+ fast-dialog {
194
+ --dialog-height: 668px;
195
+ --dialog-width: 952px;
196
+ }
197
+
198
+ zero-segmented-control:first-child {
199
+ border-top-left-radius: calc(var(--control-corner-radius) * 1px);
200
+ border-bottom-left-radius: calc(var(--control-corner-radius) * 1px);
201
+ }
202
+
203
+ zero-segmented-control:last-child {
204
+ border-top-right-radius: calc(var(--control-corner-radius) * 1px);
205
+ border-bottom-right-radius: calc(var(--control-corner-radius) * 1px);
206
+ }
207
+
208
+ zero-segmented-item {
209
+ height: calc((var(--base-height-multiplier) - 1 ) * 4px);
210
+ padding: 0 calc(var(--design-unit) * 3px);
211
+ border: calc(var(--stroke-width) * 1px) solid var(--neutral-foreground-hint);
212
+ fill: var(--neutral-foreground-hint);
213
+ }
214
+
215
+ zero-segmented-item > svg:focus,
216
+ zero-segmented-item > svg > g:focus,
217
+ zero-segmented-item > svg > g > path:focus {
218
+ outline: none !important;
219
+ }
220
+
221
+ zero-segmented-item[aria-checked='true'] {
222
+ box-shadow: none;
223
+ fill: var(--neutral-foreground-rest);
224
+ background-image: linear-gradient(
225
+ -141.41742576267188deg,
226
+ rgba(71, 188, 224, 0.5) 0%,
227
+ rgba(101, 77, 249, 0.5) 100%
228
+ );
229
+ border-image-slice: 1;
230
+ border-image-source: linear-gradient(to bottom, #47bce0, #654df9);
231
+ border-width: calc(var(--stroke-width) * 1px);
232
+ border-style: solid;
233
+ }
234
+
235
+ zero-modal::part(dialog) {
236
+ padding: 0;
237
+ background: var(--neutral-layer-4);
238
+ border: calc(var(--stroke-width) * 1px) solid var(--neutral-stroke-divider-rest);
239
+ }
240
+
241
+ zero-modal::part(top) {
242
+ padding: calc(var(--design-unit) * 4px);
243
+ border-bottom: calc(var(--stroke-width) * 1px) solid var(--neutral-stroke-divider-rest);
244
+ }
245
+ `;
@@ -0,0 +1,111 @@
1
+ import { html, ref, repeat, when } from '@microsoft/fast-element';
2
+ import { IDirectories, FoundationDocumentManager, ViewSelection } from './document-manager';
3
+ import { closeIcon } from '@genesislcap/foundation-ui';
4
+ import { hamburgerIcon, searchIcon, uploadIcon, viewTileIcon } from './utils/icons';
5
+ import { DocumentTile } from './component/document-tile/document-tile';
6
+ import { DocumentUpload } from './component/document-upload/document-upload';
7
+ import { DocumentGrid } from './component/document-grid/document-grid';
8
+
9
+ DocumentTile;
10
+ DocumentUpload;
11
+ DocumentGrid;
12
+
13
+ export const DocumentManagerTemplate = html<FoundationDocumentManager>`
14
+ <fast-dialog ${ref('modal')}>
15
+ <div class="container">
16
+ <div class="header">
17
+ <a class="title">Document manager</a>
18
+ <zero-button class="close-btn" @click=${(x) => x.modal.hide()}>
19
+ ${closeIcon('')}
20
+ </zero-button>
21
+ </div>
22
+ <div class="body">
23
+ <div class="pinned-left">
24
+ <a class="pinned-left-header">DIRECTORIES</a>
25
+ <div class="directory-list">
26
+ ${repeat(
27
+ (x) => x.directories,
28
+ html<IDirectories>`
29
+ <zero-button
30
+ class="directory-btn${(x, c) =>
31
+ x.id == c.parent.currentdirectory ? '-selected' : ''}"
32
+ @click=${(x, c) => c.parent.changeDirectory(x.id)}
33
+ >
34
+ ${(x) => x.icon} ${(x) => x.title}
35
+ </zero-button>
36
+ `,
37
+ { positioning: true },
38
+ )}
39
+ </div>
40
+ </div>
41
+ <div class="pinned-right">
42
+ <div class="pinned-right-header">
43
+ <span class="pinned-right-header-left-group">
44
+ <zero-text-field
45
+ ${ref('searchField')}
46
+ placeholder="Search..."
47
+ @change=${(x) => x.changeSearchFilter()}
48
+ >
49
+ ${searchIcon}
50
+ </zero-text-field>
51
+ <zero-segmented-control>
52
+ <zero-segmented-item
53
+ checked="true"
54
+ value="GRID"
55
+ @click=${(x) => x.changeView(ViewSelection.GRID)}
56
+ >
57
+ ${hamburgerIcon}
58
+ </zero-segmented-item>
59
+ <zero-segmented-item value="TILE" @click=${(x) => x.changeView(ViewSelection.TILE)}>
60
+ ${viewTileIcon}
61
+ </zero-segmented-item>
62
+ </zero-segmented-control>
63
+ </span>
64
+ <zero-button
65
+ class="upload-btn ${(x) => (x.uploadingDocument ? 'uploading' : '')}"
66
+ @click=${(x) => x.startUploading()}
67
+ >
68
+ ${uploadIcon('start')} Upload Document
69
+ </zero-button>
70
+ </div>
71
+ <div class="pinned-right-body">
72
+ ${when(
73
+ (x) => x.currentView == ViewSelection.TILE && !x.uploadingDocument,
74
+ html<FoundationDocumentManager>`
75
+ <document-tile
76
+ :data=${(x) => x.filteredDocuments}
77
+ @download-document=${(x, c) => x.downloadDocument((c.event as any).detail)}
78
+ @remove-document=${(x, c) => x.deleteDocument((c.event as any).detail)}
79
+ ></document-tile>
80
+ `,
81
+ )}
82
+ ${when(
83
+ (x) => x.currentView == ViewSelection.GRID && !x.uploadingDocument,
84
+ html<FoundationDocumentManager>`
85
+ <document-grid
86
+ :data=${(x) => x.filteredDocuments}
87
+ @download-document=${(x, c) => x.downloadDocument((c.event as any).detail)}
88
+ @remove-document=${(x, c) => x.deleteDocument((c.event as any).detail)}
89
+ ></document-grid>
90
+ `,
91
+ )}
92
+ ${when(
93
+ (x) => x.uploadingDocument,
94
+ html<FoundationDocumentManager>`
95
+ <document-upload></document-upload>
96
+ `,
97
+ )}
98
+ </div>
99
+ </div>
100
+ </div>
101
+ <div class="footer">
102
+ ${when(
103
+ (x) => !x.uploadingDocument,
104
+ html<FoundationDocumentManager>`
105
+ <a>${(x) => x.filteredDocuments.length} Documents</a>
106
+ `,
107
+ )}
108
+ </div>
109
+ </div>
110
+ </fast-dialog>
111
+ `;
@@ -0,0 +1,128 @@
1
+ import { FASTElement, customElement, observable } from '@microsoft/fast-element';
2
+ import { DocumentManagerTemplate } from './document-manager.template';
3
+ import { DocumentManagerStyles } from './document-manager.styles';
4
+ import { IDocumentService } from '../../services/document.service';
5
+ import { Dialog } from '@microsoft/fast-components';
6
+ import { folderIcon, userIcon } from './utils/icons';
7
+ import { IFileStorage } from '../../utils/types';
8
+ import { Auth } from '@genesislcap/foundation-comms';
9
+ import { TextField } from '@microsoft/fast-foundation';
10
+ import { logger } from '../../utils';
11
+ import { updateArray } from '../../utils/dataserver';
12
+
13
+ export enum DIRECTORY {
14
+ ALL = 'ALL',
15
+ MY_FILES = 'MY_FILES',
16
+ }
17
+ export interface IDirectories {
18
+ id: DIRECTORY;
19
+ icon: any;
20
+ title: string;
21
+ selected: boolean;
22
+ }
23
+
24
+ export enum ViewSelection {
25
+ GRID = 'GRID',
26
+ TILE = 'TILE',
27
+ }
28
+
29
+ @customElement({
30
+ name: 'foundation-document-manager',
31
+ template: DocumentManagerTemplate,
32
+ styles: DocumentManagerStyles,
33
+ })
34
+ export class FoundationDocumentManager extends FASTElement {
35
+ @IDocumentService docService: IDocumentService;
36
+ @Auth auth!: Auth;
37
+
38
+ public modal: Dialog;
39
+ public searchField: TextField;
40
+
41
+ @observable currentView: ViewSelection = ViewSelection.GRID;
42
+ @observable uploadingDocument: boolean = false;
43
+ @observable directories: IDirectories[] = [
44
+ {
45
+ id: DIRECTORY.ALL,
46
+ icon: folderIcon,
47
+ title: 'All files',
48
+ selected: true,
49
+ },
50
+ {
51
+ id: DIRECTORY.MY_FILES,
52
+ icon: userIcon,
53
+ title: 'My files',
54
+ selected: false,
55
+ },
56
+ ];
57
+ @observable currentdirectory = DIRECTORY.ALL;
58
+ @observable documents: IFileStorage[] = [];
59
+ @observable filteredDocuments: IFileStorage[] = [];
60
+
61
+ private currentFilter = '';
62
+
63
+ connectedCallback(): void {
64
+ super.connectedCallback();
65
+ this.streamDocuments();
66
+ this.modal.show();
67
+ }
68
+
69
+ disconnectedCallback(): void {
70
+ super.disconnectedCallback();
71
+ }
72
+
73
+ public open() {
74
+ this.modal.show();
75
+ }
76
+
77
+ public changeSearchFilter() {
78
+ this.currentFilter = this.searchField.currentValue.trim().toLowerCase();
79
+ this.filterDocumentsByDirectory();
80
+ }
81
+
82
+ private streamDocuments() {
83
+ this.docService.streamDocuments().subscribe((x) => {
84
+ if (!x.ERROR) {
85
+ this.documents = updateArray(x.ROW, this.documents);
86
+ this.changeSearchFilter();
87
+ } else {
88
+ logger.error(x.ERROR);
89
+ }
90
+ });
91
+ }
92
+
93
+ private filterDocumentsByDirectory() {
94
+ if (this.currentdirectory === DIRECTORY.ALL) {
95
+ this.filteredDocuments = this.documents;
96
+ } else if (this.currentdirectory === DIRECTORY.MY_FILES) {
97
+ this.filteredDocuments = this.documents.filter(
98
+ (x) => x.CREATED_BY === this.auth.currentUser.username,
99
+ );
100
+ }
101
+ this.filteredDocuments = this.filteredDocuments.filter((x) =>
102
+ x.FILE_NAME.trim().toLowerCase().includes(this.currentFilter),
103
+ );
104
+ }
105
+
106
+ public startUploading() {
107
+ this.currentdirectory = null;
108
+ this.uploadingDocument = true;
109
+ }
110
+
111
+ public changeDirectory(directory: DIRECTORY) {
112
+ this.currentdirectory = directory;
113
+ this.uploadingDocument = false;
114
+ this.filterDocumentsByDirectory();
115
+ }
116
+
117
+ public changeView(view: ViewSelection) {
118
+ this.currentView = view;
119
+ }
120
+
121
+ public downloadDocument(event) {
122
+ this.docService.downloadDocument(event);
123
+ }
124
+
125
+ public deleteDocument(event) {
126
+ console.error('Deleting document ' + event); // temp
127
+ }
128
+ }
@@ -0,0 +1 @@
1
+ export * from '.';
@@ -0,0 +1,55 @@
1
+ interface IAction {
2
+ name: string;
3
+ callback: (any?) => void;
4
+ actionName: string;
5
+ disabled?: boolean;
6
+ }
7
+
8
+ interface IAgGridActions {
9
+ actions: IAction[];
10
+ }
11
+
12
+ export class ActionCellRenderer {
13
+ content: HTMLElement;
14
+
15
+ constructor() {
16
+ this.content = document.createElement('div');
17
+ }
18
+
19
+ init(params: IAgGridActions) {
20
+ this.renderButtons(params);
21
+ }
22
+
23
+ renderButtons(params) {
24
+ const { actions, data, enabled } = params;
25
+ this.content.setAttribute('style', 'display: flex; gap: 8px; align-items: center;');
26
+ actions.forEach((action: IAction) => {
27
+ const button: HTMLElement = document.createElement('span');
28
+ button.title = action.actionName;
29
+ const defualtStyle = 'display: flex; cursor: pointer;';
30
+ const defualtColor = 'fill: #879ba6;';
31
+ button.setAttribute('style', defualtStyle + defualtColor);
32
+ button.addEventListener('mouseover', () => {
33
+ button.setAttribute('style', 'fill: #ffffff;' + defualtStyle);
34
+ });
35
+ button.addEventListener('mouseleave', () => [
36
+ button.setAttribute('style', defualtStyle + defualtColor),
37
+ ]);
38
+ button.innerHTML = action.name;
39
+ button.addEventListener('click', () => {
40
+ action.callback(data);
41
+ });
42
+ this.content.appendChild(button);
43
+ });
44
+ }
45
+
46
+ refresh(params): boolean {
47
+ this.content.innerHTML = '';
48
+ this.renderButtons(params);
49
+ return true;
50
+ }
51
+
52
+ getGui(): HTMLElement {
53
+ return this.content;
54
+ }
55
+ }
@@ -0,0 +1,33 @@
1
+ import { getFileColor, getFileType } from '../../../utils/formatting';
2
+
3
+ export class FileTypeCellRenderer {
4
+ content: HTMLElement;
5
+
6
+ constructor() {
7
+ this.content = document.createElement('div');
8
+ }
9
+
10
+ init(params: any) {
11
+ this.renderButtons(params);
12
+ }
13
+
14
+ renderButtons(params) {
15
+ const { data } = params;
16
+ const fileType = getFileType(data.FILE_NAME);
17
+ let style =
18
+ 'height: fit-content; width: fit-content; padding: calc(var(--design-unit) * 1px) calc(var(--design-unit) * 2px); border-radius: calc(var(--control-corner-radius) * 1px); font-size: 10px; font-weight: 700; color: rgba(20, 20, 20, 0.89); text-align: center; line-height: normal;';
19
+ style += ` background-color: ${getFileColor(fileType)};`;
20
+ this.content.setAttribute('style', style);
21
+ this.content.innerText = fileType;
22
+ }
23
+
24
+ refresh(params): boolean {
25
+ this.content.innerHTML = '';
26
+ this.renderButtons(params);
27
+ return true;
28
+ }
29
+
30
+ getGui(): HTMLElement {
31
+ return this.content;
32
+ }
33
+ }