27 lines
1.1 KiB
TypeScript
27 lines
1.1 KiB
TypeScript
import React from 'react';
|
|||
|
|
import type { TurnProjectionResult } from '../lib/turns/types';
|
||
|
|
|
||
|
|
export interface TurnLookupResult {
|
||
|
|
turnById: TurnProjectionResult['indexes']['turnById'];
|
||
|
|
messageToTurnId: TurnProjectionResult['indexes']['messageToTurnId'];
|
||
|
|
messageMetaById: TurnProjectionResult['indexes']['messageMetaById'];
|
||
|
|
getTurnByMessageId: (messageId: string) => TurnProjectionResult['turns'][number] | undefined;
|
||
|
|
}
|
||
|
|
|
||
|
|
export const useTurnLookup = (projection: TurnProjectionResult): TurnLookupResult => {
|
||
|
|
const getTurnByMessageId = React.useCallback((messageId: string) => {
|
||
|
|
const turnId = projection.indexes.messageToTurnId.get(messageId);
|
||
|
|
if (!turnId) {
|
||
|
|
return undefined;
|
||
|
|
}
|
||
|
|
return projection.indexes.turnById.get(turnId);
|
||
|
|
}, [projection.indexes.messageToTurnId, projection.indexes.turnById]);
|
||
|
|
|
||
|
|
return {
|
||
|
|
turnById: projection.indexes.turnById,
|
||
|
|
messageToTurnId: projection.indexes.messageToTurnId,
|
||
|
|
messageMetaById: projection.indexes.messageMetaById,
|
||
|
|
getTurnByMessageId,
|
||
|
|
};
|
||
|
|
};
|