types.ts 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. import type { SetStateAction } from 'react';
  2. import type { MusicPlayer } from '../types';
  3. // Remote actions - these only come FROM the socket
  4. export enum ActionTypeRemote {
  5. StateSet = 'STATE_SET',
  6. ClientListUpdated = 'CLIENT_LIST_UPDATED',
  7. }
  8. // Local actions - these are dispatched from this client
  9. export enum ActionTypeLocal {
  10. LoggedOut = '@@local/LOGGED_OUT',
  11. ErrorOccurred = '@@local/ERROR_OCCURRED',
  12. NameSet = '@@local/NAME_SET',
  13. StateSet = '@@local/STATE_SET',
  14. Seeked = '@@local/SEEKED',
  15. MasterSet = '@@local/MASTER_SET',
  16. ActiveClientToggled = '@@local/ACTIVE_CLIENT_TOGGLED',
  17. PlayPaused = '@@local/PLAY_PAUSED',
  18. SongInfoFetched = '@@local/SONG_INFO_FETCHED',
  19. QueuePushed = '@@local/QUEUE_PUSHED',
  20. QueueShifted = '@@local/QUEUE_SHIFTED',
  21. QueueRemoved = '@@local/QUEUE_REMOVED',
  22. QueueOrdered = '@@local/QUEUE_ORDERED',
  23. }
  24. export interface Action<T extends string = string, P = unknown> {
  25. type: T;
  26. payload: P;
  27. }
  28. export type ActionRemote<T extends ActionTypeRemote = ActionTypeRemote, P = unknown> = Action<
  29. T,
  30. P
  31. > & { priority: number; fromClient?: string | null };
  32. export type ActionLocal<T extends ActionTypeLocal = ActionTypeLocal, P = unknown> = Action<T, P>;
  33. export type LocalStateSetPayload = {
  34. payload: SetStateAction<Partial<MusicPlayer>>;
  35. priority?: number;
  36. };