Skip to content

Vue 3 composition-API support #519

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
e-tobi opened this issue Mar 1, 2021 · 9 comments
Open

Vue 3 composition-API support #519

e-tobi opened this issue Mar 1, 2021 · 9 comments
Labels

Comments

@e-tobi
Copy link

e-tobi commented Mar 1, 2021

It would be nice to have a useSocket() to get the $socket within setup(). The basic steps would be:

  • declare a TS interface with $subscribe, $unsubscribe etc
  • declare an injection symbol and make it available to TS declared as InjectionKey<interface-defined-above>
  • declare a function useSocket() (TS return type is interface defined above) - implementation calls inject(symbol-defined-above)
  • in install do app.provide(symbol-defined-above, $socket)

I tried to provide a PR, but I fail to get the new exports working, always get a warning export 'useSocket' was not found in 'vue-socket.io-extended' and I have no clue why - this is not my comfort zone.

This is what I added to index.d.ts:

export interface SocketIO {
  client: SocketIOClient.Socket;
  $subscribe: (event: string, fn: Function) => void;
  $unsubscribe: (event: string) => void;
  connected: boolean;
  disconnected: boolean;
}

export declare const SocketKey: InjectionKey<SocketIO>;

export declare function useSocket(): SocketIO;

And plugin.js just has (provided in the export):

const SocketKey = Symbol('$socket');

function useSocket() {
  return inject(SocketKey);
}

And app.provide(SocketKey, $socket); was added to the install function.

May workaround for now is to do this in main.ts of the application using vue-socket.io-extended.

@probil
Copy link
Owner

probil commented Mar 1, 2021

Hey @e-tobi
Thanks for your effort. I'd like to bring all the goodies of composition API to vue-socket.io-extended.

I tried to provide a PR, but I fail to get the new exports working, always get a warning export 'useSocket' was not found in 'vue-socket.io-extended' and I have no clue why - this is not my comfort zone.

Could you create that PR you've mentioned with the warning anyway? I believe I can help you with it. TS on the other hand is not my strongest side so I need your help

NB: create your branch out of alpha tag, since it already has vue 3 support. I will backport it later to vue 2 + composition api but for the time being it's better to focus on vue 3

@e-tobi
Copy link
Author

e-tobi commented Mar 1, 2021

I've tried again to make this work, but I can't figure this out. The mix of a default export with the plugin install function and the named exports required for this to work (useSocket() and SocketExtensionKey) seems to make things difficult.

PR is: #520 , but it doesn't work this way. Should be enough to get an idea about what I'm trying to do.

@e-tobi
Copy link
Author

e-tobi commented Mar 1, 2021

Ok - stupid me. Just when I was about to give up, the scales fell from my eyes. I totally missed to fix the exports in index.js sigh.
It works now, but it breaks some unit tests. I will look into this later.

@e-tobi
Copy link
Author

e-tobi commented Mar 1, 2021

Ok, updated the PR - tests pass now and I've also added tests for the $socket injection via SocketExtensionKey and useSocket().

@TheTimmaeh
Copy link

I'd love to see this in alpha. Any update?

@sQuarecoW
Copy link

What is the status on this issue?

@fjeddy
Copy link

fjeddy commented Mar 24, 2022

Hellloooooo @probil

@max-feroot
Copy link

Sorry due to the war in my country 🇺🇦 I wouldn't able to support the package anytime soon. Thanks for understanding 🙏

@ManiMatter
Copy link

ManiMatter commented Nov 16, 2023

Has anybody figured out how to use the $socket in setup()?
I'm stuck and created a question on stackoverflow. Now reading this thread not even sure there's a solution with vue-socket.io-extended.. Any pointers appreciated how you've solved it.

https://stackoverflow.com/questions/77493427/vue-socket-io-extended-socket-within-setup-composition-api

Update: I've solved it (without vue-socket.io-extended; will post the answer above)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

7 participants