40 lines
1.2 KiB
TypeScript
40 lines
1.2 KiB
TypeScript
import { getContext, setContext } from 'svelte';
|
|
|
|
export interface MessageEditState {
|
|
readonly isEditing: boolean;
|
|
readonly editedContent: string;
|
|
readonly editedExtras: DatabaseMessageExtra[];
|
|
readonly editedUploadedFiles: ChatUploadedFile[];
|
|
readonly originalContent: string;
|
|
readonly originalExtras: DatabaseMessageExtra[];
|
|
readonly showSaveOnlyOption: boolean;
|
|
}
|
|
|
|
export interface MessageEditActions {
|
|
setContent: (content: string) => void;
|
|
setExtras: (extras: DatabaseMessageExtra[]) => void;
|
|
setUploadedFiles: (files: ChatUploadedFile[]) => void;
|
|
save: () => void;
|
|
saveOnly: () => void;
|
|
cancel: () => void;
|
|
startEdit: () => void;
|
|
}
|
|
|
|
export type MessageEditContext = MessageEditState & MessageEditActions;
|
|
|
|
const MESSAGE_EDIT_KEY = Symbol.for('chat-message-edit');
|
|
|
|
/**
|
|
* Sets the message edit context. Call this in the parent component (ChatMessage.svelte).
|
|
*/
|
|
export function setMessageEditContext(ctx: MessageEditContext): MessageEditContext {
|
|
return setContext(MESSAGE_EDIT_KEY, ctx);
|
|
}
|
|
|
|
/**
|
|
* Gets the message edit context. Call this in child components.
|
|
*/
|
|
export function getMessageEditContext(): MessageEditContext {
|
|
return getContext(MESSAGE_EDIT_KEY);
|
|
}
|