- ${renderNumericInput('^d+(?:.d{1,2})?$', 'amount', 'Amount', 'required', false)}
- ${renderInput('text', 'description', 'Description', 'required')}
- ${renderInput('date', 'startDate', 'Start date', 'required')}
- ${renderInput('checkbox', 'hasEnd', 'Existing End Date', '', false, 'change:subscription-create#onCheck')}
- ${renderInput(
- 'date',
- 'endDate',
- 'End date',
- 'required|is_after[field(startDate)]',
- !(this.hasEndCheck?.inp as HTMLInputElement)?.checked
- )}
- ${renderDropdown(
- 'subscription-create#getWallets',
- 'wallet',
- 'Wallet',
- 'required',
- this.walletData && this.walletData.walletId
- )}
- ${renderDropdown('subscription-create#getTypes', 'transactionType', 'Transaction Type', 'required')}
- ${renderInput('number', 'customRange', 'Every', 'required')}
- ${renderDropdown('subscription-create#getSubs', 'subscriptionType', 'Subscription Type', 'required')}
- ${this.errorMessage ? html`
${this.errorMessage}
` : html``}`;
- };
-
- render = (): TemplateResult => {
- return html`
-
-
- `;
- };
+ render = (): TemplateResult => SubscriptionCreateElementTemplate();
}
export type { SubscriptionCreateElement };
diff --git a/src/pages/subscription-create/SubscriptionCreateElementTemplate.ts b/src/pages/subscription-create/SubscriptionCreateElementTemplate.ts
new file mode 100644
index 0000000..a2ca269
--- /dev/null
+++ b/src/pages/subscription-create/SubscriptionCreateElementTemplate.ts
@@ -0,0 +1,11 @@
+import { html, TemplateResult } from 'core/utils';
+
+export default (): TemplateResult => html`
+
+
+`;
diff --git a/src/pages/subscription-create/SubscriptionCreateFormTemplate.ts b/src/pages/subscription-create/SubscriptionCreateFormTemplate.ts
new file mode 100644
index 0000000..b78fe46
--- /dev/null
+++ b/src/pages/subscription-create/SubscriptionCreateFormTemplate.ts
@@ -0,0 +1,65 @@
+import { html, nothing, TemplateResult } from 'core/utils';
+
+export default (props): TemplateResult => {
+ const { hasEndCheck, walletData, errorMessage } = props;
+ const renderInput = (type, name, label, rules, hide?, customAction?) => {
+ if (hide) {
+ return null;
+ }
+ return html`
`;
+ };
+
+ const renderNumericInput = (pattern, name, label, rules, hide?, customAction?) => {
+ if (hide) {
+ return nothing;
+ }
+ return html`
`;
+ };
+
+ const renderDropdown = (fetch, name, label, rules, hide?) => {
+ if (hide) {
+ return nothing;
+ }
+ return html`
`;
+ };
+ return html`
+
+ ${renderNumericInput('^d+(?:.d{1,2})?$', 'amount', 'Amount', 'required', false)}
+ ${renderInput('text', 'description', 'Description', 'required')}
+ ${renderInput('date', 'startDate', 'Start date', 'required')}
+ ${renderInput('checkbox', 'hasEnd', 'Existing End Date', '', false, 'change:subscription-create#onCheck')}
+ ${renderInput(
+ 'date',
+ 'endDate',
+ 'End date',
+ 'required|is_after[field(startDate)]',
+ !(hasEndCheck?.inp as HTMLInputElement)?.checked
+ )}
+ ${renderDropdown('subscription-create#getWallets', 'wallet', 'Wallet', 'required', walletData && walletData.walletId)}
+ ${renderDropdown('subscription-create#getTypes', 'transactionType', 'Transaction Type', 'required')}
+ ${renderInput('number', 'customRange', 'Every', 'required')}
+ ${renderDropdown('subscription-create#getSubs', 'subscriptionType', 'Subscription Type', 'required')}
+ ${errorMessage ? html`
${errorMessage}
` : nothing}`;
+};
diff --git a/src/pages/subscription-create/index.ts b/src/pages/subscription-create/index.ts
new file mode 100644
index 0000000..120f20e
--- /dev/null
+++ b/src/pages/subscription-create/index.ts
@@ -0,0 +1,3 @@
+export { default as SubscriptionCreateFormTemplate } from './SubscriptionCreateFormTemplate';
+export { default as SubscriptionCreateElementTemplate } from './SubscriptionCreateElementTemplate';
+export * from './SubscriptionCreateElement';
diff --git a/src/pages/subscription-edit/SubscriptionEditElement.ts b/src/pages/subscription-edit/SubscriptionEditElement.ts
index bc9aeb9..32be940 100644
--- a/src/pages/subscription-edit/SubscriptionEditElement.ts
+++ b/src/pages/subscription-edit/SubscriptionEditElement.ts
@@ -1,5 +1,4 @@
-import { targets, controller, target } from '@github/catalyst';
-import { html, TemplateResult } from 'core/utils';
+import { html, TemplateResult, targets, controller, target } from 'core/utils';
import {
AuthService,
SubscriptionService,
@@ -12,9 +11,10 @@ import { BasePageElement } from 'common/';
import { AppDropdownElement } from 'components/app-dropdown/AppDropdownElement';
import dayjs from 'dayjs';
import utc from 'dayjs/plugin/utc';
+import { SubscriptionEditElementTemplate, SubscriptionEditFormTemplate } from 'pages/subscription-edit';
dayjs.extend(utc);
-@controller
+@controller('subscription-edit')
class SubscriptionEditElement extends BasePageElement {
@targets inputs: Array
;
@target appForm: AppFormElement;
@@ -86,7 +86,7 @@ class SubscriptionEditElement extends BasePageElement {
getSubscription = async (id) => {
try {
const response = await this.subscriptionService.get(id, {
- embed: 'Wallet'
+ embed: 'Wallet',
});
const wallet = this.appForm.getInput('wallet');
if (wallet) {
@@ -95,10 +95,8 @@ class SubscriptionEditElement extends BasePageElement {
response.wallet = response.walletId;
response.endDate = dayjs(response.endDate).format('YYYY-MM-DD');
this.appForm.set(response);
- } catch (err) {
-
- }
- }
+ } catch (err) {}
+ };
getWallets = async (options): Promise => {
try {
@@ -127,12 +125,7 @@ class SubscriptionEditElement extends BasePageElement {
return;
}
- const {
- description: description,
- wallet: walletId,
- amount,
- endDate,
- } = values;
+ const { description: description, wallet: walletId, amount, endDate } = values;
const endDateFormat = dayjs(endDate).utc(true).format();
@@ -181,80 +174,14 @@ class SubscriptionEditElement extends BasePageElement {
this.appForm.update();
};
- renderForms = () => {
- const renderInput = (type, name, label, rules, hide?, customAction?) => {
- return html``;
- };
+ renderForms = () =>
+ SubscriptionEditFormTemplate({
+ hasEndCheck: this.hasEndCheck,
+ walletData: this.walletData,
+ errorMessage: this.errorMessage,
+ });
- const renderNumericInput = (pattern, name, label, rules, hide?, customAction?) => {
- if (hide) {
- return html``;
- }
- return html``;
- };
-
- const renderDropdown = (fetch, name, label, rules, hide?) => {
- if (hide) {
- return html``;
- }
- return html``;
- };
- return html`
-
- ${renderNumericInput('^d+(?:.d{1,2})?$', 'amount', 'Amount', 'required', false)}
- ${renderInput('text', 'description', 'Description', 'required')}
- ${renderInput('checkbox', 'hasEnd', 'Existing End Date', '', false, 'change:subscription-edit#onCheck')}
- ${renderInput(
- 'date',
- 'endDate',
- 'End date',
- 'required',
- !(this.hasEndCheck?.inp as HTMLInputElement)?.checked
- )}
- ${renderDropdown(
- 'subscription-edit#getWallets',
- 'wallet',
- 'Wallet',
- 'required',
- this.walletData && this.walletData.walletId
- )}
- ${this.errorMessage ? html`
${this.errorMessage}
` : html``}`;
- };
-
- render = (): TemplateResult => {
- return html`
-
-
- `;
- };
+ render = (): TemplateResult => SubscriptionEditElementTemplate();
}
export type { SubscriptionEditElement };
diff --git a/src/pages/subscription-edit/SubscriptionEditElementTemplate.ts b/src/pages/subscription-edit/SubscriptionEditElementTemplate.ts
new file mode 100644
index 0000000..e63c5bf
--- /dev/null
+++ b/src/pages/subscription-edit/SubscriptionEditElementTemplate.ts
@@ -0,0 +1,11 @@
+import { html, TemplateResult } from 'core/utils';
+
+export default (): TemplateResult => html`
+
+
+`;
diff --git a/src/pages/subscription-edit/SubscriptionEditFormTemplate.ts b/src/pages/subscription-edit/SubscriptionEditFormTemplate.ts
new file mode 100644
index 0000000..38be71a
--- /dev/null
+++ b/src/pages/subscription-edit/SubscriptionEditFormTemplate.ts
@@ -0,0 +1,53 @@
+import { html, nothing, TemplateResult } from 'core/utils';
+
+export default (props): TemplateResult => {
+ const { hasEndCheck, walletData, errorMessage } = props;
+ const renderInput = (type, name, label, rules, hide?, customAction?) => {
+ return html`
`;
+ };
+
+ const renderNumericInput = (pattern, name, label, rules, hide?, customAction?) => {
+ if (hide) {
+ return nothing;
+ }
+ return html`
`;
+ };
+
+ const renderDropdown = (fetch, name, label, rules, hide?) => {
+ if (hide) {
+ return nothing;
+ }
+ return html`
`;
+ };
+ return html`
+
+ ${renderNumericInput('^d+(?:.d{1,2})?$', 'amount', 'Amount', 'required', false)}
+ ${renderInput('text', 'description', 'Description', 'required')}
+ ${renderInput('checkbox', 'hasEnd', 'Existing End Date', '', false, 'change:subscription-edit#onCheck')}
+ ${renderInput('date', 'endDate', 'End date', 'required', !(hasEndCheck?.inp as HTMLInputElement)?.checked)}
+ ${renderDropdown('subscription-edit#getWallets', 'wallet', 'Wallet', 'required', walletData && walletData.walletId)}
+ ${errorMessage ? html`
${errorMessage}
` : nothing}`;
+};
diff --git a/src/pages/subscription-edit/index.ts b/src/pages/subscription-edit/index.ts
new file mode 100644
index 0000000..5ff0879
--- /dev/null
+++ b/src/pages/subscription-edit/index.ts
@@ -0,0 +1,3 @@
+export { default as SubscriptionEditFormTemplate } from './SubscriptionEditFormTemplate';
+export { default as SubscriptionEditElementTemplate } from './SubscriptionEditElementTemplate';
+export * from './SubscriptionEditElement';
diff --git a/src/pages/subscription-list/SubscriptionListElement.ts b/src/pages/subscription-list/SubscriptionListElement.ts
index 655d17f..ecae49c 100644
--- a/src/pages/subscription-list/SubscriptionListElement.ts
+++ b/src/pages/subscription-list/SubscriptionListElement.ts
@@ -1,11 +1,11 @@
-import { controller, target } from '@github/catalyst';
-import { html, TemplateResult } from 'core/utils';
+import { html, TemplateResult, controller, target } from 'core/utils';
import { SubscriptionService } from 'services/';
import { AppMainElement, AppPaginationElement } from 'components/';
import { BasePageElement } from 'common/';
import dayjs from 'dayjs';
+import { SubscriptionListElementTemplate } from 'pages/subscription-list';
-@controller
+@controller('subscription-list')
class SubscriptionListElement extends BasePageElement {
private subscriptionService: SubscriptionService;
@target pagination: AppPaginationElement;
@@ -39,17 +39,17 @@ class SubscriptionListElement extends BasePageElement {
this.appMain.closeModal();
} else {
this.appMain.createModal('subscription-edit', {
- id: id
+ id: id,
});
}
- }
+ };
subscriptionEnd = async (id) => {
if (confirm('Are you sure you want to end this subscription?')) {
await this.subscriptionService.endSubscription(id);
this.appMain.triggerTransactionUpdate();
}
- }
+ };
renderSubscription = (item) => html`
| ${dayjs(item.lastTransactionDate).format("MMM DD 'YY")} |
@@ -68,12 +68,20 @@ class SubscriptionListElement extends BasePageElement {
(${item.currency ? item.currency : 'USD'})
- ${item.hasEnd ? html`` : html`
-
-
-
- | `
- }
+ ${item.hasEnd
+ ? html``
+ : html`
+
+
+ | `}
`;
getSubscriptions = async (options): Promise
=> {
@@ -113,21 +121,8 @@ class SubscriptionListElement extends BasePageElement {
}
};
- render = (): TemplateResult => {
- const renderWallet = () => {
- if (this.routerService?.routerState?.data?.walletId) {
- return html`${this.routerService?.routerState?.data?.walletId}`;
- }
- return html``;
- };
- return html``;
- };
+ render = (): TemplateResult =>
+ SubscriptionListElementTemplate({ walletId: this.routerService?.routerState?.data?.walletId });
}
export type { SubscriptionListElement };
diff --git a/src/pages/subscription-list/SubscriptionListElementTemplate.ts b/src/pages/subscription-list/SubscriptionListElementTemplate.ts
new file mode 100644
index 0000000..2cd6d25
--- /dev/null
+++ b/src/pages/subscription-list/SubscriptionListElementTemplate.ts
@@ -0,0 +1,15 @@
+import { html, nothing, TemplateResult } from 'core/utils';
+
+export default (props): TemplateResult => {
+ const { walletId } = props;
+ const renderWallet = () => {
+ if (walletId) {
+ return html`${walletId}`;
+ }
+ return nothing;
+ };
+ return html``;
+};
diff --git a/src/pages/subscription-list/index.ts b/src/pages/subscription-list/index.ts
new file mode 100644
index 0000000..fd6f63b
--- /dev/null
+++ b/src/pages/subscription-list/index.ts
@@ -0,0 +1,2 @@
+export { default as SubscriptionListElementTemplate } from './SubscriptionListElementTemplate';
+export * from './SubscriptionListElement';
diff --git a/src/pages/transaction-create/TransactionCreateElement.ts b/src/pages/transaction-create/TransactionCreateElement.ts
index 75d77bc..8b34d76 100644
--- a/src/pages/transaction-create/TransactionCreateElement.ts
+++ b/src/pages/transaction-create/TransactionCreateElement.ts
@@ -1,15 +1,14 @@
-import { targets, controller, target } from '@github/catalyst';
-import { html, TemplateResult } from 'core/utils';
+import { TemplateResult, targets, controller, target } from 'core/utils';
import { AuthService, TransactionsService, TransactionTypeService, WalletService } from 'services/';
import { AppFormElement, InputFieldElement } from 'components/';
-import { RouterService } from 'core/services';
import { BasePageElement } from 'common/';
import { AppDropdownElement } from 'components/app-dropdown/AppDropdownElement';
import dayjs from 'dayjs';
import utc from 'dayjs/plugin/utc';
+import { TransactionCreateElementTemplate } from 'pages/transaction-create';
dayjs.extend(utc);
-@controller
+@controller('transaction-create')
class TransactionCreateElement extends BasePageElement {
@targets inputs: Array;
@target appForm: AppFormElement;
@@ -138,76 +137,8 @@ class TransactionCreateElement extends BasePageElement {
return _return;
}
- render = (): TemplateResult => {
- const renderInput = (type, name, label, rules, hide?, customAction?) => {
- if (hide) {
- return html``;
- }
- return html``;
- };
-
- const renderNumericInput = (pattern, name, label, rules, hide?, customAction?) => {
- if (hide) {
- return html``;
- }
- return html``;
- };
-
- const renderDropdown = (fetch, name, label, rules, hide?) => {
- if (hide) {
- return html``;
- }
- return html``;
- };
-
- return html`
-
- ${renderNumericInput('^d+(?:.d{1,2})?$', 'amount', 'Amount', 'required', false)}
- ${renderInput('text', 'description', 'Description', 'required')}
- ${renderInput('date', 'transactionDate', 'Transaction date', 'required')}
- ${renderDropdown(
- 'transaction-create#getWallets',
- 'wallet',
- 'Wallet',
- 'required',
- this.walletData && this.walletData.walletId
- )}
- ${renderDropdown(
- 'transaction-create#getTypes',
- 'transactionType',
- 'Transaction Type',
- 'required',
- this.walletData && this.walletData.walletId
- )}
- ${this.errorMessage ? html`${this.errorMessage}
` : html``}
-
- `;
- };
+ render = (): TemplateResult =>
+ TransactionCreateElementTemplate({ errorMessage: this.errorMessage, walletData: this.walletData });
}
export type { TransactionCreateElement };
diff --git a/src/pages/transaction-create/TransactionCreateElementTemplate.ts b/src/pages/transaction-create/TransactionCreateElementTemplate.ts
new file mode 100644
index 0000000..232b73c
--- /dev/null
+++ b/src/pages/transaction-create/TransactionCreateElementTemplate.ts
@@ -0,0 +1,69 @@
+import { html, nothing, TemplateResult } from 'core/utils';
+
+export default (props): TemplateResult => {
+ const { errorMessage, walletData } = props;
+ const renderInput = (type, name, label, rules, hide?, customAction?) => {
+ if (hide) {
+ return nothing;
+ }
+ return html``;
+ };
+
+ const renderNumericInput = (pattern, name, label, rules, hide?, customAction?) => {
+ if (hide) {
+ return nothing;
+ }
+ return html``;
+ };
+
+ const renderDropdown = (fetch, name, label, rules, hide?) => {
+ if (hide) {
+ return nothing;
+ }
+ return html``;
+ };
+
+ return html`
+
+ ${renderNumericInput('^d+(?:.d{1,2})?$', 'amount', 'Amount', 'required', false)}
+ ${renderInput('text', 'description', 'Description', 'required')}
+ ${renderInput('date', 'transactionDate', 'Transaction date', 'required')}
+ ${renderDropdown(
+ 'transaction-create#getWallets',
+ 'wallet',
+ 'Wallet',
+ 'required',
+ walletData && walletData.walletId
+ )}
+ ${renderDropdown(
+ 'transaction-create#getTypes',
+ 'transactionType',
+ 'Transaction Type',
+ 'required',
+ walletData && walletData.walletId
+ )}
+ ${errorMessage ? html`${errorMessage}
` : nothing}
+
+ `;
+};
diff --git a/src/pages/transaction-create/index.ts b/src/pages/transaction-create/index.ts
new file mode 100644
index 0000000..979e396
--- /dev/null
+++ b/src/pages/transaction-create/index.ts
@@ -0,0 +1,2 @@
+export { default as TransactionCreateElementTemplate } from './TransactionCreateElementTemplate';
+export * from './TransactionCreateElement';
diff --git a/src/pages/transaction-edit/TransactionEditElement.ts b/src/pages/transaction-edit/TransactionEditElement.ts
index e48769c..fa71c09 100644
--- a/src/pages/transaction-edit/TransactionEditElement.ts
+++ b/src/pages/transaction-edit/TransactionEditElement.ts
@@ -1,14 +1,14 @@
-import { targets, controller, target } from '@github/catalyst';
-import { html, TemplateResult } from 'core/utils';
+import { TemplateResult, targets, controller, target } from 'core/utils';
import { AuthService, TransactionsService, TransactionTypeService, WalletService } from 'services/';
import { AppFormElement, InputFieldElement } from 'components/';
import { BasePageElement } from 'common/';
import { AppDropdownElement } from 'components/app-dropdown/AppDropdownElement';
import dayjs from 'dayjs';
import utc from 'dayjs/plugin/utc';
+import { TransactionEditElementTemplate } from 'pages/transaction-edit';
dayjs.extend(utc);
-@controller
+@controller('transaction-edit')
class TransactionEditElement extends BasePageElement {
@targets inputs: Array;
@target appForm: AppFormElement;
@@ -31,7 +31,7 @@ class TransactionEditElement extends BasePageElement {
this.authService = new AuthService(this.appMain.appService);
this.walletData = this.getData();
this.update();
- this.getTransaction(this.walletData?.id)
+ this.getTransaction(this.walletData?.id);
if (this.walletData && this.walletData.walletId) {
this.setTransactionType();
} else {
@@ -42,7 +42,7 @@ class TransactionEditElement extends BasePageElement {
getTransaction = async (id) => {
try {
const response = await this.transactionService.get(id, {
- embed: 'Wallet,TransactionType'
+ embed: 'Wallet,TransactionType',
});
const wallet = this.appForm.getInput('wallet');
if (wallet) {
@@ -56,10 +56,8 @@ class TransactionEditElement extends BasePageElement {
response.transactionType = response.transactionTypeId;
response.transactionDate = dayjs(response.transactionDate).format('YYYY-MM-DD');
this.appForm.set(response);
- } catch (err) {
-
- }
- }
+ } catch (err) {}
+ };
get nameInput(): InputFieldElement | AppDropdownElement {
for (const i in this.inputs) {
@@ -159,76 +157,8 @@ class TransactionEditElement extends BasePageElement {
return _return;
}
- render = (): TemplateResult => {
- const renderInput = (type, name, label, rules, hide?, customAction?) => {
- if (hide) {
- return html``;
- }
- return html``;
- };
-
- const renderNumericInput = (pattern, name, label, rules, hide?, customAction?) => {
- if (hide) {
- return html``;
- }
- return html``;
- };
-
- const renderDropdown = (fetch, name, label, rules, hide?) => {
- if (hide) {
- return html``;
- }
- return html``;
- };
-
- return html`
-
- ${renderNumericInput('^d+(?:.d{1,2})?$', 'amount', 'Amount', 'required', false)}
- ${renderInput('text', 'description', 'Description', 'required')}
- ${renderInput('date', 'transactionDate', 'Transaction date', 'required')}
- ${renderDropdown(
- 'transaction-edit#getWallets',
- 'wallet',
- 'Wallet',
- 'required',
- this.walletData && this.walletData.walletId
- )}
- ${renderDropdown(
- 'transaction-edit#getTypes',
- 'transactionType',
- 'Transaction Type',
- 'required',
- this.walletData && this.walletData.walletId
- )}
- ${this.errorMessage ? html`${this.errorMessage}
` : html``}
-
- `;
- };
+ render = (): TemplateResult =>
+ TransactionEditElementTemplate({ errorMessage: this.errorMessage, walletData: this.walletData });
}
export type { TransactionEditElement };
diff --git a/src/pages/transaction-edit/TransactionEditElementTemplate.ts b/src/pages/transaction-edit/TransactionEditElementTemplate.ts
new file mode 100644
index 0000000..4727f51
--- /dev/null
+++ b/src/pages/transaction-edit/TransactionEditElementTemplate.ts
@@ -0,0 +1,69 @@
+import { html, nothing, TemplateResult } from 'core/utils';
+
+export default (props): TemplateResult => {
+ const { errorMessage, walletData } = props;
+ const renderInput = (type, name, label, rules, hide?, customAction?) => {
+ if (hide) {
+ return nothing;
+ }
+ return html``;
+ };
+
+ const renderNumericInput = (pattern, name, label, rules, hide?, customAction?) => {
+ if (hide) {
+ return nothing;
+ }
+ return html``;
+ };
+
+ const renderDropdown = (fetch, name, label, rules, hide?) => {
+ if (hide) {
+ return nothing;
+ }
+ return html``;
+ };
+
+ return html`
+
+ ${renderNumericInput('^d+(?:.d{1,2})?$', 'amount', 'Amount', 'required', false)}
+ ${renderInput('text', 'description', 'Description', 'required')}
+ ${renderInput('date', 'transactionDate', 'Transaction date', 'required')}
+ ${renderDropdown(
+ 'transaction-edit#getWallets',
+ 'wallet',
+ 'Wallet',
+ 'required',
+ walletData && walletData.walletId
+ )}
+ ${renderDropdown(
+ 'transaction-edit#getTypes',
+ 'transactionType',
+ 'Transaction Type',
+ 'required',
+ walletData && walletData.walletId
+ )}
+ ${errorMessage ? html`${errorMessage}
` : nothing}
+
+ `;
+};
diff --git a/src/pages/transaction-edit/index.ts b/src/pages/transaction-edit/index.ts
new file mode 100644
index 0000000..e5db937
--- /dev/null
+++ b/src/pages/transaction-edit/index.ts
@@ -0,0 +1,2 @@
+export { default as TransactionEditElementTemplate } from './TransactionEditElementTemplate';
+export * from './TransactionEditElement';
diff --git a/src/pages/wallet-create/WalletCreateElement.ts b/src/pages/wallet-create/WalletCreateElement.ts
index 4071651..5143a92 100644
--- a/src/pages/wallet-create/WalletCreateElement.ts
+++ b/src/pages/wallet-create/WalletCreateElement.ts
@@ -1,11 +1,10 @@
-import { targets, controller } from '@github/catalyst';
-import { html, TemplateResult } from 'core/utils';
+import { html, TemplateResult, targets, controller } from 'core/utils';
import { AuthService, WalletService } from 'services/';
import { InputFieldElement } from 'components/';
-import { RouterService } from 'core/services';
import { BasePageElement } from 'common/';
+import { WalletCreateElementTemplate } from 'pages/wallet-create';
-@controller
+@controller('wallet-create')
class WalletCreateElement extends BasePageElement {
@targets inputs: Array;
private walletService: WalletService;
@@ -68,20 +67,7 @@ class WalletCreateElement extends BasePageElement {
return _return;
}
- render = (): TemplateResult => {
- return html`
-
-
- ${this.errorMessage ? html`${this.errorMessage}
` : html``}
-
- `;
- };
+ render = (): TemplateResult => WalletCreateElementTemplate({ errorMessage: this.errorMessage });
}
export type { WalletCreateElement };
diff --git a/src/pages/wallet-create/WalletCreateElementTemplate.ts b/src/pages/wallet-create/WalletCreateElementTemplate.ts
new file mode 100644
index 0000000..9186d56
--- /dev/null
+++ b/src/pages/wallet-create/WalletCreateElementTemplate.ts
@@ -0,0 +1,14 @@
+import { html, TemplateResult } from 'core/utils';
+
+export default ({ errorMessage }): TemplateResult => html`
+
+
+ ${errorMessage ? html`${errorMessage}
` : html``}
+
+`;
diff --git a/src/pages/wallet-create/index.ts b/src/pages/wallet-create/index.ts
new file mode 100644
index 0000000..3859229
--- /dev/null
+++ b/src/pages/wallet-create/index.ts
@@ -0,0 +1,2 @@
+export { default as WalletCreateElementTemplate } from './WalletCreateElementTemplate';
+export * from './WalletCreateElement';
diff --git a/src/pages/wallet-edit/WalletEditElement.ts b/src/pages/wallet-edit/WalletEditElement.ts
index d94946f..4984815 100644
--- a/src/pages/wallet-edit/WalletEditElement.ts
+++ b/src/pages/wallet-edit/WalletEditElement.ts
@@ -1,10 +1,10 @@
-import { targets, controller, target } from '@github/catalyst';
-import { html, TemplateResult } from 'core/utils';
+import { TemplateResult, targets, controller, target } from 'core/utils';
import { AuthService, WalletService } from 'services/';
-import { AppDropdownElement, AppFormElement, InputFieldElement } from 'components/';
+import { AppFormElement, InputFieldElement } from 'components/';
import { BasePageElement } from 'common/';
+import { WalletEditElementTemplate } from 'pages/wallet-edit';
-@controller
+@controller('wallet-edit')
class WalletEditElement extends BasePageElement {
@targets inputs: Array;
@target appForm: AppFormElement;
@@ -22,17 +22,15 @@ class WalletEditElement extends BasePageElement {
this.authService = new AuthService(this.appMain.appService);
this.walletData = this.getData();
this.update();
- this.getWallet(this.walletData?.id)
+ this.getWallet(this.walletData?.id);
};
getWallet = async (id) => {
try {
const response = await this.walletService.get(id, null);
this.appForm.set(response);
- } catch (err) {
-
- }
- }
+ } catch (err) {}
+ };
get nameInput(): InputFieldElement {
for (const i in this.inputs) {
@@ -78,21 +76,7 @@ class WalletEditElement extends BasePageElement {
return _return;
}
- render = (): TemplateResult => {
- return html`
-
-
- ${this.errorMessage ? html`${this.errorMessage}
` : html``}
-
- `;
- };
+ render = (): TemplateResult => WalletEditElementTemplate({ errorMessage: this.errorMessage });
}
export type { WalletEditElement };
diff --git a/src/pages/wallet-edit/WalletEditElementTemplate.ts b/src/pages/wallet-edit/WalletEditElementTemplate.ts
new file mode 100644
index 0000000..cdd3107
--- /dev/null
+++ b/src/pages/wallet-edit/WalletEditElementTemplate.ts
@@ -0,0 +1,14 @@
+import { html, TemplateResult } from 'core/utils';
+
+export default ({ errorMessage }): TemplateResult => html`
+
+
+ ${errorMessage ? html`${errorMessage}
` : html``}
+
+`;
diff --git a/src/pages/wallet-edit/index.ts b/src/pages/wallet-edit/index.ts
new file mode 100644
index 0000000..bb2f1e7
--- /dev/null
+++ b/src/pages/wallet-edit/index.ts
@@ -0,0 +1,2 @@
+export { default as WalletEditElementTemplate } from './WalletEditElementTemplate';
+export * from './WalletEditElement';
diff --git a/src/pages/wallet-list/WalletListElement.ts b/src/pages/wallet-list/WalletListElement.ts
index b03ab6b..a626944 100644
--- a/src/pages/wallet-list/WalletListElement.ts
+++ b/src/pages/wallet-list/WalletListElement.ts
@@ -1,10 +1,10 @@
-import { targets, controller, target } from '@github/catalyst';
-import { html, TemplateResult } from 'core/utils';
+import { html, TemplateResult, targets, controller, target } from 'core/utils';
import { AuthService, WalletService } from 'services/';
import { AppMainElement, AppPaginationElement, InputFieldElement } from 'components/';
import { BasePageElement } from 'common/';
+import { WalletListElementTemplate } from 'pages/wallet-list';
-@controller
+@controller('wallet-list')
class WalletListElement extends BasePageElement {
@targets inputs: Array;
private walletService: WalletService;
@@ -27,11 +27,11 @@ class WalletListElement extends BasePageElement {
elementDisconnected = (appMain: AppMainElement) => {
appMain?.removeEventListener('walletupdate', this.updateToken);
- }
+ };
get updateToken() {
return this.pagination?.defaultFetch;
- }
+ }
getWallets = async (options): Promise => {
try {
@@ -48,21 +48,21 @@ class WalletListElement extends BasePageElement {
this.appMain.closeModal();
} else {
this.appMain.createModal('wallet-edit', {
- id: id
+ id: id,
});
}
- }
-
- renderItem = (item): TemplateResult => html`
- |
-
-
- |
-
`;
-
- render = (): TemplateResult => {
- return html` `;
};
+
+ renderItem = (item): TemplateResult => WalletListItemTemplate({ item, walletEdit: this.walletEdit });
+
+ render = (): TemplateResult => WalletListElementTemplate();
}
export type { WalletListElement };
+
+const WalletListItemTemplate = ({ item, walletEdit }): TemplateResult => html`
+ |
+
+
+ |
+
`;
diff --git a/src/pages/wallet-list/WalletListElementTemplate.ts b/src/pages/wallet-list/WalletListElementTemplate.ts
new file mode 100644
index 0000000..d51d615
--- /dev/null
+++ b/src/pages/wallet-list/WalletListElementTemplate.ts
@@ -0,0 +1,3 @@
+import { html, TemplateResult } from 'core/utils';
+
+export default (): TemplateResult => html``;
diff --git a/src/pages/wallet-list/index.ts b/src/pages/wallet-list/index.ts
new file mode 100644
index 0000000..efd0eb3
--- /dev/null
+++ b/src/pages/wallet-list/index.ts
@@ -0,0 +1,2 @@
+export { default as WalletListElementTemplate } from './WalletListElementTemplate';
+export * from './WalletListElement';
diff --git a/src/pages/wallet-page/WalletPageElement.ts b/src/pages/wallet-page/WalletPageElement.ts
index efd6ee8..bf17dd4 100644
--- a/src/pages/wallet-page/WalletPageElement.ts
+++ b/src/pages/wallet-page/WalletPageElement.ts
@@ -1,11 +1,11 @@
-import { controller, target } from '@github/catalyst';
-import { html, TemplateResult } from 'core/utils';
+import { html, TemplateResult, controller, target } from 'core/utils';
import { SubscriptionService, TransactionsService, WalletService } from 'services/';
import { AppMainElement, AppPaginationElement, WalletHeaderElement } from 'components/';
import { BasePageElement } from 'common/';
import dayjs from 'dayjs';
+import { WalletPageElementTemplate } from 'pages/wallet-page';
-@controller
+@controller('wallet-page')
class WalletPageElement extends BasePageElement {
private transactionsService: TransactionsService;
private subscriptionService: SubscriptionService;
@@ -17,18 +17,18 @@ class WalletPageElement extends BasePageElement {
walletTitle: string;
constructor() {
super({
- title: 'Wallet'
+ title: 'Wallet',
});
}
- get pageTitle(){
+ get pageTitle() {
if (this.walletTitle) {
- return `Wallet - ${this.walletTitle}`
+ return `Wallet - ${this.walletTitle}`;
}
- return 'Wallet'
+ return 'Wallet';
}
- elementConnected = async(): Promise => {
+ elementConnected = async (): Promise => {
this.walletService = new WalletService(this.appMain?.appService);
this.transactionsService = new TransactionsService(this.appMain?.appService);
this.subscriptionService = new SubscriptionService(this.appMain?.appService);
@@ -77,7 +77,7 @@ class WalletPageElement extends BasePageElement {
}
};
- getWallet = async() => {
+ getWallet = async () => {
try {
const id = this.walletId;
const response = await this.walletService.get(id, null);
@@ -86,7 +86,7 @@ class WalletPageElement extends BasePageElement {
throw err;
}
this.update();
- }
+ };
subscriptionEdit = (id) => {
const _modal = this.appMain.appModal;
@@ -94,42 +94,24 @@ class WalletPageElement extends BasePageElement {
this.appMain.closeModal();
} else {
this.appMain.createModal('subscription-edit', {
- id: id
+ id: id,
});
}
- }
+ };
subscriptionEnd = async (id) => {
if (confirm('Are you sure you want to end this subscription?')) {
await this.subscriptionService.endSubscription(id);
this.appMain.triggerTransactionUpdate();
}
- }
+ };
- renderSubscription = (item) => html`
- | ${dayjs(item.lastTransactionDate).format("MMM DD 'YY")} |
- every ${item.customRange} ${item.rangeName} |
- ${item.description} |
- ${dayjs(item.nextTransaction).format("MMM DD 'YY")} |
-
-
- ${item?.transactionType?.type == 'expense' ? '- ' : ''}
- ${Number(item.amount).toLocaleString('en-US', {
- maximumFractionDigits: 2,
- minimumFractionDigits: 2,
- })}
-
- (${item.currency ? item.currency : 'USD'})
- |
- ${item.hasEnd ? html`` : html`
-
-
-
- | `
- }
-
`;
+ renderSubscription = (item) =>
+ WalletPageSubscriptionTemplate({
+ item,
+ subscriptionEnd: this.subscriptionEnd,
+ subscriptionEdit: this.subscriptionEdit,
+ });
getSubscriptions = async (options): Promise => {
try {
@@ -221,49 +203,45 @@ class WalletPageElement extends BasePageElement {
});
}
};
-
+
walletEdit = () => {
const _modal = this.appMain.appModal;
if (_modal) {
this.appMain.closeModal();
} else {
this.appMain.createModal('wallet-edit', {
- id: this.routerService?.routerState?.data?.walletId
+ id: this.routerService?.routerState?.data?.walletId,
});
}
- }
-
- render = (): TemplateResult => {
- const renderHeader = () => html``;
-
- const renderWallet = () => {
- if (this.routerService?.routerState?.data?.walletId) {
- return html``;
- }
- return html``;
- };
- return html`
- ${renderHeader()} ${renderWallet()}
-
Transactions
-
-
Subscriptions
-
-
`;
};
+
+ render = (): TemplateResult =>
+ WalletPageElementTemplate({ walletId: this.routerService?.routerState?.data?.walletId });
}
+const WalletPageSubscriptionTemplate = ({ item, subscriptionEdit, subscriptionEnd }): TemplateResult => html`
+ | ${dayjs(item.lastTransactionDate).format("MMM DD 'YY")} |
+ every ${item.customRange} ${item.rangeName} |
+ ${item.description} |
+ ${dayjs(item.nextTransaction).format("MMM DD 'YY")} |
+
+
+ ${item?.transactionType?.type == 'expense' ? '- ' : ''}
+ ${Number(item.amount).toLocaleString('en-US', {
+ maximumFractionDigits: 2,
+ minimumFractionDigits: 2,
+ })}
+
+ (${item.currency ? item.currency : 'USD'})
+ |
+ ${item.hasEnd
+ ? html``
+ : html`
+
+
+ | `}
+
`;
+
export type { WalletPageElement };
diff --git a/src/pages/wallet-page/WalletPageElementTemplate.ts b/src/pages/wallet-page/WalletPageElementTemplate.ts
new file mode 100644
index 0000000..bea2048
--- /dev/null
+++ b/src/pages/wallet-page/WalletPageElementTemplate.ts
@@ -0,0 +1,34 @@
+import { html, nothing, TemplateResult } from 'core/utils';
+
+export default (props): TemplateResult => {
+ const { walletId } = props;
+ const renderHeader = () => html``;
+
+ const renderWallet = () => {
+ if (walletId) {
+ return html``;
+ }
+ return nothing;
+ };
+ return html`
+ ${renderHeader()} ${renderWallet()}
+
Transactions
+
+
Subscriptions
+
+
`;
+};
diff --git a/src/pages/wallet-page/index.ts b/src/pages/wallet-page/index.ts
new file mode 100644
index 0000000..ab71400
--- /dev/null
+++ b/src/pages/wallet-page/index.ts
@@ -0,0 +1,2 @@
+export { default as WalletPageElementTemplate } from './WalletPageElementTemplate';
+export * from './WalletPageElement';
diff --git a/webpack.config.js b/webpack.config.js
index 9585c37..4bea3ff 100644
--- a/webpack.config.js
+++ b/webpack.config.js
@@ -1,6 +1,5 @@
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
-const TerserPlugin = require("terser-webpack-plugin");
const { DefinePlugin } = require('webpack');
const UglifyJsPlugin = require('uglifyjs-webpack-plugin');
@@ -57,10 +56,6 @@ module.exports = (env, args) => {
},
minimizer: [
new UglifyJsPlugin({
- uglifyOptions: {
- keep_classnames: true,
- keep_fnames: true,
- }
})
]
},
diff --git a/yarn-error.log b/yarn-error.log
index 8cf89df..f1afd5a 100644
--- a/yarn-error.log
+++ b/yarn-error.log
@@ -1,35 +1,25 @@
Arguments:
- C:\Program Files\nodejs\node.exe C:\Users\franj\AppData\Roaming\npm\node_modules\yarn\bin\yarn.js add lit
+ /home/yurma/.nvm/versions/node/v16.5.0/bin/node /home/yurma/.nvm/versions/node/v16.5.0/bin/yarn add -D webpack-cli
PATH:
- C:\Program Files\PowerShell\7;C:\Program Files (x86)\Razer Chroma SDK\bin;C:\Program Files\Razer Chroma SDK\bin;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Program Files\Git\cmd;C:\Users\franj\AppData\Local\Microsoft\WindowsApps;C:\Users\franj\AppData\Local\Programs\Microsoft VS Code\bin;C:\Users\franj\AppData\Roaming\npm;C:\Users\franj\go\bin;C:\Program Files\dotnet\;C:\Program Files\Microsoft SQL Server\130\Tools\Binn\;C:\Program Files\Microsoft SQL Server\Client SDK\ODBC\170\Tools\Binn\;C:\Users\franj\AppData\Roaming\nvm;C:\Program Files\nodejs;C:\ProgramData\chocolatey\bin;C:\Program Files\nu\bin\;C:\Program Files\PowerShell\7\;C:\Program Files\Amazon\AWSCLIV2\;C:\Python\Python39\Scripts\;C:\Python\Python39\;C:\Users\franj\scoop\shims;C:\Users\franj\.cargo\bin;C:\Users\f;C:\Program Files\Docker\Docker\resources\bin;C:\ProgramData\DockerDesktop\version-bin;C:\Program Files\Go\bin;C:\ProgramData\chocolatey\lib\Elixir/bin;C:\Python\Python39\Scripts\;C:\Python\Python39\;C:\Users\franj\scoop\shims;C:\Users\franj\.cargo\bin;C:\Users\franj\AppData\Local\Microsoft\WindowsApps;C:\Users\franj\AppData\Local\Programs\Microsoft VS Code\bin;C:\Users\franj\AppData\Roaming\npm;C:\Users\franj\go\bin;C:\Users\franj\.deno\bin;C:\Program Files\heroku\bin;C:\Users\franj\.dotnet\tools;C:\Program Files\PostgreSQL\10\bin;C:\Users\franj\AppData\Roaming\nvm;C:\Program Files\nodejs;E:\Programs\env;C:\Program Files\JetBrains\GoLand 2020.3.3\bin;C:\Users\franj\.dotnet\tools;C:\Program Files\mingw\mingw64\bin;C:\Users\franj\AppData\Local\Google\Cloud SDK\google-cloud-sdk\bin;C:\Users\franj\AppData\Local\GitHubDesktop\bin;C:\tools\neovim\Neovim\bin;C:\Users\franj\go\bin
+ /tmp/yarn--1627223235455-0.969165436334535:/mnt/hgfs/repos/gogs/Yurma/wallet-web/node_modules/.bin:/home/yurma/.config/yarn/link/node_modules/.bin:/home/yurma/.yarn/bin:/home/yurma/.nvm/versions/node/v16.5.0/libexec/lib/node_modules/npm/bin/node-gyp-bin:/home/yurma/.nvm/versions/node/v16.5.0/lib/node_modules/npm/bin/node-gyp-bin:/home/yurma/.nvm/versions/node/v16.5.0/bin/node_modules/npm/bin/node-gyp-bin:/home/yurma/.nvm/versions/node/v16.5.0/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/snap/bin
Yarn version:
1.22.10
Node version:
- 16.2.0
+ 16.5.0
Platform:
- win32 x64
+ linux x64
Trace:
- Error: https://registry.yarnpkg.com/core/utils/-/core/utils-1.4.1.tgz: Request failed "404 Not Found"
- at ResponseError.ExtendableBuiltin (C:\Users\franj\AppData\Roaming\npm\node_modules\yarn\lib\cli.js:696:66)
- at new ResponseError (C:\Users\franj\AppData\Roaming\npm\node_modules\yarn\lib\cli.js:802:124)
- at Request. (C:\Users\franj\AppData\Roaming\npm\node_modules\yarn\lib\cli.js:67058:16)
- at Request.emit (node:events:365:28)
- at Request.module.exports.Request.onRequestResponse (C:\Users\franj\AppData\Roaming\npm\node_modules\yarn\lib\cli.js:141539:10)
- at ClientRequest.emit (node:events:365:28)
- at HTTPParser.parserOnIncomingClient (node:_http_client:621:27)
- at HTTPParser.parserOnHeadersComplete (node:_http_common:127:17)
- at TLSSocket.socketOnData (node:_http_client:487:22)
- at TLSSocket.emit (node:events:365:28)
+ Error: ENOTSUP: operation not supported on socket, symlink '../../../parser/bin/babel-parser.js' -> '/mnt/hgfs/repos/gogs/Yurma/wallet-web/node_modules/@babel/core/node_modules/.bin/parser'
npm manifest:
{
"name": "wallet-web",
- "version": "1.0.0",
+ "version": "0.0.73",
"main": "index.js",
"author": "Fran Jurmanović ",
"license": "MIT",
@@ -40,7 +30,8 @@ npm manifest:
},
"dependencies": {
"@github/catalyst": "^1.1.3",
- "core/utils": "^1.4.1",
+ "dayjs": "^1.10.5",
+ "lit-html": "^1.4.1",
"validator": "^13.6.0"
},
"devDependencies": {
@@ -2261,6 +2252,11 @@ Lockfile:
dependencies:
assert-plus "^1.0.0"
+ dayjs@^1.10.5:
+ version "1.10.5"
+ resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.10.5.tgz#5600df4548fc2453b3f163ebb2abbe965ccfb986"
+ integrity sha512-BUFis41ikLz+65iH6LHQCDm4YPMj5r1YFLdupPIyM4SGcXMmtiLQ7U37i+hGS8urIuqe7I/ou3IS1jVc4nbN4g==
+
debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.9:
version "2.6.9"
resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz"
@@ -4151,9 +4147,9 @@ Lockfile:
prelude-ls "^1.2.1"
type-check "~0.4.0"
- core/utils@^1.4.1:
+ lit-html@^1.4.1:
version "1.4.1"
- resolved "https://registry.yarnpkg.com/core/utils/-/core/utils-1.4.1.tgz#0c6f3ee4ad4eb610a49831787f0478ad8e9ae5e0"
+ resolved "https://registry.yarnpkg.com/lit-html/-/lit-html-1.4.1.tgz#0c6f3ee4ad4eb610a49831787f0478ad8e9ae5e0"
integrity sha512-B9btcSgPYb1q4oSOb/PrOT6Z/H+r6xuNzfH4lFli/AWhYwdtrgQkQWBbIc6mdnf6E2IL3gDXdkkqNktpU0OZQA==
load-json-file@^1.0.0: