@ethlete/query 5.15.1 → 5.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (184) hide show
  1. package/.eslintrc.json +40 -0
  2. package/CHANGELOG.md +8 -0
  3. package/jest.config.ts +23 -0
  4. package/ng-package.json +8 -0
  5. package/package.json +6 -23
  6. package/project.json +37 -0
  7. package/{index.d.ts → src/index.ts} +2 -0
  8. package/src/lib/auth/auth-provider.types.ts +160 -0
  9. package/src/lib/auth/auth-provider.utils.ts +39 -0
  10. package/src/lib/auth/basic-auth-provider.ts +17 -0
  11. package/src/lib/auth/bearer-auth-provider.ts +243 -0
  12. package/src/lib/auth/custom-header-auth-provider.ts +13 -0
  13. package/{lib/class-validator/class-validator.types.d.ts → src/lib/class-validator/class-validator.types.ts} +4 -3
  14. package/src/lib/class-validator/class-validator.utils.ts +5 -0
  15. package/src/lib/devtools/components/query-devtools/query-devtools.component.html +402 -0
  16. package/src/lib/devtools/components/query-devtools/query-devtools.component.scss +360 -0
  17. package/src/lib/devtools/components/query-devtools/query-devtools.component.ts +427 -0
  18. package/src/lib/devtools/pipes/query-short-name.pipe.ts +24 -0
  19. package/src/lib/devtools/utils/query-client.utils.ts +25 -0
  20. package/src/lib/directives/infinity-query-trigger.directive.ts +58 -0
  21. package/src/lib/directives/infinity-query.directive.ts +208 -0
  22. package/src/lib/directives/query.directive.ts +201 -0
  23. package/src/lib/entity/entity-store.ts +180 -0
  24. package/src/lib/entity/entity.types.ts +34 -0
  25. package/src/lib/entity/entity.utils.ts +51 -0
  26. package/src/lib/gql/gql.ts +22 -0
  27. package/src/lib/infinite-query/infinity-query.ts +245 -0
  28. package/src/lib/infinite-query/infinity-query.types.ts +149 -0
  29. package/src/lib/infinite-query/infinity-query.utils.ts +14 -0
  30. package/src/lib/logger/logger.ts +30 -0
  31. package/src/lib/query/query.ts +631 -0
  32. package/src/lib/query/query.types.ts +532 -0
  33. package/src/lib/query/query.utils.spec.ts +92 -0
  34. package/src/lib/query/query.utils.ts +450 -0
  35. package/src/lib/query-client/query-client.spec.ts +77 -0
  36. package/src/lib/query-client/query-client.ts +195 -0
  37. package/src/lib/query-client/query-client.types.ts +101 -0
  38. package/src/lib/query-client/query-client.utils.spec.ts +61 -0
  39. package/src/lib/query-client/query-client.utils.ts +28 -0
  40. package/src/lib/query-creator/query-creator.ts +103 -0
  41. package/src/lib/query-creator/query-creator.types.ts +74 -0
  42. package/src/lib/query-form/query-form.ts +526 -0
  43. package/src/lib/query-form/query-form.types.ts +169 -0
  44. package/src/lib/query-form/query-form.utils.ts +116 -0
  45. package/src/lib/query-store/query-store.ts +192 -0
  46. package/src/lib/request/request.ts +253 -0
  47. package/src/lib/request/request.types.ts +164 -0
  48. package/src/lib/request/request.util.spec.ts +177 -0
  49. package/src/lib/request/request.util.ts +399 -0
  50. package/src/lib/stories/angular-example-page.mdx +85 -0
  51. package/src/lib/stories/authentication-page.mdx +35 -0
  52. package/src/lib/stories/changelog-page.mdx +9 -0
  53. package/src/lib/stories/client-page.mdx +100 -0
  54. package/src/lib/stories/queries-page.mdx +117 -0
  55. package/src/lib/symfony/symfony.types.ts +21 -0
  56. package/src/lib/symfony/symfony.utils.ts +43 -0
  57. package/src/lib/utils/data.utils.ts +280 -0
  58. package/src/lib/utils/deep-freeze.util.ts +21 -0
  59. package/{lib/utils/def.util.d.ts → src/lib/utils/def.util.ts} +1 -1
  60. package/src/test-setup.ts +1 -0
  61. package/tsconfig.json +29 -0
  62. package/tsconfig.lib.json +12 -0
  63. package/tsconfig.lib.prod.json +10 -0
  64. package/tsconfig.spec.json +11 -0
  65. package/esm2022/ethlete-query.mjs +0 -5
  66. package/esm2022/index.mjs +0 -20
  67. package/esm2022/lib/auth/auth-provider.types.mjs +0 -2
  68. package/esm2022/lib/auth/auth-provider.utils.mjs +0 -25
  69. package/esm2022/lib/auth/basic-auth-provider.mjs +0 -15
  70. package/esm2022/lib/auth/bearer-auth-provider.mjs +0 -168
  71. package/esm2022/lib/auth/custom-header-auth-provider.mjs +0 -12
  72. package/esm2022/lib/auth/index.mjs +0 -6
  73. package/esm2022/lib/class-validator/class-validator.types.mjs +0 -2
  74. package/esm2022/lib/class-validator/class-validator.utils.mjs +0 -4
  75. package/esm2022/lib/class-validator/index.mjs +0 -3
  76. package/esm2022/lib/devtools/components/query-devtools/index.mjs +0 -2
  77. package/esm2022/lib/devtools/components/query-devtools/query-devtools.component.mjs +0 -297
  78. package/esm2022/lib/devtools/pipes/index.mjs +0 -2
  79. package/esm2022/lib/devtools/pipes/query-short-name.pipe.mjs +0 -24
  80. package/esm2022/lib/devtools/utils/index.mjs +0 -2
  81. package/esm2022/lib/devtools/utils/query-client.utils.mjs +0 -13
  82. package/esm2022/lib/directives/index.mjs +0 -4
  83. package/esm2022/lib/directives/infinity-query-trigger.directive.mjs +0 -56
  84. package/esm2022/lib/directives/infinity-query.directive.mjs +0 -147
  85. package/esm2022/lib/directives/query.directive.mjs +0 -123
  86. package/esm2022/lib/entity/entity-store.mjs +0 -127
  87. package/esm2022/lib/entity/entity.types.mjs +0 -2
  88. package/esm2022/lib/entity/entity.utils.mjs +0 -29
  89. package/esm2022/lib/entity/index.mjs +0 -4
  90. package/esm2022/lib/gql/gql.mjs +0 -23
  91. package/esm2022/lib/gql/index.mjs +0 -2
  92. package/esm2022/lib/infinite-query/index.mjs +0 -4
  93. package/esm2022/lib/infinite-query/infinity-query.mjs +0 -171
  94. package/esm2022/lib/infinite-query/infinity-query.types.mjs +0 -2
  95. package/esm2022/lib/infinite-query/infinity-query.utils.mjs +0 -3
  96. package/esm2022/lib/logger/index.mjs +0 -2
  97. package/esm2022/lib/logger/logger.mjs +0 -16
  98. package/esm2022/lib/query/index.mjs +0 -4
  99. package/esm2022/lib/query/query.mjs +0 -428
  100. package/esm2022/lib/query/query.types.mjs +0 -2
  101. package/esm2022/lib/query/query.utils.mjs +0 -253
  102. package/esm2022/lib/query-client/index.mjs +0 -4
  103. package/esm2022/lib/query-client/query-client.mjs +0 -80
  104. package/esm2022/lib/query-client/query-client.types.mjs +0 -2
  105. package/esm2022/lib/query-client/query-client.utils.mjs +0 -20
  106. package/esm2022/lib/query-creator/index.mjs +0 -3
  107. package/esm2022/lib/query-creator/query-creator.mjs +0 -55
  108. package/esm2022/lib/query-creator/query-creator.types.mjs +0 -2
  109. package/esm2022/lib/query-form/index.mjs +0 -4
  110. package/esm2022/lib/query-form/query-form.mjs +0 -368
  111. package/esm2022/lib/query-form/query-form.types.mjs +0 -2
  112. package/esm2022/lib/query-form/query-form.utils.mjs +0 -97
  113. package/esm2022/lib/query-store/index.mjs +0 -2
  114. package/esm2022/lib/query-store/query-store.mjs +0 -144
  115. package/esm2022/lib/request/index.mjs +0 -4
  116. package/esm2022/lib/request/request.mjs +0 -196
  117. package/esm2022/lib/request/request.types.mjs +0 -2
  118. package/esm2022/lib/request/request.util.mjs +0 -252
  119. package/esm2022/lib/symfony/index.mjs +0 -3
  120. package/esm2022/lib/symfony/symfony.types.mjs +0 -2
  121. package/esm2022/lib/symfony/symfony.utils.mjs +0 -31
  122. package/esm2022/lib/utils/data.utils.mjs +0 -138
  123. package/esm2022/lib/utils/deep-freeze.util.mjs +0 -17
  124. package/esm2022/lib/utils/def.util.mjs +0 -8
  125. package/esm2022/lib/utils/index.mjs +0 -4
  126. package/fesm2022/ethlete-query.mjs +0 -3276
  127. package/fesm2022/ethlete-query.mjs.map +0 -1
  128. package/lib/auth/auth-provider.types.d.ts +0 -133
  129. package/lib/auth/auth-provider.utils.d.ts +0 -9
  130. package/lib/auth/basic-auth-provider.d.ts +0 -10
  131. package/lib/auth/bearer-auth-provider.d.ts +0 -23
  132. package/lib/auth/custom-header-auth-provider.d.ts +0 -9
  133. package/lib/class-validator/class-validator.utils.d.ts +0 -2
  134. package/lib/devtools/components/query-devtools/query-devtools.component.d.ts +0 -151
  135. package/lib/devtools/pipes/query-short-name.pipe.d.ts +0 -8
  136. package/lib/devtools/utils/query-client.utils.d.ts +0 -12
  137. package/lib/directives/infinity-query-trigger.directive.d.ts +0 -15
  138. package/lib/directives/infinity-query.directive.d.ts +0 -49
  139. package/lib/directives/query.directive.d.ts +0 -63
  140. package/lib/entity/entity-store.d.ts +0 -25
  141. package/lib/entity/entity.types.d.ts +0 -25
  142. package/lib/entity/entity.utils.d.ts +0 -12
  143. package/lib/gql/gql.d.ts +0 -6
  144. package/lib/infinite-query/infinity-query.d.ts +0 -29
  145. package/lib/infinite-query/infinity-query.types.d.ts +0 -104
  146. package/lib/infinite-query/infinity-query.utils.d.ts +0 -4
  147. package/lib/logger/logger.d.ts +0 -12
  148. package/lib/query/query.d.ts +0 -60
  149. package/lib/query/query.types.d.ts +0 -388
  150. package/lib/query/query.utils.d.ts +0 -91
  151. package/lib/query-client/query-client.d.ts +0 -29
  152. package/lib/query-client/query-client.types.d.ts +0 -82
  153. package/lib/query-client/query-client.utils.d.ts +0 -4
  154. package/lib/query-creator/query-creator.d.ts +0 -20
  155. package/lib/query-creator/query-creator.types.d.ts +0 -13
  156. package/lib/query-form/query-form.d.ts +0 -89
  157. package/lib/query-form/query-form.types.d.ts +0 -138
  158. package/lib/query-form/query-form.utils.d.ts +0 -13
  159. package/lib/query-store/query-store.d.ts +0 -31
  160. package/lib/request/request.d.ts +0 -3
  161. package/lib/request/request.types.d.ts +0 -126
  162. package/lib/request/request.util.d.ts +0 -92
  163. package/lib/symfony/symfony.types.d.ts +0 -19
  164. package/lib/symfony/symfony.utils.d.ts +0 -6
  165. package/lib/utils/data.utils.d.ts +0 -59
  166. package/lib/utils/deep-freeze.util.d.ts +0 -1
  167. /package/{lib/auth/index.d.ts → src/lib/auth/index.ts} +0 -0
  168. /package/{lib/class-validator/index.d.ts → src/lib/class-validator/index.ts} +0 -0
  169. /package/{lib/devtools/components/query-devtools/index.d.ts → src/lib/devtools/components/query-devtools/index.ts} +0 -0
  170. /package/{lib/devtools/pipes/index.d.ts → src/lib/devtools/pipes/index.ts} +0 -0
  171. /package/{lib/devtools/utils/index.d.ts → src/lib/devtools/utils/index.ts} +0 -0
  172. /package/{lib/directives/index.d.ts → src/lib/directives/index.ts} +0 -0
  173. /package/{lib/entity/index.d.ts → src/lib/entity/index.ts} +0 -0
  174. /package/{lib/gql/index.d.ts → src/lib/gql/index.ts} +0 -0
  175. /package/{lib/infinite-query/index.d.ts → src/lib/infinite-query/index.ts} +0 -0
  176. /package/{lib/logger/index.d.ts → src/lib/logger/index.ts} +0 -0
  177. /package/{lib/query/index.d.ts → src/lib/query/index.ts} +0 -0
  178. /package/{lib/query-client/index.d.ts → src/lib/query-client/index.ts} +0 -0
  179. /package/{lib/query-creator/index.d.ts → src/lib/query-creator/index.ts} +0 -0
  180. /package/{lib/query-form/index.d.ts → src/lib/query-form/index.ts} +0 -0
  181. /package/{lib/query-store/index.d.ts → src/lib/query-store/index.ts} +0 -0
  182. /package/{lib/request/index.d.ts → src/lib/request/index.ts} +0 -0
  183. /package/{lib/symfony/index.d.ts → src/lib/symfony/index.ts} +0 -0
  184. /package/{lib/utils/index.d.ts → src/lib/utils/index.ts} +0 -0
@@ -0,0 +1,402 @@
1
+ @if (!isOpen()) {
2
+ <button (click)="toggleOpen()" class="et-query-devtools-open-btn et-qd-chip">Query Devtools</button>
3
+ }
4
+
5
+ @if (isOpen()) {
6
+ <div
7
+ [class.et-query-devtools-container--transparent]="isTranslucent()"
8
+ class="et-query-devtools-container et-query-devtools-container--snap-{{ snapLayout() }}"
9
+ >
10
+ <header class="et-qd-header">
11
+ <h3 class="et-qd-header__title">Query Devtools</h3>
12
+
13
+ <div class="et-qd-header__select">
14
+ <label for="et-query-client-instance">Client instance</label>
15
+ <select [formControl]="selectedClientIdCtrl" id="et-query-client-instance">
16
+ @for (clientConfig of queryClientConfigs; track trackByClient(i, clientConfig); let i = $index) {
17
+ <option [value]="i">
18
+ {{ clientConfig.displayName ?? clientConfig.client.config.baseRoute }}
19
+ </option>
20
+ }
21
+ </select>
22
+ </div>
23
+
24
+ <button (click)="toggleOpen()" class="et-qd-btn et-qd-btn-secondary">Close</button>
25
+ </header>
26
+
27
+ <div class="et-qd-sub-header">
28
+ <button
29
+ [ngClass]="{ 'et-qd-chip-secondary': !isTranslucent() }"
30
+ (click)="toggleTranslucent()"
31
+ class="et-qd-chip et-qd-translucent-clickable"
32
+ >
33
+ Translucent
34
+ </button>
35
+ <div class="et-qd-sub-header__divider"></div>
36
+ <button
37
+ [ngClass]="{ 'et-qd-chip-secondary': snapLayout() !== 'full' }"
38
+ (click)="selectSnapLayout('full')"
39
+ class="et-qd-chip"
40
+ >
41
+ Fullscreen
42
+ </button>
43
+ <button
44
+ [ngClass]="{ 'et-qd-chip-secondary': snapLayout() !== 'top' }"
45
+ (click)="selectSnapLayout('top')"
46
+ class="et-qd-chip"
47
+ >
48
+ Top
49
+ </button>
50
+ <button
51
+ [ngClass]="{ 'et-qd-chip-secondary': snapLayout() !== 'bottom' }"
52
+ (click)="selectSnapLayout('bottom')"
53
+ class="et-qd-chip"
54
+ >
55
+ Bottom
56
+ </button>
57
+ <button
58
+ [ngClass]="{ 'et-qd-chip-secondary': snapLayout() !== 'left' }"
59
+ (click)="selectSnapLayout('left')"
60
+ class="et-qd-chip"
61
+ >
62
+ Left
63
+ </button>
64
+ <button
65
+ [ngClass]="{ 'et-qd-chip-secondary': snapLayout() !== 'right' }"
66
+ (click)="selectSnapLayout('right')"
67
+ class="et-qd-chip"
68
+ >
69
+ Right
70
+ </button>
71
+ </div>
72
+
73
+ @if (selectedClientConfig(); as cfg) {
74
+ <div class="et-qd-client">
75
+ <p class="et-qd-client__title">{{ cfg.displayName ?? cfg.client.config.baseRoute }}</p>
76
+
77
+ <div class="et-qd-client__actions">
78
+ <button (click)="cfg.client._store.refreshQueriesInUse()" class="et-qd-chip">Refresh all</button>
79
+ <button (click)="cfg.client._store.refreshQueriesInUse({ ignoreCacheValidity: true })" class="et-qd-chip">
80
+ Refresh all (ignore caches)
81
+ </button>
82
+ <button
83
+ (click)="cfg.client._store.refreshQueriesInUse({ ignoreCacheValidity: true, purgeUnused: true })"
84
+ class="et-qd-chip"
85
+ >
86
+ Refresh all (ignore caches & purge unused)
87
+ </button>
88
+ </div>
89
+ </div>
90
+ }
91
+
92
+ @if (selectedClientConfig(); as cfg) {
93
+ <div class="et-qd-queries">
94
+ <p class="et-qd-queries__title">Inspector</p>
95
+ <div class="et-qd-queries__actions">
96
+ <button
97
+ [ngClass]="{ 'et-qd-chip-secondary': queryListMode() !== 'live' || viewMode() !== 'query' }"
98
+ (click)="selectQueryListMode('live'); selectViewMode('query')"
99
+ class="et-qd-chip et-qd-chip-bordered"
100
+ >
101
+ Live Queries ({{ queries()?.length ?? 0 }})
102
+ </button>
103
+ <button
104
+ [ngClass]="{ 'et-qd-chip-secondary': queryListMode() !== 'history' || viewMode() !== 'query' }"
105
+ (click)="selectQueryListMode('history'); selectViewMode('query')"
106
+ class="et-qd-chip et-qd-chip-bordered"
107
+ >
108
+ Query History ({{ (queryHistory$ | async)?.length ?? 0 }}/50)
109
+ </button>
110
+ @if (queryListMode() === 'history' && viewMode() === 'query') {
111
+ <div class="et-qd-queries__divider"></div>
112
+ <button (click)="clearQueryHistory()" class="et-qd-chip et-qd-chip-bordered">Clear history</button>
113
+ }
114
+
115
+ <div class="et-qd-queries__divider"></div>
116
+ <button
117
+ [ngClass]="{ 'et-qd-chip-secondary': viewMode() !== 'authProvider' }"
118
+ (click)="selectViewMode('authProvider')"
119
+ class="et-qd-chip et-qd-chip-bordered"
120
+ >
121
+ Auth Provider
122
+ </button>
123
+ </div>
124
+
125
+ @if (viewMode() === 'query') {
126
+ <div class="et-qd-queries__browser">
127
+ @if (queryListMode() === 'live') {
128
+ <ul class="et-qd-queries__browser-list">
129
+ @for (query of queries(); track trackByQuery($index, query)) {
130
+ <li>
131
+ <button
132
+ [class.et-qd-query--active]="selectedQuery()?._id === query._id"
133
+ (click)="selectQuery(query)"
134
+ >
135
+ <span> {{ query._queryConfig.method }}</span>
136
+ <span> {{ query | queryShortName }}</span>
137
+ </button>
138
+ </li>
139
+ }
140
+ </ul>
141
+ }
142
+ @if (queryListMode() === 'history') {
143
+ <ul class="et-qd-queries__browser-list">
144
+ @for (query of queryHistory$ | async; track trackByQuery($index, query)) {
145
+ <li>
146
+ <button
147
+ [class.et-qd-query--active]="selectedQuery()?._id === query._id"
148
+ (click)="selectQuery(query)"
149
+ >
150
+ <span> {{ query._queryConfig.method }}</span>
151
+ <span> {{ query | queryShortName }}</span>
152
+ </button>
153
+ </li>
154
+ }
155
+ </ul>
156
+ }
157
+ <div class="et-qd-queries__browser-detail">
158
+ @if (selectedQuery(); as query) {
159
+ <p class="et-qd-queries__browser-detail__title">
160
+ {{ query._queryConfig.method }} {{ query._routeWithParams }}
161
+ </p>
162
+
163
+ <div class="et-qd-queries__actions">
164
+ <button (click)="query.execute()" class="et-qd-chip et-qd-chip-bordered">Execute</button>
165
+ <button (click)="query.execute({ skipCache: true })" class="et-qd-chip et-qd-chip-bordered">
166
+ Execute (ignore cache)
167
+ </button>
168
+
169
+ <button (click)="query.abort()" class="et-qd-chip et-qd-chip-bordered">Abort</button>
170
+ <div class="et-qd-queries__divider"></div>
171
+ <button
172
+ [ngClass]="{ 'et-qd-chip-secondary': !query.isPolling }"
173
+ (click)="query.poll({ interval: 5000, takeUntil: _destroy$ })"
174
+ class="et-qd-chip et-qd-chip-bordered"
175
+ >
176
+ Poll
177
+ </button>
178
+
179
+ <button
180
+ [ngClass]="{ 'et-qd-chip-secondary': query.isPolling }"
181
+ (click)="query.stopPolling()"
182
+ class="et-qd-chip et-qd-chip-bordered"
183
+ >
184
+ Stop polling
185
+ </button>
186
+ @if (query.isPolling || query._isPollingPaused) {
187
+ <button (click)="query.pausePolling()" class="et-qd-chip et-qd-chip-secondary et-qd-chip-bordered">
188
+ Pause polling
189
+ </button>
190
+ <button (click)="query.resumePolling()" class="et-qd-chip et-qd-chip-secondary et-qd-chip-bordered">
191
+ Resume polling
192
+ </button>
193
+ }
194
+ </div>
195
+
196
+ <div class="et-qd-list">
197
+ <div class="et-qd-list-item">
198
+ <p>State type</p>
199
+ <pre>{{ query.rawState.type }}</pre>
200
+ </div>
201
+
202
+ <div class="et-qd-list-item">
203
+ <p>Dependents</p>
204
+ <pre>{{ query._dependents | json }}</pre>
205
+ </div>
206
+
207
+ <div class="et-qd-list-item">
208
+ <p>Is expired</p>
209
+ <pre>{{ query.isExpired }}</pre>
210
+ </div>
211
+
212
+ <div class="et-qd-list-item">
213
+ <p>Is in use</p>
214
+ <pre>{{ query.isInUse }}</pre>
215
+ </div>
216
+
217
+ <div class="et-qd-list-item">
218
+ <p>Subscriber count</p>
219
+ <pre>{{ query._subscriberCount }}</pre>
220
+ </div>
221
+
222
+ <div class="et-qd-list-item">
223
+ <p>Is polling</p>
224
+ <pre>{{ query.isPolling }}</pre>
225
+ </div>
226
+
227
+ <div class="et-qd-list-item">
228
+ <p>Is polling paused</p>
229
+ <pre>{{ query._isPollingPaused }}</pre>
230
+ </div>
231
+
232
+ <div class="et-qd-list-item">
233
+ <p>Enable smart polling</p>
234
+ <pre>{{ query._enableSmartPolling }}</pre>
235
+ </div>
236
+
237
+ <div class="et-qd-list-item">
238
+ <p>Query store key</p>
239
+ <pre>{{ query._queryStoreKey }}</pre>
240
+ </div>
241
+
242
+ <div class="et-qd-list-item">
243
+ <p>Arguments</p>
244
+
245
+ <div>
246
+ <button
247
+ [ngClass]="{ 'et-qd-chip-secondary': !showArguments() }"
248
+ (click)="toggleShowArguments()"
249
+ class="et-qd-chip et-qd-chip-bordered"
250
+ >
251
+ Toggle
252
+ </button>
253
+ </div>
254
+ @if (showArguments()) {
255
+ <pre>{{ query._arguments | json }}</pre>
256
+ }
257
+ </div>
258
+
259
+ <div class="et-qd-list-item">
260
+ <p>State</p>
261
+ <p><i> Warning, this will cause a subscription if shown!</i></p>
262
+ <div>
263
+ <button
264
+ [ngClass]="{ 'et-qd-chip-secondary': !showResponse() }"
265
+ (click)="toggleShowResponse()"
266
+ class="et-qd-chip et-qd-chip-bordered"
267
+ >
268
+ Toggle
269
+ </button>
270
+ </div>
271
+ @if (showResponse()) {
272
+ <pre>{{ query.state$ | async | json }}</pre>
273
+ }
274
+ </div>
275
+
276
+ <div class="et-qd-list-item">
277
+ <p>Raw state</p>
278
+ <p><i> The query state unaffected by entity stores</i></p>
279
+
280
+ <div>
281
+ <button
282
+ [ngClass]="{ 'et-qd-chip-secondary': !showRawResponse() }"
283
+ (click)="toggleShowRawResponse()"
284
+ class="et-qd-chip et-qd-chip-bordered"
285
+ >
286
+ Toggle
287
+ </button>
288
+ </div>
289
+ @if (showRawResponse()) {
290
+ <pre>{{ query.rawState | json }}</pre>
291
+ }
292
+ </div>
293
+
294
+ <div class="et-qd-list-item">
295
+ <p>Query config</p>
296
+
297
+ <div>
298
+ <button
299
+ [ngClass]="{ 'et-qd-chip-secondary': !showQueryConfig() }"
300
+ (click)="toggleShowQueryConfig()"
301
+ class="et-qd-chip et-qd-chip-bordered"
302
+ >
303
+ Toggle
304
+ </button>
305
+ </div>
306
+ @if (showQueryConfig()) {
307
+ <pre>{{ stringifiedQueryConfig() | json }}</pre>
308
+ }
309
+ </div>
310
+
311
+ @if (!!query._queryConfig.entity) {
312
+ <div class="et-qd-list-item">
313
+ <p>Entity store value</p>
314
+
315
+ <div>
316
+ <button
317
+ [ngClass]="{ 'et-qd-chip-secondary': !showEntityStoreValue() }"
318
+ (click)="toggleShowEntityStoreValue()"
319
+ class="et-qd-chip et-qd-chip-bordered"
320
+ >
321
+ Toggle
322
+ </button>
323
+ </div>
324
+ @if (showEntityStoreValue()) {
325
+ <pre>{{ selectedQueryEntityStoreValue$ | async | json }}</pre>
326
+ }
327
+ </div>
328
+ }
329
+ </div>
330
+ }
331
+ </div>
332
+ </div>
333
+ } @else if (viewMode() === 'authProvider') {
334
+ <div class="et-qd-auth-provider__viewer">
335
+ @if (authProviderDetails(); as details) {
336
+ <div class="et-qd-list">
337
+ <div class="et-qd-list-item">
338
+ <p>Type</p>
339
+ <pre>{{ details.type }}</pre>
340
+ </div>
341
+ <div class="et-qd-list-item">
342
+ <p>Header value</p>
343
+ <pre>{{ details.header() | json }}</pre>
344
+ </div>
345
+ <div class="et-qd-list-item">
346
+ <p>Config</p>
347
+ <pre>{{ details.config | json }}</pre>
348
+ </div>
349
+
350
+ @if (details.type === 'BearerAuthProvider') {
351
+ <div class="et-qd-list-item">
352
+ <p>Tokens</p>
353
+ <pre>{{ details.provider.tokens$ | async | json }}</pre>
354
+ </div>
355
+
356
+ <div class="et-qd-list-item">
357
+ <p>Should refresh on unauthorized response</p>
358
+ <pre>{{ details.provider.shouldRefreshOnUnauthorizedResponse }}</pre>
359
+ </div>
360
+
361
+ <ng-container
362
+ *etQuery="
363
+ details.provider.currentRefreshQuery$ | async as response;
364
+ loading as loading;
365
+ error as error;
366
+ query as query
367
+ "
368
+ >
369
+ <div class="et-qd-list-item">
370
+ <p>Refresh query response</p>
371
+
372
+ <div>
373
+ <button (click)="details.provider._refreshQuery()" class="et-qd-chip et-qd-chip-bordered">
374
+ Refresh
375
+ </button>
376
+ </div>
377
+ <pre>{{ response | json }}</pre>
378
+ </div>
379
+ <div class="et-qd-list-item">
380
+ <p>Refresh query loading</p>
381
+ <pre>{{ loading }}</pre>
382
+ </div>
383
+ <div class="et-qd-list-item">
384
+ <p>Refresh query error</p>
385
+ <pre>{{ error ?? 'null' }}</pre>
386
+ </div>
387
+ <div class="et-qd-list-item">
388
+ <p>State</p>
389
+ <pre>{{ query?.state$ | async | json }}</pre>
390
+ </div>
391
+ </ng-container>
392
+ }
393
+ </div>
394
+ } @else {
395
+ <p>No auth provider set</p>
396
+ }
397
+ </div>
398
+ }
399
+ </div>
400
+ }
401
+ </div>
402
+ }