Changeset View
Changeset View
Standalone View
Standalone View
web/chat/edit-message-provider.js
Show All 13 Lines | export type EditState = { | ||||
+isError: boolean, | +isError: boolean, | ||||
}; | }; | ||||
type EditModalContextType = { | type EditModalContextType = { | ||||
+renderEditModal: (params: EditState) => void, | +renderEditModal: (params: EditState) => void, | ||||
+clearEditModal: () => void, | +clearEditModal: () => void, | ||||
+editState: ?EditState, | +editState: ?EditState, | ||||
+setDraft: string => void, | +setDraft: string => void, | ||||
+setError: boolean => void, | |||||
}; | }; | ||||
const EditModalContext: React.Context<EditModalContextType> = | const EditModalContext: React.Context<EditModalContextType> = | ||||
React.createContext<EditModalContextType>({ | React.createContext<EditModalContextType>({ | ||||
renderEditModal: () => {}, | renderEditModal: () => {}, | ||||
clearEditModal: () => {}, | clearEditModal: () => {}, | ||||
editState: null, | editState: null, | ||||
setDraft: () => {}, | setDraft: () => {}, | ||||
setError: () => {}, | |||||
}); | }); | ||||
type Props = { | type Props = { | ||||
+children: React.Node, | +children: React.Node, | ||||
}; | }; | ||||
function EditModalProvider(props: Props): React.Node { | function EditModalProvider(props: Props): React.Node { | ||||
const { children } = props; | const { children } = props; | ||||
Show All 20 Lines | (draft: ?string) => { | ||||
setEditState({ | setEditState({ | ||||
...editState, | ...editState, | ||||
editedMessageDraft: draft, | editedMessageDraft: draft, | ||||
}); | }); | ||||
}, | }, | ||||
[editState, setEditState], | [editState, setEditState], | ||||
); | ); | ||||
const setError = React.useCallback( | |||||
(isError: boolean) => { | |||||
if (!editState) { | |||||
return; | |||||
} | |||||
setEditState({ | |||||
...editState, | |||||
isError, | |||||
}); | |||||
}, | |||||
[editState, setEditState], | |||||
); | |||||
const value = React.useMemo( | const value = React.useMemo( | ||||
() => ({ | () => ({ | ||||
renderEditModal, | renderEditModal, | ||||
clearEditModal: clearEditModal, | clearEditModal: clearEditModal, | ||||
editState, | editState, | ||||
setDraft, | setDraft, | ||||
setError, | |||||
}), | }), | ||||
[renderEditModal, clearEditModal, editState, setDraft], | [renderEditModal, clearEditModal, editState, setDraft, setError], | ||||
); | ); | ||||
let modalOverlay; | let modalOverlay; | ||||
if (modal) { | if (modal) { | ||||
modalOverlay = ( | modalOverlay = ( | ||||
<ModalOverlay onClose={clearEditModal}>{modal}</ModalOverlay> | <ModalOverlay onClose={clearEditModal}>{modal}</ModalOverlay> | ||||
); | ); | ||||
} | } | ||||
Show All 16 Lines |