@coopenomics/desktop 2.2.10 → 2025.5.2

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 (366) hide show
  1. package/.env-example +6 -1
  2. package/.env-testnet +8 -0
  3. package/Dockerfile +12 -0
  4. package/alias-resolver.js +35 -0
  5. package/extensions/market/install.ts +78 -0
  6. package/extensions/market-admin/install.ts +42 -0
  7. package/extensions/participant/install.ts +125 -0
  8. package/extensions/powerup/install.ts +20 -0
  9. package/extensions/soviet/install.ts +83 -0
  10. package/package.json +14 -7
  11. package/quasar.config.cjs +28 -15
  12. package/src/app/App.vue +44 -73
  13. package/src/app/layouts/default.vue +40 -0
  14. package/src/app/layouts/useDefaultLayoutLogic.ts +59 -0
  15. package/src/app/providers/router.ts +4 -3
  16. package/src/app/providers/routes/index.ts +19 -34
  17. package/src/app/styles/style.css +4 -0
  18. package/src/boot/init.ts +6 -0
  19. package/src/boot/sentry.ts +14 -14
  20. package/src/desktops/index.ts +0 -6
  21. package/src/entities/Account/model/index.ts +1 -1
  22. package/src/entities/Agenda/api/index.ts +20 -0
  23. package/src/entities/Agenda/index.ts +2 -0
  24. package/src/entities/Agenda/model/index.ts +2 -0
  25. package/src/entities/Agenda/model/store.ts +36 -0
  26. package/src/entities/Agenda/model/types.ts +4 -0
  27. package/src/entities/Branch/model/index.ts +1 -1
  28. package/src/entities/Desktop/api/index.ts +16 -1
  29. package/src/entities/Desktop/model/store.ts +112 -106
  30. package/src/entities/Desktop/model/types.ts +14 -1
  31. package/src/entities/Document/api/index.ts +24 -0
  32. package/src/entities/Document/index.ts +2 -0
  33. package/src/entities/Document/model/store.ts +117 -0
  34. package/src/entities/Document/model/types.ts +18 -0
  35. package/src/entities/Meet/api/index.ts +58 -0
  36. package/src/entities/Meet/index.ts +2 -0
  37. package/src/entities/Meet/model/store.ts +72 -0
  38. package/src/entities/Meet/types/index.ts +7 -0
  39. package/src/entities/Payment/api/index.ts +20 -0
  40. package/src/entities/Payment/model/index.ts +2 -0
  41. package/src/entities/Payment/model/store.ts +62 -0
  42. package/src/entities/Payment/model/types.ts +7 -0
  43. package/src/entities/Session/model/store.ts +4 -4
  44. package/src/entities/System/model/store.ts +1 -1
  45. package/src/entities/User/model/stores.ts +3 -1
  46. package/src/entities/Wallet/api/index.ts +15 -33
  47. package/src/entities/Wallet/model/stores.ts +3 -23
  48. package/src/entities/Wallet/model/types.ts +2 -3
  49. package/src/env.d.ts +2 -0
  50. package/src/features/Agreementer/SignAgreementDialog/ui/SignAgreementDialog.vue +1 -1
  51. package/src/features/Branch/SelectBranch/index.ts +2 -0
  52. package/src/features/Branch/SelectBranch/ui/SelectBranchOverlay.vue +52 -105
  53. package/src/features/Decision/CreateProject/ui/CreateProjectFreeDecisionButton.vue +1 -1
  54. package/src/features/Decision/ParticipantApplication/model/index.ts +38 -0
  55. package/src/features/FreeDecision/CreateProject/model/index.ts +92 -0
  56. package/src/features/FreeDecision/CreateProject/ui/CreateProjectFreeDecisionButton.vue +51 -0
  57. package/src/features/FreeDecision/CreateProject/ui/index.ts +1 -0
  58. package/src/features/FreeDecision/GenerateDecision/index.ts +1 -0
  59. package/src/features/FreeDecision/GenerateDecision/model/index.ts +36 -0
  60. package/src/features/FreeDecision/index.ts +2 -0
  61. package/src/features/Meet/CloseMeetWithDecision/index.ts +1 -0
  62. package/src/features/Meet/CloseMeetWithDecision/model/index.ts +92 -0
  63. package/src/features/Meet/CreateMeet/index.ts +2 -0
  64. package/src/features/Meet/CreateMeet/model/index.ts +65 -0
  65. package/src/features/Meet/CreateMeet/ui/CreateMeet.vue +34 -0
  66. package/src/features/Meet/CreateMeet/ui/CreateMeetForm.vue +136 -0
  67. package/src/features/Meet/CreateMeet/ui/index.ts +2 -0
  68. package/src/features/Meet/GenerateAgenda/index.ts +1 -0
  69. package/src/features/Meet/GenerateAgenda/model/index.ts +18 -0
  70. package/src/features/Meet/GenerateBallot/index.ts +1 -0
  71. package/src/features/Meet/GenerateBallot/model/index.ts +18 -0
  72. package/src/features/Meet/GenerateNotification/index.ts +1 -0
  73. package/src/features/Meet/GenerateNotification/model/index.ts +18 -0
  74. package/src/features/Meet/GenerateSovietDecision/index.ts +1 -0
  75. package/src/features/Meet/GenerateSovietDecision/model/index.ts +48 -0
  76. package/src/features/Meet/MeetDetailsManagement/index.ts +1 -0
  77. package/src/features/Meet/MeetDetailsManagement/model/index.ts +121 -0
  78. package/src/features/Meet/RestartMeet/index.ts +2 -0
  79. package/src/features/Meet/RestartMeet/model/index.ts +54 -0
  80. package/src/features/Meet/RestartMeet/ui/RestartMeet.vue +46 -0
  81. package/src/features/Meet/RestartMeet/ui/RestartMeetForm.vue +92 -0
  82. package/src/features/Meet/RestartMeet/ui/index.ts +2 -0
  83. package/src/features/Meet/VoteOnMeet/index.ts +1 -0
  84. package/src/features/Meet/VoteOnMeet/model/index.ts +18 -0
  85. package/src/features/Payment/SetStatus/api/index.ts +20 -0
  86. package/src/features/Payment/SetStatus/index.ts +1 -0
  87. package/src/features/Payment/SetStatus/model/index.ts +30 -0
  88. package/src/features/{Order → Payment}/SetStatus/ui/SetOrderPaidStatusButton/SetOrderPaidStatusButton.vue +7 -3
  89. package/src/features/PaymentMethod/AddPaymentMethod/model/index.ts +2 -2
  90. package/src/features/PaymentMethod/AddPaymentMethod/ui/AddPaymentButton.vue +1 -1
  91. package/src/features/PaymentMethod/DeletePaymentMethod/model/index.ts +1 -1
  92. package/src/features/PaymentMethod/DeletePaymentMethod/ui/DeletePaymentMethodButton.vue +3 -1
  93. package/src/features/Request/CancelRequest/ui/CancelButton.vue +1 -1
  94. package/src/features/Request/ConfirmRecieveOnRequest/ui/ConfirmRecieveOnRequest.vue +1 -1
  95. package/src/features/Request/CreateParentOffer/ui/CreateParentOfferForm/CreateParentOfferForm.vue +4 -5
  96. package/src/features/Request/CreateParentOffer/ui/ImageUploaderWithPreview/ImageUploaderWithPreview.vue +5 -3
  97. package/src/features/Request/DisputeOnRequest/ui/DisputeOnRequestButton.vue +1 -1
  98. package/src/features/Request/ModerateRequest/ui/ModerateRequestButton.vue +2 -2
  99. package/src/features/Request/PublishRequest/ui/PublishRequestButton.vue +1 -1
  100. package/src/features/Request/RecieveOnRequest/ui/RecieveOnRequestButton.vue +1 -1
  101. package/src/features/Request/UnpublishRequest/ui/UnpublishRequestButton.vue +1 -1
  102. package/src/features/Union/AddCooperative/model/index.ts +5 -5
  103. package/src/features/Union/AddCooperative/ui/AddCooperativeForm.vue +6 -9
  104. package/src/features/User/AddUser/ui/AddUserDialog/AddUserDialog.vue +4 -4
  105. package/src/features/User/LoginUser/model/index.ts +3 -7
  106. package/src/features/User/LoginUser/ui/LoginForm/LoginForm.vue +0 -6
  107. package/src/features/User/Logout/model/index.ts +2 -1
  108. package/src/features/Wallet/DepositToWallet/ui/DepositButton/DepositButton.vue +10 -7
  109. package/src/features/Wallet/WithdrawFromWallet/ui/withdrawButton.vue +7 -6
  110. package/src/pages/Blank/index.ts +1 -0
  111. package/src/pages/Contacts/ContactsPage.vue +64 -0
  112. package/src/{widgets/Cooperative/Contacts → pages/Cooperative/ChangeContacts}/ui/index.ts +0 -1
  113. package/src/{widgets/Cooperative/Contributions/ui/ChangeContributions.vue → pages/Cooperative/ChangeRegisterPayments/ui/ChangeRegisterPayments.vue} +12 -11
  114. package/src/pages/Cooperative/ChangeRegisterPayments/ui/index.ts +1 -0
  115. package/src/pages/Cooperative/ListOfAgenda/index.ts +1 -0
  116. package/src/pages/Cooperative/ListOfAgenda/ui/ListOfAgendaQuestions.vue +118 -0
  117. package/src/pages/Cooperative/ListOfAgenda/ui/index.ts +1 -0
  118. package/src/pages/Cooperative/ListOfDocuments/ListOfDocumentsPage.vue +24 -0
  119. package/src/pages/Cooperative/ListOfMeets/model/index.ts +1 -0
  120. package/src/pages/Cooperative/ListOfMeets/model/model.ts +117 -0
  121. package/src/pages/Cooperative/ListOfMeets/ui/ListOfMeetsPage.vue +90 -0
  122. package/src/pages/Cooperative/ListOfMeets/ui/index.ts +1 -0
  123. package/src/pages/Cooperative/ListOfOrders/index.ts +1 -1
  124. package/src/pages/Cooperative/ListOfOrders/ui/ListOfOrdersPage.vue +0 -4
  125. package/src/pages/Cooperative/ListOfParticipants/ui/ListOfParticipantsPage.vue +61 -10
  126. package/src/pages/Cooperative/ListOfParticipants/ui/index.ts +1 -1
  127. package/src/pages/Cooperative/MeetDetails/ui/MeetDetailsPage.vue +88 -0
  128. package/src/pages/Cooperative/MeetDetails/ui/index.ts +1 -0
  129. package/src/pages/Cooperative/MemberBranchList/ui/index.ts +1 -0
  130. package/src/pages/Cooperative/Payments/index.ts +1 -0
  131. package/src/pages/Cooperative/Payments/ui/PaymentsPage.vue +7 -0
  132. package/src/pages/{ExtStore → ExtensionStore}/ExtensionPage/ExtensionPage.vue +51 -24
  133. package/src/pages/{ExtStore → ExtensionStore}/ExtensionsShowcase/ExtensionsShowcase.vue +2 -2
  134. package/src/pages/{ExtStore → ExtensionStore}/InstalledExtensions/InstalledExtensions.vue +2 -2
  135. package/src/pages/Marketplace/OfferPage/ui/OfferPage.vue +1 -1
  136. package/src/pages/Marketplace/Showcase/ui/ShowcasePage.vue +1 -1
  137. package/src/pages/Marketplace/SuppliesList/ui/SuppliesListPage.vue +1 -1
  138. package/src/pages/Marketplace/UserParentOffers/ui/UserParentOffersPage.vue +1 -1
  139. package/src/pages/Marketplace/UserSuppliesList/ui/UserSuppliesListPage.vue +1 -1
  140. package/src/pages/PermissionDenied/index.ts +1 -0
  141. package/src/pages/Registrator/SignUp/EmailInput.vue +4 -3
  142. package/src/pages/Registrator/SignUp/GenerateAccount.vue +2 -3
  143. package/src/pages/Registrator/SignUp/PayInitial.vue +1 -1
  144. package/src/pages/Registrator/SignUp/ReadStatement.vue +2 -2
  145. package/src/pages/Registrator/SignUp/SelectBranch.vue +2 -2
  146. package/src/pages/Registrator/SignUp/SignStatement.vue +2 -2
  147. package/src/pages/Registrator/SignUp/SignUp.vue +5 -12
  148. package/src/pages/Registrator/SignUp/WaitingRegistration.vue +1 -5
  149. package/src/pages/Registrator/SignUp/Welcome.vue +6 -3
  150. package/src/pages/Union/ConnectionAgreement/index.ts +1 -0
  151. package/src/pages/Union/ListOfCooperatives/ui/UnionPageListOfCooperatives.vue +139 -6
  152. package/src/pages/User/DocumentsPage/UserDocumentsPage.vue +23 -0
  153. package/src/pages/User/DocumentsPage/index.ts +1 -0
  154. package/src/pages/User/PaymentsPage/ui/UserPayments.vue +11 -0
  155. package/src/pages/User/PaymentsPage/ui/index.ts +1 -0
  156. package/src/pages/User/ProfilePage/index.ts +1 -0
  157. package/src/pages/User/ProfilePage/ui/ProfilePage.vue +114 -0
  158. package/src/pages/User/ProfilePage/ui/index.ts +1 -0
  159. package/src/pages/User/SettingsPage/ui/index.ts +1 -1
  160. package/src/pages/User/WalletPage/index.ts +1 -0
  161. package/src/pages/User/WalletPage/ui/WalletPage.vue +72 -0
  162. package/src/pages/User/WalletPage/ui/index.ts +1 -0
  163. package/src/processes/init-app/index.ts +28 -0
  164. package/src/processes/init-installed-extensions/index.ts +25 -0
  165. package/src/processes/init-wallet/index.ts +40 -0
  166. package/src/processes/navigation-guard-setup/index.ts +45 -0
  167. package/src/processes/process-decisions/index.ts +275 -0
  168. package/src/processes/select-branch/index.ts +80 -0
  169. package/src/processes/watch-branch-overlay/index.ts +38 -0
  170. package/src/processes/watch-desktop-health/index.ts +33 -0
  171. package/src/shared/api/alerts.ts +2 -6
  172. package/src/shared/api/axios.ts +5 -5
  173. package/src/shared/api/client.ts +4 -4
  174. package/src/shared/api/eosio.ts +2 -2
  175. package/src/shared/api/indexDB.ts +3 -0
  176. package/src/shared/api/utils.ts +2 -2
  177. package/src/shared/config/Environment.ts +68 -0
  178. package/src/shared/config/index.ts +2 -1
  179. package/src/shared/hooks/index.ts +2 -0
  180. package/src/shared/hooks/useAgendaPoints.ts +24 -0
  181. package/src/shared/hooks/useWindowSize.ts +13 -0
  182. package/src/shared/lib/composables/useDisplayName.ts +34 -0
  183. package/src/shared/lib/navigation/index.ts +2 -0
  184. package/src/shared/lib/navigation/routeUtils.ts +51 -0
  185. package/src/shared/lib/navigation/useBackButton.ts +63 -0
  186. package/src/shared/lib/proxy/dicebear-collection.cjs +21 -0
  187. package/src/shared/lib/proxy/dicebear-core.cjs +20 -0
  188. package/src/shared/lib/proxy/email-regex.cjs +19 -0
  189. package/src/shared/lib/utils/dates/validateDateWithinRange.ts +23 -0
  190. package/src/shared/ui/BaseDocument/BaseDocument.vue +120 -90
  191. package/src/{components/menu/blockchainStatus.vue → shared/ui/BlockchainStatusBar/BlockchainStatusBar.vue} +1 -0
  192. package/src/shared/ui/BlockchainStatusBar/index.ts +1 -0
  193. package/src/shared/ui/CardStyles/index.scss +61 -0
  194. package/src/shared/ui/ClientOnly/ClientOnly.vue +15 -0
  195. package/src/shared/ui/ClientOnly/index.ts +1 -0
  196. package/src/shared/ui/ComplexDocument/ComplexDocument.vue +31 -8
  197. package/src/shared/ui/CopyableInput/index.ts +1 -0
  198. package/src/shared/ui/CopyableInput/ui/CopyableInput.vue +62 -0
  199. package/src/shared/ui/EditableEntrepreneurCard/EditableEntrepreneurCard.vue +9 -8
  200. package/src/shared/ui/EditableIndividualCard/EditableIndividualCard.vue +10 -10
  201. package/src/shared/ui/EditableOrganizationCard/EditableOrganizationCard.vue +57 -47
  202. package/src/shared/ui/Form/Form.vue +3 -1
  203. package/src/shared/ui/InputStyles/index.scss +29 -0
  204. package/src/shared/ui/TabStyles/index.scss +53 -0
  205. package/src/shared/ui/index.ts +1 -0
  206. package/src/{components/history/AccountEvents.vue → widgets/AccountActions/AccountActionsPage.vue} +2 -2
  207. package/src/widgets/AccountActions/index.ts +1 -0
  208. package/src/widgets/BankDetailsCard/ui/BankDetailsCard.vue +2 -2
  209. package/src/widgets/BranchCard/ui/BranchCard.vue +2 -2
  210. package/src/widgets/Cooperative/Documents/ListOfDocuments/ui/DocumentCard.vue +48 -0
  211. package/src/widgets/Cooperative/Documents/ListOfDocuments/ui/DocumentsTable.vue +162 -0
  212. package/src/widgets/Cooperative/Documents/ListOfDocuments/ui/ListOfDocumentsWidget.vue +77 -120
  213. package/src/widgets/Cooperative/Documents/ListOfDocuments/ui/index.ts +3 -1
  214. package/src/widgets/Cooperative/Orders/ListOfOrders/ui/ListOfOrdersWidget.vue +135 -128
  215. package/src/widgets/Cooperative/Orders/ListOfOrders/ui/OrderCard.vue +74 -0
  216. package/src/widgets/Cooperative/Orders/ListOfOrders/ui/index.ts +2 -1
  217. package/src/widgets/Cooperative/Payments/ListOfPayments/ui/ListOfPaymentsWidget.vue +216 -0
  218. package/src/widgets/Cooperative/Payments/ListOfPayments/ui/PaymentCard.vue +73 -0
  219. package/src/widgets/Cooperative/Payments/ListOfPayments/ui/index.ts +2 -0
  220. package/src/widgets/Cooperative/Payments/index.ts +1 -0
  221. package/src/widgets/Desktop/LeftDrawerMenu/LeftDrawerMenu.vue +3 -2
  222. package/src/widgets/Desktop/SecondLevelMenuList/SecondLevelMenuList.vue +58 -91
  223. package/src/widgets/Desktop/WorkspaceMenu/WorkspaceMenu.vue +114 -59
  224. package/src/widgets/{ExtStore/ExtensionCard → ExtensionCard}/ExtensionCard.vue +12 -7
  225. package/src/widgets/Header/BackButton/BackButton.vue +25 -0
  226. package/src/widgets/Header/BackButton/index.ts +1 -0
  227. package/src/widgets/Header/CommonHeader/CooperativeSettingsHeader.vue +34 -0
  228. package/src/widgets/Header/CommonHeader/ExtstoreHeader.vue +41 -0
  229. package/src/widgets/Header/CommonHeader/Header.vue +33 -198
  230. package/src/widgets/Header/CommonHeader/HeaderStyles.scss +22 -0
  231. package/src/widgets/Header/CommonHeader/MainHeader.vue +88 -0
  232. package/src/widgets/Header/CommonHeader/UserSettingsHeader.vue +29 -0
  233. package/src/widgets/Header/CommonHeader/index.ts +1 -1
  234. package/src/widgets/Header/SettingsDropdown/SettingsDropdown.vue +0 -6
  235. package/src/widgets/{Request → Marketplace}/SupplyOrderRequestCard/ui/Base/Base.vue +2 -2
  236. package/src/widgets/Meets/MeetDetailsActions/MeetDetailsActions.vue +51 -0
  237. package/src/widgets/Meets/MeetDetailsActions/index.ts +1 -0
  238. package/src/widgets/Meets/MeetDetailsActions/model.ts +46 -0
  239. package/src/widgets/Meets/MeetDetailsAgenda/MeetDetailsAgenda.vue +29 -0
  240. package/src/widgets/Meets/MeetDetailsAgenda/index.ts +1 -0
  241. package/src/widgets/Meets/MeetDetailsHeader/MeetDetailsHeader.vue +40 -0
  242. package/src/widgets/Meets/MeetDetailsHeader/index.ts +1 -0
  243. package/src/widgets/Meets/MeetDetailsVoting/MeetDetailsVoting.vue +77 -0
  244. package/src/widgets/Meets/MeetDetailsVoting/index.ts +1 -0
  245. package/src/widgets/Meets/MeetDetailsVoting/model.ts +117 -0
  246. package/src/widgets/Meets/MeetInfoCard/ui/MeetInfoCard.vue +38 -0
  247. package/src/widgets/Meets/MeetInfoCard/ui/index.ts +1 -0
  248. package/src/widgets/Meets/MeetsTable/ui/MeetsTable.vue +118 -0
  249. package/src/widgets/Meets/MeetsTable/ui/index.ts +1 -0
  250. package/src/widgets/Participants/index.ts +1 -0
  251. package/src/widgets/Participants/ui/ParticipantCard.vue +89 -0
  252. package/src/widgets/Participants/ui/ParticipantDetails.vue +79 -0
  253. package/src/widgets/Participants/ui/ParticipantsTable.vue +129 -0
  254. package/src/widgets/Participants/ui/index.ts +4 -0
  255. package/src/widgets/Questions/index.ts +3 -0
  256. package/src/widgets/Questions/ui/QuestionCard/QuestionCard.vue +109 -0
  257. package/src/widgets/Questions/ui/QuestionCard/index.ts +1 -0
  258. package/src/widgets/Questions/ui/QuestionsTable/QuestionsTable.vue +177 -0
  259. package/src/widgets/Questions/ui/QuestionsTable/index.ts +1 -0
  260. package/src/widgets/Questions/ui/VotingButtons/VotingButtons.vue +75 -0
  261. package/src/widgets/Questions/ui/VotingButtons/index.ts +1 -0
  262. package/src/widgets/Questions/ui/index.ts +3 -0
  263. package/src/widgets/RequireAgreements/index.ts +1 -0
  264. package/src/widgets/User/PaymentMethods/ui/PaymentMethods.vue +81 -85
  265. package/src-ssr/middlewares/injectEnv.ts +49 -0
  266. package/tsconfig.json +1 -1
  267. package/extensions/powerup/boot.ts +0 -17
  268. package/src/app/providers/card/store.ts +0 -42
  269. package/src/boot/branch-selector.ts +0 -40
  270. package/src/boot/init-stores.ts +0 -51
  271. package/src/boot/navigation-guards.ts +0 -46
  272. package/src/components/menu/footerMobileMenu.vue +0 -79
  273. package/src/components/soviet/index.vue +0 -76
  274. package/src/components/soviet/staff.vue +0 -274
  275. package/src/desktops/User/index.ts +0 -1
  276. package/src/desktops/User/model/index.ts +0 -329
  277. package/src/entities/Menu/model/store.ts +0 -69
  278. package/src/entities/Menu/model/types.ts +0 -11
  279. package/src/entities/Menu/ui/index.ts +0 -1
  280. package/src/entities/Order/api/index.ts +0 -14
  281. package/src/entities/Order/model/store.ts +0 -87
  282. package/src/features/Order/SetStatus/api/index.ts +0 -7
  283. package/src/features/Order/SetStatus/model/index.ts +0 -23
  284. package/src/pages/Cooperative/Contacts/ui/ContactsPage.vue +0 -7
  285. package/src/pages/Cooperative/ListOfBranches/ui/index.ts +0 -1
  286. package/src/pages/Documentor/ListOfDocuments/ListOfDocumentsPage.vue +0 -12
  287. package/src/pages/Union/Connection/index.ts +0 -1
  288. package/src/pages/_layouts/blank.vue +0 -24
  289. package/src/pages/_layouts/default.vue +0 -79
  290. package/src/types/index.ts +0 -3
  291. package/src/widgets/Commutator/Commutator.vue +0 -7
  292. package/src/widgets/Commutator/index.ts +0 -1
  293. package/src/widgets/Cooperative/Agenda/ListOfQuestions/ui/ListOfQuestions.vue +0 -273
  294. package/src/widgets/Cooperative/Agenda/ListOfQuestions/ui/index.ts +0 -1
  295. package/src/widgets/Cooperative/Contacts/ui/Contacts.vue +0 -52
  296. package/src/widgets/Cooperative/Contributions/ui/index.ts +0 -1
  297. package/src/widgets/Cooperative/Description/ui/SetDescription.vue +0 -4
  298. package/src/widgets/Cooperative/Description/ui/index.ts +0 -1
  299. package/src/widgets/Cooperative/Participants/ListOfParticipants/ui/ListOfParticipantsWidget.vue +0 -186
  300. package/src/widgets/Cooperative/Participants/ListOfParticipants/ui/index.ts +0 -1
  301. package/src/widgets/Desktop/SecondLevelMenu/SecondLevelMenu.vue +0 -59
  302. package/src/widgets/Desktop/SecondLevelMenu/index.ts +0 -1
  303. package/src/widgets/IndividualCard/ui/IndividualCard.vue +0 -170
  304. package/src/widgets/IndividualCard/ui/index.ts +0 -1
  305. package/src/widgets/OrganizationCard/ui/OrganizationCard.vue +0 -44
  306. package/src/widgets/OrganizationCard/ui/index.ts +0 -1
  307. package/src/widgets/Union/ListOfCooperatives/ui/UnionListOfCooperatives.vue +0 -136
  308. package/src/widgets/Union/ListOfCooperatives/ui/index.ts +0 -1
  309. package/src/entities/{Menu → Document}/model/index.ts +0 -0
  310. package/src/entities/{Order → Meet}/model/index.ts +0 -0
  311. package/src/entities/{Order → Payment}/index.ts +0 -0
  312. package/src/features/{Order/SetStatus → Decision/ParticipantApplication}/index.ts +0 -0
  313. package/src/{widgets/Request/SupplyOrderRequestCard → features/FreeDecision/CreateProject}/index.ts +0 -0
  314. package/src/features/{Order → Payment}/SetStatus/ui/SetOrderCompletedStatusButton/SetOrderCompletedStatusButton.vue +0 -0
  315. package/src/features/{Order → Payment}/SetStatus/ui/SetOrderCompletedStatusButton/index.ts +0 -0
  316. package/src/features/{Order → Payment}/SetStatus/ui/SetOrderPaidStatusButton/index.ts +0 -0
  317. package/src/features/{Order → Payment}/SetStatus/ui/SetOrderRefundedStatusButton/SetOrderRefundedStatusButton.vue +0 -0
  318. package/src/features/{Order → Payment}/SetStatus/ui/SetOrderRefundedStatusButton/index.ts +0 -0
  319. package/src/pages/{blank/blank.vue → Blank/BlankPage.vue} +0 -0
  320. package/src/pages/{Cooperative/Contacts/ui → Contacts}/index.ts +0 -0
  321. package/src/pages/Cooperative/{Contacts → ChangeContacts}/index.ts +0 -0
  322. package/src/{widgets/Cooperative/Contacts → pages/Cooperative/ChangeContacts}/ui/ChangeContacts.vue +0 -0
  323. package/src/pages/Cooperative/{ListOfBranches → ChangeRegisterPayments}/index.ts +0 -0
  324. package/src/pages/{Documentor → Cooperative}/ListOfDocuments/index.ts +0 -0
  325. package/src/pages/{Installer → Cooperative/ListOfMeets}/index.ts +0 -0
  326. package/src/{widgets/Cooperative/Agenda/ListOfQuestions → pages/Cooperative/MeetDetails}/index.ts +0 -0
  327. package/src/{widgets/Cooperative/Contacts → pages/Cooperative/MemberBranchList}/index.ts +0 -0
  328. package/src/pages/Cooperative/{ListOfBranches/ui/ListOfBranchesPage.vue → MemberBranchList/ui/MemberBranchListPage.vue} +0 -0
  329. package/src/pages/{ExtStore → ExtensionStore}/BaseRoute/ExtensionStoreBase.vue +0 -0
  330. package/src/pages/{ExtStore → ExtensionStore}/BaseRoute/index.ts +0 -0
  331. package/src/pages/{ExtStore → ExtensionStore}/ExtensionPage/index.ts +0 -0
  332. package/src/pages/{ExtStore → ExtensionStore}/ExtensionsShowcase/index.ts +0 -0
  333. package/src/pages/{ExtStore → ExtensionStore}/InstalledExtensions/index.ts +0 -0
  334. package/src/pages/{_layouts/permissionDenied.vue → PermissionDenied/PermissionDenied.vue} +0 -0
  335. package/src/pages/Union/{Connection/ConnectionPage.vue → ConnectionAgreement/ConnectionAgreementPage.vue} +0 -0
  336. package/src/{widgets/Cooperative/Contributions → pages/Union/InstallCooperative}/index.ts +0 -0
  337. package/src/pages/{Installer → Union/InstallCooperative}/ui/InstallCooperativePage.vue +0 -0
  338. package/src/pages/{Installer → Union/InstallCooperative}/ui/index.ts +0 -0
  339. package/src/{widgets/Cooperative/Participants/ListOfParticipants → pages/User/PaymentsPage}/index.ts +0 -0
  340. package/src/{components/history → widgets/AccountActions}/AccountLink.vue +0 -0
  341. package/src/{components/history → widgets/AccountActions}/ActionCell.vue +0 -0
  342. package/src/{components/history → widgets/AccountActions}/DataCell.vue +0 -0
  343. package/src/widgets/{IndividualCard → Cooperative/Payments/ListOfPayments}/index.ts +0 -0
  344. package/src/widgets/{ExtStore/ExtensionCard → ExtensionCard}/index.ts +0 -0
  345. package/src/widgets/{Request → Marketplace}/CreateChildOrderCard/CreateChildOrderCard.vue +0 -0
  346. package/src/widgets/{Request → Marketplace}/CreateChildOrderCard/index.ts +0 -0
  347. package/src/widgets/{Request → Marketplace}/RequestCard/RequestCard.vue +0 -0
  348. package/src/widgets/{Request → Marketplace}/RequestCard/index.ts +0 -0
  349. package/src/{entities/Menu → widgets/Marketplace/SupplyOrderRequestCard}/index.ts +1 -1
  350. /package/src/widgets/{Request → Marketplace}/SupplyOrderRequestCard/model/index.ts +0 -0
  351. /package/src/widgets/{Request → Marketplace}/SupplyOrderRequestCard/model/types.ts +0 -0
  352. /package/src/widgets/{Request → Marketplace}/SupplyOrderRequestCard/ui/Base/index.ts +0 -0
  353. /package/src/widgets/{Request → Marketplace}/SupplyOrderRequestCard/ui/Steps/EightStep.vue +0 -0
  354. /package/src/widgets/{Request → Marketplace}/SupplyOrderRequestCard/ui/Steps/FifthStep.vue +0 -0
  355. /package/src/widgets/{Request → Marketplace}/SupplyOrderRequestCard/ui/Steps/FirstStep.vue +0 -0
  356. /package/src/widgets/{Request → Marketplace}/SupplyOrderRequestCard/ui/Steps/FourthStep.vue +0 -0
  357. /package/src/widgets/{Request → Marketplace}/SupplyOrderRequestCard/ui/Steps/SecondStep.vue +0 -0
  358. /package/src/widgets/{Request → Marketplace}/SupplyOrderRequestCard/ui/Steps/SeventhStep.vue +0 -0
  359. /package/src/widgets/{Request → Marketplace}/SupplyOrderRequestCard/ui/Steps/SixthStep.vue +0 -0
  360. /package/src/widgets/{Request → Marketplace}/SupplyOrderRequestCard/ui/Steps/ThirdStep.vue +0 -0
  361. /package/src/widgets/{Request → Marketplace}/SupplyOrderRequestCard/ui/Steps/index.ts +0 -0
  362. /package/src/widgets/{Request → Marketplace}/SupplyOrderRequestCard/ui/index.ts +0 -0
  363. /package/src/widgets/{OrganizationCard → Meets/MeetInfoCard}/index.ts +0 -0
  364. /package/src/widgets/{Union/ListOfCooperatives → Meets/MeetsTable}/index.ts +0 -0
  365. /package/src/widgets/{Agreementer/RequireAgreements → RequireAgreements}/ui/RequireAgreements.vue +0 -0
  366. /package/src/widgets/{Agreementer/RequireAgreements → RequireAgreements}/ui/index.ts +0 -0
@@ -1,135 +1,141 @@
1
1
  import { defineStore } from 'pinia'
2
- import * as Desktops from 'src/desktops'
3
- import { computed, ComputedRef, ref, Ref } from 'vue'
4
- import { FailAlert } from 'src/shared/api'
5
- import { RouteRecordRaw, type RouteLocationNormalized} from 'vue-router'
6
- import { IDesktop, IRoute, IBlockchainDesktops, IHealthResponse } from './types'
2
+ import { computed, ref } from 'vue'
3
+ import { RouteRecordRaw, type RouteMeta, type Router } from 'vue-router'
4
+ import type { IHealthResponse, IBackNavigationButton, IDesktopWithNavigation } from './types'
7
5
  import { api } from '../api'
8
6
 
9
- const desktopHashMap = {
10
- 'hash1': Desktops.UserDesktopModel.manifest, //User
11
- 'hash2': Desktops.ChairmanDesktopModel.manifest, //'Chairman',
12
- 'hash3': Desktops.MemberDesktopModel.manifest, //'Member',
13
- 'hash4': Desktops.SetupDesktopModel.manifest, //Setup
7
+ interface WorkspaceMenuItem {
8
+ workspaceName: string
9
+ title: string
10
+ icon: string
11
+ mainRoute: RouteRecordRaw | null
12
+ meta: RouteMeta
14
13
  }
15
14
 
16
- const namespace = 'desktops';
17
-
18
- interface IDesktopStore {
19
- online: Ref<boolean | undefined>
20
- health: Ref<IHealthResponse | undefined>
21
- currentDesktop: Ref<IDesktop | undefined>
22
- availableDesktops: Ref<IDesktop[]>
23
- defaultDesktopHash: Ref<string | undefined>
24
- healthCheck: () => Promise<void>;
25
- setActiveDesktop: (hash: string | undefined) => void;
26
- loadDesktops: () => Promise<void>;
27
- getSecondLevel: (currentRoute: RouteLocationNormalized) => RouteRecordRaw[]
28
- firstLevel: ComputedRef<IRoute[]>;
29
- }
30
-
31
-
32
- function getNestedRoutes(route: RouteRecordRaw):RouteRecordRaw[] {
33
- if (!route.children) {
34
- return [];
35
- }
36
-
37
- let nestedRoutes: RouteRecordRaw[] = [];
38
-
39
- for (const child of route.children) {
40
- nestedRoutes.push(child);
41
- nestedRoutes = nestedRoutes.concat(getNestedRoutes(child));
15
+ const namespace = 'desktops'
16
+
17
+ export const useDesktopStore = defineStore(namespace, () => {
18
+ const currentDesktop = ref<IDesktopWithNavigation>()
19
+ const health = ref<IHealthResponse>()
20
+ const online = ref<boolean>()
21
+
22
+ async function loadDesktop(): Promise<void> {
23
+ const newDesktop = await api.getDesktop();
24
+ // Если уже есть расширения, мерджим маршруты
25
+ if (currentDesktop.value && currentDesktop.value.workspaces) {
26
+ newDesktop.workspaces.forEach(newWs => {
27
+ const oldWs = currentDesktop.value?.workspaces.find(ws => ws.name === newWs.name);
28
+ if (oldWs && (oldWs as any).routes) {
29
+ (newWs as any).routes = (oldWs as any).routes;
30
+ }
31
+ });
32
+ }
33
+ // Добавляем поле backNavigationButton если оно отсутствует
34
+ currentDesktop.value = {
35
+ ...newDesktop,
36
+ backNavigationButton: currentDesktop.value?.backNavigationButton || null
37
+ };
42
38
  }
43
39
 
44
- return nestedRoutes;
45
- }
46
-
47
- export const useDesktopStore = defineStore(namespace, (): IDesktopStore => {
48
- const currentDesktop = ref<IDesktop>()
49
- const availableDesktops = ref<IDesktop[]>([])
50
- const defaultDesktopHash = ref<string>()
51
- const health = ref<IHealthResponse | undefined>()
52
- const online = ref<boolean | undefined>()
53
-
54
-
55
-
56
40
  async function healthCheck(): Promise<void> {
57
41
  try {
42
+ health.value = await api.healthCheck();
43
+ online.value = health.value.status !== 'maintenance';
44
+ if (!online.value) setTimeout(healthCheck, 10000);
45
+ } catch {
46
+ online.value = false;
47
+ setTimeout(healthCheck, 10000);
48
+ }
49
+ }
58
50
 
59
- health.value = await api.healthCheck()
60
-
61
- if (health.value.status != 'maintenance'){
62
- if (online.value === false){
63
- online.value = true
64
- }
65
- } else {
66
- online.value = false
67
- setTimeout(healthCheck, 10000)
68
- }
69
-
70
- } catch (e) {
71
- online.value = false
72
- setTimeout(healthCheck, 10000)
51
+ function setRoutes(workspaceName: string, routes: RouteRecordRaw[]): void {
52
+ if (!currentDesktop.value) return;
53
+ const ws = currentDesktop.value.workspaces.find(w => w.name === workspaceName);
54
+ if (ws) {
55
+ (ws as any).routes = routes;
73
56
  }
74
57
  }
75
58
 
76
- const firstLevel = computed(() => {
77
- if (currentDesktop.value)
78
- return currentDesktop.value.routes
79
- else return []
59
+ const workspaceMenus = computed<WorkspaceMenuItem[]>(() => {
60
+ if (!currentDesktop.value) return [];
61
+ return currentDesktop.value.workspaces.map(ws => {
62
+ const routes: RouteRecordRaw[] = (ws as any).routes || [];
63
+ const meta: RouteMeta = routes.length > 0 && routes[0].meta
64
+ ? routes[0].meta as RouteMeta
65
+ : { title: ws.title, icon: '', roles: [] };
66
+ return {
67
+ workspaceName: ws.name,
68
+ title: ws.title,
69
+ icon: meta.icon,
70
+ mainRoute: routes.length > 0 ? routes[0] : null,
71
+ meta
72
+ };
73
+ });
80
74
  });
81
75
 
82
-
83
- const getSecondLevel = (currentRoute: RouteLocationNormalized): RouteRecordRaw[] => {
84
- if (currentRoute.matched && currentDesktop.value && currentRoute) {
85
-
86
- const matchingRootRoute = currentRoute.matched[1]
87
-
88
- if (matchingRootRoute) {
89
- return getNestedRoutes(matchingRootRoute)
90
- }
91
- }
92
- return [];
76
+ // Храним название активного workspace
77
+ const activeWorkspaceName = ref<string | null>(null);
78
+ function selectWorkspace(name: string) {
79
+ activeWorkspaceName.value = name;
93
80
  }
94
81
 
82
+ const activeSecondLevelRoutes = computed((): RouteRecordRaw[] => {
83
+ if (!activeWorkspaceName.value) return [];
84
+ const ws = workspaceMenus.value.find(menu => menu.workspaceName === activeWorkspaceName.value);
85
+ return ws && ws.mainRoute && ws.mainRoute.children
86
+ ? ws.mainRoute.children as RouteRecordRaw[]
87
+ : [];
88
+ });
95
89
 
96
- const setActiveDesktop = (hash: string | undefined) => {
97
- const desktop = availableDesktops.value.find(d => d.hash === hash)
98
- if (desktop)
99
- currentDesktop.value = desktop
100
- else {
101
- FailAlert('Рабочий стол не найден')
90
+ function registerWorkspaceMenus(router: Router): void {
91
+ const baseRoute = router.getRoutes().find(r => r.name === 'base');
92
+ if (baseRoute) {
93
+ workspaceMenus.value.forEach(menu => {
94
+ if (menu.mainRoute) {
95
+ router.addRoute('base', menu.mainRoute as RouteRecordRaw);
96
+ }
97
+ });
102
98
  }
103
99
  }
104
100
 
105
- const loadAvailableDesktops = async(): Promise<IBlockchainDesktops> => {
106
- return { //load it from bc later
107
- defaultHash: 'hash1',
108
- availableHashes: ['hash1','hash2', 'hash3']
101
+ // Новый метод: удаляет workspace (расширение) из currentDesktop.workspaces по имени
102
+ function removeWorkspace(workspaceName: string): void {
103
+ if (currentDesktop.value && currentDesktop.value.workspaces) {
104
+ currentDesktop.value.workspaces = currentDesktop.value.workspaces.filter(ws => ws.name !== workspaceName);
109
105
  }
110
106
  }
111
107
 
108
+ // Методы для управления навигацией
109
+ function setBackNavigationButton(button: IBackNavigationButton) {
110
+ if (!currentDesktop.value) return
111
+ currentDesktop.value.backNavigationButton = button
112
+ }
112
113
 
113
- const loadDesktops = async () => {
114
- const {defaultHash, availableHashes} = await loadAvailableDesktops()
115
- availableDesktops.value = []
116
- defaultDesktopHash.value = defaultHash
117
-
118
- availableHashes.map(hash => availableDesktops.value.push(
119
- desktopHashMap[hash as any]
120
- ))
114
+ function removeBackNavigationButton(componentId: string) {
115
+ if (!currentDesktop.value) return
116
+ if (currentDesktop.value.backNavigationButton?.componentId === componentId) {
117
+ currentDesktop.value.backNavigationButton = null
118
+ }
121
119
  }
122
120
 
121
+ const backNavigationButton = computed(() => currentDesktop.value?.backNavigationButton)
122
+
123
123
  return {
124
- online,
125
- health,
126
- defaultDesktopHash, //перезапишем через локал-сторадж для пользовательского управления стартовой страницей
127
124
  currentDesktop,
128
- availableDesktops,
129
- setActiveDesktop,
130
- loadDesktops,
131
- getSecondLevel,
132
- firstLevel,
133
- healthCheck
134
- }
135
- })
125
+ health,
126
+ online,
127
+ loadDesktop,
128
+ healthCheck,
129
+ setRoutes,
130
+ workspaceMenus,
131
+ activeWorkspaceName,
132
+ selectWorkspace,
133
+ activeSecondLevelRoutes,
134
+ registerWorkspaceMenus,
135
+ removeWorkspace,
136
+ // Новые методы
137
+ setBackNavigationButton,
138
+ removeBackNavigationButton,
139
+ backNavigationButton
140
+ };
141
+ });
@@ -1,4 +1,7 @@
1
- export interface IDesktop {
1
+ import type { Queries } from '@coopenomics/sdk';
2
+
3
+ export type IDesktop = Queries.Desktop.GetDesktop.IOutput[typeof Queries.Desktop.GetDesktop.name]
4
+ export interface ILegacyDesktop {
2
5
  name: string;
3
6
  hash: string;
4
7
  authorizedHome: string;
@@ -28,3 +31,13 @@ export interface IRoute {
28
31
  }
29
32
 
30
33
  export type { IHealthResponse } from '@coopenomics/controller'
34
+
35
+ export interface IBackNavigationButton {
36
+ text: string
37
+ onClick: () => void
38
+ componentId: string
39
+ }
40
+
41
+ export interface IDesktopWithNavigation extends IDesktop {
42
+ backNavigationButton: IBackNavigationButton | null
43
+ }
@@ -0,0 +1,24 @@
1
+ import { client } from 'src/shared/api/client';
2
+ import { Queries } from '@coopenomics/sdk';
3
+ import type { IGetDocuments, ZGetDocumentsResult } from '../model/types';
4
+
5
+ /**
6
+ * Загрузка документов с сервера
7
+ * @param data параметры запроса документов
8
+ * @returns результат запроса с пагинацией и документами
9
+ */
10
+ async function loadDocuments(data: IGetDocuments): Promise<ZGetDocumentsResult> {
11
+ const { getDocuments: output } = await client.Query(
12
+ Queries.Documents.GetDocuments.query,
13
+ {
14
+ variables: {
15
+ data
16
+ }
17
+ }
18
+ );
19
+ return output;
20
+ }
21
+
22
+ export const api = {
23
+ loadDocuments
24
+ }
@@ -0,0 +1,2 @@
1
+ export * as DocumentModel from './model'
2
+ export * from './api'
@@ -0,0 +1,117 @@
1
+ import { defineStore } from 'pinia'
2
+ import { ref, type Ref } from 'vue'
3
+ import { api } from '../api'
4
+ import type { DocumentType, IGetDocuments, IPagination, IDocumentPackageAggregate } from './types'
5
+ import { FailAlert } from 'src/shared/api'
6
+
7
+ const namespace = 'documentStore'
8
+
9
+ interface IDocumentStore {
10
+ documents: Ref<IDocumentPackageAggregate[]>
11
+ loading: Ref<boolean>
12
+ documentType: Ref<DocumentType>
13
+ pagination: Ref<IPagination>
14
+ changePage: (page: number, username: string, filter: Record<string, any>, hidden?: boolean) => Promise<IDocumentPackageAggregate[]>
15
+ changeDocumentType: (type: DocumentType, username: string, filter: Record<string, any>) => Promise<void>
16
+ resetDocuments: () => void
17
+ }
18
+ /**
19
+ * Хранилище для работы с документами
20
+ */
21
+ export const useDocumentStore = defineStore(namespace, (): IDocumentStore => {
22
+ const documents = ref<IDocumentPackageAggregate[]>([])
23
+ const loading = ref(false)
24
+ const documentType = ref<DocumentType>('newsubmitted')
25
+
26
+ // Информация о пагинации
27
+ const pagination = ref<IPagination>({
28
+ totalCount: 0,
29
+ totalPages: 0,
30
+ currentPage: 1
31
+ })
32
+
33
+ /**
34
+ * Сброс состояния документов
35
+ */
36
+ const resetDocuments = () => {
37
+ documents.value = []
38
+ pagination.value = {
39
+ totalCount: 0,
40
+ totalPages: 0,
41
+ currentPage: 1
42
+ }
43
+ }
44
+
45
+ /**
46
+ * Изменяет страницу для пагинации и загружает данные
47
+ * @param page номер страницы
48
+ * @param username имя пользователя или кооператива
49
+ * @param filter параметры фильтрации
50
+ * @param hidden флаг скрытой загрузки (без индикатора)
51
+ * @returns массив документов
52
+ */
53
+ const changePage = async (
54
+ page: number,
55
+ username: string,
56
+ filter: Record<string, any>,
57
+ hidden = false
58
+ ): Promise<IDocumentPackageAggregate[]> => {
59
+ try {
60
+ loading.value = hidden ? false : true
61
+
62
+ pagination.value.currentPage = page
63
+
64
+ const data: IGetDocuments = {
65
+ username,
66
+ filter,
67
+ type: documentType.value,
68
+ page: page,
69
+ limit: 10
70
+ }
71
+
72
+ const result = await api.loadDocuments(data)
73
+
74
+ // Если это первая страница, заменяем документы
75
+ // Иначе добавляем новые документы к существующим
76
+ if (page === 1) {
77
+ documents.value = result.items
78
+ } else {
79
+ documents.value = [...documents.value, ...result.items]
80
+ }
81
+
82
+ // Обновляем информацию о пагинации
83
+ pagination.value = {
84
+ totalCount: result.totalCount,
85
+ totalPages: result.totalPages,
86
+ currentPage: result.currentPage
87
+ }
88
+
89
+ loading.value = false
90
+ return documents.value
91
+ } catch (error: any) {
92
+ loading.value = false
93
+ console.error('Error loading documents:', error)
94
+ FailAlert(error)
95
+ return []
96
+ }
97
+ }
98
+
99
+ /**
100
+ * Изменяет тип документов для отображения
101
+ */
102
+ const changeDocumentType = async (type: DocumentType, username: string, filter: Record<string, any>) => {
103
+ documentType.value = type
104
+ // Сбрасываем текущую страницу при смене типа и загружаем документы
105
+ await changePage(1, username, filter)
106
+ }
107
+
108
+ return {
109
+ documents,
110
+ loading,
111
+ documentType,
112
+ pagination,
113
+ changePage,
114
+ changeDocumentType,
115
+ resetDocuments
116
+ }
117
+ })
@@ -0,0 +1,18 @@
1
+ import type { Queries, Zeus } from '@coopenomics/sdk';
2
+
3
+ export type IDocumentPackageAggregate = Zeus.ModelTypes['DocumentPackageAggregate'];
4
+ export type IDocumentAggregate = Zeus.ModelTypes['DocumentAggregate'];
5
+ export type ZGetDocumentsResult = Queries.Documents.GetDocuments.IOutput[typeof Queries.Documents.GetDocuments.name];
6
+ export type IGetDocuments = Queries.Documents.GetDocuments.IInput['data']
7
+
8
+ // Информация о пагинации
9
+ export interface IPagination {
10
+ totalCount: number;
11
+ totalPages: number;
12
+ currentPage: number;
13
+ }
14
+
15
+ // Типы документов в системе
16
+ export type DocumentType = 'newsubmitted' | 'newresolved';
17
+
18
+
@@ -0,0 +1,58 @@
1
+ import { client } from 'src/shared/api/client';
2
+ import { Queries, Mutations } from '@coopenomics/sdk';
3
+ import type { IGetMeetsInput, IGetMeetInput, ICloseMeetInput, IRestartMeetInput } from '../types';
4
+
5
+ async function loadMeets(data: IGetMeetsInput) {
6
+ const { [Queries.Meet.GetMeets.name]: output } = await client.Query(
7
+ Queries.Meet.GetMeets.query,
8
+ {
9
+ variables: {
10
+ data
11
+ }
12
+ }
13
+ );
14
+ return output;
15
+ }
16
+
17
+ async function loadMeet(data: IGetMeetInput) {
18
+ const { [Queries.Meet.GetMeet.name]: output } = await client.Query(
19
+ Queries.Meet.GetMeet.query,
20
+ {
21
+ variables: {
22
+ data
23
+ }
24
+ }
25
+ );
26
+ return output;
27
+ }
28
+
29
+ async function closeMeet(data: ICloseMeetInput) {
30
+ const { [Mutations.Meet.SignByPresiderOnAnnualGeneralMeet.name]: output } = await client.Mutation(
31
+ Mutations.Meet.SignByPresiderOnAnnualGeneralMeet.mutation,
32
+ {
33
+ variables: {
34
+ data
35
+ }
36
+ }
37
+ );
38
+ return output;
39
+ }
40
+
41
+ async function restartMeet(data: IRestartMeetInput) {
42
+ const { [Mutations.Meet.RestartAnnualGeneralMeet.name]: output } = await client.Mutation(
43
+ Mutations.Meet.RestartAnnualGeneralMeet.mutation,
44
+ {
45
+ variables: {
46
+ data
47
+ }
48
+ }
49
+ );
50
+ return output;
51
+ }
52
+
53
+ export const api = {
54
+ loadMeets,
55
+ loadMeet,
56
+ closeMeet,
57
+ restartMeet
58
+ }
@@ -0,0 +1,2 @@
1
+ export * from './model'
2
+ export * from './types'
@@ -0,0 +1,72 @@
1
+ import { defineStore } from 'pinia'
2
+ import { ref, Ref } from 'vue'
3
+ import { api } from '../api'
4
+ import type { IMeet, IGetMeetsInput, IGetMeetInput, ICloseMeetInput, IRestartMeetInput } from '../types';
5
+
6
+ const namespace = 'meetStore';
7
+
8
+ interface IMeetStore {
9
+ meets: Ref<IMeet[]>
10
+ currentMeet: Ref<IMeet | null>
11
+ loading: Ref<boolean>
12
+ loadMeets: (data: IGetMeetsInput) => Promise<IMeet[]>;
13
+ loadMeet: (data: IGetMeetInput) => Promise<IMeet>;
14
+ closeMeet: (data: ICloseMeetInput) => Promise<IMeet>;
15
+ restartMeet: (data: IRestartMeetInput) => Promise<IMeet>;
16
+ }
17
+
18
+ export const useMeetStore = defineStore(namespace, (): IMeetStore => {
19
+ const meets = ref<IMeet[]>([])
20
+ const currentMeet = ref<IMeet | null>(null)
21
+ const loading = ref<boolean>(false)
22
+
23
+ const loadMeets = async (data: IGetMeetsInput) => {
24
+ loading.value = true
25
+ try {
26
+ const result = await api.loadMeets(data);
27
+ meets.value = result;
28
+ return result;
29
+ } finally {
30
+ loading.value = false
31
+ }
32
+ };
33
+
34
+ const loadMeet = async (data: IGetMeetInput) => {
35
+ loading.value = true
36
+ try {
37
+ const result = await api.loadMeet(data);
38
+ currentMeet.value = result;
39
+ return result;
40
+ } finally {
41
+ loading.value = false
42
+ }
43
+ };
44
+
45
+ const closeMeet = async (data: ICloseMeetInput) => {
46
+ loading.value = true
47
+ try {
48
+ return await api.closeMeet(data);
49
+ } finally {
50
+ loading.value = false
51
+ }
52
+ };
53
+
54
+ const restartMeet = async (data: IRestartMeetInput) => {
55
+ loading.value = true
56
+ try {
57
+ return await api.restartMeet(data);
58
+ } finally {
59
+ loading.value = false
60
+ }
61
+ };
62
+
63
+ return {
64
+ meets,
65
+ currentMeet,
66
+ loading,
67
+ loadMeets,
68
+ loadMeet,
69
+ closeMeet,
70
+ restartMeet
71
+ }
72
+ })
@@ -0,0 +1,7 @@
1
+ import type { Queries, Mutations } from '@coopenomics/sdk';
2
+
3
+ export type IMeet = Queries.Meet.GetMeet.IOutput[typeof Queries.Meet.GetMeet.name]
4
+ export type IGetMeetsInput = Queries.Meet.GetMeets.IInput['data']
5
+ export type IGetMeetInput = Queries.Meet.GetMeet.IInput['data']
6
+ export type ICloseMeetInput = Mutations.Meet.SignByPresiderOnAnnualGeneralMeet.IInput['data']
7
+ export type IRestartMeetInput = Mutations.Meet.RestartAnnualGeneralMeet.IInput['data']
@@ -0,0 +1,20 @@
1
+ import { client } from 'src/shared/api/client';
2
+ import { Queries } from '@coopenomics/sdk';
3
+ import type { IGetPaymentsInputData, IGetPaymentsInputOptions, IPaymentPaginationResult } from '../model/types';
4
+
5
+ /**
6
+ * Загружает список платежей с использованием GraphQL API
7
+ */
8
+ async function loadPayments(data?: IGetPaymentsInputData, options?: IGetPaymentsInputOptions): Promise<IPaymentPaginationResult> {
9
+ const variables: Queries.Payments.GetPayments.IInput = {data, options}
10
+
11
+ const { [Queries.Payments.GetPayments.name]: output } = await client.Query(
12
+ Queries.Payments.GetPayments.query,
13
+ {
14
+ variables
15
+ }
16
+ );
17
+ return output;
18
+ }
19
+
20
+ export const api = { loadPayments };
@@ -0,0 +1,2 @@
1
+ export * from './store'
2
+ export * from './types'
@@ -0,0 +1,62 @@
1
+ import { defineStore } from 'pinia';
2
+ import { Ref, ref } from 'vue';
3
+ import { api } from '../api';
4
+ import type { IGetPaymentsInputData, IGetPaymentsInputOptions, IPayment, IPaymentPaginationResult } from './types';
5
+
6
+ interface IPaymentStore {
7
+ payments: Ref<IPaymentPaginationResult | undefined>;
8
+ loadPayments: (data?: IGetPaymentsInputData, options?: IGetPaymentsInputOptions) => Promise<void>;
9
+ updatePayments: (data?: IGetPaymentsInputData, options?: IGetPaymentsInputOptions) => Promise<void>;
10
+ clear: () => void;
11
+ }
12
+
13
+ const namespace = 'payments';
14
+
15
+ export const usePaymentStore = defineStore(namespace, (): IPaymentStore => {
16
+ const payments: Ref<IPaymentPaginationResult | undefined> = ref();
17
+
18
+ const clear = () => {
19
+ payments.value = undefined;
20
+ };
21
+
22
+ // Функция для слияния массивов платежей по id
23
+ const mergePayments = (existingPayments: IPayment[], newPayments: IPayment[]) => {
24
+ const mergedPaymentsMap = new Map(existingPayments.map(payment => [payment.id, payment]));
25
+
26
+ newPayments.forEach(payment => {
27
+ mergedPaymentsMap.set(payment.id, payment); // Обновляем или добавляем новый платеж
28
+ });
29
+
30
+ return Array.from(mergedPaymentsMap.values()); // Возвращаем массив объединённых платежей
31
+ };
32
+
33
+ const updatePayments = async(data?: IGetPaymentsInputData, options?: IGetPaymentsInputOptions): Promise<void> => {
34
+ const newPaymentsResponse = await api.loadPayments(data, options);
35
+
36
+ if (payments.value) {
37
+ payments.value.items = mergePayments(payments.value.items, newPaymentsResponse.items);
38
+ } else {
39
+ payments.value = newPaymentsResponse;
40
+ }
41
+ };
42
+
43
+ // Функция для загрузки платежей
44
+ const loadPayments = async (data?: IGetPaymentsInputData, options?: IGetPaymentsInputOptions): Promise<void> => {
45
+ const newPaymentsResponse = await api.loadPayments(data, options);
46
+
47
+ if (payments.value) {
48
+ // Обновляем все свойства объекта payments
49
+ payments.value = {
50
+ ...payments.value,
51
+ items: mergePayments(payments.value.items, newPaymentsResponse.items),
52
+ currentPage: newPaymentsResponse.currentPage,
53
+ totalPages: newPaymentsResponse.totalPages,
54
+ totalCount: newPaymentsResponse.totalCount
55
+ };
56
+ } else {
57
+ payments.value = newPaymentsResponse;
58
+ }
59
+ };
60
+
61
+ return { payments, loadPayments, updatePayments, clear };
62
+ });
@@ -0,0 +1,7 @@
1
+ import type { Queries } from '@coopenomics/sdk';
2
+
3
+ export type IPaymentPaginationResult = Queries.Payments.GetPayments.IOutput[typeof Queries.Payments.GetPayments.name]
4
+ export type IPayment = IPaymentPaginationResult['items'][number]
5
+
6
+ export type IGetPaymentsInputData = Queries.Payments.GetPayments.IInput['data']
7
+ export type IGetPaymentsInputOptions = Queries.Payments.GetPayments.IInput['options']