@@ -46,7 +46,13 @@ export class CardResource extends Resource<Args> {
46
46
// and just being symmetric with the card error as well
47
47
@tracked private _error : CardError | undefined ;
48
48
@tracked private _isLoaded = false ;
49
- @tracked private _loaded : Promise < void > | undefined ;
49
+ private _loading :
50
+ | {
51
+ promise : Promise < void > ;
52
+ urlOrDoc : string | LooseSingleCardDocument | undefined ;
53
+ relativeTo : URL | undefined ;
54
+ }
55
+ | undefined ;
50
56
declare private store : StoreService ;
51
57
declare private cardService : CardService ;
52
58
#url: string | undefined ;
@@ -74,8 +80,15 @@ export class CardResource extends Resource<Args> {
74
80
this . #isLive = isLive ;
75
81
this . #isAutoSave = isAutoSave ;
76
82
77
- if ( urlOrDoc ) {
78
- this . _loaded = this . load . perform ( urlOrDoc , relativeTo ) ;
83
+ if (
84
+ urlOrDoc !== this . _loading ?. urlOrDoc ||
85
+ relativeTo !== this . _loading ?. relativeTo
86
+ ) {
87
+ this . _loading = {
88
+ promise : this . load . perform ( urlOrDoc , relativeTo ) ,
89
+ urlOrDoc,
90
+ relativeTo,
91
+ } ;
79
92
}
80
93
81
94
registerDestructor ( this , ( ) => {
@@ -114,23 +127,32 @@ export class CardResource extends Resource<Args> {
114
127
// This is deprecated. consumers of this resource need to be reactive such
115
128
// that they can deal with a resource that doesn't have a card yet.
116
129
get loaded ( ) {
117
- return this . _loaded ;
130
+ return this . _loading ?. promise ;
118
131
}
119
132
120
133
private load = restartableTask (
121
- async ( urlOrDoc : string | LooseSingleCardDocument , relativeTo ?: URL ) => {
122
- this . #api = await this . cardService . getAPI ( ) ;
123
- let { url, card, error } = await this . store . createSubscriber ( {
124
- resource : this ,
125
- urlOrDoc,
126
- relativeTo,
127
- setCard : ( card ) => {
128
- if ( card !== this . card ) {
129
- this . _card = card ;
130
- }
131
- } ,
132
- setCardError : ( error ) => ( this . _error = error ) ,
133
- } ) ;
134
+ async (
135
+ urlOrDoc : string | LooseSingleCardDocument | undefined ,
136
+ relativeTo ?: URL ,
137
+ ) => {
138
+ let url : string | undefined ;
139
+ let card : CardDef | undefined ;
140
+ let error : CardError | undefined ;
141
+
142
+ if ( urlOrDoc ) {
143
+ this . #api = await this . cardService . getAPI ( ) ;
144
+ ( { url, card, error } = await this . store . createSubscriber ( {
145
+ resource : this ,
146
+ urlOrDoc,
147
+ relativeTo,
148
+ setCard : ( card ) => {
149
+ if ( card !== this . card ) {
150
+ this . _card = card ;
151
+ }
152
+ } ,
153
+ setCardError : ( error ) => ( this . _error = error ) ,
154
+ } ) ) ;
155
+ }
134
156
this . #url = url ;
135
157
this . _card = card ;
136
158
this . _error = error ;
0 commit comments