@contember/interface 2.0.0-alpha.4 → 2.0.0-alpha.40

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 (147) hide show
  1. package/api-extractor.json +3 -0
  2. package/dist/development/index.cjs +20 -25
  3. package/dist/development/index.cjs.map +1 -1
  4. package/dist/development/index.js +8 -10
  5. package/dist/development/index.js.map +1 -1
  6. package/dist/development/{bootstrap → src/bootstrap}/ApplicationEntrypoint.cjs +7 -7
  7. package/dist/development/src/bootstrap/ApplicationEntrypoint.cjs.map +1 -0
  8. package/dist/development/{bootstrap → src/bootstrap}/ApplicationEntrypoint.js +7 -7
  9. package/dist/development/src/bootstrap/ApplicationEntrypoint.js.map +1 -0
  10. package/dist/development/{bootstrap → src/bootstrap}/DataViewPageNameKeyProvider.cjs +1 -1
  11. package/dist/development/src/bootstrap/DataViewPageNameKeyProvider.cjs.map +1 -0
  12. package/dist/development/{bootstrap → src/bootstrap}/DataViewPageNameKeyProvider.js +1 -1
  13. package/dist/development/src/bootstrap/DataViewPageNameKeyProvider.js.map +1 -0
  14. package/dist/development/{components → src/components}/binding/ClearFieldTrigger.cjs +4 -4
  15. package/dist/development/src/components/binding/ClearFieldTrigger.cjs.map +1 -0
  16. package/dist/development/{components → src/components}/binding/ClearFieldTrigger.js +2 -2
  17. package/dist/development/src/components/binding/ClearFieldTrigger.js.map +1 -0
  18. package/dist/development/{components → src/components}/binding/DisconnectEntityTrigger.cjs +5 -5
  19. package/dist/development/src/components/binding/DisconnectEntityTrigger.cjs.map +1 -0
  20. package/dist/development/{components → src/components}/binding/DisconnectEntityTrigger.js +4 -4
  21. package/dist/development/src/components/binding/DisconnectEntityTrigger.js.map +1 -0
  22. package/dist/development/src/components/binding/EntityBeforePersist.cjs.map +1 -0
  23. package/dist/development/src/components/binding/EntityBeforePersist.js.map +1 -0
  24. package/dist/{production → development/src}/components/binding/RedirectOnPersist.cjs +2 -2
  25. package/dist/development/src/components/binding/RedirectOnPersist.cjs.map +1 -0
  26. package/dist/development/{components → src/components}/binding/RedirectOnPersist.js +2 -2
  27. package/dist/development/src/components/binding/RedirectOnPersist.js.map +1 -0
  28. package/dist/development/src/hooks/useBlockNavigationOnDirtyState.cjs +36 -0
  29. package/dist/development/src/hooks/useBlockNavigationOnDirtyState.cjs.map +1 -0
  30. package/dist/development/src/hooks/useBlockNavigationOnDirtyState.js +36 -0
  31. package/dist/development/src/hooks/useBlockNavigationOnDirtyState.js.map +1 -0
  32. package/dist/development/{hooks → src/hooks}/useIsApplicationOutdated.cjs +8 -8
  33. package/dist/development/src/hooks/useIsApplicationOutdated.cjs.map +1 -0
  34. package/dist/development/{hooks → src/hooks}/useIsApplicationOutdated.js +1 -1
  35. package/dist/development/src/hooks/useIsApplicationOutdated.js.map +1 -0
  36. package/dist/production/index.cjs +20 -25
  37. package/dist/production/index.cjs.map +1 -1
  38. package/dist/production/index.js +8 -10
  39. package/dist/production/index.js.map +1 -1
  40. package/dist/production/src/bootstrap/ApplicationEntrypoint.cjs.map +1 -0
  41. package/dist/production/src/bootstrap/ApplicationEntrypoint.js.map +1 -0
  42. package/dist/production/src/bootstrap/DataViewPageNameKeyProvider.cjs.map +1 -0
  43. package/dist/production/src/bootstrap/DataViewPageNameKeyProvider.js.map +1 -0
  44. package/dist/production/{components → src/components}/binding/ClearFieldTrigger.cjs +2 -2
  45. package/dist/production/src/components/binding/ClearFieldTrigger.cjs.map +1 -0
  46. package/dist/production/src/components/binding/ClearFieldTrigger.js.map +1 -0
  47. package/dist/production/{components → src/components}/binding/DisconnectEntityTrigger.cjs +3 -3
  48. package/dist/production/src/components/binding/DisconnectEntityTrigger.cjs.map +1 -0
  49. package/dist/production/{components → src/components}/binding/DisconnectEntityTrigger.js +2 -2
  50. package/dist/production/src/components/binding/DisconnectEntityTrigger.js.map +1 -0
  51. package/dist/production/src/components/binding/EntityBeforePersist.cjs.map +1 -0
  52. package/dist/production/src/components/binding/EntityBeforePersist.js.map +1 -0
  53. package/dist/{development → production/src}/components/binding/RedirectOnPersist.cjs +2 -2
  54. package/dist/production/src/components/binding/RedirectOnPersist.cjs.map +1 -0
  55. package/dist/production/{components → src/components}/binding/RedirectOnPersist.js +2 -2
  56. package/dist/production/src/components/binding/RedirectOnPersist.js.map +1 -0
  57. package/dist/production/src/hooks/useBlockNavigationOnDirtyState.cjs +36 -0
  58. package/dist/production/src/hooks/useBlockNavigationOnDirtyState.cjs.map +1 -0
  59. package/dist/production/src/hooks/useBlockNavigationOnDirtyState.js +36 -0
  60. package/dist/production/src/hooks/useBlockNavigationOnDirtyState.js.map +1 -0
  61. package/dist/production/{hooks → src/hooks}/useIsApplicationOutdated.cjs +8 -8
  62. package/dist/production/src/hooks/useIsApplicationOutdated.cjs.map +1 -0
  63. package/dist/production/{hooks → src/hooks}/useIsApplicationOutdated.js +1 -1
  64. package/dist/production/src/hooks/useIsApplicationOutdated.js.map +1 -0
  65. package/dist/types/bootstrap/ApplicationEntrypoint.d.ts.map +1 -1
  66. package/dist/types/components/binding/DisconnectEntityTrigger.d.ts.map +1 -1
  67. package/dist/types/components/binding/EntityBeforePersist.d.ts +1 -1
  68. package/dist/types/components/binding/EntityBeforePersist.d.ts.map +1 -1
  69. package/dist/types/components/binding/RedirectOnPersist.d.ts +3 -1
  70. package/dist/types/components/binding/RedirectOnPersist.d.ts.map +1 -1
  71. package/dist/types/components/binding/index.d.ts +0 -2
  72. package/dist/types/components/binding/index.d.ts.map +1 -1
  73. package/dist/types/hooks/index.d.ts +1 -0
  74. package/dist/types/hooks/index.d.ts.map +1 -1
  75. package/dist/types/hooks/useBlockNavigationOnDirtyState.d.ts +7 -0
  76. package/dist/types/hooks/useBlockNavigationOnDirtyState.d.ts.map +1 -0
  77. package/dist/types/tsconfig.tsbuildinfo +1 -1
  78. package/package.json +13 -21
  79. package/src/bootstrap/ApplicationEntrypoint.tsx +1 -1
  80. package/src/components/binding/DisconnectEntityTrigger.tsx +3 -2
  81. package/src/components/binding/RedirectOnPersist.tsx +3 -3
  82. package/src/components/binding/index.ts +0 -2
  83. package/src/hooks/index.ts +1 -0
  84. package/src/hooks/useBlockNavigationOnDirtyState.ts +40 -0
  85. package/src/hooks/useIsApplicationOutdated.ts +1 -1
  86. package/src/tsconfig.json +0 -1
  87. package/tsconfig.json +7 -0
  88. package/tsdoc.json +6 -0
  89. package/dist/development/bootstrap/ApplicationEntrypoint.cjs.map +0 -1
  90. package/dist/development/bootstrap/ApplicationEntrypoint.js.map +0 -1
  91. package/dist/development/bootstrap/DataViewPageNameKeyProvider.cjs.map +0 -1
  92. package/dist/development/bootstrap/DataViewPageNameKeyProvider.js.map +0 -1
  93. package/dist/development/components/binding/ClearFieldTrigger.cjs.map +0 -1
  94. package/dist/development/components/binding/ClearFieldTrigger.js.map +0 -1
  95. package/dist/development/components/binding/DeleteEntityTrigger.cjs +0 -36
  96. package/dist/development/components/binding/DeleteEntityTrigger.cjs.map +0 -1
  97. package/dist/development/components/binding/DeleteEntityTrigger.js +0 -36
  98. package/dist/development/components/binding/DeleteEntityTrigger.js.map +0 -1
  99. package/dist/development/components/binding/DisconnectEntityTrigger.cjs.map +0 -1
  100. package/dist/development/components/binding/DisconnectEntityTrigger.js.map +0 -1
  101. package/dist/development/components/binding/EntityBeforePersist.cjs.map +0 -1
  102. package/dist/development/components/binding/EntityBeforePersist.js.map +0 -1
  103. package/dist/development/components/binding/PersistTrigger.cjs +0 -37
  104. package/dist/development/components/binding/PersistTrigger.cjs.map +0 -1
  105. package/dist/development/components/binding/PersistTrigger.js +0 -37
  106. package/dist/development/components/binding/PersistTrigger.js.map +0 -1
  107. package/dist/development/components/binding/RedirectOnPersist.cjs.map +0 -1
  108. package/dist/development/components/binding/RedirectOnPersist.js.map +0 -1
  109. package/dist/development/hooks/useIsApplicationOutdated.cjs.map +0 -1
  110. package/dist/development/hooks/useIsApplicationOutdated.js.map +0 -1
  111. package/dist/production/bootstrap/ApplicationEntrypoint.cjs.map +0 -1
  112. package/dist/production/bootstrap/ApplicationEntrypoint.js.map +0 -1
  113. package/dist/production/bootstrap/DataViewPageNameKeyProvider.cjs.map +0 -1
  114. package/dist/production/bootstrap/DataViewPageNameKeyProvider.js.map +0 -1
  115. package/dist/production/components/binding/ClearFieldTrigger.cjs.map +0 -1
  116. package/dist/production/components/binding/ClearFieldTrigger.js.map +0 -1
  117. package/dist/production/components/binding/DeleteEntityTrigger.cjs +0 -28
  118. package/dist/production/components/binding/DeleteEntityTrigger.cjs.map +0 -1
  119. package/dist/production/components/binding/DeleteEntityTrigger.js +0 -28
  120. package/dist/production/components/binding/DeleteEntityTrigger.js.map +0 -1
  121. package/dist/production/components/binding/DisconnectEntityTrigger.cjs.map +0 -1
  122. package/dist/production/components/binding/DisconnectEntityTrigger.js.map +0 -1
  123. package/dist/production/components/binding/EntityBeforePersist.cjs.map +0 -1
  124. package/dist/production/components/binding/EntityBeforePersist.js.map +0 -1
  125. package/dist/production/components/binding/PersistTrigger.cjs +0 -29
  126. package/dist/production/components/binding/PersistTrigger.cjs.map +0 -1
  127. package/dist/production/components/binding/PersistTrigger.js +0 -29
  128. package/dist/production/components/binding/PersistTrigger.js.map +0 -1
  129. package/dist/production/components/binding/RedirectOnPersist.cjs.map +0 -1
  130. package/dist/production/components/binding/RedirectOnPersist.js.map +0 -1
  131. package/dist/production/hooks/useIsApplicationOutdated.cjs.map +0 -1
  132. package/dist/production/hooks/useIsApplicationOutdated.js.map +0 -1
  133. package/dist/types/components/binding/DeleteEntityTrigger.d.ts +0 -10
  134. package/dist/types/components/binding/DeleteEntityTrigger.d.ts.map +0 -1
  135. package/dist/types/components/binding/PersistTrigger.d.ts +0 -9
  136. package/dist/types/components/binding/PersistTrigger.d.ts.map +0 -1
  137. package/src/components/binding/DeleteEntityTrigger.tsx +0 -36
  138. package/src/components/binding/PersistTrigger.tsx +0 -35
  139. /package/dist/development/{components → src/components}/binding/EntityBeforePersist.cjs +0 -0
  140. /package/dist/development/{components → src/components}/binding/EntityBeforePersist.js +0 -0
  141. /package/dist/production/{bootstrap → src/bootstrap}/ApplicationEntrypoint.cjs +0 -0
  142. /package/dist/production/{bootstrap → src/bootstrap}/ApplicationEntrypoint.js +0 -0
  143. /package/dist/production/{bootstrap → src/bootstrap}/DataViewPageNameKeyProvider.cjs +0 -0
  144. /package/dist/production/{bootstrap → src/bootstrap}/DataViewPageNameKeyProvider.js +0 -0
  145. /package/dist/production/{components → src/components}/binding/ClearFieldTrigger.js +0 -0
  146. /package/dist/production/{components → src/components}/binding/EntityBeforePersist.cjs +0 -0
  147. /package/dist/production/{components → src/components}/binding/EntityBeforePersist.js +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"DisconnectEntityTrigger.cjs","sources":["../../../../src/components/binding/DisconnectEntityTrigger.tsx"],"sourcesContent":["import { ComponentType, ReactNode, useCallback } from 'react'\nimport { Slot } from '@radix-ui/react-slot'\nimport { BindingError, EntityListAccessor, ErrorPersistResult, SuccessfulPersistResult, SugaredRelativeSingleEntity, useEntity, useMutationState, usePersist } from '@contember/react-binding'\n\n\nconst SlotButton = Slot as ComponentType<React.ButtonHTMLAttributes<HTMLButtonElement>>\n\nexport interface DisconnectEntityTriggerProps {\n\timmediatePersist?: true\n\tchildren: ReactNode\n\tonPersistSuccess?: (result: SuccessfulPersistResult) => void\n\tonPersistError?: (result: ErrorPersistResult) => void\n\tfield?: SugaredRelativeSingleEntity['field']\n}\n\nexport const DisconnectEntityTrigger = ({ immediatePersist, onPersistError, onPersistSuccess, field, ...props }: DisconnectEntityTriggerProps) => {\n\tconst entity = useEntity()\n\tconst triggerPersist = usePersist()\n\tconst isMutating = useMutationState()\n\tconst onClick = useCallback(() => {\n\t\tif (field) {\n\t\t\tentity.disconnectEntityAtField({ field })\n\t\t} else {\n\t\t\tconst parent = entity.getParent()\n\t\t\tif (!parent) {\n\t\t\t\tthrow new BindingError('Cannot disconnect root entity')\n\t\t\t}\n\t\t\tif (parent instanceof EntityListAccessor) {\n\t\t\t\tparent.disconnectEntity(entity)\n\t\t\t} else {\n\t\t\t\tconst subTreeNode = entity.environment.getSubTreeNode()\n\t\t\t\tif (subTreeNode.type !== 'entity') {\n\t\t\t\t\tthrow new BindingError('Cannot disconnect root entity')\n\t\t\t\t}\n\t\t\t\tparent.disconnectEntityAtField({ field: subTreeNode.field.name })\n\t\t\t}\n\t\t}\n\n\t\tif (immediatePersist) {\n\t\t\ttriggerPersist()\n\t\t\t\t.then(onPersistSuccess)\n\t\t\t\t.catch(onPersistError)\n\t\t}\n\t}, [field, immediatePersist, entity, triggerPersist, onPersistSuccess, onPersistError])\n\n\treturn (\n\t\t<SlotButton\n\t\t\tonClick={onClick}\n\t\t\tdisabled={isMutating ? true : undefined}\n\t\t\t{...props}\n\t\t/>\n\t)\n}\n"],"names":["Slot","useEntity","usePersist","useMutationState","useCallback","BindingError","EntityListAccessor","jsx"],"mappings":";;;;;;AAKA,MAAM,aAAaA,UAAAA;AAUN,MAAA,0BAA0B,CAAC,EAAE,kBAAkB,gBAAgB,kBAAkB,OAAO,GAAG,YAA0C;AACjJ,QAAM,SAASC,aAAAA;AACf,QAAM,iBAAiBC,aAAAA;AACvB,QAAM,aAAaC,aAAAA;AACb,QAAA,UAAUC,MAAAA,YAAY,MAAM;AACjC,QAAI,OAAO;AACH,aAAA,wBAAwB,EAAE,MAAA,CAAO;AAAA,IAAA,OAClC;AACA,YAAA,SAAS,OAAO;AACtB,UAAI,CAAC,QAAQ;AACN,cAAA,IAAIC,aAAAA,aAAa,+BAA+B;AAAA,MACvD;AACA,UAAI,kBAAkBC,aAAAA,oBAAoB;AACzC,eAAO,iBAAiB,MAAM;AAAA,MAAA,OACxB;AACA,cAAA,cAAc,OAAO,YAAY,eAAe;AAClD,YAAA,YAAY,SAAS,UAAU;AAC5B,gBAAA,IAAID,aAAAA,aAAa,+BAA+B;AAAA,QACvD;AACA,eAAO,wBAAwB,EAAE,OAAO,YAAY,MAAM,MAAM;AAAA,MACjE;AAAA,IACD;AAEA,QAAI,kBAAkB;AACrB,qBAAA,EACE,KAAK,gBAAgB,EACrB,MAAM,cAAc;AAAA,IACvB;AAAA,EAAA,GACE,CAAC,OAAO,kBAAkB,QAAQ,gBAAgB,kBAAkB,cAAc,CAAC;AAGrF,SAAAE,2BAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACA;AAAA,MACA,UAAU,aAAa,OAAO;AAAA,MAC7B,GAAG;AAAA,IAAA;AAAA,EAAA;AAGP;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"DisconnectEntityTrigger.js","sources":["../../../../src/components/binding/DisconnectEntityTrigger.tsx"],"sourcesContent":["import { ComponentType, ReactNode, useCallback } from 'react'\nimport { Slot } from '@radix-ui/react-slot'\nimport { BindingError, EntityListAccessor, ErrorPersistResult, SuccessfulPersistResult, SugaredRelativeSingleEntity, useEntity, useMutationState, usePersist } from '@contember/react-binding'\n\n\nconst SlotButton = Slot as ComponentType<React.ButtonHTMLAttributes<HTMLButtonElement>>\n\nexport interface DisconnectEntityTriggerProps {\n\timmediatePersist?: true\n\tchildren: ReactNode\n\tonPersistSuccess?: (result: SuccessfulPersistResult) => void\n\tonPersistError?: (result: ErrorPersistResult) => void\n\tfield?: SugaredRelativeSingleEntity['field']\n}\n\nexport const DisconnectEntityTrigger = ({ immediatePersist, onPersistError, onPersistSuccess, field, ...props }: DisconnectEntityTriggerProps) => {\n\tconst entity = useEntity()\n\tconst triggerPersist = usePersist()\n\tconst isMutating = useMutationState()\n\tconst onClick = useCallback(() => {\n\t\tif (field) {\n\t\t\tentity.disconnectEntityAtField({ field })\n\t\t} else {\n\t\t\tconst parent = entity.getParent()\n\t\t\tif (!parent) {\n\t\t\t\tthrow new BindingError('Cannot disconnect root entity')\n\t\t\t}\n\t\t\tif (parent instanceof EntityListAccessor) {\n\t\t\t\tparent.disconnectEntity(entity)\n\t\t\t} else {\n\t\t\t\tconst subTreeNode = entity.environment.getSubTreeNode()\n\t\t\t\tif (subTreeNode.type !== 'entity') {\n\t\t\t\t\tthrow new BindingError('Cannot disconnect root entity')\n\t\t\t\t}\n\t\t\t\tparent.disconnectEntityAtField({ field: subTreeNode.field.name })\n\t\t\t}\n\t\t}\n\n\t\tif (immediatePersist) {\n\t\t\ttriggerPersist()\n\t\t\t\t.then(onPersistSuccess)\n\t\t\t\t.catch(onPersistError)\n\t\t}\n\t}, [field, immediatePersist, entity, triggerPersist, onPersistSuccess, onPersistError])\n\n\treturn (\n\t\t<SlotButton\n\t\t\tonClick={onClick}\n\t\t\tdisabled={isMutating ? true : undefined}\n\t\t\t{...props}\n\t\t/>\n\t)\n}\n"],"names":[],"mappings":";;;;AAKA,MAAM,aAAa;AAUN,MAAA,0BAA0B,CAAC,EAAE,kBAAkB,gBAAgB,kBAAkB,OAAO,GAAG,YAA0C;AACjJ,QAAM,SAAS;AACf,QAAM,iBAAiB;AACvB,QAAM,aAAa;AACb,QAAA,UAAU,YAAY,MAAM;AACjC,QAAI,OAAO;AACH,aAAA,wBAAwB,EAAE,MAAA,CAAO;AAAA,IAAA,OAClC;AACA,YAAA,SAAS,OAAO;AACtB,UAAI,CAAC,QAAQ;AACN,cAAA,IAAI,aAAa,+BAA+B;AAAA,MACvD;AACA,UAAI,kBAAkB,oBAAoB;AACzC,eAAO,iBAAiB,MAAM;AAAA,MAAA,OACxB;AACA,cAAA,cAAc,OAAO,YAAY,eAAe;AAClD,YAAA,YAAY,SAAS,UAAU;AAC5B,gBAAA,IAAI,aAAa,+BAA+B;AAAA,QACvD;AACA,eAAO,wBAAwB,EAAE,OAAO,YAAY,MAAM,MAAM;AAAA,MACjE;AAAA,IACD;AAEA,QAAI,kBAAkB;AACrB,qBAAA,EACE,KAAK,gBAAgB,EACrB,MAAM,cAAc;AAAA,IACvB;AAAA,EAAA,GACE,CAAC,OAAO,kBAAkB,QAAQ,gBAAgB,kBAAkB,cAAc,CAAC;AAGrF,SAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACA;AAAA,MACA,UAAU,aAAa,OAAO;AAAA,MAC7B,GAAG;AAAA,IAAA;AAAA,EAAA;AAGP;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"EntityBeforePersist.cjs","sources":["../../../../src/components/binding/EntityBeforePersist.tsx"],"sourcesContent":["import { EntityAccessor, useEntityBeforePersist } from '@contember/react-binding'\n\nexport const EntityBeforePersist = ({ listener }: { listener: EntityAccessor.EntityEventListenerMap['beforePersist']}) => {\n\tuseEntityBeforePersist(listener)\n\treturn null\n}\n"],"names":["useEntityBeforePersist"],"mappings":";;;AAEO,MAAM,sBAAsB,CAAC,EAAE,eAAoF;AACzHA,eAAA,uBAAuB,QAAQ;AACxB,SAAA;AACR;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"EntityBeforePersist.js","sources":["../../../../src/components/binding/EntityBeforePersist.tsx"],"sourcesContent":["import { EntityAccessor, useEntityBeforePersist } from '@contember/react-binding'\n\nexport const EntityBeforePersist = ({ listener }: { listener: EntityAccessor.EntityEventListenerMap['beforePersist']}) => {\n\tuseEntityBeforePersist(listener)\n\treturn null\n}\n"],"names":[],"mappings":";AAEO,MAAM,sBAAsB,CAAC,EAAE,eAAoF;AACzH,yBAAuB,QAAQ;AACxB,SAAA;AACR;"}
@@ -1,29 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const jsxRuntime = require("react/jsx-runtime");
4
- const reactBinding = require("@contember/react-binding");
5
- const react = require("react");
6
- const reactSlot = require("@radix-ui/react-slot");
7
- const utilities = require("@contember/utilities");
8
- const SlotButton = reactSlot.Slot;
9
- const PersistTrigger = ({ onPersistError, onPersistSuccess, ...props }) => {
10
- const isMutating = reactBinding.useMutationState();
11
- const isDirty = reactBinding.useDirtinessState();
12
- const triggerPersist = reactBinding.usePersist();
13
- const onClick = react.useCallback(() => {
14
- triggerPersist().then(onPersistSuccess).catch(onPersistError);
15
- }, [onPersistError, onPersistSuccess, triggerPersist]);
16
- const isDisabled = isMutating || !isDirty;
17
- return /* @__PURE__ */ jsxRuntime.jsx(
18
- SlotButton,
19
- {
20
- disabled: isDisabled,
21
- "data-dirty": utilities.dataAttribute(isDirty),
22
- "data-loading": utilities.dataAttribute(isMutating),
23
- onClick,
24
- ...props
25
- }
26
- );
27
- };
28
- exports.PersistTrigger = PersistTrigger;
29
- //# sourceMappingURL=PersistTrigger.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PersistTrigger.cjs","sources":["../../../../src/components/binding/PersistTrigger.tsx"],"sourcesContent":["import { ErrorPersistResult, SuccessfulPersistResult, useDirtinessState, useMutationState, usePersist } from '@contember/react-binding'\nimport { ComponentType, ReactElement, useCallback } from 'react'\nimport { Slot } from '@radix-ui/react-slot'\nimport { dataAttribute } from '@contember/utilities'\n\nconst SlotButton = Slot as ComponentType<React.ButtonHTMLAttributes<HTMLButtonElement>>\n\nexport interface PersistTriggerProps {\n\tchildren: ReactElement\n\tonPersistSuccess?: (result: SuccessfulPersistResult) => void\n\tonPersistError?: (result: ErrorPersistResult) => void\n}\n\nexport const PersistTrigger = ({ onPersistError, onPersistSuccess, ...props }: PersistTriggerProps) => {\n\tconst isMutating = useMutationState()\n\tconst isDirty = useDirtinessState()\n\tconst triggerPersist = usePersist()\n\tconst onClick = useCallback(() => {\n\t\ttriggerPersist()\n\t\t\t.then(onPersistSuccess)\n\t\t\t.catch(onPersistError)\n\t}, [onPersistError, onPersistSuccess, triggerPersist])\n\n\tconst isDisabled = isMutating || !isDirty\n\n\treturn (\n\t\t<SlotButton\n\t\t\tdisabled={isDisabled}\n\t\t\tdata-dirty={dataAttribute(isDirty)}\n\t\t\tdata-loading={dataAttribute(isMutating)}\n\t\t\tonClick={onClick}\n\t\t\t{...props}\n\t\t/>\n\t)\n}\n"],"names":["Slot","useMutationState","useDirtinessState","usePersist","useCallback","jsx","dataAttribute"],"mappings":";;;;;;;AAKA,MAAM,aAAaA,UAAAA;AAQZ,MAAM,iBAAiB,CAAC,EAAE,gBAAgB,kBAAkB,GAAG,YAAiC;AACtG,QAAM,aAAaC,aAAAA;AACnB,QAAM,UAAUC,aAAAA;AAChB,QAAM,iBAAiBC,aAAAA;AACjB,QAAA,UAAUC,MAAAA,YAAY,MAAM;AACjC,mBAAA,EACE,KAAK,gBAAgB,EACrB,MAAM,cAAc;AAAA,EACpB,GAAA,CAAC,gBAAgB,kBAAkB,cAAc,CAAC;AAE/C,QAAA,aAAa,cAAc,CAAC;AAGjC,SAAAC,2BAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACA,UAAU;AAAA,MACV,cAAYC,wBAAc,OAAO;AAAA,MACjC,gBAAcA,wBAAc,UAAU;AAAA,MACtC;AAAA,MACC,GAAG;AAAA,IAAA;AAAA,EAAA;AAGP;;"}
@@ -1,29 +0,0 @@
1
- import { jsx } from "react/jsx-runtime";
2
- import { useMutationState, useDirtinessState, usePersist } from "@contember/react-binding";
3
- import { useCallback } from "react";
4
- import { Slot } from "@radix-ui/react-slot";
5
- import { dataAttribute } from "@contember/utilities";
6
- const SlotButton = Slot;
7
- const PersistTrigger = ({ onPersistError, onPersistSuccess, ...props }) => {
8
- const isMutating = useMutationState();
9
- const isDirty = useDirtinessState();
10
- const triggerPersist = usePersist();
11
- const onClick = useCallback(() => {
12
- triggerPersist().then(onPersistSuccess).catch(onPersistError);
13
- }, [onPersistError, onPersistSuccess, triggerPersist]);
14
- const isDisabled = isMutating || !isDirty;
15
- return /* @__PURE__ */ jsx(
16
- SlotButton,
17
- {
18
- disabled: isDisabled,
19
- "data-dirty": dataAttribute(isDirty),
20
- "data-loading": dataAttribute(isMutating),
21
- onClick,
22
- ...props
23
- }
24
- );
25
- };
26
- export {
27
- PersistTrigger
28
- };
29
- //# sourceMappingURL=PersistTrigger.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PersistTrigger.js","sources":["../../../../src/components/binding/PersistTrigger.tsx"],"sourcesContent":["import { ErrorPersistResult, SuccessfulPersistResult, useDirtinessState, useMutationState, usePersist } from '@contember/react-binding'\nimport { ComponentType, ReactElement, useCallback } from 'react'\nimport { Slot } from '@radix-ui/react-slot'\nimport { dataAttribute } from '@contember/utilities'\n\nconst SlotButton = Slot as ComponentType<React.ButtonHTMLAttributes<HTMLButtonElement>>\n\nexport interface PersistTriggerProps {\n\tchildren: ReactElement\n\tonPersistSuccess?: (result: SuccessfulPersistResult) => void\n\tonPersistError?: (result: ErrorPersistResult) => void\n}\n\nexport const PersistTrigger = ({ onPersistError, onPersistSuccess, ...props }: PersistTriggerProps) => {\n\tconst isMutating = useMutationState()\n\tconst isDirty = useDirtinessState()\n\tconst triggerPersist = usePersist()\n\tconst onClick = useCallback(() => {\n\t\ttriggerPersist()\n\t\t\t.then(onPersistSuccess)\n\t\t\t.catch(onPersistError)\n\t}, [onPersistError, onPersistSuccess, triggerPersist])\n\n\tconst isDisabled = isMutating || !isDirty\n\n\treturn (\n\t\t<SlotButton\n\t\t\tdisabled={isDisabled}\n\t\t\tdata-dirty={dataAttribute(isDirty)}\n\t\t\tdata-loading={dataAttribute(isMutating)}\n\t\t\tonClick={onClick}\n\t\t\t{...props}\n\t\t/>\n\t)\n}\n"],"names":[],"mappings":";;;;;AAKA,MAAM,aAAa;AAQZ,MAAM,iBAAiB,CAAC,EAAE,gBAAgB,kBAAkB,GAAG,YAAiC;AACtG,QAAM,aAAa;AACnB,QAAM,UAAU;AAChB,QAAM,iBAAiB;AACjB,QAAA,UAAU,YAAY,MAAM;AACjC,mBAAA,EACE,KAAK,gBAAgB,EACrB,MAAM,cAAc;AAAA,EACpB,GAAA,CAAC,gBAAgB,kBAAkB,cAAc,CAAC;AAE/C,QAAA,aAAa,cAAc,CAAC;AAGjC,SAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACA,UAAU;AAAA,MACV,cAAY,cAAc,OAAO;AAAA,MACjC,gBAAc,cAAc,UAAU;AAAA,MACtC;AAAA,MACC,GAAG;AAAA,IAAA;AAAA,EAAA;AAGP;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"RedirectOnPersist.cjs","sources":["../../../../src/components/binding/RedirectOnPersist.tsx"],"sourcesContent":["import { useEntityPersistSuccess } from '@contember/react-binding'\nimport { useRedirect } from '@contember/react-routing'\nimport { RoutingLinkTarget } from '@contember/react-routing'\n\nexport const RedirectOnPersist = ({ to }: { to: RoutingLinkTarget }) => {\n\tconst redirect = useRedirect()\n\tuseEntityPersistSuccess((getEntity, options) => {\n\t\tif (options.successType !== 'justSuccess') {\n\t\t\treturn\n\t\t}\n\t\tredirect(to)\n\t})\n\treturn null\n}\n"],"names":["useRedirect","useEntityPersistSuccess"],"mappings":";;;;AAIO,MAAM,oBAAoB,CAAC,EAAE,SAAoC;AACvE,QAAM,WAAWA,aAAAA;AACOC,uCAAA,CAAC,WAAW,YAAY;AAC3C,QAAA,QAAQ,gBAAgB,eAAe;AAC1C;AAAA,IACD;AACA,aAAS,EAAE;AAAA,EAAA,CACX;AACM,SAAA;AACR;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"RedirectOnPersist.js","sources":["../../../../src/components/binding/RedirectOnPersist.tsx"],"sourcesContent":["import { useEntityPersistSuccess } from '@contember/react-binding'\nimport { useRedirect } from '@contember/react-routing'\nimport { RoutingLinkTarget } from '@contember/react-routing'\n\nexport const RedirectOnPersist = ({ to }: { to: RoutingLinkTarget }) => {\n\tconst redirect = useRedirect()\n\tuseEntityPersistSuccess((getEntity, options) => {\n\t\tif (options.successType !== 'justSuccess') {\n\t\t\treturn\n\t\t}\n\t\tredirect(to)\n\t})\n\treturn null\n}\n"],"names":[],"mappings":";;AAIO,MAAM,oBAAoB,CAAC,EAAE,SAAoC;AACvE,QAAM,WAAW;AACO,0BAAA,CAAC,WAAW,YAAY;AAC3C,QAAA,QAAQ,gBAAgB,eAAe;AAC1C;AAAA,IACD;AACA,aAAS,EAAE;AAAA,EAAA,CACX;AACM,SAAA;AACR;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"useIsApplicationOutdated.cjs","sources":["../../../src/hooks/useIsApplicationOutdated.ts"],"sourcesContent":["import { useCallback, useEffect, useState } from 'react'\n\nconst defaultCheckIntervalMs = 30_000\n\n\nexport const useIsApplicationOutdated = ({ checkIntervalMs = defaultCheckIntervalMs }: {\n\tcheckIntervalMs?: number\n} = {}) => {\n\tconst [initialVersion] = useState(() => {\n\t\treturn getVersionFromDocument(document.head)\n\t})\n\tconst [isOutdated, setIsOutdated] = useState(false)\n\tconst fetchVersion = useFetchVersion()\n\n\tconst checkVersion = useCallback(async () => {\n\t\tif (document.hidden) {\n\t\t\treturn\n\t\t}\n\t\tconst version = await fetchVersion()\n\t\tif (version !== initialVersion) {\n\t\t\tsetIsOutdated(true)\n\t\t}\n\t}, [fetchVersion, initialVersion])\n\tconst shouldCheck = !!initialVersion && !isOutdated\n\n\tuseEffect(() => {\n\t\tif (!shouldCheck) {\n\t\t\treturn\n\t\t}\n\t\tconst handle = setInterval(checkVersion, checkIntervalMs)\n\t\treturn () => clearInterval(handle)\n\t}, [checkIntervalMs, checkVersion, shouldCheck])\n\n\tuseEffect(() => {\n\t\tif (!shouldCheck) {\n\t\t\treturn\n\t\t}\n\t\tdocument.addEventListener('visibilitychange', checkVersion)\n\t\treturn () => document.removeEventListener('visibilitychange', checkVersion)\n\t}, [checkVersion, shouldCheck])\n\n\treturn isOutdated\n}\n\nconst getVersionFromDocument = (node: ParentNode) => {\n\tconst meta = node.querySelector<HTMLMetaElement>('meta[name=contember-build-version]')\n\treturn meta?.content\n}\n\nconst useFetchVersion = () => {\n\treturn useCallback(async () => {\n\t\ttry {\n\t\t\tconst result = await (await fetch(window.location.href)).text()\n\t\t\tconst html = document.createElement('html')\n\t\t\thtml.innerHTML = result\n\t\t\treturn getVersionFromDocument(html)\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t\treturn undefined\n\t\t}\n\t}, [])\n}\n"],"names":["useState","useCallback","useEffect"],"mappings":";;;AAEA,MAAM,yBAAyB;AAGxB,MAAM,2BAA2B,CAAC,EAAE,kBAAkB,uBAAuB,IAEhF,CAAA,MAAO;AACV,QAAM,CAAC,cAAc,IAAIA,MAAAA,SAAS,MAAM;AAChC,WAAA,uBAAuB,SAAS,IAAI;AAAA,EAAA,CAC3C;AACD,QAAM,CAAC,YAAY,aAAa,IAAIA,eAAS,KAAK;AAClD,QAAM,eAAe;AAEf,QAAA,eAAeC,MAAAA,YAAY,YAAY;AAC5C,QAAI,SAAS,QAAQ;AACpB;AAAA,IACD;AACM,UAAA,UAAU,MAAM;AACtB,QAAI,YAAY,gBAAgB;AAC/B,oBAAc,IAAI;AAAA,IACnB;AAAA,EAAA,GACE,CAAC,cAAc,cAAc,CAAC;AACjC,QAAM,cAAc,CAAC,CAAC,kBAAkB,CAAC;AAEzCC,QAAAA,UAAU,MAAM;AACf,QAAI,CAAC,aAAa;AACjB;AAAA,IACD;AACM,UAAA,SAAS,YAAY,cAAc,eAAe;AACjD,WAAA,MAAM,cAAc,MAAM;AAAA,EAC/B,GAAA,CAAC,iBAAiB,cAAc,WAAW,CAAC;AAE/CA,QAAAA,UAAU,MAAM;AACf,QAAI,CAAC,aAAa;AACjB;AAAA,IACD;AACS,aAAA,iBAAiB,oBAAoB,YAAY;AAC1D,WAAO,MAAM,SAAS,oBAAoB,oBAAoB,YAAY;AAAA,EAAA,GACxE,CAAC,cAAc,WAAW,CAAC;AAEvB,SAAA;AACR;AAEA,MAAM,yBAAyB,CAAC,SAAqB;AAC9C,QAAA,OAAO,KAAK,cAA+B,oCAAoC;AACrF,SAAO,MAAM;AACd;AAEA,MAAM,kBAAkB,MAAM;AAC7B,SAAOD,kBAAY,YAAY;AAC1B,QAAA;AACG,YAAA,SAAS,OAAO,MAAM,MAAM,OAAO,SAAS,IAAI,GAAG;AACnD,YAAA,OAAO,SAAS,cAAc,MAAM;AAC1C,WAAK,YAAY;AACjB,aAAO,uBAAuB,IAAI;AAAA,aAC1B,GAAG;AACX,cAAQ,MAAM,CAAC;AACR,aAAA;AAAA,IACR;AAAA,EACD,GAAG,CAAE,CAAA;AACN;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"useIsApplicationOutdated.js","sources":["../../../src/hooks/useIsApplicationOutdated.ts"],"sourcesContent":["import { useCallback, useEffect, useState } from 'react'\n\nconst defaultCheckIntervalMs = 30_000\n\n\nexport const useIsApplicationOutdated = ({ checkIntervalMs = defaultCheckIntervalMs }: {\n\tcheckIntervalMs?: number\n} = {}) => {\n\tconst [initialVersion] = useState(() => {\n\t\treturn getVersionFromDocument(document.head)\n\t})\n\tconst [isOutdated, setIsOutdated] = useState(false)\n\tconst fetchVersion = useFetchVersion()\n\n\tconst checkVersion = useCallback(async () => {\n\t\tif (document.hidden) {\n\t\t\treturn\n\t\t}\n\t\tconst version = await fetchVersion()\n\t\tif (version !== initialVersion) {\n\t\t\tsetIsOutdated(true)\n\t\t}\n\t}, [fetchVersion, initialVersion])\n\tconst shouldCheck = !!initialVersion && !isOutdated\n\n\tuseEffect(() => {\n\t\tif (!shouldCheck) {\n\t\t\treturn\n\t\t}\n\t\tconst handle = setInterval(checkVersion, checkIntervalMs)\n\t\treturn () => clearInterval(handle)\n\t}, [checkIntervalMs, checkVersion, shouldCheck])\n\n\tuseEffect(() => {\n\t\tif (!shouldCheck) {\n\t\t\treturn\n\t\t}\n\t\tdocument.addEventListener('visibilitychange', checkVersion)\n\t\treturn () => document.removeEventListener('visibilitychange', checkVersion)\n\t}, [checkVersion, shouldCheck])\n\n\treturn isOutdated\n}\n\nconst getVersionFromDocument = (node: ParentNode) => {\n\tconst meta = node.querySelector<HTMLMetaElement>('meta[name=contember-build-version]')\n\treturn meta?.content\n}\n\nconst useFetchVersion = () => {\n\treturn useCallback(async () => {\n\t\ttry {\n\t\t\tconst result = await (await fetch(window.location.href)).text()\n\t\t\tconst html = document.createElement('html')\n\t\t\thtml.innerHTML = result\n\t\t\treturn getVersionFromDocument(html)\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t\treturn undefined\n\t\t}\n\t}, [])\n}\n"],"names":[],"mappings":";AAEA,MAAM,yBAAyB;AAGxB,MAAM,2BAA2B,CAAC,EAAE,kBAAkB,uBAAuB,IAEhF,CAAA,MAAO;AACV,QAAM,CAAC,cAAc,IAAI,SAAS,MAAM;AAChC,WAAA,uBAAuB,SAAS,IAAI;AAAA,EAAA,CAC3C;AACD,QAAM,CAAC,YAAY,aAAa,IAAI,SAAS,KAAK;AAClD,QAAM,eAAe;AAEf,QAAA,eAAe,YAAY,YAAY;AAC5C,QAAI,SAAS,QAAQ;AACpB;AAAA,IACD;AACM,UAAA,UAAU,MAAM;AACtB,QAAI,YAAY,gBAAgB;AAC/B,oBAAc,IAAI;AAAA,IACnB;AAAA,EAAA,GACE,CAAC,cAAc,cAAc,CAAC;AACjC,QAAM,cAAc,CAAC,CAAC,kBAAkB,CAAC;AAEzC,YAAU,MAAM;AACf,QAAI,CAAC,aAAa;AACjB;AAAA,IACD;AACM,UAAA,SAAS,YAAY,cAAc,eAAe;AACjD,WAAA,MAAM,cAAc,MAAM;AAAA,EAC/B,GAAA,CAAC,iBAAiB,cAAc,WAAW,CAAC;AAE/C,YAAU,MAAM;AACf,QAAI,CAAC,aAAa;AACjB;AAAA,IACD;AACS,aAAA,iBAAiB,oBAAoB,YAAY;AAC1D,WAAO,MAAM,SAAS,oBAAoB,oBAAoB,YAAY;AAAA,EAAA,GACxE,CAAC,cAAc,WAAW,CAAC;AAEvB,SAAA;AACR;AAEA,MAAM,yBAAyB,CAAC,SAAqB;AAC9C,QAAA,OAAO,KAAK,cAA+B,oCAAoC;AACrF,SAAO,MAAM;AACd;AAEA,MAAM,kBAAkB,MAAM;AAC7B,SAAO,YAAY,YAAY;AAC1B,QAAA;AACG,YAAA,SAAS,OAAO,MAAM,MAAM,OAAO,SAAS,IAAI,GAAG;AACnD,YAAA,OAAO,SAAS,cAAc,MAAM;AAC1C,WAAK,YAAY;AACjB,aAAO,uBAAuB,IAAI;AAAA,aAC1B,GAAG;AACX,cAAQ,MAAM,CAAC;AACR,aAAA;AAAA,IACR;AAAA,EACD,GAAG,CAAE,CAAA;AACN;"}
@@ -1,10 +0,0 @@
1
- import { ReactNode } from 'react';
2
- import { ErrorPersistResult, SuccessfulPersistResult } from '@contember/react-binding';
3
- export interface DeleteEntityTriggerProps {
4
- immediatePersist?: boolean;
5
- children: ReactNode;
6
- onPersistSuccess?: (result: SuccessfulPersistResult) => void;
7
- onPersistError?: (result: ErrorPersistResult) => void;
8
- }
9
- export declare const DeleteEntityTrigger: ({ immediatePersist, onPersistError, onPersistSuccess, ...props }: DeleteEntityTriggerProps) => import("react/jsx-runtime").JSX.Element;
10
- //# sourceMappingURL=DeleteEntityTrigger.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DeleteEntityTrigger.d.ts","sourceRoot":"","sources":["../../../../src/components/binding/DeleteEntityTrigger.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAiB,SAAS,EAAe,MAAM,OAAO,CAAA;AAE7D,OAAO,EAAE,kBAAkB,EAAE,uBAAuB,EAA2C,MAAM,0BAA0B,CAAA;AAK/H,MAAM,WAAW,wBAAwB;IACxC,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,QAAQ,EAAE,SAAS,CAAA;IACnB,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE,uBAAuB,KAAK,IAAI,CAAA;IAC5D,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,kBAAkB,KAAK,IAAI,CAAA;CACrD;AAED,eAAO,MAAM,mBAAmB,qEAAsE,wBAAwB,4CAqB7H,CAAA"}
@@ -1,9 +0,0 @@
1
- import { ErrorPersistResult, SuccessfulPersistResult } from '@contember/react-binding';
2
- import { ReactElement } from 'react';
3
- export interface PersistTriggerProps {
4
- children: ReactElement;
5
- onPersistSuccess?: (result: SuccessfulPersistResult) => void;
6
- onPersistError?: (result: ErrorPersistResult) => void;
7
- }
8
- export declare const PersistTrigger: ({ onPersistError, onPersistSuccess, ...props }: PersistTriggerProps) => import("react/jsx-runtime").JSX.Element;
9
- //# sourceMappingURL=PersistTrigger.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PersistTrigger.d.ts","sourceRoot":"","sources":["../../../../src/components/binding/PersistTrigger.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,uBAAuB,EAAmD,MAAM,0BAA0B,CAAA;AACvI,OAAO,EAAiB,YAAY,EAAe,MAAM,OAAO,CAAA;AAMhE,MAAM,WAAW,mBAAmB;IACnC,QAAQ,EAAE,YAAY,CAAA;IACtB,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE,uBAAuB,KAAK,IAAI,CAAA;IAC5D,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,kBAAkB,KAAK,IAAI,CAAA;CACrD;AAED,eAAO,MAAM,cAAc,mDAAoD,mBAAmB,4CAqBjG,CAAA"}
@@ -1,36 +0,0 @@
1
- import { ComponentType, ReactNode, useCallback } from 'react'
2
- import { Slot } from '@radix-ui/react-slot'
3
- import { ErrorPersistResult, SuccessfulPersistResult, useEntity, useMutationState, usePersist } from '@contember/react-binding'
4
-
5
-
6
- const SlotButton = Slot as ComponentType<React.ButtonHTMLAttributes<HTMLButtonElement>>
7
-
8
- export interface DeleteEntityTriggerProps {
9
- immediatePersist?: boolean
10
- children: ReactNode
11
- onPersistSuccess?: (result: SuccessfulPersistResult) => void
12
- onPersistError?: (result: ErrorPersistResult) => void
13
- }
14
-
15
- export const DeleteEntityTrigger = ({ immediatePersist, onPersistError, onPersistSuccess, ...props }: DeleteEntityTriggerProps) => {
16
- const parentEntity = useEntity()
17
- const triggerPersist = usePersist()
18
- const isMutating = useMutationState()
19
- const onClick = useCallback(() => {
20
- parentEntity.deleteEntity()
21
-
22
- if (immediatePersist) {
23
- triggerPersist()
24
- .then(onPersistSuccess)
25
- .catch(onPersistError)
26
- }
27
- }, [parentEntity, immediatePersist, triggerPersist, onPersistSuccess, onPersistError])
28
-
29
- return (
30
- <SlotButton
31
- onClick={onClick}
32
- disabled={isMutating ? true : undefined}
33
- {...props}
34
- />
35
- )
36
- }
@@ -1,35 +0,0 @@
1
- import { ErrorPersistResult, SuccessfulPersistResult, useDirtinessState, useMutationState, usePersist } from '@contember/react-binding'
2
- import { ComponentType, ReactElement, useCallback } from 'react'
3
- import { Slot } from '@radix-ui/react-slot'
4
- import { dataAttribute } from '@contember/utilities'
5
-
6
- const SlotButton = Slot as ComponentType<React.ButtonHTMLAttributes<HTMLButtonElement>>
7
-
8
- export interface PersistTriggerProps {
9
- children: ReactElement
10
- onPersistSuccess?: (result: SuccessfulPersistResult) => void
11
- onPersistError?: (result: ErrorPersistResult) => void
12
- }
13
-
14
- export const PersistTrigger = ({ onPersistError, onPersistSuccess, ...props }: PersistTriggerProps) => {
15
- const isMutating = useMutationState()
16
- const isDirty = useDirtinessState()
17
- const triggerPersist = usePersist()
18
- const onClick = useCallback(() => {
19
- triggerPersist()
20
- .then(onPersistSuccess)
21
- .catch(onPersistError)
22
- }, [onPersistError, onPersistSuccess, triggerPersist])
23
-
24
- const isDisabled = isMutating || !isDirty
25
-
26
- return (
27
- <SlotButton
28
- disabled={isDisabled}
29
- data-dirty={dataAttribute(isDirty)}
30
- data-loading={dataAttribute(isMutating)}
31
- onClick={onClick}
32
- {...props}
33
- />
34
- )
35
- }