diff --git a/CHANGELOG.md b/CHANGELOG.md
index f77c8679d..578fcb338 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -8,19 +8,24 @@ Web UI version numbers should always match the corresponding version of LBRY App
## [Unreleased]
### Added
+ * Added an Invites area inside of the Wallet. This allows users to invite others and shows the status of all past invites (including all invite data from the past year).
* Added a forward button and improved history behavior. Back/forward disable when unusable.
- * Added a new component, `FormFieldPrice` which is now used in Publish and Settings.
+ * Added new summary components for rewards and invites to the Wallet landing page.
+ * Added past history of rewards to the rewards page.
* Added wallet backup guide reference.
+ * Added a new widget for setting prices (`FormFieldPrice`), used in Publish and Settings.
### Changed
* Updated to daemon [0.15](https://github.com/lbryio/lbry/releases). Most relevant changes for app are improved announcing of content and a fix for the daemon getting stuck running.
* Continued to refine first-run process, process for new users, and introducing people to LBRY and LBRY credits.
- * Changed the default price settings.
+ * Changed Wallet landing page to summarize status of other areas. Refactored wallet and transaction logic.
+ * Added icons to missing page, improved icon and title logic.
+ * Changed the default price settings for priced publishes.
* When an "Open" button is clicked on a show page, if the file fails to open, the app will try to open the file's folder.
+ * Updated several packages and fixed warnings in build process (all but the [fsevents warning](https://github.com/yarnpkg/yarn/issues/3738), which is a rather dramatic debate)
* Some form field refactoring as we take baby steps towards form sanity.
* Replaced confusing placeholder text from email input.
* Refactored modal and settings logic.
- * Updated several packages and fixed warnings in build process (all but the [fsevents warning](https://github.com/yarnpkg/yarn/issues/3738), which is a rather dramatic debate)
### Fixed
* Tiles will no longer be blurry on hover (Windows only bug)
diff --git a/ui/dist/font/FontAwesome.otf b/ui/dist/font/FontAwesome.otf
index f7936cc1e..401ec0f36 100644
Binary files a/ui/dist/font/FontAwesome.otf and b/ui/dist/font/FontAwesome.otf differ
diff --git a/ui/dist/font/fontawesome-webfont.eot b/ui/dist/font/fontawesome-webfont.eot
index 33b2bb800..e9f60ca95 100644
Binary files a/ui/dist/font/fontawesome-webfont.eot and b/ui/dist/font/fontawesome-webfont.eot differ
diff --git a/ui/dist/font/fontawesome-webfont.svg b/ui/dist/font/fontawesome-webfont.svg
index 1ee89d436..855c845e5 100644
--- a/ui/dist/font/fontawesome-webfont.svg
+++ b/ui/dist/font/fontawesome-webfont.svg
@@ -1,565 +1,2671 @@
-
diff --git a/ui/dist/font/fontawesome-webfont.ttf b/ui/dist/font/fontawesome-webfont.ttf
index ed9372f8e..35acda2fa 100644
Binary files a/ui/dist/font/fontawesome-webfont.ttf and b/ui/dist/font/fontawesome-webfont.ttf differ
diff --git a/ui/dist/font/fontawesome-webfont.woff b/ui/dist/font/fontawesome-webfont.woff
index 8b280b98f..400014a4b 100644
Binary files a/ui/dist/font/fontawesome-webfont.woff and b/ui/dist/font/fontawesome-webfont.woff differ
diff --git a/ui/dist/font/fontawesome-webfont.woff2 b/ui/dist/font/fontawesome-webfont.woff2
index 3311d5851..4d13fc604 100644
Binary files a/ui/dist/font/fontawesome-webfont.woff2 and b/ui/dist/font/fontawesome-webfont.woff2 differ
diff --git a/ui/js/actions/user.js b/ui/js/actions/user.js
index e649bed88..f2bc934dc 100644
--- a/ui/js/actions/user.js
+++ b/ui/js/actions/user.js
@@ -20,6 +20,7 @@ export function doAuthenticate() {
data: { user },
});
dispatch(doRewardList());
+ dispatch(doFetchInviteStatus());
})
.catch(error => {
dispatch(doOpenModal(modals.AUTHENTICATION_FAILURE));
diff --git a/ui/js/component/common.js b/ui/js/component/common.js
index 16ac2497e..d92669262 100644
--- a/ui/js/component/common.js
+++ b/ui/js/component/common.js
@@ -69,15 +69,18 @@ export class CreditAmount extends React.PureComponent {
label: React.PropTypes.bool,
showFree: React.PropTypes.bool,
showFullPrice: React.PropTypes.bool,
+ showPlus: React.PropTypes.bool,
look: React.PropTypes.oneOf(["indicator", "plain"]),
};
static defaultProps = {
precision: 2,
label: true,
+ showFree: false,
look: "indicator",
showFree: false,
showFullPrice: false,
+ showPlus: false,
};
render() {
@@ -98,13 +101,18 @@ export class CreditAmount extends React.PureComponent {
let amountText;
if (this.props.showFree && parseFloat(this.props.amount) === 0) {
amountText = __("free");
- } else if (this.props.label) {
- amountText =
- formattedAmount +
- " " +
- (parseFloat(amount) == 1 ? __("credit") : __("credits"));
} else {
- amountText = formattedAmount;
+ if (this.props.label) {
+ amountText =
+ formattedAmount +
+ " " +
+ (parseFloat(amount) == 1 ? __("credit") : __("credits"));
+ } else {
+ amountText = formattedAmount;
+ }
+ if (this.props.showPlus && amount > 0) {
+ amountText = "+" + amountText;
+ }
}
return (
diff --git a/ui/js/component/inviteSummary/index.js b/ui/js/component/inviteSummary/index.js
new file mode 100644
index 000000000..d93c0880f
--- /dev/null
+++ b/ui/js/component/inviteSummary/index.js
@@ -0,0 +1,14 @@
+import React from "react";
+import { connect } from "react-redux";
+import {
+ selectUserInvitesRemaining,
+ selectUserInviteNewIsPending,
+} from "selectors/user";
+import InviteSummary from "./view";
+
+const select = state => ({
+ invitesRemaining: selectUserInvitesRemaining(state),
+ isPending: selectUserInviteNewIsPending(state),
+});
+
+export default connect(select)(InviteSummary);
diff --git a/ui/js/component/inviteSummary/view.jsx b/ui/js/component/inviteSummary/view.jsx
new file mode 100644
index 000000000..dceddf148
--- /dev/null
+++ b/ui/js/component/inviteSummary/view.jsx
@@ -0,0 +1,36 @@
+import React from "react";
+import Link from "component/link";
+import { CreditAmount, BusyMessage } from "component/common";
+
+const InviteSummary = props => {
+ const { isPending, invitesRemaining } = props;
+
+ console.log(invitesRemaining);
+ return (
+
+
+
{__("Invites")}
+
+
+ {isPending && }
+ {!isPending &&
+
+ {__n(
+ "You have %d invite remaining.",
+ "You have %d invites remaining.",
+ invitesRemaining
+ )}
+