Skip to content

Commit a44522d

Browse files
committed
Project is Ready!!!
1 parent 68dfe7b commit a44522d

File tree

9 files changed

+109
-21
lines changed

9 files changed

+109
-21
lines changed

src/components/screens/home/card-info/card-info.component.js

Lines changed: 26 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ import $K from '@/core/kquery/kquery.lib'
33
import renderService from '@/core/services/render.service.js'
44
import Store from '@/core/store/store'
55

6+
import { Loader } from '@/components/ui/loader/loader.component'
7+
68
import { formatCardNumber } from '@/utils/format/format-card-number'
79
import { formatToCurrency } from '@/utils/format/format-to-currency'
810

@@ -19,14 +21,30 @@ export class CardInfo extends ChildComponent {
1921
constructor() {
2022
super()
2123

24+
this.store = Store.getInstance()
2225
this.cardService = new CardService()
23-
this.store = new Store.getInstance()
2426

2527
this.element = renderService.htmlToElement(template, [], styles)
2628

2729
this.#addListeners()
2830
}
2931

32+
#addListeners() {
33+
document.addEventListener(BALANCE_UPDATED, this.#onBalanceUpdated)
34+
}
35+
36+
#removeListeners() {
37+
document.removeEventListener(BALANCE_UPDATED, this.#onBalanceUpdated)
38+
}
39+
40+
#onBalanceUpdated = () => {
41+
this.fetchData()
42+
}
43+
44+
destroy() {
45+
this.#removeListeners()
46+
}
47+
3048
#copyCardNumber(e) {
3149
navigator.clipboard.writeText(e.target.innerText).then(() => {
3250
e.target.innerText = 'Card number copied!'
@@ -35,24 +53,13 @@ export class CardInfo extends ChildComponent {
3553
}, 2000)
3654
})
3755
}
56+
3857
#toggleCvc(cardCvcElement) {
3958
const text = cardCvcElement.text()
4059
text === CODE
4160
? cardCvcElement.text(this.card.cvc)
4261
: cardCvcElement.text(CODE)
4362
}
44-
#addListeners() {
45-
document.addEventListener(BALANCE_UPDATED, this.#onBalanceUpdate)
46-
}
47-
#removeListener() {
48-
document.removeEventListener(BALANCE_UPDATED, this.#onBalanceUpdate)
49-
}
50-
#onBalanceUpdate = () => {
51-
this.fetchData()
52-
}
53-
destroy() {
54-
this.#removeListener()
55-
}
5663

5764
fillElements() {
5865
$K(this.element).html(
@@ -83,6 +90,7 @@ export class CardInfo extends ChildComponent {
8390
.find('#card-balance')
8491
.text(formatToCurrency(this.card.balance))
8592
}
93+
8694
fetchData() {
8795
this.cardService.byUser(data => {
8896
if (data?.id) {
@@ -94,8 +102,12 @@ export class CardInfo extends ChildComponent {
94102
}
95103
})
96104
}
105+
97106
render() {
98-
if (this.store.state.user) this.fetchData()
107+
if (this.store.state.user) {
108+
$K(this.element).html(new Loader().render().outerHTML)
109+
setTimeout(() => this.fetchData(), 500)
110+
}
99111

100112
return this.element
101113
}

src/components/screens/home/contacts/contacts.component.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ export class Contacts extends ChildComponent {
5555
})
5656
})
5757
}
58+
5859
render() {
5960
this.element = renderService.htmlToElement(
6061
template,
@@ -67,7 +68,7 @@ export class Contacts extends ChildComponent {
6768
.find('#contacts-list')
6869
.html(new Loader().render().outerHTML)
6970

70-
this.fetchData()
71+
setTimeout(() => this.fetchData(), 500)
7172
}
7273

7374
return this.element

src/components/screens/home/home.components.js

Lines changed: 43 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
import BaseScreen from '@/core/component/base-screen.component'
2+
import $K from '@/core/kquery/kquery.lib'
23
import renderService from '@/core/services/render.service'
4+
import Store from '@/core/store/store'
5+
6+
import { AuthRequiredMessage } from '@/components/ui/auth-required-message/auth-required-message.component'
37

48
import styles from './home.module.scss'
59
import template from './home.template.html'
@@ -13,15 +17,51 @@ import { Transactions } from './transactions/transactions.component'
1317
export class Home extends BaseScreen {
1418
constructor() {
1519
super({ title: 'Home' })
20+
21+
this.store = Store.getInstance()
22+
this.store.addObserver(this)
23+
24+
this.components = {
25+
cardInfo: null,
26+
transactions: null,
27+
statistics: null
28+
}
29+
}
30+
31+
createOrUpdateComponent(component, componentName) {
32+
if (this.components[componentName]) {
33+
this.components[componentName].destroy()
34+
}
35+
this.components[componentName] = new component()
36+
return this.components[componentName]
37+
}
38+
39+
update() {
40+
this.user = this.store.state.user
41+
42+
if (!this.user) {
43+
// Будьте аккуратные с outerHtml иначе он может не пробросить listener click, input и тд
44+
$K(this.element).html(new AuthRequiredMessage().render().outerHTML)
45+
}
1646
}
1747

1848
render() {
19-
const element = renderService.htmlToElement(
49+
const componentsToRender = [
50+
this.createOrUpdateComponent(CardInfo, 'cardInfo'),
51+
this.createOrUpdateComponent(Transactions, 'transactions'),
52+
this.createOrUpdateComponent(Statistics, 'statistics'),
53+
Actions,
54+
Contacts
55+
]
56+
57+
this.element = renderService.htmlToElement(
2058
template,
21-
[CardInfo, Actions, Contacts, Transactions, Statistics],
59+
componentsToRender,
2260
styles
2361
)
2462

25-
return element
63+
this.update()
64+
65+
return this.element
2666
}
2767
}

src/components/screens/home/statistics/statistics.component.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ export class Statistics extends ChildComponent {
111111
render() {
112112
if (this.store.user) {
113113
$K(this.element).append(new Loader().render())
114-
this.fetchData()
114+
setTimeout(() => this.fetchData(), 500)
115115
}
116116

117117
return this.element

src/components/screens/home/transactions/transactions.component.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ export class Transactions extends ChildComponent {
7676
render() {
7777
if (this.store.user) {
7878
$K(this.element).append(new Loader().render())
79-
this.fetchData()
79+
setTimeout(() => this.fetchData(), 500)
8080
}
8181

8282
return this.element
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import styles from './auth-required-message.module.scss'
2+
3+
4+
5+
import ChildComponent from '@/core/component/child.component.js'
6+
import renderService from '@/core/services/render.service.js'
7+
8+
9+
10+
import template from './auth-required-message.template.html'
11+
12+
export class AuthRequiredMessage extends ChildComponent {
13+
render(){
14+
this.element = renderService.htmlToElement(template, [], styles)
15+
16+
return this.element
17+
}
18+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
@import 'src/styles/variables';
2+
@import 'src/styles/mixins';
3+
4+
.auth-required-message {
5+
@include dashboard-section;
6+
7+
a {
8+
font-weight: 700;
9+
color: $primary;
10+
}
11+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<div class="auth-required-message">
2+
<span>
3+
To view this page, please log in first -
4+
<a href="/auth">go to login</a>
5+
</span>
6+
</div>

src/core/router/router.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ export class Router {
6464
children: component
6565
}).render()
6666

67-
$K('#app').append(this.#layout)
67+
$K('#app').html('').append(this.#layout)
6868
} else {
6969
$K('#content').html('').append(component)
7070
}

0 commit comments

Comments
 (0)