Skip to content

Commit b52ac9a

Browse files
committed
feat: add file full text search
1 parent 6aa4e35 commit b52ac9a

26 files changed

+490
-128
lines changed

addon/components/document-card.hbs

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
class="marks uk-flex uk-position-top-left uk-position-small uk-border-rounded uk-background-muted"
55
>
66
{{#each @document.marks as |mark|}}
7-
<div title={{mark.name}}>
7+
<div uk-tooltip={{mark.name}}>
88
<FaIcon @icon={{mark.icon}} />
99
</div>
1010
{{/each}}

addon/components/document-list-item.hbs

+77-56
Original file line numberDiff line numberDiff line change
@@ -4,61 +4,82 @@
44
data-test-document-list-item-id={{@document.id}}
55
tabindex="0"
66
draggable="true"
7-
{{on "click" (fn @onClickDocument @document)}}
8-
{{on "dblclick" (fn @onDoubleClickDocument @document)}}
9-
{{on "dragstart" (fn @onDragStart @document)}}
7+
{{on "click" (fn (optional @onClickDocument) @document)}}
8+
{{on "dblclick" (fn (optional @onDoubleClickDocument) @document)}}
9+
{{on "dragstart" (fn (optional @onDragStart) @document)}}
1010
>
11-
<td class="uk-preserve-width">
12-
<FaIcon
13-
@icon="file-alt"
14-
@prefix="far"
15-
@size="1x"
16-
data-test-file-icon
17-
{{set-style color=@document.category.color}}
18-
/>
19-
</td>
20-
<td>
21-
<span>{{@document.title}}</span>
22-
<div
23-
class="document-thumbnail"
24-
uk-dropdown="pos: right-center; offset: 15; delay-show: 400; delay-hide: 100; container: .alexandria-container;"
25-
>
26-
<img
27-
data-src="{{@document.thumbnail.value}}"
28-
alt="{{@document.title}}"
29-
uk-img
30-
/>
31-
</div>
32-
</td>
33-
<td class="list-marks uk-flex">
34-
{{#each @document.marks as |mark|}}
35-
<div title={{mark.name}} data-test-document-mark={{mark.id}}>
36-
<FaIcon @icon={{mark.icon}} @fixedWidth={{true}} />
37-
</div>
38-
{{/each}}
39-
</td>
40-
<td>
41-
{{format-date
42-
@document.date
43-
month="2-digit"
44-
day="2-digit"
45-
year="numeric"
46-
}}
47-
</td>
48-
<td>
49-
{{format-date
50-
@document.latestFile.value.createdAt
51-
month="2-digit"
52-
day="2-digit"
53-
year="numeric"
54-
hour="2-digit"
55-
minute="2-digit"
56-
}}
57-
</td>
58-
<td>
59-
{{await (resolve-user @document.createdByUser)}}
60-
</td>
61-
<td>
62-
{{await (resolve-group @document.createdByGroup)}}
63-
</td>
11+
{{#each-in @columns as |key settings|}}
12+
{{#if (eq key "type")}}
13+
<td class="uk-preserve-width">
14+
<FaIcon
15+
@icon="file-alt"
16+
@prefix="far"
17+
@size="1x"
18+
uk-tooltip={{@document.category.name}}
19+
data-test-file-icon
20+
{{set-style color=@document.category.color}}
21+
/>
22+
</td>
23+
{{else if (eq key "title")}}
24+
<td>
25+
<span>{{@document.title}}</span>
26+
<div
27+
class="document-thumbnail"
28+
uk-dropdown="pos: right-center; offset: 15; delay-show: 400; delay-hide: 100; container: .alexandria-container;"
29+
>
30+
<img
31+
data-src="{{@document.thumbnail.value}}"
32+
alt="{{@document.title}}"
33+
uk-img
34+
/>
35+
</div>
36+
</td>
37+
{{else if (eq key "marks")}}
38+
<td class="list-marks uk-flex">
39+
{{#each @document.marks as |mark|}}
40+
<div uk-tooltip={{mark.name}} data-test-document-mark={{mark.id}}>
41+
<FaIcon @icon={{mark.icon}} @fixedWidth={{true}} />
42+
</div>
43+
{{/each}}
44+
</td>
45+
{{else if (eq key "link")}}
46+
<td>
47+
Link
48+
<LinkTo
49+
@route={{this.config.documentListLinkTo.route}}
50+
@query={{hash document=@document.id}}
51+
>
52+
{{this.config.documentListLinkTo.label}}
53+
</LinkTo>
54+
</td>
55+
{{else if (eq key "date")}}
56+
<td>
57+
{{format-date
58+
@document.date
59+
month="2-digit"
60+
day="2-digit"
61+
year="numeric"
62+
}}
63+
</td>
64+
{{else if (eq key "modifiedAt")}}
65+
<td>
66+
{{format-date
67+
@document.latestFile.value.createdAt
68+
month="2-digit"
69+
day="2-digit"
70+
year="numeric"
71+
hour="2-digit"
72+
minute="2-digit"
73+
}}
74+
</td>
75+
{{else if (eq key "createdByUser")}}
76+
<td>
77+
{{await (resolve-user @document.createdByUser)}}
78+
</td>
79+
{{else if (eq key "createdByGroup")}}
80+
<td>
81+
{{await (resolve-group @document.createdByGroup)}}
82+
</td>
83+
{{/if}}
84+
{{/each-in}}
6485
</tr>

addon/components/document-list-item.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ export default class DocumentListItemComponent extends Component {
88
classes.push("document-list-item--selected");
99
}
1010

11-
this.args.document.marks.forEach((mark) => {
11+
this.args.document.get("marks").forEach((mark) => {
1212
classes.push(`document-list-item--mark-${mark.id}`);
1313
});
1414

addon/components/document-list.hbs

+33-65
Original file line numberDiff line numberDiff line change
@@ -1,84 +1,52 @@
11
<table
22
class="uk-table uk-table-divider uk-table-striped uk-table-hover no-select document-list"
33
>
4-
<caption></caption>
4+
<caption hidden>{{t "alexandria.document-list.name"}}</caption>
55
<thead>
66
<tr>
7-
<th>
8-
<span hidden>{{t "alexandria.document-list.type"}}</span>
9-
</th>
10-
<th class="uk-table-expand">
11-
{{t "alexandria.document-details.document-title"}}
12-
<FaIcon
13-
@icon="sort"
14-
@prefix="fas"
15-
@size="1x"
16-
@class="uk-margin-small-left"
17-
role="button"
18-
data-test-sort-title
19-
{{on "click" (fn @setSort "title")}}
20-
/>
21-
</th>
22-
<th></th>
23-
<th>
24-
{{t "alexandria.document-list.date"}}
25-
<FaIcon
26-
@icon="sort"
27-
@prefix="fas"
28-
@size="1x"
29-
@class="uk-margin-small-left"
30-
data-test-sort-date
31-
role="button"
32-
{{on "click" (fn @setSort "date")}}
33-
/>
34-
</th>
35-
<th>
36-
{{t "alexandria.document-list.modified-at"}}
37-
<FaIcon
38-
@icon="sort"
39-
@prefix="fas"
40-
@size="1x"
41-
@class="uk-margin-small-left"
42-
data-test-sort-title
43-
role="button"
44-
{{on "click" (fn @setSort "modifiedAt")}}
45-
/>
46-
</th>
47-
<th>
48-
{{t "alexandria.document-list.created-by-user"}}
49-
<FaIcon
50-
@icon="sort"
51-
@prefix="fas"
52-
@size="1x"
53-
@class="uk-margin-small-left"
54-
data-test-sort-title
55-
role="button"
56-
{{on "click" (fn @setSort "createdByUser")}}
57-
/>
58-
</th>
59-
<th>
60-
{{t "alexandria.document-list.created-by-group"}}
61-
<FaIcon
62-
@icon="sort"
63-
@prefix="fas"
64-
@size="1x"
65-
@class="uk-margin-small-left"
66-
data-test-sort-title
67-
role="button"
68-
{{on "click" (fn @setSort "createdByGroup")}}
69-
/>
70-
</th>
7+
{{#each-in @columns as |key settings|}}
8+
<th class={{if (eq key "title") "uk-table-expand"}}>
9+
{{#if settings.labelHidden}}
10+
<span hidden>
11+
{{t (concat "alexandria.document-list." settings.label)}}
12+
</span>
13+
{{else}}
14+
{{t (concat "alexandria.document-list." settings.label)}}
15+
{{#if settings.sort}}
16+
<FaIcon
17+
@icon="sort"
18+
@prefix="fas"
19+
@size="1x"
20+
@class="uk-margin-small-left"
21+
role="button"
22+
data-test-sort={{key}}
23+
{{on "click" (fn @setSort key)}}
24+
/>
25+
{{/if}}
26+
{{/if}}
27+
</th>
28+
{{/each-in}}
7129
</tr>
7230
</thead>
31+
7332
<tbody>
7433
{{#each @fetchedDocuments as |document|}}
7534
<DocumentListItem
35+
@columns={{@columns}}
7636
@document={{document}}
7737
@isSelected={{includes document.id (map-by "id" @selectedDocuments)}}
7838
@onClickDocument={{@onClickDocument}}
7939
@onDoubleClickDocument={{@onDoubleClickDocument}}
8040
@onDragStart={{@onDragStart}}
8141
/>
42+
{{else}}
43+
<tr>
44+
<td colspan="7">
45+
<div class="uk-text-center uk-text-muted">
46+
{{t "alexandria.nothing-found"}}
47+
</div>
48+
</td>
49+
</tr>
8250
{{/each}}
8351
</tbody>
8452
</table>

addon/components/document-view-toggle.hbs

+1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
@color="default"
33
@size="small"
44
class="uk-height-1-1"
5+
uk-tooltip={{t "alexandria.document-list.toggle"}}
56
data-test-toggle
67
...attributes
78
>

addon/components/document-view.hbs

+1
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
{{! List & Grid View }}
5151
{{#if this.listView}}
5252
<DocumentList
53+
@columns={{this.tableColumns}}
5354
@loading={{this.fetchedDocuments.isRunning}}
5455
@fetchedDocuments={{this.fetchedDocuments.value}}
5556
@setSort={{this.setSort}}

addon/components/document-view.js

+33
Original file line numberDiff line numberDiff line change
@@ -214,4 +214,37 @@ export default class DocumentViewComponent extends Component {
214214
);
215215
event.dataTransfer.setDragImage(this.dragInfo, -20, 0);
216216
}
217+
218+
get tableColumns() {
219+
return {
220+
type: {
221+
label: "type",
222+
labelHidden: true,
223+
},
224+
title: {
225+
label: "document-title",
226+
sort: true,
227+
},
228+
marks: {
229+
label: "marks",
230+
labelHidden: true,
231+
},
232+
date: {
233+
label: "date",
234+
sort: true,
235+
},
236+
modifiedAt: {
237+
label: "modified-at",
238+
sort: true,
239+
},
240+
createdByUser: {
241+
label: "created-by-user",
242+
sort: true,
243+
},
244+
createdByGroup: {
245+
label: "created-by-group",
246+
sort: true,
247+
},
248+
};
249+
}
217250
}

addon/components/file-search.hbs

+47
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
<div
2+
class="uk-flex uk-overflow-hidden uk-height-max-1 uk-height-1-1"
3+
data-test-document-view
4+
>
5+
<div
6+
class="uk-width-1 uk-flex uk-flex-column uk-overflow-hidden uk-height-max-1"
7+
>
8+
<div class="uk-flex uk-flex-middle uk-padding-small">
9+
<Search @search={{this.search}}/>
10+
11+
<DocumentViewToggle
12+
@viewList={{this.listView}}
13+
data-test-toggle-side-panel
14+
{{on "click" this.toggleView}}
15+
/>
16+
</div>
17+
18+
<div class="uk-position-relative uk-height-1-1">
19+
<div
20+
class="uk-position-cover uk-padding-small uk-height-1-1 uk-overflow-auto"
21+
...attributes
22+
>
23+
<div class="document-view">
24+
{{! List & Grid View }}
25+
26+
{{#if this.listView}}
27+
<DocumentList
28+
@columns={{this.tableColumns}}
29+
@loading={{this.fetchedDocuments.isRunning}}
30+
@fetchedDocuments={{this.fetchedDocuments.value}}
31+
@setSort={{this.setSort}}
32+
@selectedDocuments={{this.documents.selectedDocuments}}
33+
@onDoubleClickDocument={{this.openDocument.perform}}
34+
/>
35+
{{else}}
36+
<DocumentGrid
37+
@loading={{this.fetchedDocuments.isRunning}}
38+
@fetchedDocuments={{this.fetchedDocuments.value}}
39+
@selectedDocuments={{this.documents.selectedDocuments}}
40+
@onDoubleClickDocument={{this.openDocument.perform}}
41+
/>
42+
{{/if}}
43+
</div>
44+
</div>
45+
</div>
46+
</div>
47+
</div>

0 commit comments

Comments
 (0)