feat(core): intilize integration module and basic readwise impl (#10726)

close AF-2257, AF-2261, AF-2260, AF-2259

### Feat

- New `Integration` Module
- Basic Readwise integration
  - connect
  - import
  - disconnect
- Common Integration UI
- Common Integration Writer  (Transform markdown to AFFiNE Doc)

### Not Implemented

>  will be implemented in down-stack
- delete docs when disconnect
- readwise settiing UI
- integration property rendering
This commit is contained in:
CatsJuice
2025-03-18 08:13:57 +00:00
parent ef00a158fc
commit ff8c3d1cee
33 changed files with 2308 additions and 25 deletions

View File

@@ -1,26 +1,26 @@
{
"ar": 98,
"ar": 96,
"ca": 4,
"da": 5,
"de": 98,
"el-GR": 98,
"de": 97,
"el-GR": 96,
"en": 100,
"es-AR": 98,
"es-CL": 100,
"es": 98,
"fa": 98,
"fr": 98,
"es-AR": 97,
"es-CL": 98,
"es": 96,
"fa": 96,
"fr": 96,
"hi": 2,
"it-IT": 98,
"it-IT": 97,
"it": 1,
"ja": 98,
"ko": 62,
"pl": 98,
"pt-BR": 98,
"ru": 98,
"sv-SE": 98,
"uk": 98,
"ja": 96,
"ko": 61,
"pl": 96,
"pt-BR": 96,
"ru": 96,
"sv-SE": 96,
"uk": 96,
"ur": 2,
"zh-Hans": 98,
"zh-Hant": 98
"zh-Hans": 96,
"zh-Hant": 96
}

View File

@@ -7117,6 +7117,144 @@ export function useAFFiNEI18N(): {
* `Please contact your workspace owner to add more seats.`
*/
["com.affine.fail-to-join-workspace.description-2"](): string;
/**
* `Readwise`
*/
["com.affine.integration.name.readwise"](): string;
/**
* `Integrations`
*/
["com.affine.integration.integrations"](): string;
/**
* `Elevate your AFFiNE experience with diverse add-ons and seamless integrations.`
*/
["com.affine.integration.setting.description"](): string;
/**
* `Learn how to develop a integration for AFFiNE`
*/
["com.affine.integration.setting.learn"](): string;
/**
* `Readwise`
*/
["com.affine.integration.readwise.name"](): string;
/**
* `Manually import your content to AFFiNE from Readwise`
*/
["com.affine.integration.readwise.desc"](): string;
/**
* `Connect`
*/
["com.affine.integration.readwise.connect"](): string;
/**
* `Connect to Readwise`
*/
["com.affine.integration.readwise.connect.title"](): string;
/**
* `Paste your access token here`
*/
["com.affine.integration.readwise.connect.placeholder"](): string;
/**
* `Please enter a valid access token.`
*/
["com.affine.integration.readwise.connect.input-error"](): string;
/**
* `Access Token failed validation`
*/
["com.affine.integration.readwise.connect.error-notify-title"](): string;
/**
* `The token could not access Readwise. Please verify access and try again.`
*/
["com.affine.integration.readwise.connect.error-notify-desc"](): string;
/**
* `Import`
*/
["com.affine.integration.readwise.import"](): string;
/**
* `Disconnect`
*/
["com.affine.integration.readwise.disconnect"](): string;
/**
* `Disconnect Readwise?`
*/
["com.affine.integration.readwise.disconnect.title"](): string;
/**
* `Once disconnected, content will no longer be imported. Do you want to keep your existing highlights in AFFiNE?`
*/
["com.affine.integration.readwise.disconnect.desc"](): string;
/**
* `Keep`
*/
["com.affine.integration.readwise.disconnect.keep"](): string;
/**
* `Delete`
*/
["com.affine.integration.readwise.disconnect.delete"](): string;
/**
* `Highlights to be imported this time`
*/
["com.affine.integration.readwise.import.title"](): string;
/**
* `Importing everything from the start`
*/
["com.affine.integration.readwise.import.desc-from-start"](): string;
/**
* `Content`
*/
["com.affine.integration.readwise.import.cell-h-content"](): string;
/**
* `Todo`
*/
["com.affine.integration.readwise.import.cell-h-todo"](): string;
/**
* `Last update on Readwise`
*/
["com.affine.integration.readwise.import.cell-h-time"](): string;
/**
* `New`
*/
["com.affine.integration.readwise.import.todo-new"](): string;
/**
* `Skip`
*/
["com.affine.integration.readwise.import.todo-skip"](): string;
/**
* `Updated`
*/
["com.affine.integration.readwise.import.todo-update"](): string;
/**
* `No highlights needs to be imported`
*/
["com.affine.integration.readwise.import.empty"](): string;
/**
* `Importing...`
*/
["com.affine.integration.readwise.import.importing"](): string;
/**
* `Please keep this app active until it's finished`
*/
["com.affine.integration.readwise.import.importing-desc"](): string;
/**
* `Stop Importing`
*/
["com.affine.integration.readwise.import.importing-stop"](): string;
/**
* `Importing aborted`
*/
["com.affine.integration.readwise.import.abort-notify-title"](): string;
/**
* `Import aborted, with {{finished}} highlights processed`
*/
["com.affine.integration.readwise.import.abort-notify-desc"](options: {
readonly finished: string;
}): string;
/**
* `Author`
*/
["com.affine.integration.readwise-prop.author"](): string;
/**
* `Source`
*/
["com.affine.integration.readwise-prop.source"](): string;
/**
* `An internal error occurred.`
*/
@@ -8119,4 +8257,18 @@ export const TypedTrans: {
["1"]: JSX.Element;
["2"]: JSX.Element;
}>>;
/**
* `Import your Readwise highlights to AFFiNE. Please visit Readwise, click <a>"Get Access Token"</a>, and paste the token below.`
*/
["com.affine.integration.readwise.connect.desc"]: ComponentType<TypedTransProps<Readonly<{}>, {
a: JSX.Element;
}>>;
/**
* `Updates to be imported since last successful import on {{lastImportedAt}} <a>Import everything instead</a>`
*/
["com.affine.integration.readwise.import.desc-from-last"]: ComponentType<TypedTransProps<{
readonly lastImportedAt: string;
}, {
a: JSX.Element;
}>>;
} = /*#__PURE__*/ createProxy(createComponent);

View File

@@ -1771,6 +1771,42 @@
"com.affine.fail-to-join-workspace.title": "Join Failed",
"com.affine.fail-to-join-workspace.description-1": "Unable to join <1/> <2>{{workspaceName}}</2> due to insufficient seats available.",
"com.affine.fail-to-join-workspace.description-2": "Please contact your workspace owner to add more seats.",
"com.affine.integration.name.readwise": "Readwise",
"com.affine.integration.integrations": "Integrations",
"com.affine.integration.setting.description": "Elevate your AFFiNE experience with diverse add-ons and seamless integrations.",
"com.affine.integration.setting.learn": "Learn how to develop a integration for AFFiNE",
"com.affine.integration.readwise.name": "Readwise",
"com.affine.integration.readwise.desc": "Manually import your content to AFFiNE from Readwise",
"com.affine.integration.readwise.connect": "Connect",
"com.affine.integration.readwise.connect.title": "Connect to Readwise",
"com.affine.integration.readwise.connect.desc": "Import your Readwise highlights to AFFiNE. Please visit Readwise, click <a>\"Get Access Token\"</a>, and paste the token below.",
"com.affine.integration.readwise.connect.placeholder": "Paste your access token here",
"com.affine.integration.readwise.connect.input-error": "Please enter a valid access token.",
"com.affine.integration.readwise.connect.error-notify-title": "Access Token failed validation",
"com.affine.integration.readwise.connect.error-notify-desc": "The token could not access Readwise. Please verify access and try again.",
"com.affine.integration.readwise.import": "Import",
"com.affine.integration.readwise.disconnect": "Disconnect",
"com.affine.integration.readwise.disconnect.title": "Disconnect Readwise?",
"com.affine.integration.readwise.disconnect.desc": "Once disconnected, content will no longer be imported. Do you want to keep your existing highlights in AFFiNE?",
"com.affine.integration.readwise.disconnect.keep": "Keep",
"com.affine.integration.readwise.disconnect.delete": "Delete",
"com.affine.integration.readwise.import.title": "Highlights to be imported this time",
"com.affine.integration.readwise.import.desc-from-start": "Importing everything from the start",
"com.affine.integration.readwise.import.desc-from-last": "Updates to be imported since last successful import on {{lastImportedAt}} <a>Import everything instead</a>",
"com.affine.integration.readwise.import.cell-h-content": "Content",
"com.affine.integration.readwise.import.cell-h-todo": "Todo",
"com.affine.integration.readwise.import.cell-h-time": "Last update on Readwise",
"com.affine.integration.readwise.import.todo-new": "New",
"com.affine.integration.readwise.import.todo-skip": "Skip",
"com.affine.integration.readwise.import.todo-update": "Updated",
"com.affine.integration.readwise.import.empty": "No highlights needs to be imported",
"com.affine.integration.readwise.import.importing": "Importing...",
"com.affine.integration.readwise.import.importing-desc": "Please keep this app active until it's finished",
"com.affine.integration.readwise.import.importing-stop": "Stop Importing",
"com.affine.integration.readwise.import.abort-notify-title": "Importing aborted",
"com.affine.integration.readwise.import.abort-notify-desc": "Import aborted, with {{finished}} highlights processed",
"com.affine.integration.readwise-prop.author": "Author",
"com.affine.integration.readwise-prop.source": "Source",
"error.INTERNAL_SERVER_ERROR": "An internal error occurred.",
"error.NETWORK_ERROR": "Network error.",
"error.TOO_MANY_REQUEST": "Too many requests.",