diff --git a/blocksuite/affine/blocks/frame/src/frame-toolbar.ts b/blocksuite/affine/blocks/frame/src/frame-toolbar.ts index d42e3e11b7..2f5f777fad 100644 --- a/blocksuite/affine/blocks/frame/src/frame-toolbar.ts +++ b/blocksuite/affine/blocks/frame/src/frame-toolbar.ts @@ -62,13 +62,11 @@ const builtinSurfaceToolbarConfig = { if (!rootModel) return; const { id: frameId, xywh } = model; - let lastNoteId = rootModel.children - .filter( - note => - matchModels(note, [NoteBlockModel]) && - note.props.displayMode !== NoteDisplayMode.EdgelessOnly - ) - .pop()?.id; + let lastNoteId = rootModel.children.findLast( + note => + matchModels(note, [NoteBlockModel]) && + note.props.displayMode !== NoteDisplayMode.EdgelessOnly + )?.id; if (!lastNoteId) { const bounds = Bound.deserialize(xywh); diff --git a/blocksuite/affine/data-view/src/property-presets/select/define.ts b/blocksuite/affine/data-view/src/property-presets/select/define.ts index d4036b0a1f..b86d604672 100644 --- a/blocksuite/affine/data-view/src/property-presets/select/define.ts +++ b/blocksuite/affine/data-view/src/property-presets/select/define.ts @@ -35,7 +35,7 @@ export const selectPropertyModelConfig = selectPropertyType.modelConfig({ const name = oldValue .split(',') .map(v => v.trim()) - .filter(v => v)[0]; + .find(v => v); if (!name) { return { value: null, data: data }; } diff --git a/blocksuite/affine/gfx/group/src/toolbar/config.ts b/blocksuite/affine/gfx/group/src/toolbar/config.ts index ec59ae50e2..7d65769330 100644 --- a/blocksuite/affine/gfx/group/src/toolbar/config.ts +++ b/blocksuite/affine/gfx/group/src/toolbar/config.ts @@ -40,13 +40,11 @@ export const groupToolbarConfig = { if (!rootModel) return; const { id: groupId, xywh } = model; - let lastNoteId = rootModel.children - .filter( - note => - matchModels(note, [NoteBlockModel]) && - note.props.displayMode !== NoteDisplayMode.EdgelessOnly - ) - .pop()?.id; + let lastNoteId = rootModel.children.findLast( + note => + matchModels(note, [NoteBlockModel]) && + note.props.displayMode !== NoteDisplayMode.EdgelessOnly + )?.id; if (!lastNoteId) { const bounds = Bound.deserialize(xywh); diff --git a/blocksuite/affine/shared/src/commands/selection/get-surface-selection.ts b/blocksuite/affine/shared/src/commands/selection/get-surface-selection.ts index 5814dfab63..770d1908e7 100644 --- a/blocksuite/affine/shared/src/commands/selection/get-surface-selection.ts +++ b/blocksuite/affine/shared/src/commands/selection/get-surface-selection.ts @@ -3,7 +3,7 @@ import { SurfaceSelection } from '@blocksuite/std'; import type { GetSelectionCommand } from './types'; export const getSurfaceSelectionCommand: GetSelectionCommand = (ctx, next) => { - const currentSurfaceSelection = ctx.std.selection.filter(SurfaceSelection)[0]; + const currentSurfaceSelection = ctx.std.selection.find(SurfaceSelection); if (!currentSurfaceSelection) return; next({ currentSurfaceSelection }); diff --git a/package.json b/package.json index 77dc6a0922..e9bfd1341d 100644 --- a/package.json +++ b/package.json @@ -82,7 +82,7 @@ "husky": "^9.1.7", "lint-staged": "^16.0.0", "msw": "^2.6.8", - "oxlint": "0.16.11", + "oxlint": "^1.1.0", "prettier": "^3.4.2", "semver": "^7.6.3", "serve": "^14.2.4", diff --git a/packages/backend/server/src/plugins/copilot/providers/fal.ts b/packages/backend/server/src/plugins/copilot/providers/fal.ts index bbeb3d6053..537feb7fd9 100644 --- a/packages/backend/server/src/plugins/copilot/providers/fal.ts +++ b/packages/backend/server/src/plugins/copilot/providers/fal.ts @@ -180,7 +180,7 @@ export class FalProvider extends CopilotProvider { ? v.attachment : undefined ) - .filter(v => !!v)[0], + .find(v => !!v), prompt: content.trim(), loras: lora.length ? lora : undefined, controlnets: controlnets.length ? controlnets : undefined, diff --git a/packages/frontend/component/src/hooks/use-disposable.ts b/packages/frontend/component/src/hooks/use-disposable.ts index 491c965f8c..08b929d693 100644 --- a/packages/frontend/component/src/hooks/use-disposable.ts +++ b/packages/frontend/component/src/hooks/use-disposable.ts @@ -24,6 +24,7 @@ export function useDisposable( error: null, }); + // oxlint-disable-next-line react-hooks/exhaustive-deps useEffect(() => { const abortController = new AbortController(); let _data: T | null = null; diff --git a/packages/frontend/component/src/ui/audio-player/audio-player.tsx b/packages/frontend/component/src/ui/audio-player/audio-player.tsx index 1b92a9c08f..dba76ad6fe 100644 --- a/packages/frontend/component/src/ui/audio-player/audio-player.tsx +++ b/packages/frontend/component/src/ui/audio-player/audio-player.tsx @@ -113,11 +113,6 @@ export const AudioPlayer = ({
- {playbackRate}x - - } items={ <> {playbackRates.map(rate => ( @@ -131,7 +126,11 @@ export const AudioPlayer = ({ ))} } - /> + > + + {notesEntry} !session.parentSessionId) - .at(-1); + const rootSession = sessions?.findLast(session => !session.parentSessionId); if (!rootSession) { // Create a new session const rootSessionId = await AIProvider.session?.createSession({ diff --git a/packages/frontend/core/src/blocksuite/ai/mini-mindmap/mindmap-preview.ts b/packages/frontend/core/src/blocksuite/ai/mini-mindmap/mindmap-preview.ts index b46775305d..6cdf6ac8d4 100644 --- a/packages/frontend/core/src/blocksuite/ai/mini-mindmap/mindmap-preview.ts +++ b/packages/frontend/core/src/blocksuite/ai/mini-mindmap/mindmap-preview.ts @@ -250,12 +250,12 @@ export const markdownToMindmap = ( switch (markdownNode.type) { case 'list': { - const listItems = markdownNode.children + const listItem = markdownNode.children .map(child => traverse(child)) - .filter(val => val); + .find(val => val); if (firstLevel) { - return listItems[0]; + return listItem ?? null; } } break; diff --git a/packages/frontend/core/src/modules/dnd/services/index.ts b/packages/frontend/core/src/modules/dnd/services/index.ts index f81032d5c1..376ca7894d 100644 --- a/packages/frontend/core/src/modules/dnd/services/index.ts +++ b/packages/frontend/core/src/modules/dnd/services/index.ts @@ -275,7 +275,7 @@ export class DndService extends Service { // only deal with the first url const url = urls ?.split('\n') - .filter(u => u.trim() && !u.trim().startsWith('#'))[0]; + .find(u => u.trim() && !u.trim().startsWith('#')); if (url) { const maybeDocLink = resolveLinkToDoc(url); diff --git a/packages/frontend/core/src/modules/peek-view/view/modal-container.tsx b/packages/frontend/core/src/modules/peek-view/view/modal-container.tsx index ddc7a95056..415cc411c6 100644 --- a/packages/frontend/core/src/modules/peek-view/view/modal-container.tsx +++ b/packages/frontend/core/src/modules/peek-view/view/modal-container.tsx @@ -107,6 +107,35 @@ export const PeekViewModalContainer = forwardRef< duration: 230, }); }, []); + const animateFade = useCallback( + (animateIn: boolean) => { + setAnimeState('animating'); + onAnimationStart?.(); + return new Promise(resolve => { + if (animateIn) setVtOpen(true); + setTimeout(() => { + const overlay = overlayRef.current; + const contentClip = contentClipRef.current; + if (!overlay || !contentClip) { + resolve(); + return; + } + waapi.animate([overlay, contentClip], { + opacity: animateIn ? [0, 1] : [1, 0], + ease: eases.inOutSine, + duration: 230, + onComplete: () => { + if (!animateIn) setVtOpen(false); + setAnimeState('idle'); + onAnimationEnd?.(); + resolve(); + }, + }); + }); + }); + }, + [onAnimationEnd, onAnimationStart] + ); const zoomAnimate = useCallback( async ( zoomIn?: boolean, @@ -220,7 +249,7 @@ export const PeekViewModalContainer = forwardRef< }; }); }, - [target] + [target, animateFade, onAnimationEnd] ); /** * ### Animation timeline: @@ -277,36 +306,6 @@ export const PeekViewModalContainer = forwardRef< .catch(console.error); }, [animateControls, onAnimationStart, zoomAnimate]); - const animateFade = useCallback( - (animateIn: boolean) => { - setAnimeState('animating'); - onAnimationStart?.(); - return new Promise(resolve => { - if (animateIn) setVtOpen(true); - setTimeout(() => { - const overlay = overlayRef.current; - const contentClip = contentClipRef.current; - if (!overlay || !contentClip) { - resolve(); - return; - } - waapi.animate([overlay, contentClip], { - opacity: animateIn ? [0, 1] : [1, 0], - ease: eases.inOutSine, - duration: 230, - onComplete: () => { - if (!animateIn) setVtOpen(false); - setAnimeState('idle'); - onAnimationEnd?.(); - resolve(); - }, - }); - }); - }); - }, - [onAnimationEnd, onAnimationStart] - ); - const animateFadeBottom = useCallback( (animateIn: boolean) => { setAnimeState('animating'); diff --git a/packages/frontend/core/src/modules/tag/view/delete-tag-modal.tsx b/packages/frontend/core/src/modules/tag/view/delete-tag-modal.tsx index a452e016c5..2136b133f8 100644 --- a/packages/frontend/core/src/modules/tag/view/delete-tag-modal.tsx +++ b/packages/frontend/core/src/modules/tag/view/delete-tag-modal.tsx @@ -19,8 +19,8 @@ export const useDeleteTagConfirmModal = () => { (tagIdsToDelete: string[]) => { let closed = false; const { resolve, promise } = Promise.withResolvers(); - const tagsToDelete = tags.filter(tag => tagIdsToDelete.includes(tag.id)); - const tagName = tagsToDelete[0]?.value$.value; + const tagToDelete = tags.find(tag => tagIdsToDelete.includes(tag.id)); + const tagName = tagToDelete?.value$.value; const handleClose = (state: boolean) => { if (!closed) { closed = true; diff --git a/tests/blocksuite/e2e/edgeless/group/group-and-ungroup.spec.ts b/tests/blocksuite/e2e/edgeless/group/group-and-ungroup.spec.ts index cd18fe9229..9ecac3bfec 100644 --- a/tests/blocksuite/e2e/edgeless/group/group-and-ungroup.spec.ts +++ b/tests/blocksuite/e2e/edgeless/group/group-and-ungroup.spec.ts @@ -38,9 +38,7 @@ test.describe('group and ungroup in group', () => { test.beforeEach(async ({ page }) => { await init(page); await createShapeElement(page, [200, 0], [300, 100], Shape.Square); - newAddedShape = (await getIds(page)).filter( - id => !initShapes.includes(id) - )[0]; + newAddedShape = (await getIds(page)).find(id => !initShapes.includes(id))!; await selectAllByKeyboard(page); await triggerComponentToolbarAction(page, 'addGroup'); outterGroupId = await getFirstContainerId(page); diff --git a/tests/blocksuite/e2e/embed-synced-doc/utils.ts b/tests/blocksuite/e2e/embed-synced-doc/utils.ts index cfcc67b6d7..e7a0ff5a23 100644 --- a/tests/blocksuite/e2e/embed-synced-doc/utils.ts +++ b/tests/blocksuite/e2e/embed-synced-doc/utils.ts @@ -60,12 +60,12 @@ export async function initEmbedSyncedDocState( const getVisibleNote = (store: Store) => { const note = store .getModelsByFlavour('affine:note') - .filter((note): note is NoteBlockModel => { + .find((note): note is NoteBlockModel => { return ( note instanceof NoteBlockModel && note.props.displayMode === NoteDisplayMode.DocAndEdgeless ); - })[0]; + }); return note ?? null; }; diff --git a/yarn.lock b/yarn.lock index 9aff707fe3..52c9276a2f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -786,7 +786,7 @@ __metadata: husky: "npm:^9.1.7" lint-staged: "npm:^16.0.0" msw: "npm:^2.6.8" - oxlint: "npm:0.16.11" + oxlint: "npm:^1.1.0" prettier: "npm:^3.4.2" semver: "npm:^7.6.3" serve: "npm:^14.2.4" @@ -10593,58 +10593,58 @@ __metadata: languageName: node linkType: hard -"@oxlint/darwin-arm64@npm:0.16.11": - version: 0.16.11 - resolution: "@oxlint/darwin-arm64@npm:0.16.11" +"@oxlint/darwin-arm64@npm:1.1.0": + version: 1.1.0 + resolution: "@oxlint/darwin-arm64@npm:1.1.0" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@oxlint/darwin-x64@npm:0.16.11": - version: 0.16.11 - resolution: "@oxlint/darwin-x64@npm:0.16.11" +"@oxlint/darwin-x64@npm:1.1.0": + version: 1.1.0 + resolution: "@oxlint/darwin-x64@npm:1.1.0" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@oxlint/linux-arm64-gnu@npm:0.16.11": - version: 0.16.11 - resolution: "@oxlint/linux-arm64-gnu@npm:0.16.11" +"@oxlint/linux-arm64-gnu@npm:1.1.0": + version: 1.1.0 + resolution: "@oxlint/linux-arm64-gnu@npm:1.1.0" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@oxlint/linux-arm64-musl@npm:0.16.11": - version: 0.16.11 - resolution: "@oxlint/linux-arm64-musl@npm:0.16.11" +"@oxlint/linux-arm64-musl@npm:1.1.0": + version: 1.1.0 + resolution: "@oxlint/linux-arm64-musl@npm:1.1.0" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@oxlint/linux-x64-gnu@npm:0.16.11": - version: 0.16.11 - resolution: "@oxlint/linux-x64-gnu@npm:0.16.11" +"@oxlint/linux-x64-gnu@npm:1.1.0": + version: 1.1.0 + resolution: "@oxlint/linux-x64-gnu@npm:1.1.0" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@oxlint/linux-x64-musl@npm:0.16.11": - version: 0.16.11 - resolution: "@oxlint/linux-x64-musl@npm:0.16.11" +"@oxlint/linux-x64-musl@npm:1.1.0": + version: 1.1.0 + resolution: "@oxlint/linux-x64-musl@npm:1.1.0" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@oxlint/win32-arm64@npm:0.16.11": - version: 0.16.11 - resolution: "@oxlint/win32-arm64@npm:0.16.11" +"@oxlint/win32-arm64@npm:1.1.0": + version: 1.1.0 + resolution: "@oxlint/win32-arm64@npm:1.1.0" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@oxlint/win32-x64@npm:0.16.11": - version: 0.16.11 - resolution: "@oxlint/win32-x64@npm:0.16.11" +"@oxlint/win32-x64@npm:1.1.0": + version: 1.1.0 + resolution: "@oxlint/win32-x64@npm:1.1.0" conditions: os=win32 & cpu=x64 languageName: node linkType: hard @@ -27734,18 +27734,18 @@ __metadata: languageName: node linkType: hard -"oxlint@npm:0.16.11": - version: 0.16.11 - resolution: "oxlint@npm:0.16.11" +"oxlint@npm:^1.1.0": + version: 1.1.0 + resolution: "oxlint@npm:1.1.0" dependencies: - "@oxlint/darwin-arm64": "npm:0.16.11" - "@oxlint/darwin-x64": "npm:0.16.11" - "@oxlint/linux-arm64-gnu": "npm:0.16.11" - "@oxlint/linux-arm64-musl": "npm:0.16.11" - "@oxlint/linux-x64-gnu": "npm:0.16.11" - "@oxlint/linux-x64-musl": "npm:0.16.11" - "@oxlint/win32-arm64": "npm:0.16.11" - "@oxlint/win32-x64": "npm:0.16.11" + "@oxlint/darwin-arm64": "npm:1.1.0" + "@oxlint/darwin-x64": "npm:1.1.0" + "@oxlint/linux-arm64-gnu": "npm:1.1.0" + "@oxlint/linux-arm64-musl": "npm:1.1.0" + "@oxlint/linux-x64-gnu": "npm:1.1.0" + "@oxlint/linux-x64-musl": "npm:1.1.0" + "@oxlint/win32-arm64": "npm:1.1.0" + "@oxlint/win32-x64": "npm:1.1.0" dependenciesMeta: "@oxlint/darwin-arm64": optional: true @@ -27766,7 +27766,7 @@ __metadata: bin: oxc_language_server: bin/oxc_language_server oxlint: bin/oxlint - checksum: 10/cd4f6a9e0682006f0e0dc33ce3b8b03b358d90b70d16eddc10f73bbca56efe466dcacfa9c063981b30a4098cf85cae251b3f60ef3813642914a7ff373726f909 + checksum: 10/1cd94bc8f7114ad56a22ea8dcb06c505511307bad6dc92283d8fc6c1d408254ccb116ecde7b21dfab0c4bfae7806f7efb2f76560aa6fa42eb1d892c84473c0cb languageName: node linkType: hard