From 4d2b953e2361724326cbefd7bfc7f1c74b0bcad6 Mon Sep 17 00:00:00 2001 From: Johnny Date: Tue, 2 Jul 2024 22:00:38 +0800 Subject: [PATCH] chore: add enable link preview setting to memo related settings (#3647) --- docs/apidocs.swagger.yaml | 268 +++++------------- proto/api/v1/workspace_setting_service.proto | 2 + .../api/v1/workspace_setting_service.pb.go | 16 +- proto/gen/store/workspace_setting.pb.go | 16 +- proto/store/workspace_setting.proto | 2 + .../api/v1/workspace_setting_service.go | 2 + web/package.json | 3 +- web/src/components/MemoContent/Link.tsx | 11 + .../Settings/MemoRelatedSettings.tsx | 7 + 9 files changed, 121 insertions(+), 206 deletions(-) diff --git a/docs/apidocs.swagger.yaml b/docs/apidocs.swagger.yaml index 253b11dd..ca605c40 100644 --- a/docs/apidocs.swagger.yaml +++ b/docs/apidocs.swagger.yaml @@ -301,16 +301,12 @@ paths: type: integer format: int32 - name: pageToken - description: |- - A page token, received from a previous `ListMemos` call. - Provide this to retrieve the subsequent page. + description: "A page token, received from a previous `ListMemos` call.\r\nProvide this to retrieve the subsequent page." in: query required: false type: string - name: filter - description: |- - Filter is used to filter memos returned in the list. - Format: "creator == 'users/{uid}' && visibilities == ['PUBLIC', 'PROTECTED']" + description: "Filter is used to filter memos returned in the list.\r\nFormat: \"creator == 'users/{uid}' && visibilities == ['PUBLIC', 'PROTECTED']\"" in: query required: false type: string @@ -351,17 +347,12 @@ paths: $ref: '#/definitions/googlerpcStatus' parameters: - name: name - description: |- - name is the name of the user to get stats for. - Format: users/{id} + description: "name is the name of the user to get stats for.\r\nFormat: users/{id}" in: query required: false type: string - name: timezone - description: |- - timezone location - Format: uses tz identifier - https://en.wikipedia.org/wiki/List_of_tz_database_time_zones + description: "timezone location\r\nFormat: uses tz identifier\r\nhttps://en.wikipedia.org/wiki/List_of_tz_database_time_zones" in: query required: false type: string @@ -408,9 +399,7 @@ paths: $ref: '#/definitions/googlerpcStatus' parameters: - name: filter - description: |- - Filter is used to filter memos returned. - Format: "creator == 'users/{uid}' && visibilities == ['PUBLIC', 'PROTECTED']" + description: "Filter is used to filter memos returned.\r\nFormat: \"creator == 'users/{uid}' && visibilities == ['PUBLIC', 'PROTECTED']\"" in: query required: false type: string @@ -543,9 +532,7 @@ paths: $ref: '#/definitions/googlerpcStatus' parameters: - name: filter - description: |- - Filter is used to filter users returned in the list. - Format: "username == 'frank'" + description: "Filter is used to filter users returned in the list.\r\nFormat: \"username == 'frank'\"" in: query required: false type: string @@ -706,9 +693,7 @@ paths: $ref: '#/definitions/googlerpcStatus' parameters: - name: name - description: |- - The resource name of the workspace setting. - Format: settings/{setting} + description: "The resource name of the workspace setting.\r\nFormat: settings/{setting}" in: path required: true type: string @@ -730,9 +715,7 @@ paths: $ref: '#/definitions/googlerpcStatus' parameters: - name: setting.name - description: |- - name is the name of the setting. - Format: settings/{setting} + description: "name is the name of the setting.\r\nFormat: settings/{setting}" in: path required: true type: string @@ -768,9 +751,7 @@ paths: $ref: '#/definitions/googlerpcStatus' parameters: - name: identityProvider.name - description: |- - The name of the identityProvider. - Format: identityProviders/{id} + description: "The name of the identityProvider.\r\nFormat: identityProviders/{id}" in: path required: true type: string @@ -808,9 +789,7 @@ paths: $ref: '#/definitions/googlerpcStatus' parameters: - name: inbox.name - description: |- - The name of the inbox. - Format: inboxes/{id} + description: "The name of the inbox.\r\nFormat: inboxes/{id}" in: path required: true type: string @@ -854,10 +833,7 @@ paths: $ref: '#/definitions/googlerpcStatus' parameters: - name: memo.name - description: |- - The name of the memo. - Format: memos/{id} - id is the system generated id. + description: "The name of the memo.\r\nFormat: memos/{id}\r\nid is the system generated id." in: path required: true type: string @@ -875,9 +851,7 @@ paths: $ref: '#/definitions/v1RowStatus' creator: type: string - title: |- - The name of the creator. - Format: users/{id} + title: "The name of the creator.\r\nFormat: users/{id}" createTime: type: string format: date-time @@ -930,9 +904,7 @@ paths: readOnly: true parent: type: string - title: |- - The name of the parent memo. - Format: memos/{id} + title: "The name of the parent memo.\r\nFormat: memos/{id}" readOnly: true tags: - MemoService @@ -951,9 +923,7 @@ paths: $ref: '#/definitions/googlerpcStatus' parameters: - name: name_1 - description: |- - The name of the identityProvider to get. - Format: identityProviders/{id} + description: "The name of the identityProvider to get.\r\nFormat: identityProviders/{id}" in: path required: true type: string @@ -975,9 +945,7 @@ paths: $ref: '#/definitions/googlerpcStatus' parameters: - name: name_1 - description: |- - The name of the identityProvider to delete. - Format: identityProviders/{id} + description: "The name of the identityProvider to delete.\r\nFormat: identityProviders/{id}" in: path required: true type: string @@ -999,10 +967,7 @@ paths: $ref: '#/definitions/googlerpcStatus' parameters: - name: name_2 - description: |- - The name of the resource. - Format: resources/{id} - id is the system generated unique identifier. + description: "The name of the resource.\r\nFormat: resources/{id}\r\nid is the system generated unique identifier." in: path required: true type: string @@ -1024,9 +989,7 @@ paths: $ref: '#/definitions/googlerpcStatus' parameters: - name: name_2 - description: |- - The name of the inbox to delete. - Format: inboxes/{id} + description: "The name of the inbox to delete.\r\nFormat: inboxes/{id}" in: path required: true type: string @@ -1048,9 +1011,7 @@ paths: $ref: '#/definitions/googlerpcStatus' parameters: - name: name_3 - description: |- - The name of the memo. - Format: memos/{id} + description: "The name of the memo.\r\nFormat: memos/{id}" in: path required: true type: string @@ -1072,10 +1033,7 @@ paths: $ref: '#/definitions/googlerpcStatus' parameters: - name: name_3 - description: |- - The name of the resource. - Format: resources/{id} - id is the system generated unique identifier. + description: "The name of the resource.\r\nFormat: resources/{id}\r\nid is the system generated unique identifier." in: path required: true type: string @@ -1098,9 +1056,7 @@ paths: $ref: '#/definitions/googlerpcStatus' parameters: - name: name_4 - description: |- - The name of the memo. - Format: memos/{id} + description: "The name of the memo.\r\nFormat: memos/{id}" in: path required: true type: string @@ -1122,9 +1078,7 @@ paths: $ref: '#/definitions/googlerpcStatus' parameters: - name: name - description: |- - The name of the user. - Format: users/{id} + description: "The name of the user.\r\nFormat: users/{id}" in: path required: true type: string @@ -1146,9 +1100,7 @@ paths: $ref: '#/definitions/googlerpcStatus' parameters: - name: name - description: |- - The name of the user. - Format: users/{id} + description: "The name of the user.\r\nFormat: users/{id}" in: path required: true type: string @@ -1170,9 +1122,7 @@ paths: $ref: '#/definitions/googlerpcStatus' parameters: - name: name - description: |- - The name of the user. - Format: users/{id} + description: "The name of the user.\r\nFormat: users/{id}" in: path required: true type: string @@ -1193,9 +1143,7 @@ paths: $ref: '#/definitions/googlerpcStatus' parameters: - name: name - description: |- - The name of the user. - Format: users/{id} + description: "The name of the user.\r\nFormat: users/{id}" in: path required: true type: string @@ -1223,9 +1171,7 @@ paths: $ref: '#/definitions/googlerpcStatus' parameters: - name: name - description: |- - The name of the user. - Format: users/{id} + description: "The name of the user.\r\nFormat: users/{id}" in: path required: true type: string @@ -1252,9 +1198,7 @@ paths: $ref: '#/definitions/googlerpcStatus' parameters: - name: name - description: |- - The name of the memo. - Format: memos/{id} + description: "The name of the memo.\r\nFormat: memos/{id}" in: path required: true type: string @@ -1275,9 +1219,7 @@ paths: $ref: '#/definitions/googlerpcStatus' parameters: - name: name - description: |- - The name of the memo. - Format: memos/{id} + description: "The name of the memo.\r\nFormat: memos/{id}" in: path required: true type: string @@ -1304,9 +1246,7 @@ paths: $ref: '#/definitions/googlerpcStatus' parameters: - name: name - description: |- - The name of the memo. - Format: memos/{id}. Use "memos/-" to list all properties. + description: "The name of the memo.\r\nFormat: memos/{id}. Use \"memos/-\" to list all properties." in: path required: true type: string @@ -1329,9 +1269,7 @@ paths: $ref: '#/definitions/googlerpcStatus' parameters: - name: name - description: |- - The name of the memo. - Format: memos/{id}. Use "memos/-" to rebuild all memos. + description: "The name of the memo.\r\nFormat: memos/{id}. Use \"memos/-\" to rebuild all memos." in: path required: true type: string @@ -1358,9 +1296,7 @@ paths: $ref: '#/definitions/googlerpcStatus' parameters: - name: name - description: |- - The name of the memo. - Format: memos/{id} + description: "The name of the memo.\r\nFormat: memos/{id}" in: path required: true type: string @@ -1381,9 +1317,7 @@ paths: $ref: '#/definitions/googlerpcStatus' parameters: - name: name - description: |- - The name of the memo. - Format: memos/{id} + description: "The name of the memo.\r\nFormat: memos/{id}" in: path required: true type: string @@ -1410,9 +1344,7 @@ paths: $ref: '#/definitions/googlerpcStatus' parameters: - name: name - description: |- - The name of the memo. - Format: memos/{id} + description: "The name of the memo.\r\nFormat: memos/{id}" in: path required: true type: string @@ -1434,9 +1366,7 @@ paths: $ref: '#/definitions/googlerpcStatus' parameters: - name: name - description: |- - The name of the memo. - Format: memos/{id} + description: "The name of the memo.\r\nFormat: memos/{id}" in: path required: true type: string @@ -1463,9 +1393,7 @@ paths: $ref: '#/definitions/googlerpcStatus' parameters: - name: name - description: |- - The name of the memo. - Format: memos/{id} + description: "The name of the memo.\r\nFormat: memos/{id}" in: path required: true type: string @@ -1487,9 +1415,7 @@ paths: $ref: '#/definitions/googlerpcStatus' parameters: - name: name - description: |- - The name of the memo. - Format: memos/{id} + description: "The name of the memo.\r\nFormat: memos/{id}" in: path required: true type: string @@ -1516,9 +1442,7 @@ paths: $ref: '#/definitions/googlerpcStatus' parameters: - name: name - description: |- - The name of the user. - Format: users/{id} + description: "The name of the user.\r\nFormat: users/{id}" in: path required: true type: string @@ -1540,17 +1464,13 @@ paths: $ref: '#/definitions/googlerpcStatus' parameters: - name: parent - description: |- - The parent, who owns the tags. - Format: memos/{id}. Use "memos/-" to list all tags. + description: "The parent, who owns the tags.\r\nFormat: memos/{id}. Use \"memos/-\" to list all tags." in: path required: true type: string pattern: memos/[^/]+ - name: filter - description: |- - Filter is used to filter memos. - Format: "creator == 'users/{uid}' && visibilities == ['PUBLIC', 'PROTECTED']" + description: "Filter is used to filter memos.\r\nFormat: \"creator == 'users/{uid}' && visibilities == ['PUBLIC', 'PROTECTED']\"" in: query required: false type: string @@ -1572,9 +1492,7 @@ paths: $ref: '#/definitions/googlerpcStatus' parameters: - name: parent - description: |- - The parent, who owns the tags. - Format: memos/{id}. Use "memos/-" to delete all tags. + description: "The parent, who owns the tags.\r\nFormat: memos/{id}. Use \"memos/-\" to delete all tags." in: path required: true type: string @@ -1605,9 +1523,7 @@ paths: $ref: '#/definitions/googlerpcStatus' parameters: - name: parent - description: |- - The parent, who owns the tags. - Format: memos/{id}. Use "memos/-" to rename all tags. + description: "The parent, who owns the tags.\r\nFormat: memos/{id}. Use \"memos/-\" to rename all tags." in: path required: true type: string @@ -1634,10 +1550,7 @@ paths: $ref: '#/definitions/googlerpcStatus' parameters: - name: resource.name - description: |- - The name of the resource. - Format: resources/{id} - id is the system generated unique identifier. + description: "The name of the resource.\r\nFormat: resources/{id}\r\nid is the system generated unique identifier." in: path required: true type: string @@ -1669,9 +1582,7 @@ paths: format: int64 memo: type: string - title: |- - The related memo. - Format: memos/{id} + title: "The related memo.\r\nFormat: memos/{id}" tags: - ResourceService /api/v1/{setting.name}: @@ -1689,9 +1600,7 @@ paths: $ref: '#/definitions/googlerpcStatus' parameters: - name: setting.name - description: |- - The name of the user. - Format: users/{id} + description: "The name of the user.\r\nFormat: users/{id}" in: path required: true type: string @@ -1728,9 +1637,7 @@ paths: $ref: '#/definitions/googlerpcStatus' parameters: - name: user.name - description: |- - The name of the user. - Format: users/{id} + description: "The name of the user.\r\nFormat: users/{id}" in: path required: true type: string @@ -1784,9 +1691,7 @@ paths: $ref: '#/definitions/googlerpcStatus' parameters: - name: name - description: |- - The name of the user. - Format: users/{id} + description: "The name of the user.\r\nFormat: users/{id}" in: path required: true type: string @@ -1819,10 +1724,7 @@ paths: $ref: '#/definitions/googlerpcStatus' parameters: - name: name - description: |- - The name of the resource. - Format: resources/{id} - id is the system generated unique identifier. + description: "The name of the resource.\r\nFormat: resources/{id}\r\nid is the system generated unique identifier." in: path required: true type: string @@ -2003,9 +1905,7 @@ definitions: properties: name: type: string - title: |- - The name of the identityProvider. - Format: identityProviders/{id} + title: "The name of the identityProvider.\r\nFormat: identityProviders/{id}" type: $ref: '#/definitions/apiv1IdentityProviderType' title: @@ -2049,9 +1949,7 @@ definitions: properties: name: type: string - title: |- - The name of the user. - Format: users/{id} + title: "The name of the user.\r\nFormat: users/{id}" locale: type: string description: The preferred locale of the user. @@ -2105,14 +2003,15 @@ definitions: enableDoubleClickEdit: type: boolean description: enable_double_click_edit enables editing on double click. + enableLinkPreview: + type: boolean + description: enable_link_preview enables links preview. apiv1WorkspaceSetting: type: object properties: name: type: string - title: |- - name is the name of the setting. - Format: settings/{setting} + title: "name is the name of the setting.\r\nFormat: settings/{setting}" generalSetting: $ref: '#/definitions/apiv1WorkspaceGeneralSetting' storageSetting: @@ -2127,9 +2026,7 @@ definitions: description: storage_type is the storage type. filepathTemplate: type: string - title: |- - The template of file path. - e.g. assets/{timestamp}_{filename} + title: "The template of file path.\r\ne.g. assets/{timestamp}_{filename}" uploadSizeLimitMb: type: string format: int64 @@ -2398,9 +2295,7 @@ definitions: additionalProperties: type: integer format: int32 - description: |- - stats is the stats of memo creating/updating activities. - key is the year-month-day string. e.g. "2020-01-01". + description: "stats is the stats of memo creating/updating activities.\r\nkey is the year-month-day string. e.g. \"2020-01-01\"." v1HeadingNode: type: object properties: @@ -2434,9 +2329,7 @@ definitions: properties: name: type: string - title: |- - The name of the inbox. - Format: inboxes/{id} + title: "The name of the inbox.\r\nFormat: inboxes/{id}" sender: type: string title: 'Format: users/{id}' @@ -2556,10 +2449,7 @@ definitions: additionalProperties: type: integer format: int32 - description: |- - tag_amounts is the amount of tags. - key is the tag name. e.g. "tag1". - value is the amount of the tag. + description: "tag_amounts is the amount of tags.\r\nkey is the tag name. e.g. \"tag1\".\r\nvalue is the amount of the tag." v1ListMemosResponse: type: object properties: @@ -2570,9 +2460,7 @@ definitions: $ref: '#/definitions/v1Memo' nextPageToken: type: string - description: |- - A token, which can be sent as `page_token` to retrieve the next page. - If this field is omitted, there are no subsequent pages. + description: "A token, which can be sent as `page_token` to retrieve the next page.\r\nIf this field is omitted, there are no subsequent pages." v1ListResourcesResponse: type: object properties: @@ -2620,10 +2508,7 @@ definitions: properties: name: type: string - description: |- - The name of the memo. - Format: memos/{id} - id is the system generated id. + description: "The name of the memo.\r\nFormat: memos/{id}\r\nid is the system generated id." uid: type: string description: The user defined id of the memo. @@ -2631,9 +2516,7 @@ definitions: $ref: '#/definitions/v1RowStatus' creator: type: string - title: |- - The name of the creator. - Format: users/{id} + title: "The name of the creator.\r\nFormat: users/{id}" createTime: type: string format: date-time @@ -2686,9 +2569,7 @@ definitions: readOnly: true parent: type: string - title: |- - The name of the parent memo. - Format: memos/{id} + title: "The name of the parent memo.\r\nFormat: memos/{id}" readOnly: true v1MemoProperty: type: object @@ -2710,14 +2591,10 @@ definitions: properties: memo: type: string - title: |- - The name of memo. - Format: "memos/{uid}" + title: "The name of memo.\r\nFormat: \"memos/{uid}\"" relatedMemo: type: string - title: |- - The name of related memo. - Format: "memos/{uid}" + title: "The name of related memo.\r\nFormat: \"memos/{uid}\"" type: $ref: '#/definitions/v1MemoRelationType' v1MemoRelationType: @@ -2866,9 +2743,7 @@ definitions: format: int32 creator: type: string - title: |- - The name of the creator. - Format: users/{id} + title: "The name of the creator.\r\nFormat: users/{id}" contentId: type: string reactionType: @@ -2902,10 +2777,7 @@ definitions: properties: name: type: string - description: |- - The name of the resource. - Format: resources/{id} - id is the system generated unique identifier. + description: "The name of the resource.\r\nFormat: resources/{id}\r\nid is the system generated unique identifier." uid: type: string description: The user defined id of the resource. @@ -2927,9 +2799,7 @@ definitions: format: int64 memo: type: string - title: |- - The related memo. - Format: memos/{id} + title: "The related memo.\r\nFormat: memos/{id}" v1RestoreMarkdownRequest: type: object properties: @@ -3053,9 +2923,7 @@ definitions: properties: name: type: string - title: |- - The name of the user. - Format: users/{id} + title: "The name of the user.\r\nFormat: users/{id}" id: type: integer format: int32 @@ -3129,9 +2997,7 @@ definitions: properties: owner: type: string - title: |- - The name of instance owner. - Format: "users/{id}" + title: "The name of instance owner.\r\nFormat: \"users/{id}\"" version: type: string title: version is the current version of instance diff --git a/proto/api/v1/workspace_setting_service.proto b/proto/api/v1/workspace_setting_service.proto index 0cb7242f..dc490421 100644 --- a/proto/api/v1/workspace_setting_service.proto +++ b/proto/api/v1/workspace_setting_service.proto @@ -92,6 +92,8 @@ message WorkspaceMemoRelatedSetting { bool enable_auto_compact = 4; // enable_double_click_edit enables editing on double click. bool enable_double_click_edit = 5; + // enable_link_preview enables links preview. + bool enable_link_preview = 6; } message GetWorkspaceSettingRequest { diff --git a/proto/gen/api/v1/workspace_setting_service.pb.go b/proto/gen/api/v1/workspace_setting_service.pb.go index 0d31d856..1d48b2ac 100644 --- a/proto/gen/api/v1/workspace_setting_service.pb.go +++ b/proto/gen/api/v1/workspace_setting_service.pb.go @@ -417,6 +417,8 @@ type WorkspaceMemoRelatedSetting struct { EnableAutoCompact bool `protobuf:"varint,4,opt,name=enable_auto_compact,json=enableAutoCompact,proto3" json:"enable_auto_compact,omitempty"` // enable_double_click_edit enables editing on double click. EnableDoubleClickEdit bool `protobuf:"varint,5,opt,name=enable_double_click_edit,json=enableDoubleClickEdit,proto3" json:"enable_double_click_edit,omitempty"` + // enable_link_preview enables links preview. + EnableLinkPreview bool `protobuf:"varint,6,opt,name=enable_link_preview,json=enableLinkPreview,proto3" json:"enable_link_preview,omitempty"` } func (x *WorkspaceMemoRelatedSetting) Reset() { @@ -486,6 +488,13 @@ func (x *WorkspaceMemoRelatedSetting) GetEnableDoubleClickEdit() bool { return false } +func (x *WorkspaceMemoRelatedSetting) GetEnableLinkPreview() bool { + if x != nil { + return x.EnableLinkPreview + } + return false +} + type GetWorkspaceSettingRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -749,7 +758,7 @@ var file_api_v1_workspace_setting_service_proto_rawDesc = []byte{ 0x1c, 0x0a, 0x18, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x4c, - 0x4f, 0x43, 0x41, 0x4c, 0x10, 0x02, 0x12, 0x06, 0x0a, 0x02, 0x53, 0x33, 0x10, 0x03, 0x22, 0xa9, + 0x4f, 0x43, 0x41, 0x4c, 0x10, 0x02, 0x12, 0x06, 0x0a, 0x02, 0x53, 0x33, 0x10, 0x03, 0x22, 0xd9, 0x02, 0x0a, 0x1b, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x36, 0x0a, 0x17, 0x64, 0x69, 0x73, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, @@ -768,7 +777,10 @@ var file_api_v1_workspace_setting_service_proto_rawDesc = []byte{ 0x74, 0x12, 0x37, 0x0a, 0x18, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x5f, 0x65, 0x64, 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x44, 0x6f, 0x75, 0x62, 0x6c, - 0x65, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x45, 0x64, 0x69, 0x74, 0x22, 0x36, 0x0a, 0x1a, 0x47, 0x65, + 0x65, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x45, 0x64, 0x69, 0x74, 0x12, 0x2e, 0x0a, 0x13, 0x65, 0x6e, + 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x70, 0x72, 0x65, 0x76, 0x69, 0x65, + 0x77, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x4c, + 0x69, 0x6e, 0x6b, 0x50, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x22, 0x36, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x52, 0x04, 0x6e, 0x61, diff --git a/proto/gen/store/workspace_setting.pb.go b/proto/gen/store/workspace_setting.pb.go index 4119cc2b..3c6ffa0d 100644 --- a/proto/gen/store/workspace_setting.pb.go +++ b/proto/gen/store/workspace_setting.pb.go @@ -614,6 +614,8 @@ type WorkspaceMemoRelatedSetting struct { EnableAutoCompact bool `protobuf:"varint,4,opt,name=enable_auto_compact,json=enableAutoCompact,proto3" json:"enable_auto_compact,omitempty"` // enable_double_click_edit enables editing on double click. EnableDoubleClickEdit bool `protobuf:"varint,5,opt,name=enable_double_click_edit,json=enableDoubleClickEdit,proto3" json:"enable_double_click_edit,omitempty"` + // enable_link_preview enables links preview. + EnableLinkPreview bool `protobuf:"varint,6,opt,name=enable_link_preview,json=enableLinkPreview,proto3" json:"enable_link_preview,omitempty"` } func (x *WorkspaceMemoRelatedSetting) Reset() { @@ -683,6 +685,13 @@ func (x *WorkspaceMemoRelatedSetting) GetEnableDoubleClickEdit() bool { return false } +func (x *WorkspaceMemoRelatedSetting) GetEnableLinkPreview() bool { + if x != nil { + return x.EnableLinkPreview + } + return false +} + var File_store_workspace_setting_proto protoreflect.FileDescriptor var file_store_workspace_setting_proto_rawDesc = []byte{ @@ -773,7 +782,7 @@ var file_store_workspace_setting_proto_rawDesc = []byte{ 0x16, 0x0a, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x22, - 0xa9, 0x02, 0x0a, 0x1b, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4d, 0x65, 0x6d, + 0xd9, 0x02, 0x0a, 0x1b, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x36, 0x0a, 0x17, 0x64, 0x69, 0x73, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, @@ -791,7 +800,10 @@ var file_store_workspace_setting_proto_rawDesc = []byte{ 0x63, 0x74, 0x12, 0x37, 0x0a, 0x18, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x5f, 0x65, 0x64, 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x44, 0x6f, 0x75, 0x62, - 0x6c, 0x65, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x45, 0x64, 0x69, 0x74, 0x2a, 0x73, 0x0a, 0x13, 0x57, + 0x6c, 0x65, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x45, 0x64, 0x69, 0x74, 0x12, 0x2e, 0x0a, 0x13, 0x65, + 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x70, 0x72, 0x65, 0x76, 0x69, + 0x65, 0x77, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, + 0x4c, 0x69, 0x6e, 0x6b, 0x50, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x2a, 0x73, 0x0a, 0x13, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x4b, 0x65, 0x79, 0x12, 0x25, 0x0a, 0x21, 0x57, 0x4f, 0x52, 0x4b, 0x53, 0x50, 0x41, 0x43, 0x45, 0x5f, 0x53, 0x45, 0x54, 0x54, 0x49, 0x4e, 0x47, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, diff --git a/proto/store/workspace_setting.proto b/proto/store/workspace_setting.proto index aed6d095..267532ea 100644 --- a/proto/store/workspace_setting.proto +++ b/proto/store/workspace_setting.proto @@ -88,4 +88,6 @@ message WorkspaceMemoRelatedSetting { bool enable_auto_compact = 4; // enable_double_click_edit enables editing on double click. bool enable_double_click_edit = 5; + // enable_link_preview enables links preview. + bool enable_link_preview = 6; } diff --git a/server/router/api/v1/workspace_setting_service.go b/server/router/api/v1/workspace_setting_service.go index 58e6f6a6..1e5997fc 100644 --- a/server/router/api/v1/workspace_setting_service.go +++ b/server/router/api/v1/workspace_setting_service.go @@ -219,6 +219,7 @@ func convertWorkspaceMemoRelatedSettingFromStore(setting *storepb.WorkspaceMemoR ContentLengthLimit: setting.ContentLengthLimit, EnableAutoCompact: setting.EnableAutoCompact, EnableDoubleClickEdit: setting.EnableDoubleClickEdit, + EnableLinkPreview: setting.EnableLinkPreview, } } @@ -232,5 +233,6 @@ func convertWorkspaceMemoRelatedSettingToStore(setting *v1pb.WorkspaceMemoRelate ContentLengthLimit: setting.ContentLengthLimit, EnableAutoCompact: setting.EnableAutoCompact, EnableDoubleClickEdit: setting.EnableDoubleClickEdit, + EnableLinkPreview: setting.EnableLinkPreview, } } diff --git a/web/package.json b/web/package.json index bc712adb..09892f43 100644 --- a/web/package.json +++ b/web/package.json @@ -70,5 +70,6 @@ "protobufjs": "^7.3.2", "typescript": "^5.5.2", "vite": "^5.3.1" - } + }, + "packageManager": "pnpm@9.3.0+sha512.ee7b93e0c2bd11409c6424f92b866f31d3ea1bef5fbe47d3c7500cdc3c9668833d2e55681ad66df5b640c61fa9dc25d546efa54d76d7f8bf54b13614ac293631" } diff --git a/web/src/components/MemoContent/Link.tsx b/web/src/components/MemoContent/Link.tsx index 7febca52..2b3223ae 100644 --- a/web/src/components/MemoContent/Link.tsx +++ b/web/src/components/MemoContent/Link.tsx @@ -1,7 +1,10 @@ import { Link as MLink, Tooltip } from "@mui/joy"; import { useState } from "react"; import { markdownServiceClient } from "@/grpcweb"; +import { useWorkspaceSettingStore } from "@/store/v1"; import { LinkMetadata } from "@/types/proto/api/v1/markdown_service"; +import { WorkspaceMemoRelatedSetting } from "@/types/proto/api/v1/workspace_setting_service"; +import { WorkspaceSettingKey } from "@/types/proto/store/workspace_setting"; interface Props { url: string; @@ -18,11 +21,19 @@ const getFaviconWithGoogleS2 = (url: string) => { }; const Link: React.FC = ({ text, url }: Props) => { + const workspaceSettingStore = useWorkspaceSettingStore(); + const workspaceMemoRelatedSetting = + workspaceSettingStore.getWorkspaceSettingByKey(WorkspaceSettingKey.MEMO_RELATED).memoRelatedSetting || + WorkspaceMemoRelatedSetting.fromPartial({}); const [initialized, setInitialized] = useState(false); const [showTooltip, setShowTooltip] = useState(false); const [linkMetadata, setLinkMetadata] = useState(); const handleMouseEnter = async () => { + if (!workspaceMemoRelatedSetting.enableLinkPreview) { + return; + } + setShowTooltip(true); if (!initialized) { try { diff --git a/web/src/components/Settings/MemoRelatedSettings.tsx b/web/src/components/Settings/MemoRelatedSettings.tsx index 32dc196a..ee6270c9 100644 --- a/web/src/components/Settings/MemoRelatedSettings.tsx +++ b/web/src/components/Settings/MemoRelatedSettings.tsx @@ -53,6 +53,13 @@ const MemoRelatedSettings = () => { onChange={(event) => updatePartialSetting({ enableAutoCompact: event.target.checked })} /> +
+ Enable link preview + updatePartialSetting({ enableLinkPreview: event.target.checked })} + /> +
{t("setting.system-section.enable-double-click-to-edit")}