diff --git a/src/components/app-dropdown/AppDropdownElement.ts b/src/components/app-dropdown/AppDropdownElement.ts index fe79955..c1ff4b8 100644 --- a/src/components/app-dropdown/AppDropdownElement.ts +++ b/src/components/app-dropdown/AppDropdownElement.ts @@ -1,12 +1,10 @@ -import { attr, controller, target } from '@github/catalyst'; -import { closest, findMethod, firstUpper } from 'core/utils'; -import { html } from 'core/utils'; +import { closest, findMethod, attr, controller, target } from 'core/utils'; import randomId from 'core/utils/random-id'; -import { validatorErrors } from 'core/constants'; import { BaseComponentElement, Validator } from 'common/'; import { AppFormElement } from 'components/app-form/AppFormElement'; +import { AppDropdownElementTemplate } from 'components/app-dropdown'; -@controller +@controller('app-dropdown') class AppDropdownElement extends BaseComponentElement { @attr name: string; @attr label: string; @@ -82,7 +80,7 @@ class AppDropdownElement extends BaseComponentElement { } get required(): boolean { - return this.rules.includes('required'); + return this.rules?.includes('required'); } get _value() { @@ -191,67 +189,21 @@ class AppDropdownElement extends BaseComponentElement { setItemValue = (itemValue) => { this.itemValue = itemValue; this.update(); - } - - render = () => { - const { label, error, errorMessage, isOpen, searchPhrase, items, selectedItem, displaykey, valuekey } = this; - - const renderMessage = (label: string) => { - if (label) { - return html``; - } - return html``; - }; - - const renderError = (error: string) => { - if (error) { - return html`
${error}
`; - } - return html``; - }; - - const renderItem = (item) => { - return html` `; - }; - - const renderItems = (_items) => { - return _items?.map((item) => renderItem(item)); - }; - - return html` -
- ${renderMessage(this.label)} ${renderError(this.error)} - -
- `; }; + + render = () => + AppDropdownElementTemplate({ + label: this.label, + error: this.error, + randId: this.randId, + required: this.required, + isOpen: this.isOpen, + searchPhrase: this.searchPhrase, + items: this.items, + selectedItem: this.selectedItem, + displaykey: this.displaykey, + valuekey: this.valuekey, + }); } export type { AppDropdownElement }; diff --git a/src/components/app-dropdown/AppDropdownElementTemplate.ts b/src/components/app-dropdown/AppDropdownElementTemplate.ts new file mode 100644 index 0000000..d57e741 --- /dev/null +++ b/src/components/app-dropdown/AppDropdownElementTemplate.ts @@ -0,0 +1,61 @@ +import { html, nothing, TemplateResult } from 'core/utils'; + +export default (props): TemplateResult => { + const { label, error, randId, required, isOpen, searchPhrase, items, selectedItem, displaykey, valuekey } = props; + + const renderMessage = (label: string) => { + if (label) { + return html``; + } + return nothing; + }; + + const renderError = (error: string) => { + if (error) { + return html`
${error}
`; + } + return nothing; + }; + + const renderItem = (item) => { + return html` `; + }; + + const renderItems = (_items) => { + return _items?.map((item) => renderItem(item)); + }; + + return html` +
+ ${renderMessage(label)} ${renderError(error)} + +
+ `; +}; diff --git a/src/components/app-dropdown/index.ts b/src/components/app-dropdown/index.ts new file mode 100644 index 0000000..88ef28b --- /dev/null +++ b/src/components/app-dropdown/index.ts @@ -0,0 +1,2 @@ +export { default as AppDropdownElementTemplate } from './AppDropdownElementTemplate'; +export * from './AppDropdownElement'; diff --git a/src/components/app-form/AppFormElement.ts b/src/components/app-form/AppFormElement.ts index af7d956..18b9c9a 100644 --- a/src/components/app-form/AppFormElement.ts +++ b/src/components/app-form/AppFormElement.ts @@ -1,11 +1,11 @@ -import { attr, controller, target } from '@github/catalyst'; -import { html, TemplateResult } from 'core/utils'; +import { TemplateResult, attr, controller, target } from 'core/utils'; import { BaseComponentElement } from 'common/'; import { AppDropdownElement } from 'components/app-dropdown/AppDropdownElement'; import { InputFieldElement } from 'components/input-field/InputFieldElement'; -import { findMethod, isTrue, querys } from 'core/utils'; +import { findMethod, querys } from 'core/utils'; +import { AppFormElementTemplate } from 'components/app-form'; -@controller +@controller('app-form') class AppFormElement extends BaseComponentElement { @target formElement: HTMLElement; @target innerSlot: HTMLElement; @@ -85,18 +85,18 @@ class AppFormElement extends BaseComponentElement { set = (data): any => { for (let i = 0; i < this.inputField.length; i++) { const input = this.inputField[i]; - if(data?.[input.name]) { - input._value = data[input.name] - this.update() + if (data?.[input.name]) { + input._value = data[input.name]; + this.update(); } } this.appDropdown?.forEach((input: AppDropdownElement) => { - if(data?.[input.name]) { - input.setValue(data[input.name]) - this.update() + if (data?.[input.name]) { + input.setValue(data[input.name]); + this.update(); } }); - } + }; getInput = (name: string): InputFieldElement | AppDropdownElement => { let formObject; @@ -123,48 +123,14 @@ class AppFormElement extends BaseComponentElement { } }; - render = (): TemplateResult => { - const renderSubmit = (valid: boolean) => { - if (!valid) { - return html` - - `; - } - return html` `; - }; - const renderError = (error: string) => { - if (error) { - return html`${error}`; - } - return html``; - }; - const renderCancel = (hasCancel: boolean) => { - if (hasCancel) { - return html``; - } - return html``; - }; - - return html` -
-
- ${this.renderInput ? this.customRender() : html``} - ${renderError(this.error)} -
-
${renderSubmit(this.isValid)}${renderCancel(isTrue(this.hasCancel))}
-
-
-
- `; - }; + render = (): TemplateResult => + AppFormElementTemplate({ + renderInput: this.renderInput, + customRender: this.customRender, + error: this.error, + isValid: this.isValid, + hasCancel: this.hasCancel, + }); } export type { AppFormElement }; diff --git a/src/components/app-form/AppFormElementTemplate.ts b/src/components/app-form/AppFormElementTemplate.ts new file mode 100644 index 0000000..004fa0e --- /dev/null +++ b/src/components/app-form/AppFormElementTemplate.ts @@ -0,0 +1,44 @@ +import { html, isTrue, nothing, TemplateResult } from 'core/utils'; + +export default (props): TemplateResult => { + const { renderInput, customRender, error, isValid, hasCancel } = props; + const renderSubmit = (valid: boolean) => { + if (!valid) { + return html` + + `; + } + return html` `; + }; + const renderError = (error: string) => { + if (error) { + return html`${error}`; + } + return html``; + }; + const renderCancel = (hasCancel: boolean) => { + if (hasCancel) { + return html``; + } + return html``; + }; + + return html` +
+
+ ${renderInput ? customRender() : html``} ${renderError(error)} +
+
${renderSubmit(isValid)}${renderCancel(isTrue(hasCancel))}
+
+
+
+ `; +}; diff --git a/src/components/app-form/index.ts b/src/components/app-form/index.ts new file mode 100644 index 0000000..f8af45e --- /dev/null +++ b/src/components/app-form/index.ts @@ -0,0 +1,2 @@ +export { default as AppFormElementTemplate } from './AppFormElementTemplate'; +export * from './AppFormElement'; diff --git a/src/components/app-link/AppLinkElement.ts b/src/components/app-link/AppLinkElement.ts index 391ea54..51fecf5 100644 --- a/src/components/app-link/AppLinkElement.ts +++ b/src/components/app-link/AppLinkElement.ts @@ -1,11 +1,10 @@ -import { attr, controller, target } from '@github/catalyst'; import { isTrue } from 'core/utils'; -import { html, TemplateResult } from 'core/utils'; +import { TemplateResult, attr, controller, target } from 'core/utils'; import { AppMainElement } from 'components/app-main/AppMainElement'; -import { RouterService } from 'core/services'; import { BaseComponentElement } from 'common/'; +import { AppLinkElementTemplate } from 'components/app-link'; -@controller +@controller('app-link') class AppLinkElement extends BaseComponentElement { @attr to: string; @attr goBack: string; @@ -36,7 +35,7 @@ class AppLinkElement extends BaseComponentElement { }; attributeChangedCallback(changed) { - if(this.initialized && changed == 'data-title') { + if (this.initialized && changed == 'data-title') { this.update(); } } @@ -58,23 +57,14 @@ class AppLinkElement extends BaseComponentElement { return false; } - render = (): TemplateResult => { - return html`${this.disabled - ? html`${this.title}` - : html`${this.title}`}`; - }; + render = (): TemplateResult => + AppLinkElementTemplate({ + disabled: this.disabled, + className: this.classList, + title: this.title, + customAction: this.customAction, + to: this.to, + }); } export type { AppLinkElement }; diff --git a/src/components/app-link/AppLinkElementTemplate.ts b/src/components/app-link/AppLinkElementTemplate.ts new file mode 100644 index 0000000..b6c10f6 --- /dev/null +++ b/src/components/app-link/AppLinkElementTemplate.ts @@ -0,0 +1,18 @@ +import { html, TemplateResult } from 'core/utils'; + +export default ({ disabled, className, title, customAction, to }): TemplateResult => + html`${disabled + ? html`${title}` + : html`${title}`}`; diff --git a/src/components/app-link/index.ts b/src/components/app-link/index.ts new file mode 100644 index 0000000..a6f68d9 --- /dev/null +++ b/src/components/app-link/index.ts @@ -0,0 +1,2 @@ +export { default as AppLinkElementTemplate } from './AppLinkElementTemplate'; +export * from './AppLinkElement'; diff --git a/src/components/app-loader/AppLoaderElement.ts b/src/components/app-loader/AppLoaderElement.ts index 61a9cc4..0874d39 100644 --- a/src/components/app-loader/AppLoaderElement.ts +++ b/src/components/app-loader/AppLoaderElement.ts @@ -1,8 +1,8 @@ -import { controller, target } from '@github/catalyst'; -import { html } from 'core/utils'; +import { controller } from 'core/utils'; import { BaseComponentElement } from 'common/'; +import AppLoaderElementTemplate from './AppLoaderElementTemplate'; -@controller +@controller('app-loader') class AppLoaderElement extends BaseComponentElement { private finished: boolean = true; private _loading: number = 0; @@ -42,19 +42,7 @@ class AppLoaderElement extends BaseComponentElement { this.update(); }; - render = () => { - const renderLoader = (finished: boolean, loading: boolean) => { - if (!finished && !loading) { - return html`
`; - } else if (loading) { - return html`
`; - } - return html``; - }; - return html`
-
${renderLoader(this.finished, this.loading)}
-
`; - }; + render = () => AppLoaderElementTemplate({ finished: this.finished, loading: this.loading }); } export type { AppLoaderElement }; diff --git a/src/components/app-loader/AppLoaderElementTemplate.ts b/src/components/app-loader/AppLoaderElementTemplate.ts new file mode 100644 index 0000000..53cbaf7 --- /dev/null +++ b/src/components/app-loader/AppLoaderElementTemplate.ts @@ -0,0 +1,16 @@ +import { html, nothing, TemplateResult } from 'core/utils'; + +export default (props): TemplateResult => { + const { finished, loading } = props; + const renderLoader = (finished: boolean, loading: boolean) => { + if (!finished && !loading) { + return html`
`; + } else if (loading) { + return html`
`; + } + return nothing; + }; + return html`
+
${renderLoader(finished, loading)}
+
`; +}; diff --git a/src/components/app-loader/index.ts b/src/components/app-loader/index.ts new file mode 100644 index 0000000..2314ca3 --- /dev/null +++ b/src/components/app-loader/index.ts @@ -0,0 +1,2 @@ +export { default as AppLoaderElementTemplate } from './AppLoaderElementTemplate'; +export * from './AppLoaderElement'; diff --git a/src/components/app-main/AppMainElement.ts b/src/components/app-main/AppMainElement.ts index d667133..5628263 100644 --- a/src/components/app-main/AppMainElement.ts +++ b/src/components/app-main/AppMainElement.ts @@ -1,13 +1,12 @@ -import { controller, target } from '@github/catalyst'; import { AppService, HttpClient, RouterService } from 'core/services'; import { AuthStore } from 'core/store'; import { AppModalElement, AppRootElement } from 'components/'; -import { closest } from 'core/utils'; +import { closest, controller, target } from 'core/utils'; import { AppLoaderElement } from 'components/app-loader/AppLoaderElement'; import { ToastPortalElement } from 'components/toast-portal/ToastPortalElement'; import { BasePageElement } from 'common/'; -@controller +@controller('app-main') class AppMainElement extends HTMLElement { public routerService: RouterService; public authStore: AuthStore; diff --git a/src/components/app-main/index.ts b/src/components/app-main/index.ts new file mode 100644 index 0000000..fed8e42 --- /dev/null +++ b/src/components/app-main/index.ts @@ -0,0 +1 @@ +export * from './AppMainElement'; diff --git a/src/components/app-menu/AppMenuElement.ts b/src/components/app-menu/AppMenuElement.ts index 88ba2b4..61db752 100644 --- a/src/components/app-menu/AppMenuElement.ts +++ b/src/components/app-menu/AppMenuElement.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 { BaseComponentElement } from 'common/'; import { AppMainElement } from 'components/app-main/AppMainElement'; import { MenuItemElement } from 'components/menu-item/MenuItemElement'; import { WalletService } from 'services/'; +import AppMenuElementTemplate from './AppMenuElementTemplate'; -@controller +@controller('app-menu') class AppMenuElement extends BaseComponentElement { private walletService: WalletService; private walletData: Array; @@ -96,61 +96,8 @@ class AppMenuElement extends BaseComponentElement { } }; - render = (): TemplateResult => { - const { isAuth, totalWallets, walletData } = this; - - const regularMenu = (path: string, title: string, action?: string, className?: string): TemplateResult => { - if (action) { - return html` - - `; - } - return html``; - }; - const menuButton = (title: string, action?: string): TemplateResult => { - return html` `; - }; - const authMenu = (path: string, title: string, action?: string, className?: string): TemplateResult => { - if (isAuth) { - return regularMenu(path, title, action, className); - } - return html``; - }; - const notAuthMenu = (path: string, title: string, action?: string): TemplateResult => { - if (!isAuth) { - return regularMenu(path, title, action); - } - return html``; - }; - const renderWallets = (wallets: Array) => { - if (isAuth && totalWallets > 0) { - return html` - ${wallets.map((wallet) => regularMenu(`/wallet/${wallet.id}`, wallet.name, '', '--wallet'))}`; - } - return html``; - }; - const menuHeader = (title) => - html``; - - return html` -
-
- ${menuHeader(__CONFIG__.appName)} ${regularMenu('/', 'Home')} - ${authMenu('/history', 'Transaction History', 'click:app-menu#modalTransaction')} - ${authMenu('/subscriptions', 'Subscriptions', 'click:app-menu#modalSubscription')} - ${authMenu('/wallet/all', 'My Wallets', 'click:app-menu#modalWallet')} ${renderWallets(walletData)} - - ${authMenu('/logout', 'Logout', '', '--logout')} ${notAuthMenu('/login', 'Login')} - ${notAuthMenu('/register', 'Register')} -
- -
- `; - }; + render = (): TemplateResult => + AppMenuElementTemplate({ isAuth: this.isAuth, totalWallets: this.totalWallets, walletData: this.walletData }); } export type { AppMenuElement }; diff --git a/src/components/app-menu/AppMenuElementTemplate.ts b/src/components/app-menu/AppMenuElementTemplate.ts new file mode 100644 index 0000000..42f6dae --- /dev/null +++ b/src/components/app-menu/AppMenuElementTemplate.ts @@ -0,0 +1,61 @@ +import { html, nothing, TemplateResult } from 'core/utils'; + +export default (props): TemplateResult => { + const { isAuth, totalWallets, walletData } = props; + + const regularMenu = (path: string, title: string, action?: string, className?: string): TemplateResult => { + if (action) { + return html` + + `; + } + return html``; + }; + const menuButton = (title: string, action?: string): TemplateResult => { + return html` `; + }; + const authMenu = (path: string, title: string, action?: string, className?: string): TemplateResult => { + if (isAuth) { + return regularMenu(path, title, action, className); + } + return html``; + }; + const notAuthMenu = (path: string, title: string, action?: string): TemplateResult => { + if (!isAuth) { + return regularMenu(path, title, action); + } + return html``; + }; + const renderWallets = (wallets: Array) => { + if (isAuth && totalWallets > 0) { + return html` + ${wallets.map((wallet) => regularMenu(`/wallet/${wallet.id}`, wallet.name, '', '--wallet'))}`; + } + return nothing; + }; + const menuHeader = (title) => html``; + + return html` +
+
+ ${menuHeader(__CONFIG__.appName)} ${regularMenu('/', 'Home')} + ${authMenu('/history', 'Transaction History', 'click:app-menu#modalTransaction')} + ${authMenu('/subscriptions', 'Subscriptions', 'click:app-menu#modalSubscription')} + ${authMenu('/wallet/all', 'My Wallets', 'click:app-menu#modalWallet')} ${renderWallets(walletData)} + + ${authMenu('/logout', 'Logout', '', '--logout')} ${notAuthMenu('/login', 'Login')} + ${notAuthMenu('/register', 'Register')} +
+ +
+ `; +}; diff --git a/src/components/app-menu/index.ts b/src/components/app-menu/index.ts new file mode 100644 index 0000000..55af923 --- /dev/null +++ b/src/components/app-menu/index.ts @@ -0,0 +1,2 @@ +export { default as AppMenuElementTemplate } from './AppMenuElementTemplate'; +export * from './AppMenuElement'; diff --git a/src/components/app-modal/AppModalElement.ts b/src/components/app-modal/AppModalElement.ts index 0a80dcd..75ccef9 100644 --- a/src/components/app-modal/AppModalElement.ts +++ b/src/components/app-modal/AppModalElement.ts @@ -1,7 +1,7 @@ -import { controller, target } from '@github/catalyst'; +import { controller, target } from 'core/utils'; import { BaseComponentElement } from 'common/'; -@controller +@controller('app-modal') class AppModalElement extends BaseComponentElement { @target modalElement: HTMLElement; @target modalContent: HTMLElement; diff --git a/src/components/app-modal/index.ts b/src/components/app-modal/index.ts new file mode 100644 index 0000000..0c18e63 --- /dev/null +++ b/src/components/app-modal/index.ts @@ -0,0 +1 @@ +export * from './AppModalElement'; diff --git a/src/components/app-pagination/AppPaginationElement.ts b/src/components/app-pagination/AppPaginationElement.ts index dad85be..4875b03 100644 --- a/src/components/app-pagination/AppPaginationElement.ts +++ b/src/components/app-pagination/AppPaginationElement.ts @@ -1,10 +1,8 @@ -import { attr, controller, target } from '@github/catalyst'; -import { html, TemplateResult } from 'core/utils'; +import { attr, controller, TemplateResult } from 'core/utils'; import { BaseComponentElement } from 'common/'; -import { CircleLoaderElement } from 'components/circle-loader/CircleLoaderElement'; -import dayjs from 'dayjs'; +import { AppPaginationElementTemplate } from 'components/app-pagination'; -@controller +@controller('app-pagination') class AppPaginationElement extends BaseComponentElement { public items: Array; @attr page: number; @@ -47,10 +45,10 @@ class AppPaginationElement extends BaseComponentElement { defaultFetch = () => { const options = { rpp: this.rpp || 10, - page: 1 - } + page: 1, + }; this.executeFetch(options); - } + }; setCustomRenderItems = (customRenderItems: () => TemplateResult) => { this.customRenderItems = customRenderItems; @@ -109,96 +107,25 @@ class AppPaginationElement extends BaseComponentElement { this.appMain.closeModal(); } else { this.appMain.createModal('transaction-edit', { - id: id + id: id, }); } - } - - render = (): TemplateResult => { - const { rpp, totalItems, page, items } = this; - - const renderItem = this.customRenderItem - ? this.customRenderItem - : (item, iter) => html` - ${dayjs(item.transactionDate).format("MMM DD 'YY")} - ${item.description} - - - ${item?.transactionType?.type == 'expense' ? '- ' : ''} - ${Number(item.amount).toLocaleString('en-US', { - maximumFractionDigits: 2, - minimumFractionDigits: 2, - })} - - (${item.currency ? item.currency : 'USD'}) - - - - - `; - - const renderItems = this.customRenderItems - ? this.customRenderItems - : () => { - if (this.loader && this.loader.loading && !this.initial) { - return html``; - } else { - if (items?.length > 0) { - return items?.map((item, iter) => renderItem(item, iter)); - } - return html` - No data - `; - } - }; - - const renderPagination = () => { - if (totalItems > items?.length) { - const pageRange = Math.ceil(totalItems / rpp); - return html` -
- (${items?.length}) / ${totalItems} Total Items - -
- `; - } - }; - - return html`
- - ${renderItems()} ${renderPagination()} -
- ${this.loader && this.loader.loading ? html`` : html``} -
`; }; + + render = (): TemplateResult => + AppPaginationElementTemplate({ + rpp: this.rpp, + totalItems: this.totalItems, + page: this.page, + items: this.items, + customRenderItem: this.customRenderItem, + colLayout: this.colLayout, + transactionEdit: this.transactionEdit, + customRenderItems: this.customRenderItems, + loader: this.loader, + initial: this.initial, + tableLayout: this.tableLayout, + }); } export type { AppPaginationElement }; diff --git a/src/components/app-pagination/AppPaginationElementTemplate.ts b/src/components/app-pagination/AppPaginationElementTemplate.ts new file mode 100644 index 0000000..4ded414 --- /dev/null +++ b/src/components/app-pagination/AppPaginationElementTemplate.ts @@ -0,0 +1,100 @@ +import { html, nothing, TemplateResult } from 'core/utils'; +import dayjs from 'dayjs'; + +export default (props): TemplateResult => { + const { + rpp, + totalItems, + page, + items, + customRenderItem, + colLayout, + transactionEdit, + customRenderItems, + loader, + initial, + tableLayout, + } = props; + + const renderItem = customRenderItem + ? customRenderItem + : (item, iter) => html` + ${dayjs(item.transactionDate).format("MMM DD 'YY")} + ${item.description} + + + ${item?.transactionType?.type == 'expense' ? '- ' : ''} + ${Number(item.amount).toLocaleString('en-US', { + maximumFractionDigits: 2, + minimumFractionDigits: 2, + })} + + (${item.currency ? item.currency : 'USD'}) + + + + + `; + + const renderItems = customRenderItems + ? customRenderItems + : () => { + if (loader && loader.loading && !initial) { + return nothing; + } else { + if (items?.length > 0) { + return items?.map((item, iter) => renderItem(item, iter)); + } + return html` + No data + `; + } + }; + + const renderPagination = () => { + if (totalItems > items?.length) { + const pageRange = Math.ceil(totalItems / rpp); + return html` +
+ (${items?.length}) / ${totalItems} Total Items + +
+ `; + } + }; + + return html`
+ + ${renderItems()} ${renderPagination()} +
+ ${loader && loader.loading ? html`` : nothing} +
`; +}; diff --git a/src/components/app-pagination/index.ts b/src/components/app-pagination/index.ts new file mode 100644 index 0000000..4b2b889 --- /dev/null +++ b/src/components/app-pagination/index.ts @@ -0,0 +1,2 @@ +export { default as AppPaginationElementTemplate } from './AppPaginationElementTemplate'; +export * from './AppPaginationElement'; diff --git a/src/components/app-root/AppRootElement.ts b/src/components/app-root/AppRootElement.ts index 017e92e..e218207 100644 --- a/src/components/app-root/AppRootElement.ts +++ b/src/components/app-root/AppRootElement.ts @@ -1,7 +1,7 @@ -import { controller, target } from '@github/catalyst'; +import { controller, target } from 'core/utils'; import { BaseComponentElement } from 'common/'; -@controller +@controller('app-root') class AppRootElement extends BaseComponentElement { @target rootElement: HTMLElement; constructor() { diff --git a/src/components/app-root/index.ts b/src/components/app-root/index.ts new file mode 100644 index 0000000..8c40b06 --- /dev/null +++ b/src/components/app-root/index.ts @@ -0,0 +1 @@ +export * from './AppRootElement'; diff --git a/src/components/app-shadow/AppShadowElement.ts b/src/components/app-shadow/AppShadowElement.ts index be90ee4..22b0eda 100644 --- a/src/components/app-shadow/AppShadowElement.ts +++ b/src/components/app-shadow/AppShadowElement.ts @@ -1,11 +1,10 @@ -import { controller } from '@github/catalyst'; -import { AppMainElement } from 'components/app-main/AppMainElement'; +import { controller } from 'core/utils'; import style from 'styles/main.scss'; (function () { const _shadow = new WeakMap(); - @controller + @controller('app-shadow') class AppShadowElement extends HTMLElement { constructor() { super(); @@ -15,7 +14,6 @@ import style from 'styles/main.scss'; connectedCallback() { const _root = _shadow.get(this); const _appMain = document.createElement('app-main'); - (_appMain as AppMainElement).shadow = _root; const _style = document.createElement('style'); _style.innerHTML = style; diff --git a/src/components/app-shadow/index.ts b/src/components/app-shadow/index.ts new file mode 100644 index 0000000..9182184 --- /dev/null +++ b/src/components/app-shadow/index.ts @@ -0,0 +1 @@ +export * from './AppShadowElement'; diff --git a/src/components/app-slot/AppSlotElement.ts b/src/components/app-slot/AppSlotElement.ts index 9fddecd..bbbcb7d 100644 --- a/src/components/app-slot/AppSlotElement.ts +++ b/src/components/app-slot/AppSlotElement.ts @@ -1,7 +1,7 @@ -import { controller, target } from '@github/catalyst'; +import { controller, target } from 'core/utils'; import { BaseComponentElement } from 'common/'; -@controller +@controller('app-slot') class AppSlotElement extends BaseComponentElement { @target slotElement: HTMLElement; constructor() { diff --git a/src/components/app-slot/index.ts b/src/components/app-slot/index.ts new file mode 100644 index 0000000..7d371ba --- /dev/null +++ b/src/components/app-slot/index.ts @@ -0,0 +1 @@ +export * from './AppSlotElement'; diff --git a/src/components/circle-loader/CircleLoaderElement.ts b/src/components/circle-loader/CircleLoaderElement.ts index 5d60e4d..9e2a229 100644 --- a/src/components/circle-loader/CircleLoaderElement.ts +++ b/src/components/circle-loader/CircleLoaderElement.ts @@ -1,8 +1,8 @@ -import { attr, controller } from '@github/catalyst'; -import { html } from 'core/utils'; +import { attr, controller, TemplateResult } from 'core/utils'; import { BaseComponentElement } from 'common/'; +import { CircleLoaderElementTemplate } from 'components/circle-loader'; -@controller +@controller('circle-loader') class CircleLoaderElement extends BaseComponentElement { @attr size: string; constructor() { @@ -13,9 +13,7 @@ class CircleLoaderElement extends BaseComponentElement { this.update(); }; - render = () => { - return html`
`; - }; + render = (): TemplateResult => CircleLoaderElementTemplate({ size: this.size }); } export type { CircleLoaderElement }; diff --git a/src/components/circle-loader/CircleLoaderElementTemplate.ts b/src/components/circle-loader/CircleLoaderElementTemplate.ts new file mode 100644 index 0000000..9ba1ab1 --- /dev/null +++ b/src/components/circle-loader/CircleLoaderElementTemplate.ts @@ -0,0 +1,3 @@ +import { html, TemplateResult } from 'core/utils'; + +export default ({ size }): TemplateResult => html`
`; diff --git a/src/components/circle-loader/index.ts b/src/components/circle-loader/index.ts new file mode 100644 index 0000000..56e1b98 --- /dev/null +++ b/src/components/circle-loader/index.ts @@ -0,0 +1,2 @@ +export { default as CircleLoaderElementTemplate } from './CircleLoaderElementTemplate'; +export * from './CircleLoaderElement'; diff --git a/src/components/index.ts b/src/components/index.ts index e901c54..9d3cf2f 100644 --- a/src/components/index.ts +++ b/src/components/index.ts @@ -1,18 +1,18 @@ -export * from './app-link/AppLinkElement'; -export * from './menu-item/MenuItemElement'; -export * from './app-pagination/AppPaginationElement'; -export * from './app-modal/AppModalElement'; -export * from './app-root/AppRootElement'; -export * from './app-slot/AppSlotElement'; -export * from './app-menu/AppMenuElement'; -export * from './input-field/InputFieldElement'; -export * from './app-dropdown/AppDropdownElement'; -export * from './app-loader/AppLoaderElement'; -export * from './circle-loader/CircleLoaderElement'; -export * from './app-form/AppFormElement'; -export * from './wallet-header/WalletHeaderElement'; -export * from './toast-portal/ToastPortalElement'; +export * from './app-link'; +export * from './menu-item'; +export * from './app-pagination'; +export * from './app-modal'; +export * from './app-root'; +export * from './app-slot'; +export * from './app-menu'; +export * from './input-field'; +export * from './app-dropdown'; +export * from './app-loader'; +export * from './circle-loader'; +export * from './app-form'; +export * from './wallet-header'; +export * from './toast-portal'; // LAST -export * from './app-main/AppMainElement'; -export * from './app-shadow/AppShadowElement'; +export * from './app-main'; +export * from './app-shadow'; diff --git a/src/components/input-field/InputFieldElement.ts b/src/components/input-field/InputFieldElement.ts index d970dd6..70ae9b4 100644 --- a/src/components/input-field/InputFieldElement.ts +++ b/src/components/input-field/InputFieldElement.ts @@ -1,13 +1,10 @@ -import { attr, controller, target } from '@github/catalyst'; -import { closest, firstUpper } from 'core/utils'; -import { html, TemplateResult } from 'core/utils'; +import { closest, attr, controller, target, html, TemplateResult } from 'core/utils'; import randomId from 'core/utils/random-id'; -import { validatorErrors } from 'core/constants'; import { BaseComponentElement, Validator } from 'common/'; import { AppFormElement } from 'components/app-form/AppFormElement'; -import { validator } from 'core/utils'; +import { InputFieldElementTemplate } from 'components/input-field'; -@controller +@controller('input-field') class InputFieldElement extends BaseComponentElement { @attr name: string; @attr type: string; @@ -34,7 +31,6 @@ class InputFieldElement extends BaseComponentElement { this.validator = new Validator(this, this.appForm, this.rules); this.randId = `${name}${randomId()}`; this.update(); - //this.validate(); }; attributeChangedCallback() { @@ -54,7 +50,7 @@ class InputFieldElement extends BaseComponentElement { } get required(): boolean { - return this.rules.includes('required'); + return this.rules?.includes('required'); } get _value() { @@ -63,16 +59,16 @@ class InputFieldElement extends BaseComponentElement { } return (this.inp as HTMLInputElement)?.value; } - + get _disabled() { - return this.disabled == "true" + return this.disabled == 'true'; } set _value(value) { if (this.type == 'checkbox') { - (this.inp as HTMLInputElement).checked = (value as boolean); + (this.inp as HTMLInputElement).checked = value as boolean; } else { - (this.inp as HTMLInputElement).value = (value as string); + (this.inp as HTMLInputElement).value = value as string; } } @@ -103,62 +99,20 @@ class InputFieldElement extends BaseComponentElement { if (!this.changed && e?.target?.value) { this.changed = true; } - //this.validate(); this.appForm?.inputChange(e); }; - render = (): TemplateResult => { - const renderMessage = (label: string) => { - if (this.label) { - return html``; - } - return html``; - }; - - const renderError = (error: string) => { - if (error) { - return html`
${error}
`; - } - return html``; - }; - - const renderInput = (type) => { - if (this.pattern) { - return html` `; - } - return html` `; - }; - - return html`
- ${renderMessage(this.label)}${renderError(this.error)} ${renderInput(this.type)} -
`; - }; + render = (): TemplateResult => + InputFieldElementTemplate({ + randId: this.randId, + required: this.required, + pattern: this.pattern, + _disabled: this._disabled, + customAction: this.customAction, + type: this.type, + error: this.error, + label: this.label, + }); } export type { InputFieldElement }; diff --git a/src/components/input-field/InputFieldElementTemplate.ts b/src/components/input-field/InputFieldElementTemplate.ts new file mode 100644 index 0000000..2a26a56 --- /dev/null +++ b/src/components/input-field/InputFieldElementTemplate.ts @@ -0,0 +1,55 @@ +import { html, nothing, TemplateResult } from 'core/utils'; + +export default (props): TemplateResult => { + const { randId, required, pattern, _disabled, customAction, type, error, label } = props; + const renderMessage = (label: string) => { + if (label) { + return html``; + } + return nothing; + }; + + const renderError = (error: string) => { + if (error) { + return html`
${error}
`; + } + return nothing; + }; + + const renderInput = (type) => { + if (pattern) { + return html` `; + } + return html` `; + }; + + return html`
+ ${renderMessage(label)}${renderError(error)} ${renderInput(type)} +
`; +}; diff --git a/src/components/input-field/index.ts b/src/components/input-field/index.ts new file mode 100644 index 0000000..38bc6fe --- /dev/null +++ b/src/components/input-field/index.ts @@ -0,0 +1,2 @@ +export { default as InputFieldElementTemplate } from './InputFieldElementTemplate'; +export * from './InputFieldElement'; diff --git a/src/components/menu-item/MenuItemElement.ts b/src/components/menu-item/MenuItemElement.ts index 177f8cc..113a9cb 100644 --- a/src/components/menu-item/MenuItemElement.ts +++ b/src/components/menu-item/MenuItemElement.ts @@ -1,11 +1,11 @@ -import { attr, controller, target } from '@github/catalyst'; -import { html, TemplateResult } from 'core/utils'; +import { TemplateResult, attr, controller, target } from 'core/utils'; import { AppMainElement } from 'components/app-main/AppMainElement'; import { BaseComponentElement } from 'common/'; import { deviceWidths } from 'core/constants'; import { MenuLayoutElement } from 'layouts/'; +import { MenuItemElementTemplate } from 'components/menu-item'; -@controller +@controller('menu-item') class MenuItemElement extends BaseComponentElement { @attr path: string; @attr title: string; @@ -32,7 +32,7 @@ class MenuItemElement extends BaseComponentElement { }; attributeChangedCallback(changed) { - if(this.initialized && changed == 'data-title') { + if (this.initialized && changed == 'data-title') { this.update(); } } @@ -47,17 +47,14 @@ class MenuItemElement extends BaseComponentElement { } }; - render = (): TemplateResult => { - return html` -
- - ${this.customaction - ? html`
+
` - : html``} -
- `; - }; + render = (): TemplateResult => + MenuItemElementTemplate({ + current: this.current, + className: this.className, + path: this.path, + title: this.title, + customaction: this.customaction, + }); } export type { MenuItemElement }; diff --git a/src/components/menu-item/MenuItemElementTemplate.ts b/src/components/menu-item/MenuItemElementTemplate.ts new file mode 100644 index 0000000..4751853 --- /dev/null +++ b/src/components/menu-item/MenuItemElementTemplate.ts @@ -0,0 +1,13 @@ +import { html, TemplateResult } from 'core/utils'; + +export default ({ current, className, path, title, customaction }): TemplateResult => html` +
+ + ${customaction ? html`
+
` : html``} +
+`; diff --git a/src/components/menu-item/index.ts b/src/components/menu-item/index.ts new file mode 100644 index 0000000..e29af00 --- /dev/null +++ b/src/components/menu-item/index.ts @@ -0,0 +1,2 @@ +export { default as MenuItemElementTemplate } from './MenuItemElementTemplate'; +export * from './MenuItemElement'; diff --git a/src/components/toast-portal/ToastPortalElement.ts b/src/components/toast-portal/ToastPortalElement.ts index b648156..8dfa37c 100644 --- a/src/components/toast-portal/ToastPortalElement.ts +++ b/src/components/toast-portal/ToastPortalElement.ts @@ -1,8 +1,8 @@ -import { controller, targets } from '@github/catalyst'; -import { delay, html, Timer } from 'core/utils'; +import { Timer, controller, targets } from 'core/utils'; import { BaseComponentElement } from 'common/'; +import { ToastPortalElementTemplate } from 'components/toast-portal'; -@controller +@controller('toast-portal') class ToastPortalElement extends BaseComponentElement { @targets toastElement: HTMLElement; toasts: Array = []; @@ -26,10 +26,6 @@ class ToastPortalElement extends BaseComponentElement { } }, 5000); } - // const interval = setInterval(() => { - // this.popToast(); - // clearInterval(interval); - // }, 5000); this.update(); }; @@ -41,30 +37,10 @@ class ToastPortalElement extends BaseComponentElement { this.update(); }; - render = () => { - const renderToast = (note: string, type: string) => { - const message = () => - html` -
- ${note} -
- `; - return html`${message()}`; - }; - - const renderToasts = (toasts: Array) => { - if (toasts) { - return html`
- ${toasts.map(({ type, message }, i) => (i < 3 ? renderToast(message, type) : html``))} -
`; - } - return html``; - }; - return html`
${renderToasts(this.toasts)}
`; - }; + render = () => ToastPortalElementTemplate({ toasts: this.toasts }); } -type Toast = { +export type Toast = { type: string; message: string; }; diff --git a/src/components/toast-portal/ToastPortalElementTemplate.ts b/src/components/toast-portal/ToastPortalElementTemplate.ts new file mode 100644 index 0000000..427e13e --- /dev/null +++ b/src/components/toast-portal/ToastPortalElementTemplate.ts @@ -0,0 +1,25 @@ +import { html, nothing, TemplateResult } from 'core/utils'; +import { Toast } from './'; + +export default (props): TemplateResult => { + const { toasts } = props; + const renderToast = (note: string, type: string) => { + const message = () => + html` +
+ ${note} +
+ `; + return html`${message()}`; + }; + + const renderToasts = (toasts: Array) => { + if (toasts) { + return html`
+ ${toasts.map(({ type, message }, i) => (i < 3 ? renderToast(message, type) : nothing))} +
`; + } + return nothing; + }; + return html`
${renderToasts(toasts)}
`; +}; diff --git a/src/components/toast-portal/index.ts b/src/components/toast-portal/index.ts new file mode 100644 index 0000000..33ccca4 --- /dev/null +++ b/src/components/toast-portal/index.ts @@ -0,0 +1,2 @@ +export { default as ToastPortalElementTemplate } from './ToastPortalElementTemplate'; +export * from './ToastPortalElement'; diff --git a/src/components/wallet-header/WalletHeaderElement.ts b/src/components/wallet-header/WalletHeaderElement.ts index 173311e..732a81c 100644 --- a/src/components/wallet-header/WalletHeaderElement.ts +++ b/src/components/wallet-header/WalletHeaderElement.ts @@ -1,10 +1,9 @@ -import { attr, controller, target } from '@github/catalyst'; -import { html, TemplateResult } from 'core/utils'; +import { TemplateResult, attr, controller } from 'core/utils'; import { BaseComponentElement } from 'common/'; -import { CircleLoaderElement } from 'components/circle-loader/CircleLoaderElement'; import { findMethod } from 'core/utils'; +import { WalletHeaderElementTemplate } from 'components/wallet-header'; -@controller +@controller('wallet-header') class WalletHeaderElement extends BaseComponentElement { @attr currentBalance: number; @attr lastMonth: number; @@ -44,31 +43,15 @@ class WalletHeaderElement extends BaseComponentElement { } }; - render = (): TemplateResult => { - const { currentBalance, currency, lastMonth, nextMonth } = this; - - const renderItem = (header, balance, currency) => html`
-
${header}
-
- ${Number(balance).toLocaleString('en-US', { maximumFractionDigits: 2, minimumFractionDigits: 2 })}(${currency}) -
-
`; - - const renderHeader = () => { - if (this.loader && this.loader.loading && !this.initial) { - return html``; - } - return html`${renderItem('Last Month', lastMonth, currency)}${renderItem( - 'Current Balance', - currentBalance, - currency - )}${renderItem('Next Month', nextMonth, currency)}`; - }; - - return html`
${renderHeader()}
`; - }; + render = (): TemplateResult => + WalletHeaderElementTemplate({ + currentBalance: this.currentBalance, + currency: this.currency, + lastMonth: this.lastMonth, + nextMonth: this.nextMonth, + loader: this.loader, + initial: this.initial, + }); } export type { WalletHeaderElement }; diff --git a/src/components/wallet-header/WalletHeaderElementTemplate.ts b/src/components/wallet-header/WalletHeaderElementTemplate.ts new file mode 100644 index 0000000..7b27327 --- /dev/null +++ b/src/components/wallet-header/WalletHeaderElementTemplate.ts @@ -0,0 +1,27 @@ +import { html, nothing, TemplateResult } from 'core/utils'; + +export default (props): TemplateResult => { + const { currentBalance, currency, lastMonth, nextMonth, loader, initial } = props; + + const renderItem = (header, balance, currency) => html`
+
${header}
+
+ ${Number(balance).toLocaleString('en-US', { maximumFractionDigits: 2, minimumFractionDigits: 2 })}(${currency}) +
+
`; + + const renderHeader = () => { + if (loader && loader.loading && !initial) { + return nothing; + } + return html`${renderItem('Last Month', lastMonth, currency)}${renderItem( + 'Current Balance', + currentBalance, + currency + )}${renderItem('Next Month', nextMonth, currency)}`; + }; + + return html`
${renderHeader()}
`; +}; diff --git a/src/components/wallet-header/index.ts b/src/components/wallet-header/index.ts new file mode 100644 index 0000000..2f70196 --- /dev/null +++ b/src/components/wallet-header/index.ts @@ -0,0 +1,2 @@ +export { default as WalletHeaderElementTemplate } from './WalletHeaderElementTemplate'; +export * from './WalletHeaderElement'; diff --git a/src/configs/production/app-settings.json b/src/configs/production/app-settings.json index e937518..8536b42 100644 --- a/src/configs/production/app-settings.json +++ b/src/configs/production/app-settings.json @@ -1,6 +1,6 @@ { - "apiUrl": "wallet-go-webapi.herokuapp.com", + "apiUrl": "api.jurmanovic.com/wallet", "apiVersion": "v1", "ssl": true, "appName": "Wallets" -} \ No newline at end of file +} diff --git a/src/core/utils/library.ts b/src/core/utils/library.ts index 78ddc9e..fdc696c 100644 --- a/src/core/utils/library.ts +++ b/src/core/utils/library.ts @@ -1,3 +1,44 @@ -import { attr, controller, target, targets} from '@github/catalyst'; +import { attr, target, targets, register } from '@github/catalyst'; +import { bind, bindShadow } from '@github/catalyst/lib/bind'; +import { autoShadowRoot } from '@github/catalyst/lib/auto-shadow-root'; +import { defineObservedAttributes, initializeAttrs } from '@github/catalyst/lib/attr'; -export { attr, controller, target, targets } \ No newline at end of file +import { CustomElement } from '@github/catalyst/lib/custom-element'; + +function controller(customElement: CustomElement | string): void | any { + if (typeof customElement == 'string') { + return function (classObject: CustomElement) { + const connect = classObject.prototype.connectedCallback; + classObject.prototype.connectedCallback = function (this: HTMLElement) { + this.toggleAttribute('data-catalyst', true); + autoShadowRoot(this); + initializeAttrs(this); + bind(this); + if (connect) connect.call(this); + if (this.shadowRoot) bindShadow(this.shadowRoot); + }; + defineObservedAttributes(classObject); + if (!window.customElements.get(customElement)) { + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + window[classObject.name] = classObject; + window.customElements.define(customElement, classObject); + } + }; + } else { + const classObject = customElement; + const connect = classObject.prototype.connectedCallback; + classObject.prototype.connectedCallback = function (this: HTMLElement) { + this.toggleAttribute('data-catalyst', true); + autoShadowRoot(this); + initializeAttrs(this); + bind(this); + if (connect) connect.call(this); + if (this.shadowRoot) bindShadow(this.shadowRoot); + }; + defineObservedAttributes(classObject); + register(classObject); + } +} + +export { attr, controller, target, targets }; diff --git a/src/core/utils/templating.ts b/src/core/utils/templating.ts index d7c10e5..0737dc7 100644 --- a/src/core/utils/templating.ts +++ b/src/core/utils/templating.ts @@ -1,3 +1,3 @@ -import { render, html, TemplateResult, directive, isPrimitive } from 'lit-html'; +import { render, html, TemplateResult, directive, isPrimitive, nothing } from 'lit-html'; -export { render, html, TemplateResult, directive, isPrimitive }; +export { render, html, TemplateResult, directive, isPrimitive, nothing }; diff --git a/src/layouts/index.ts b/src/layouts/index.ts index 586dbdd..020f027 100644 --- a/src/layouts/index.ts +++ b/src/layouts/index.ts @@ -1,2 +1,2 @@ -export * from './menu-layout/MenuLayoutElement'; -export * from './initial-layout/InitialLayoutElement'; +export * from './menu-layout'; +export * from './initial-layout'; diff --git a/src/layouts/initial-layout/InitialLayoutElement.ts b/src/layouts/initial-layout/InitialLayoutElement.ts index f58c9dd..54c3b1b 100644 --- a/src/layouts/initial-layout/InitialLayoutElement.ts +++ b/src/layouts/initial-layout/InitialLayoutElement.ts @@ -1,10 +1,9 @@ -import { controller, target } from '@github/catalyst'; -import { closest } from 'core/utils'; -import { html, TemplateResult } from 'core/utils'; +import { html, TemplateResult, controller, target, closest } from 'core/utils'; import { BaseLayoutElement } from 'common/layouts'; import { AppMainElement } from 'components/'; +import { InitialLayoutElementTemplate } from 'layouts/initial-layout'; -@controller +@controller('initial-layout') class InitialLayoutElement extends BaseLayoutElement { @closest appMain: AppMainElement; @target appPage: HTMLDivElement; @@ -19,13 +18,7 @@ class InitialLayoutElement extends BaseLayoutElement { elementDisconnected = (appMain: AppMainElement): void => {}; - render = (): TemplateResult => { - return html` -
- -
- `; - }; + render = (): TemplateResult => InitialLayoutElementTemplate(); } export type { InitialLayoutElement }; diff --git a/src/layouts/initial-layout/InitialLayoutElementTemplate.ts b/src/layouts/initial-layout/InitialLayoutElementTemplate.ts new file mode 100644 index 0000000..69132b4 --- /dev/null +++ b/src/layouts/initial-layout/InitialLayoutElementTemplate.ts @@ -0,0 +1,7 @@ +import { html, TemplateResult } from 'core/utils'; + +export default (): TemplateResult => html` +
+ +
+`; diff --git a/src/layouts/initial-layout/index.ts b/src/layouts/initial-layout/index.ts new file mode 100644 index 0000000..1eb4535 --- /dev/null +++ b/src/layouts/initial-layout/index.ts @@ -0,0 +1,2 @@ +export { default as InitialLayoutElementTemplate } from './InitialLayoutElementTemplate'; +export * from './InitialLayoutElement'; diff --git a/src/layouts/menu-layout/MenuLayoutElement.ts b/src/layouts/menu-layout/MenuLayoutElement.ts index acd7a7e..dc02e6f 100644 --- a/src/layouts/menu-layout/MenuLayoutElement.ts +++ b/src/layouts/menu-layout/MenuLayoutElement.ts @@ -1,10 +1,9 @@ -import { controller, target } from '@github/catalyst'; -import { closest } from 'core/utils'; -import { html, TemplateResult } from 'core/utils'; +import { TemplateResult, controller, target, closest } from 'core/utils'; import { BaseLayoutElement } from 'common/layouts'; import { AppMainElement } from 'components/'; +import { MenuLayoutElementTemplate } from 'layouts/menu-layout'; -@controller +@controller('menu-layout') class MenuLayoutElement extends BaseLayoutElement { @closest appMain: AppMainElement; @target appPage: HTMLDivElement; @@ -41,19 +40,7 @@ class MenuLayoutElement extends BaseLayoutElement { this.appPage.classList.toggle('--retracted'); }; - render = (): TemplateResult => { - const _isAuth = this.isAuth; - return html` -
- ${_isAuth - ? html`
` - : html``} -
- -
-
- `; - }; + render = (): TemplateResult => MenuLayoutElementTemplate({ isAuth: this.isAuth }); } export type { MenuLayoutElement }; diff --git a/src/layouts/menu-layout/MenuLayoutElementTemplate.ts b/src/layouts/menu-layout/MenuLayoutElementTemplate.ts new file mode 100644 index 0000000..029f93f --- /dev/null +++ b/src/layouts/menu-layout/MenuLayoutElementTemplate.ts @@ -0,0 +1,10 @@ +import { html, TemplateResult } from 'core/utils'; + +export default ({ isAuth }): TemplateResult => html` +
+ ${isAuth ? html`
` : html``} +
+ +
+
+`; diff --git a/src/layouts/menu-layout/index.ts b/src/layouts/menu-layout/index.ts new file mode 100644 index 0000000..78bad54 --- /dev/null +++ b/src/layouts/menu-layout/index.ts @@ -0,0 +1,2 @@ +export { default as MenuLayoutElementTemplate } from './MenuLayoutElementTemplate'; +export * from './MenuLayoutElement'; diff --git a/src/pages/history-page/HistoryPageElement.ts b/src/pages/history-page/HistoryPageElement.ts index 87cb812..7be7d33 100644 --- a/src/pages/history-page/HistoryPageElement.ts +++ b/src/pages/history-page/HistoryPageElement.ts @@ -1,10 +1,10 @@ -import { controller, target } from '@github/catalyst'; -import { html, TemplateResult } from 'core/utils'; +import { TemplateResult, controller, target } from 'core/utils'; import { TransactionsService } from 'services/'; import { AppMainElement, AppPaginationElement } from 'components/'; import { BasePageElement } from 'common/'; +import { HistoryPageElementTemplate } from 'pages/history-page'; -@controller +@controller('history-page') class HistoryPageElement extends BasePageElement { private transactionsService: TransactionsService; @target pagination: AppPaginationElement; @@ -48,18 +48,8 @@ class HistoryPageElement extends BasePageElement { } }; - render = (): TemplateResult => { - const renderWallet = () => { - if (this.routerService?.routerState?.data?.walletId) { - return html`${this.routerService?.routerState?.data?.walletId}`; - } - return html``; - }; - return html`
- ${renderWallet()} - -
`; - }; + render = (): TemplateResult => + HistoryPageElementTemplate({ walletId: this.routerService?.routerState?.data?.walletId }); } export type { HistoryPageElement }; diff --git a/src/pages/history-page/HistoryPageElementTemplate.ts b/src/pages/history-page/HistoryPageElementTemplate.ts new file mode 100644 index 0000000..17557d4 --- /dev/null +++ b/src/pages/history-page/HistoryPageElementTemplate.ts @@ -0,0 +1,16 @@ +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`
+ ${renderWallet()} + +
`; +}; diff --git a/src/pages/history-page/index.ts b/src/pages/history-page/index.ts new file mode 100644 index 0000000..44af502 --- /dev/null +++ b/src/pages/history-page/index.ts @@ -0,0 +1,2 @@ +export { default as HistoryPageElementTemplate } from './HistoryPageElementTemplate'; +export * from './HistoryPageElement'; diff --git a/src/pages/home-page/HomePageElement.ts b/src/pages/home-page/HomePageElement.ts index 0a533c2..b1f8fb0 100644 --- a/src/pages/home-page/HomePageElement.ts +++ b/src/pages/home-page/HomePageElement.ts @@ -1,10 +1,10 @@ -import { controller, target } from '@github/catalyst'; -import { html, TemplateResult, until } from 'core/utils'; +import { TemplateResult, controller, target } from 'core/utils'; import { WalletService } from 'services/'; import { AppMainElement, WalletHeaderElement } from 'components/'; import { BasePageElement } from 'common/'; +import { HomePageElementTemplate } from 'pages/home-page'; -@controller +@controller('home-page') class HomePageElement extends BasePageElement { @target walletHeader: WalletHeaderElement; private walletService: WalletService; @@ -42,18 +42,7 @@ class HomePageElement extends BasePageElement { this.walletHeader.nextMonth = header.nextMonth || '0'; }; - render = (): TemplateResult => { - return html` - - `; - }; + render = (): TemplateResult => HomePageElementTemplate(); } export { HomePageElement }; diff --git a/src/pages/home-page/HomePageElementTemplate.ts b/src/pages/home-page/HomePageElementTemplate.ts new file mode 100644 index 0000000..8cfdd3d --- /dev/null +++ b/src/pages/home-page/HomePageElementTemplate.ts @@ -0,0 +1,12 @@ +import { html, TemplateResult } from 'core/utils'; + +export default (): TemplateResult => html` + +`; diff --git a/src/pages/home-page/index.ts b/src/pages/home-page/index.ts new file mode 100644 index 0000000..24488c2 --- /dev/null +++ b/src/pages/home-page/index.ts @@ -0,0 +1,2 @@ +export { default as HomePageElementTemplate } from './HomePageElementTemplate'; +export * from './HomePageElement'; diff --git a/src/pages/index.ts b/src/pages/index.ts index 6d646df..6766e30 100644 --- a/src/pages/index.ts +++ b/src/pages/index.ts @@ -1,15 +1,15 @@ -export * from './logout-page/LogoutPageElement'; -export * from './home-page/HomePageElement'; -export * from './register-page/RegisterPageElement'; -export * from './login-page/LoginPageElement'; -export * from './not-found/NotFoundElement'; -export * from './history-page/HistoryPageElement'; -export * from './wallet-list/WalletListElement'; -export * from './wallet-create/WalletCreateElement'; -export * from './transaction-create/TransactionCreateElement'; -export * from './subscription-create/SubscriptionCreateElement'; -export * from './subscription-list/SubscriptionListElement'; -export * from './wallet-page/WalletPageElement'; -export * from './subscription-edit/SubscriptionEditElement'; -export * from './transaction-edit/TransactionEditElement'; -export * from './wallet-edit/WalletEditElement'; \ No newline at end of file +export * from './logout-page'; +export * from './home-page'; +export * from './register-page'; +export * from './login-page'; +export * from './not-found'; +export * from './history-page'; +export * from './wallet-list'; +export * from './wallet-create'; +export * from './transaction-create'; +export * from './subscription-create'; +export * from './subscription-list'; +export * from './wallet-page'; +export * from './subscription-edit'; +export * from './transaction-edit'; +export * from './wallet-edit'; diff --git a/src/pages/login-page/LoginFormTemplate.ts b/src/pages/login-page/LoginFormTemplate.ts new file mode 100644 index 0000000..5c10e35 --- /dev/null +++ b/src/pages/login-page/LoginFormTemplate.ts @@ -0,0 +1,25 @@ +import { html, TemplateResult } from 'core/utils'; + +export default (): TemplateResult => html` + + + + `; diff --git a/src/pages/login-page/LoginPageElement.ts b/src/pages/login-page/LoginPageElement.ts index 7835d72..b12041b 100644 --- a/src/pages/login-page/LoginPageElement.ts +++ b/src/pages/login-page/LoginPageElement.ts @@ -1,12 +1,11 @@ -import { targets, controller, target } from '@github/catalyst'; -//import { html, TemplateResult } from "core/utils"; -import { html, render, TemplateResult } from 'core/utils'; +import { TemplateResult, targets, controller, target } from 'core/utils'; import { AuthService } from 'services/'; import { AppFormElement, InputFieldElement } from 'components/'; -import { RouterService } from 'core/services'; import { BasePageElement } from 'common/'; +import LoginFormTemplate from './LoginFormTemplate'; +import LoginPageElementTemplate from './LoginPageElementTemplate'; -@controller +@controller('login-page') class LoginPageElement extends BasePageElement { @targets inputs: Array; @target appForm: AppFormElement; @@ -82,45 +81,9 @@ class LoginPageElement extends BasePageElement { return _return; } - renderForms = () => { - return html` - - - - `; - }; + renderForms = (): TemplateResult => LoginFormTemplate(); - render = (): TemplateResult => { - return html` - - -
- -
- `; - }; + render = (): TemplateResult => LoginPageElementTemplate(); } export type { LoginPageElement }; diff --git a/src/pages/login-page/LoginPageElementTemplate.ts b/src/pages/login-page/LoginPageElementTemplate.ts new file mode 100644 index 0000000..b51e87a --- /dev/null +++ b/src/pages/login-page/LoginPageElementTemplate.ts @@ -0,0 +1,13 @@ +import { html, TemplateResult } from 'core/utils'; + +export default (): TemplateResult => html` + + +
+ +
+`; diff --git a/src/pages/login-page/index.ts b/src/pages/login-page/index.ts new file mode 100644 index 0000000..b795b48 --- /dev/null +++ b/src/pages/login-page/index.ts @@ -0,0 +1,3 @@ +export { default as LoginFormTemplate } from './LoginFormTemplate'; +export { default as LoginPageElementTemplate } from './LoginPageElementTemplate'; +export * from './LoginPageElement'; diff --git a/src/pages/logout-page/LogoutPageElement.ts b/src/pages/logout-page/LogoutPageElement.ts index 563fefb..3b9b727 100644 --- a/src/pages/logout-page/LogoutPageElement.ts +++ b/src/pages/logout-page/LogoutPageElement.ts @@ -1,8 +1,8 @@ -import { controller } from '@github/catalyst'; +import { controller } from 'core/utils'; import { AuthService } from 'services/'; import { BasePageElement } from 'common/'; -@controller +@controller('logout-page') class LogoutPageElement extends BasePageElement { authService: AuthService; constructor() { diff --git a/src/pages/logout-page/index.ts b/src/pages/logout-page/index.ts new file mode 100644 index 0000000..1d9513b --- /dev/null +++ b/src/pages/logout-page/index.ts @@ -0,0 +1 @@ +export * from './LogoutPageElement'; diff --git a/src/pages/not-found/NotFoundElement.ts b/src/pages/not-found/NotFoundElement.ts index 7c530d7..5f7bbd5 100644 --- a/src/pages/not-found/NotFoundElement.ts +++ b/src/pages/not-found/NotFoundElement.ts @@ -1,8 +1,8 @@ -import { controller } from '@github/catalyst'; -import { html, TemplateResult } from 'core/utils'; +import { TemplateResult, controller } from 'core/utils'; import { BasePageElement } from 'common/'; +import { NotFoundElementTemplate } from 'pages/not-found'; -@controller +@controller('not-found') class NotFoundElement extends BasePageElement { constructor() { super({ @@ -13,12 +13,7 @@ class NotFoundElement extends BasePageElement { this.update(); }; - render = (): TemplateResult => { - return html` -
404 - Page not found
-
- `; - }; + render = (): TemplateResult => NotFoundElementTemplate(); } export type { NotFoundElement }; diff --git a/src/pages/not-found/NotFoundElementTemplate.ts b/src/pages/not-found/NotFoundElementTemplate.ts new file mode 100644 index 0000000..949ea32 --- /dev/null +++ b/src/pages/not-found/NotFoundElementTemplate.ts @@ -0,0 +1,6 @@ +import { html, TemplateResult } from 'core/utils'; + +export default (): TemplateResult => html` +
404 - Page not found
+
+`; diff --git a/src/pages/not-found/index.ts b/src/pages/not-found/index.ts new file mode 100644 index 0000000..cb800e4 --- /dev/null +++ b/src/pages/not-found/index.ts @@ -0,0 +1,2 @@ +export { default as NotFoundElementTemplate } from './NotFoundElementTemplate'; +export * from './NotFoundElement'; diff --git a/src/pages/register-page/RegisterPageElement.ts b/src/pages/register-page/RegisterPageElement.ts index 0cabd37..12a9868 100644 --- a/src/pages/register-page/RegisterPageElement.ts +++ b/src/pages/register-page/RegisterPageElement.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 } from 'services/'; import { AppFormElement, InputFieldElement } from 'components/'; import { BasePageElement } from 'common/'; +import { RegisterPageElementTemplate } from 'pages/register-page'; -@controller +@controller('register-page') class RegisterPageElement extends BasePageElement { @targets inputs: Array; @target appForm: AppFormElement; @@ -60,41 +60,7 @@ class RegisterPageElement extends BasePageElement { return _return; } - render = (): TemplateResult => { - return html` - - - - - - - - `; - }; + render = (): TemplateResult => RegisterPageElementTemplate(); } export type { RegisterPageElement }; diff --git a/src/pages/register-page/RegisterPageElementTemplate.ts b/src/pages/register-page/RegisterPageElementTemplate.ts new file mode 100644 index 0000000..bede4c9 --- /dev/null +++ b/src/pages/register-page/RegisterPageElementTemplate.ts @@ -0,0 +1,37 @@ +import { html, TemplateResult } from 'core/utils'; + +export default (): TemplateResult => { + return html` + + + + + + + + `; +}; diff --git a/src/pages/register-page/index.ts b/src/pages/register-page/index.ts new file mode 100644 index 0000000..6cfd242 --- /dev/null +++ b/src/pages/register-page/index.ts @@ -0,0 +1,2 @@ +export { default as RegisterPageElementTemplate } from './RegisterPageElementTemplate'; +export * from './RegisterPageElement'; diff --git a/src/pages/subscription-create/SubscriptionCreateElement.ts b/src/pages/subscription-create/SubscriptionCreateElement.ts index 3aa4381..8e1bb6c 100644 --- a/src/pages/subscription-create/SubscriptionCreateElement.ts +++ b/src/pages/subscription-create/SubscriptionCreateElement.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 { SubscriptionCreateFormTemplate, SubscriptionCreateElementTemplate } from 'pages/subscription-create'; dayjs.extend(utc); -@controller +@controller('subscription-create') class SubscriptionCreateElement extends BasePageElement { @targets inputs: Array; @target appForm: AppFormElement; @@ -174,86 +174,14 @@ class SubscriptionCreateElement extends BasePageElement { this.appForm.update(); }; - renderForms = () => { - const renderInput = (type, name, label, rules, hide?, customAction?) => { - if (hide) { - return null; - } - return html``; - }; + renderForms = (): TemplateResult => + SubscriptionCreateFormTemplate({ + 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('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`
- ${renderWallet()} - -
`; - }; + 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`
+ ${renderWallet()} + +
`; +}; 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: