(field: string)
| 1603 | } |
| 1604 | |
| 1605 | private resolveRuntimeUserField(field: string): ResolvedRuntimeQueryField | null { |
| 1606 | if (!field.startsWith("user.") && !field.startsWith("user:")) return null; |
| 1607 | const key = field.slice(5); |
| 1608 | const userField = this.getUserFields().find( |
| 1609 | (candidate) => candidate.id === key || candidate.key === key |
| 1610 | ); |
| 1611 | if (!userField) return null; |
| 1612 | const id = userField.id || userField.key; |
| 1613 | const valueType = userFieldTypeToRuntimeValueType(userField.type); |
| 1614 | return { |
| 1615 | internalProperty: `user:${id}`, |
| 1616 | definition: { |
| 1617 | id: `user.${id}`, |
| 1618 | label: userField.displayName || userField.key, |
| 1619 | category: "user", |
| 1620 | valueType, |
| 1621 | source: "user", |
| 1622 | queryable: true, |
| 1623 | sortable: true, |
| 1624 | groupable: true, |
| 1625 | supportedOperators: operatorsForRuntimeValueType(valueType), |
| 1626 | aliases: [`user:${id}`, `user.${userField.key}`, `user:${userField.key}`], |
| 1627 | frontmatterKey: userField.key, |
| 1628 | valueInputType: userFieldTypeToFilterInputType(userField.type), |
| 1629 | }, |
| 1630 | }; |
| 1631 | } |
| 1632 | |
| 1633 | private runtimeFieldToSortKey(field: string): TaskSortKey | null { |
| 1634 | const resolved = this.resolveRuntimeQueryField(field); |
no test coverage detected