From 34f335773418872447878d81e7fa93cb33302466 Mon Sep 17 00:00:00 2001 From: huynl-96 Date: Fri, 15 Jul 2022 16:54:26 +0700 Subject: [PATCH 1/2] feat(useArrayFindIndex): new function --- packages/shared/index.ts | 1 + packages/shared/useArrayFindIndex/index.md | 36 ++++++++++++++++++ .../shared/useArrayFindIndex/index.test.ts | 37 +++++++++++++++++++ packages/shared/useArrayFindIndex/index.ts | 11 ++++++ 4 files changed, 85 insertions(+) create mode 100644 packages/shared/useArrayFindIndex/index.md create mode 100644 packages/shared/useArrayFindIndex/index.test.ts create mode 100644 packages/shared/useArrayFindIndex/index.ts diff --git a/packages/shared/index.ts b/packages/shared/index.ts index 9e429de4117..498ff70aea9 100644 --- a/packages/shared/index.ts +++ b/packages/shared/index.ts @@ -34,6 +34,7 @@ export * from './until' export * from './useArrayEvery' export * from './useArrayFilter' export * from './useArrayFind' +export * from './useArrayFindIndex' export * from './useArrayJoin' export * from './useArrayMap' export * from './useArrayReduce' diff --git a/packages/shared/useArrayFindIndex/index.md b/packages/shared/useArrayFindIndex/index.md new file mode 100644 index 00000000000..c8028a58367 --- /dev/null +++ b/packages/shared/useArrayFindIndex/index.md @@ -0,0 +1,36 @@ +--- +category: Array +--- + +# useArrayFindIndex + +Reactive `Array.findIndex` + +## Usage + +### Use with array of multiple refs + +```js +import { useArrayFindIndex } from '@vueuse/core' +const item1 = ref(0) +const item2 = ref(2) +const item3 = ref(4) +const item4 = ref(6) +const item5 = ref(8) +const list = [item1, item2, item3, item4, item5] +const result = useArrayFindIndex(list, i => i % 2 === 0) +// result.value: 0 +item1.value = 1 +// result.value: 1 +``` + +### Use with reactive array + +```js +import { useArrayFindIndex } from '@vueuse/core' +const list = ref([0, 2, 4, 6, 8]) +const result = useArrayFindIndex(list, i => i % 2 === 0) +// result.value: 0 +list.value.unshift(-1) +// result.value: 1 +``` diff --git a/packages/shared/useArrayFindIndex/index.test.ts b/packages/shared/useArrayFindIndex/index.test.ts new file mode 100644 index 00000000000..794f75a7b7c --- /dev/null +++ b/packages/shared/useArrayFindIndex/index.test.ts @@ -0,0 +1,37 @@ +import { ref } from 'vue-demi' +import { useArrayFindIndex } from '.' + +describe('useArrayFindIndex', () => { + it('should be defined', () => { + expect(useArrayFindIndex).toBeDefined() + }) + + it('should work with array of refs', () => { + const item1 = ref(0) + const item2 = ref(2) + const item3 = ref(4) + const item4 = ref(6) + const item5 = ref(8) + const list = [item1, item2, item3, item4, item5] + const result = useArrayFindIndex(list, i => i % 2 === 0) + expect(result.value).toBe(0) + item1.value = 1 + expect(result.value).toBe(1) + item2.value = 3 + expect(result.value).toBe(2) + item3.value = 5 + expect(result.value).toBe(3) + item4.value = 7 + expect(result.value).toBe(4) + item5.value = 9 + expect(result.value).toBe(-1) + }) + + it('should work with reactive array', () => { + const list = ref([0, 2, 4, 6, 8]) + const result = useArrayFindIndex(list, i => i % 2 === 0) + expect(result.value).toBe(0) + list.value.unshift(-1) + expect(result.value).toBe(1) + }) +}) diff --git a/packages/shared/useArrayFindIndex/index.ts b/packages/shared/useArrayFindIndex/index.ts new file mode 100644 index 00000000000..f0a10341c9c --- /dev/null +++ b/packages/shared/useArrayFindIndex/index.ts @@ -0,0 +1,11 @@ +import type { MaybeComputedRef } from '@vueuse/shared' +import { resolveUnref } from '@vueuse/shared' +import type { ComputedRef } from 'vue-demi' +import { computed } from 'vue-demi' + +export function useArrayFindIndex( + list: MaybeComputedRef[]>, + fn: (element: T, index: number, array: MaybeComputedRef[]) => unknown, +): ComputedRef { + return computed(() => resolveUnref(list).findIndex((element, index, array) => fn(resolveUnref(element), index, array))) +} From b1ba58d47034668491c391ab8eface3be1e25d68 Mon Sep 17 00:00:00 2001 From: huynl-96 Date: Thu, 21 Jul 2022 21:38:20 +0700 Subject: [PATCH 2/2] refactor(useArrayJoin): change category --- packages/shared/useArrayJoin/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/shared/useArrayJoin/index.md b/packages/shared/useArrayJoin/index.md index 4a1cceb23fe..5732f4c14e5 100644 --- a/packages/shared/useArrayJoin/index.md +++ b/packages/shared/useArrayJoin/index.md @@ -1,5 +1,5 @@ --- -category: Utilities +category: Array --- # useArrayJoin