From 5e68e30d5b777c7febb47801dabd6724f5dad5ac Mon Sep 17 00:00:00 2001 From: Hongbo Wu Date: Tue, 25 Oct 2022 10:24:30 +0800 Subject: [PATCH] Add highlightPositionPercent and highlightPositionAnchorIndex in highlight api --- packages/api/src/elastic/types.ts | 2 + packages/api/src/generated/graphql.ts | 8 ++++ packages/api/src/generated/schema.graphql | 6 +++ packages/api/src/schema.ts | 6 +++ packages/api/test/resolvers/highlight.test.ts | 38 +++++++++++++++++-- .../db/elastic_migrations/index_settings.json | 6 +++ 6 files changed, 63 insertions(+), 3 deletions(-) diff --git a/packages/api/src/elastic/types.ts b/packages/api/src/elastic/types.ts index 065770aa6..eb166dddc 100644 --- a/packages/api/src/elastic/types.ts +++ b/packages/api/src/elastic/types.ts @@ -179,6 +179,8 @@ export interface Highlight { sharedAt?: Date | null updatedAt: Date labels?: Label[] + highlightPositionPercent?: number | null + highlightPositionAnchorIndex?: number | null } export interface Page { diff --git a/packages/api/src/generated/graphql.ts b/packages/api/src/generated/graphql.ts index 63d11bc1e..88a340b40 100644 --- a/packages/api/src/generated/graphql.ts +++ b/packages/api/src/generated/graphql.ts @@ -291,6 +291,8 @@ export enum CreateHighlightErrorCode { export type CreateHighlightInput = { annotation?: InputMaybe; articleId: Scalars['ID']; + highlightPositionAnchorIndex?: InputMaybe; + highlightPositionPercent?: InputMaybe; id: Scalars['ID']; patch: Scalars['String']; prefix?: InputMaybe; @@ -735,6 +737,8 @@ export type Highlight = { annotation?: Maybe; createdAt: Scalars['Date']; createdByMe: Scalars['Boolean']; + highlightPositionAnchorIndex?: Maybe; + highlightPositionPercent?: Maybe; id: Scalars['ID']; patch: Scalars['String']; prefix?: Maybe; @@ -899,6 +903,8 @@ export enum MergeHighlightErrorCode { export type MergeHighlightInput = { annotation?: InputMaybe; articleId: Scalars['ID']; + highlightPositionAnchorIndex?: InputMaybe; + highlightPositionPercent?: InputMaybe; id: Scalars['ID']; overlapHighlightIdList: Array; patch: Scalars['String']; @@ -3780,6 +3786,8 @@ export type HighlightResolvers, ParentType, ContextType>; createdAt?: Resolver; createdByMe?: Resolver; + highlightPositionAnchorIndex?: Resolver, ParentType, ContextType>; + highlightPositionPercent?: Resolver, ParentType, ContextType>; id?: Resolver; patch?: Resolver; prefix?: Resolver, ParentType, ContextType>; diff --git a/packages/api/src/generated/schema.graphql b/packages/api/src/generated/schema.graphql index ecd1d4c25..fce0f2f7a 100644 --- a/packages/api/src/generated/schema.graphql +++ b/packages/api/src/generated/schema.graphql @@ -247,6 +247,8 @@ enum CreateHighlightErrorCode { input CreateHighlightInput { annotation: String articleId: ID! + highlightPositionAnchorIndex: Int + highlightPositionPercent: Float id: ID! patch: String! prefix: String @@ -648,6 +650,8 @@ type Highlight { annotation: String createdAt: Date! createdByMe: Boolean! + highlightPositionAnchorIndex: Int + highlightPositionPercent: Float id: ID! patch: String! prefix: String @@ -797,6 +801,8 @@ enum MergeHighlightErrorCode { input MergeHighlightInput { annotation: String articleId: ID! + highlightPositionAnchorIndex: Int + highlightPositionPercent: Float id: ID! overlapHighlightIdList: [String!]! patch: String! diff --git a/packages/api/src/schema.ts b/packages/api/src/schema.ts index dfd54c776..765379a09 100755 --- a/packages/api/src/schema.ts +++ b/packages/api/src/schema.ts @@ -639,6 +639,8 @@ const schema = gql` updatedAt: Date! reactions: [Reaction!]! createdByMe: Boolean! + highlightPositionPercent: Float + highlightPositionAnchorIndex: Int } input CreateHighlightInput { @@ -651,6 +653,8 @@ const schema = gql` suffix: String @sanitize annotation: String @sanitize(maxLength: 4000) sharedAt: Date + highlightPositionPercent: Float + highlightPositionAnchorIndex: Int } type CreateHighlightSuccess { @@ -681,6 +685,8 @@ const schema = gql` suffix: String @sanitize annotation: String @sanitize(maxLength: 8000) overlapHighlightIdList: [String!]! + highlightPositionPercent: Float + highlightPositionAnchorIndex: Int } type MergeHighlightSuccess { diff --git a/packages/api/test/resolvers/highlight.test.ts b/packages/api/test/resolvers/highlight.test.ts index d13300cd9..98d40c775 100644 --- a/packages/api/test/resolvers/highlight.test.ts +++ b/packages/api/test/resolvers/highlight.test.ts @@ -21,6 +21,8 @@ const createHighlightQuery = ( linkId: string, highlightId: string, shortHighlightId: string, + highlightPositionPercent = 0.0, + highlightPositionAnchorIndex = 0, prefix = '_prefix', suffix = '_suffix', quote = '_quote', @@ -37,11 +39,15 @@ const createHighlightQuery = ( shortId: "${shortHighlightId}", patch: "${patch}", articleId: "${linkId}", + highlightPositionPercent: ${highlightPositionPercent}, + highlightPositionAnchorIndex: ${highlightPositionAnchorIndex} } ) { ... on CreateHighlightSuccess { highlight { id + highlightPositionPercent + highlightPositionAnchorIndex } } ... on CreateHighlightError { @@ -57,6 +63,8 @@ const mergeHighlightQuery = ( highlightId: string, shortHighlightId: string, overlapHighlightIdList: string[], + highlightPositionPercent = 0.0, + highlightPositionAnchorIndex = 0, prefix = '_prefix', suffix = '_suffix', quote = '_quote', @@ -73,12 +81,16 @@ const mergeHighlightQuery = ( shortId: "${shortHighlightId}", patch: "${patch}", articleId: "${pageId}", - overlapHighlightIdList: "${overlapHighlightIdList}" + overlapHighlightIdList: "${overlapHighlightIdList}", + highlightPositionPercent: ${highlightPositionPercent}, + highlightPositionAnchorIndex: ${highlightPositionAnchorIndex} } ) { ... on MergeHighlightSuccess { highlight { id + highlightPositionPercent + highlightPositionAnchorIndex } } ... on MergeHighlightError { @@ -119,15 +131,25 @@ describe('Highlights API', () => { it('should not fail', async () => { const highlightId = generateFakeUuid() const shortHighlightId = '_short_id' + const highlightPositionPercent = 35.0 + const highlightPositionAnchorIndex = 15 const query = createHighlightQuery( authToken, pageId, highlightId, - shortHighlightId + shortHighlightId, + highlightPositionPercent, + highlightPositionAnchorIndex ) const res = await graphqlRequest(query, authToken).expect(200) expect(res.body.data.createHighlight.highlight.id).to.eq(highlightId) + expect( + res.body.data.createHighlight.highlight.highlightPositionPercent + ).to.eq(highlightPositionPercent) + expect( + res.body.data.createHighlight.highlight.highlightPositionAnchorIndex + ).to.eq(highlightPositionAnchorIndex) }) }) @@ -150,15 +172,25 @@ describe('Highlights API', () => { it('should not fail', async () => { const newHighlightId = generateFakeUuid() const newShortHighlightId = '_short_id_2' + const highlightPositionPercent = 50.0 + const highlightPositionAnchorIndex = 25 const query = mergeHighlightQuery( pageId, newHighlightId, newShortHighlightId, - [highlightId] + [highlightId], + highlightPositionPercent, + highlightPositionAnchorIndex ) const res = await graphqlRequest(query, authToken).expect(200) expect(res.body.data.mergeHighlight.highlight.id).to.eq(newHighlightId) + expect( + res.body.data.mergeHighlight.highlight.highlightPositionPercent + ).to.eq(highlightPositionPercent) + expect( + res.body.data.mergeHighlight.highlight.highlightPositionAnchorIndex + ).to.eq(highlightPositionAnchorIndex) }) }) }) diff --git a/packages/db/elastic_migrations/index_settings.json b/packages/db/elastic_migrations/index_settings.json index 61ec732d4..b0668664a 100644 --- a/packages/db/elastic_migrations/index_settings.json +++ b/packages/db/elastic_migrations/index_settings.json @@ -111,6 +111,12 @@ "type": "date" } } + }, + "highlightPositionPercent": { + "type": "float" + }, + "highlightPositionAnchorIndex": { + "type": "integer" } } },