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] +}