diff --git a/src/runtime/components/Button.vue b/src/runtime/components/Button.vue index e4a9efa9..343438e2 100644 --- a/src/runtime/components/Button.vue +++ b/src/runtime/components/Button.vue @@ -1,9 +1,8 @@ diff --git a/src/runtime/inertia/components/LinkBase.vue b/src/runtime/inertia/components/LinkBase.vue new file mode 100644 index 00000000..2019d9ce --- /dev/null +++ b/src/runtime/inertia/components/LinkBase.vue @@ -0,0 +1,77 @@ + + + + + diff --git a/src/runtime/utils/link.ts b/src/runtime/utils/link.ts index 6678c1cf..d8ebbd51 100644 --- a/src/runtime/utils/link.ts +++ b/src/runtime/utils/link.ts @@ -1,4 +1,5 @@ import { reactivePick } from '@vueuse/core' +import { isEqual, diff } from 'ohash/utils' import type { LinkProps } from '../types' export function pickLinkProps(link: LinkProps & { [key: string]: any }) { @@ -19,3 +20,17 @@ export function pickLinkProps(link: LinkProps & { [key: string]: any }) { return reactivePick(link, ...propsToInclude) } + +export function isPartiallyEqual(item1: any, item2: any) { + const diffedKeys = diff(item1, item2).reduce((filtered, q) => { + if (q.type === 'added') { + filtered.add(q.key) + } + return filtered + }, new Set()) + + const item1Filtered = Object.fromEntries(Object.entries(item1).filter(([key]) => !diffedKeys.has(key))) + const item2Filtered = Object.fromEntries(Object.entries(item2).filter(([key]) => !diffedKeys.has(key))) + + return isEqual(item1Filtered, item2Filtered) +} diff --git a/src/runtime/vue/components/Link.vue b/src/runtime/vue/components/Link.vue index 73aec38a..07d955ce 100644 --- a/src/runtime/vue/components/Link.vue +++ b/src/runtime/vue/components/Link.vue @@ -87,15 +87,17 @@ export interface LinkSlots {