From ef826ad15e311df116b5b5098149628824f3b936 Mon Sep 17 00:00:00 2001 From: "Erin E. Sullivan" Date: Tue, 7 May 2024 09:42:18 -0400 Subject: [PATCH 01/12] Replacing `_.omit` with vanilla JavaScript. Restructuring file. --- src/modules/filters/reducer/index.js | 56 +++++++++++++++------------- 1 file changed, 30 insertions(+), 26 deletions(-) diff --git a/src/modules/filters/reducer/index.js b/src/modules/filters/reducer/index.js index 2f7589923..5ad056e02 100644 --- a/src/modules/filters/reducer/index.js +++ b/src/modules/filters/reducer/index.js @@ -1,11 +1,10 @@ -import _ from 'underscore'; import { ADD_FILTERS, - SET_FILTER_GROUP_ORDER, + CLEAR_ACTIVE_FILTERS, CLEAR_FILTERS, + RESET_FILTERS, SET_ACTIVE_FILTERS, - CLEAR_ACTIVE_FILTERS, - RESET_FILTERS + SET_FILTER_GROUP_ORDER } from '../actions'; const initialState = { @@ -15,9 +14,6 @@ const initialState = { }; const filtersReducer = function filterReducer (state = initialState, action) { - if (action.type === RESET_FILTERS) { - return initialState; - } if (action.type === ADD_FILTERS) { return { ...state, @@ -27,45 +23,53 @@ const filtersReducer = function filterReducer (state = initialState, action) { } }; } - if (action.type === SET_FILTER_GROUP_ORDER) { + + if (action.type === CLEAR_ACTIVE_FILTERS) { + const { [action.payload.datastoreUid]: omitted, ...remainingActive } = state.active; + + if (omitted) { + // + } + return { ...state, - order: action.payload.order + active: remainingActive }; } + if (action.type === CLEAR_FILTERS) { - return Object.assign({}, state, { + return { + ...state, groups: {} - }); + }; } + + if (action.type === RESET_FILTERS) { + return initialState; + } + if (action.type === SET_ACTIVE_FILTERS) { - /* - payload: - - datastoreUid - - filters - */ const { datastoreUid, filters } = action.payload; - const filterObjKeys = Object.keys(filters); - return { ...state, active: { ...state.active, - [datastoreUid]: filterObjKeys.reduce((acc, filterUid) => { - return { - ...acc, - [filterUid]: [].concat(filters[filterUid]) - }; - }, {}) + [datastoreUid]: Object.fromEntries(Object.entries(filters).map( + ([filterUid, filterValue]) => { + return [filterUid, [...filterValue]]; + } + )) } }; } - if (action.type === CLEAR_ACTIVE_FILTERS) { + + if (action.type === SET_FILTER_GROUP_ORDER) { return { ...state, - active: _.omit(state.active, action.payload.datastoreUid) + order: action.payload.order }; } + return state; }; From 4e953ad027257df28bbc0ea9f347dc36e24cf15c Mon Sep 17 00:00:00 2001 From: "Erin E. Sullivan" Date: Tue, 7 May 2024 09:56:47 -0400 Subject: [PATCH 02/12] Replacing `_.contain` and `_.filter` with vanilla JavaScript. --- src/modules/advanced/reducer/index.js | 35 +++++++++------------------ 1 file changed, 11 insertions(+), 24 deletions(-) diff --git a/src/modules/advanced/reducer/index.js b/src/modules/advanced/reducer/index.js index 4809a7356..4b565d17c 100644 --- a/src/modules/advanced/reducer/index.js +++ b/src/modules/advanced/reducer/index.js @@ -1,5 +1,4 @@ import * as actions from '../actions/'; -import _ from 'underscore'; const initialState = { booleanTypes: [] @@ -118,34 +117,22 @@ const advancedFieldedSearchingReducer = (state, action) => { }; const filterGroupReducer = ({ filterGroup, onlyOneFilterValue, filterValue }) => { - if (filterValue === undefined) { - return undefined; - } + if (filterValue === undefined) return undefined; - // filter group has no active filters, so add it. - if (!filterGroup || onlyOneFilterValue) { - return [].concat(filterValue); - } + // Add filter group if no active filters + if (!filterGroup || onlyOneFilterValue) return [filterValue]; - // filter group exists - if (filterGroup) { + if (filterGroup.includes(filterValue)) { // Remove filter value - if (_.contains(filterGroup, filterValue)) { - const newFilters = _.filter(filterGroup, (item) => { - return item !== filterValue; - }); - - if (newFilters.length === 0) { - return undefined; - } else { - return newFilters; - } + const newFilters = filterGroup.filter((item) => { + return item !== filterValue; + }); - // Add filter value to existing filter group list - } else { - return filterGroup.concat(filterValue); - } + return newFilters.length === 0 ? undefined : newFilters; } + + // Add filter value to existing filter group list + return [...filterGroup, filterValue]; }; const advancedFilterReducer = (state, action) => { From eedcf4d322c3cb14040bfd0463cd6afa4d10960f Mon Sep 17 00:00:00 2001 From: "Erin E. Sullivan" Date: Tue, 7 May 2024 11:09:34 -0400 Subject: [PATCH 03/12] Replacing all uses of `underscore` with vanilla JavaScript. --- .../components/FiltersContainer/getFilters.js | 84 ++++++------------- 1 file changed, 26 insertions(+), 58 deletions(-) diff --git a/src/modules/advanced/components/FiltersContainer/getFilters.js b/src/modules/advanced/components/FiltersContainer/getFilters.js index 0032e9e54..39d00b918 100644 --- a/src/modules/advanced/components/FiltersContainer/getFilters.js +++ b/src/modules/advanced/components/FiltersContainer/getFilters.js @@ -1,45 +1,13 @@ -import _ from 'underscore'; +import { findWhere } from '../../../reusable/underscore'; import store from '../../../../store'; -/* -// Example of what to return: - // Return three filters: - // - institution - // - location - // - collection - - // Any active filters? - // - no? Then use defaults - // - yes? Then scope accordingly - - [ - { - uid: 'institution', - label: 'Library', - activeFilter: 'All libraries' - filters: [ - 'All libraries' - 'William L. Clements Library' - // ... - ] - }, - { - uid: 'location', - // ... - }, - { - uid: 'collection', - // ... - } - ] -*/ -const getCatalogNarrowSearchToOptions = (data, activeFilters) => { +const getCatalogNarrowSearchToOptions = (data, activeFilters) => { function getActiveFilter ({ uid, defaultFilter, filters }) { if (activeFilters && activeFilters[uid]) { return activeFilters[uid][0]; } - if (_.contains(filters, defaultFilter)) { + if (filters.includes(defaultFilter)) { return defaultFilter; } @@ -51,7 +19,7 @@ const getCatalogNarrowSearchToOptions = (data, activeFilters) => { ? state.institution.active : state.institution.defaultInstitution; - const inst = _.findWhere(data.filters, { uid: 'institution' }); + const inst = findWhere(data.filters, { uid: 'institution' }); const instFilterLabels = inst.values.map((filter) => { return filter.label; }); @@ -61,22 +29,22 @@ const getCatalogNarrowSearchToOptions = (data, activeFilters) => { filters: instFilterLabels }); - const location = _.findWhere(inst.values, { label: instActiveFilter }); + const location = findWhere(inst.values, { label: instActiveFilter }); const locationFilterLabels = location.values.map((value) => { return value.label; }); - const locationDefault = _.findWhere(data.defaults, { uid: 'location' }); + const locationDefault = findWhere(data.defaults, { uid: 'location' }); const locationActiveFilter = getActiveFilter({ uid: 'location', defaultFilter: locationDefault.value, filters: locationFilterLabels }); - const collection = _.findWhere(location.values, { label: locationActiveFilter }); + const collection = findWhere(location.values, { label: locationActiveFilter }); const collectionFilterLabels = collection.values.map((value) => { return value.label; }); - const collectionDefault = _.findWhere(data.defaults, { uid: 'collection' }); + const collectionDefault = findWhere(data.defaults, { uid: 'collection' }); const collectionActiveFilter = getActiveFilter({ uid: 'collection', defaultFilter: collectionDefault.value, @@ -116,31 +84,31 @@ const getFilters = ({ filterGroups, activeFilters }) => { // Special case for narrowing search... if (filterGroup.uid === 'narrow_search') { const options = getCatalogNarrowSearchToOptions(filterGroup, activeFilters); - return { - ...filterGroup, - options - }; + return { ...filterGroup, options }; } + // Mapping filters and checking if they are active + const filters = filterGroup.filters.map((filterValue) => { + const isActive = activeFilters?.[filterGroup.uid]?.includes(filterValue) || false; + return { value: filterValue, isActive }; + }); + return { ...filterGroup, - filters: filterGroup.filters.map((filterValue) => { - let isActive = false; - - if (activeFilters && activeFilters[filterGroup.uid]) { - isActive = _.contains(activeFilters[filterGroup.uid], filterValue); - } - - return { - value: filterValue, - isActive - }; - }), - activeFilters: activeFilters ? activeFilters[filterGroup.uid] : [] + filters, + activeFilters: activeFilters?.[filterGroup.uid] || [] }; }); - return _.groupBy(advancedFilters, 'groupBy'); + // Group filters by 'groupBy' property + return advancedFilters.reduce((acc, filter) => { + const { groupBy } = filter; + if (!acc[groupBy]) { + acc[groupBy] = []; + } + acc[groupBy].push(filter); + return acc; + }, {}); }; export default getFilters; From 2fde13b859a07e197145012c8f25a79410e83598 Mon Sep 17 00:00:00 2001 From: "Erin E. Sullivan" Date: Tue, 7 May 2024 11:30:13 -0400 Subject: [PATCH 04/12] Replacing `underscore` with vanilla JavaScript. --- src/modules/records/reducer/index.js | 88 ++++++++++++++-------------- 1 file changed, 45 insertions(+), 43 deletions(-) diff --git a/src/modules/records/reducer/index.js b/src/modules/records/reducer/index.js index 4834f8a68..6aab562d3 100644 --- a/src/modules/records/reducer/index.js +++ b/src/modules/records/reducer/index.js @@ -1,5 +1,4 @@ import * as actions from '../actions'; -import _ from 'underscore'; const recordsInitialState = { loading: false, @@ -7,53 +6,45 @@ const recordsInitialState = { record: null }; -/* -// Use compact with ResourceAccess data to remove falsy values in the array. -// Bug tacked here: SEARCH-775 -*/ - const recordsReducer = (state = recordsInitialState, action) => { - if (action.type === actions.ADD_RECORDS) { - return { - ...state, - records: { - ...state.records, - [action.payload.datastoreUid]: action.payload.records - } - }; - } - if (action.type === actions.ADD_HOLDINGS) { const { datastoreUid, recordUid, holdings } = action.payload; - const recordIndex = _.findIndex(state.records[datastoreUid], (item) => { + // Find the record index using native JavaScript + const recordIndex = state.records[datastoreUid].findIndex((item) => { return item.uid === recordUid; }); - if (recordIndex !== -1) { // contains this record - return Object.assign({}, state, { + if (recordIndex !== -1) { // If the record is found in the array + // Construct a new records object with updated holdings + const newRecords = [ + ...state.records[datastoreUid].slice(0, recordIndex), + { + ...state.records[datastoreUid][recordIndex], + resourceAccess: holdings.filter(Boolean), // Remove falsy values using filter + loadingHoldings: false + }, + ...state.records[datastoreUid].slice(recordIndex + 1) + ]; + + return { + ...state, records: { ...state.records, - [datastoreUid]: state.records[datastoreUid] - .slice(0, recordIndex) - .concat([{ - ...state.records[datastoreUid][recordIndex], - resourceAccess: _.compact(holdings), - loadingHoldings: false - }]) - .concat(state.records[datastoreUid].slice(recordIndex + 1)) + [datastoreUid]: newRecords } - }); + }; } + // Return unchanged state if the record index is not found return state; } - if (action.type === actions.CLEAR_RECORDS) { + if (action.type === actions.ADD_RECORDS) { return { ...state, records: { ...state.records, - [action.payload]: undefined + [action.payload.datastoreUid]: action.payload.records } }; } @@ -64,18 +55,28 @@ const recordsReducer = (state = recordsInitialState, action) => { }); } - if (action.type === actions.SET_RECORD) { + if (action.type === actions.CLEAR_RECORDS) { + return { + ...state, + records: { + ...state.records, + [action.payload]: undefined + } + }; + } + + if (action.type === actions.LOADING_RECORDS) { return Object.assign({}, state, { - record: action.payload + loading: { + ...state.loading, + [action.payload.datastoreUid]: action.payload.loading + } }); } - if (action.type === actions.SET_RECORD_HOLDINGS) { + if (action.type === actions.SET_RECORD) { return Object.assign({}, state, { - record: { - ...state.record, - resourceAccess: _.compact(action.payload) - } + record: action.payload }); } @@ -88,13 +89,14 @@ const recordsReducer = (state = recordsInitialState, action) => { }); } - if (action.type === actions.LOADING_RECORDS) { - return Object.assign({}, state, { - loading: { - ...state.loading, - [action.payload.datastoreUid]: action.payload.loading + if (action.type === actions.SET_RECORD_HOLDINGS) { + return { + ...state, + record: { + ...state.record, + resourceAccess: action.payload.filter(Boolean) } - }); + }; } return state; From 0109c697e1c6af114494c77ad4a60c2a5bb3bae9 Mon Sep 17 00:00:00 2001 From: "Erin E. Sullivan" Date: Tue, 7 May 2024 12:10:40 -0400 Subject: [PATCH 05/12] Replacing `underscore` with vanilla JavaScript. Removing unused exports. --- src/modules/records/utilities/index.js | 142 +------------------------ 1 file changed, 5 insertions(+), 137 deletions(-) diff --git a/src/modules/records/utilities/index.js b/src/modules/records/utilities/index.js index ee34df0d5..e5b06ff6c 100644 --- a/src/modules/records/utilities/index.js +++ b/src/modules/records/utilities/index.js @@ -1,150 +1,18 @@ -import _ from 'underscore'; - -import config from '../../../config'; +import { findWhere } from '../../reusable/underscore'; const getField = function getField (fields, key) { - return _.findWhere(fields, { uid: key }); + return findWhere(fields, { uid: key }); }; const getFieldValue = (field) => { - let value; - - if (field !== undefined && typeof field === 'object') { - if ('value' in field) { - value = field.value; - } - } - - if (value) { - return [].concat(value); + if (field && typeof field === 'object' && 'value' in field) { + return Array.isArray(field.value) ? field.value : [field.value]; } return []; }; -const filterDisplayFields = ({ fields, type, datastore }) => { - // Find config for this datastore view type. - const fieldsConfig = _.findWhere(config.fields, { datastore }); - - // No display field(s) config for this datastore view type. - if (!fieldsConfig) { - return []; - } - - // Look up and order fields as configured. - // Will return an array of fields - return _.reduce( - fieldsConfig[type], - (previous, fieldUid) => { - const field = _.findWhere(fields, { uid: fieldUid }); - - if (field) { - // does field exist from Spectrum (back end, solr) - return previous.concat(field); - } else if (fieldsConfig.defaultFields) { - // check if field exists as default - const defaultField = _.findWhere(fieldsConfig.defaultFields, { - uid: fieldUid - }); - - if (defaultField) { - return previous.concat(defaultField); - } - } - - return previous; - }, - [] - ); -}; - -const getFullRecordDisplayFields = ({ fields, datastore }) => { - // Find config for this datastore view type. - const fieldsConfig = _.findWhere(config.fields, { datastore }); - - if (fieldsConfig.full) { - return ['standard', 'additional'].reduce( - (previous, type) => { - let fieldListOfType = []; - - if (fieldsConfig.full[type]) { - fieldListOfType = fieldsConfig.full[type].reduce( - (fieldList, fieldUid) => { - const field = _.findWhere(fields, { uid: fieldUid }); - - if (field) { - // does field exist from Spectrum (back end, solr) - return fieldList.concat(field); - } else if (fieldsConfig.defaultFields) { - // check if field exists as default - const defaultField = _.findWhere(fieldsConfig.defaultFields, { - uid: fieldUid - }); - - if (defaultField) { - return fieldList.concat(defaultField); - } - } - - return fieldList; - }, - [] - ); - } - - return { - ...previous, - [type]: fieldListOfType - }; - }, - { - standard: [], - additional: [] - } - ); - } - - return { - standard: [], - additional: [] - }; -}; - -const displayLoadingFeedback = (datastoreUid) => { - const accessConfig = _.findWhere(config.fields, { datastore: datastoreUid }); - - if (!accessConfig.access || !accessConfig.access.displayLoadingFeedback) { - return false; - } - - return accessConfig.access.displayLoadingFeedback; -}; - -const isFullRecordType = ({ datastoreUid }) => { - const accessConfig = _.findWhere(config.fields, { datastore: datastoreUid }); - - return Object.prototype.hasOwnProperty.call(accessConfig, 'full'); -}; - -const getShowAllText = ({ holdingUid, datastoreUid }) => { - const accessConfig = _.findWhere(config.fields, { datastore: datastoreUid }); - - if (accessConfig.holdings) { - const holdingsConfig = _.findWhere(accessConfig.holdings, { - uid: holdingUid - }); - return holdingsConfig.showAllName || holdingsConfig.heading; - } - - return undefined; -}; - export { getField, - getFieldValue, - filterDisplayFields, - displayLoadingFeedback, - isFullRecordType, - getShowAllText, - getFullRecordDisplayFields + getFieldValue }; From d963dde8e5ec61ce69a4f0e2185e0a10060d5186 Mon Sep 17 00:00:00 2001 From: "Erin E. Sullivan" Date: Tue, 7 May 2024 12:30:08 -0400 Subject: [PATCH 06/12] Replacing `underscore` with vanilla JavaScript. Removing unused exports. --- src/modules/lists/prejudice.js | 52 ++++++++++++++++++---------------- 1 file changed, 27 insertions(+), 25 deletions(-) diff --git a/src/modules/lists/prejudice.js b/src/modules/lists/prejudice.js index c3c7192a2..5eb548052 100644 --- a/src/modules/lists/prejudice.js +++ b/src/modules/lists/prejudice.js @@ -1,8 +1,7 @@ import Prejudice from 'prejudice'; import { Pride } from 'pride'; import config from '../../config'; -import store from './../../store'; -import _ from 'underscore'; +import store from '../../store'; import { addList } from './actions'; const prejudice = new Prejudice({ @@ -15,31 +14,22 @@ const addRecord = (record) => { prejudice.addRecord(record); }; -const removeRecord = (record) => { - prejudice.removeRecord(record); -}; - -const listRecords = () => { - return prejudice.listRecords(); +const addRecordsToList = () => { + const records = prejudice.listRecords(); + const groupedRecords = records.reduce((group, record) => { + const { datastore } = record; + group[datastore] = group[datastore] || []; + group[datastore].push(record); + return group; + }, {}); + + store.dispatch(addList(groupedRecords)); }; const clearRecords = (datastoreUid) => { prejudice.clearRecords(datastoreUid); }; -const addRecordsToList = () => { - store.dispatch(addList(_.groupBy(listRecords(), 'datastore'))); -}; - -const observer = () => { - addRecordsToList(); -}; - -const initialize = () => { - addRecordsToList(); - Pride.PreferenceEngine.registerEngine(prejudice); -}; - const createVariableStorageDriverInstance = () => { const inst = new Prejudice({ recordEngine: Pride, @@ -51,14 +41,26 @@ const createVariableStorageDriverInstance = () => { return inst; }; +const initialize = () => { + addRecordsToList(); + Pride.PreferenceEngine.registerEngine(prejudice); +}; + +const observer = () => { + addRecordsToList(); +}; + +const removeRecord = (record) => { + prejudice.removeRecord(record); +}; + prejudice.addObserver(observer); export default { - initialize, addRecord, - removeRecord, - listRecords, clearRecords, createVariableStorageDriverInstance, - instance: prejudice + initialize, + instance: prejudice, + removeRecord }; From d4d3236baab8a8dc539028af720480133bdaa1f2 Mon Sep 17 00:00:00 2001 From: "Erin E. Sullivan" Date: Tue, 7 May 2024 14:45:13 -0400 Subject: [PATCH 07/12] Replacing `underscore` with vanilla JavaScript. Removing unused exports. --- src/config/config.js | 4 +- .../components/DatastoreRoute/index.js | 12 +- src/modules/pride/index.js | 10 +- src/modules/pride/setup.js | 10 +- src/modules/pride/utils.js | 182 ++++++------------ 5 files changed, 74 insertions(+), 144 deletions(-) diff --git a/src/config/config.js b/src/config/config.js index 2bf641c14..832fbb343 100644 --- a/src/config/config.js +++ b/src/config/config.js @@ -14,7 +14,8 @@ const config = { }, { uid: 'databases', - name: 'Databases' + name: 'Databases', + slug: 'databases' }, { uid: 'onlinejournals', @@ -29,6 +30,7 @@ const config = { { uid: 'everything', name: 'Everything', + slug: 'everything', datastores: [ 'mirlyn', 'primo', diff --git a/src/modules/datastores/components/DatastoreRoute/index.js b/src/modules/datastores/components/DatastoreRoute/index.js index 601a2f420..0d4141d95 100644 --- a/src/modules/datastores/components/DatastoreRoute/index.js +++ b/src/modules/datastores/components/DatastoreRoute/index.js @@ -1,12 +1,20 @@ import React from 'react'; import { useParams, useLocation } from 'react-router-dom'; -import { isSlugADatastore, URLSearchQueryWrapper, getStateFromURL } from '../../../pride'; +import config from '../../../../config'; +import { URLSearchQueryWrapper, getStateFromURL } from '../../../pride'; import { NoMatch, DatastorePage } from '../../../pages'; function DatastoreRoute () { const { datastoreSlug } = useParams(); const location = useLocation(); - const isDatastore = isSlugADatastore(datastoreSlug); + const { list } = config.datastores; + const slugDs = list.find((datastore) => { + return datastore.slug === datastoreSlug; + }); + const uidDs = list.find((datastore) => { + return datastore.uid === datastoreSlug; + }); + const isDatastore = Boolean(slugDs || uidDs); const urlState = getStateFromURL({ location }); if (isDatastore && urlState) { diff --git a/src/modules/pride/index.js b/src/modules/pride/index.js index 79183bfea..0a9d6ab5f 100644 --- a/src/modules/pride/index.js +++ b/src/modules/pride/index.js @@ -1,16 +1,13 @@ import { initializePride, switchPrideToDatastore, runSearch } from './setup'; import { - isSlugADatastore, + getDatastoreByUid, getDatastoreUidBySlug, getDatastoreSlugByUid, - getDatastoreName, getMultiSearchRecords, getStateFromURL, requestRecord, isValidURLSearchQuery, prideParseField, - parseField, - isFieldASearchLink, requestGetThis } from './utils'; @@ -20,10 +17,9 @@ import URLSearchQueryWrapper from './components/URLSearchQueryWrapper'; export { initializePride, - isSlugADatastore, switchPrideToDatastore, runSearch, - getDatastoreName, + getDatastoreByUid, getDatastoreUidBySlug, getMultiSearchRecords, URLSearchQueryWrapper, @@ -32,8 +28,6 @@ export { requestRecord, isValidURLSearchQuery, prideParseField, - parseField, - isFieldASearchLink, requestGetThis, placeHold }; diff --git a/src/modules/pride/setup.js b/src/modules/pride/setup.js index 069bba315..29e86e8a6 100644 --- a/src/modules/pride/setup.js +++ b/src/modules/pride/setup.js @@ -29,8 +29,7 @@ import { import { addFilters, clearFilters, setFilterGroupOrder } from '../filters'; import { - getDatastoreSlug, - getDatastoreName, + getDatastoreByUid, getDatastoreUidBySlug, prideParseField } from './utils'; @@ -432,12 +431,11 @@ const setupSearches = () => { ); _.each(publicSearchObjects, function (searchObj) { - const name = getDatastoreName(searchObj.uid); - const slug = getDatastoreSlug(searchObj.uid); + const datastore = getDatastoreByUid(searchObj.uid); const ds = { uid: searchObj.uid, - name, - slug: slug || searchObj.uid, + name: datastore?.name, + slug: datastore?.slug || datastore?.uid || searchObj.uid, isMultisearch: searchObj.searches !== undefined }; diff --git a/src/modules/pride/utils.js b/src/modules/pride/utils.js index 7d14f5115..98b400a8b 100644 --- a/src/modules/pride/utils.js +++ b/src/modules/pride/utils.js @@ -1,104 +1,63 @@ import { Pride } from 'pride'; -import _ from 'underscore'; +import { findWhere } from '../reusable/underscore'; import { getSearchStateFromURL } from '../search'; import store from '../../store'; import config from '../../config'; - import { setRecord, setRecordHoldings, setRecordGetThis } from '../records'; - import { getField, getFieldValue } from '../records/utilities'; -const isSlugADatastore = (slug) => { - const slugDs = _.findWhere(config.datastores.list, { slug }); - const uidDs = _.findWhere(config.datastores.list, { uid: slug }); - - return !!(slugDs || uidDs); -}; - -/** - * getDatastore() takes a datastore unique id {uid} - * and an array of {datastores} objects, then returns - * matching datastore Object or undefined if not found. - */ -const getDatastore = ({ uid, datastores }) => { - return datastores.filter((ds) => { - return ds.uid === uid; - })[0]; -}; - -const getDatastoreName = (uid) => { - const ds = _.findWhere(config.datastores.list, { uid }); - - if (ds && ds.name) { - return ds.name; - } - - return undefined; -}; - -const getDatastoreSlug = (uid) => { - const ds = _.findWhere(config.datastores.list, { uid }); - - if (ds && ds.slug) { - return ds.slug; - } - - if (ds) { - return ds.uid; - } - - return undefined; +const getDatastoreByUid = (uid) => { + return config.datastores.list.find((datastore) => { + return datastore.uid === uid; + }); }; const getDatastoreUidBySlug = (slugParam) => { - const slugDs = _.findWhere(config.datastores.list, { slug: slugParam }); - const uidDs = _.findWhere(config.datastores.list, { uid: slugParam }); - const ds = slugDs || uidDs; + const slugDs = config.datastores.list.find((datastore) => { + return datastore.slug === slugParam; + }); - if (!ds) { - return false; - } + const uidDs = slugDs || getDatastoreByUid(slugParam); - return ds.uid; + return uidDs?.uid; }; const getMultiSearchRecords = (activeDatastore, allRecords) => { - const configDs = _.findWhere(config.datastores.list, { - uid: activeDatastore - }); + const configDs = getDatastoreByUid(activeDatastore); if (!configDs) { - console.log('Config error: getMultiSearchRecords'); + console.error('Config error: getMultiSearchRecords'); return undefined; } - const multiSearchRecords = _.pick(allRecords, configDs.datastores); - const bentoBoxes = _.reduce( - configDs.datastores, - (memo, ds) => { - const records = _.values(multiSearchRecords[ds]).splice(0, 3); - - memo.push({ - uid: ds, - name: getDatastoreName(ds), - slug: getDatastoreSlug(ds), - records - }); + const { datastores } = configDs; + + // Pick records corresponding to configDs.datastores using Object.keys + const multiSearchRecords = datastores.reduce((selectedRecords, datastore) => { + if (allRecords[datastore]) { + selectedRecords[datastore] = allRecords[datastore]; + } + return selectedRecords; + }, {}); + + const bentoBoxes = datastores.reduce( + (memo, datastore) => { + const { uid, name, slug } = getDatastoreByUid(datastore); + const records = (multiSearchRecords[datastore] && Object.values(multiSearchRecords[datastore]).splice(0, 3)) || []; + memo.push({ uid, name, slug, records }); return memo; - }, - [] + }, [] ); return bentoBoxes; }; const getDatastoreSlugByUid = (uid) => { - const ds = _.findWhere(config.datastores.list, { uid }); + const datastore = getDatastoreByUid(uid); - return ds.slug || ds.uid; + return datastore?.slug || datastore?.uid; }; - const isValidURLSearchQuery = ({ urlState }) => { // Ensure urlState is an object but not null if (typeof urlState !== 'object' || urlState === null) return false; @@ -133,44 +92,39 @@ const isValidURLSearchQuery = ({ urlState }) => { * in the URL (from the location {Object}). */ const getStateFromURL = ({ location }) => { - const urlStateString = _.clone(location).search; - - if (urlStateString.length) { - const parsed = _.clone(getSearchStateFromURL(urlStateString)); - const isValid = isValidURLSearchQuery({ urlState: parsed }); - - if (!isValid) { - return undefined; - } else { - if (parsed.filter) { - // Do not filter for "All collections" if queried (LIBSEARCH-796) - if (parsed.filter.collection === 'All collections') { - delete parsed.filter.collection; - } - const filterUids = Object.keys(parsed.filter); - const filterValuesAreArrays = Object.assign(parsed, { - filter: filterUids.reduce((obj, filterUid) => { - return { - ...obj, - [filterUid]: [].concat(parsed.filter[filterUid]) - }; - }, {}) - }); - - return filterValuesAreArrays; - } + const urlStateString = location.search; + + if (!urlStateString.length) { + return {}; + } + + const parsed = { ...getSearchStateFromURL(urlStateString) }; + const isValid = isValidURLSearchQuery({ urlState: parsed }); + + if (!isValid) return undefined; + + if (parsed.filter) { + if (parsed.filter.collection === 'All collections') { + delete parsed.filter.collection; } - return parsed; + return { + ...parsed, + filter: Object.entries(parsed.filter).reduce((obj, [filterUid, value]) => { + // Ensure each value is an array + obj[filterUid] = [].concat(value); + return obj; + }, {}) + }; } - return {}; + return parsed; }; const fetchRecordFromState = ({ datastoreUid, recordUid }) => { const state = store.getState(); - return _.findWhere(state.records.records[datastoreUid], { uid: recordUid }); + return findWhere(state.records.records[datastoreUid], { uid: recordUid }); }; const requestRecord = ({ datastoreUid, recordUid }) => { @@ -230,40 +184,14 @@ const prideParseField = (fieldName, content) => { } }; -const parseField = ({ defaultFieldName, stringToParse }) => { - if (!stringToParse) { - return false; - } - - return prideParseField(defaultFieldName, stringToParse); -}; - -const isFieldASearchLink = ({ fieldUid, datastoreUid }) => { - const fieldsConfig = _.findWhere(config.fields, { datastore: datastoreUid }); - if (fieldsConfig && fieldsConfig.searches) { - const searchField = _.findWhere(fieldsConfig.searches, { uid: fieldUid }); - - if (searchField) { - return searchField; - } - } - - return undefined; -}; - export { - isSlugADatastore, getMultiSearchRecords, - getDatastoreName, - getDatastoreSlug, + getDatastoreByUid, getDatastoreUidBySlug, - getDatastore, getDatastoreSlugByUid, getStateFromURL, requestRecord, isValidURLSearchQuery, prideParseField, - parseField, - isFieldASearchLink, requestGetThis }; From 6adcc678ab30267f2137858f092952afce33785f Mon Sep 17 00:00:00 2001 From: "Erin E. Sullivan" Date: Wed, 8 May 2024 08:21:13 -0400 Subject: [PATCH 08/12] Replacing `underscore` with vanilla JavaScript. --- src/modules/pride/setup.js | 244 +++++++++++++------------------------ 1 file changed, 84 insertions(+), 160 deletions(-) diff --git a/src/modules/pride/setup.js b/src/modules/pride/setup.js index 29e86e8a6..2be7b066e 100644 --- a/src/modules/pride/setup.js +++ b/src/modules/pride/setup.js @@ -1,12 +1,8 @@ import { Pride } from 'pride'; -import _ from 'underscore'; - import config from '../../config'; import store from '../../store'; import { renderApp, renderPrideFailedToLoad } from '../../index'; - import { addDatastore, changeActiveDatastore } from '../datastores'; - import { addRecords, clearRecords, @@ -14,36 +10,27 @@ import { addHoldings, setRecordHoldings } from '../records'; - import { getField, getFieldValue } from '../records/utilities'; - import { setSearchData, setParserMessage } from '../search'; - import { addAdvancedField, addAdvancedBooleanTypes, addFieldedSearch, addAdvancedFilterGroups } from '../advanced'; - import { addFilters, clearFilters, setFilterGroupOrder } from '../filters'; - import { getDatastoreByUid, getDatastoreUidBySlug, prideParseField } from './utils'; - import { setDefaultInstitution } from '../institution'; - import { setDefaultAffiliation } from '../affiliation'; - import { addBrowseFilter, organizeByParents } from '../browse'; - import { addSpecialists } from '../specialists'; - import prejudice from '../lists/prejudice'; import { setupProfile } from '../profile'; +import { findWhere } from '../reusable/underscore'; /* Pride Internal Configuration @@ -67,35 +54,30 @@ Pride.Messenger.addObserver(function (msg) { let searchSwitcher; const handleSearchData = (data, datastoreUid) => { - const payload = { - data: { - count: data.count, - page: data.page, - totalPages: data.total_pages, - totalAvailable: data.total_available, - sorts: data.sorts, - selectedSort: data.selected_sort, - fields: data.fields - }, - datastoreUid - }; - - const activeDatastore = store.getState().datastores.active; - - if ( - (activeDatastore === 'everything' || activeDatastore === datastoreUid) && - data.specialists - ) { - store.dispatch(addSpecialists(data.specialists)); + const { + specialists, + count, + page, + total_pages: totalPages, + total_available: totalAvailable, + sorts, + selected_sort: selectedSort, + fields + } = data; + const { datastores, records } = store.getState(); + const { active: activeDatastore } = datastores; + + if (['everything', activeDatastore].includes(datastoreUid) && specialists) { + store.dispatch(addSpecialists(specialists)); } - store.dispatch(setSearchData(payload)); + store.dispatch(setSearchData({ + data: { count, page, totalPages, totalAvailable, sorts, selectedSort, fields }, + datastoreUid + })); - const records = store.getState().records.records[datastoreUid]; - const recordsLength = _.values(records).length; - const count = data.count; // page count - const page = data.page; - const totalAvailable = data.total_available; + const datastoreRecords = records.records[datastoreUid] || []; + const recordsLength = Object.values(datastoreRecords).length; const lastPage = (page - 1) * count + recordsLength === totalAvailable; // Check to see if records have loaded. @@ -109,36 +91,27 @@ const handleSearchData = (data, datastoreUid) => { } }; -const getFullRecordUid = () => { - const record = store.getState().records.record; - return record ? record.uid : undefined; -}; - const setupObservers = (searchObj) => { - // TODO: Only listen to this overserver if new search is made. searchObj.resultsObservers.add(function (results) { store.dispatch(clearRecords(searchObj.uid)); // Does results contain undefined records - if (!_.contains(results, undefined)) { + if (!results.includes(undefined)) { const recordsHaveHoldings = searchObj.uid === 'mirlyn'; // Build a list of records from Pride results const records = results.reduce((accumulator, result) => { result.renderFull((data) => { - const uid = getFieldValue(getField(data.fields, 'id'))[0]; - const resourceAccess = getFieldValue( - getField(data.fields, 'resource_access') - ); - - accumulator = accumulator.concat({ - uid, + const { fields } = data; + + accumulator.push({ + uid: getFieldValue(getField(fields, 'id'))[0], ...data, - resourceAccess: resourceAccess || undefined, - loadingHoldings: recordsHaveHoldings ? true : undefined + resourceAccess: getFieldValue(getField(fields, 'resource_access')) || undefined, + loadingHoldings: recordsHaveHoldings || undefined }); }); - + return accumulator; }, []); @@ -152,7 +125,7 @@ const setupObservers = (searchObj) => { if (recordsHaveHoldings) { const holdingsCallback = (dsUid, uid, data) => { - const fullRecordUid = getFullRecordUid(); + const fullRecordUid = store.getState().records.record?.uid; store.dispatch( addHoldings({ @@ -171,14 +144,12 @@ const setupObservers = (searchObj) => { } }; - _.each(results, (result) => { + results.forEach((result) => { result.renderFull((data) => { const uid = getFieldValue(getField(data.fields, 'id'))[0]; - result.getHoldings((data) => { return holdingsCallback(searchObj.uid, uid, data); - } - ); + }); }); }); } @@ -341,88 +312,55 @@ class SearchSwitcher { } const setupSearches = () => { + const { list, default: defaultDatastore } = config.datastores; + const datastores = Array.from(new Set( + list.reduce((memo, datastore) => { + return memo.concat(datastore.datastores || `${datastore.uid}`); + }, []) + )); const allDatastores = Pride.AllDatastores.array; - const datastores = _.uniq( - _.reduce( - config.datastores.list, - (memo, dsConfig) => { - if (!dsConfig.datastores) { - memo = memo.concat([`${dsConfig.uid}`]); - } else { - memo = memo.concat(dsConfig.datastores); - } - return memo; - }, - [] - ) - ); - - const allSearchObjects = _.reduce( - datastores, - (memo, uid) => { - const foundDatastore = _.find(allDatastores, function (ds) { - return ds.get('uid') === uid; - }); - if (foundDatastore !== undefined) { - const searchObj = foundDatastore.baseSearch(); - - searchObj.set({ count: 10 }); // default page count for single result datastores - setupObservers(searchObj); - - memo.push(searchObj); - } - - return memo; - }, - [] - ); - - const multiSearchDatastores = _.reduce( - config.datastores.list, - (memo, dsConfig) => { - if (dsConfig.datastores) { - memo.push(dsConfig); - } - return memo; - }, - [] - ); - - const multiSearchObjects = _.reduce( - multiSearchDatastores, - (memo, multiDatastoreConfig) => { - const multiSearchInternalObjects = []; + const allSearchObjects = datastores.reduce((memo, uid) => { + const foundDatastore = allDatastores.find((datastore) => { + return datastore.get('uid') === uid; + }); + + if (foundDatastore !== undefined) { + const searchObj = foundDatastore.baseSearch(); + searchObj.set({ count: 10 }); + setupObservers(searchObj); + memo.push(searchObj); + } + + return memo; + }, []); - _.each(multiDatastoreConfig.datastores, (ds) => { - const foundSearchObj = _.findWhere(allSearchObjects, { uid: ds }); + const multiSearchDatastores = list.filter((datastore) => { + return datastore.datastores; + }); - if (foundSearchObj) { - multiSearchInternalObjects.push(foundSearchObj); - } + const multiSearchObjects = multiSearchDatastores.reduce((memo, multiDatastoreConfig) => { + const multiSearchInternalObjects = multiDatastoreConfig.datastores.map((datastore) => { + return allSearchObjects.find((searchObj) => { + return searchObj.uid === datastore; }); - - if (multiSearchInternalObjects.length > 0) { - memo.push( - new MultiSearch( - multiDatastoreConfig.uid, - true, - multiSearchInternalObjects - ) - ); - } - - return memo; - }, - [] - ); + }).filter((foundSearchObj) => { + return !!foundSearchObj; + }); + + if (multiSearchInternalObjects.length) { + memo.push(new MultiSearch(multiDatastoreConfig.uid, true, multiSearchInternalObjects)); + } + + return memo; + }, []); const publicSearchObjects = multiSearchObjects.concat(allSearchObjects); - const defaultSearchObject = _.findWhere(publicSearchObjects, { - uid: config.datastores.default + const defaultSearchObject = publicSearchObjects.find((searchObj) => { + return searchObj.uid === defaultDatastore; }); - const remainingSearchObjects = _.reject(publicSearchObjects, (searchObj) => { - return searchObj.uid === config.datastores.default; + const remainingSearchObjects = publicSearchObjects.filter((searchObj) => { + return searchObj.uid !== defaultDatastore; }); searchSwitcher = new SearchSwitcher( @@ -430,27 +368,21 @@ const setupSearches = () => { remainingSearchObjects ); - _.each(publicSearchObjects, function (searchObj) { + publicSearchObjects.forEach((searchObj) => { const datastore = getDatastoreByUid(searchObj.uid); - const ds = { + store.dispatch(addDatastore({ uid: searchObj.uid, name: datastore?.name, - slug: datastore?.slug || datastore?.uid || searchObj.uid, + slug: datastore?.slug || searchObj.uid, isMultisearch: searchObj.searches !== undefined - }; - - store.dispatch(addDatastore(ds)); + })); }); }; const switchPrideToDatastore = (slug) => { const uid = getDatastoreUidBySlug(slug); - if (!uid) { - return false; - } - - if (!searchSwitcher) { + if (!uid || !searchSwitcher) { return false; } @@ -474,14 +406,6 @@ const runSearch = () => { fieldTree = prideParseField('all_fields', query); } - // Inject library/institution filter with facets. - // The backend whitelists facets, so - // the FE can always includes the institution in - // a search. This is useful and allows including - // institution in an Everything search so that - // catalog works as expect, but other datastores - // can ignore it. - // For more background: SEARCH-871 facets = { ...facets, institution: state.institution.active || state.defaultInstitution @@ -535,7 +459,7 @@ const setupAdvancedSearch = () => { if (config.advanced[dsUid].fields) { config.advanced[dsUid].fields.forEach((fieldUid) => { const fields = getPotentialbooleanField(dsUid); - const fieldExists = _.findWhere(fields, { uid: fieldUid }); + const fieldExists = findWhere(fields, { uid: fieldUid }); if (fieldExists) { store.dispatch( @@ -570,7 +494,7 @@ const setupAdvancedSearch = () => { ); const configuredFilterGroups = config.advanced[dsUid].filters.reduce( (prev, filterGroupConfig) => { - const foundFilterGroup = _.findWhere(availableFilterGroups, { + const foundFilterGroup = findWhere(availableFilterGroups, { uid: filterGroupConfig.uid }); @@ -643,8 +567,7 @@ const compareFacetName = (a, b) => { return comparison; }; -const setupBrowse = () => { - /* +/* To setup browse 1) Know what datastores have a browse. @@ -653,9 +576,10 @@ const setupBrowse = () => { 4) Add filters to browse state. */ +const setupBrowse = () => { ['databases', 'onlinejournals'].forEach((datastoreUid) => { const facets = Pride.AllDatastores.get(datastoreUid).get('facets'); - const facet = _.findWhere(facets, { uid: 'academic_discipline' }); + const facet = findWhere(facets, { uid: 'academic_discipline' }); const filters = organizeByParents(facet.values.sort(compareFacetName)); store.dispatch( From ce6459b8a2b2c33847f173fe822953b4d31b4b64 Mon Sep 17 00:00:00 2001 From: "Erin E. Sullivan" Date: Wed, 8 May 2024 08:27:23 -0400 Subject: [PATCH 09/12] Uninstalling `underscore`. --- .../dependency_updates_template.md | 1 - package-lock.json | 299 +++--------------- package.json | 3 +- 3 files changed, 45 insertions(+), 258 deletions(-) diff --git a/.github/PULL_REQUEST_TEMPLATE/dependency_updates_template.md b/.github/PULL_REQUEST_TEMPLATE/dependency_updates_template.md index 5f5e4566b..2c80758a7 100644 --- a/.github/PULL_REQUEST_TEMPLATE/dependency_updates_template.md +++ b/.github/PULL_REQUEST_TEMPLATE/dependency_updates_template.md @@ -18,7 +18,6 @@ These dependencies have been updated to their latest versions: - `react-redux` - `react-router-dom` - `react-scripts` -- `underscore` ## Workflows These actions have been updated to their latest versions: diff --git a/package-lock.json b/package-lock.json index ba6e17851..93ef6a0a8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,8 +18,7 @@ "react": "^18.3.1", "react-dom": "^18.3.1", "react-redux": "^9.1.2", - "react-router-dom": "^6.23.0", - "underscore": "^1.13.6" + "react-router-dom": "^6.23.0" }, "devDependencies": { "@eslint/js": "^9.2.0", @@ -3784,26 +3783,11 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/reporters/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@jest/reporters/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.6.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.1.tgz", + "integrity": "sha512-f/vbBsu+fOiYt+lmwZV0rVwJScl46HppnOA1ZvIuBWKOTlllpyJ3bfVax76/OrhCH38dyxoDIA8K7uB963IYgA==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" }, @@ -3824,12 +3808,6 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/@jest/reporters/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/@jest/schemas": { "version": "29.6.3", "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", @@ -4926,9 +4904,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.12.10", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.10.tgz", - "integrity": "sha512-Eem5pH9pmWBHoGAT8Dr5fdc5rYA+4NAovdM4EktRPVAAiJhmWWfQrA0cFhAbOsQdSfIHjAud6YdkbL69+zSKjw==", + "version": "20.12.11", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.11.tgz", + "integrity": "sha512-vDg9PZ/zi+Nqp6boSOT7plNuthRugEKixDv5sFTIpkE89MmNtEArAShI4mxuX2+UrLEe9pxC1vm2cjm9YlWbJw==", "dev": true, "dependencies": { "undici-types": "~5.26.4" @@ -5093,26 +5071,11 @@ } } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.6.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.1.tgz", + "integrity": "sha512-f/vbBsu+fOiYt+lmwZV0rVwJScl46HppnOA1ZvIuBWKOTlllpyJ3bfVax76/OrhCH38dyxoDIA8K7uB963IYgA==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" }, @@ -5120,12 +5083,6 @@ "node": ">=10" } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/@typescript-eslint/experimental-utils": { "version": "5.62.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.62.0.tgz", @@ -5256,26 +5213,11 @@ } } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.6.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.1.tgz", + "integrity": "sha512-f/vbBsu+fOiYt+lmwZV0rVwJScl46HppnOA1ZvIuBWKOTlllpyJ3bfVax76/OrhCH38dyxoDIA8K7uB963IYgA==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" }, @@ -5283,12 +5225,6 @@ "node": ">=10" } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/@typescript-eslint/utils": { "version": "5.62.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", @@ -5337,26 +5273,11 @@ "node": ">=4.0" } }, - "node_modules/@typescript-eslint/utils/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@typescript-eslint/utils/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.6.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.1.tgz", + "integrity": "sha512-f/vbBsu+fOiYt+lmwZV0rVwJScl46HppnOA1ZvIuBWKOTlllpyJ3bfVax76/OrhCH38dyxoDIA8K7uB963IYgA==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" }, @@ -5364,12 +5285,6 @@ "node": ">=10" } }, - "node_modules/@typescript-eslint/utils/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/@typescript-eslint/visitor-keys": { "version": "5.62.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", @@ -7198,26 +7113,11 @@ } } }, - "node_modules/css-loader/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/css-loader/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.6.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.1.tgz", + "integrity": "sha512-f/vbBsu+fOiYt+lmwZV0rVwJScl46HppnOA1ZvIuBWKOTlllpyJ3bfVax76/OrhCH38dyxoDIA8K7uB963IYgA==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" }, @@ -7225,12 +7125,6 @@ "node": ">=10" } }, - "node_modules/css-loader/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/css-minimizer-webpack-plugin": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-7.0.0.tgz", @@ -7942,9 +7836,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.757", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.757.tgz", - "integrity": "sha512-jftDaCknYSSt/+KKeXzH3LX5E2CvRLm75P3Hj+J/dv3CL0qUYcOt13d5FN1NiL5IJbbhzHrb3BomeG2tkSlZmw==", + "version": "1.4.758", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.758.tgz", + "integrity": "sha512-/o9x6TCdrYZBMdGeTifAP3wlF/gVT+TtWJe3BSmtNh92Mw81U9hrYwW9OAGUh+sEOX/yz5e34sksqRruZbjYrw==", "dev": true }, "node_modules/emittery": { @@ -7984,9 +7878,9 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.16.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.0.tgz", - "integrity": "sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA==", + "version": "5.16.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.1.tgz", + "integrity": "sha512-4U5pNsuDl0EhuZpq46M5xPslstkviJuhrdobaRDBk2Jy2KO37FDAJl4lb2KlNabxT0m4MTK2UHNrsAcphE8nyw==", "dev": true, "dependencies": { "graceful-fs": "^4.2.4", @@ -9506,18 +9400,6 @@ "node": ">=10" } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", @@ -9537,13 +9419,10 @@ } }, "node_modules/fork-ts-checker-webpack-plugin/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.6.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.1.tgz", + "integrity": "sha512-f/vbBsu+fOiYt+lmwZV0rVwJScl46HppnOA1ZvIuBWKOTlllpyJ3bfVax76/OrhCH38dyxoDIA8K7uB963IYgA==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" }, @@ -9560,12 +9439,6 @@ "node": ">=6" } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/fork-ts-checker-webpack-plugin/node_modules/yaml": { "version": "1.10.2", "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", @@ -10948,18 +10821,6 @@ "node": ">=10" } }, - "node_modules/istanbul-lib-report/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/istanbul-lib-report/node_modules/make-dir": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", @@ -10976,13 +10837,10 @@ } }, "node_modules/istanbul-lib-report/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.6.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.1.tgz", + "integrity": "sha512-f/vbBsu+fOiYt+lmwZV0rVwJScl46HppnOA1ZvIuBWKOTlllpyJ3bfVax76/OrhCH38dyxoDIA8K7uB963IYgA==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" }, @@ -10990,12 +10848,6 @@ "node": ">=10" } }, - "node_modules/istanbul-lib-report/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/istanbul-lib-source-maps": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", @@ -12594,26 +12446,11 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-snapshot/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/jest-snapshot/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.6.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.1.tgz", + "integrity": "sha512-f/vbBsu+fOiYt+lmwZV0rVwJScl46HppnOA1ZvIuBWKOTlllpyJ3bfVax76/OrhCH38dyxoDIA8K7uB963IYgA==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" }, @@ -12634,12 +12471,6 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/jest-snapshot/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/jest-util": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", @@ -15096,26 +14927,11 @@ "node": ">=10" } }, - "node_modules/postcss-loader/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/postcss-loader/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.6.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.1.tgz", + "integrity": "sha512-f/vbBsu+fOiYt+lmwZV0rVwJScl46HppnOA1ZvIuBWKOTlllpyJ3bfVax76/OrhCH38dyxoDIA8K7uB963IYgA==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" }, @@ -15123,12 +14939,6 @@ "node": ">=10" } }, - "node_modules/postcss-loader/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/postcss-loader/node_modules/yaml": { "version": "1.10.2", "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", @@ -16298,18 +16108,6 @@ } } }, - "node_modules/react-scripts/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/react-scripts/node_modules/resolve": { "version": "1.22.8", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", @@ -16328,13 +16126,10 @@ } }, "node_modules/react-scripts/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.6.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.1.tgz", + "integrity": "sha512-f/vbBsu+fOiYt+lmwZV0rVwJScl46HppnOA1ZvIuBWKOTlllpyJ3bfVax76/OrhCH38dyxoDIA8K7uB963IYgA==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" }, @@ -16342,12 +16137,6 @@ "node": ">=10" } }, - "node_modules/react-scripts/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/read-cache": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", @@ -17683,9 +17472,9 @@ "dev": true }, "node_modules/svgo": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.2.0.tgz", - "integrity": "sha512-4PP6CMW/V7l/GmKRKzsLR8xxjdHTV4IMvhTnpuHwwBazSIlw5W/5SmPjN8Dwyt7lKbSJrRDgp4t9ph0HgChFBQ==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.3.0.tgz", + "integrity": "sha512-y350OL6eAmhDbWcASdukXoG0MbpdfJQPHwEUAaTW1HBNSO2VErJ35fs7uNLSWjzFDhfua517RcouBzjZoO1JFg==", "dev": true, "dependencies": { "@trysound/sax": "0.2.0", @@ -17697,7 +17486,7 @@ "picocolors": "^1.0.0" }, "bin": { - "svgo": "bin/svgo" + "svgo": "bin/svgo.js" }, "engines": { "node": ">=14.0.0" diff --git a/package.json b/package.json index 553753e5f..b031f8255 100644 --- a/package.json +++ b/package.json @@ -21,8 +21,7 @@ "react": "^18.3.1", "react-dom": "^18.3.1", "react-redux": "^9.1.2", - "react-router-dom": "^6.23.0", - "underscore": "^1.13.6" + "react-router-dom": "^6.23.0" }, "overrides": { "@babel/plugin-proposal-private-property-in-object": "npm:@babel/plugin-transform-private-property-in-object", From d623cbdd0a6f09dac80bbc24c62fb3f5a037ec9d Mon Sep 17 00:00:00 2001 From: "Erin E. Sullivan" Date: Wed, 8 May 2024 08:55:53 -0400 Subject: [PATCH 10/12] Fixing bugs. --- .../filters/components/Filters/styles.css | 4 +++ src/modules/pride/utils.js | 8 +---- .../records/components/RecordList/index.js | 2 +- src/modules/reusable/underscore/index.js | 2 +- src/stylesheets/main.css | 29 +++++-------------- 5 files changed, 14 insertions(+), 31 deletions(-) diff --git a/src/modules/filters/components/Filters/styles.css b/src/modules/filters/components/Filters/styles.css index 069c5ad49..bc142c330 100644 --- a/src/modules/filters/components/Filters/styles.css +++ b/src/modules/filters/components/Filters/styles.css @@ -23,6 +23,10 @@ border-color: solid 1px var(--ds-color-green-300); } +.remove-filter > svg { + flex-shrink: 0; +} + .filter-list > li + li, .filter-list + * { margin-top: 0.5rem; diff --git a/src/modules/pride/utils.js b/src/modules/pride/utils.js index 98b400a8b..5cd1551ac 100644 --- a/src/modules/pride/utils.js +++ b/src/modules/pride/utils.js @@ -121,17 +121,11 @@ const getStateFromURL = ({ location }) => { return parsed; }; -const fetchRecordFromState = ({ datastoreUid, recordUid }) => { - const state = store.getState(); - - return findWhere(state.records.records[datastoreUid], { uid: recordUid }); -}; - const requestRecord = ({ datastoreUid, recordUid }) => { // Requesting a record ordered options: // 1. Is the record in the results? Use that. // 2. If not, then ask Pride to fetch the record. - const recordFromState = fetchRecordFromState({ datastoreUid, recordUid }); + const recordFromState = findWhere(store.getState().records.records[datastoreUid], { uid: recordUid }); if (recordFromState) { store.dispatch(setRecord(recordFromState)); diff --git a/src/modules/records/components/RecordList/index.js b/src/modules/records/components/RecordList/index.js index 88f745c5b..6200cde38 100644 --- a/src/modules/records/components/RecordList/index.js +++ b/src/modules/records/components/RecordList/index.js @@ -43,7 +43,7 @@ function RecordList () { return ( <> -
+

{message()}

diff --git a/src/modules/reusable/underscore/index.js b/src/modules/reusable/underscore/index.js index 36710965c..82c5cbebd 100644 --- a/src/modules/reusable/underscore/index.js +++ b/src/modules/reusable/underscore/index.js @@ -1,5 +1,5 @@ export function findWhere (array, criteria) { - return array.find((item) => { + return array?.find((item) => { return Object.keys(criteria).every((key) => { return item[key] === criteria[key]; }); diff --git a/src/stylesheets/main.css b/src/stylesheets/main.css index 81551ec1b..4f36d2207 100644 --- a/src/stylesheets/main.css +++ b/src/stylesheets/main.css @@ -780,32 +780,17 @@ details[open] > summary svg.expand_more { list-style: none; } -/* - Search Summary // Records List Bar and Parser Message -*/ .results-summary-container { - margin-bottom: 0.75rem; + align-items: baseline; + box-shadow: none!important; + flex-wrap: wrap; + gap: 0.25rem 1rem!important; + justify-content: space-between; padding: 0.5rem 1.25rem; - background: white; - background: #FAFAFA; - border-radius: 4px; } -.results-summary-container>* { - margin-top: 0.5rem; -} - -@media (min-width: 600px) { - .results-summary-container { - display: flex; - flex-flow: row wrap; - justify-content: space-between; - align-items: center; - } - - .results-summary-container>* { - margin-top: 0; - } +.results-summary-container > p { + flex-grow: 1; } .parser-message p, From b3982a0fa274fc78d29fe769421387f3e9bf2ea5 Mon Sep 17 00:00:00 2001 From: "Erin E. Sullivan" Date: Wed, 8 May 2024 08:57:07 -0400 Subject: [PATCH 11/12] Removing paragraph about class component conversion as no more class components exist. --- .github/pull_request_template.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 1b1bb04a8..3aa83fce1 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -22,9 +22,6 @@ Add links to any documentation or issues that can help give more background info ## Anything else? _Optional_. If appropriate, provide additional notes the reviewers should be made aware of. They can be about any "gotchas" or even changes that are expected to be made in the future, but are not applied to this pull request. -To align with [current React practices](https://react.dev/learn/your-first-component), these class components have been converted to functional components: -- `ComponentName` - ## Testing - Make sure the PR is consistent in these browsers: - [x] Chrome From 8a8b26de670802daea7e0b0ac63b431321529b9e Mon Sep 17 00:00:00 2001 From: "Erin E. Sullivan" Date: Wed, 8 May 2024 09:11:33 -0400 Subject: [PATCH 12/12] Uninstalling `core-js` as it was not being used anywhere. --- .github/PULL_REQUEST_TEMPLATE/dependency_updates_template.md | 1 - package-lock.json | 2 +- package.json | 1 - 3 files changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/PULL_REQUEST_TEMPLATE/dependency_updates_template.md b/.github/PULL_REQUEST_TEMPLATE/dependency_updates_template.md index 2c80758a7..baee2d72e 100644 --- a/.github/PULL_REQUEST_TEMPLATE/dependency_updates_template.md +++ b/.github/PULL_REQUEST_TEMPLATE/dependency_updates_template.md @@ -6,7 +6,6 @@ These dependencies have been updated to their latest versions: - `@eslint/js` - `@reduxjs/toolkit` - `citeproc` -- `core-js` - `eslint` - `eslint-plugin-react` - `prejudice` diff --git a/package-lock.json b/package-lock.json index 93ef6a0a8..c1fb8caf7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,6 @@ "dependencies": { "@reduxjs/toolkit": "^2.2.3", "citeproc": "^2.4.63", - "core-js": "^3.37.0", "prejudice": "git+https://github.com/mlibrary/prejudice.git", "pride": "git+https://github.com/mlibrary/pride.git", "prop-types": "^15.8.1", @@ -6881,6 +6880,7 @@ "version": "3.37.0", "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.37.0.tgz", "integrity": "sha512-fu5vHevQ8ZG4og+LXug8ulUtVxjOcEYvifJr7L5Bfq9GOztVqsKd9/59hUk2ZSbCrS3BqUr3EpaYGIYzq7g3Ug==", + "dev": true, "hasInstallScript": true, "funding": { "type": "opencollective", diff --git a/package.json b/package.json index b031f8255..dab840b65 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,6 @@ "dependencies": { "@reduxjs/toolkit": "^2.2.3", "citeproc": "^2.4.63", - "core-js": "^3.37.0", "prejudice": "git+https://github.com/mlibrary/prejudice.git", "pride": "git+https://github.com/mlibrary/pride.git", "prop-types": "^15.8.1",