decentraland-dapps 16.18.0 → 16.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/containers/Navbar/Navbar.d.ts +1 -0
- package/dist/containers/Navbar/Navbar.js +17 -2
- package/dist/containers/Navbar/Navbar.js.map +1 -1
- package/dist/containers/Navbar/Navbar.types.d.ts +3 -0
- package/dist/containers/Notifications/Notifications.d.ts +7 -0
- package/dist/containers/Notifications/Notifications.js +97 -0
- package/dist/containers/Notifications/Notifications.js.map +1 -0
- package/dist/containers/Notifications/utils.d.ts +3 -0
- package/dist/containers/Notifications/utils.js +19 -0
- package/dist/containers/Notifications/utils.js.map +1 -0
- package/dist/lib/BaseClient.d.ts +2 -2
- package/dist/lib/BaseClient.js.map +1 -1
- package/dist/modules/notifications.d.ts +9 -0
- package/dist/modules/notifications.js +37 -0
- package/dist/modules/notifications.js.map +1 -0
- package/package.json +3 -2
|
@@ -12,5 +12,6 @@ export default class Navbar extends React.PureComponent<NavbarProps> {
|
|
|
12
12
|
handleSwitchNetwork: () => void;
|
|
13
13
|
handleSignOut: () => void;
|
|
14
14
|
handleClickMenuOption: (_e: React.MouseEvent, section: string) => void;
|
|
15
|
+
renderRightMenu(): React.ReactNode;
|
|
15
16
|
render(): JSX.Element;
|
|
16
17
|
}
|
|
@@ -32,6 +32,8 @@ const utils_1 = require("../../modules/analytics/utils");
|
|
|
32
32
|
const utils_2 = require("../../modules/translation/utils");
|
|
33
33
|
const Modal_1 = __importDefault(require("../../containers/Modal"));
|
|
34
34
|
const ChainProvider_1 = __importDefault(require("../ChainProvider"));
|
|
35
|
+
const Notifications_1 = __importDefault(require("../Notifications/Notifications"));
|
|
36
|
+
const Media_1 = require("decentraland-ui/dist/components/Media");
|
|
35
37
|
class Navbar extends React.PureComponent {
|
|
36
38
|
constructor() {
|
|
37
39
|
super(...arguments);
|
|
@@ -62,7 +64,8 @@ class Navbar extends React.PureComponent {
|
|
|
62
64
|
main: React.createElement(utils_2.T, { id: "@dapps.navbar.menu.dao.main" }),
|
|
63
65
|
overview: React.createElement(utils_2.T, { id: "@dapps.navbar.menu.dao.overview" }),
|
|
64
66
|
governance: React.createElement(utils_2.T, { id: "@dapps.navbar.menu.dao.governance" }),
|
|
65
|
-
transparency: React.createElement(utils_2.T, { id: "@dapps.navbar.menu.dao.transparency" })
|
|
67
|
+
transparency: React.createElement(utils_2.T, { id: "@dapps.navbar.menu.dao.transparency" }),
|
|
68
|
+
grants: React.createElement(utils_2.T, { id: "@dapps.navbar.menu.dao.grants" }),
|
|
66
69
|
},
|
|
67
70
|
docs: {
|
|
68
71
|
main: React.createElement(utils_2.T, { id: "@dapps.navbar.menu.docs.main" }),
|
|
@@ -102,6 +105,18 @@ class Navbar extends React.PureComponent {
|
|
|
102
105
|
});
|
|
103
106
|
};
|
|
104
107
|
}
|
|
108
|
+
renderRightMenu() {
|
|
109
|
+
if (this.props.withNotifications) {
|
|
110
|
+
if (this.props.isConnected) {
|
|
111
|
+
return (React.createElement(React.Fragment, null,
|
|
112
|
+
React.createElement(Media_1.NotMobile, null,
|
|
113
|
+
React.createElement("div", { style: { marginRight: "10px" } },
|
|
114
|
+
React.createElement(Notifications_1.default, { identity: this.props.identity }))),
|
|
115
|
+
this.props.rightMenu || React.createElement(React.Fragment, null)));
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
return this.props.rightMenu;
|
|
119
|
+
}
|
|
105
120
|
render() {
|
|
106
121
|
const { appChainId, docsUrl, enablePartialSupportAlert } = this.props;
|
|
107
122
|
const expectedChainName = (0, chain_id_1.getChainName)(appChainId);
|
|
@@ -114,7 +129,7 @@ class Navbar extends React.PureComponent {
|
|
|
114
129
|
}),
|
|
115
130
|
action: (0, utils_2.t)('@dapps.network_alert.action')
|
|
116
131
|
}, onSwitchNetwork: this.handleSwitchNetwork })) : null,
|
|
117
|
-
React.createElement(Navbar_1.Navbar, Object.assign({}, this.props, {
|
|
132
|
+
React.createElement(Navbar_1.Navbar, Object.assign({}, this.props, { rightMenu: this.renderRightMenu(), i18n: this.getTranslations() })),
|
|
118
133
|
isUnsupported ? (React.createElement(Modal_1.default, { open: true, size: "tiny" },
|
|
119
134
|
React.createElement(ModalNavigation_1.ModalNavigation, { title: React.createElement(utils_2.T, { id: "@dapps.navbar.wrong_network.header" }) }),
|
|
120
135
|
React.createElement(Modal_1.default.Content, null, !(0, chain_id_1.getChainName)(chainId) ? (React.createElement(utils_2.T, { id: "@dapps.navbar.wrong_network.message_unknown_network", values: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Navbar.js","sourceRoot":"","sources":["../../../src/containers/Navbar/Navbar.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAAA,6CAA8B;AAE9B,0EAAsE;AACtE,4FAAwF;AACxF,qGAAiG;AACjG,0EAGsD;AACtD,+DAA+D;AAC/D,yDAA4D;AAC5D,2DAAsD;AACtD,mEAA0C;AAC1C,qEAA4C;
|
|
1
|
+
{"version":3,"file":"Navbar.js","sourceRoot":"","sources":["../../../src/containers/Navbar/Navbar.tsx"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,7 @@ import { Dispatch } from 'redux';
|
|
|
2
2
|
import { ChainId } from '@dcl/schemas/dist/dapps/chain-id';
|
|
3
3
|
import { NavbarProps as NavbarComponentProps } from 'decentraland-ui/dist/components/Navbar/Navbar';
|
|
4
4
|
import { disconnectWallet, switchNetworkRequest, SwitchNetworkRequestAction } from '../../modules/wallet/actions';
|
|
5
|
+
import { AuthIdentity } from 'decentraland-crypto-fetch';
|
|
5
6
|
export declare type NavbarProps = NavbarComponentProps & {
|
|
6
7
|
chainId?: ChainId;
|
|
7
8
|
appChainId: ChainId;
|
|
@@ -10,6 +11,8 @@ export declare type NavbarProps = NavbarComponentProps & {
|
|
|
10
11
|
enablePartialSupportAlert?: boolean;
|
|
11
12
|
onSwitchNetwork: typeof switchNetworkRequest;
|
|
12
13
|
onSignOut: typeof disconnectWallet;
|
|
14
|
+
withNotifications?: boolean;
|
|
15
|
+
identity?: AuthIdentity;
|
|
13
16
|
};
|
|
14
17
|
export declare type MapStateProps = Pick<NavbarProps, 'mana' | 'address' | 'isConnected' | 'isConnecting' | 'hasTranslations' | 'chainId' | 'appChainId'>;
|
|
15
18
|
export declare type MapDispatchProps = Pick<NavbarProps, 'onSwitchNetwork' | 'onSignOut'>;
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
+
}) : function(o, v) {
|
|
12
|
+
o["default"] = v;
|
|
13
|
+
});
|
|
14
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
15
|
+
if (mod && mod.__esModule) return mod;
|
|
16
|
+
var result = {};
|
|
17
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
18
|
+
__setModuleDefault(result, mod);
|
|
19
|
+
return result;
|
|
20
|
+
};
|
|
21
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
22
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
23
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
24
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
25
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
26
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
27
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
28
|
+
});
|
|
29
|
+
};
|
|
30
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
31
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
32
|
+
};
|
|
33
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
34
|
+
const react_1 = __importStar(require("react"));
|
|
35
|
+
const Notifications_1 = __importDefault(require("decentraland-ui/dist/components/Notifications/Notifications"));
|
|
36
|
+
const notifications_1 = __importDefault(require("../../modules/notifications"));
|
|
37
|
+
const utils_1 = require("../../modules/translation/utils");
|
|
38
|
+
const utils_2 = require("./utils");
|
|
39
|
+
function Notifications(props) {
|
|
40
|
+
const [notifications, setNotifications] = (0, react_1.useState)([]);
|
|
41
|
+
const [activeTab, setActiveTab] = (0, react_1.useState)('newest');
|
|
42
|
+
const [isLoading, setIsLoading] = (0, react_1.useState)(false);
|
|
43
|
+
const [isOnboarding, setIsOnboarding] = (0, react_1.useState)((0, utils_2.checkIsOnboarding)());
|
|
44
|
+
const [isOpen, setIsOpen] = (0, react_1.useState)(false);
|
|
45
|
+
let client;
|
|
46
|
+
if (props.identity) {
|
|
47
|
+
client = new notifications_1.default({ identity: props.identity });
|
|
48
|
+
}
|
|
49
|
+
const fetchNotificationsState = () => {
|
|
50
|
+
setIsLoading(true);
|
|
51
|
+
client.getNotifications()
|
|
52
|
+
.then((response) => {
|
|
53
|
+
const parsed = response
|
|
54
|
+
.notifications
|
|
55
|
+
.map(utils_2.parseNotification);
|
|
56
|
+
setNotifications(parsed);
|
|
57
|
+
})
|
|
58
|
+
.finally(() => setIsLoading(false));
|
|
59
|
+
};
|
|
60
|
+
const handleToggleOpen = () => __awaiter(this, void 0, void 0, function* () {
|
|
61
|
+
let currentState = isOpen;
|
|
62
|
+
setIsOpen(!isOpen);
|
|
63
|
+
if (!currentState) {
|
|
64
|
+
const unreadNotifications = notifications.filter((notification) => !notification.read).map(({ id }) => id);
|
|
65
|
+
if (unreadNotifications.length) {
|
|
66
|
+
yield client.markNotificationsAsRead(unreadNotifications);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
const markCurrentNotificationsAsRead = notifications.map((notification) => {
|
|
71
|
+
if (notification.read)
|
|
72
|
+
return notification;
|
|
73
|
+
return (Object.assign(Object.assign({}, notification), { read: true }));
|
|
74
|
+
});
|
|
75
|
+
setNotifications(markCurrentNotificationsAsRead);
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
(0, react_1.useEffect)(() => {
|
|
79
|
+
if (props.identity) {
|
|
80
|
+
fetchNotificationsState();
|
|
81
|
+
const interval = setInterval(() => __awaiter(this, void 0, void 0, function* () {
|
|
82
|
+
const response = yield client.getNotifications();
|
|
83
|
+
const parsed = response.notifications.map(utils_2.parseNotification);
|
|
84
|
+
setNotifications(parsed);
|
|
85
|
+
}), 60000);
|
|
86
|
+
return () => {
|
|
87
|
+
clearInterval(interval);
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
return () => { };
|
|
92
|
+
}
|
|
93
|
+
}, [props.identity]);
|
|
94
|
+
return react_1.default.createElement(Notifications_1.default, { locale: (0, utils_1.getPreferredLocale)(['en', 'es', 'zh']) || 'en', isOnboarding: isOnboarding, isLoading: isLoading, isOpen: isOpen, onClick: handleToggleOpen, activeTab: activeTab, onChangeTab: (_, tab) => setActiveTab(tab), onBegin: () => setIsOnboarding(false), items: notifications });
|
|
95
|
+
}
|
|
96
|
+
exports.default = Notifications;
|
|
97
|
+
//# sourceMappingURL=Notifications.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Notifications.js","sourceRoot":"","sources":["../../../src/containers/Notifications/Notifications.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseNotification = exports.checkIsOnboarding = void 0;
|
|
4
|
+
const checkIsOnboarding = () => {
|
|
5
|
+
const isOnboarding = localStorage.getItem('dcl_notifications_onboarding');
|
|
6
|
+
if (isOnboarding) {
|
|
7
|
+
return false;
|
|
8
|
+
}
|
|
9
|
+
else {
|
|
10
|
+
localStorage.setItem('dcl_notifications_onboarding', "true");
|
|
11
|
+
return true;
|
|
12
|
+
}
|
|
13
|
+
};
|
|
14
|
+
exports.checkIsOnboarding = checkIsOnboarding;
|
|
15
|
+
const parseNotification = (notification) => {
|
|
16
|
+
return (Object.assign(Object.assign({}, notification), { timestamp: Number(notification.timestamp) * 1000 }));
|
|
17
|
+
};
|
|
18
|
+
exports.parseNotification = parseNotification;
|
|
19
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/containers/Notifications/utils.ts"],"names":[],"mappings":";;;AAEO,MAAM,iBAAiB,GAAG,GAAG,EAAE;IACpC,MAAM,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,8BAA8B,CAAC,CAAA;IACzE,IAAI,YAAY,EAAE;QAChB,OAAO,KAAK,CAAA;KACb;SAAM;QACL,YAAY,CAAC,OAAO,CAAC,8BAA8B,EAAE,MAAM,CAAC,CAAA;QAC5D,OAAO,IAAI,CAAA;KACZ;AACH,CAAC,CAAA;AARY,QAAA,iBAAiB,qBAQ7B;AAEM,MAAM,iBAAiB,GAAG,CAAC,YAA6B,EAAmB,EAAE;IAClF,OAAO,iCACF,YAAY,KACf,SAAS,EAAE,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,GAAG,IAAI,IAChD,CAAA;AACJ,CAAC,CAAA;AALY,QAAA,iBAAiB,qBAK7B"}
|
package/dist/lib/BaseClient.d.ts
CHANGED
|
@@ -9,14 +9,14 @@ export declare type BaseClientConfig = {
|
|
|
9
9
|
nonRetryableStatuses?: number[];
|
|
10
10
|
};
|
|
11
11
|
export declare abstract class BaseClient {
|
|
12
|
-
|
|
12
|
+
protected readonly baseUrl: string;
|
|
13
13
|
private readonly retries;
|
|
14
14
|
private readonly retryDelay;
|
|
15
15
|
private readonly nonRetryableStatuses;
|
|
16
16
|
private readonly identity;
|
|
17
17
|
constructor(url: string, config?: BaseClientConfig);
|
|
18
18
|
private sleep;
|
|
19
|
-
|
|
19
|
+
protected getIdentity: () => AuthIdentity | undefined;
|
|
20
20
|
protected rawFetch: (path: string, init?: SignedRequestInit | undefined) => Promise<Response>;
|
|
21
21
|
protected fetch: <T>(path: string, init?: SignedRequestInit | undefined) => Promise<T>;
|
|
22
22
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseClient.js","sourceRoot":"","sources":["../../src/lib/BaseClient.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,0FAAkG;AAClG,6CAA8B;AAC9B,+CAA2C;AAE3C,MAAM,eAAe,GAAG,CAAC,CAAA;AACzB,MAAM,mBAAmB,GAAG,IAAI,CAAA;AAChC,MAAM,8BAA8B,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;AACrE,MAAM,GAAG,GAAG,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,GAAG,mCAAI,OAAO,CAAC,GAAG,CAAA;AAY1C,MAAsB,UAAU;IAU9B,YAAY,GAAW,EAAE,MAAyB;;QAQ1C,UAAK,GAAG,CAAC,KAAa,EAAE,EAAE,CAChC,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;YACpB,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;QAC5B,CAAC,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"BaseClient.js","sourceRoot":"","sources":["../../src/lib/BaseClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { BaseClient, BaseClientConfig } from "../lib/BaseClient";
|
|
2
|
+
import { DCLNotification } from "decentraland-ui/dist/components/Notifications/types";
|
|
3
|
+
export default class NotificationsAPI extends BaseClient {
|
|
4
|
+
constructor(config: BaseClientConfig);
|
|
5
|
+
getNotifications(from?: number): Promise<{
|
|
6
|
+
notifications: Array<DCLNotification>;
|
|
7
|
+
}>;
|
|
8
|
+
markNotificationsAsRead(ids: string[]): Promise<void>;
|
|
9
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
const ui_env_1 = require("@dcl/ui-env");
|
|
13
|
+
const BaseClient_1 = require("../lib/BaseClient");
|
|
14
|
+
class NotificationsAPI extends BaseClient_1.BaseClient {
|
|
15
|
+
constructor(config) {
|
|
16
|
+
const url = (0, ui_env_1.getEnv)() === ui_env_1.Env.DEVELOPMENT || ui_env_1.Env.STAGING ? "https://notifications.decentraland.zone" : "https://notifications.decentraland.org";
|
|
17
|
+
super(url, config);
|
|
18
|
+
}
|
|
19
|
+
getNotifications(from) {
|
|
20
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
21
|
+
const notificationsResponse = yield this.fetch(`/notifications${from ? `?from=${from}` : ''}`);
|
|
22
|
+
return notificationsResponse;
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
markNotificationsAsRead(ids) {
|
|
26
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
27
|
+
yield this.fetch('/notifications/read', {
|
|
28
|
+
method: "PUT",
|
|
29
|
+
body: JSON.stringify({ notificationIds: ids }),
|
|
30
|
+
metadata: { notificationIds: ids },
|
|
31
|
+
headers: { "Content-Type": "application/json" }
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
exports.default = NotificationsAPI;
|
|
37
|
+
//# sourceMappingURL=notifications.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notifications.js","sourceRoot":"","sources":["../../src/modules/notifications.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,wCAA0C;AAC1C,kDAAiE;AAIjE,MAAqB,gBAAiB,SAAQ,uBAAU;IACtD,YAAY,MAAwB;QAClC,MAAM,GAAG,GAAG,IAAA,eAAM,GAAE,KAAK,YAAG,CAAC,WAAW,IAAI,YAAG,CAAC,OAAO,CAAC,CAAC,CAAC,yCAAyC,CAAC,CAAC,CAAC,wCAAwC,CAAA;QAE9I,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;IACpB,CAAC;IAEK,gBAAgB,CAAC,IAAa;;YAClC,MAAM,qBAAqB,GAAG,MAAM,IAAI,CAAC,KAAK,CAA0C,iBAAiB,IAAI,CAAC,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,CAAC,EAAG,EAAE,CAAC,CAAA;YAExI,OAAO,qBAAqB,CAAA;QAC9B,CAAC;KAAA;IAEK,uBAAuB,CAAC,GAAa;;YACzC,MAAM,IAAI,CAAC,KAAK,CAAC,qBAAqB,EAAE;gBACtC,MAAM,EAAE,KAAK;gBACb,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,eAAe,EAAE,GAAG,EAAE,CAAC;gBAC9C,QAAQ,EAAE,EAAE,eAAe,EAAE,GAAG,EAAE;gBAClC,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;aAChD,CAAC,CAAA;QACJ,CAAC;KAAA;CAEF;AAtBD,mCAsBC"}
|
package/package.json
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "decentraland-dapps",
|
|
3
|
-
"version": "16.
|
|
3
|
+
"version": "16.19.0",
|
|
4
4
|
"dependencies": {
|
|
5
5
|
"@0xsequence/multicall": "^0.25.1",
|
|
6
6
|
"@0xsequence/relayer": "^0.25.1",
|
|
7
7
|
"@dcl/crypto": "^3.3.1",
|
|
8
8
|
"@dcl/schemas": "^9.2.0",
|
|
9
|
+
"@dcl/ui-env": "^1.4.0",
|
|
9
10
|
"@transak/transak-sdk": "^1.0.31",
|
|
10
11
|
"@types/flat": "0.0.28",
|
|
11
12
|
"@well-known-components/fetch-component": "^2.0.1",
|
|
@@ -15,7 +16,7 @@
|
|
|
15
16
|
"decentraland-connect": "^5.1.0",
|
|
16
17
|
"decentraland-crypto-fetch": "^2.0.1",
|
|
17
18
|
"decentraland-transactions": "^1.47.0",
|
|
18
|
-
"decentraland-ui": "
|
|
19
|
+
"decentraland-ui": "4.30.0",
|
|
19
20
|
"ethers": "^5.6.8",
|
|
20
21
|
"events": "^3.3.0",
|
|
21
22
|
"flat": "^5.0.2",
|