@webiny/webhooks 6.4.0-beta.3 → 6.4.0-beta.4

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 (142) hide show
  1. package/admin/WebhookRoutes.js +13 -2
  2. package/admin/WebhookRoutes.js.map +1 -1
  3. package/admin/Webhooks.js +0 -3
  4. package/admin/Webhooks.js.map +1 -1
  5. package/admin/features/getWebhookSettings/GetWebhookSettingsGateway.js +1 -0
  6. package/admin/features/getWebhookSettings/GetWebhookSettingsGateway.js.map +1 -1
  7. package/admin/features/listWebhookDeliveries/ListWebhookDeliveriesGateway.js +1 -1
  8. package/admin/features/listWebhookDeliveries/ListWebhookDeliveriesGateway.js.map +1 -1
  9. package/admin/features/listWebhookDeliveries/abstractions.d.ts +6 -1
  10. package/admin/features/listWebhookDeliveries/abstractions.js.map +1 -1
  11. package/admin/features/updateWebhookSettings/UpdateWebhookSettingsGateway.js +1 -0
  12. package/admin/features/updateWebhookSettings/UpdateWebhookSettingsGateway.js.map +1 -1
  13. package/admin/features/updateWebhookSettings/abstractions.d.ts +1 -0
  14. package/admin/features/updateWebhookSettings/abstractions.js.map +1 -1
  15. package/admin/presentation/{WebhookDeliveries → WebhookDeliveriesPage}/WebhookDeliveriesDataSource.d.ts +1 -2
  16. package/admin/presentation/{WebhookDeliveries → WebhookDeliveriesPage}/WebhookDeliveriesDataSource.js +5 -7
  17. package/admin/presentation/WebhookDeliveriesPage/WebhookDeliveriesDataSource.js.map +1 -0
  18. package/admin/presentation/WebhookDeliveriesPage/WebhookDeliveriesPagePresenter.d.ts +41 -0
  19. package/admin/presentation/WebhookDeliveriesPage/WebhookDeliveriesPagePresenter.js +223 -0
  20. package/admin/presentation/WebhookDeliveriesPage/WebhookDeliveriesPagePresenter.js.map +1 -0
  21. package/admin/presentation/WebhookDeliveriesPage/abstractions.d.ts +42 -0
  22. package/admin/presentation/WebhookDeliveriesPage/abstractions.js +5 -0
  23. package/admin/presentation/WebhookDeliveriesPage/abstractions.js.map +1 -0
  24. package/admin/presentation/WebhookDeliveriesPage/components/DeliveryAccordionRow.d.ts +11 -0
  25. package/admin/presentation/WebhookDeliveriesPage/components/DeliveryAccordionRow.js +36 -0
  26. package/admin/presentation/WebhookDeliveriesPage/components/DeliveryAccordionRow.js.map +1 -0
  27. package/admin/presentation/WebhookDeliveriesPage/components/DeliveryBottomInfoBar.d.ts +9 -0
  28. package/admin/presentation/WebhookDeliveriesPage/components/DeliveryBottomInfoBar.js +43 -0
  29. package/admin/presentation/WebhookDeliveriesPage/components/DeliveryBottomInfoBar.js.map +1 -0
  30. package/admin/presentation/WebhookDeliveriesPage/components/DeliveryDetailContent.d.ts +7 -0
  31. package/admin/presentation/WebhookDeliveriesPage/components/DeliveryDetailContent.js +76 -0
  32. package/admin/presentation/WebhookDeliveriesPage/components/DeliveryDetailContent.js.map +1 -0
  33. package/admin/presentation/WebhookDeliveriesPage/components/DeliveryFilters.d.ts +9 -0
  34. package/admin/presentation/WebhookDeliveriesPage/components/DeliveryFilters.js +85 -0
  35. package/admin/presentation/WebhookDeliveriesPage/components/DeliveryFilters.js.map +1 -0
  36. package/admin/presentation/WebhookDeliveriesPage/components/DeliveryList.d.ts +9 -0
  37. package/admin/presentation/WebhookDeliveriesPage/components/DeliveryList.js +61 -0
  38. package/admin/presentation/WebhookDeliveriesPage/components/DeliveryList.js.map +1 -0
  39. package/admin/presentation/WebhookDeliveriesPage/components/WebhookDefinitionsButton.d.ts +2 -0
  40. package/admin/presentation/WebhookDeliveriesPage/components/WebhookDefinitionsButton.js +16 -0
  41. package/admin/presentation/WebhookDeliveriesPage/components/WebhookDefinitionsButton.js.map +1 -0
  42. package/admin/presentation/WebhookDeliveriesPage/components/WebhookDeliveriesPage.d.ts +2 -0
  43. package/admin/presentation/WebhookDeliveriesPage/components/WebhookDeliveriesPage.js +73 -0
  44. package/admin/presentation/WebhookDeliveriesPage/components/WebhookDeliveriesPage.js.map +1 -0
  45. package/admin/presentation/WebhookDeliveriesPage/components/statusVariant.d.ts +1 -0
  46. package/admin/presentation/WebhookDeliveriesPage/components/statusVariant.js +13 -0
  47. package/admin/presentation/WebhookDeliveriesPage/components/statusVariant.js.map +1 -0
  48. package/admin/presentation/WebhookDeliveriesPage/feature.d.ts +3 -0
  49. package/admin/presentation/WebhookDeliveriesPage/feature.js +17 -0
  50. package/admin/presentation/WebhookDeliveriesPage/feature.js.map +1 -0
  51. package/admin/presentation/WebhookDeliveriesPage/index.d.ts +5 -0
  52. package/admin/presentation/WebhookDeliveriesPage/index.js +1 -0
  53. package/admin/presentation/WebhookForm/WebhookFormPresenter.d.ts +6 -6
  54. package/admin/presentation/WebhookForm/WebhookFormPresenter.js +83 -72
  55. package/admin/presentation/WebhookForm/WebhookFormPresenter.js.map +1 -1
  56. package/admin/presentation/WebhookForm/abstractions.d.ts +2 -9
  57. package/admin/presentation/WebhookForm/abstractions.js.map +1 -1
  58. package/admin/presentation/WebhookForm/components/SigningSecret.d.ts +5 -2
  59. package/admin/presentation/WebhookForm/components/SigningSecret.js +7 -3
  60. package/admin/presentation/WebhookForm/components/SigningSecret.js.map +1 -1
  61. package/admin/presentation/WebhookForm/components/WebhookFormView.js +49 -35
  62. package/admin/presentation/WebhookForm/components/WebhookFormView.js.map +1 -1
  63. package/admin/presentation/WebhookList/WebhookListPresenter.d.ts +26 -2
  64. package/admin/presentation/WebhookList/WebhookListPresenter.js +36 -34
  65. package/admin/presentation/WebhookList/WebhookListPresenter.js.map +1 -1
  66. package/admin/presentation/WebhookList/abstractions.d.ts +25 -7
  67. package/admin/presentation/WebhookList/abstractions.js.map +1 -1
  68. package/admin/presentation/WebhookList/components/CreateWebhookButton.d.ts +2 -0
  69. package/admin/presentation/WebhookList/components/CreateWebhookButton.js +22 -0
  70. package/admin/presentation/WebhookList/components/CreateWebhookButton.js.map +1 -0
  71. package/admin/presentation/WebhookList/components/WebhookDeliveriesButton.d.ts +2 -0
  72. package/admin/presentation/WebhookList/components/WebhookDeliveriesButton.js +16 -0
  73. package/admin/presentation/WebhookList/components/WebhookDeliveriesButton.js.map +1 -0
  74. package/admin/presentation/WebhookList/components/WebhookListContent.d.ts +9 -0
  75. package/admin/presentation/WebhookList/components/WebhookListContent.js +170 -0
  76. package/admin/presentation/WebhookList/components/WebhookListContent.js.map +1 -0
  77. package/admin/presentation/WebhookList/components/WebhookListView.js +10 -140
  78. package/admin/presentation/WebhookList/components/WebhookListView.js.map +1 -1
  79. package/admin/presentation/WebhookSettings/WebhookSettingsPresenter.js +14 -6
  80. package/admin/presentation/WebhookSettings/WebhookSettingsPresenter.js.map +1 -1
  81. package/admin/routes.d.ts +4 -1
  82. package/admin/routes.js +11 -4
  83. package/admin/routes.js.map +1 -1
  84. package/admin/shared/types.d.ts +1 -0
  85. package/api/domain/WebhookDelivery.d.ts +0 -1
  86. package/api/domain/WebhookSettings.d.ts +1 -0
  87. package/api/domain/constants.d.ts +1 -1
  88. package/api/domain/constants.js +2 -2
  89. package/api/domain/constants.js.map +1 -1
  90. package/api/features/CreateWebhookDelivery/CreateWebhookDeliveryRepository.d.ts +1 -1
  91. package/api/features/CreateWebhookDelivery/CreateWebhookDeliveryRepository.js +3 -1
  92. package/api/features/CreateWebhookDelivery/CreateWebhookDeliveryRepository.js.map +1 -1
  93. package/api/features/CreateWebhookDelivery/abstractions.d.ts +1 -1
  94. package/api/features/CreateWebhookDelivery/abstractions.js.map +1 -1
  95. package/api/features/GetWebhookSettings/GetWebhookSettingsRepository.js +4 -2
  96. package/api/features/GetWebhookSettings/GetWebhookSettingsRepository.js.map +1 -1
  97. package/api/features/ResendWebhookDelivery/ResendWebhookDeliveryUseCase.d.ts +3 -1
  98. package/api/features/ResendWebhookDelivery/ResendWebhookDeliveryUseCase.js +9 -4
  99. package/api/features/ResendWebhookDelivery/ResendWebhookDeliveryUseCase.js.map +1 -1
  100. package/api/features/SendWebhookTask/SendWebhookTask.d.ts +1 -1
  101. package/api/features/SendWebhookTask/SendWebhookTask.js +1 -1
  102. package/api/features/SendWebhookTask/SendWebhookTask.js.map +1 -1
  103. package/api/features/TriggerWebhook/TriggerWebhookUseCase.d.ts +3 -1
  104. package/api/features/TriggerWebhook/TriggerWebhookUseCase.js +9 -4
  105. package/api/features/TriggerWebhook/TriggerWebhookUseCase.js.map +1 -1
  106. package/api/features/UpdateWebhookSettings/UpdateWebhookSettingsRepository.js +4 -2
  107. package/api/features/UpdateWebhookSettings/UpdateWebhookSettingsRepository.js.map +1 -1
  108. package/api/features/UpdateWebhookSettings/abstractions.d.ts +1 -0
  109. package/api/features/UpdateWebhookSettings/abstractions.js.map +1 -1
  110. package/api/features/UpdateWebhookSettings/schema.d.ts +1 -0
  111. package/api/features/UpdateWebhookSettings/schema.js +3 -1
  112. package/api/features/UpdateWebhookSettings/schema.js.map +1 -1
  113. package/api/features/WebhookDispatcher/WebhookDispatcher.d.ts +3 -1
  114. package/api/features/WebhookDispatcher/WebhookDispatcher.js +9 -4
  115. package/api/features/WebhookDispatcher/WebhookDispatcher.js.map +1 -1
  116. package/api/graphql/WebhookDeliverySchema.js +12 -8
  117. package/api/graphql/WebhookDeliverySchema.js.map +1 -1
  118. package/api/graphql/WebhookEventSchema.js +1 -0
  119. package/api/graphql/WebhookEventSchema.js.map +1 -1
  120. package/api/graphql/WebhookSettingsSchema.js +2 -0
  121. package/api/graphql/WebhookSettingsSchema.js.map +1 -1
  122. package/api/models/WebhookSettingsModel.js +3 -2
  123. package/api/models/WebhookSettingsModel.js.map +1 -1
  124. package/package.json +24 -22
  125. package/admin/presentation/WebhookDeliveries/WebhookDeliveriesDataSource.js.map +0 -1
  126. package/admin/presentation/WebhookDeliveries/WebhookDeliveriesPresenter.d.ts +0 -19
  127. package/admin/presentation/WebhookDeliveries/WebhookDeliveriesPresenter.js +0 -77
  128. package/admin/presentation/WebhookDeliveries/WebhookDeliveriesPresenter.js.map +0 -1
  129. package/admin/presentation/WebhookDeliveries/abstractions.d.ts +0 -22
  130. package/admin/presentation/WebhookDeliveries/abstractions.js +0 -5
  131. package/admin/presentation/WebhookDeliveries/abstractions.js.map +0 -1
  132. package/admin/presentation/WebhookDeliveries/components/DeliveryDetail.d.ts +0 -11
  133. package/admin/presentation/WebhookDeliveries/components/DeliveryDetail.js +0 -73
  134. package/admin/presentation/WebhookDeliveries/components/DeliveryDetail.js.map +0 -1
  135. package/admin/presentation/WebhookDeliveries/components/WebhookDeliveriesDrawer.d.ts +0 -8
  136. package/admin/presentation/WebhookDeliveries/components/WebhookDeliveriesDrawer.js +0 -119
  137. package/admin/presentation/WebhookDeliveries/components/WebhookDeliveriesDrawer.js.map +0 -1
  138. package/admin/presentation/WebhookDeliveries/feature.d.ts +0 -3
  139. package/admin/presentation/WebhookDeliveries/feature.js +0 -17
  140. package/admin/presentation/WebhookDeliveries/feature.js.map +0 -1
  141. package/admin/presentation/WebhookDeliveries/index.d.ts +0 -2
  142. package/admin/presentation/WebhookDeliveries/index.js +0 -2
@@ -1 +1 @@
1
- {"version":3,"file":"admin/presentation/WebhookForm/components/WebhookFormView.js","sources":["../../../../../src/admin/presentation/WebhookForm/components/WebhookFormView.tsx"],"sourcesContent":["import React, { useEffect, useMemo } from \"react\";\nimport { observer } from \"mobx-react-lite\";\nimport { DiContainerProvider, useContainer, useFeature, useRoute } from \"@webiny/app\";\nimport { FormErrors, useRouter } from \"@webiny/app-admin\";\nimport { Button, Heading, OverlayLoader, Separator } from \"@webiny/admin-ui\";\nimport { FormView } from \"@webiny/app-admin/features/formModel/FormView.js\";\nimport { WebhookFormPresenterFeature } from \"../feature.js\";\nimport { GetWebhookFeature } from \"~/admin/features/getWebhook/feature.js\";\nimport { CreateWebhookFeature } from \"~/admin/features/createWebhook/feature.js\";\nimport { UpdateWebhookFeature } from \"~/admin/features/updateWebhook/feature.js\";\nimport { DeleteWebhookFeature } from \"~/admin/features/deleteWebhook/feature.js\";\nimport { ListAvailableEventsFeature } from \"~/admin/features/listAvailableEvents/feature.js\";\nimport { WebhookPermissionsFeature } from \"~/admin/features/permissions/feature.js\";\nimport { Routes } from \"~/admin/routes.js\";\nimport { SigningSecret } from \"./SigningSecret.js\";\nimport { WebhookDeliveriesDrawer } from \"~/admin/presentation/WebhookDeliveries/components/WebhookDeliveriesDrawer.js\";\n\nconst WebhookFormViewInner = observer(function WebhookFormViewInner() {\n const { presenter } = useFeature(WebhookFormPresenterFeature);\n const { goToRoute } = useRouter();\n const { route } = useRoute(Routes.Form);\n const id = route.params.id;\n\n useEffect(() => {\n void presenter.init(id);\n }, [presenter, id]);\n\n const { vm, actions } = presenter;\n\n if (vm.loading) {\n return <OverlayLoader />;\n }\n\n return (\n <>\n <div className=\"flex flex-col h-main-content\">\n <div className=\"flex items-center justify-between py-sm px-md\">\n <Heading level={5}>\n {vm.isNew ? \"Create Webhook\" : (vm.webhook?.name ?? \"Edit Webhook\")}\n </Heading>\n <div className=\"flex gap-sm\">\n {!vm.isNew && (\n <Button variant=\"secondary\" onClick={() => actions.openDeliveries()}>\n Deliveries\n </Button>\n )}\n <Button variant=\"secondary\" onClick={() => goToRoute(Routes.List)}>\n Cancel\n </Button>\n {vm.permissions.canEdit && (\n <Button\n variant=\"primary\"\n onClick={() => void actions.save()}\n disabled={vm.saving}\n >\n {vm.saving ? \"Saving...\" : \"Save\"}\n </Button>\n )}\n </div>\n </div>\n <Separator />\n\n <div className=\"p-lg\">\n <>\n <FormErrors form={vm.form} />\n <FormView name=\"Webhook\" form={vm.form} />\n {!vm.isNew && vm.webhook?.signingSecret && (\n <SigningSecret secret={vm.webhook.signingSecret} />\n )}\n </>\n </div>\n </div>\n {vm.showDeliveries && vm.webhook && (\n <WebhookDeliveriesDrawer\n webhookId={vm.webhook.id}\n open={vm.showDeliveries}\n onClose={() => actions.closeDeliveries()}\n />\n )}\n </>\n );\n});\n\nexport const WebhookFormView = () => {\n const container = useContainer();\n\n const scopedContainer = useMemo(() => {\n const child = container.createChildContainer();\n GetWebhookFeature.register(child);\n CreateWebhookFeature.register(child);\n UpdateWebhookFeature.register(child);\n DeleteWebhookFeature.register(child);\n ListAvailableEventsFeature.register(child);\n WebhookPermissionsFeature.register(child);\n WebhookFormPresenterFeature.register(child);\n return child;\n }, []);\n\n return (\n <DiContainerProvider container={scopedContainer}>\n <WebhookFormViewInner />\n </DiContainerProvider>\n );\n};\n"],"names":["WebhookFormViewInner","observer","presenter","useFeature","WebhookFormPresenterFeature","goToRoute","useRouter","route","useRoute","Routes","id","useEffect","vm","actions","OverlayLoader","Heading","Button","Separator","FormErrors","FormView","SigningSecret","WebhookDeliveriesDrawer","WebhookFormView","container","useContainer","scopedContainer","useMemo","child","GetWebhookFeature","CreateWebhookFeature","UpdateWebhookFeature","DeleteWebhookFeature","ListAvailableEventsFeature","WebhookPermissionsFeature","DiContainerProvider"],"mappings":";;;;;;;;;;;;;;;;AAiBA,MAAMA,uCAAuBC,SAAS;IAClC,MAAM,EAAEC,SAAS,EAAE,GAAGC,WAAWC;IACjC,MAAM,EAAEC,SAAS,EAAE,GAAGC;IACtB,MAAM,EAAEC,KAAK,EAAE,GAAGC,SAASC,OAAO,IAAI;IACtC,MAAMC,KAAKH,MAAM,MAAM,CAAC,EAAE;IAE1BI,UAAU;QACDT,UAAU,IAAI,CAACQ;IACxB,GAAG;QAACR;QAAWQ;KAAG;IAElB,MAAM,EAAEE,EAAE,EAAEC,OAAO,EAAE,GAAGX;IAExB,IAAIU,GAAG,OAAO,EACV,OAAO,WAAP,GAAO,oBAACE,eAAaA;IAGzB,OAAO,WAAP,GACI,wDACI,oBAAC;QAAI,WAAU;qBACX,oBAAC;QAAI,WAAU;qBACX,oBAACC,SAAOA;QAAC,OAAO;OACXH,GAAG,KAAK,GAAG,mBAAoBA,GAAG,OAAO,EAAE,QAAQ,+BAExD,oBAAC;QAAI,WAAU;OACV,CAACA,GAAG,KAAK,IAAI,WAAJ,GACN,oBAACI,QAAMA;QAAC,SAAQ;QAAY,SAAS,IAAMH,QAAQ,cAAc;OAAI,6BAIzE,oBAACG,QAAMA;QAAC,SAAQ;QAAY,SAAS,IAAMX,UAAUI,OAAO,IAAI;OAAG,WAGlEG,GAAG,WAAW,CAAC,OAAO,IAAI,WAAJ,GACnB,oBAACI,QAAMA;QACH,SAAQ;QACR,SAAS,IAAM,KAAKH,QAAQ,IAAI;QAChC,UAAUD,GAAG,MAAM;OAElBA,GAAG,MAAM,GAAG,cAAc,yBAK3C,oBAACK,WAASA,OAAAA,WAAAA,GAEV,oBAAC;QAAI,WAAU;qBACX,wDACI,oBAACC,YAAUA;QAAC,MAAMN,GAAG,IAAI;sBACzB,oBAACO,UAAQA;QAAC,MAAK;QAAU,MAAMP,GAAG,IAAI;QACrC,CAACA,GAAG,KAAK,IAAIA,GAAG,OAAO,EAAE,iBAAiB,WAAjB,GACtB,oBAACQ,eAAaA;QAAC,QAAQR,GAAG,OAAO,CAAC,aAAa;WAK9DA,GAAG,cAAc,IAAIA,GAAG,OAAO,IAAI,WAAJ,GAC5B,oBAACS,yBAAuBA;QACpB,WAAWT,GAAG,OAAO,CAAC,EAAE;QACxB,MAAMA,GAAG,cAAc;QACvB,SAAS,IAAMC,QAAQ,eAAe;;AAK1D;AAEO,MAAMS,kBAAkB;IAC3B,MAAMC,YAAYC;IAElB,MAAMC,kBAAkBC,QAAQ;QAC5B,MAAMC,QAAQJ,UAAU,oBAAoB;QAC5CK,kBAAkB,QAAQ,CAACD;QAC3BE,qBAAqB,QAAQ,CAACF;QAC9BG,qBAAqB,QAAQ,CAACH;QAC9BI,qBAAqB,QAAQ,CAACJ;QAC9BK,2BAA2B,QAAQ,CAACL;QACpCM,0BAA0B,QAAQ,CAACN;QACnCvB,4BAA4B,QAAQ,CAACuB;QACrC,OAAOA;IACX,GAAG,EAAE;IAEL,OAAO,WAAP,GACI,oBAACO,qBAAmBA;QAAC,WAAWT;qBAC5B,oBAACzB,sCAAoBA;AAGjC"}
1
+ {"version":3,"file":"admin/presentation/WebhookForm/components/WebhookFormView.js","sources":["../../../../../src/admin/presentation/WebhookForm/components/WebhookFormView.tsx"],"sourcesContent":["import React, { useEffect, useMemo, useCallback } from \"react\";\nimport { observer } from \"mobx-react-lite\";\nimport { DiContainerProvider, useContainer, useFeature, useRoute } from \"@webiny/app\";\nimport {\n FormErrors,\n useRouter,\n useFieldRenderers,\n SimpleForm,\n SimpleFormHeader,\n SimpleFormContent,\n SimpleFormFooter,\n FormView\n} from \"@webiny/app-admin\";\nimport { Button, OverlayLoader } from \"@webiny/admin-ui\";\nimport { useToast } from \"@webiny/admin-ui\";\nimport { WebhookFormPresenterFeature } from \"../feature.js\";\nimport { GetWebhookFeature } from \"~/admin/features/getWebhook/feature.js\";\nimport { CreateWebhookFeature } from \"~/admin/features/createWebhook/feature.js\";\nimport { UpdateWebhookFeature } from \"~/admin/features/updateWebhook/feature.js\";\nimport { DeleteWebhookFeature } from \"~/admin/features/deleteWebhook/feature.js\";\nimport { ListAvailableEventsFeature } from \"~/admin/features/listAvailableEvents/feature.js\";\nimport { WebhookPermissionsFeature } from \"~/admin/features/permissions/feature.js\";\nimport { Routes } from \"~/admin/routes.js\";\nimport { SigningSecret } from \"./SigningSecret.js\";\nimport { HasPermission } from \"~/admin/presentation/security/HasPermission.js\";\n\nconst SectionHeading = ({ field }: { field: any }) => {\n return <span className=\"text-md font-semibold\">{String(field.label ?? \"\")}</span>;\n};\n\nconst WebhookFormViewInner = observer(function WebhookFormViewInner() {\n const { presenter } = useFeature(WebhookFormPresenterFeature);\n const { goToRoute } = useRouter();\n const { route } = useRoute(Routes.Form);\n const toast = useToast();\n const id = route.params.id;\n const defaultRenderers = useFieldRenderers();\n\n const renderers = useMemo(() => {\n return {\n ...defaultRenderers,\n \"element:sectionHeading\": SectionHeading\n };\n }, [defaultRenderers]);\n\n useEffect(() => {\n void presenter.init(id);\n }, [presenter, id]);\n\n const saveForm = useCallback(async () => {\n const res = await presenter.save();\n if (res) {\n toast.showSuccessToast({ title: \"Webhook saved successfully!\" });\n }\n }, [presenter]);\n\n const { vm } = presenter;\n\n return (\n <SimpleForm>\n {vm.loading ? <OverlayLoader text={\"Loading...\"} /> : null}\n {vm.saving ? <OverlayLoader text={\"Saving...\"} /> : null}\n {vm.form.errors.length > 0 ? (\n <div className={\"mb-lg\"}>\n <FormErrors form={vm.form} />\n </div>\n ) : null}\n <SimpleFormHeader\n title={vm.isNew ? \"Create Webhook\" : (vm.webhook?.name ?? \"Edit Webhook\")}\n />\n <SimpleFormContent>\n <FormView name=\"Webhook\" form={vm.form} renderers={renderers} />\n <SigningSecret presenter={presenter} />\n </SimpleFormContent>\n <SimpleFormFooter className={\"border-t-sm border-t-neutral-dimmed pt-lg\"}>\n <Button variant=\"secondary\" onClick={() => goToRoute(Routes.List)}>\n Cancel\n </Button>\n <HasPermission entity=\"webhook\" action=\"edit\">\n <Button variant=\"primary\" onClick={saveForm} disabled={vm.saving}>\n {vm.saving ? \"Saving...\" : \"Save\"}\n </Button>\n </HasPermission>\n </SimpleFormFooter>\n </SimpleForm>\n );\n});\n\nexport const WebhookFormView = () => {\n const container = useContainer();\n\n const scopedContainer = useMemo(() => {\n const child = container.createChildContainer();\n GetWebhookFeature.register(child);\n CreateWebhookFeature.register(child);\n UpdateWebhookFeature.register(child);\n DeleteWebhookFeature.register(child);\n ListAvailableEventsFeature.register(child);\n WebhookPermissionsFeature.register(child);\n WebhookFormPresenterFeature.register(child);\n return child;\n }, []);\n\n return (\n <DiContainerProvider container={scopedContainer}>\n <WebhookFormViewInner />\n </DiContainerProvider>\n );\n};\n"],"names":["SectionHeading","field","String","WebhookFormViewInner","observer","presenter","useFeature","WebhookFormPresenterFeature","goToRoute","useRouter","route","useRoute","Routes","toast","useToast","id","defaultRenderers","useFieldRenderers","renderers","useMemo","useEffect","saveForm","useCallback","res","vm","SimpleForm","OverlayLoader","FormErrors","SimpleFormHeader","SimpleFormContent","FormView","SigningSecret","SimpleFormFooter","Button","HasPermission","WebhookFormView","container","useContainer","scopedContainer","child","GetWebhookFeature","CreateWebhookFeature","UpdateWebhookFeature","DeleteWebhookFeature","ListAvailableEventsFeature","WebhookPermissionsFeature","DiContainerProvider"],"mappings":";;;;;;;;;;;;;;;AA0BA,MAAMA,iBAAiB,CAAC,EAAEC,KAAK,EAAkB,GACtC,WAAP,GAAO,oBAAC;QAAK,WAAU;OAAyBC,OAAOD,MAAM,KAAK,IAAI;AAG1E,MAAME,uCAAuBC,SAAS;IAClC,MAAM,EAAEC,SAAS,EAAE,GAAGC,WAAWC;IACjC,MAAM,EAAEC,SAAS,EAAE,GAAGC;IACtB,MAAM,EAAEC,KAAK,EAAE,GAAGC,SAASC,OAAO,IAAI;IACtC,MAAMC,QAAQC;IACd,MAAMC,KAAKL,MAAM,MAAM,CAAC,EAAE;IAC1B,MAAMM,mBAAmBC;IAEzB,MAAMC,YAAYC,QAAQ,IACf;YACH,GAAGH,gBAAgB;YACnB,0BAA0BhB;QAC9B,IACD;QAACgB;KAAiB;IAErBI,UAAU;QACDf,UAAU,IAAI,CAACU;IACxB,GAAG;QAACV;QAAWU;KAAG;IAElB,MAAMM,WAAWC,YAAY;QACzB,MAAMC,MAAM,MAAMlB,UAAU,IAAI;QAChC,IAAIkB,KACAV,MAAM,gBAAgB,CAAC;YAAE,OAAO;QAA8B;IAEtE,GAAG;QAACR;KAAU;IAEd,MAAM,EAAEmB,EAAE,EAAE,GAAGnB;IAEf,OAAO,WAAP,GACI,oBAACoB,YAAUA,MACND,GAAG,OAAO,GAAG,WAAH,GAAG,oBAACE,eAAaA;QAAC,MAAM;SAAmB,MACrDF,GAAG,MAAM,GAAG,WAAH,GAAG,oBAACE,eAAaA;QAAC,MAAM;SAAkB,MACnDF,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,WAAJ,GACrB,oBAAC;QAAI,WAAW;qBACZ,oBAACG,YAAUA;QAAC,MAAMH,GAAG,IAAI;UAE7B,oBACJ,oBAACI,kBAAgBA;QACb,OAAOJ,GAAG,KAAK,GAAG,mBAAoBA,GAAG,OAAO,EAAE,QAAQ;sBAE9D,oBAACK,mBAAiBA,MAAAA,WAAAA,GACd,oBAACC,UAAQA;QAAC,MAAK;QAAU,MAAMN,GAAG,IAAI;QAAE,WAAWN;sBACnD,oBAACa,eAAaA;QAAC,WAAW1B;uBAE9B,oBAAC2B,kBAAgBA;QAAC,WAAW;qBACzB,oBAACC,QAAMA;QAAC,SAAQ;QAAY,SAAS,IAAMzB,UAAUI,OAAO,IAAI;OAAG,yBAGnE,oBAACsB,eAAaA;QAAC,QAAO;QAAU,QAAO;qBACnC,oBAACD,QAAMA;QAAC,SAAQ;QAAU,SAASZ;QAAU,UAAUG,GAAG,MAAM;OAC3DA,GAAG,MAAM,GAAG,cAAc;AAMnD;AAEO,MAAMW,kBAAkB;IAC3B,MAAMC,YAAYC;IAElB,MAAMC,kBAAkBnB,QAAQ;QAC5B,MAAMoB,QAAQH,UAAU,oBAAoB;QAC5CI,kBAAkB,QAAQ,CAACD;QAC3BE,qBAAqB,QAAQ,CAACF;QAC9BG,qBAAqB,QAAQ,CAACH;QAC9BI,qBAAqB,QAAQ,CAACJ;QAC9BK,2BAA2B,QAAQ,CAACL;QACpCM,0BAA0B,QAAQ,CAACN;QACnChC,4BAA4B,QAAQ,CAACgC;QACrC,OAAOA;IACX,GAAG,EAAE;IAEL,OAAO,WAAP,GACI,oBAACO,qBAAmBA;QAAC,WAAWR;qBAC5B,oBAACnC,sCAAoBA;AAGjC"}
@@ -1,6 +1,6 @@
1
1
  import { ListPresenter } from "@webiny/app-admin/presentation/listPresenter/abstractions.js";
2
2
  import type { Webhook } from "../../../admin/shared/types.js";
3
- import { type IWebhookListPresenter, type IWebhookListViewModel, type IWebhookListActions } from "./abstractions.js";
3
+ import { type IWebhookListPresenter, type IWebhookListViewModel } from "./abstractions.js";
4
4
  import { ListWebhooksUseCase } from "../../../admin/features/ListWebhooks/abstractions.js";
5
5
  import { DeleteWebhookUseCase } from "../../../admin/features/deleteWebhook/abstractions.js";
6
6
  import { TriggerWebhookUseCase } from "../../../admin/features/triggerWebhook/abstractions.js";
@@ -13,7 +13,31 @@ declare class WebhookListPresenterImpl implements IWebhookListPresenter {
13
13
  private readonly permissions;
14
14
  constructor(listPresenter: ListPresenter.Interface<Webhook>, listWebhooksUseCase: ListWebhooksUseCase.Interface, deleteWebhookUseCase: DeleteWebhookUseCase.Interface, triggerWebhookUseCase: TriggerWebhookUseCase.Interface, permissions: WebhookPermissions.Interface);
15
15
  get vm(): IWebhookListViewModel;
16
- actions: IWebhookListActions;
16
+ readonly search: {
17
+ set: (query: string) => void;
18
+ clear: () => void;
19
+ };
20
+ readonly sort: {
21
+ set: (field: string, direction: "ASC" | "DESC") => void;
22
+ toggle: (field: string) => void;
23
+ };
24
+ readonly filter: {
25
+ set: (key: string, value: unknown) => void;
26
+ clear: (key: string) => void;
27
+ clearAll: () => void;
28
+ };
29
+ readonly selection: {
30
+ toggle: (id: string) => void;
31
+ selectRangeTo: (id: string) => void;
32
+ selectAll: () => void;
33
+ deselectAll: () => void;
34
+ selectRows: (ids: string[]) => void;
35
+ isSelected: (id: string) => boolean;
36
+ };
37
+ loadMore(): Promise<void>;
38
+ refresh(): Promise<void>;
39
+ deleteWebhook(id: string): Promise<void>;
40
+ triggerWebhook(id: string): Promise<void>;
17
41
  init(): void;
18
42
  }
19
43
  export declare const WebhookListPresenter: typeof WebhookListPresenterImpl & {
@@ -13,40 +13,26 @@ class WebhookListPresenterImpl {
13
13
  this.deleteWebhookUseCase = deleteWebhookUseCase;
14
14
  this.triggerWebhookUseCase = triggerWebhookUseCase;
15
15
  this.permissions = permissions;
16
- this.actions = {
17
- search: {
18
- set: (query)=>this.listPresenter.actions.search.set(query),
19
- clear: ()=>this.listPresenter.actions.search.clear()
20
- },
21
- sort: {
22
- set: (field, direction)=>this.listPresenter.actions.sort.set(field, direction),
23
- toggle: (field)=>this.listPresenter.actions.sort.toggle(field)
24
- },
25
- filter: {
26
- set: (key, value)=>this.listPresenter.actions.filter.set(key, value),
27
- clear: (key)=>this.listPresenter.actions.filter.clear(key),
28
- clearAll: ()=>this.listPresenter.actions.filter.clearAll()
29
- },
30
- selection: {
31
- toggle: (id)=>this.listPresenter.actions.selection.toggle(id),
32
- selectRangeTo: (id)=>this.listPresenter.actions.selection.selectRangeTo(id),
33
- selectAll: ()=>this.listPresenter.actions.selection.selectAll(),
34
- deselectAll: ()=>this.listPresenter.actions.selection.deselectAll(),
35
- selectRows: (ids)=>this.listPresenter.actions.selection.selectRows(ids),
36
- isSelected: (id)=>this.listPresenter.actions.selection.isSelected(id)
37
- },
38
- loadMore: ()=>this.listPresenter.actions.loadMore(),
39
- refresh: ()=>this.listPresenter.actions.refresh(),
40
- deleteWebhook: async (id)=>{
41
- await this.deleteWebhookUseCase.execute(id);
42
- await this.listPresenter.actions.refresh();
43
- },
44
- triggerWebhook: async (id)=>{
45
- await this.triggerWebhookUseCase.execute(id, {
46
- test: true
47
- });
48
- await this.listPresenter.actions.refresh();
49
- }
16
+ this.search = {
17
+ set: (query)=>this.listPresenter.actions.search.set(query),
18
+ clear: ()=>this.listPresenter.actions.search.clear()
19
+ };
20
+ this.sort = {
21
+ set: (field, direction)=>this.listPresenter.actions.sort.set(field, direction),
22
+ toggle: (field)=>this.listPresenter.actions.sort.toggle(field)
23
+ };
24
+ this.filter = {
25
+ set: (key, value)=>this.listPresenter.actions.filter.set(key, value),
26
+ clear: (key)=>this.listPresenter.actions.filter.clear(key),
27
+ clearAll: ()=>this.listPresenter.actions.filter.clearAll()
28
+ };
29
+ this.selection = {
30
+ toggle: (id)=>this.listPresenter.actions.selection.toggle(id),
31
+ selectRangeTo: (id)=>this.listPresenter.actions.selection.selectRangeTo(id),
32
+ selectAll: ()=>this.listPresenter.actions.selection.selectAll(),
33
+ deselectAll: ()=>this.listPresenter.actions.selection.deselectAll(),
34
+ selectRows: (ids)=>this.listPresenter.actions.selection.selectRows(ids),
35
+ isSelected: (id)=>this.listPresenter.actions.selection.isSelected(id)
50
36
  };
51
37
  makeAutoObservable(this, {
52
38
  vm: computed
@@ -63,6 +49,22 @@ class WebhookListPresenterImpl {
63
49
  }
64
50
  };
65
51
  }
52
+ async loadMore() {
53
+ await this.listPresenter.actions.loadMore();
54
+ }
55
+ async refresh() {
56
+ await this.listPresenter.actions.refresh();
57
+ }
58
+ async deleteWebhook(id) {
59
+ await this.deleteWebhookUseCase.execute(id);
60
+ await this.listPresenter.actions.refresh();
61
+ }
62
+ async triggerWebhook(id) {
63
+ await this.triggerWebhookUseCase.execute(id, {
64
+ test: true
65
+ });
66
+ await this.listPresenter.actions.refresh();
67
+ }
66
68
  init() {
67
69
  const dataSource = new WebhookListDataSource(this.listWebhooksUseCase);
68
70
  this.listPresenter.init({
@@ -1 +1 @@
1
- {"version":3,"file":"admin/presentation/WebhookList/WebhookListPresenter.js","sources":["../../../../src/admin/presentation/WebhookList/WebhookListPresenter.ts"],"sourcesContent":["import { makeAutoObservable, computed } from \"mobx\";\nimport { ListPresenter } from \"@webiny/app-admin/presentation/listPresenter/abstractions.js\";\nimport type { Webhook } from \"~/admin/shared/types.js\";\nimport {\n WebhookListPresenter as Abstraction,\n type IWebhookListPresenter,\n type IWebhookListViewModel,\n type IWebhookListActions\n} from \"./abstractions.js\";\nimport { WebhookListDataSource } from \"./WebhookListDataSource.js\";\nimport { ListWebhooksUseCase } from \"~/admin/features/ListWebhooks/abstractions.js\";\nimport { DeleteWebhookUseCase } from \"~/admin/features/deleteWebhook/abstractions.js\";\nimport { TriggerWebhookUseCase } from \"~/admin/features/triggerWebhook/abstractions.js\";\nimport { WebhookPermissions } from \"~/admin/features/permissions/abstractions.js\";\n\nclass WebhookListPresenterImpl implements IWebhookListPresenter {\n constructor(\n private readonly listPresenter: ListPresenter.Interface<Webhook>,\n private readonly listWebhooksUseCase: ListWebhooksUseCase.Interface,\n private readonly deleteWebhookUseCase: DeleteWebhookUseCase.Interface,\n private readonly triggerWebhookUseCase: TriggerWebhookUseCase.Interface,\n private readonly permissions: WebhookPermissions.Interface\n ) {\n makeAutoObservable(this, { vm: computed });\n }\n\n get vm(): IWebhookListViewModel {\n return {\n list: this.listPresenter.vm,\n permissions: {\n canRead: this.permissions.canRead(\"webhook\"),\n canCreate: this.permissions.canCreate(\"webhook\"),\n canEdit: this.permissions.canEdit(\"webhook\"),\n canDelete: this.permissions.canDelete(\"webhook\")\n }\n };\n }\n\n actions: IWebhookListActions = {\n search: {\n set: (query: string) => this.listPresenter.actions.search.set(query),\n clear: () => this.listPresenter.actions.search.clear()\n },\n sort: {\n set: (field: string, direction: \"ASC\" | \"DESC\") =>\n this.listPresenter.actions.sort.set(field, direction),\n toggle: (field: string) => this.listPresenter.actions.sort.toggle(field)\n },\n filter: {\n set: (key: string, value: unknown) => this.listPresenter.actions.filter.set(key, value),\n clear: (key: string) => this.listPresenter.actions.filter.clear(key),\n clearAll: () => this.listPresenter.actions.filter.clearAll()\n },\n selection: {\n toggle: (id: string) => this.listPresenter.actions.selection.toggle(id),\n selectRangeTo: (id: string) => this.listPresenter.actions.selection.selectRangeTo(id),\n selectAll: () => this.listPresenter.actions.selection.selectAll(),\n deselectAll: () => this.listPresenter.actions.selection.deselectAll(),\n selectRows: (ids: string[]) => this.listPresenter.actions.selection.selectRows(ids),\n isSelected: (id: string) => this.listPresenter.actions.selection.isSelected(id)\n },\n loadMore: () => this.listPresenter.actions.loadMore(),\n refresh: () => this.listPresenter.actions.refresh(),\n deleteWebhook: async (id: string) => {\n await this.deleteWebhookUseCase.execute(id);\n await this.listPresenter.actions.refresh();\n },\n triggerWebhook: async (id: string) => {\n await this.triggerWebhookUseCase.execute(id, { test: true });\n await this.listPresenter.actions.refresh();\n }\n };\n\n init(): void {\n const dataSource = new WebhookListDataSource(this.listWebhooksUseCase);\n this.listPresenter.init({\n dataSource,\n initialSort: { field: \"createdOn\", direction: \"DESC\" },\n limit: 20\n });\n }\n}\n\nexport const WebhookListPresenter = Abstraction.createImplementation({\n implementation: WebhookListPresenterImpl,\n dependencies: [\n ListPresenter,\n ListWebhooksUseCase,\n DeleteWebhookUseCase,\n TriggerWebhookUseCase,\n WebhookPermissions\n ]\n});\n"],"names":["WebhookListPresenterImpl","listPresenter","listWebhooksUseCase","deleteWebhookUseCase","triggerWebhookUseCase","permissions","query","field","direction","key","value","id","ids","makeAutoObservable","computed","dataSource","WebhookListDataSource","WebhookListPresenter","Abstraction","ListPresenter","ListWebhooksUseCase","DeleteWebhookUseCase","TriggerWebhookUseCase","WebhookPermissions"],"mappings":"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"}
1
+ {"version":3,"file":"admin/presentation/WebhookList/WebhookListPresenter.js","sources":["../../../../src/admin/presentation/WebhookList/WebhookListPresenter.ts"],"sourcesContent":["import { makeAutoObservable, computed } from \"mobx\";\nimport { ListPresenter } from \"@webiny/app-admin/presentation/listPresenter/abstractions.js\";\nimport type { Webhook } from \"~/admin/shared/types.js\";\nimport {\n WebhookListPresenter as Abstraction,\n type IWebhookListPresenter,\n type IWebhookListViewModel\n} from \"./abstractions.js\";\nimport { WebhookListDataSource } from \"./WebhookListDataSource.js\";\nimport { ListWebhooksUseCase } from \"~/admin/features/ListWebhooks/abstractions.js\";\nimport { DeleteWebhookUseCase } from \"~/admin/features/deleteWebhook/abstractions.js\";\nimport { TriggerWebhookUseCase } from \"~/admin/features/triggerWebhook/abstractions.js\";\nimport { WebhookPermissions } from \"~/admin/features/permissions/abstractions.js\";\n\nclass WebhookListPresenterImpl implements IWebhookListPresenter {\n constructor(\n private readonly listPresenter: ListPresenter.Interface<Webhook>,\n private readonly listWebhooksUseCase: ListWebhooksUseCase.Interface,\n private readonly deleteWebhookUseCase: DeleteWebhookUseCase.Interface,\n private readonly triggerWebhookUseCase: TriggerWebhookUseCase.Interface,\n private readonly permissions: WebhookPermissions.Interface\n ) {\n makeAutoObservable(this, { vm: computed });\n }\n\n get vm(): IWebhookListViewModel {\n return {\n list: this.listPresenter.vm,\n permissions: {\n canRead: this.permissions.canRead(\"webhook\"),\n canCreate: this.permissions.canCreate(\"webhook\"),\n canEdit: this.permissions.canEdit(\"webhook\"),\n canDelete: this.permissions.canDelete(\"webhook\")\n }\n };\n }\n\n public readonly search = {\n set: (query: string) => this.listPresenter.actions.search.set(query),\n clear: () => this.listPresenter.actions.search.clear()\n };\n\n public readonly sort = {\n set: (field: string, direction: \"ASC\" | \"DESC\") =>\n this.listPresenter.actions.sort.set(field, direction),\n toggle: (field: string) => this.listPresenter.actions.sort.toggle(field)\n };\n\n public readonly filter = {\n set: (key: string, value: unknown) => this.listPresenter.actions.filter.set(key, value),\n clear: (key: string) => this.listPresenter.actions.filter.clear(key),\n clearAll: () => this.listPresenter.actions.filter.clearAll()\n };\n\n public readonly selection = {\n toggle: (id: string) => this.listPresenter.actions.selection.toggle(id),\n selectRangeTo: (id: string) => this.listPresenter.actions.selection.selectRangeTo(id),\n selectAll: () => this.listPresenter.actions.selection.selectAll(),\n deselectAll: () => this.listPresenter.actions.selection.deselectAll(),\n selectRows: (ids: string[]) => this.listPresenter.actions.selection.selectRows(ids),\n isSelected: (id: string) => this.listPresenter.actions.selection.isSelected(id)\n };\n\n public async loadMore(): Promise<void> {\n await this.listPresenter.actions.loadMore();\n }\n\n public async refresh(): Promise<void> {\n await this.listPresenter.actions.refresh();\n }\n\n public async deleteWebhook(id: string): Promise<void> {\n await this.deleteWebhookUseCase.execute(id);\n await this.listPresenter.actions.refresh();\n }\n\n public async triggerWebhook(id: string): Promise<void> {\n await this.triggerWebhookUseCase.execute(id, { test: true });\n await this.listPresenter.actions.refresh();\n }\n\n init(): void {\n const dataSource = new WebhookListDataSource(this.listWebhooksUseCase);\n this.listPresenter.init({\n dataSource,\n initialSort: { field: \"createdOn\", direction: \"DESC\" },\n limit: 20\n });\n }\n}\n\nexport const WebhookListPresenter = Abstraction.createImplementation({\n implementation: WebhookListPresenterImpl,\n dependencies: [\n ListPresenter,\n ListWebhooksUseCase,\n DeleteWebhookUseCase,\n TriggerWebhookUseCase,\n WebhookPermissions\n ]\n});\n"],"names":["WebhookListPresenterImpl","listPresenter","listWebhooksUseCase","deleteWebhookUseCase","triggerWebhookUseCase","permissions","query","field","direction","key","value","id","ids","makeAutoObservable","computed","dataSource","WebhookListDataSource","WebhookListPresenter","Abstraction","ListPresenter","ListWebhooksUseCase","DeleteWebhookUseCase","TriggerWebhookUseCase","WebhookPermissions"],"mappings":"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"}
@@ -1,6 +1,5 @@
1
1
  import type { Webhook } from "../../../admin/shared/types.js";
2
2
  import type { IListViewModel } from "@webiny/app-admin/presentation/listPresenter/abstractions.js";
3
- import type { IListActions } from "@webiny/app-admin/presentation/listPresenter/abstractions.js";
4
3
  export interface IWebhookListViewModel {
5
4
  list: IListViewModel<Webhook>;
6
5
  permissions: {
@@ -10,18 +9,37 @@ export interface IWebhookListViewModel {
10
9
  canDelete: boolean;
11
10
  };
12
11
  }
13
- export interface IWebhookListActions extends IListActions {
14
- deleteWebhook(id: string): Promise<void>;
15
- triggerWebhook(id: string): Promise<void>;
16
- }
17
12
  export interface IWebhookListPresenter {
18
13
  vm: IWebhookListViewModel;
19
- actions: IWebhookListActions;
20
14
  init(): void;
15
+ search: {
16
+ set(query: string): void;
17
+ clear(): void;
18
+ };
19
+ sort: {
20
+ set(field: string, direction: "ASC" | "DESC"): void;
21
+ toggle(field: string): void;
22
+ };
23
+ filter: {
24
+ set(key: string, value: unknown): void;
25
+ clear(key: string): void;
26
+ clearAll(): void;
27
+ };
28
+ selection: {
29
+ toggle(id: string): void;
30
+ selectRangeTo(id: string): void;
31
+ selectAll(): void;
32
+ deselectAll(): void;
33
+ selectRows(ids: string[]): void;
34
+ isSelected(id: string): boolean;
35
+ };
36
+ loadMore(): Promise<void>;
37
+ refresh(): Promise<void>;
38
+ deleteWebhook(id: string): Promise<void>;
39
+ triggerWebhook(id: string): Promise<void>;
21
40
  }
22
41
  export declare const WebhookListPresenter: import("@webiny/di").Abstraction<IWebhookListPresenter>;
23
42
  export declare namespace WebhookListPresenter {
24
43
  type Interface = IWebhookListPresenter;
25
44
  type ViewModel = IWebhookListViewModel;
26
- type Actions = IWebhookListActions;
27
45
  }
@@ -1 +1 @@
1
- {"version":3,"file":"admin/presentation/WebhookList/abstractions.js","sources":["../../../../src/admin/presentation/WebhookList/abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/admin\";\nimport type { Webhook } from \"~/admin/shared/types.js\";\nimport type { IListViewModel } from \"@webiny/app-admin/presentation/listPresenter/abstractions.js\";\nimport type { IListActions } from \"@webiny/app-admin/presentation/listPresenter/abstractions.js\";\n\nexport interface IWebhookListViewModel {\n list: IListViewModel<Webhook>;\n permissions: {\n canRead: boolean;\n canCreate: boolean;\n canEdit: boolean;\n canDelete: boolean;\n };\n}\n\nexport interface IWebhookListActions extends IListActions {\n deleteWebhook(id: string): Promise<void>;\n triggerWebhook(id: string): Promise<void>;\n}\n\nexport interface IWebhookListPresenter {\n vm: IWebhookListViewModel;\n actions: IWebhookListActions;\n init(): void;\n}\n\nexport const WebhookListPresenter =\n createAbstraction<IWebhookListPresenter>(\"WebhookListPresenter\");\n\nexport namespace WebhookListPresenter {\n export type Interface = IWebhookListPresenter;\n export type ViewModel = IWebhookListViewModel;\n export type Actions = IWebhookListActions;\n}\n"],"names":["WebhookListPresenter","createAbstraction"],"mappings":";AA0BO,MAAMA,uBACTC,kBAAyC"}
1
+ {"version":3,"file":"admin/presentation/WebhookList/abstractions.js","sources":["../../../../src/admin/presentation/WebhookList/abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/admin\";\nimport type { Webhook } from \"~/admin/shared/types.js\";\nimport type { IListViewModel } from \"@webiny/app-admin/presentation/listPresenter/abstractions.js\";\n\nexport interface IWebhookListViewModel {\n list: IListViewModel<Webhook>;\n permissions: {\n canRead: boolean;\n canCreate: boolean;\n canEdit: boolean;\n canDelete: boolean;\n };\n}\n\nexport interface IWebhookListPresenter {\n vm: IWebhookListViewModel;\n init(): void;\n search: { set(query: string): void; clear(): void };\n sort: { set(field: string, direction: \"ASC\" | \"DESC\"): void; toggle(field: string): void };\n filter: { set(key: string, value: unknown): void; clear(key: string): void; clearAll(): void };\n selection: {\n toggle(id: string): void;\n selectRangeTo(id: string): void;\n selectAll(): void;\n deselectAll(): void;\n selectRows(ids: string[]): void;\n isSelected(id: string): boolean;\n };\n loadMore(): Promise<void>;\n refresh(): Promise<void>;\n deleteWebhook(id: string): Promise<void>;\n triggerWebhook(id: string): Promise<void>;\n}\n\nexport const WebhookListPresenter =\n createAbstraction<IWebhookListPresenter>(\"WebhookListPresenter\");\n\nexport namespace WebhookListPresenter {\n export type Interface = IWebhookListPresenter;\n export type ViewModel = IWebhookListViewModel;\n}\n"],"names":["WebhookListPresenter","createAbstraction"],"mappings":";AAkCO,MAAMA,uBACTC,kBAAyC"}
@@ -0,0 +1,2 @@
1
+ import React from "react";
2
+ export declare const CreateWebhookButton: () => React.JSX.Element;
@@ -0,0 +1,22 @@
1
+ import react from "react";
2
+ import { useRouter } from "@webiny/app-admin";
3
+ import { Button } from "@webiny/admin-ui";
4
+ import { ReactComponent } from "@webiny/icons/add.svg";
5
+ import { HasPermission } from "../../security/HasPermission.js";
6
+ import { Routes } from "../../../routes.js";
7
+ const CreateWebhookButton = ()=>{
8
+ const { goToRoute } = useRouter();
9
+ return /*#__PURE__*/ react.createElement(HasPermission, {
10
+ entity: "webhook",
11
+ action: "edit"
12
+ }, /*#__PURE__*/ react.createElement(Button, {
13
+ variant: "primary",
14
+ onClick: ()=>goToRoute(Routes.Form, {
15
+ id: "new"
16
+ }),
17
+ icon: /*#__PURE__*/ react.createElement(ReactComponent, null)
18
+ }, "Create Webhook"));
19
+ };
20
+ export { CreateWebhookButton };
21
+
22
+ //# sourceMappingURL=CreateWebhookButton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin/presentation/WebhookList/components/CreateWebhookButton.js","sources":["../../../../../src/admin/presentation/WebhookList/components/CreateWebhookButton.tsx"],"sourcesContent":["import React from \"react\";\nimport { useRouter } from \"@webiny/app-admin\";\nimport { Button } from \"@webiny/admin-ui\";\nimport { ReactComponent as AddIcon } from \"@webiny/icons/add.svg\";\nimport { HasPermission } from \"~/admin/presentation/security/HasPermission.js\";\nimport { Routes } from \"~/admin/routes.js\";\n\nexport const CreateWebhookButton = () => {\n const { goToRoute } = useRouter();\n\n return (\n <HasPermission entity=\"webhook\" action=\"edit\">\n <Button\n variant=\"primary\"\n onClick={() => goToRoute(Routes.Form, { id: \"new\" })}\n icon={<AddIcon />}\n >\n Create Webhook\n </Button>\n </HasPermission>\n );\n};\n"],"names":["CreateWebhookButton","goToRoute","useRouter","HasPermission","Button","Routes","AddIcon"],"mappings":";;;;;;AAOO,MAAMA,sBAAsB;IAC/B,MAAM,EAAEC,SAAS,EAAE,GAAGC;IAEtB,OAAO,WAAP,GACI,oBAACC,eAAaA;QAAC,QAAO;QAAU,QAAO;qBACnC,oBAACC,QAAMA;QACH,SAAQ;QACR,SAAS,IAAMH,UAAUI,OAAO,IAAI,EAAE;gBAAE,IAAI;YAAM;QAClD,oBAAM,oBAACC,gBAAOA;OACjB;AAKb"}
@@ -0,0 +1,2 @@
1
+ import React from "react";
2
+ export declare const WebhookDeliveriesButton: () => React.JSX.Element;
@@ -0,0 +1,16 @@
1
+ import react from "react";
2
+ import { useRouter } from "@webiny/app-admin";
3
+ import { Button } from "@webiny/admin-ui";
4
+ import { ReactComponent } from "@webiny/icons/list.svg";
5
+ import { Routes } from "../../../routes.js";
6
+ const WebhookDeliveriesButton = ()=>{
7
+ const { goToRoute } = useRouter();
8
+ return /*#__PURE__*/ react.createElement(Button, {
9
+ variant: "secondary",
10
+ onClick: ()=>goToRoute(Routes.Deliveries),
11
+ icon: /*#__PURE__*/ react.createElement(ReactComponent, null)
12
+ }, "All Deliveries");
13
+ };
14
+ export { WebhookDeliveriesButton };
15
+
16
+ //# sourceMappingURL=WebhookDeliveriesButton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin/presentation/WebhookList/components/WebhookDeliveriesButton.js","sources":["../../../../../src/admin/presentation/WebhookList/components/WebhookDeliveriesButton.tsx"],"sourcesContent":["import React from \"react\";\nimport { useRouter } from \"@webiny/app-admin\";\nimport { Button } from \"@webiny/admin-ui\";\nimport { ReactComponent as ListIcon } from \"@webiny/icons/list.svg\";\nimport { Routes } from \"~/admin/routes.js\";\n\nexport const WebhookDeliveriesButton = () => {\n const { goToRoute } = useRouter();\n\n return (\n <Button\n variant=\"secondary\"\n onClick={() => goToRoute(Routes.Deliveries)}\n icon={<ListIcon />}\n >\n All Deliveries\n </Button>\n );\n};\n"],"names":["WebhookDeliveriesButton","goToRoute","useRouter","Button","Routes","ListIcon"],"mappings":";;;;;AAMO,MAAMA,0BAA0B;IACnC,MAAM,EAAEC,SAAS,EAAE,GAAGC;IAEtB,OAAO,WAAP,GACI,oBAACC,QAAMA;QACH,SAAQ;QACR,SAAS,IAAMF,UAAUG,OAAO,UAAU;QAC1C,oBAAM,oBAACC,gBAAQA;OAClB;AAIT"}
@@ -0,0 +1,9 @@
1
+ import React from "react";
2
+ import type { IWebhookListPresenter } from "../abstractions.js";
3
+ interface WebhookListContentProps {
4
+ presenter: IWebhookListPresenter;
5
+ }
6
+ export declare const WebhookListContent: (({ presenter }: WebhookListContentProps) => React.JSX.Element) & {
7
+ displayName: string;
8
+ };
9
+ export {};
@@ -0,0 +1,170 @@
1
+ import react, { useCallback, useMemo } from "react";
2
+ import debounce from "lodash/debounce.js";
3
+ import { observer } from "mobx-react-lite";
4
+ import { useRouter } from "@webiny/app-admin";
5
+ import { Button, DataTable, DropdownMenu, IconButton, Scrollbar, Tag, Text, TimeAgo, useToast } from "@webiny/admin-ui";
6
+ import { useConfirmationDialog } from "@webiny/app-admin/hooks/index.js";
7
+ import { HasPermission } from "../../security/HasPermission.js";
8
+ import { ReactComponent } from "@webiny/icons/more_vert.svg";
9
+ import { ReactComponent as edit_svg_ReactComponent } from "@webiny/icons/edit.svg";
10
+ import { ReactComponent as delete_svg_ReactComponent } from "@webiny/icons/delete.svg";
11
+ import { ReactComponent as webhook_svg_ReactComponent } from "@webiny/icons/webhook.svg";
12
+ import { CreateWebhookButton } from "./CreateWebhookButton.js";
13
+ import { Routes } from "../../../routes.js";
14
+ const WebhookListContent_WebhookListContent = observer(function({ presenter }) {
15
+ const { vm } = presenter;
16
+ const { goToRoute } = useRouter();
17
+ const toast = useToast();
18
+ const { showConfirmation: showDeleteConfirmation } = useConfirmationDialog({
19
+ title: "Delete Webhook",
20
+ message: "Are you sure you want to delete this webhook?"
21
+ });
22
+ const loadMoreOnScroll = useMemo(()=>debounce(async ({ scrollFrame })=>{
23
+ if (scrollFrame.top > 0.8) await presenter.loadMore();
24
+ }, 200), [
25
+ presenter
26
+ ]);
27
+ const sorting = useMemo(()=>{
28
+ const sort = vm.list.sort;
29
+ if (!sort || !sort.field) return [];
30
+ return [
31
+ {
32
+ id: sort.field,
33
+ desc: "DESC" === sort.direction
34
+ }
35
+ ];
36
+ }, [
37
+ vm.list.sort
38
+ ]);
39
+ const onSortingChange = useCallback((updater)=>{
40
+ const next = "function" == typeof updater ? updater(sorting) : updater;
41
+ if (next.length > 0) {
42
+ const { id, desc } = next[0];
43
+ presenter.sort.set(id, desc ? "DESC" : "ASC");
44
+ }
45
+ }, [
46
+ sorting,
47
+ presenter.sort
48
+ ]);
49
+ const columns = useMemo(()=>({
50
+ name: {
51
+ header: "Name",
52
+ cell: (row)=>/*#__PURE__*/ react.createElement(Text, {
53
+ className: "cursor-pointer text-primary hover:underline",
54
+ onClick: ()=>goToRoute(Routes.Form, {
55
+ id: row.id
56
+ })
57
+ }, row.name),
58
+ enableSorting: true,
59
+ size: 200
60
+ },
61
+ endpointUrl: {
62
+ header: "Endpoint",
63
+ cell: (row)=>/*#__PURE__*/ react.createElement(Text, {
64
+ className: "font-mono text-sm truncate"
65
+ }, row.endpointUrl),
66
+ size: 250
67
+ },
68
+ enabled: {
69
+ header: "Status",
70
+ cell: (row)=>/*#__PURE__*/ react.createElement(Tag, {
71
+ variant: row.enabled ? "success" : "neutral-muted",
72
+ content: row.enabled ? "Active" : "Disabled"
73
+ }),
74
+ enableSorting: true,
75
+ size: 100
76
+ },
77
+ createdOn: {
78
+ header: "Created",
79
+ cell: (row)=>row.createdOn ? /*#__PURE__*/ react.createElement(TimeAgo, {
80
+ datetime: row.createdOn
81
+ }) : /*#__PURE__*/ react.createElement(Text, {
82
+ size: "sm"
83
+ }, "—"),
84
+ enableSorting: true,
85
+ size: 120
86
+ },
87
+ deliveries: {
88
+ header: "Deliveries",
89
+ truncate: false,
90
+ cell: (row)=>/*#__PURE__*/ react.createElement(Button, {
91
+ variant: "secondary",
92
+ onClick: ()=>{
93
+ goToRoute(Routes.Deliveries, {
94
+ webhookId: row.id
95
+ });
96
+ }
97
+ }, "Deliveries")
98
+ },
99
+ actions: {
100
+ header: " ",
101
+ cell: (row)=>/*#__PURE__*/ react.createElement(DropdownMenu, {
102
+ trigger: /*#__PURE__*/ react.createElement(IconButton, {
103
+ icon: /*#__PURE__*/ react.createElement(ReactComponent, null),
104
+ variant: "ghost",
105
+ size: "sm",
106
+ "aria-label": "Actions"
107
+ })
108
+ }, /*#__PURE__*/ react.createElement(DropdownMenu.Item, {
109
+ icon: /*#__PURE__*/ react.createElement(edit_svg_ReactComponent, null),
110
+ onClick: ()=>goToRoute(Routes.Form, {
111
+ id: row.id
112
+ }),
113
+ text: "Edit"
114
+ }), /*#__PURE__*/ react.createElement(HasPermission, {
115
+ entity: "webhook",
116
+ action: "edit"
117
+ }, /*#__PURE__*/ react.createElement(DropdownMenu.Item, {
118
+ icon: /*#__PURE__*/ react.createElement(webhook_svg_ReactComponent, null),
119
+ onClick: ()=>{
120
+ presenter.triggerWebhook(row.id).then(()=>{
121
+ toast.showSuccessToast({
122
+ title: "Test event triggered!"
123
+ });
124
+ });
125
+ },
126
+ text: "Trigger Test"
127
+ })), /*#__PURE__*/ react.createElement(HasPermission, {
128
+ entity: "webhook",
129
+ action: "delete"
130
+ }, /*#__PURE__*/ react.createElement(DropdownMenu.Separator, null), /*#__PURE__*/ react.createElement(DropdownMenu.Item, {
131
+ className: "text-destructive-primary! [&_svg]:fill-destructive",
132
+ onClick: ()=>{
133
+ showDeleteConfirmation(()=>presenter.deleteWebhook(row.id));
134
+ },
135
+ icon: /*#__PURE__*/ react.createElement(delete_svg_ReactComponent, null),
136
+ text: "Delete"
137
+ }))),
138
+ size: 56,
139
+ enableSorting: false,
140
+ enableHiding: false,
141
+ enableResizing: false
142
+ }
143
+ }), [
144
+ presenter
145
+ ]);
146
+ if (!vm.list.pagination.loading && 0 === vm.list.rows.length) return /*#__PURE__*/ react.createElement("div", {
147
+ className: "flex-1 overflow-hidden"
148
+ }, /*#__PURE__*/ react.createElement("div", {
149
+ className: "flex flex-col items-center justify-center h-full gap-md"
150
+ }, /*#__PURE__*/ react.createElement(Text, {
151
+ className: "text-neutral-strong"
152
+ }, "No webhooks found."), /*#__PURE__*/ react.createElement(CreateWebhookButton, null)));
153
+ return /*#__PURE__*/ react.createElement("div", {
154
+ className: "flex-1 overflow-hidden"
155
+ }, /*#__PURE__*/ react.createElement(Scrollbar, {
156
+ onScrollFrame: (scrollFrame)=>loadMoreOnScroll({
157
+ scrollFrame
158
+ })
159
+ }, /*#__PURE__*/ react.createElement(DataTable, {
160
+ columns: columns,
161
+ data: vm.list.rows,
162
+ loading: vm.list.pagination.loading,
163
+ sorting: sorting,
164
+ onSortingChange: onSortingChange,
165
+ stickyHeader: true
166
+ })));
167
+ });
168
+ export { WebhookListContent_WebhookListContent as WebhookListContent };
169
+
170
+ //# sourceMappingURL=WebhookListContent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin/presentation/WebhookList/components/WebhookListContent.js","sources":["../../../../../src/admin/presentation/WebhookList/components/WebhookListContent.tsx"],"sourcesContent":["import React, { useCallback, useMemo } from \"react\";\nimport debounce from \"lodash/debounce.js\";\nimport { observer } from \"mobx-react-lite\";\nimport { useRouter } from \"@webiny/app-admin\";\nimport type { DataTableSorting, OnDataTableSortingChange } from \"@webiny/admin-ui\";\nimport {\n Button,\n DataTable,\n DropdownMenu,\n IconButton,\n Scrollbar,\n Tag,\n Text,\n TimeAgo\n} from \"@webiny/admin-ui\";\nimport { useToast } from \"@webiny/admin-ui\";\nimport { useConfirmationDialog } from \"@webiny/app-admin/hooks/index.js\";\nimport { HasPermission } from \"~/admin/presentation/security/HasPermission.js\";\nimport { ReactComponent as MoreVerticalIcon } from \"@webiny/icons/more_vert.svg\";\nimport { ReactComponent as Edit } from \"@webiny/icons/edit.svg\";\nimport { ReactComponent as Delete } from \"@webiny/icons/delete.svg\";\nimport { ReactComponent as WebhookIcon } from \"@webiny/icons/webhook.svg\";\nimport { CreateWebhookButton } from \"./CreateWebhookButton.js\";\nimport { Routes } from \"~/admin/routes.js\";\nimport type { IWebhookListPresenter } from \"../abstractions.js\";\nimport type { Webhook } from \"~/admin/shared/types.js\";\n\ninterface WebhookListContentProps {\n presenter: IWebhookListPresenter;\n}\n\nexport const WebhookListContent = observer(function WebhookListContent({\n presenter\n}: WebhookListContentProps) {\n const { vm } = presenter;\n const { goToRoute } = useRouter();\n const toast = useToast();\n\n const { showConfirmation: showDeleteConfirmation } = useConfirmationDialog({\n title: \"Delete Webhook\",\n message: \"Are you sure you want to delete this webhook?\"\n });\n\n const loadMoreOnScroll = useMemo(\n () =>\n debounce(async ({ scrollFrame }: { scrollFrame: { top: number } }) => {\n if (scrollFrame.top > 0.8) {\n await presenter.loadMore();\n }\n }, 200),\n [presenter]\n );\n\n const sorting: DataTableSorting = useMemo(() => {\n const sort = vm.list.sort;\n if (!sort || !sort.field) {\n return [];\n }\n return [{ id: sort.field, desc: sort.direction === \"DESC\" }];\n }, [vm.list.sort]);\n\n const onSortingChange: OnDataTableSortingChange = useCallback(\n updater => {\n const next = typeof updater === \"function\" ? updater(sorting) : updater;\n if (next.length > 0) {\n const { id, desc } = next[0];\n presenter.sort.set(id, desc ? \"DESC\" : \"ASC\");\n }\n },\n [sorting, presenter.sort]\n );\n\n const columns = useMemo(\n () => ({\n name: {\n header: \"Name\",\n cell: (row: Webhook) => (\n <Text\n className=\"cursor-pointer text-primary hover:underline\"\n onClick={() => goToRoute(Routes.Form, { id: row.id })}\n >\n {row.name}\n </Text>\n ),\n enableSorting: true,\n size: 200\n },\n endpointUrl: {\n header: \"Endpoint\",\n cell: (row: Webhook) => (\n <Text className=\"font-mono text-sm truncate\">{row.endpointUrl}</Text>\n ),\n size: 250\n },\n enabled: {\n header: \"Status\",\n cell: (row: Webhook) => (\n <Tag\n variant={row.enabled ? \"success\" : \"neutral-muted\"}\n content={row.enabled ? \"Active\" : \"Disabled\"}\n />\n ),\n enableSorting: true,\n size: 100\n },\n createdOn: {\n header: \"Created\",\n cell: (row: Webhook) =>\n row.createdOn ? <TimeAgo datetime={row.createdOn} /> : <Text size=\"sm\">—</Text>,\n enableSorting: true,\n size: 120\n },\n deliveries: {\n header: \"Deliveries\",\n truncate: false,\n cell: (row: Webhook) => {\n return (\n <Button\n variant={\"secondary\"}\n onClick={() => {\n goToRoute(Routes.Deliveries, { webhookId: row.id });\n }}\n >\n Deliveries\n </Button>\n );\n }\n },\n actions: {\n header: \" \",\n cell: (row: Webhook) => (\n <DropdownMenu\n trigger={\n <IconButton\n icon={<MoreVerticalIcon />}\n variant=\"ghost\"\n size=\"sm\"\n aria-label=\"Actions\"\n />\n }\n >\n <DropdownMenu.Item\n icon={<Edit />}\n onClick={() => goToRoute(Routes.Form, { id: row.id })}\n text={\"Edit\"}\n />\n <HasPermission entity=\"webhook\" action=\"edit\">\n <DropdownMenu.Item\n icon={<WebhookIcon />}\n onClick={() => {\n void presenter.triggerWebhook(row.id).then(() => {\n toast.showSuccessToast({ title: \"Test event triggered!\" });\n });\n }}\n text={\"Trigger Test\"}\n />\n </HasPermission>\n <HasPermission entity=\"webhook\" action=\"delete\">\n <DropdownMenu.Separator />\n <DropdownMenu.Item\n className={\"text-destructive-primary! [&_svg]:fill-destructive\"}\n onClick={() => {\n showDeleteConfirmation(() => presenter.deleteWebhook(row.id));\n }}\n icon={<Delete />}\n text={\"Delete\"}\n />\n </HasPermission>\n </DropdownMenu>\n ),\n size: 56,\n enableSorting: false,\n enableHiding: false,\n enableResizing: false\n }\n }),\n [presenter]\n );\n\n if (!vm.list.pagination.loading && vm.list.rows.length === 0) {\n return (\n <div className=\"flex-1 overflow-hidden\">\n <div className=\"flex flex-col items-center justify-center h-full gap-md\">\n <Text className=\"text-neutral-strong\">No webhooks found.</Text>\n <CreateWebhookButton />\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"flex-1 overflow-hidden\">\n <Scrollbar onScrollFrame={scrollFrame => loadMoreOnScroll({ scrollFrame })}>\n <DataTable<Webhook>\n columns={columns}\n data={vm.list.rows}\n loading={vm.list.pagination.loading}\n sorting={sorting}\n onSortingChange={onSortingChange}\n stickyHeader\n />\n </Scrollbar>\n </div>\n );\n});\n"],"names":["WebhookListContent","observer","presenter","vm","goToRoute","useRouter","toast","useToast","showDeleteConfirmation","useConfirmationDialog","loadMoreOnScroll","useMemo","debounce","scrollFrame","sorting","sort","onSortingChange","useCallback","updater","next","id","desc","columns","row","Text","Routes","Tag","TimeAgo","Button","DropdownMenu","IconButton","MoreVerticalIcon","Edit","HasPermission","WebhookIcon","Delete","CreateWebhookButton","Scrollbar","DataTable"],"mappings":"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"}