Add ISAC registry search controls
This commit is contained in:
@@ -2,7 +2,7 @@ import { auditRecord, recordIsacAudit } from '$lib/server/audit';
|
||||
import { requireDataView, requirePermission } from '$lib/server/auth/authorization';
|
||||
import { getSessionUser } from '$lib/server/auth/session';
|
||||
import { getDatabase } from '$lib/server/database';
|
||||
import { getPagination } from '$lib/server/pagination';
|
||||
import { getPagination, getRegistrySearch } from '$lib/server/pagination';
|
||||
import { fail } from '@sveltejs/kit';
|
||||
import { randomUUID } from 'node:crypto';
|
||||
import type { Actions, PageServerLoad } from './$types';
|
||||
@@ -56,6 +56,7 @@ export const load: PageServerLoad = async ({ cookies, url }) => {
|
||||
? requestedFilter : '';
|
||||
const conditions: string[] = [];
|
||||
const args: unknown[] = [];
|
||||
const { search, pattern } = getRegistrySearch(url);
|
||||
if (filter === 'active' || filter === 'archived') conditions.push(`active=${filter === 'active' ? 1 : 0}`);
|
||||
else if (qualities.some((quality) => quality.toLowerCase() === filter)) {
|
||||
conditions.push('quality=?');
|
||||
@@ -64,6 +65,10 @@ export const load: PageServerLoad = async ({ cookies, url }) => {
|
||||
conditions.push('primary_attribute_type=?');
|
||||
args.push(attributeTypes.find((type) => type.toLowerCase() === filter));
|
||||
}
|
||||
if (search) {
|
||||
conditions.push("name LIKE ? ESCAPE '\\' COLLATE NOCASE");
|
||||
args.push(pattern);
|
||||
}
|
||||
const where = conditions.length ? `WHERE ${conditions.join(' AND ')}` : '';
|
||||
const [summary, filtered] = await Promise.all([
|
||||
(await database.prepare(`SELECT COUNT(*) AS total,
|
||||
@@ -98,6 +103,8 @@ export const load: PageServerLoad = async ({ cookies, url }) => {
|
||||
filter === 'archived' ? false
|
||||
: qualities.some((quality) => quality.toLowerCase() === filter) ? String(item.quality).toLowerCase() === filter
|
||||
: attributeTypes.some((type) => type.toLowerCase() === filter) ? String(item.attributeType).toLowerCase() === filter : true
|
||||
).filter((item) =>
|
||||
!search || String(item.name).toLocaleLowerCase().includes(search.toLocaleLowerCase())
|
||||
).map((protocol) => ({
|
||||
...protocol,
|
||||
iconUrl: '',
|
||||
@@ -131,7 +138,7 @@ export const load: PageServerLoad = async ({ cookies, url }) => {
|
||||
) ?? { id: '', quality, primary_attribute_type: attributeType, effects: [] })),
|
||||
stats: [...pending.filter((item) => item.kind === 'attribute'), ...stats],
|
||||
triggers: [...pending.filter((item) => item.kind === 'trigger'), ...triggers],
|
||||
summary: { ...summary, total: Number(summary?.total ?? 0) + pending.filter((item) => item.kind === 'protocol').length, pending: pending.filter((item) => item.kind === 'protocol').length }, filter, pagination
|
||||
summary: { ...summary, total: Number(summary?.total ?? 0) + pending.filter((item) => item.kind === 'protocol').length, pending: pending.filter((item) => item.kind === 'protocol').length }, filter, pagination, search
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user