diff --git a/src/backend/bigquery/bigquery.test.ts b/src/backend/bigquery/bigquery.test.ts index f159b580..a03b25a9 100644 --- a/src/backend/bigquery/bigquery.test.ts +++ b/src/backend/bigquery/bigquery.test.ts @@ -41,6 +41,7 @@ describe('[Function] bigQuery', () => { name: 'name', locale: 'locale', taxon: 'taxon', + person: 'person', organisation: 'organisation', link: 'link', } @@ -59,6 +60,7 @@ describe('[Function] bigQuery', () => { name: 'name', locale: 'locale', taxon: 'taxon', + person: 'person', organisation: 'organisation', link: 'link', }, @@ -75,6 +77,9 @@ describe('[Function] sendInitQuery', () => { .mockResolvedValueOnce([ [{ name: 'taxon1' }, { name: 'taxon2' }, { name: 'taxon3' }], ]) + .mockResolvedValueOnce([ + [{ name: 'person1' }, { name: 'person2' }, { name: 'person3' }], + ]) .mockResolvedValueOnce([ [{ title: 'org1' }, { title: 'org2' }, { title: 'org3' }], ]) @@ -90,7 +95,7 @@ describe('[Function] sendInitQuery', () => { ]) const result = await sendInitQuery() - expect(BigQuery.prototype.query).toHaveBeenCalledTimes(5) + expect(BigQuery.prototype.query).toHaveBeenCalledTimes(6) expect(BigQuery.prototype.query).toHaveBeenNthCalledWith(1, { query: ` @@ -108,6 +113,14 @@ describe('[Function] sendInitQuery', () => { location: 'europe-west2', params: {}, }) + expect(BigQuery.prototype.query).toHaveBeenNthCalledWith(2, { + query: ` + SELECT DISTINCT title + FROM \`search.person\` + `, + location: 'europe-west2', + params: {}, + }) expect(BigQuery.prototype.query).toHaveBeenNthCalledWith(3, { query: ` SELECT DISTINCT title @@ -136,6 +149,7 @@ describe('[Function] sendInitQuery', () => { expect(result).toEqual({ locales: ['', 'en', 'cy', 'fr', 'de'], taxons: ['taxon1', 'taxon2', 'taxon3'], + people: ['person1', 'person2', 'person3'], organisations: ['org1', 'org2', 'org3'], documentTypes: ['dt1', 'dt2', 'dt3'], governments: ['gov1', 'gov2', 'gov3'], @@ -150,6 +164,7 @@ describe('[Function] sendSearchQuery', () => { selectedWords: 'keyword1 keyword2', excludedWords: 'excluded1 excluded2', taxon: 'taxon', + person: 'person', publishingOrganisation: 'organisation', language: 'en', documentType: '', @@ -184,6 +199,7 @@ describe('[Function] sendSearchQuery', () => { locale: 'en', organisation: 'organisation', taxon: 'taxon', + person: 'person', }, }) }) @@ -207,6 +223,31 @@ describe('[Function] sendSearchQuery', () => { locale: 'en', organisation: 'organisation', taxon: 'taxon', + person: 'person', + }, + }) + }) + it('Calls the appropriate queries with Person search type', async () => { + jest.spyOn(buildSqlQuery, 'buildSqlQuery').mockReturnValue('query') + ;(BigQuery.prototype.query as jest.Mock) + .mockResolvedValueOnce(['Some result']) + .mockResolvedValueOnce(['Some result']) + await sendSearchQuery(makeSearchParams({ searchType: SearchType.Person })) + expect(BigQuery.prototype.query).toHaveBeenCalledTimes(1) + expect(BigQuery.prototype.query).toHaveBeenNthCalledWith(1, { + query: 'query', + location: 'europe-west2', + params: { + excluded_keyword0: 'excluded1', + excluded_keyword1: 'excluded2', + politicalStatus: 'any', + keyword0: 'keyword1', + keyword1: 'keyword2', + link: 'link', + locale: 'en', + organisation: 'organisation', + taxon: 'taxon', + person: 'person', }, }) }) @@ -232,6 +273,7 @@ describe('[Function] sendSearchQuery', () => { locale: 'en', organisation: 'organisation', taxon: 'taxon', + person: 'person', }, }) }) diff --git a/src/backend/bigquery/bigquery.ts b/src/backend/bigquery/bigquery.ts index 051bacd3..b734f99c 100644 --- a/src/backend/bigquery/bigquery.ts +++ b/src/backend/bigquery/bigquery.ts @@ -43,6 +43,9 @@ export const bigQuery = async function (userQuery: string, options?: any) { if (options.taxon) { params.taxon = options.taxon } + if (options.person) { + params.person = options.person + } if (options.organisation) { params.organisation = options.organisation } @@ -79,33 +82,44 @@ export const bigQuery = async function (userQuery: string, options?: any) { const sendInitQuery = async function (): Promise { let bqLocales: any, bqTaxons: any, + bqPeople: any, bqOrganisations: any, bqDocumentTypes: any, bqGovernments: any try { - ;[bqLocales, bqTaxons, bqOrganisations, bqDocumentTypes, bqGovernments] = - await Promise.all([ - bigQuery(` + ;[ + bqLocales, + bqTaxons, + bqPeople, + bqOrganisations, + bqDocumentTypes, + bqGovernments, + ] = await Promise.all([ + bigQuery(` SELECT DISTINCT locale FROM \`search.locale\` `), - bigQuery(` + bigQuery(` SELECT DISTINCT name FROM \`search.taxon\` `), - bigQuery(` + bigQuery(` + SELECT DISTINCT title + FROM \`search.person\` + `), + bigQuery(` SELECT DISTINCT title FROM \`search.organisation\` `), - bigQuery(` + bigQuery(` SELECT DISTINCT document_type FROM \`search.document_type\` `), - bigQuery(` + bigQuery(` SELECT DISTINCT title FROM \`search.government\` `), - ]) + ]) } catch (error) { log.error(error, 'Error in sendInitQueryError') } @@ -116,6 +130,7 @@ const sendInitQuery = async function (): Promise { .filter((locale: string) => locale !== 'en' && locale !== 'cy') ), taxons: bqTaxons.map((taxon: any) => taxon.name), + people: bqPeople.map((person: any) => person.title), organisations: bqOrganisations.map( (organisation: any) => organisation.title ), @@ -135,6 +150,7 @@ const sendSearchQuery = async function ( const query = buildSqlQuery(searchParams, keywords, excludedKeywords) const locale = languageCode(searchParams.language) const taxon = searchParams.taxon + const person = searchParams.person const organisation = searchParams.publishingOrganisation const documentType = searchParams.documentType const link = searchParams.linkSearchUrl @@ -147,6 +163,7 @@ const sendSearchQuery = async function ( excludedKeywords, locale, taxon, + person, organisation, link, phoneNumber, diff --git a/src/backend/bigquery/buildSqlQuery.test.ts b/src/backend/bigquery/buildSqlQuery.test.ts index ae4db2a5..8eb2e873 100644 --- a/src/backend/bigquery/buildSqlQuery.test.ts +++ b/src/backend/bigquery/buildSqlQuery.test.ts @@ -24,6 +24,7 @@ const prefix = (keywords?: string[], link?: string) => ` withdrawn_explanation, page_views, taxons, + people, primary_organisation, organisations AS all_organisations, government, @@ -76,6 +77,7 @@ const makeParams = (opts = {}) => selectedWords: '', excludedWords: '', taxon: '', + person: '', publishingOrganisation: '', language: '', documentType: '', @@ -230,6 +232,26 @@ describe('buildSqlQuery', () => { expect(queryFmt(query)).toEqual(queryFmt(expected)) }) + it('can filter by any person', () => { + const searchParams: SearchParams = makeParams({ + person: 'whoever', + }) + const keywords: string[] = [] + const excludedKeywords: string[] = [] + + const query = buildSqlQuery(searchParams, keywords, excludedKeywords) + const expectedClauses = ` + AND EXISTS + ( + SELECT 1 FROM UNNEST (people) AS person + WHERE person = @person + ) + ` + const expected = expectedQuery(expectedClauses, keywords) + + expect(queryFmt(query)).toEqual(queryFmt(expected)) + }) + it('can filter by any organisation', () => { const searchParams: SearchParams = makeParams({ publishingOrganisation: 'whatever', @@ -279,6 +301,7 @@ describe('buildSqlQuery', () => { politicalStatus: 'political', language: 'whatever', taxon: 'whatever', + person: 'whoever', publishingOrganisation: 'whatever', linkSearchUrl: link, government: '2015 Conservative government', @@ -298,6 +321,11 @@ describe('buildSqlQuery', () => { SELECT 1 FROM UNNEST (taxons) AS taxon WHERE taxon = @taxon ) + AND EXISTS + ( + SELECT 1 FROM UNNEST (people) AS person + WHERE person = @person + ) AND EXISTS ( SELECT 1 FROM UNNEST (organisations) AS link diff --git a/src/backend/bigquery/buildSqlQuery.ts b/src/backend/bigquery/buildSqlQuery.ts index 3f8c0219..2a261d3f 100644 --- a/src/backend/bigquery/buildSqlQuery.ts +++ b/src/backend/bigquery/buildSqlQuery.ts @@ -136,6 +136,17 @@ export const buildSqlQuery = function ( ` } + let personClause = '' + if (searchParams.person !== '') { + personClause = ` + AND EXISTS + ( + SELECT 1 FROM UNNEST (people) AS person + WHERE person = @person + ) + ` + } + let organisationClause = '' if (searchParams.publishingOrganisation !== '') { organisationClause = ` @@ -206,6 +217,7 @@ export const buildSqlQuery = function ( withdrawn_explanation, page_views, taxons, + people, primary_organisation, organisations AS all_organisations, government, @@ -219,6 +231,7 @@ export const buildSqlQuery = function ( ${publishingAppClause} ${localeClause} ${taxonClause} + ${personClause} ${organisationClause} ${linkClause} ${phoneNumberClause} diff --git a/src/backend/constants/routes.ts b/src/backend/constants/routes.ts index 9b63fd16..3082a9ec 100644 --- a/src/backend/constants/routes.ts +++ b/src/backend/constants/routes.ts @@ -11,6 +11,7 @@ export enum Route { getInitData = '/get-init-data', searchApi = '/search', searchTaxon = '/taxon', + searchPerson = '/person', downloadCSV = '/csv', login = '/login', loginCallback = '/auth/gds/callback', diff --git a/src/backend/utils/csv.ts b/src/backend/utils/csv.ts index 447c01d2..24c800d8 100644 --- a/src/backend/utils/csv.ts +++ b/src/backend/utils/csv.ts @@ -38,6 +38,10 @@ const csvFieldFormatters: Record = { name: 'Topic tags', format: formatNames, }, + people: { + name: 'People', + format: identity, + }, primary_organisation: { name: 'Primary publishing organisation', format: identity, diff --git a/src/backend/utils/getParams.test.ts b/src/backend/utils/getParams.test.ts index 61fc0d80..db1cce2d 100644 --- a/src/backend/utils/getParams.test.ts +++ b/src/backend/utils/getParams.test.ts @@ -14,6 +14,7 @@ describe('getParams', () => { 'selected-words': 'some selected-words', 'excluded-words': 'some excluded-words', taxon: 'some taxon', + person: 'some person', 'publishing-organisation': 'some publishing-organisation', language: 'some language', 'case-sensitive': 'true', @@ -35,6 +36,7 @@ describe('getParams', () => { selectedWords: 'some selected-words', excludedWords: 'some excluded-words', taxon: 'some taxon', + person: 'some person', publishingOrganisation: 'some publishing-organisation', caseSensitive: true, documentType: 'some document-type', @@ -56,6 +58,7 @@ describe('getParams', () => { 'selected-words': '', 'excluded-words': '', taxon: '', + person: '', 'publishing-organisation': '', language: '', 'case-sensitive': 'true', @@ -82,6 +85,7 @@ describe('getParams', () => { publishingOrganisation: '', publishingStatus: '', taxon: '', + person: '', selectedWords: '', keywordLocation: 'all', documentType: '', diff --git a/src/backend/utils/getParams.ts b/src/backend/utils/getParams.ts index ea3c26a4..cbd44915 100644 --- a/src/backend/utils/getParams.ts +++ b/src/backend/utils/getParams.ts @@ -21,6 +21,7 @@ export const getParams = (req: express.Request): SearchParams => { const excludedWords = sanitiseInput(req.query[UrlParams.ExcludedWords] as string) || '' const taxon = sanitiseInput(req.query[UrlParams.Taxon] as string) || '' + const person = sanitiseInput(req.query[UrlParams.Person] as string) || '' const publishingOrganisation = sanitiseInput(req.query[UrlParams.PublishingOrganisation] as string) || '' const language = sanitiseInput(req.query[UrlParams.Language] as string) || '' @@ -60,6 +61,7 @@ export const getParams = (req: express.Request): SearchParams => { selectedWords, excludedWords, taxon, + person, publishingOrganisation, language, documentType, diff --git a/src/common/types/search-api-types.ts b/src/common/types/search-api-types.ts index 03f6e1c7..ad0e4dc5 100644 --- a/src/common/types/search-api-types.ts +++ b/src/common/types/search-api-types.ts @@ -4,6 +4,7 @@ export enum UrlParams { SelectedWords = 'selected-words', ExcludedWords = 'excluded-words', Taxon = 'taxon', + Person = 'person', PublishingOrganisation = 'publishing-organisation', CaseSensitive = 'case-sensitive', DocumentType = 'document-type', @@ -23,6 +24,7 @@ export enum SearchType { PhoneNumber = 'phone-number', Organisation = 'organisation', Taxon = 'taxon', + Person = 'person', Language = 'language', Advanced = 'advanced', Results = 'results', @@ -64,6 +66,7 @@ export type SearchParams = { selectedWords: string // list of words to search excludedWords: string // list of words to exclude taxon: string // taxon to search in + person: string // person whose pages to search publishingOrganisation: string // organisation to search in language: string // the language to search for documentType: string // documentTypeto search in @@ -83,6 +86,7 @@ export type SearchResults = unknown[] export type InitResults = { taxons: string[] + people: string[] locales: string[] organisations: string[] documentTypes: string[] diff --git a/src/frontend/events.ts b/src/frontend/events.ts index b0518991..7f3f5449 100644 --- a/src/frontend/events.ts +++ b/src/frontend/events.ts @@ -40,6 +40,7 @@ const updateStateFromSideFilters = () => { 'side-filters-excluded-keywords' ) state.searchParams.taxon = getFormInputValue('side-filters-taxon') + state.searchParams.person = getFormInputValue('side-filters-person') state.searchParams.publishingOrganisation = getFormInputValue( 'side-filters-publishing-organisation' ) @@ -117,6 +118,7 @@ const updateStateFromSearchFilters = () => { 'search-filters-political-status' ) as PoliticalStatus state.searchParams.taxon = getFormInputValue('search-filters-taxon') + state.searchParams.person = getFormInputValue('search-filters-person') state.searchParams.government = getFormInputValue('search-filters-government') state.searchParams.publishingStatus = (getFormInputValue( @@ -133,6 +135,7 @@ const resetFilters = () => { [SearchType.PhoneNumber]: 'phoneNumber', [SearchType.Organisation]: 'publishingOrganisation', [SearchType.Taxon]: 'taxon', + [SearchType.Person]: 'person', [SearchType.Language]: 'language', } @@ -152,6 +155,7 @@ const resetFilters = () => { publishingOrganisation: initialSearchParams.publishingOrganisation, documentType: initialSearchParams.documentType, taxon: initialSearchParams.taxon, + person: initialSearchParams.person, language: initialSearchParams.language, government: initialSearchParams.government, publishingStatus: initialSearchParams.publishingStatus, @@ -170,6 +174,7 @@ const handleSearchTabClick = (id: string) => { 'search-links': SearchType.Link, 'search-phone-numbers': SearchType.PhoneNumber, 'search-taxons': SearchType.Taxon, + 'search-people': SearchType.Person, 'search-orgs': SearchType.Organisation, 'search-langs': SearchType.Language, 'search-adv': SearchType.Advanced, @@ -370,6 +375,7 @@ const getQueryStringFromSearchParams = function () { }, documentType: { condition: (v) => v, param: UrlParams.DocumentType }, taxon: { condition: (v) => v !== '', param: UrlParams.Taxon }, + person: { condition: (v) => v !== '', param: UrlParams.Person }, publishingApplication: { condition: (v) => v !== PublishingApplication.Any, param: UrlParams.PublishingApplication, @@ -430,6 +436,7 @@ const getQueryStringFromSearchParams = function () { 'documentType', 'publishingApplication', 'taxon', + 'person', 'publishingStatus', 'politicalStatus', 'language', diff --git a/src/frontend/main.ts b/src/frontend/main.ts index 00a31109..edc4771b 100644 --- a/src/frontend/main.ts +++ b/src/frontend/main.ts @@ -26,10 +26,11 @@ const signon = async function () { } const getInitialData = async function () { - console.log('retrieving taxons, locales and organisations') + console.log('retrieving taxons, people, locales and organisations') const apiResponse = await fetchWithTimeout('/get-init-data') if ( apiResponse.taxons.length === 0 || + apiResponse.people.length === 0 || apiResponse.locales.length === 3 || apiResponse.organisations.length === 0 ) { @@ -43,6 +44,7 @@ const fetchInitialData = async function () { try { const dbInitResults = await getInitialData() state.taxons = dbInitResults.taxons + state.people = dbInitResults.people state.organisations = dbInitResults.organisations state.locales = dbInitResults.locales state.documentTypes = dbInitResults.documentTypes @@ -68,6 +70,7 @@ const fetchInitialData = async function () { (state.searchParams.language !== '' && state.searchParams.language !== defaultAllLanguagesOption) || state.searchParams.taxon !== '' || + state.searchParams.person !== '' || state.searchParams.publishingOrganisation !== '' || state.searchParams.linkSearchUrl !== '' || state.searchParams.phoneNumber !== '' || diff --git a/src/frontend/scss/main.scss b/src/frontend/scss/main.scss index 6b93c712..7277b13b 100644 --- a/src/frontend/scss/main.scss +++ b/src/frontend/scss/main.scss @@ -121,6 +121,7 @@ pre { .organisation-search, .taxon-search, + .person-search, .language-search, .links-search { display: grid; @@ -185,6 +186,10 @@ h2:focus-visible { background: white; } +#person-label { + background: white; +} + #keyword-search { margin-top: 20px; } diff --git a/src/frontend/search-api.ts b/src/frontend/search-api.ts index e27394d7..236a80fe 100644 --- a/src/frontend/search-api.ts +++ b/src/frontend/search-api.ts @@ -20,6 +20,7 @@ const makeURLfromSearchParams = function (searchParams: SearchParams): string { if (searchParams.excludedWords !== '') usp.set(UrlParams.ExcludedWords, searchParams.excludedWords) if (searchParams.taxon !== '') usp.set(UrlParams.Taxon, searchParams.taxon) + if (searchParams.person !== '') usp.set(UrlParams.Person, searchParams.person) if (searchParams.publishingOrganisation !== '') usp.set( UrlParams.PublishingOrganisation, diff --git a/src/frontend/state.ts b/src/frontend/state.ts index 2a3de4ff..358b19e1 100644 --- a/src/frontend/state.ts +++ b/src/frontend/state.ts @@ -33,6 +33,7 @@ export const initialSearchParams: SearchParams = { selectedWords: '', excludedWords: '', taxon: '', + person: '', publishingOrganisation: '', language: defaultAllLanguagesOption, documentType: '', @@ -70,6 +71,7 @@ const initState = () => { let newState: State = { searchParams: JSON.parse(JSON.stringify(initialSearchParams)), // deep copy taxons: [], // list of names of all the taxons + people: [], // list of names of all people locales: [], // all the languages found in the content store organisations: [], // list of names of all the organisations systemErrorText: null, @@ -142,6 +144,7 @@ const setStateSearchParamsFromURL = function (): void { UrlParams.PhoneNumber ) state.searchParams.taxon = getURLParamOrFallback('taxon', UrlParams.Taxon) + state.searchParams.person = getURLParamOrFallback('person', UrlParams.Person) state.searchParams.publishingOrganisation = getURLParamOrFallback( 'publishingOrganisation', UrlParams.PublishingOrganisation @@ -198,6 +201,7 @@ const searchStateIsUnset = function (): boolean { (state.searchParams.language === '' || state.searchParams.language === defaultAllLanguagesOption) && state.searchParams.taxon === '' && + state.searchParams.person === '' && state.searchParams.publishingOrganisation === '' && state.searchParams.linkSearchUrl === '' && state.searchParams.phoneNumber === '' && @@ -239,6 +243,7 @@ const resetSearchState = function (): void { state.searchParams.selectedWords = '' state.searchParams.excludedWords = '' state.searchParams.taxon = '' + state.searchParams.person = '' state.searchParams.publishingOrganisation = '' state.searchParams.language = defaultAllLanguagesOption state.searchParams.keywordLocation = KeywordLocation.All diff --git a/src/frontend/types/state-types.ts b/src/frontend/types/state-types.ts index bbcf0c43..cbf97763 100644 --- a/src/frontend/types/state-types.ts +++ b/src/frontend/types/state-types.ts @@ -12,6 +12,7 @@ export type Field = | 'first_published_at' | 'public_updated_at' | 'taxons' + | 'people' | 'primary_organisation' | 'all_organisations' | 'page_views' @@ -34,6 +35,7 @@ export type Sorting = Partial< export interface State { searchParams: SearchParams taxons: string[] + people: string[] organisations: string[] locales: string[] governments: string[] diff --git a/src/frontend/utils/queryDescription.test.ts b/src/frontend/utils/queryDescription.test.ts index a05f1e2f..e3a661ff 100644 --- a/src/frontend/utils/queryDescription.test.ts +++ b/src/frontend/utils/queryDescription.test.ts @@ -26,6 +26,7 @@ const DEFAULT_SEARCH_PARAMS: SearchParams = { selectedWords: '', excludedWords: '', taxon: '', + person: '', publishingOrganisation: '', language: '', documentType: '', @@ -87,6 +88,19 @@ describe('queryDescription', () => { ) }) + it('should generate description for person', () => { + const params = { + searchParams: makeParams({ + person: 'The Rt Hon Rishi Sunak MP', + }), + includeMarkup: true, + } + const description = queryDescription(params) + expect(description).toContain( + 'are associated with The Rt Hon Rishi Sunak MP' + ) + }) + it('should handle publishingStatus', () => { const params = { searchParams: makeParams({ diff --git a/src/frontend/utils/queryDescription.ts b/src/frontend/utils/queryDescription.ts index 6a82ea7b..8d241a68 100644 --- a/src/frontend/utils/queryDescription.ts +++ b/src/frontend/utils/queryDescription.ts @@ -42,6 +42,10 @@ export const queryDescription = ({ clauses.push( `belong to the ${makeBold(searchParams.taxon, includeMarkup)} topic tag` ) + if (searchParams.person !== '') + clauses.push( + `are associated with ${makeBold(searchParams.person, includeMarkup)}` + ) if (searchParams.publishingOrganisation !== '') clauses.push( `are published by the ${makeBold( diff --git a/src/frontend/view/postInitScripts.ts b/src/frontend/view/postInitScripts.ts index e8dfebd3..f449ab29 100644 --- a/src/frontend/view/postInitScripts.ts +++ b/src/frontend/view/postInitScripts.ts @@ -24,6 +24,8 @@ export default function govukPostInitScripts() { 'search-filters-publishing-organisation': 'an organisation', 'side-filters-taxon': 'a topic tag', 'search-filters-taxon': 'a topic tag', + 'side-filters-person': 'a person', + 'search-filters-person': 'a person', } var getPlaceholder = (id) => 'Start typing ' + placeholderMapping[id] || "a " + id diff --git a/src/frontend/view/utils.ts b/src/frontend/view/utils.ts index 91d6a737..ad24c512 100644 --- a/src/frontend/view/utils.ts +++ b/src/frontend/view/utils.ts @@ -50,6 +50,10 @@ export const fieldFormatters: Record = { name: 'Topic tags', format: formatNames, }, + people: { + name: 'People', + format: (x: string) => x, + }, primary_organisation: { name: 'Primary publishing organisation', format: (x: string) => x, diff --git a/src/frontend/view/view-search-panel.ts b/src/frontend/view/view-search-panel.ts index c2b50a26..cd2fe473 100644 --- a/src/frontend/view/view-search-panel.ts +++ b/src/frontend/view/view-search-panel.ts @@ -18,6 +18,7 @@ const viewSearchPanel = () => { [SearchType.PhoneNumber]: viewPhoneNumberSearchPanel, [SearchType.Organisation]: viewOrganisationSearchPanel, [SearchType.Taxon]: viewTaxonSearchPanel, + [SearchType.Person]: viewPersonSearchPanel, [SearchType.Language]: viewLanguageSearchPanel, [SearchType.Advanced]: viewAdvancedSearchPanel, [SearchType.Results]: viewAdvancedSearchPanel, @@ -57,6 +58,7 @@ const viewKeywordSearchPanel = () => ` ${viewDocumentType()} ${viewPublishingAppSelector()} ${viewTaxonSelector()} + ${viewPersonSelector()} ${viewPublishingStatusSelector()} ${viewLanguageSelector()} ${viewPoliticalStatusSelector()} @@ -90,6 +92,7 @@ export const viewAdvancedSearchPanel = (onTheSide = true) => { ${viewDocumentType()} ${viewPublishingAppSelector()} ${viewTaxonSelector()} + ${viewPersonSelector()} ${viewPublishingStatusSelector()} ${viewLanguageSelector()} ${viewPoliticalStatusSelector()} @@ -126,6 +129,7 @@ const viewLinkSearchPanel = () => `