mirror of
https://github.com/Qortal/Qortal-Hub.git
synced 2025-05-15 22:26:58 +00:00
Add translations
This commit is contained in:
parent
99aa214a0f
commit
b946e19236
@ -322,7 +322,7 @@ export const Wallets = ({ setExtState, setRawWallet, rawWallet }) => {
|
|||||||
sx={{
|
sx={{
|
||||||
display: 'flex',
|
display: 'flex',
|
||||||
flexDirection: 'column',
|
flexDirection: 'column',
|
||||||
}}
|
}} // TODO translate
|
||||||
>
|
>
|
||||||
<Label>Name</Label>
|
<Label>Name</Label>
|
||||||
<Input
|
<Input
|
||||||
|
@ -446,7 +446,7 @@ export const AppsDevModeHome = ({
|
|||||||
display: 'flex',
|
display: 'flex',
|
||||||
flexDirection: 'column',
|
flexDirection: 'column',
|
||||||
gap: '5px',
|
gap: '5px',
|
||||||
}}
|
}} // TODO translate
|
||||||
>
|
>
|
||||||
<Label>Domain</Label>
|
<Label>Domain</Label>
|
||||||
<Input
|
<Input
|
||||||
|
@ -152,7 +152,6 @@ export const AppsPrivate = ({ myName }) => {
|
|||||||
const object64 = await objectToBase64(objectToSave);
|
const object64 = await objectToBase64(objectToSave);
|
||||||
const decryptedData = await window.sendMessage(
|
const decryptedData = await window.sendMessage(
|
||||||
'ENCRYPT_QORTAL_GROUP_DATA',
|
'ENCRYPT_QORTAL_GROUP_DATA',
|
||||||
|
|
||||||
{
|
{
|
||||||
base64: object64,
|
base64: object64,
|
||||||
groupId: selectedGroup,
|
groupId: selectedGroup,
|
||||||
@ -313,7 +312,7 @@ export const AppsPrivate = ({ myName }) => {
|
|||||||
display: 'flex',
|
display: 'flex',
|
||||||
flexDirection: 'column',
|
flexDirection: 'column',
|
||||||
gap: '5px',
|
gap: '5px',
|
||||||
}}
|
}} // TODO translate
|
||||||
>
|
>
|
||||||
<Label>Select a group</Label>
|
<Label>Select a group</Label>
|
||||||
<Label>Only private groups will be shown</Label>
|
<Label>Only private groups will be shown</Label>
|
||||||
|
@ -371,7 +371,6 @@ export const AddGroup = ({ address, open, setOpen }) => {
|
|||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<Label>
|
<Label>
|
||||||
{' '}
|
|
||||||
{t('group:group.type', {
|
{t('group:group.type', {
|
||||||
postProcess: 'capitalize',
|
postProcess: 'capitalize',
|
||||||
})}
|
})}
|
||||||
@ -428,6 +427,7 @@ export const AddGroup = ({ address, open, setOpen }) => {
|
|||||||
postProcess: 'capitalize',
|
postProcess: 'capitalize',
|
||||||
})}
|
})}
|
||||||
</Label>
|
</Label>
|
||||||
|
|
||||||
<Select
|
<Select
|
||||||
labelId="demo-simple-select-label"
|
labelId="demo-simple-select-label"
|
||||||
id="demo-simple-select"
|
id="demo-simple-select"
|
||||||
|
@ -15,6 +15,7 @@ export const InviteMember = ({ groupId, setInfoSnack, setOpenSnack, show }) => {
|
|||||||
const inviteMember = async () => {
|
const inviteMember = async () => {
|
||||||
try {
|
try {
|
||||||
const fee = await getFee('GROUP_INVITE');
|
const fee = await getFee('GROUP_INVITE');
|
||||||
|
|
||||||
await show({
|
await show({
|
||||||
message: t('group:question.perform_transaction', {
|
message: t('group:question.perform_transaction', {
|
||||||
action: 'GROUP_INVITE',
|
action: 'GROUP_INVITE',
|
||||||
@ -22,7 +23,9 @@ export const InviteMember = ({ groupId, setInfoSnack, setOpenSnack, show }) => {
|
|||||||
}),
|
}),
|
||||||
publishFee: fee.fee + ' QORT',
|
publishFee: fee.fee + ' QORT',
|
||||||
});
|
});
|
||||||
|
|
||||||
setIsLoadingInvite(true);
|
setIsLoadingInvite(true);
|
||||||
|
|
||||||
if (!expiryTime || !value) return;
|
if (!expiryTime || !value) return;
|
||||||
new Promise((res, rej) => {
|
new Promise((res, rej) => {
|
||||||
window
|
window
|
||||||
@ -42,7 +45,6 @@ export const InviteMember = ({ groupId, setInfoSnack, setOpenSnack, show }) => {
|
|||||||
});
|
});
|
||||||
setOpenSnack(true);
|
setOpenSnack(true);
|
||||||
res(response);
|
res(response);
|
||||||
|
|
||||||
setValue('');
|
setValue('');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -56,7 +58,11 @@ export const InviteMember = ({ groupId, setInfoSnack, setOpenSnack, show }) => {
|
|||||||
.catch((error) => {
|
.catch((error) => {
|
||||||
setInfoSnack({
|
setInfoSnack({
|
||||||
type: 'error',
|
type: 'error',
|
||||||
message: error?.message || 'An error occurred',
|
message:
|
||||||
|
error?.message ||
|
||||||
|
t('core:message.error.generic', {
|
||||||
|
postProcess: 'capitalize',
|
||||||
|
}),
|
||||||
});
|
});
|
||||||
setOpenSnack(true);
|
setOpenSnack(true);
|
||||||
rej(error);
|
rej(error);
|
||||||
@ -81,16 +87,21 @@ export const InviteMember = ({ groupId, setInfoSnack, setOpenSnack, show }) => {
|
|||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
{t('group:action.invite_member', { postProcess: 'capitalize' })}
|
{t('group:action.invite_member', { postProcess: 'capitalize' })}
|
||||||
|
|
||||||
<Spacer height="20px" />
|
<Spacer height="20px" />
|
||||||
|
|
||||||
<Input
|
<Input
|
||||||
value={value}
|
value={value}
|
||||||
placeholder="Name or address"
|
placeholder="Name or address"
|
||||||
onChange={(e) => setValue(e.target.value)}
|
onChange={(e) => setValue(e.target.value)}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<Spacer height="20px" />
|
<Spacer height="20px" />
|
||||||
|
|
||||||
<Label>
|
<Label>
|
||||||
{t('group:invitation_expiry', { postProcess: 'capitalize' })}
|
{t('group:invitation_expiry', { postProcess: 'capitalize' })}
|
||||||
</Label>
|
</Label>
|
||||||
|
|
||||||
<Select
|
<Select
|
||||||
labelId="demo-simple-select-label"
|
labelId="demo-simple-select-label"
|
||||||
id="demo-simple-select"
|
id="demo-simple-select"
|
||||||
@ -109,7 +120,9 @@ export const InviteMember = ({ groupId, setInfoSnack, setOpenSnack, show }) => {
|
|||||||
<MenuItem value={1296000}>{t('core:time.day', { count: 15 })}</MenuItem>
|
<MenuItem value={1296000}>{t('core:time.day', { count: 15 })}</MenuItem>
|
||||||
<MenuItem value={2592000}>{t('core:time.day', { count: 30 })}</MenuItem>
|
<MenuItem value={2592000}>{t('core:time.day', { count: 30 })}</MenuItem>
|
||||||
</Select>
|
</Select>
|
||||||
|
|
||||||
<Spacer height="20px" />
|
<Spacer height="20px" />
|
||||||
|
|
||||||
<LoadingButton
|
<LoadingButton
|
||||||
variant="contained"
|
variant="contained"
|
||||||
loadingPosition="start"
|
loadingPosition="start"
|
||||||
|
@ -34,7 +34,6 @@ import {
|
|||||||
import { Spacer } from '../../common/Spacer';
|
import { Spacer } from '../../common/Spacer';
|
||||||
import { CustomLoader } from '../../common/CustomLoader';
|
import { CustomLoader } from '../../common/CustomLoader';
|
||||||
import { RequestQueueWithPromise } from '../../utils/queue/queue';
|
import { RequestQueueWithPromise } from '../../utils/queue/queue';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
myGroupsWhereIAmAdminAtom,
|
myGroupsWhereIAmAdminAtom,
|
||||||
promotionTimeIntervalAtom,
|
promotionTimeIntervalAtom,
|
||||||
@ -89,9 +88,7 @@ export const ListOfGroupPromotions = () => {
|
|||||||
const [promotionTimeInterval, setPromotionTimeInterval] = useAtom(
|
const [promotionTimeInterval, setPromotionTimeInterval] = useAtom(
|
||||||
promotionTimeIntervalAtom
|
promotionTimeIntervalAtom
|
||||||
);
|
);
|
||||||
|
|
||||||
const [isExpanded, setIsExpanded] = React.useState(false);
|
const [isExpanded, setIsExpanded] = React.useState(false);
|
||||||
|
|
||||||
const [openSnack, setOpenSnack] = useState(false);
|
const [openSnack, setOpenSnack] = useState(false);
|
||||||
const [infoSnack, setInfoSnack] = useState(null);
|
const [infoSnack, setInfoSnack] = useState(null);
|
||||||
const [fee, setFee] = useState(null);
|
const [fee, setFee] = useState(null);
|
||||||
@ -99,7 +96,6 @@ export const ListOfGroupPromotions = () => {
|
|||||||
const [isLoadingPublish, setIsLoadingPublish] = useState(false);
|
const [isLoadingPublish, setIsLoadingPublish] = useState(false);
|
||||||
const { show } = useContext(MyContext);
|
const { show } = useContext(MyContext);
|
||||||
const setTxList = useSetAtom(txListAtom);
|
const setTxList = useSetAtom(txListAtom);
|
||||||
|
|
||||||
const theme = useTheme();
|
const theme = useTheme();
|
||||||
const { t } = useTranslation(['core', 'group']);
|
const { t } = useTranslation(['core', 'group']);
|
||||||
const listRef = useRef(null);
|
const listRef = useRef(null);
|
||||||
@ -250,8 +246,9 @@ export const ListOfGroupPromotions = () => {
|
|||||||
});
|
});
|
||||||
setInfoSnack({
|
setInfoSnack({
|
||||||
type: 'success',
|
type: 'success',
|
||||||
message:
|
message: t('group:message.success.group_promotion', {
|
||||||
'Successfully published promotion. It may take a couple of minutes for the promotion to appear',
|
postProcess: 'capitalize',
|
||||||
|
}),
|
||||||
});
|
});
|
||||||
setOpenSnack(true);
|
setOpenSnack(true);
|
||||||
setText('');
|
setText('');
|
||||||
@ -261,7 +258,10 @@ export const ListOfGroupPromotions = () => {
|
|||||||
setInfoSnack({
|
setInfoSnack({
|
||||||
type: 'error',
|
type: 'error',
|
||||||
message:
|
message:
|
||||||
error?.message || 'Error publishing the promotion. Please try again',
|
error?.message ||
|
||||||
|
t('group:message.error.group_promotion', {
|
||||||
|
postProcess: 'capitalize',
|
||||||
|
}),
|
||||||
});
|
});
|
||||||
setOpenSnack(true);
|
setOpenSnack(true);
|
||||||
} finally {
|
} finally {
|
||||||
@ -290,8 +290,9 @@ export const ListOfGroupPromotions = () => {
|
|||||||
if (!response?.error) {
|
if (!response?.error) {
|
||||||
setInfoSnack({
|
setInfoSnack({
|
||||||
type: 'success',
|
type: 'success',
|
||||||
message:
|
message: t('group:message.success.group_join', {
|
||||||
'Successfully requested to join group. It may take a couple of minutes for the changes to propagate',
|
postProcess: 'capitalize',
|
||||||
|
}),
|
||||||
});
|
});
|
||||||
|
|
||||||
if (isOpen) {
|
if (isOpen) {
|
||||||
@ -299,8 +300,14 @@ export const ListOfGroupPromotions = () => {
|
|||||||
{
|
{
|
||||||
...response,
|
...response,
|
||||||
type: 'joined-group',
|
type: 'joined-group',
|
||||||
label: `Joined Group ${group?.groupName}: awaiting confirmation`,
|
label: t('group:message.success.group_join_label', {
|
||||||
labelDone: `Joined Group ${group?.groupName}: success!`,
|
group_name: group?.groupName,
|
||||||
|
postProcess: 'capitalize',
|
||||||
|
}),
|
||||||
|
labelDone: t('group:message.success.group_join_label', {
|
||||||
|
group_name: group?.groupName,
|
||||||
|
postProcess: 'capitalize',
|
||||||
|
}),
|
||||||
done: false,
|
done: false,
|
||||||
groupId,
|
groupId,
|
||||||
},
|
},
|
||||||
@ -311,15 +318,20 @@ export const ListOfGroupPromotions = () => {
|
|||||||
{
|
{
|
||||||
...response,
|
...response,
|
||||||
type: 'joined-group-request',
|
type: 'joined-group-request',
|
||||||
label: `Requested to join Group ${group?.groupName}: awaiting confirmation`,
|
label: t('group:message.success.group_join_request', {
|
||||||
labelDone: `Requested to join Group ${group?.groupName}: success!`,
|
group_name: group?.groupName,
|
||||||
|
postProcess: 'capitalize',
|
||||||
|
}),
|
||||||
|
labelDone: t('group:message.success.group_join_outcome', {
|
||||||
|
group_name: group?.groupName,
|
||||||
|
postProcess: 'capitalize',
|
||||||
|
}),
|
||||||
done: false,
|
done: false,
|
||||||
groupId,
|
groupId,
|
||||||
},
|
},
|
||||||
...prev,
|
...prev,
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
setOpenSnack(true);
|
setOpenSnack(true);
|
||||||
handlePopoverClose();
|
handlePopoverClose();
|
||||||
res(response);
|
res(response);
|
||||||
@ -336,7 +348,9 @@ export const ListOfGroupPromotions = () => {
|
|||||||
.catch((error) => {
|
.catch((error) => {
|
||||||
setInfoSnack({
|
setInfoSnack({
|
||||||
type: 'error',
|
type: 'error',
|
||||||
message: error.message || 'An error occurred',
|
message:
|
||||||
|
error.message ||
|
||||||
|
t('core:message.error.generic', { postProcess: 'capitalize' }),
|
||||||
});
|
});
|
||||||
setOpenSnack(true);
|
setOpenSnack(true);
|
||||||
rej(error);
|
rej(error);
|
||||||
@ -385,7 +399,7 @@ export const ListOfGroupPromotions = () => {
|
|||||||
fontSize: '1rem',
|
fontSize: '1rem',
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
Group promotions{' '}
|
{t('group:group.promotions', { postProcess: 'capitalize' })}{' '}
|
||||||
{promotions.length > 0 && ` (${promotions.length})`}
|
{promotions.length > 0 && ` (${promotions.length})`}
|
||||||
</Typography>
|
</Typography>
|
||||||
|
|
||||||
@ -444,7 +458,7 @@ export const ListOfGroupPromotions = () => {
|
|||||||
fontSize: '12px',
|
fontSize: '12px',
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
Add Promotion
|
{t('group.action.add_promotion', { postProcess: 'capitalize' })}
|
||||||
</Button>
|
</Button>
|
||||||
</Box>
|
</Box>
|
||||||
|
|
||||||
@ -490,7 +504,9 @@ export const ListOfGroupPromotions = () => {
|
|||||||
color: 'rgba(255, 255, 255, 0.2)',
|
color: 'rgba(255, 255, 255, 0.2)',
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
Nothing to display
|
{t('group.message.generic.no_display', {
|
||||||
|
postProcess: 'capitalize',
|
||||||
|
})}
|
||||||
</Typography>
|
</Typography>
|
||||||
</Box>
|
</Box>
|
||||||
)}
|
)}
|
||||||
@ -537,23 +553,25 @@ export const ListOfGroupPromotions = () => {
|
|||||||
ref={rowVirtualizer.measureElement} //measure dynamic row height
|
ref={rowVirtualizer.measureElement} //measure dynamic row height
|
||||||
key={promotion?.identifier}
|
key={promotion?.identifier}
|
||||||
style={{
|
style={{
|
||||||
position: 'absolute',
|
|
||||||
top: 0,
|
|
||||||
left: '50%', // Move to the center horizontally
|
|
||||||
transform: `translateY(${virtualRow.start}px) translateX(-50%)`, // Adjust for centering
|
|
||||||
width: '100%', // Control width (90% of the parent)
|
|
||||||
padding: '10px 0',
|
|
||||||
display: 'flex',
|
|
||||||
alignItems: 'center',
|
alignItems: 'center',
|
||||||
overscrollBehavior: 'none',
|
display: 'flex',
|
||||||
flexDirection: 'column',
|
flexDirection: 'column',
|
||||||
gap: '5px',
|
gap: '5px',
|
||||||
|
left: '50%', // Move to the center horizontally
|
||||||
|
overscrollBehavior: 'none',
|
||||||
|
padding: '10px 0',
|
||||||
|
position: 'absolute',
|
||||||
|
top: 0,
|
||||||
|
transform: `translateY(${virtualRow.start}px) translateX(-50%)`, // Adjust for centering
|
||||||
|
width: '100%', // Control width (90% of the parent)
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<ErrorBoundary
|
<ErrorBoundary
|
||||||
fallback={
|
fallback={
|
||||||
<Typography>
|
<Typography>
|
||||||
Error loading content: Invalid Data
|
{t('group.message.generic.invalid_data', {
|
||||||
|
postProcess: 'capitalize',
|
||||||
|
})}
|
||||||
</Typography>
|
</Typography>
|
||||||
}
|
}
|
||||||
>
|
>
|
||||||
@ -568,7 +586,7 @@ export const ListOfGroupPromotions = () => {
|
|||||||
<Popover
|
<Popover
|
||||||
open={openPopoverIndex === promotion?.groupId}
|
open={openPopoverIndex === promotion?.groupId}
|
||||||
anchorEl={popoverAnchor}
|
anchorEl={popoverAnchor}
|
||||||
onClose={(event, reason) => {
|
onClose={(reason) => {
|
||||||
if (reason === 'backdropClick') {
|
if (reason === 'backdropClick') {
|
||||||
// Prevent closing on backdrop click
|
// Prevent closing on backdrop click
|
||||||
return;
|
return;
|
||||||
@ -603,7 +621,10 @@ export const ListOfGroupPromotions = () => {
|
|||||||
fontWeight: 600,
|
fontWeight: 600,
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
Group name: {` ${promotion?.groupName}`}
|
{t('group:group.name', {
|
||||||
|
postProcess: 'capitalize',
|
||||||
|
})}
|
||||||
|
: {` ${promotion?.groupName}`}
|
||||||
</Typography>
|
</Typography>
|
||||||
|
|
||||||
<Typography
|
<Typography
|
||||||
@ -612,8 +633,10 @@ export const ListOfGroupPromotions = () => {
|
|||||||
fontWeight: 600,
|
fontWeight: 600,
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
Number of members:{' '}
|
{t('group:group.member_number', {
|
||||||
{` ${promotion?.memberCount}`}
|
postProcess: 'capitalize',
|
||||||
|
})}
|
||||||
|
: {` ${promotion?.memberCount}`}
|
||||||
</Typography>
|
</Typography>
|
||||||
|
|
||||||
{promotion?.description && (
|
{promotion?.description && (
|
||||||
@ -634,9 +657,9 @@ export const ListOfGroupPromotions = () => {
|
|||||||
fontWeight: 600,
|
fontWeight: 600,
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
*This is a closed/private group, so you
|
{t('group:message.generic.closed_group', {
|
||||||
will need to wait until an admin accepts
|
postProcess: 'capitalize',
|
||||||
your request
|
})}
|
||||||
</Typography>
|
</Typography>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
@ -657,7 +680,9 @@ export const ListOfGroupPromotions = () => {
|
|||||||
variant="contained"
|
variant="contained"
|
||||||
onClick={handlePopoverClose}
|
onClick={handlePopoverClose}
|
||||||
>
|
>
|
||||||
Close
|
{t('core:action.close', {
|
||||||
|
postProcess: 'capitalize',
|
||||||
|
})}
|
||||||
</LoadingButton>
|
</LoadingButton>
|
||||||
|
|
||||||
<LoadingButton
|
<LoadingButton
|
||||||
@ -671,7 +696,9 @@ export const ListOfGroupPromotions = () => {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
>
|
>
|
||||||
Join
|
{t('core:action.join', {
|
||||||
|
postProcess: 'capitalize',
|
||||||
|
})}
|
||||||
</LoadingButton>
|
</LoadingButton>
|
||||||
</Box>
|
</Box>
|
||||||
</Box>
|
</Box>
|
||||||
@ -755,8 +782,12 @@ export const ListOfGroupPromotions = () => {
|
|||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
{promotion?.isOpen
|
{promotion?.isOpen
|
||||||
? 'Public group'
|
? t('group:group.public', {
|
||||||
: 'Private group'}
|
postProcess: 'capitalize',
|
||||||
|
})
|
||||||
|
: t('group:group.private', {
|
||||||
|
postProcess: 'capitalize',
|
||||||
|
})}
|
||||||
</Typography>
|
</Typography>
|
||||||
</Box>
|
</Box>
|
||||||
|
|
||||||
@ -790,7 +821,10 @@ export const ListOfGroupPromotions = () => {
|
|||||||
color: theme.palette.text.primary,
|
color: theme.palette.text.primary,
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
Join Group: {` ${promotion?.groupName}`}
|
{t('group:action.join_group', {
|
||||||
|
postProcess: 'capitalize',
|
||||||
|
})}
|
||||||
|
: {` ${promotion?.groupName}`}
|
||||||
</Button>
|
</Button>
|
||||||
</Box>
|
</Box>
|
||||||
</Box>
|
</Box>
|
||||||
@ -810,90 +844,114 @@ export const ListOfGroupPromotions = () => {
|
|||||||
|
|
||||||
<Spacer height="20px" />
|
<Spacer height="20px" />
|
||||||
|
|
||||||
{isShowModal && (
|
<Dialog
|
||||||
<Dialog
|
open={isShowModal}
|
||||||
open={isShowModal}
|
aria-labelledby="alert-dialog-title"
|
||||||
aria-labelledby="alert-dialog-title"
|
aria-describedby="alert-dialog-description"
|
||||||
aria-describedby="alert-dialog-description"
|
>
|
||||||
>
|
<DialogTitle id="alert-dialog-title">
|
||||||
<DialogTitle id="alert-dialog-title">
|
{t('group:action.promote_group', { postProcess: 'capitalize' })}
|
||||||
{'Promote your group to non-members'}
|
</DialogTitle>
|
||||||
</DialogTitle>
|
|
||||||
<DialogContent>
|
<DialogContent>
|
||||||
<DialogContentText id="alert-dialog-description">
|
<DialogContentText id="alert-dialog-description">
|
||||||
Only the latest promotion from the week will be shown for your
|
{t('group:message.generic.latest_promotion', {
|
||||||
group.
|
postProcess: 'capitalize',
|
||||||
</DialogContentText>
|
})}
|
||||||
<DialogContentText id="alert-dialog-description2">
|
</DialogContentText>
|
||||||
Max 200 characters. Publish Fee: {fee && fee} {' QORT'}
|
|
||||||
</DialogContentText>
|
<DialogContentText id="alert-dialog-description2">
|
||||||
<Spacer height="20px" />
|
{t('group:message.generic.max_chars', {
|
||||||
<Box
|
postProcess: 'capitalize',
|
||||||
sx={{
|
})}
|
||||||
display: 'flex',
|
: {fee && fee} {' QORT'}
|
||||||
flexDirection: 'column',
|
</DialogContentText>
|
||||||
gap: '5px',
|
|
||||||
}}
|
<Spacer height="20px" />
|
||||||
|
|
||||||
|
<Box
|
||||||
|
sx={{
|
||||||
|
display: 'flex',
|
||||||
|
flexDirection: 'column',
|
||||||
|
gap: '5px',
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<Label>
|
||||||
|
{t('group:action.select_group', {
|
||||||
|
postProcess: 'capitalize',
|
||||||
|
})}
|
||||||
|
</Label>
|
||||||
|
|
||||||
|
<Label>
|
||||||
|
{t('group:message.generic.admin_only', {
|
||||||
|
postProcess: 'capitalize',
|
||||||
|
})}
|
||||||
|
</Label>
|
||||||
|
|
||||||
|
<Select
|
||||||
|
labelId="demo-simple-select-label"
|
||||||
|
id="demo-simple-select"
|
||||||
|
value={selectedGroup}
|
||||||
|
label="Groups where you are an admin"
|
||||||
|
onChange={(e) => setSelectedGroup(e.target.value)}
|
||||||
|
variant="outlined"
|
||||||
>
|
>
|
||||||
<Label>Select a group</Label>
|
{myGroupsWhereIAmAdmin?.map((group) => {
|
||||||
<Label>Only groups where you are an admin will be shown</Label>
|
return (
|
||||||
<Select
|
<MenuItem key={group?.groupId} value={group?.groupId}>
|
||||||
labelId="demo-simple-select-label"
|
{group?.groupName}
|
||||||
id="demo-simple-select"
|
</MenuItem>
|
||||||
value={selectedGroup}
|
);
|
||||||
label="Groups where you are an admin"
|
})}
|
||||||
onChange={(e) => setSelectedGroup(e.target.value)}
|
</Select>
|
||||||
variant="outlined"
|
</Box>
|
||||||
>
|
|
||||||
{myGroupsWhereIAmAdmin?.map((group) => {
|
<Spacer height="20px" />
|
||||||
return (
|
|
||||||
<MenuItem key={group?.groupId} value={group?.groupId}>
|
<TextField
|
||||||
{group?.groupName}
|
label="Promotion text"
|
||||||
</MenuItem>
|
variant="filled"
|
||||||
);
|
fullWidth
|
||||||
})}
|
value={text}
|
||||||
</Select>
|
onChange={(e) => setText(e.target.value)}
|
||||||
</Box>
|
inputProps={{
|
||||||
<Spacer height="20px" />
|
maxLength: 200,
|
||||||
<TextField
|
}}
|
||||||
label="Promotion text"
|
multiline={true}
|
||||||
variant="filled"
|
sx={{
|
||||||
fullWidth
|
'& .MuiFormLabel-root': {
|
||||||
value={text}
|
color: theme.palette.text.primary,
|
||||||
onChange={(e) => setText(e.target.value)}
|
},
|
||||||
inputProps={{
|
'& .MuiFormLabel-root.Mui-focused': {
|
||||||
maxLength: 200,
|
color: theme.palette.text.primary,
|
||||||
}}
|
},
|
||||||
multiline={true}
|
}}
|
||||||
sx={{
|
/>
|
||||||
'& .MuiFormLabel-root': {
|
</DialogContent>
|
||||||
color: theme.palette.text.primary,
|
|
||||||
},
|
<DialogActions>
|
||||||
'& .MuiFormLabel-root.Mui-focused': {
|
<Button
|
||||||
color: theme.palette.text.primary,
|
disabled={isLoadingPublish}
|
||||||
},
|
variant="contained"
|
||||||
}}
|
onClick={() => setIsShowModal(false)}
|
||||||
/>
|
>
|
||||||
</DialogContent>
|
{t('core:action.close', {
|
||||||
<DialogActions>
|
postProcess: 'capitalize',
|
||||||
<Button
|
})}
|
||||||
disabled={isLoadingPublish}
|
</Button>
|
||||||
variant="contained"
|
<Button
|
||||||
onClick={() => setIsShowModal(false)}
|
disabled={!text.trim() || !selectedGroup || isLoadingPublish}
|
||||||
>
|
variant="contained"
|
||||||
Close
|
onClick={publishPromo}
|
||||||
</Button>
|
autoFocus
|
||||||
<Button
|
>
|
||||||
disabled={!text.trim() || !selectedGroup || isLoadingPublish}
|
{t('core:action.publish', {
|
||||||
variant="contained"
|
postProcess: 'capitalize',
|
||||||
onClick={publishPromo}
|
})}
|
||||||
autoFocus
|
</Button>
|
||||||
>
|
</DialogActions>
|
||||||
Publish
|
</Dialog>
|
||||||
</Button>
|
|
||||||
</DialogActions>
|
|
||||||
</Dialog>
|
|
||||||
)}
|
|
||||||
<CustomizedSnackbars
|
<CustomizedSnackbars
|
||||||
open={openSnack}
|
open={openSnack}
|
||||||
setOpen={setOpenSnack}
|
setOpen={setOpenSnack}
|
||||||
|
@ -1,21 +1,17 @@
|
|||||||
import * as React from 'react';
|
import Snackbar from '@mui/material/Snackbar';
|
||||||
import Button from '@mui/material/Button';
|
|
||||||
import Snackbar, { SnackbarCloseReason } from '@mui/material/Snackbar';
|
|
||||||
import Alert from '@mui/material/Alert';
|
import Alert from '@mui/material/Alert';
|
||||||
|
|
||||||
export const LoadingSnackbar = ({open, info}) => {
|
export const LoadingSnackbar = ({ open, info }) => {
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
<Snackbar anchorOrigin={{ vertical: 'bottom', horizontal: 'center' }} open={open}>
|
<Snackbar
|
||||||
<Alert
|
anchorOrigin={{ vertical: 'bottom', horizontal: 'center' }}
|
||||||
severity="info"
|
open={open}
|
||||||
variant="filled"
|
>
|
||||||
sx={{ width: '100%' }}
|
<Alert severity="info" variant="filled" sx={{ width: '100%' }}>
|
||||||
>
|
|
||||||
{info?.message}
|
{info?.message}
|
||||||
</Alert>
|
</Alert>
|
||||||
</Snackbar>
|
</Snackbar>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
};
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
import * as React from 'react';
|
|
||||||
import Snackbar, { SnackbarCloseReason } from '@mui/material/Snackbar';
|
import Snackbar, { SnackbarCloseReason } from '@mui/material/Snackbar';
|
||||||
import Alert from '@mui/material/Alert';
|
import Alert from '@mui/material/Alert';
|
||||||
|
|
||||||
|
@ -198,9 +198,11 @@ export const TaskManager = ({ getUserInfo }) => {
|
|||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
</ListItemIcon>
|
</ListItemIcon>
|
||||||
|
|
||||||
<ListItemText primary="Ongoing Transactions" />
|
<ListItemText primary="Ongoing Transactions" />
|
||||||
{open ? <ExpandLess /> : <ExpandMore />}
|
{open ? <ExpandLess /> : <ExpandMore />}
|
||||||
</ListItemButton>
|
</ListItemButton>
|
||||||
|
|
||||||
<Collapse in={open} timeout="auto" unmountOnExit>
|
<Collapse in={open} timeout="auto" unmountOnExit>
|
||||||
<List component="div" disablePadding>
|
<List component="div" disablePadding>
|
||||||
{txList.map((item) => (
|
{txList.map((item) => (
|
||||||
|
@ -27,7 +27,8 @@
|
|||||||
},
|
},
|
||||||
"notify": "notify",
|
"notify": "notify",
|
||||||
"post": "post",
|
"post": "post",
|
||||||
"post_message": "post message"
|
"post_message": "post message",
|
||||||
|
"publish": "publish"
|
||||||
},
|
},
|
||||||
"admin": "admin",
|
"admin": "admin",
|
||||||
"core": {
|
"core": {
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
{
|
{
|
||||||
"action": {
|
"action": {
|
||||||
|
"add_promotion": "add promotion",
|
||||||
"ban": "ban member from group",
|
"ban": "ban member from group",
|
||||||
"cancel_ban": "cancel ban",
|
"cancel_ban": "cancel ban",
|
||||||
"copy_private_key": "copy private key",
|
"copy_private_key": "copy private key",
|
||||||
@ -16,9 +17,11 @@
|
|||||||
"load_members": "load members with names",
|
"load_members": "load members with names",
|
||||||
"make_admin": "make an admin",
|
"make_admin": "make an admin",
|
||||||
"manage_members": "manage members",
|
"manage_members": "manage members",
|
||||||
|
"promote_group": "promote your group to non-members",
|
||||||
"refetch_page": "refetch page",
|
"refetch_page": "refetch page",
|
||||||
"remove_admin": "remove as admin",
|
"remove_admin": "remove as admin",
|
||||||
"return_to_thread": "return to threads"
|
"return_to_thread": "return to threads",
|
||||||
|
"select_group": "select a group"
|
||||||
},
|
},
|
||||||
"advanced_options": "advanced options",
|
"advanced_options": "advanced options",
|
||||||
"approval_threshold": "group Approval Threshold (number / percentage of Admins that must approve a transaction)",
|
"approval_threshold": "group Approval Threshold (number / percentage of Admins that must approve a transaction)",
|
||||||
@ -36,6 +39,9 @@
|
|||||||
"member_number": "number of members",
|
"member_number": "number of members",
|
||||||
"name": "group name",
|
"name": "group name",
|
||||||
"open": "open (public)",
|
"open": "open (public)",
|
||||||
|
"private": "private group",
|
||||||
|
"promotions": "group promotions",
|
||||||
|
"public": "public group",
|
||||||
"type": "group type"
|
"type": "group type"
|
||||||
},
|
},
|
||||||
"invitation_expiry": "invitation Expiry Time",
|
"invitation_expiry": "invitation Expiry Time",
|
||||||
@ -46,12 +52,16 @@
|
|||||||
"latest_mails": "latest Q-Mails",
|
"latest_mails": "latest Q-Mails",
|
||||||
"message": {
|
"message": {
|
||||||
"generic": {
|
"generic": {
|
||||||
|
"admin_only": "only groups where you are an admin will be shown",
|
||||||
"already_in_group": "you are already in this group!",
|
"already_in_group": "you are already in this group!",
|
||||||
"closed_group": "this is a closed/private group, so you will need to wait until an admin accepts your request",
|
"closed_group": "this is a closed/private group, so you will need to wait until an admin accepts your request",
|
||||||
"descrypt_wallet": "decrypting wallet...",
|
"descrypt_wallet": "decrypting wallet...",
|
||||||
"encryption_key": "the group's first common encryption key is in the process of creation. Please wait a few minutes for it to be retrieved by the network. Checking every 2 minutes...",
|
"encryption_key": "the group's first common encryption key is in the process of creation. Please wait a few minutes for it to be retrieved by the network. Checking every 2 minutes...",
|
||||||
"group_invited_you": "{{group}} has invited you",
|
"group_invited_you": "{{group}} has invited you",
|
||||||
|
"invalid_data": "error loading content: Invalid Data",
|
||||||
|
"latest_promotion": "only the latest promotion from the week will be shown for your group.",
|
||||||
"loading_members": "loading member list with names... please wait.",
|
"loading_members": "loading member list with names... please wait.",
|
||||||
|
"max_chars": " Max 200 characters. Publish Fee",
|
||||||
"no_display": "nothing to display",
|
"no_display": "nothing to display",
|
||||||
"no_selection": "no group selected",
|
"no_selection": "no group selected",
|
||||||
"not_part_group": "you are not part of the encrypted group of members. Wait until an admin re-encrypts the keys.",
|
"not_part_group": "you are not part of the encrypted group of members. Wait until an admin re-encrypts the keys.",
|
||||||
@ -66,6 +76,7 @@
|
|||||||
"descrypt_wallet": "error decrypting wallet {{ :errorMessage }}",
|
"descrypt_wallet": "error decrypting wallet {{ :errorMessage }}",
|
||||||
"description_required": "please provide a description",
|
"description_required": "please provide a description",
|
||||||
"group_info": "cannot access group information",
|
"group_info": "cannot access group information",
|
||||||
|
"group_promotion": "error publishing the promotion. Please try again",
|
||||||
"group_secret_key": "cannot get group secret key",
|
"group_secret_key": "cannot get group secret key",
|
||||||
"name_required": "please provide a name",
|
"name_required": "please provide a name",
|
||||||
"notify_admins": "try notifying an admin from the list of admins below:",
|
"notify_admins": "try notifying an admin from the list of admins below:",
|
||||||
@ -87,6 +98,7 @@
|
|||||||
"group_leave_name": "left group {{group_name}}: awaiting confirmation",
|
"group_leave_name": "left group {{group_name}}: awaiting confirmation",
|
||||||
"group_leave_label": "left group {{name}}: success!",
|
"group_leave_label": "left group {{name}}: success!",
|
||||||
"group_member_admin": "successfully made member an admin. It may take a couple of minutes for the changes to propagate",
|
"group_member_admin": "successfully made member an admin. It may take a couple of minutes for the changes to propagate",
|
||||||
|
"group_promotion": "successfully published promotion. It may take a couple of minutes for the promotion to appear",
|
||||||
"group_remove_member": "successfully removed member as an admin. It may take a couple of minutes for the changes to propagate",
|
"group_remove_member": "successfully removed member as an admin. It may take a couple of minutes for the changes to propagate",
|
||||||
"invitation_cancellation": "successfully canceled invitation. It may take a couple of minutes for the changes to propagate",
|
"invitation_cancellation": "successfully canceled invitation. It may take a couple of minutes for the changes to propagate",
|
||||||
"invitation_request": "accepted join request: awaiting confirmation",
|
"invitation_request": "accepted join request: awaiting confirmation",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user