45 lines
1.8 KiB
JavaScript
45 lines
1.8 KiB
JavaScript
// What the warranty list's search box matches against.
|
|
//
|
|
// Pulled out of WarrantiesList.vue so the field list is somewhere a test can
|
|
// see it. It went wrong the way a field list usually does: silently, by a
|
|
// column being added to the table and not to the filter.
|
|
//
|
|
// THE MACHINE NUMBER IS THE POINT. _related_machine in the warranty API exists
|
|
// precisely because "a shopfloor PC is bought, warranted and replaced as a PC,
|
|
// but it is FOUND by the machine it drives - nobody walks the floor looking for
|
|
// an asset number". The payload carries it, the table renders it in a chip, and
|
|
// the filter did not look at it - so the one identifier the feature was built
|
|
// around was the one thing the search box could not find.
|
|
|
|
/**
|
|
* Does this warranty match the search term?
|
|
*
|
|
* @param {object} warranty - a row from GET /api/warranties
|
|
* @param {string} term - the raw search box contents
|
|
* @returns {boolean} true when the term is empty or any searched field contains it
|
|
*/
|
|
export function matchesWarrantySearch(warranty, term) {
|
|
const needle = (term || '').trim().toLowerCase()
|
|
if (!needle) return true
|
|
if (!warranty) return false
|
|
|
|
const has = (value) => String(value ?? '').toLowerCase().includes(needle)
|
|
|
|
if (has(warranty.vendor) || has(warranty.servicelevel) || has(warranty.servicetag)) {
|
|
return true
|
|
}
|
|
|
|
return (warranty.assets || []).some((asset) => {
|
|
if (has(asset?.assetnumber)) return true
|
|
// The related machine is optional: a warranty on something that drives no
|
|
// machine has none, and a machine that was never linked leaves it null.
|
|
const machine = asset?.machine
|
|
return !!machine && (has(machine.machinenumber) || has(machine.name))
|
|
})
|
|
}
|
|
|
|
/** The fields above, in the order the placeholder should name them. */
|
|
export const WARRANTY_SEARCH_FIELDS = [
|
|
'vendor', 'service level', 'tag', 'asset number', 'machine',
|
|
]
|