(initial: readonly string[] = [])
| 394 | * @returns LoadingState object |
| 395 | */ |
| 396 | export function createLoadingState(initial: readonly string[] = []): LoadingState { |
| 397 | const loading = new Set(initial); |
| 398 | |
| 399 | const state: LoadingState = Object.freeze({ |
| 400 | loading: loading as ReadonlySet<string>, |
| 401 | startLoading: (key: string): LoadingState => { |
| 402 | if (loading.has(key)) { |
| 403 | return state; |
| 404 | } |
| 405 | return createLoadingState([...loading, key]); |
| 406 | }, |
| 407 | finishLoading: (key: string): LoadingState => { |
| 408 | if (!loading.has(key)) { |
| 409 | return state; |
| 410 | } |
| 411 | return createLoadingState([...loading].filter((k) => k !== key)); |
| 412 | }, |
| 413 | isLoading: (key: string): boolean => loading.has(key), |
| 414 | }); |
| 415 | |
| 416 | return state; |
| 417 | } |
| 418 | |
| 419 | /* ========== Expand/Collapse Indicators ========== */ |
| 420 |
no test coverage detected