64 lines
1.4 KiB
JavaScript
64 lines
1.4 KiB
JavaScript
|
/* eslint-disable no-shadow */
|
||
|
import React, { useContext, useState } from 'react';
|
||
|
import { BLOCK_CONTEXT } from '@rocket.chat/ui-kit';
|
||
|
|
||
|
export const textParser = ([{ text }]) => text;
|
||
|
|
||
|
export const defaultContext = {
|
||
|
action: (...args) => console.log(args),
|
||
|
state: console.log,
|
||
|
appId: '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz',
|
||
|
errors: {}
|
||
|
};
|
||
|
|
||
|
export const KitContext = React.createContext(defaultContext);
|
||
|
|
||
|
export const useBlockContext = ({
|
||
|
blockId, actionId, appId, initialValue
|
||
|
}, context) => {
|
||
|
const {
|
||
|
action, appId: appIdFromContext, viewId, state, language, errors, values = {}
|
||
|
} = useContext(KitContext);
|
||
|
const { value = initialValue } = values[actionId] || {};
|
||
|
const [loading, setLoading] = useState(false);
|
||
|
|
||
|
const error = errors && actionId && errors[actionId];
|
||
|
|
||
|
if ([BLOCK_CONTEXT.SECTION, BLOCK_CONTEXT.ACTION].includes(context)) {
|
||
|
return [{
|
||
|
loading, setLoading, error, value, language
|
||
|
}, async({ value }) => {
|
||
|
setLoading(true);
|
||
|
try {
|
||
|
await action({
|
||
|
blockId,
|
||
|
appId: appId || appIdFromContext,
|
||
|
actionId,
|
||
|
value,
|
||
|
viewId
|
||
|
});
|
||
|
} catch (e) {
|
||
|
// do nothing
|
||
|
}
|
||
|
setLoading(false);
|
||
|
}];
|
||
|
}
|
||
|
|
||
|
return [{
|
||
|
loading, setLoading, value, error, language
|
||
|
}, async({ value }) => {
|
||
|
setLoading(true);
|
||
|
try {
|
||
|
await state({
|
||
|
blockId,
|
||
|
appId,
|
||
|
actionId,
|
||
|
value
|
||
|
});
|
||
|
} catch (e) {
|
||
|
// do nothing
|
||
|
}
|
||
|
setLoading(false);
|
||
|
}];
|
||
|
};
|