From 7ad484613e195262dbf18e4ddd5182b756eff03f Mon Sep 17 00:00:00 2001 From: braks <78412429+bcakmakoglu@users.noreply.github.com> Date: Mon, 1 Aug 2022 22:08:32 +0200 Subject: [PATCH] feat(gui-v2): add `useInjectionState` composable # What's changed? * extends on VueUses' `createInjectionState` * immediately returns injection state on provide --- packages/nc-gui-v2/composables/index.ts | 1 + .../composables/useInjectionState/index.ts | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+) create mode 100644 packages/nc-gui-v2/composables/useInjectionState/index.ts diff --git a/packages/nc-gui-v2/composables/index.ts b/packages/nc-gui-v2/composables/index.ts index b9e13de6d8..b66fd2398b 100644 --- a/packages/nc-gui-v2/composables/index.ts +++ b/packages/nc-gui-v2/composables/index.ts @@ -1,5 +1,6 @@ export * from './useApi' export * from './useGlobal' +export * from './useInjectionState' export * from './useUIPermission' export * from './useAttachment' export * from './useBelongsTo' diff --git a/packages/nc-gui-v2/composables/useInjectionState/index.ts b/packages/nc-gui-v2/composables/useInjectionState/index.ts new file mode 100644 index 0000000000..b1a01007eb --- /dev/null +++ b/packages/nc-gui-v2/composables/useInjectionState/index.ts @@ -0,0 +1,19 @@ +import type { InjectionKey } from 'vue' + +export function useInjectionState( + composable: (...args: Arguments) => Return, +): readonly [useProvidingState: (...args: Arguments) => void, useInjectedState: () => Return | undefined] { + const key: string | InjectionKey = Symbol('InjectionState') + + const useProvidingState = (...args: Arguments) => { + const providedState = composable(...args) + + provide(key, providedState) + + return providedState + } + + const useInjectedState = () => inject(key) + + return [useProvidingState, useInjectedState] +}