Canceling Your Rotki Subscription
@@ -108,11 +115,6 @@ const css = useCssModule();
diff --git a/components/account/home/DangerZone.vue b/components/account/home/DangerZone.vue
index 0728c334..76cfb179 100644
--- a/components/account/home/DangerZone.vue
+++ b/components/account/home/DangerZone.vue
@@ -29,24 +29,22 @@ const deleteAccount = async () => {
}
};
-const css = useCssModule();
+const { t } = useI18n();
-
-
- Delete account
-
-
-
- Proceeding will completely delete your account data. If you proceed you
- will not be able to recover your account!
-
-
-
- You cannot delete your account while you have an active subscription.
-
-
+
+
+
+ {{ t('account.delete_account.title') }}
+
+
+ {{ t('account.delete_account.description') }}
+
+
+
+ {{ t('account.delete_account.unable_to_delete') }}
+
- Delete My Account
+ {{ t('account.delete_account.delete_my_account') }}
+
+
+ {{ t('account.delete_account.title') }}
+
+
+
+
+ {{ username }}
+
+
+
-
- Delete Account
-
- By proceeding you will delete your account and all its accompanying data
- from our servers. This action is not reversible. Are you sure you want
- to perform the deletion?
-
-
-
- Type your username to continue:
- {{ username }}
-
-
+
-
-
- Cancel
-
-
- Confirm
-
-
-
-
- Account deletion failed
- {{ error }}
-
-
+
+
+ {{ t('actions.cancel') }}}
+
+
+ {{ t('actions.confirm') }}}
+
+
+
+
+ Account deletion failed
+ {{ error }}
+
-
-
diff --git a/components/account/home/PaymentsTable.vue b/components/account/home/PaymentsTable.vue
index 10b61ea4..25b146fe 100644
--- a/components/account/home/PaymentsTable.vue
+++ b/components/account/home/PaymentsTable.vue
@@ -1,15 +1,36 @@
-
- Your latest payments
-
-
- {{ item.plan }}
-
-
-
- {{ item.paidAt }}
-
-
-
-
- {{ item.eurAmount }}
-
-
+
+
{{ t('account.payments.title') }}
+
+
+ {{ t('account.payments.paid') }}
+
-
- Paid
-
-
-
-
-
-
+
+
+ {{ t('actions.download') }}
+
+
+
+
-
-
diff --git a/components/account/home/PremiumPlaceholder.vue b/components/account/home/PremiumPlaceholder.vue
index e78dce67..cea8b3d1 100644
--- a/components/account/home/PremiumPlaceholder.vue
+++ b/components/account/home/PremiumPlaceholder.vue
@@ -1,42 +1,39 @@
-
-
-
-
-
-
-
Rotki Premium
-
- No premium subscription found. Select your
-
- premium subscription plan.
-
+
+
+
+
+
+
+
+
+ {{ t('account.no_premium.title') }}
+
+
+
+
+
+ {{ t('account.no_premium.plan') }}
+
+
+
+
-
-
+
+
-
-
diff --git a/components/account/home/SubscriptionTable.vue b/components/account/home/SubscriptionTable.vue
index b88b6796..91c2d96b 100644
--- a/components/account/home/SubscriptionTable.vue
+++ b/components/account/home/SubscriptionTable.vue
@@ -1,30 +1,48 @@
-
-
{{ t('account.subscriptions.title') }}
+
- Subscription History
-
-
- {{ item.planName }}
-
-
-
- {{ item.createdDate }}
-
-
-
-
- {{ item.nextActionDate }}
-
-
-
-
- {{ item.nextBillingAmount }}
-
-
-
-
+
+ {{ row.status }}
+
+
+
+
+
+
+
- {{ item.status }}
-
-
-
-
-
-
- Renew
-
-
- None
-
+ {{ t('actions.renew') }}
+
+
+
{{ t('common.none') }}
-
+
Cancellation Failure
@@ -175,47 +174,3 @@ const css = useCssModule();
-
-
diff --git a/components/account/signup/SignupAddress.vue b/components/account/signup/SignupAddress.vue
index 84aa7704..fa185b92 100644
--- a/components/account/signup/SignupAddress.vue
+++ b/components/account/signup/SignupAddress.vue
@@ -168,25 +168,15 @@ const { t } = useI18n();
@update:model-value="updateValue('postcode', $event)"
@blur="v$.postcode.$touch()"
/>
-
-
- {{ t('country_select.no_data') }}
-
-
+ :hint="t('auth.common.required')"
+ @update:model-value="updateValue('country', $event)"
+ />
{
set(copied, true);
start();
};
-
-const css = useCssModule();
-
+
-
-
-
+
+
+
-
- Copied to clipboard
- Copy to clipboard
-
+ {{ copied ? 'Copied to clipboard' : 'Copy to clipboard' }}
+
-
-
diff --git a/components/common/DataTable.vue b/components/common/DataTable.vue
deleted file mode 100644
index bbd0939a..00000000
--- a/components/common/DataTable.vue
+++ /dev/null
@@ -1,77 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
- {{ header.text }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/components/download/DownloadButton.vue b/components/download/DownloadButton.vue
index eae8e28e..b5fed092 100644
--- a/components/download/DownloadButton.vue
+++ b/components/download/DownloadButton.vue
@@ -11,7 +11,7 @@ const { t } = useI18n();
rounded
color="primary"
>
- {{ t('actions.download') }}
+ {{ t('actions.start_now_for_free') }}
diff --git a/components/icons/CopyIcon.vue b/components/icons/CopyIcon.vue
deleted file mode 100644
index 77d778ee..00000000
--- a/components/icons/CopyIcon.vue
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
-
diff --git a/components/plans/details/FreePlan.vue b/components/plans/details/FreePlan.vue
index 2afbe749..d6be49ad 100644
--- a/components/plans/details/FreePlan.vue
+++ b/components/plans/details/FreePlan.vue
@@ -4,7 +4,7 @@ const css = useCssModule();
-
+
{{ t('home.plans.details.free.title') }}
{{ t('home.plans.details.free.subtitle') }}
diff --git a/layouts/account.vue b/layouts/account.vue
new file mode 100644
index 00000000..84176b8e
--- /dev/null
+++ b/layouts/account.vue
@@ -0,0 +1,67 @@
+
+
+
+
+
+
+
+ {{ t('account.welcome') }} {{ username }}
+
+
+
+
+ Subscription
+
+
+
+ Account Details
+
+
+
+
+ Customer Information
+
+
+
Address
+
+
+
+
+
+
+
+
+
+
diff --git a/locales/en.json b/locales/en.json
index 39ea7113..9f6125d9 100644
--- a/locales/en.json
+++ b/locales/en.json
@@ -121,24 +121,88 @@
}
},
"account": {
+ "address": {
+ "country": {
+ "hint": "Required. Email us at {email} if you need to change your billing country."
+ }
+ },
+ "api_keys": {
+ "title": "API Credentials",
+ "api_key": "API Key",
+ "api_secret": "API Secret"
+ },
"unverified_email": {
"message": "Your e-mail address has not been verified. Check your mailbox for the activation e-mail."
- }
+ },
+ "no_premium": {
+ "title": "Rotki Premium",
+ "no_premium_found": "No premium subscription found. Select your {plan}.",
+ "plan": "premium subscription plan"
+ },
+ "change_password": {
+ "title": "Change Password",
+ "current_password": {
+ "label": "Current Password",
+ "hint": "Enter your current account password. Only needed if you want to change password"
+ },
+ "new_password": {
+ "label": "New password"
+ }
+ },
+ "delete_account": {
+ "title": "Delete account",
+ "description": "Proceeding will completely delete your account data. If you proceed you will not be able to recover your account!",
+ "unable_to_delete": "You cannot delete your account while you have an active subscription.",
+ "delete_my_account": "Delete my account",
+ "confirmation": {
+ "description": "By proceeding you will delete your account and all its accompanying data from our servers. This action is not reversible. Are you sure you want to perform the deletion?\n\nType your username to continue: {username}"
+ }
+ },
+ "payments": {
+ "no_payments_found": "No payments found",
+ "paid": "Paid",
+ "headers": {
+ "paid_at": "Paid at",
+ "amount_in_symbol": "Amount in {symbol}"
+ },
+ "title": "Your latest payments"
+ },
+ "subscriptions": {
+ "headers": {
+ "created": "Created",
+ "next_billing": "Next Billing",
+ "cost_in_symbol_per_period": "Cost in {symbol} per period"
+ },
+ "no_subscriptions_found": "No subscriptions found",
+ "title": "Subscription History"
+ },
+ "welcome": "Welcome"
},
"actions": {
"apply": "Apply",
"back": "Back",
+ "cancel": "Cancel",
+ "confirm": "Confirm",
"continue": "Continue",
- "download": "Start now for free",
- "get_premium": "Get Premium",
- "get_premium_plan": "Get Premium Plan",
+ "download": "Download",
+ "generate": "Generate",
"get_advanced_plan": "Get Advanced Plan",
"get_in_touch": "Get In Touch Now",
+ "get_premium": "Get Premium",
+ "get_premium_plan": "Get Premium Plan",
"go_back_home": "Go back home",
- "submit": "Submit"
+ "regenerate": "Regenerate",
+ "renew": "Renew",
+ "start_now_for_free": "Start now for free",
+ "submit": "Submit",
+ "update": "Update"
},
"common": {
- "here": "here"
+ "here": "here",
+ "actions": "actions",
+ "status": "status",
+ "none": "none",
+ "plan": "plan"
},
"supported_defi": {
"title": "Dedicated DeFi support for",
diff --git a/modules/ui-library/runtime/plugin.ts b/modules/ui-library/runtime/plugin.ts
index c9528708..22e86807 100644
--- a/modules/ui-library/runtime/plugin.ts
+++ b/modules/ui-library/runtime/plugin.ts
@@ -1,4 +1,5 @@
import {
+ RiAccountCircleLine,
RiAppleLine,
RiArrowDropRightLine,
RiArrowLeftLine,
@@ -10,16 +11,21 @@ import {
RiDiscordLine,
RiDownloadCloud2Line,
RiExternalLinkLine,
+ RiFileCopyLine,
RiGithubLine,
RiHandCoinLine,
+ RiInformationLine,
RiLightbulbLine,
RiLogoutBoxRLine,
RiMailSendLine,
+ RiMapPinLine,
RiMenuLine,
RiMoneyDollarCircleLine,
+ RiRefreshLine,
RiTimer2Line,
RiTwitterXLine,
RiUserLocationLine,
+ RiVipCrownLine,
RiWindowsLine,
RuiPlugin,
} from '@rotki/ui-library';
@@ -52,6 +58,12 @@ export default defineNuxtPlugin((nuxtApp) => {
RiCalendarTodoLine,
RiHandCoinLine,
RiChatSmile2Line,
+ RiRefreshLine,
+ RiFileCopyLine,
+ RiVipCrownLine,
+ RiInformationLine,
+ RiAccountCircleLine,
+ RiMapPinLine,
],
});
});
diff --git a/package.json b/package.json
index 5e30bfe0..814d229a 100644
--- a/package.json
+++ b/package.json
@@ -52,7 +52,7 @@
"@nuxt/devtools": "0.8.0",
"@nuxtjs/i18n": "8.0.0-beta.12",
"@rotki/eslint-config": "1.1.1",
- "@rotki/ui-library": "0.3.0",
+ "@rotki/ui-library": "file:/Users/lukicenturi/Sites/ui-library",
"@types/braintree-web": "3.96.1",
"@types/paypal-checkout-components": "4.0.5",
"@types/qrcode": "1.5.1",
diff --git a/pages/home.vue b/pages/home.vue
deleted file mode 100644
index 239cd319..00000000
--- a/pages/home.vue
+++ /dev/null
@@ -1,31 +0,0 @@
-
-
-
-
-
-
-
diff --git a/pages/home/account-details.vue b/pages/home/account-details.vue
new file mode 100644
index 00000000..6e3b183b
--- /dev/null
+++ b/pages/home/account-details.vue
@@ -0,0 +1,14 @@
+
+
+
+
+
diff --git a/pages/home/address.vue b/pages/home/address.vue
new file mode 100644
index 00000000..e6a11367
--- /dev/null
+++ b/pages/home/address.vue
@@ -0,0 +1,10 @@
+
+
+
+
+
diff --git a/pages/home/customer-information.vue b/pages/home/customer-information.vue
new file mode 100644
index 00000000..35ea649b
--- /dev/null
+++ b/pages/home/customer-information.vue
@@ -0,0 +1,10 @@
+
+
+
+
+
diff --git a/pages/home/subscription.vue b/pages/home/subscription.vue
new file mode 100644
index 00000000..2a7fbc01
--- /dev/null
+++ b/pages/home/subscription.vue
@@ -0,0 +1,32 @@
+
+
+
+
+
diff --git a/plugins/redirect.ts b/plugins/redirect.ts
index d2249e58..4243f5be 100644
--- a/plugins/redirect.ts
+++ b/plugins/redirect.ts
@@ -6,5 +6,12 @@ export default defineNuxtPlugin(() => {
{ redirectCode: 301, replace: true },
);
}
+
+ if (to.path === '/home') {
+ return navigateTo(
+ { path: '/home/subscription' },
+ { redirectCode: 301, replace: true },
+ );
+ }
});
});
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 96554ebe..870913fe 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -86,8 +86,8 @@ devDependencies:
specifier: 1.1.1
version: 1.1.1(eslint@8.46.0)(vue@3.3.4)
'@rotki/ui-library':
- specifier: 0.3.0
- version: 0.3.0(@vueuse/core@10.3.0)(@vueuse/shared@10.3.0)(vue@3.3.4)
+ specifier: file:/Users/lukicenturi/Sites/ui-library
+ version: file:../ui-library(@vueuse/core@10.3.0)(@vueuse/shared@10.3.0)(vue@3.3.4)
'@types/braintree-web':
specifier: 3.96.1
version: 3.96.1
@@ -2308,19 +2308,6 @@ packages:
- vue
dev: true
- /@rotki/ui-library@0.3.0(@vueuse/core@10.3.0)(@vueuse/shared@10.3.0)(vue@3.3.4):
- resolution: {integrity: sha512-wXZpx3XXg90Q/M3R/7T2Agb1H5r+Nx+fuXyNXN58lvjSIrH+gchj25DyE22Rq4ohPcBAE9F/v9VKOz7Z/pXaqw==}
- engines: {pnpm: '>=8 <9'}
- peerDependencies:
- '@vueuse/core': '>10.0.0'
- '@vueuse/shared': '>10.0.0'
- vue: '>=3.3.4'
- dependencies:
- '@vueuse/core': 10.3.0(vue@3.3.4)
- '@vueuse/shared': 10.3.0(vue@3.3.4)
- vue: 3.3.4
- dev: true
-
/@sideway/address@4.1.4:
resolution: {integrity: sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==}
dependencies:
@@ -13067,3 +13054,18 @@ packages:
/zwitch@2.0.4:
resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==}
dev: true
+
+ file:../ui-library(@vueuse/core@10.3.0)(@vueuse/shared@10.3.0)(vue@3.3.4):
+ resolution: {directory: ../ui-library, type: directory}
+ id: file:../ui-library
+ name: '@rotki/ui-library'
+ engines: {pnpm: '>=8 <9'}
+ peerDependencies:
+ '@vueuse/core': '>10.0.0'
+ '@vueuse/shared': '>10.0.0'
+ vue: '>=3.3.4'
+ dependencies:
+ '@vueuse/core': 10.3.0(vue@3.3.4)
+ '@vueuse/shared': 10.3.0(vue@3.3.4)
+ vue: 3.3.4
+ dev: true
diff --git a/store/index.ts b/store/index.ts
index 2e95613c..e879eb1b 100644
--- a/store/index.ts
+++ b/store/index.ts
@@ -212,6 +212,14 @@ export const useMainStore = defineStore('main', () => {
const { stop, start } = useTimeoutFn(() => set(cancellationError, ''), 7000);
+ const subscriptions = computed(() => {
+ const userAccount = get(account);
+ if (!userAccount) {
+ return [];
+ }
+ return userAccount.subscriptions;
+ });
+
const cancelSubscription = async (subscription: Subscription) => {
const acc = get(account);
assert(acc);
@@ -519,6 +527,7 @@ export const useMainStore = defineStore('main', () => {
account,
plans,
cancellationError,
+ subscriptions,
login,
getAccount,
changePassword,
diff --git a/tailwind.config.cjs b/tailwind.config.cjs
index 8795061e..8f04e026 100644
--- a/tailwind.config.cjs
+++ b/tailwind.config.cjs
@@ -1,4 +1,6 @@
module.exports = {
+ mode: 'jit',
+ darkMode: 'class',
content: [
'./components/**/*.{vue,js,ts}',
'./layouts/**/*.vue',
diff --git a/types/common.ts b/types/common.ts
index ef04e2e9..316be0c1 100644
--- a/types/common.ts
+++ b/types/common.ts
@@ -1,13 +1,6 @@
import { type Ref } from 'vue';
import { type ApiError } from '~/types/index';
-export type DataTableHeader = {
- readonly text: string;
- readonly value: string;
- readonly className?: string;
- readonly sortable?: boolean;
-};
-
export type ActionResult = {
readonly success: boolean;
readonly message?: ApiError;