diff --git a/src/api/inventory.js b/src/api/inventory.js
index b9fcc560..0f6ead42 100644
--- a/src/api/inventory.js
+++ b/src/api/inventory.js
@@ -86,6 +86,24 @@ const inventoryReq = {
};
return args;
});
+ },
+
+ /**
+ * @param {{ code: string }} params
+ * @returns {Promise<{json: any, params}>}
+ * Note: Do not redeem
+ */
+ redeemReward(params) {
+ return request('reward/redeem', {
+ method: 'POST',
+ params
+ }).then((json) => {
+ const args = {
+ json,
+ params
+ };
+ return args;
+ });
}
};
diff --git a/src/localization/en/en.json b/src/localization/en/en.json
index d7502837..29fbf250 100644
--- a/src/localization/en/en.json
+++ b/src/localization/en/en.json
@@ -1534,7 +1534,8 @@
"item": "Item",
"sticker": "Sticker",
"drone_skin": "Drone Skin",
- "emoji": "Emoji"
+ "emoji": "Emoji",
+ "redeem": "Redeem"
},
"change_content_image": {
"avatar": "Change Avatar Image",
@@ -1998,6 +1999,15 @@
"placeholder": "127.0.0.1:8080",
"close": "Close",
"restart": "Restart"
+ },
+ "redeem": {
+ "header": "Redeem Code",
+ "description": "Enter your code to redeem",
+ "cancel": "Cancel",
+ "redeem": "Redeem",
+ "input_placeholder": "Code",
+ "input_error": "Code is required",
+ "success": "Code redeemed successfully"
}
},
"table": {
diff --git a/src/service/request.js b/src/service/request.js
index cc3d5eff..5b200b8c 100644
--- a/src/service/request.js
+++ b/src/service/request.js
@@ -285,6 +285,7 @@ export function $throw(code, error, endpoint) {
(endpoint.startsWith('users/') ||
endpoint.startsWith('worlds/') ||
endpoint.startsWith('avatars/') ||
+ endpoint.startsWith('groups/') ||
endpoint.startsWith('file/'))
) {
ignoreError = true;
diff --git a/src/views/Tools/dialogs/GalleryDialog.vue b/src/views/Tools/dialogs/GalleryDialog.vue
index 19669e7a..f2832c62 100644
--- a/src/views/Tools/dialogs/GalleryDialog.vue
+++ b/src/views/Tools/dialogs/GalleryDialog.vue
@@ -486,6 +486,9 @@
{{ t('dialog.gallery_icons.refresh') }}
+
+ {{ t('dialog.gallery_icons.redeem') }}
+
@@ -534,8 +537,8 @@