Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion packages/objectql/src/engine.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1916,7 +1916,7 @@ export class ObjectQL implements IDataEngine {
const _searchFilter = expandSearchToFilter(_searchRaw, {
fields: _findSchema.fields as any,
searchableFields: (_findSchema as any).searchableFields,
requestedFields: Array.isArray(_reqFields) ? _reqFields : undefined,
requestedFields: _reqFields,
displayField: (_findSchema as any).displayNameField,
});
if (_searchFilter) {
Expand Down
9 changes: 9 additions & 0 deletions packages/objectql/src/search-filter.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,15 @@ describe('resolveSearchFields', () => {
expect(f).toEqual(['industry']);
});

it('accepts a comma-separated requestedFields string (URL param form)', () => {
const f = resolveSearchFields({
fields: accountFields,
searchableFields: ['name', 'industry', 'status'],
requestedFields: 'industry, status',
});
expect(f).toEqual(['industry', 'status']);
});

it('ignores an override that resolves to nothing allowed (falls back)', () => {
const f = resolveSearchFields({
fields: accountFields,
Expand Down
13 changes: 9 additions & 4 deletions packages/objectql/src/search-filter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,10 @@ export interface ExpandSearchOptions {
fields: Record<string, SearchFieldMeta>;
/** Object-declared `searchableFields` (the canonical default set). */
searchableFields?: string[];
/** Validated `$searchFields` override — intersected with the allowed set. */
requestedFields?: string[];
/** Validated `$searchFields` override — intersected with the allowed set.
* Accepts an array or a comma-separated string (the form a URL query param
* arrives as). */
requestedFields?: string | string[];
/** Preferred display field, placed first in the auto-default. */
displayField?: string;
}
Expand Down Expand Up @@ -93,9 +95,12 @@ export function resolveSearchFields(opts: ExpandSearchOptions): string[] {
const all = opts.fields || {};
const declared = opts.searchableFields?.filter((f) => all[f]);
const allowed = declared && declared.length > 0 ? declared : autoDefaultFields(all, opts.displayField);
if (opts.requestedFields && opts.requestedFields.length > 0) {
const requested = typeof opts.requestedFields === 'string'
? opts.requestedFields.split(',').map((f) => f.trim()).filter(Boolean)
: opts.requestedFields;
if (requested && requested.length > 0) {
const allowSet = new Set(allowed);
const validated = opts.requestedFields.filter((f) => allowSet.has(f));
const validated = requested.filter((f) => allowSet.has(f));
if (validated.length > 0) return validated;
}
return allowed;
Expand Down
Loading