@valencets/cms 0.2.2 → 0.3.0
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.
- package/dist/admin/admin-routes.d.ts +1 -0
- package/dist/admin/admin-routes.d.ts.map +1 -1
- package/dist/admin/admin-routes.js +88 -16
- package/dist/admin/admin-routes.js.map +1 -1
- package/dist/admin/edit-view.d.ts +1 -1
- package/dist/admin/edit-view.d.ts.map +1 -1
- package/dist/admin/edit-view.js +3 -2
- package/dist/admin/edit-view.js.map +1 -1
- package/dist/admin/editor/lexical-entry.d.ts.map +1 -1
- package/dist/admin/editor/lexical-entry.js +21 -36
- package/dist/admin/editor/lexical-entry.js.map +1 -1
- package/dist/admin/flash.js +2 -2
- package/dist/admin/flash.js.map +1 -1
- package/dist/admin/layout.d.ts +2 -0
- package/dist/admin/layout.d.ts.map +1 -1
- package/dist/admin/layout.js +4 -2
- package/dist/admin/layout.js.map +1 -1
- package/dist/admin/list-view.d.ts +18 -3
- package/dist/admin/list-view.d.ts.map +1 -1
- package/dist/admin/list-view.js +137 -11
- package/dist/admin/list-view.js.map +1 -1
- package/dist/admin-client.js +11 -11
- package/dist/api/local-api.d.ts +11 -2
- package/dist/api/local-api.d.ts.map +1 -1
- package/dist/api/local-api.js +15 -0
- package/dist/api/local-api.js.map +1 -1
- package/dist/api/rest-api.d.ts.map +1 -1
- package/dist/api/rest-api.js +77 -3
- package/dist/api/rest-api.js.map +1 -1
- package/dist/config/cms-config.d.ts +1 -0
- package/dist/config/cms-config.d.ts.map +1 -1
- package/dist/config/cms-config.js +1 -1
- package/dist/config/cms-config.js.map +1 -1
- package/dist/db/query-builder.d.ts +1 -0
- package/dist/db/query-builder.d.ts.map +1 -1
- package/dist/db/query-builder.js +52 -9
- package/dist/db/query-builder.js.map +1 -1
- package/dist/db/query-types.d.ts +4 -0
- package/dist/db/query-types.d.ts.map +1 -1
- package/dist/db/search-migration.d.ts +5 -0
- package/dist/db/search-migration.d.ts.map +1 -0
- package/dist/db/search-migration.js +67 -0
- package/dist/db/search-migration.js.map +1 -0
- package/dist/schema/collection.d.ts +2 -0
- package/dist/schema/collection.d.ts.map +1 -1
- package/dist/schema/collection.js.map +1 -1
- package/package.json +8 -4
package/dist/admin/list-view.js
CHANGED
|
@@ -1,25 +1,151 @@
|
|
|
1
1
|
import { escapeHtml } from './escape.js';
|
|
2
|
-
|
|
3
|
-
const
|
|
4
|
-
if (
|
|
5
|
-
|
|
2
|
+
function baseParams(args) {
|
|
3
|
+
const p = {};
|
|
4
|
+
if (args.query)
|
|
5
|
+
p.q = args.query;
|
|
6
|
+
if (args.sort)
|
|
7
|
+
p.sort = args.sort;
|
|
8
|
+
if (args.dir)
|
|
9
|
+
p.dir = args.dir;
|
|
10
|
+
if (args.filters) {
|
|
11
|
+
for (const [k, v] of Object.entries(args.filters)) {
|
|
12
|
+
if (v)
|
|
13
|
+
p[k] = v;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
return p;
|
|
17
|
+
}
|
|
18
|
+
function buildQuery(base, overrides) {
|
|
19
|
+
const merged = { ...base };
|
|
20
|
+
for (const [k, v] of Object.entries(overrides)) {
|
|
21
|
+
if (v !== '')
|
|
22
|
+
merged[k] = v;
|
|
23
|
+
else
|
|
24
|
+
delete merged[k];
|
|
25
|
+
}
|
|
26
|
+
return new URLSearchParams(merged).toString();
|
|
27
|
+
}
|
|
28
|
+
function renderSearchBar(args) {
|
|
29
|
+
const val = escapeHtml(args.query ?? '');
|
|
30
|
+
return `<form method="GET" class="list-search">
|
|
31
|
+
<input type="search" name="q" value="${val}" placeholder="Search\u2026" class="form-input">
|
|
32
|
+
<button type="submit" class="btn btn-primary">Search</button>
|
|
33
|
+
</form>`;
|
|
34
|
+
}
|
|
35
|
+
function sortLink(args, fieldName, label) {
|
|
36
|
+
const isActive = args.sort === fieldName;
|
|
37
|
+
const nextDir = isActive && args.dir === 'asc' ? 'desc' : 'asc';
|
|
38
|
+
const arrow = isActive ? (args.dir === 'asc' ? ' \u25b2' : ' \u25bc') : '';
|
|
39
|
+
const base = baseParams(args);
|
|
40
|
+
const qs = buildQuery(base, { sort: fieldName, dir: nextDir });
|
|
41
|
+
return `<a href="?${qs}">${escapeHtml(label)}${arrow}</a>`;
|
|
42
|
+
}
|
|
43
|
+
function renderSelectFilter(args, f) {
|
|
44
|
+
const name = `filter_${f.name}`;
|
|
45
|
+
const current = args.filters?.[name] ?? '';
|
|
46
|
+
const options = f.options.map(o => {
|
|
47
|
+
const sel = current === o.value ? ' selected' : '';
|
|
48
|
+
return `<option value="${escapeHtml(o.value)}"${sel}>${escapeHtml(o.label)}</option>`;
|
|
49
|
+
}).join('');
|
|
50
|
+
return `<label class="list-filter-label">${escapeHtml(f.label ?? f.name)}
|
|
51
|
+
<select name="${name}" class="form-select" onchange="this.form.submit()">
|
|
52
|
+
<option value="">All</option>
|
|
53
|
+
${options}
|
|
54
|
+
</select>
|
|
55
|
+
</label>`;
|
|
56
|
+
}
|
|
57
|
+
function renderBooleanFilter(args, f) {
|
|
58
|
+
const name = `filter_${f.name}`;
|
|
59
|
+
const current = args.filters?.[name] ?? '';
|
|
60
|
+
const base = baseParams(args);
|
|
61
|
+
const allQs = buildQuery(base, { [name]: '' });
|
|
62
|
+
const trueQs = buildQuery(base, { [name]: 'true' });
|
|
63
|
+
const falseQs = buildQuery(base, { [name]: 'false' });
|
|
64
|
+
const allClass = current === '' ? ' filter-active' : '';
|
|
65
|
+
const trueClass = current === 'true' ? ' filter-active' : '';
|
|
66
|
+
const falseClass = current === 'false' ? ' filter-active' : '';
|
|
67
|
+
const label = escapeHtml(f.label ?? f.name);
|
|
68
|
+
return `<span class="list-filter-label">${label}:
|
|
69
|
+
<a href="?${allQs}" class="filter-link${allClass}">All</a>
|
|
70
|
+
<a href="?${trueQs}" class="filter-link${trueClass}">Yes</a>
|
|
71
|
+
<a href="?${falseQs}" class="filter-link${falseClass}">No</a>
|
|
72
|
+
</span>`;
|
|
73
|
+
}
|
|
74
|
+
function renderFilters(args) {
|
|
75
|
+
const parts = [];
|
|
76
|
+
for (const f of args.col.fields) {
|
|
77
|
+
if (f.type === 'select')
|
|
78
|
+
parts.push(renderSelectFilter(args, f));
|
|
79
|
+
if (f.type === 'boolean')
|
|
80
|
+
parts.push(renderBooleanFilter(args, f));
|
|
81
|
+
}
|
|
82
|
+
if (parts.length === 0)
|
|
83
|
+
return '';
|
|
84
|
+
return `<form method="GET" class="list-filters">${parts.join('\n')}</form>`;
|
|
85
|
+
}
|
|
86
|
+
function paginationLink(label, page, args, disabled) {
|
|
87
|
+
if (disabled) {
|
|
88
|
+
return `<span class="pagination-link" aria-disabled="true">${escapeHtml(label)}</span>`;
|
|
6
89
|
}
|
|
90
|
+
const base = baseParams(args);
|
|
91
|
+
const qs = buildQuery(base, { page: String(page) });
|
|
92
|
+
return `<a href="?${qs}" class="pagination-link">${escapeHtml(label)}</a>`;
|
|
93
|
+
}
|
|
94
|
+
function renderPagination(args) {
|
|
95
|
+
const p = args.pagination;
|
|
96
|
+
if (p === undefined || p.totalPages <= 1)
|
|
97
|
+
return '';
|
|
98
|
+
const first = paginationLink('First', 1, args, !p.hasPrevPage);
|
|
99
|
+
const prev = paginationLink('Prev', p.page - 1, args, !p.hasPrevPage);
|
|
100
|
+
const next = paginationLink('Next', p.page + 1, args, !p.hasNextPage);
|
|
101
|
+
const last = paginationLink('Last', p.totalPages, args, !p.hasNextPage);
|
|
102
|
+
return `<nav class="pagination">
|
|
103
|
+
${first}
|
|
104
|
+
${prev}
|
|
105
|
+
<span class="pagination-info">Page ${p.page} of ${p.totalPages}</span>
|
|
106
|
+
${next}
|
|
107
|
+
${last}
|
|
108
|
+
</nav>`;
|
|
109
|
+
}
|
|
110
|
+
function renderTable(args) {
|
|
111
|
+
const { col, docs } = args;
|
|
7
112
|
const displayFields = col.fields.slice(0, 3);
|
|
8
|
-
const headerCells = displayFields.map(f =>
|
|
113
|
+
const headerCells = displayFields.map(f => {
|
|
114
|
+
const label = f.label ?? f.name;
|
|
115
|
+
return `<th>${sortLink(args, f.name, label)}</th>`;
|
|
116
|
+
}).join('');
|
|
9
117
|
const rows = docs.map(doc => {
|
|
10
118
|
const cells = displayFields.map(f => `<td>${escapeHtml(String(doc[f.name] ?? ''))}</td>`).join('');
|
|
11
119
|
const safeId = escapeHtml(doc.id);
|
|
12
120
|
const safeSlug = escapeHtml(col.slug);
|
|
13
121
|
return `<tr><td><a href="/admin/${safeSlug}/${safeId}/edit">${safeId.slice(0, 8)}\u2026</a></td>${cells}<td class="actions-cell"><a href="/admin/${safeSlug}/${safeId}/edit" class="action-link">Edit</a></td></tr>`;
|
|
14
122
|
}).join('\n');
|
|
15
|
-
return
|
|
16
|
-
<div class="list-header">
|
|
17
|
-
<span></span>
|
|
18
|
-
<a href="/admin/${escapeHtml(col.slug)}/new" class="btn btn-primary">New ${escapeHtml(col.labels?.singular ?? col.slug)}</a>
|
|
19
|
-
</div>
|
|
20
|
-
<table>
|
|
123
|
+
return `<table>
|
|
21
124
|
<thead><tr><th>ID</th>${headerCells}<th>Actions</th></tr></thead>
|
|
22
125
|
<tbody>${rows}</tbody>
|
|
23
126
|
</table>`;
|
|
24
127
|
}
|
|
128
|
+
export function renderListView(args) {
|
|
129
|
+
const { col, docs } = args;
|
|
130
|
+
const label = escapeHtml(col.labels?.plural ?? col.slug);
|
|
131
|
+
const safeSlug = escapeHtml(col.slug);
|
|
132
|
+
const singularLabel = escapeHtml(col.labels?.singular ?? col.slug);
|
|
133
|
+
if (docs.length === 0 && !args.query && !args.filters) {
|
|
134
|
+
return `<div class="empty-state"><p>No ${label} found.</p><a href="/admin/${safeSlug}/new">Create one</a></div>`;
|
|
135
|
+
}
|
|
136
|
+
const searchBar = renderSearchBar(args);
|
|
137
|
+
const filters = renderFilters(args);
|
|
138
|
+
const table = docs.length === 0
|
|
139
|
+
? `<div class="empty-state"><p>No ${label} found.</p></div>`
|
|
140
|
+
: renderTable(args);
|
|
141
|
+
const pagination = renderPagination(args);
|
|
142
|
+
return `
|
|
143
|
+
<div class="list-header">
|
|
144
|
+
${searchBar}
|
|
145
|
+
<a href="/admin/${safeSlug}/new" class="btn btn-primary">New ${singularLabel}</a>
|
|
146
|
+
</div>
|
|
147
|
+
${filters}
|
|
148
|
+
${table}
|
|
149
|
+
${pagination}`;
|
|
150
|
+
}
|
|
25
151
|
//# sourceMappingURL=list-view.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-view.js","sourceRoot":"","sources":["../../src/admin/list-view.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"list-view.js","sourceRoot":"","sources":["../../src/admin/list-view.ts"],"names":[],"mappings":"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"}
|