From a289c055085be0fc3765938e7d573a1a9cd54e92 Mon Sep 17 00:00:00 2001 From: Paik Date: Thu, 15 Aug 2024 19:33:53 +0900 Subject: [PATCH] Unify error throwing methods in Devtools --- .../devtools/src/devtools/contexts/SelectedNode.tsx | 4 +++- .../src/devtools/contexts/SelectedPresence.tsx | 4 +++- .../devtools/src/devtools/contexts/YorkieSource.tsx | 12 +++++++++--- packages/sdk/src/util/error.ts | 3 +++ 4 files changed, 18 insertions(+), 5 deletions(-) diff --git a/packages/devtools/src/devtools/contexts/SelectedNode.tsx b/packages/devtools/src/devtools/contexts/SelectedNode.tsx index dd80f9211..c77b1d117 100644 --- a/packages/devtools/src/devtools/contexts/SelectedNode.tsx +++ b/packages/devtools/src/devtools/contexts/SelectedNode.tsx @@ -17,6 +17,7 @@ import type { ReactNode, Dispatch, SetStateAction } from 'react'; import { createContext, useContext, useState } from 'react'; import type { RootTreeNode } from '../components/Tree'; +import { Code, YorkieError } from '@yorkie-js-sdk/src/util/error'; type SelectedNodeContext = [ RootTreeNode, @@ -40,7 +41,8 @@ export function SelectedNodeProvider({ children }: Props) { export function useSelectedNode() { const value = useContext(SelectedNodeContext); if (value === undefined) { - throw new Error( + throw new YorkieError( + Code.ErrContextNotProvided, 'useSelectedNode should be used within SelectedNodeProvider', ); } diff --git a/packages/devtools/src/devtools/contexts/SelectedPresence.tsx b/packages/devtools/src/devtools/contexts/SelectedPresence.tsx index 1094cc7d3..a0eb6dec0 100644 --- a/packages/devtools/src/devtools/contexts/SelectedPresence.tsx +++ b/packages/devtools/src/devtools/contexts/SelectedPresence.tsx @@ -17,6 +17,7 @@ import type { ReactNode, Dispatch, SetStateAction } from 'react'; import { createContext, useContext, useState } from 'react'; import type { PresenceJsonNode } from '../components/Tree'; +import { Code, YorkieError } from '@yorkie-js-sdk/src/util/error'; type SelectedPresenceContext = [ PresenceJsonNode, @@ -42,7 +43,8 @@ export function SelectedPresenceProvider({ children }: Props) { export function useSelectedPresence() { const value = useContext(SelectedPresenceContext); if (value === undefined) { - throw new Error( + throw new YorkieError( + Code.ErrContextNotProvided, 'useSelectedPresence should be used within SelectedPresenceProvider', ); } diff --git a/packages/devtools/src/devtools/contexts/YorkieSource.tsx b/packages/devtools/src/devtools/contexts/YorkieSource.tsx index 3c61f592d..986a11d8a 100644 --- a/packages/devtools/src/devtools/contexts/YorkieSource.tsx +++ b/packages/devtools/src/devtools/contexts/YorkieSource.tsx @@ -30,6 +30,7 @@ import { type TransactionEvent, } from 'yorkie-js-sdk'; import { connectPort, sendToSDK } from '../../port'; +import { Code, YorkieError } from '@yorkie-js-sdk/src/util/error'; const DocKeyContext = createContext(null); const YorkieDocContext = createContext(null); @@ -125,7 +126,8 @@ export function YorkieSourceProvider({ children }: Props) { export function useCurrentDocKey() { const value = useContext(DocKeyContext); if (value === undefined) { - throw new Error( + throw new YorkieError( + Code.ErrContextNotProvided, 'useCurrentDocKey should be used within YorkieSourceProvider', ); } @@ -135,7 +137,10 @@ export function useCurrentDocKey() { export function useYorkieDoc() { const value = useContext(YorkieDocContext); if (value === undefined) { - throw new Error('useYorkieDoc should be used within YorkieSourceProvider'); + throw new YorkieError( + Code.ErrContextNotProvided, + 'useYorkieDoc should be used within YorkieSourceProvider', + ); } return value; } @@ -168,7 +173,8 @@ export function useTransactionEvents() { ); if (events === undefined) { - throw new Error( + throw new YorkieError( + Code.ErrContextNotProvided, 'useTransactionEvents should be used within YorkieSourceProvider', ); } diff --git a/packages/sdk/src/util/error.ts b/packages/sdk/src/util/error.ts index 3abd06324..bf83407d4 100644 --- a/packages/sdk/src/util/error.ts +++ b/packages/sdk/src/util/error.ts @@ -56,6 +56,9 @@ export enum Code { // ErrRefused is returned when the execution is rejected. ErrRefused = 'ErrRefused', + + // ErrContextNotProvided is returned when a required React context is missing + ErrContextNotProvided = 'ErrContextNotProvided', } /**