@communecter/cocolight-api-client 1.0.155 → 1.0.157

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 (337) hide show
  1. package/dist/1035.cocolight-api-client.browser.js +1 -1
  2. package/dist/1035.cocolight-api-client.cjs +1 -1
  3. package/dist/1483.cocolight-api-client.browser.js +1 -1
  4. package/dist/1483.cocolight-api-client.cjs +1 -1
  5. package/dist/1491.cocolight-api-client.browser.js +1 -1
  6. package/dist/1491.cocolight-api-client.cjs +1 -1
  7. package/dist/1494.cocolight-api-client.browser.js +1 -1
  8. package/dist/1494.cocolight-api-client.cjs +1 -1
  9. package/dist/1641.cocolight-api-client.browser.js +1 -1
  10. package/dist/1641.cocolight-api-client.cjs +1 -1
  11. package/dist/1678.cocolight-api-client.browser.js +1 -1
  12. package/dist/1678.cocolight-api-client.cjs +1 -1
  13. package/dist/2041.cocolight-api-client.browser.js +1 -1
  14. package/dist/2041.cocolight-api-client.cjs +1 -1
  15. package/dist/2302.cocolight-api-client.browser.js +1 -1
  16. package/dist/2302.cocolight-api-client.cjs +1 -1
  17. package/dist/2313.cocolight-api-client.browser.js +1 -1
  18. package/dist/2313.cocolight-api-client.cjs +1 -1
  19. package/dist/2379.cocolight-api-client.browser.js +1 -1
  20. package/dist/2379.cocolight-api-client.cjs +1 -1
  21. package/dist/2439.cocolight-api-client.browser.js +1 -1
  22. package/dist/2439.cocolight-api-client.cjs +1 -1
  23. package/dist/2594.cocolight-api-client.browser.js +1 -1
  24. package/dist/2594.cocolight-api-client.cjs +1 -1
  25. package/dist/2766.cocolight-api-client.browser.js +1 -1
  26. package/dist/2766.cocolight-api-client.cjs +1 -1
  27. package/dist/2812.cocolight-api-client.browser.js +1 -1
  28. package/dist/2812.cocolight-api-client.cjs +1 -1
  29. package/dist/2918.cocolight-api-client.browser.js +1 -1
  30. package/dist/2918.cocolight-api-client.cjs +1 -1
  31. package/dist/3028.cocolight-api-client.browser.js +1 -1
  32. package/dist/3028.cocolight-api-client.cjs +1 -1
  33. package/dist/3330.cocolight-api-client.browser.js +1 -1
  34. package/dist/3330.cocolight-api-client.cjs +1 -1
  35. package/dist/3371.cocolight-api-client.browser.js +1 -1
  36. package/dist/3371.cocolight-api-client.cjs +1 -1
  37. package/dist/3401.cocolight-api-client.browser.js +1 -1
  38. package/dist/3401.cocolight-api-client.cjs +1 -1
  39. package/dist/3516.cocolight-api-client.browser.js +1 -1
  40. package/dist/3516.cocolight-api-client.cjs +1 -1
  41. package/dist/3593.cocolight-api-client.browser.js +1 -1
  42. package/dist/3593.cocolight-api-client.cjs +1 -1
  43. package/dist/3764.cocolight-api-client.browser.js +1 -1
  44. package/dist/3764.cocolight-api-client.cjs +1 -1
  45. package/dist/3873.cocolight-api-client.browser.js +1 -1
  46. package/dist/3873.cocolight-api-client.cjs +1 -1
  47. package/dist/3911.cocolight-api-client.browser.js +1 -1
  48. package/dist/3911.cocolight-api-client.cjs +1 -1
  49. package/dist/4031.cocolight-api-client.browser.js +1 -1
  50. package/dist/4031.cocolight-api-client.cjs +1 -1
  51. package/dist/4152.cocolight-api-client.browser.js +1 -1
  52. package/dist/4152.cocolight-api-client.cjs +1 -1
  53. package/dist/4203.cocolight-api-client.browser.js +1 -1
  54. package/dist/4203.cocolight-api-client.cjs +1 -1
  55. package/dist/424.cocolight-api-client.browser.js +1 -1
  56. package/dist/424.cocolight-api-client.cjs +1 -1
  57. package/dist/435.cocolight-api-client.browser.js +1 -1
  58. package/dist/435.cocolight-api-client.cjs +1 -1
  59. package/dist/4402.cocolight-api-client.browser.js +1 -1
  60. package/dist/4402.cocolight-api-client.cjs +1 -1
  61. package/dist/4425.cocolight-api-client.browser.js +1 -1
  62. package/dist/4425.cocolight-api-client.cjs +1 -1
  63. package/dist/4472.cocolight-api-client.browser.js +1 -1
  64. package/dist/4472.cocolight-api-client.cjs +1 -1
  65. package/dist/4914.cocolight-api-client.browser.js +1 -1
  66. package/dist/4914.cocolight-api-client.cjs +1 -1
  67. package/dist/4959.cocolight-api-client.browser.js +1 -1
  68. package/dist/4959.cocolight-api-client.cjs +1 -1
  69. package/dist/5100.cocolight-api-client.browser.js +1 -1
  70. package/dist/5100.cocolight-api-client.cjs +1 -1
  71. package/dist/5111.cocolight-api-client.browser.js +1 -1
  72. package/dist/5111.cocolight-api-client.cjs +1 -1
  73. package/dist/5286.cocolight-api-client.browser.js +1 -1
  74. package/dist/5286.cocolight-api-client.cjs +1 -1
  75. package/dist/5380.cocolight-api-client.browser.js +1 -1
  76. package/dist/5380.cocolight-api-client.cjs +1 -1
  77. package/dist/5383.cocolight-api-client.browser.js +1 -1
  78. package/dist/5383.cocolight-api-client.cjs +1 -1
  79. package/dist/5480.cocolight-api-client.browser.js +1 -1
  80. package/dist/5480.cocolight-api-client.cjs +1 -1
  81. package/dist/5541.cocolight-api-client.browser.js +1 -1
  82. package/dist/5541.cocolight-api-client.cjs +1 -1
  83. package/dist/5839.cocolight-api-client.browser.js +1 -1
  84. package/dist/5839.cocolight-api-client.cjs +1 -1
  85. package/dist/5862.cocolight-api-client.browser.js +1 -1
  86. package/dist/5862.cocolight-api-client.cjs +1 -1
  87. package/dist/5869.cocolight-api-client.browser.js +1 -1
  88. package/dist/5869.cocolight-api-client.cjs +1 -1
  89. package/dist/588.cocolight-api-client.browser.js +1 -1
  90. package/dist/588.cocolight-api-client.cjs +1 -1
  91. package/dist/601.cocolight-api-client.browser.js +1 -1
  92. package/dist/601.cocolight-api-client.cjs +1 -1
  93. package/dist/6012.cocolight-api-client.browser.js +1 -1
  94. package/dist/6012.cocolight-api-client.cjs +1 -1
  95. package/dist/6200.cocolight-api-client.browser.js +1 -1
  96. package/dist/6200.cocolight-api-client.cjs +1 -1
  97. package/dist/6369.cocolight-api-client.browser.js +1 -1
  98. package/dist/6369.cocolight-api-client.cjs +1 -1
  99. package/dist/7009.cocolight-api-client.browser.js +1 -1
  100. package/dist/7009.cocolight-api-client.cjs +1 -1
  101. package/dist/725.cocolight-api-client.browser.js +1 -1
  102. package/dist/725.cocolight-api-client.cjs +1 -1
  103. package/dist/7320.cocolight-api-client.browser.js +1 -1
  104. package/dist/7339.cocolight-api-client.browser.js +1 -1
  105. package/dist/7339.cocolight-api-client.cjs +1 -1
  106. package/dist/7398.cocolight-api-client.browser.js +1 -1
  107. package/dist/7398.cocolight-api-client.cjs +1 -1
  108. package/dist/7888.cocolight-api-client.browser.js +1 -1
  109. package/dist/7888.cocolight-api-client.cjs +1 -1
  110. package/dist/7975.cocolight-api-client.browser.js +1 -1
  111. package/dist/7975.cocolight-api-client.cjs +1 -1
  112. package/dist/809.cocolight-api-client.browser.js +1 -1
  113. package/dist/809.cocolight-api-client.cjs +1 -1
  114. package/dist/8300.cocolight-api-client.browser.js +1 -1
  115. package/dist/8300.cocolight-api-client.cjs +1 -1
  116. package/dist/8317.cocolight-api-client.browser.js +1 -1
  117. package/dist/8317.cocolight-api-client.cjs +1 -1
  118. package/dist/8525.cocolight-api-client.browser.js +1 -1
  119. package/dist/8525.cocolight-api-client.cjs +1 -1
  120. package/dist/8894.cocolight-api-client.browser.js +1 -1
  121. package/dist/8894.cocolight-api-client.cjs +1 -1
  122. package/dist/9301.cocolight-api-client.browser.js +1 -1
  123. package/dist/9301.cocolight-api-client.cjs +1 -1
  124. package/dist/9438.cocolight-api-client.browser.js +1 -1
  125. package/dist/9438.cocolight-api-client.cjs +1 -1
  126. package/dist/9478.cocolight-api-client.browser.js +1 -1
  127. package/dist/9478.cocolight-api-client.cjs +1 -1
  128. package/dist/9568.cocolight-api-client.browser.js +1 -1
  129. package/dist/9568.cocolight-api-client.cjs +1 -1
  130. package/dist/cocolight-api-client.browser.js +6 -6
  131. package/dist/cocolight-api-client.cjs +1 -1
  132. package/dist/cocolight-api-client.vite.mjs.js +1 -1
  133. package/dist/cocolight-api-client.vite.mjs.js.map +1 -1
  134. package/package.json +7 -17
  135. package/types/Api.d.ts +1 -0
  136. package/types/ApiClient.d.ts +10 -1
  137. package/types/api/Answer.d.ts +27 -9
  138. package/types/api/BaseEntity.d.ts +77 -0
  139. package/types/api/EndpointApi.d.ts +51 -3
  140. package/types/api/EndpointApi.types.d.ts +112 -1
  141. package/types/api/User.d.ts +20 -0
  142. package/types/costum/types.d.ts +0 -2
  143. package/types/endpoints.module.d.ts +3039 -1009
  144. package/types/index.d.ts +1 -0
  145. package/types/utils/OfflineClientManager.d.ts +8 -0
  146. package/types/utils/adminImportExport.d.ts +29 -0
  147. package/dist/1035.cocolight-api-client.mjs.js +0 -1
  148. package/dist/1483.cocolight-api-client.mjs.js +0 -1
  149. package/dist/1491.cocolight-api-client.mjs.js +0 -1
  150. package/dist/1494.cocolight-api-client.mjs.js +0 -1
  151. package/dist/1641.cocolight-api-client.mjs.js +0 -1
  152. package/dist/1678.cocolight-api-client.mjs.js +0 -1
  153. package/dist/2041.cocolight-api-client.mjs.js +0 -1
  154. package/dist/2302.cocolight-api-client.mjs.js +0 -1
  155. package/dist/2313.cocolight-api-client.mjs.js +0 -1
  156. package/dist/2379.cocolight-api-client.mjs.js +0 -1
  157. package/dist/2439.cocolight-api-client.mjs.js +0 -1
  158. package/dist/2594.cocolight-api-client.mjs.js +0 -1
  159. package/dist/2766.cocolight-api-client.mjs.js +0 -1
  160. package/dist/2812.cocolight-api-client.mjs.js +0 -1
  161. package/dist/2918.cocolight-api-client.mjs.js +0 -1
  162. package/dist/3028.cocolight-api-client.mjs.js +0 -1
  163. package/dist/3330.cocolight-api-client.mjs.js +0 -1
  164. package/dist/3371.cocolight-api-client.mjs.js +0 -1
  165. package/dist/3401.cocolight-api-client.mjs.js +0 -1
  166. package/dist/3516.cocolight-api-client.mjs.js +0 -1
  167. package/dist/3593.cocolight-api-client.mjs.js +0 -1
  168. package/dist/3764.cocolight-api-client.mjs.js +0 -1
  169. package/dist/3873.cocolight-api-client.mjs.js +0 -1
  170. package/dist/3911.cocolight-api-client.mjs.js +0 -1
  171. package/dist/4031.cocolight-api-client.mjs.js +0 -1
  172. package/dist/4152.cocolight-api-client.mjs.js +0 -1
  173. package/dist/4203.cocolight-api-client.mjs.js +0 -1
  174. package/dist/424.cocolight-api-client.mjs.js +0 -1
  175. package/dist/435.cocolight-api-client.mjs.js +0 -1
  176. package/dist/4402.cocolight-api-client.mjs.js +0 -1
  177. package/dist/4425.cocolight-api-client.mjs.js +0 -1
  178. package/dist/4472.cocolight-api-client.mjs.js +0 -1
  179. package/dist/4914.cocolight-api-client.mjs.js +0 -1
  180. package/dist/4959.cocolight-api-client.mjs.js +0 -1
  181. package/dist/5100.cocolight-api-client.mjs.js +0 -1
  182. package/dist/5111.cocolight-api-client.mjs.js +0 -1
  183. package/dist/5286.cocolight-api-client.mjs.js +0 -1
  184. package/dist/5380.cocolight-api-client.mjs.js +0 -1
  185. package/dist/5383.cocolight-api-client.mjs.js +0 -1
  186. package/dist/5480.cocolight-api-client.mjs.js +0 -1
  187. package/dist/5541.cocolight-api-client.mjs.js +0 -1
  188. package/dist/5839.cocolight-api-client.mjs.js +0 -1
  189. package/dist/5862.cocolight-api-client.mjs.js +0 -1
  190. package/dist/5869.cocolight-api-client.mjs.js +0 -1
  191. package/dist/588.cocolight-api-client.mjs.js +0 -1
  192. package/dist/601.cocolight-api-client.mjs.js +0 -1
  193. package/dist/6012.cocolight-api-client.mjs.js +0 -1
  194. package/dist/6200.cocolight-api-client.mjs.js +0 -1
  195. package/dist/6369.cocolight-api-client.mjs.js +0 -1
  196. package/dist/7009.cocolight-api-client.mjs.js +0 -1
  197. package/dist/725.cocolight-api-client.mjs.js +0 -1
  198. package/dist/7339.cocolight-api-client.mjs.js +0 -1
  199. package/dist/7398.cocolight-api-client.mjs.js +0 -1
  200. package/dist/7888.cocolight-api-client.mjs.js +0 -1
  201. package/dist/7975.cocolight-api-client.mjs.js +0 -1
  202. package/dist/809.cocolight-api-client.mjs.js +0 -1
  203. package/dist/8300.cocolight-api-client.mjs.js +0 -1
  204. package/dist/8317.cocolight-api-client.mjs.js +0 -1
  205. package/dist/8525.cocolight-api-client.mjs.js +0 -1
  206. package/dist/8894.cocolight-api-client.mjs.js +0 -1
  207. package/dist/9301.cocolight-api-client.mjs.js +0 -1
  208. package/dist/9438.cocolight-api-client.mjs.js +0 -1
  209. package/dist/9478.cocolight-api-client.mjs.js +0 -1
  210. package/dist/9568.cocolight-api-client.mjs.js +0 -1
  211. package/dist/cocolight-api-client.mjs.js +0 -1
  212. package/src/Api.ts +0 -348
  213. package/src/ApiClient.ts +0 -1994
  214. package/src/EJSONType.ts +0 -103
  215. package/src/api/Action.ts +0 -665
  216. package/src/api/Answer.ts +0 -1392
  217. package/src/api/Badge.ts +0 -143
  218. package/src/api/BaseEntity.ts +0 -6384
  219. package/src/api/Classified.ts +0 -175
  220. package/src/api/Comment.ts +0 -280
  221. package/src/api/EndpointApi.ts +0 -2270
  222. package/src/api/EndpointApi.types.ts +0 -6566
  223. package/src/api/EntityRegistry.ts +0 -324
  224. package/src/api/Event.ts +0 -360
  225. package/src/api/Form.ts +0 -282
  226. package/src/api/News.ts +0 -547
  227. package/src/api/Notifications.ts +0 -196
  228. package/src/api/Organization.ts +0 -771
  229. package/src/api/Poi.ts +0 -242
  230. package/src/api/Project.ts +0 -545
  231. package/src/api/User.ts +0 -1889
  232. package/src/api/UserApi.ts +0 -192
  233. package/src/api/serverDataType/Action.ts +0 -177
  234. package/src/api/serverDataType/Answer.ts +0 -106
  235. package/src/api/serverDataType/Classified.ts +0 -152
  236. package/src/api/serverDataType/Comment.ts +0 -88
  237. package/src/api/serverDataType/Country.ts +0 -1
  238. package/src/api/serverDataType/Event.ts +0 -112
  239. package/src/api/serverDataType/Form.ts +0 -157
  240. package/src/api/serverDataType/News.ts +0 -138
  241. package/src/api/serverDataType/Notification.ts +0 -81
  242. package/src/api/serverDataType/Organization.ts +0 -111
  243. package/src/api/serverDataType/Poi.ts +0 -75
  244. package/src/api/serverDataType/Project.ts +0 -115
  245. package/src/api/serverDataType/User.ts +0 -112
  246. package/src/api/serverDataType/Zone.ts +0 -33
  247. package/src/api/serverDataType/common.ts +0 -84
  248. package/src/costum/normalize.ts +0 -7
  249. package/src/costum/registry.ts +0 -138
  250. package/src/costum/runtime-map.ts +0 -221
  251. package/src/costum/runtime.ts +0 -274
  252. package/src/costum/schemas/CercleTravailleursSociauxLiberauxLaPlumeSociale.ts +0 -19
  253. package/src/costum/schemas/FabEn.ts +0 -19
  254. package/src/costum/schemas/LivingLabInnovationSocialeBraspanon.ts +0 -19
  255. package/src/costum/schemas/alfph.ts +0 -27
  256. package/src/costum/schemas/campagne.ts +0 -19
  257. package/src/costum/schemas/chtitube.ts +0 -19
  258. package/src/costum/schemas/circuitCourt.ts +0 -19
  259. package/src/costum/schemas/cmcasHauteBretagne.ts +0 -19
  260. package/src/costum/schemas/coFinancementTierslieux.ts +0 -27
  261. package/src/costum/schemas/coeurNumerique.ts +0 -19
  262. package/src/costum/schemas/communLundi.ts +0 -19
  263. package/src/costum/schemas/cressReunion.ts +0 -35
  264. package/src/costum/schemas/cressReunionNetwork.ts +0 -35
  265. package/src/costum/schemas/ctenat.ts +0 -43
  266. package/src/costum/schemas/cyberReunion.ts +0 -19
  267. package/src/costum/schemas/ekisphere.ts +0 -35
  268. package/src/costum/schemas/equipementsSportifs974.ts +0 -19
  269. package/src/costum/schemas/federationDesCae.ts +0 -19
  270. package/src/costum/schemas/formationGenerique.ts +0 -35
  271. package/src/costum/schemas/franceTierslieux.ts +0 -19
  272. package/src/costum/schemas/hinaura.ts +0 -27
  273. package/src/costum/schemas/hubmayotte.ts +0 -19
  274. package/src/costum/schemas/hubnouvellecaledonie.ts +0 -19
  275. package/src/costum/schemas/hubpolynesiefrancaise.ts +0 -19
  276. package/src/costum/schemas/hubreunion.ts +0 -19
  277. package/src/costum/schemas/hubterritoires.ts +0 -19
  278. package/src/costum/schemas/hubwallisetfutuna.ts +0 -19
  279. package/src/costum/schemas/hva.ts +0 -27
  280. package/src/costum/schemas/ibv2.ts +0 -19
  281. package/src/costum/schemas/institutBleu.ts +0 -19
  282. package/src/costum/schemas/journalInsoumisChambery.ts +0 -27
  283. package/src/costum/schemas/kpacite.ts +0 -19
  284. package/src/costum/schemas/laCompagnieDesTierslieux.ts +0 -43
  285. package/src/costum/schemas/laMaisonDesFaiseurs.ts +0 -19
  286. package/src/costum/schemas/laReunionPourUnNumeriqueInclusif.ts +0 -19
  287. package/src/costum/schemas/laSemaineDesTierslieux.ts +0 -19
  288. package/src/costum/schemas/labEnCommuns.ts +0 -19
  289. package/src/costum/schemas/lakou.ts +0 -27
  290. package/src/costum/schemas/lesCommunsDesTierslieux.ts +0 -19
  291. package/src/costum/schemas/mayottePourUnNumeriqueInclusif.ts +0 -19
  292. package/src/costum/schemas/meir.ts +0 -27
  293. package/src/costum/schemas/navigatorDesTierslieux.ts +0 -19
  294. package/src/costum/schemas/notragora.ts +0 -27
  295. package/src/costum/schemas/nouvellecaledoniePourUnNumeriqueInclusif.ts +0 -19
  296. package/src/costum/schemas/openAtlas.ts +0 -19
  297. package/src/costum/schemas/polynesieFrancaisePourUnNumeriqueInclusif.ts +0 -19
  298. package/src/costum/schemas/prdr.ts +0 -19
  299. package/src/costum/schemas/reseauTierslieux.ts +0 -19
  300. package/src/costum/schemas/rfflabs.ts +0 -19
  301. package/src/costum/schemas/ries.ts +0 -19
  302. package/src/costum/schemas/siteDuPactePourLaTransition.ts +0 -27
  303. package/src/costum/schemas/sportSanteBienetre.ts +0 -43
  304. package/src/costum/schemas/suppa.ts +0 -19
  305. package/src/costum/schemas/terramies.ts +0 -19
  306. package/src/costum/schemas/testeTplFormation.ts +0 -35
  307. package/src/costum/schemas/tierslieuxbelgique.ts +0 -19
  308. package/src/costum/schemas/tierslieuxorg1.ts +0 -35
  309. package/src/costum/schemas/transiter.ts +0 -35
  310. package/src/costum/schemas/vhelioPeiTour2025.ts +0 -19
  311. package/src/costum/schemas/wallisetfutunaPourUnNumeriqueInclusif.ts +0 -19
  312. package/src/costum/symbol.ts +0 -26
  313. package/src/costum/types.ts +0 -895
  314. package/src/endpoints.module.ts +0 -4253
  315. package/src/error.ts +0 -86
  316. package/src/forms/entityForm.ts +0 -142
  317. package/src/index.ts +0 -161
  318. package/src/mixin/UserMixin.ts +0 -4
  319. package/src/types/api-responses.ts +0 -217
  320. package/src/types/entities.ts +0 -58
  321. package/src/types/error-guards.ts +0 -230
  322. package/src/types/index.ts +0 -41
  323. package/src/types/payloads.ts +0 -21
  324. package/src/types/transforms.ts +0 -119
  325. package/src/utils/FileOfflineStorageStrategy.node.ts +0 -50
  326. package/src/utils/FileStorageStrategy.node.ts +0 -63
  327. package/src/utils/MultiServerFileStorageStrategy.node.ts +0 -67
  328. package/src/utils/MultiServerTokenStorageStrategy.ts +0 -139
  329. package/src/utils/OfflineClientManager.ts +0 -216
  330. package/src/utils/OfflineQueueStorageStrategy.ts +0 -47
  331. package/src/utils/TokenStorage.ts +0 -77
  332. package/src/utils/compat.ts +0 -12
  333. package/src/utils/createDefaultMultiServerTokenStorageStrategy.ts +0 -35
  334. package/src/utils/createDefaultOfflineStrategy.ts +0 -34
  335. package/src/utils/createDefaultTokenStorageStrategy.ts +0 -33
  336. package/src/utils/reactive.ts +0 -243
  337. package/src/utils/stream-utils.node.ts +0 -12
@@ -1,196 +0,0 @@
1
- import { batch, reactive } from "../utils/reactive.js";
2
-
3
- import type {
4
- NotificationAuthor,
5
- NotificationItemData
6
- } from "./serverDataType/Notification.js";
7
-
8
- type User = import("./User.js").User; // backref ; User porte __entityTag donc non proxifié par reactive()
9
-
10
- /** Taille de page côté serveur (ActivityStream::getNotificationsByStep indexStep=15). */
11
- const DEFAULT_PAGE_SIZE = 15;
12
-
13
- /** isUnread/isUnseen de CE destinataire (le serveur unset la clé quand lu/vu -> absence = faux). */
14
- function stateFor(data: NotificationItemData, userId: string | null, key: "isUnread" | "isUnseen"): boolean {
15
- if (!userId) return false;
16
- return data?.notify?.id?.[userId]?.[key] === true;
17
- }
18
-
19
- /**
20
- * Item de notification fin. N'étend PAS BaseEntity : il garde la donnée brute, un backref
21
- * User (pour router les appels via callIsMe + endpointApi) et un backref manager (pour le recount).
22
- * Les drapeaux lu/vu sont réactifs (objet reactive({...}) — surface scalaire fiable).
23
- */
24
- export class Notification {
25
- private readonly _data: NotificationItemData;
26
- private readonly _owner: User;
27
- private _manager: Notifications | null;
28
- private readonly _state: { isUnread: boolean; isUnseen: boolean };
29
-
30
- constructor(data: NotificationItemData, owner: User, manager: Notifications | null = null) {
31
- this._data = data;
32
- this._owner = owner;
33
- this._manager = manager;
34
- const uid = owner.userId;
35
- this._state = reactive({
36
- isUnread: stateFor(data, uid, "isUnread"),
37
- isUnseen: stateFor(data, uid, "isUnseen")
38
- });
39
- }
40
-
41
- static fromData(data: NotificationItemData, owner: User, manager: Notifications | null = null): Notification {
42
- return new Notification(data, owner, manager);
43
- }
44
-
45
- /** Lie l'item à son manager (appelé par le manager au wrap). */
46
- _attach(manager: Notifications): this { this._manager = manager; return this; }
47
-
48
- get id(): string { return this._data.id; } // injecté par ApiClient._transformData (clé de la map = hex)
49
- get isUnread(): boolean { return this._state.isUnread; } // lecture réactive
50
- get isUnseen(): boolean { return this._state.isUnseen; }
51
- get data(): NotificationItemData { return this._data; }
52
- get author(): NotificationAuthor { return this._data.author; }
53
- get createdAt(): Date {
54
- // ApiClient._transformData rend `created` en Date. La string ISO survient après un
55
- // round-trip toJSON()->JSON.parse->restore(). On fait confiance à la normalisation amont.
56
- const c = this._data.created;
57
- return c instanceof Date ? c : new Date(c as string | number);
58
- }
59
-
60
- // setters locaux (utilisés par l'optimiste, sans appel réseau)
61
- _setReadLocal(): void { this._state.isUnread = false; }
62
- _setSeenLocal(): void { this._state.isUnseen = false; }
63
- _restoreLocal(unread: boolean, unseen: boolean): void { this._state.isUnread = unread; this._state.isUnseen = unseen; }
64
-
65
- /** Marque CET item comme lu : optimiste + rollback + recount manager. */
66
- async markRead(): Promise<void> {
67
- if (!this._state.isUnread) return;
68
- const pu = this._state.isUnread, ps = this._state.isUnseen;
69
- this._setReadLocal();
70
- this._manager?._recount();
71
- try {
72
- await this._owner.markNotificationAsRead(this.id);
73
- } catch (err) {
74
- this._restoreLocal(pu, ps);
75
- this._manager?._recount();
76
- throw err;
77
- }
78
- }
79
-
80
- /** Pas d'endpoint "seen" par item : flip local uniquement. */
81
- markSeen(): void { this._setSeenLocal(); this._manager?._recount(); }
82
-
83
- toJSON(): NotificationItemData { return this._data; }
84
- }
85
-
86
- /**
87
- * Gestionnaire de notifications de l'utilisateur connecté. Accroché à User via `me.notifications`.
88
- * N'étend PAS BaseEntity. Items dans un tableau SIMPLE (jamais proxifié) ; seuls les scalaires
89
- * vivent dans un reactive({...}) (loadedUnreadCount, unseenTotal, cursor, hasMore, version).
90
- * Aucun effect/computed créé ici (pas d'API de dispose -> pas de fuite).
91
- */
92
- export class Notifications {
93
- private readonly _owner: User;
94
- private readonly _pageSize: number;
95
- private _items: Notification[] = [];
96
- private readonly _state: {
97
- loadedUnreadCount: number; // non-lus PARMI les items chargés (dérivé)
98
- unseenTotal: number; // total NON-VUS côté serveur (countNotif) — badge cloche
99
- cursor: number; // offset indexMin (nb d'items déjà chargés)
100
- hasMore: boolean;
101
- version: number; // bump à chaque mutation de liste -> réactivité de `items`
102
- };
103
-
104
- constructor(owner: User, pageSize: number = DEFAULT_PAGE_SIZE) {
105
- this._owner = owner;
106
- this._pageSize = pageSize;
107
- this._state = reactive({ loadedUnreadCount: 0, unseenTotal: 0, cursor: 0, hasMore: true, version: 0 });
108
- }
109
-
110
- // surface réactive consommateur
111
- get items(): Notification[] { void this._state.version; return this._items; }
112
- get loadedUnreadCount(): number { return this._state.loadedUnreadCount; }
113
- get unseenTotal(): number { return this._state.unseenTotal; } // badge "non vus"
114
- get hasMore(): boolean { return this._state.hasMore; }
115
-
116
- _recount(): void { this._state.loadedUnreadCount = this._items.filter((n) => n.isUnread).length; }
117
- private _wrap(raw: NotificationItemData[]): Notification[] { return raw.map((d) => Notification.fromData(d, this._owner, this)); }
118
- private _commit(items: Notification[]): void { this._items = items; this._state.version++; this._recount(); }
119
-
120
- /** Première page (reset le curseur). Tri serveur : updated desc, 15/page. */
121
- async list({ indexMin = 0 }: { indexMin?: number } = {}): Promise<Notification[]> {
122
- const next = this._wrap(await this._owner.fetchNotifications({ indexMin }));
123
- this._commit(next);
124
- this._state.cursor = next.length;
125
- this._state.hasMore = next.length >= this._pageSize;
126
- return next;
127
- }
128
-
129
- /** Page suivante (curseur indexMin = nb d'items déjà chargés). Concatène par réassignation. */
130
- async loadMore(): Promise<Notification[]> {
131
- if (!this._state.hasMore) return [];
132
- const page = this._wrap(await this._owner.fetchNotifications({ indexMin: this._state.cursor }));
133
- this._commit([...this._items, ...page]);
134
- this._state.cursor += page.length;
135
- this._state.hasMore = page.length >= this._pageSize;
136
- return page;
137
- }
138
-
139
- /** Recharge depuis le début. */
140
- async refresh(): Promise<Notification[]> { this._state.cursor = 0; this._state.hasMore = true; return this.list(); }
141
-
142
- /**
143
- * Badge : total des NON-VUS via GET_NOTIFICATIONS_COUNT (refreshTimestamp = maintenant ->
144
- * liste vide + countNotif). Met à jour unseenTotal et le retourne.
145
- */
146
- async count(): Promise<number> {
147
- this._state.unseenTotal = await this._owner.fetchNotificationsCount();
148
- return this._state.unseenTotal;
149
- }
150
-
151
- /**
152
- * PUR : convertit des `NotificationItemData[]` plats (ex. cache React Query après
153
- * hydratation SSR) en `Notification[]` liées à l'utilisateur, SANS modifier l'état du
154
- * manager. À utiliser dans un `select` React Query (cache plat -> instances vivantes).
155
- */
156
- toItems(data: NotificationItemData[]): Notification[] {
157
- return this._wrap(data);
158
- }
159
-
160
- async markAllRead(): Promise<void> { await this._bulk("read"); }
161
- async markAllSeen(): Promise<void> { await this._bulk("seen"); }
162
-
163
- private async _bulk(action: "seen" | "read"): Promise<void> {
164
- const snap = this._items.map((n) => ({ n, u: n.isUnread, s: n.isUnseen }));
165
- batch(() => { for (const { n } of snap) { if (action === "read") n._setReadLocal(); else n._setSeenLocal(); } });
166
- if (action === "seen") this._state.unseenTotal = 0;
167
- this._recount();
168
- try {
169
- await this._owner.markAllNotifications(action);
170
- } catch (err) {
171
- batch(() => { for (const { n, u, s } of snap) n._restoreLocal(u, s); });
172
- this._recount();
173
- throw err;
174
- }
175
- }
176
-
177
- /** Supprime toutes les notifications de l'utilisateur + vide l'état local. */
178
- async clear(): Promise<void> {
179
- await this._owner.removeAllNotifications();
180
- this._commit([]);
181
- this._state.cursor = 0;
182
- this._state.hasMore = false;
183
- this._state.unseenTotal = 0;
184
- }
185
-
186
- // sérialisation (donnée brute ; le backref owner + l'état réactif sont re-construits au restore)
187
- toJSON(): NotificationItemData[] { return this._items.map((n) => n.toJSON()); }
188
- restore(rawItems: NotificationItemData[]): this {
189
- this._commit(this._wrap(rawItems));
190
- this._state.cursor = rawItems.length;
191
- return this;
192
- }
193
- static restore(rawItems: NotificationItemData[], owner: User): Notifications {
194
- return new Notifications(owner).restore(rawItems);
195
- }
196
- }