From bf55499dcacc635c9b320e500da5ec8f334cd12b Mon Sep 17 00:00:00 2001 From: James Dabbs Date: Fri, 10 Nov 2023 21:35:06 -0700 Subject: [PATCH] format {S#|P#} display to include a description of the trait value --- .../viewer/cypress/e2e/typesetting.spec.ts | 2 +- packages/viewer/src/context.ts | 6 ++-- .../viewer/src/parser/internalLinks.test.ts | 28 +++++++++++++++---- packages/viewer/src/parser/internalLinks.ts | 12 ++++++-- packages/viewer/src/parser/renderer.ts | 8 ++++-- packages/viewer/vite.config.js | 6 ++-- 6 files changed, 46 insertions(+), 16 deletions(-) diff --git a/packages/viewer/cypress/e2e/typesetting.spec.ts b/packages/viewer/cypress/e2e/typesetting.spec.ts index 4ea0869e..cd0d5129 100644 --- a/packages/viewer/cypress/e2e/typesetting.spec.ts +++ b/packages/viewer/cypress/e2e/typesetting.spec.ts @@ -12,6 +12,6 @@ it('renders internal links', () => { ) cy.get('[data-testid=output]').contains( - 'Discrete topology on a two-point set is $T_0$ as noted in Discrete topology on a two-point set | $T_0$', + 'Discrete topology on a two-point set is $T_0$ as noted in Discrete topology on a two-point set is $T_0$', ) }) diff --git a/packages/viewer/src/context.ts b/packages/viewer/src/context.ts index 7dfcdc77..571728bc 100644 --- a/packages/viewer/src/context.ts +++ b/packages/viewer/src/context.ts @@ -61,10 +61,10 @@ export function initialize({ } const typeset = derived( - [store.properties, store.spaces, store.theorems], - ([properties, spaces, theorems]) => { + [store.properties, store.spaces, store.theorems, store.traits], + ([properties, spaces, theorems, traits]) => { trace({ event: 'build_typesetter' }) - return typesetter(properties, spaces, theorems) + return typesetter(properties, spaces, theorems, traits) }, ) diff --git a/packages/viewer/src/parser/internalLinks.test.ts b/packages/viewer/src/parser/internalLinks.test.ts index 962ad11f..367cf00e 100644 --- a/packages/viewer/src/parser/internalLinks.test.ts +++ b/packages/viewer/src/parser/internalLinks.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from 'vitest' -import { atom, property, space, theorem } from '@/__test__' -import { Collection, Theorems } from '@/models' +import { atom, property, space, theorem, trait } from '@/__test__' +import { Collection, Theorems, Traits } from '@/models' import { internal } from './internalLinks' @@ -9,7 +9,10 @@ describe('with ambient data', () => { property({ id: 1, name: 'One' }), property({ id: 2, name: 'Two' }), ]) - const spaces = Collection.byId([space({ id: 2, name: 'Two' })]) + const spaces = Collection.byId([ + space({ id: 1, name: 'One' }), + space({ id: 2, name: 'Two' }), + ]) const theorems: Theorems = Theorems.build( [ theorem({ @@ -20,8 +23,16 @@ describe('with ambient data', () => { ], properties, ) + const traits = Traits.build( + [ + trait({ space: 1, property: 1, value: true }), + trait({ space: 1, property: 2, value: false }), + ], + spaces, + properties, + ) - const link = internal(properties, spaces, theorems) + const link = internal(properties, spaces, theorems, traits) describe('properties', () => { it('can link to properties', () => { @@ -58,9 +69,16 @@ describe('with ambient data', () => { describe('traits', () => { it('can link to traits', () => { + expect(link(['S', '000001|P000001'])).toEqual({ + href: '/spaces/S000001/properties/P000001', + title: 'One is One', + }) + }) + + it('negates the display', () => { expect(link(['S', '000001|P000002'])).toEqual({ href: '/spaces/S000001/properties/P000002', - title: 'S000001 | Two', + title: 'One is not Two', }) }) }) diff --git a/packages/viewer/src/parser/internalLinks.ts b/packages/viewer/src/parser/internalLinks.ts index b771f9ff..73bcb092 100644 --- a/packages/viewer/src/parser/internalLinks.ts +++ b/packages/viewer/src/parser/internalLinks.ts @@ -1,10 +1,11 @@ -import type { Property, Space, Theorem } from '@/models' +import type { Property, Space, Theorem, Traits } from '@/models' import type { Finder } from './types' export function internal( properties: Finder, spaces: Finder, theorems: Finder, + traits: Traits, ) { return function linker([kind, id]: ['S' | 'P' | 'T', string]) { switch (kind) { @@ -15,9 +16,16 @@ export function internal( const { sid, pid } = match.groups const space = spaces.find(Number(sid)) const property = properties.find(Number(pid)) + const trait = space && property && traits.find(space, property) + const connector = + trait?.value === true + ? 'is' + : trait?.value === false + ? 'is not' + : '?' return { href: `/spaces/S${sid}/properties/P${pid}`, - title: `${space ? space.name : 'S' + sid} | ${ + title: `${space ? space.name : 'S' + sid} ${connector} ${ property ? property.name : 'P' + pid }`, } diff --git a/packages/viewer/src/parser/renderer.ts b/packages/viewer/src/parser/renderer.ts index a3c1a97e..fadf81c8 100644 --- a/packages/viewer/src/parser/renderer.ts +++ b/packages/viewer/src/parser/renderer.ts @@ -1,6 +1,6 @@ import { parser } from '@pi-base/core' -import type { Property, Space, Theorem } from '@/models' +import type { Property, Space, Theorem, Traits } from '@/models' import type { Finder } from './types' import { internal } from './internalLinks' import { external } from './externalLinks' @@ -9,8 +9,12 @@ export function renderer( properties: Finder, spaces: Finder, theorems: Finder, + traits: Traits, ) { - const link = { internal: internal(properties, spaces, theorems), external } + const link = { + internal: internal(properties, spaces, theorems, traits), + external, + } const full = parser({ link, diff --git a/packages/viewer/vite.config.js b/packages/viewer/vite.config.js index b66c775d..6488ef4c 100644 --- a/packages/viewer/vite.config.js +++ b/packages/viewer/vite.config.js @@ -7,9 +7,9 @@ export default defineConfig({ test: { include: ['src/**/*.{test,spec}.{js,ts}'], coverage: { - lines: 80.25, - branches: 87.16, - statements: 80.25, + lines: 80.3, + branches: 86.91, + statements: 80.3, functions: 81, skipFull: true, thresholdAutoUpdate: true,