@contember/interface 2.0.0-alpha.8 → 2.0.0-beta.1

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 (87) hide show
  1. package/dist/development/index.cjs +2 -4
  2. package/dist/development/index.cjs.map +1 -1
  3. package/dist/development/index.js +2 -4
  4. package/dist/development/index.js.map +1 -1
  5. package/dist/development/src/bootstrap/ApplicationEntrypoint.cjs.map +1 -1
  6. package/dist/development/src/bootstrap/ApplicationEntrypoint.js.map +1 -1
  7. package/dist/development/src/bootstrap/DataViewPageNameKeyProvider.cjs.map +1 -1
  8. package/dist/development/src/bootstrap/DataViewPageNameKeyProvider.js.map +1 -1
  9. package/dist/development/src/components/binding/DisconnectEntityTrigger.cjs +2 -2
  10. package/dist/development/src/components/binding/DisconnectEntityTrigger.cjs.map +1 -1
  11. package/dist/development/src/components/binding/DisconnectEntityTrigger.js +3 -3
  12. package/dist/development/src/components/binding/DisconnectEntityTrigger.js.map +1 -1
  13. package/dist/development/src/components/binding/EntityBeforePersist.cjs.map +1 -1
  14. package/dist/development/src/components/binding/RedirectOnPersist.cjs.map +1 -1
  15. package/dist/development/src/components/binding/RedirectOnPersist.js.map +1 -1
  16. package/dist/development/src/hooks/useBlockNavigationOnDirtyState.cjs +36 -0
  17. package/dist/development/src/hooks/useBlockNavigationOnDirtyState.cjs.map +1 -0
  18. package/dist/development/src/hooks/useBlockNavigationOnDirtyState.js +36 -0
  19. package/dist/development/src/hooks/useBlockNavigationOnDirtyState.js.map +1 -0
  20. package/dist/development/src/hooks/useIsApplicationOutdated.cjs +1 -1
  21. package/dist/development/src/hooks/useIsApplicationOutdated.cjs.map +1 -1
  22. package/dist/development/src/hooks/useIsApplicationOutdated.js +1 -1
  23. package/dist/development/src/hooks/useIsApplicationOutdated.js.map +1 -1
  24. package/dist/production/index.cjs +2 -4
  25. package/dist/production/index.cjs.map +1 -1
  26. package/dist/production/index.js +2 -4
  27. package/dist/production/index.js.map +1 -1
  28. package/dist/production/src/bootstrap/ApplicationEntrypoint.cjs.map +1 -1
  29. package/dist/production/src/bootstrap/ApplicationEntrypoint.js.map +1 -1
  30. package/dist/production/src/bootstrap/DataViewPageNameKeyProvider.cjs.map +1 -1
  31. package/dist/production/src/bootstrap/DataViewPageNameKeyProvider.js.map +1 -1
  32. package/dist/production/src/components/binding/ClearFieldTrigger.cjs.map +1 -1
  33. package/dist/production/src/components/binding/ClearFieldTrigger.js.map +1 -1
  34. package/dist/production/src/components/binding/DisconnectEntityTrigger.cjs +1 -1
  35. package/dist/production/src/components/binding/DisconnectEntityTrigger.cjs.map +1 -1
  36. package/dist/production/src/components/binding/DisconnectEntityTrigger.js +2 -2
  37. package/dist/production/src/components/binding/DisconnectEntityTrigger.js.map +1 -1
  38. package/dist/production/src/components/binding/EntityBeforePersist.cjs.map +1 -1
  39. package/dist/production/src/components/binding/RedirectOnPersist.cjs.map +1 -1
  40. package/dist/production/src/components/binding/RedirectOnPersist.js.map +1 -1
  41. package/dist/production/src/hooks/useBlockNavigationOnDirtyState.cjs +36 -0
  42. package/dist/production/src/hooks/useBlockNavigationOnDirtyState.cjs.map +1 -0
  43. package/dist/production/src/hooks/useBlockNavigationOnDirtyState.js +36 -0
  44. package/dist/production/src/hooks/useBlockNavigationOnDirtyState.js.map +1 -0
  45. package/dist/production/src/hooks/useIsApplicationOutdated.cjs +1 -1
  46. package/dist/production/src/hooks/useIsApplicationOutdated.cjs.map +1 -1
  47. package/dist/production/src/hooks/useIsApplicationOutdated.js +1 -1
  48. package/dist/production/src/hooks/useIsApplicationOutdated.js.map +1 -1
  49. package/dist/types/bootstrap/ApplicationEntrypoint.d.ts.map +1 -1
  50. package/dist/types/components/binding/DisconnectEntityTrigger.d.ts.map +1 -1
  51. package/dist/types/components/binding/index.d.ts +0 -2
  52. package/dist/types/components/binding/index.d.ts.map +1 -1
  53. package/dist/types/hooks/index.d.ts +1 -0
  54. package/dist/types/hooks/index.d.ts.map +1 -1
  55. package/dist/types/hooks/useBlockNavigationOnDirtyState.d.ts +7 -0
  56. package/dist/types/hooks/useBlockNavigationOnDirtyState.d.ts.map +1 -0
  57. package/dist/types/tsconfig.tsbuildinfo +1 -1
  58. package/package.json +10 -10
  59. package/src/bootstrap/ApplicationEntrypoint.tsx +1 -1
  60. package/src/components/binding/DisconnectEntityTrigger.tsx +3 -2
  61. package/src/components/binding/index.ts +0 -2
  62. package/src/hooks/index.ts +1 -0
  63. package/src/hooks/useBlockNavigationOnDirtyState.ts +40 -0
  64. package/src/hooks/useIsApplicationOutdated.ts +1 -1
  65. package/src/tsconfig.json +0 -1
  66. package/dist/development/src/components/binding/DeleteEntityTrigger.cjs +0 -36
  67. package/dist/development/src/components/binding/DeleteEntityTrigger.cjs.map +0 -1
  68. package/dist/development/src/components/binding/DeleteEntityTrigger.js +0 -36
  69. package/dist/development/src/components/binding/DeleteEntityTrigger.js.map +0 -1
  70. package/dist/development/src/components/binding/PersistTrigger.cjs +0 -37
  71. package/dist/development/src/components/binding/PersistTrigger.cjs.map +0 -1
  72. package/dist/development/src/components/binding/PersistTrigger.js +0 -37
  73. package/dist/development/src/components/binding/PersistTrigger.js.map +0 -1
  74. package/dist/production/src/components/binding/DeleteEntityTrigger.cjs +0 -28
  75. package/dist/production/src/components/binding/DeleteEntityTrigger.cjs.map +0 -1
  76. package/dist/production/src/components/binding/DeleteEntityTrigger.js +0 -28
  77. package/dist/production/src/components/binding/DeleteEntityTrigger.js.map +0 -1
  78. package/dist/production/src/components/binding/PersistTrigger.cjs +0 -29
  79. package/dist/production/src/components/binding/PersistTrigger.cjs.map +0 -1
  80. package/dist/production/src/components/binding/PersistTrigger.js +0 -29
  81. package/dist/production/src/components/binding/PersistTrigger.js.map +0 -1
  82. package/dist/types/components/binding/DeleteEntityTrigger.d.ts +0 -10
  83. package/dist/types/components/binding/DeleteEntityTrigger.d.ts.map +0 -1
  84. package/dist/types/components/binding/PersistTrigger.d.ts +0 -9
  85. package/dist/types/components/binding/PersistTrigger.d.ts.map +0 -1
  86. package/src/components/binding/DeleteEntityTrigger.tsx +0 -36
  87. package/src/components/binding/PersistTrigger.tsx +0 -35
@@ -6,24 +6,22 @@ const reactIdentity = require("@contember/react-identity");
6
6
  const reactDevbar = require("@contember/react-devbar");
7
7
  const ApplicationEntrypoint = require("./src/bootstrap/ApplicationEntrypoint.cjs");
8
8
  const ClearFieldTrigger = require("./src/components/binding/ClearFieldTrigger.cjs");
9
- const DeleteEntityTrigger = require("./src/components/binding/DeleteEntityTrigger.cjs");
10
9
  const DisconnectEntityTrigger = require("./src/components/binding/DisconnectEntityTrigger.cjs");
11
- const PersistTrigger = require("./src/components/binding/PersistTrigger.cjs");
12
10
  const EntityBeforePersist = require("./src/components/binding/EntityBeforePersist.cjs");
13
11
  const RedirectOnPersist = require("./src/components/binding/RedirectOnPersist.cjs");
14
12
  const useIsApplicationOutdated = require("./src/hooks/useIsApplicationOutdated.cjs");
13
+ const useBlockNavigationOnDirtyState = require("./src/hooks/useBlockNavigationOnDirtyState.cjs");
15
14
  Object.defineProperty(exports, "createErrorHandler", {
16
15
  enumerable: true,
17
16
  get: () => reactDevbar.createErrorHandler
18
17
  });
19
18
  exports.ApplicationEntrypoint = ApplicationEntrypoint.ApplicationEntrypoint;
20
19
  exports.ClearFieldTrigger = ClearFieldTrigger.ClearFieldTrigger;
21
- exports.DeleteEntityTrigger = DeleteEntityTrigger.DeleteEntityTrigger;
22
20
  exports.DisconnectEntityTrigger = DisconnectEntityTrigger.DisconnectEntityTrigger;
23
- exports.PersistTrigger = PersistTrigger.PersistTrigger;
24
21
  exports.EntityBeforePersist = EntityBeforePersist.EntityBeforePersist;
25
22
  exports.RedirectOnPersist = RedirectOnPersist.RedirectOnPersist;
26
23
  exports.useIsApplicationOutdated = useIsApplicationOutdated.useIsApplicationOutdated;
24
+ exports.useBlockNavigationOnDirtyState = useBlockNavigationOnDirtyState.useBlockNavigationOnDirtyState;
27
25
  Object.keys(reactRouting).forEach((k) => {
28
26
  if (k !== "default" && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, {
29
27
  enumerable: true,
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -4,21 +4,19 @@ export * from "@contember/react-identity";
4
4
  import { createErrorHandler } from "@contember/react-devbar";
5
5
  import { ApplicationEntrypoint } from "./src/bootstrap/ApplicationEntrypoint.js";
6
6
  import { ClearFieldTrigger } from "./src/components/binding/ClearFieldTrigger.js";
7
- import { DeleteEntityTrigger } from "./src/components/binding/DeleteEntityTrigger.js";
8
7
  import { DisconnectEntityTrigger } from "./src/components/binding/DisconnectEntityTrigger.js";
9
- import { PersistTrigger } from "./src/components/binding/PersistTrigger.js";
10
8
  import { EntityBeforePersist } from "./src/components/binding/EntityBeforePersist.js";
11
9
  import { RedirectOnPersist } from "./src/components/binding/RedirectOnPersist.js";
12
10
  import { useIsApplicationOutdated } from "./src/hooks/useIsApplicationOutdated.js";
11
+ import { useBlockNavigationOnDirtyState } from "./src/hooks/useBlockNavigationOnDirtyState.js";
13
12
  export {
14
13
  ApplicationEntrypoint,
15
14
  ClearFieldTrigger,
16
- DeleteEntityTrigger,
17
15
  DisconnectEntityTrigger,
18
16
  EntityBeforePersist,
19
- PersistTrigger,
20
17
  RedirectOnPersist,
21
18
  createErrorHandler,
19
+ useBlockNavigationOnDirtyState,
22
20
  useIsApplicationOutdated
23
21
  };
24
22
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"ApplicationEntrypoint.cjs","sources":["../../../../../packages/interface/src/bootstrap/ApplicationEntrypoint.tsx"],"sourcesContent":["import { Environment, EnvironmentContext, EnvironmentExtensionProvider } from '@contember/react-binding'\nimport { ContemberClient, ContemberClientProps } from '@contember/react-client'\nimport { ReactNode } from 'react'\nimport { RequestProvider, RouteMap, RoutingContext, RoutingContextValue, RoutingProvider, SelectedDimension } from '@contember/react-routing'\nimport { DataViewPageNameKeyProvider } from './DataViewPageNameKeyProvider'\nimport { IdentityEnvironmentProvider, IdentityProvider, projectEnvironmentExtension } from '@contember/react-identity'\n\nexport interface ApplicationEntrypointProps extends ContemberClientProps {\n\tbasePath: string\n\tsessionToken?: string\n\troutes?: RouteMap\n\tchildren: ReactNode\n\tenvironment?: Environment\n}\n\nconst validateProps = (props: Partial<ApplicationEntrypointProps>) => {\n\tif (typeof props.apiBaseUrl !== 'string') {\n\t\tthrow new Error(`The ENV variables haven't been set. Check your \\`.env.development.local\\` file.`) // TODO: better message\n\t}\n}\n\n/**\n * @group Entrypoints\n */\nexport const ApplicationEntrypoint = (props: ApplicationEntrypointProps) => {\n\tvalidateProps(props)\n\n\tconst rootEnv = props.environment ?? Environment.create()\n\n\tconst routing: RoutingContextValue = {\n\t\tbasePath: props.basePath,\n\t\troutes: props.routes ?? { index: { path: '/' } },\n\t\tdefaultDimensions: rootEnv.getAllDimensions(),\n\t}\n\n\n\treturn (\n\t\t<EnvironmentContext.Provider value={rootEnv}>\n\t\t\t<RoutingProvider {...routing}>\n\t\t\t\t<ContemberClient\n\t\t\t\t\tapiBaseUrl={props.apiBaseUrl}\n\t\t\t\t\tsessionToken={props.sessionToken}\n\t\t\t\t\tloginToken={props.loginToken}\n\t\t\t\t\tproject={props.project}\n\t\t\t\t\tstage={props.stage}\n\t\t\t\t>\n\t\t\t\t\t<EnvironmentExtensionProvider extension={projectEnvironmentExtension} state={props.project ?? null}>\n\t\t\t\t\t\t<DataViewPageNameKeyProvider>\n\t\t\t\t\t\t\t<IdentityProvider>\n\t\t\t\t\t\t\t\t<IdentityEnvironmentProvider>\n\t\t\t\t\t\t\t\t\t{props.children}\n\t\t\t\t\t\t\t\t</IdentityEnvironmentProvider>\n\t\t\t\t\t\t\t</IdentityProvider>\n\t\t\t\t\t\t</DataViewPageNameKeyProvider>\n\t\t\t\t\t</EnvironmentExtensionProvider>\n\t\t\t\t</ContemberClient>\n\t\t\t</RoutingProvider>\n\t\t</EnvironmentContext.Provider>\n\t)\n}\n"],"names":["Environment","jsxDEV","EnvironmentContext","RoutingProvider","ContemberClient","EnvironmentExtensionProvider","projectEnvironmentExtension","DataViewPageNameKeyProvider","IdentityProvider","IdentityEnvironmentProvider","this"],"mappings":";;;;;;;;AAeA,MAAM,gBAAgB,CAAC,UAA+C;AACjE,MAAA,OAAO,MAAM,eAAe,UAAU;AACnC,UAAA,IAAI,MAAM,iFAAiF;AAAA,EAClG;AACD;AAKa,MAAA,wBAAwB,CAAC,UAAsC;AAC3E,gBAAc,KAAK;AAEnB,QAAM,UAAU,MAAM,eAAeA,aAAA,YAAY,OAAO;AAExD,QAAM,UAA+B;AAAA,IACpC,UAAU,MAAM;AAAA,IAChB,QAAQ,MAAM,UAAU,EAAE,OAAO,EAAE,MAAM,MAAM;AAAA,IAC/C,mBAAmB,QAAQ,iBAAiB;AAAA,EAAA;AAK5C,SAAAC,8BAAA,OAACC,gCAAmB,UAAnB,EAA4B,OAAO,SACnC,UAAAD,8BAAAA,OAACE,aAAAA,iBAAiB,EAAA,GAAG,SACpB,UAAAF,8BAAA;AAAA,IAACG,YAAA;AAAA,IAAA;AAAA,MACA,YAAY,MAAM;AAAA,MAClB,cAAc,MAAM;AAAA,MACpB,YAAY,MAAM;AAAA,MAClB,SAAS,MAAM;AAAA,MACf,OAAO,MAAM;AAAA,MAEb,UAACH,8BAAA,OAAAI,2CAAA,EAA6B,WAAWC,cAAA,6BAA6B,OAAO,MAAM,WAAW,MAC7F,UAAAL,8BAAA,OAACM,2DACA,UAACN,8BAAA,OAAAO,cAAA,kBAAA,EACA,UAACP,8BAAA,OAAAQ,cAAA,6BAAA,EACC,gBAAM,SADR,GAAA,QAAA,OAAA;AAAA,QAAA,UAAA;AAAA,QAAA,YAAA;AAAA,QAAA,cAAA;AAAA,MAAA,GAAAC,MAEA,EAHD,GAAA,QAAA,OAAA;AAAA,QAAA,UAAA;AAAA,QAAA,YAAA;AAAA,QAAA,cAAA;AAAA,MAAA,GAAAA,MAIA,EALD,GAAA,QAAA,OAAA;AAAA,QAAA,UAAA;AAAA,QAAA,YAAA;AAAA,QAAA,cAAA;AAAA,MAAA,GAAAA,MAMA,EAPD,GAAA,QAAA,OAAA;AAAA,QAAA,UAAA;AAAA,QAAA,YAAA;AAAA,QAAA,cAAA;AAAA,MAQA,GAAAA,MAAA;AAAA,IAAA;AAAA,IAfD;AAAA,IAAA;AAAA,IAAA;AAAA,MAAA,UAAA;AAAA,MAAA,YAAA;AAAA,MAAA,cAAA;AAAA,IAAA;AAAA,IAAAA;AAAAA,EAAA,KADD,QAAA,OAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAAA,GAAAA,MAkBA,EAnBD,GAAA,QAAA,OAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAoBA,GAAAA,MAAA;AAEF;;"}
1
+ {"version":3,"file":"ApplicationEntrypoint.cjs","sources":["../../../../../packages/interface/src/bootstrap/ApplicationEntrypoint.tsx"],"sourcesContent":["import { Environment, EnvironmentContext, EnvironmentExtensionProvider } from '@contember/react-binding'\nimport { ContemberClient, ContemberClientProps } from '@contember/react-client'\nimport { ReactNode } from 'react'\nimport { RouteMap, RoutingContextValue, RoutingProvider } from '@contember/react-routing'\nimport { DataViewPageNameKeyProvider } from './DataViewPageNameKeyProvider'\nimport { IdentityEnvironmentProvider, IdentityProvider, projectEnvironmentExtension } from '@contember/react-identity'\n\nexport interface ApplicationEntrypointProps extends ContemberClientProps {\n\tbasePath: string\n\tsessionToken?: string\n\troutes?: RouteMap\n\tchildren: ReactNode\n\tenvironment?: Environment\n}\n\nconst validateProps = (props: Partial<ApplicationEntrypointProps>) => {\n\tif (typeof props.apiBaseUrl !== 'string') {\n\t\tthrow new Error(`The ENV variables haven't been set. Check your \\`.env.development.local\\` file.`) // TODO: better message\n\t}\n}\n\n/**\n * @group Entrypoints\n */\nexport const ApplicationEntrypoint = (props: ApplicationEntrypointProps) => {\n\tvalidateProps(props)\n\n\tconst rootEnv = props.environment ?? Environment.create()\n\n\tconst routing: RoutingContextValue = {\n\t\tbasePath: props.basePath,\n\t\troutes: props.routes ?? { index: { path: '/' } },\n\t\tdefaultDimensions: rootEnv.getAllDimensions(),\n\t}\n\n\n\treturn (\n\t\t<EnvironmentContext.Provider value={rootEnv}>\n\t\t\t<RoutingProvider {...routing}>\n\t\t\t\t<ContemberClient\n\t\t\t\t\tapiBaseUrl={props.apiBaseUrl}\n\t\t\t\t\tsessionToken={props.sessionToken}\n\t\t\t\t\tloginToken={props.loginToken}\n\t\t\t\t\tproject={props.project}\n\t\t\t\t\tstage={props.stage}\n\t\t\t\t>\n\t\t\t\t\t<EnvironmentExtensionProvider extension={projectEnvironmentExtension} state={props.project ?? null}>\n\t\t\t\t\t\t<DataViewPageNameKeyProvider>\n\t\t\t\t\t\t\t<IdentityProvider>\n\t\t\t\t\t\t\t\t<IdentityEnvironmentProvider>\n\t\t\t\t\t\t\t\t\t{props.children}\n\t\t\t\t\t\t\t\t</IdentityEnvironmentProvider>\n\t\t\t\t\t\t\t</IdentityProvider>\n\t\t\t\t\t\t</DataViewPageNameKeyProvider>\n\t\t\t\t\t</EnvironmentExtensionProvider>\n\t\t\t\t</ContemberClient>\n\t\t\t</RoutingProvider>\n\t\t</EnvironmentContext.Provider>\n\t)\n}\n"],"names":["Environment","jsxDEV","EnvironmentContext","RoutingProvider","ContemberClient","EnvironmentExtensionProvider","projectEnvironmentExtension","DataViewPageNameKeyProvider","IdentityProvider","IdentityEnvironmentProvider","this"],"mappings":";;;;;;;;AAeA,MAAM,gBAAgB,CAAC,UAA+C;AACjE,MAAA,OAAO,MAAM,eAAe,UAAU;AACnC,UAAA,IAAI,MAAM,iFAAiF;AAAA,EAAA;AAEnG;AAKa,MAAA,wBAAwB,CAAC,UAAsC;AAC3E,gBAAc,KAAK;AAEnB,QAAM,UAAU,MAAM,eAAeA,aAAAA,YAAY,OAAO;AAExD,QAAM,UAA+B;AAAA,IACpC,UAAU,MAAM;AAAA,IAChB,QAAQ,MAAM,UAAU,EAAE,OAAO,EAAE,MAAM,MAAM;AAAA,IAC/C,mBAAmB,QAAQ,iBAAiB;AAAA,EAC7C;AAIC,SAAAC,8BAAA,OAACC,gCAAmB,UAAnB,EAA4B,OAAO,SACnC,UAAAD,8BAAAA,OAACE,aAAAA,iBAAiB,EAAA,GAAG,SACpB,UAAAF,8BAAA;AAAA,IAACG,YAAA;AAAA,IAAA;AAAA,MACA,YAAY,MAAM;AAAA,MAClB,cAAc,MAAM;AAAA,MACpB,YAAY,MAAM;AAAA,MAClB,SAAS,MAAM;AAAA,MACf,OAAO,MAAM;AAAA,MAEb,UAACH,8BAAA,OAAAI,2CAAA,EAA6B,WAAWC,cAAA,6BAA6B,OAAO,MAAM,WAAW,MAC7F,UAAAL,8BAAA,OAACM,2DACA,UAACN,8BAAA,OAAAO,cAAA,kBAAA,EACA,UAACP,8BAAA,OAAAQ,cAAA,6BAAA,EACC,gBAAM,SADR,GAAA,QAAA,OAAA;AAAA,QAAA,UAAA;AAAA,QAAA,YAAA;AAAA,QAAA,cAAA;AAAA,MAAA,GAAAC,MAEA,EAHD,GAAA,QAAA,OAAA;AAAA,QAAA,UAAA;AAAA,QAAA,YAAA;AAAA,QAAA,cAAA;AAAA,MAAA,GAAAA,MAIA,EALD,GAAA,QAAA,OAAA;AAAA,QAAA,UAAA;AAAA,QAAA,YAAA;AAAA,QAAA,cAAA;AAAA,MAAA,GAAAA,MAMA,EAPD,GAAA,QAAA,OAAA;AAAA,QAAA,UAAA;AAAA,QAAA,YAAA;AAAA,QAAA,cAAA;AAAA,MAAA,GAQAA,MAAA;AAAA,IAAA;AAAA,IAfD;AAAA,IAAA;AAAA,IAAA;AAAA,MAAA,UAAA;AAAA,MAAA,YAAA;AAAA,MAAA,cAAA;AAAA,IAAA;AAAA,IAAAA;AAAAA,EAAA,KADD,QAAA,OAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAAA,GAAAA,MAkBA,EAnBD,GAAA,QAAA,OAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAoBA,GAAAA,MAAA;AAEF;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"ApplicationEntrypoint.js","sources":["../../../../../packages/interface/src/bootstrap/ApplicationEntrypoint.tsx"],"sourcesContent":["import { Environment, EnvironmentContext, EnvironmentExtensionProvider } from '@contember/react-binding'\nimport { ContemberClient, ContemberClientProps } from '@contember/react-client'\nimport { ReactNode } from 'react'\nimport { RequestProvider, RouteMap, RoutingContext, RoutingContextValue, RoutingProvider, SelectedDimension } from '@contember/react-routing'\nimport { DataViewPageNameKeyProvider } from './DataViewPageNameKeyProvider'\nimport { IdentityEnvironmentProvider, IdentityProvider, projectEnvironmentExtension } from '@contember/react-identity'\n\nexport interface ApplicationEntrypointProps extends ContemberClientProps {\n\tbasePath: string\n\tsessionToken?: string\n\troutes?: RouteMap\n\tchildren: ReactNode\n\tenvironment?: Environment\n}\n\nconst validateProps = (props: Partial<ApplicationEntrypointProps>) => {\n\tif (typeof props.apiBaseUrl !== 'string') {\n\t\tthrow new Error(`The ENV variables haven't been set. Check your \\`.env.development.local\\` file.`) // TODO: better message\n\t}\n}\n\n/**\n * @group Entrypoints\n */\nexport const ApplicationEntrypoint = (props: ApplicationEntrypointProps) => {\n\tvalidateProps(props)\n\n\tconst rootEnv = props.environment ?? Environment.create()\n\n\tconst routing: RoutingContextValue = {\n\t\tbasePath: props.basePath,\n\t\troutes: props.routes ?? { index: { path: '/' } },\n\t\tdefaultDimensions: rootEnv.getAllDimensions(),\n\t}\n\n\n\treturn (\n\t\t<EnvironmentContext.Provider value={rootEnv}>\n\t\t\t<RoutingProvider {...routing}>\n\t\t\t\t<ContemberClient\n\t\t\t\t\tapiBaseUrl={props.apiBaseUrl}\n\t\t\t\t\tsessionToken={props.sessionToken}\n\t\t\t\t\tloginToken={props.loginToken}\n\t\t\t\t\tproject={props.project}\n\t\t\t\t\tstage={props.stage}\n\t\t\t\t>\n\t\t\t\t\t<EnvironmentExtensionProvider extension={projectEnvironmentExtension} state={props.project ?? null}>\n\t\t\t\t\t\t<DataViewPageNameKeyProvider>\n\t\t\t\t\t\t\t<IdentityProvider>\n\t\t\t\t\t\t\t\t<IdentityEnvironmentProvider>\n\t\t\t\t\t\t\t\t\t{props.children}\n\t\t\t\t\t\t\t\t</IdentityEnvironmentProvider>\n\t\t\t\t\t\t\t</IdentityProvider>\n\t\t\t\t\t\t</DataViewPageNameKeyProvider>\n\t\t\t\t\t</EnvironmentExtensionProvider>\n\t\t\t\t</ContemberClient>\n\t\t\t</RoutingProvider>\n\t\t</EnvironmentContext.Provider>\n\t)\n}\n"],"names":["this"],"mappings":";;;;;;AAeA,MAAM,gBAAgB,CAAC,UAA+C;AACjE,MAAA,OAAO,MAAM,eAAe,UAAU;AACnC,UAAA,IAAI,MAAM,iFAAiF;AAAA,EAClG;AACD;AAKa,MAAA,wBAAwB,CAAC,UAAsC;AAC3E,gBAAc,KAAK;AAEnB,QAAM,UAAU,MAAM,eAAe,YAAY,OAAO;AAExD,QAAM,UAA+B;AAAA,IACpC,UAAU,MAAM;AAAA,IAChB,QAAQ,MAAM,UAAU,EAAE,OAAO,EAAE,MAAM,MAAM;AAAA,IAC/C,mBAAmB,QAAQ,iBAAiB;AAAA,EAAA;AAK5C,SAAA,uBAAC,mBAAmB,UAAnB,EAA4B,OAAO,SACnC,UAAA,uBAAC,iBAAiB,EAAA,GAAG,SACpB,UAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACA,YAAY,MAAM;AAAA,MAClB,cAAc,MAAM;AAAA,MACpB,YAAY,MAAM;AAAA,MAClB,SAAS,MAAM;AAAA,MACf,OAAO,MAAM;AAAA,MAEb,UAAC,uBAAA,8BAAA,EAA6B,WAAW,6BAA6B,OAAO,MAAM,WAAW,MAC7F,UAAA,uBAAC,+BACA,UAAC,uBAAA,kBAAA,EACA,UAAC,uBAAA,6BAAA,EACC,gBAAM,SADR,GAAA,QAAA,OAAA;AAAA,QAAA,UAAA;AAAA,QAAA,YAAA;AAAA,QAAA,cAAA;AAAA,MAAA,GAAAA,MAEA,EAHD,GAAA,QAAA,OAAA;AAAA,QAAA,UAAA;AAAA,QAAA,YAAA;AAAA,QAAA,cAAA;AAAA,MAAA,GAAAA,MAIA,EALD,GAAA,QAAA,OAAA;AAAA,QAAA,UAAA;AAAA,QAAA,YAAA;AAAA,QAAA,cAAA;AAAA,MAAA,GAAAA,MAMA,EAPD,GAAA,QAAA,OAAA;AAAA,QAAA,UAAA;AAAA,QAAA,YAAA;AAAA,QAAA,cAAA;AAAA,MAQA,GAAAA,MAAA;AAAA,IAAA;AAAA,IAfD;AAAA,IAAA;AAAA,IAAA;AAAA,MAAA,UAAA;AAAA,MAAA,YAAA;AAAA,MAAA,cAAA;AAAA,IAAA;AAAA,IAAAA;AAAAA,EAAA,KADD,QAAA,OAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAAA,GAAAA,MAkBA,EAnBD,GAAA,QAAA,OAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAoBA,GAAAA,MAAA;AAEF;"}
1
+ {"version":3,"file":"ApplicationEntrypoint.js","sources":["../../../../../packages/interface/src/bootstrap/ApplicationEntrypoint.tsx"],"sourcesContent":["import { Environment, EnvironmentContext, EnvironmentExtensionProvider } from '@contember/react-binding'\nimport { ContemberClient, ContemberClientProps } from '@contember/react-client'\nimport { ReactNode } from 'react'\nimport { RouteMap, RoutingContextValue, RoutingProvider } from '@contember/react-routing'\nimport { DataViewPageNameKeyProvider } from './DataViewPageNameKeyProvider'\nimport { IdentityEnvironmentProvider, IdentityProvider, projectEnvironmentExtension } from '@contember/react-identity'\n\nexport interface ApplicationEntrypointProps extends ContemberClientProps {\n\tbasePath: string\n\tsessionToken?: string\n\troutes?: RouteMap\n\tchildren: ReactNode\n\tenvironment?: Environment\n}\n\nconst validateProps = (props: Partial<ApplicationEntrypointProps>) => {\n\tif (typeof props.apiBaseUrl !== 'string') {\n\t\tthrow new Error(`The ENV variables haven't been set. Check your \\`.env.development.local\\` file.`) // TODO: better message\n\t}\n}\n\n/**\n * @group Entrypoints\n */\nexport const ApplicationEntrypoint = (props: ApplicationEntrypointProps) => {\n\tvalidateProps(props)\n\n\tconst rootEnv = props.environment ?? Environment.create()\n\n\tconst routing: RoutingContextValue = {\n\t\tbasePath: props.basePath,\n\t\troutes: props.routes ?? { index: { path: '/' } },\n\t\tdefaultDimensions: rootEnv.getAllDimensions(),\n\t}\n\n\n\treturn (\n\t\t<EnvironmentContext.Provider value={rootEnv}>\n\t\t\t<RoutingProvider {...routing}>\n\t\t\t\t<ContemberClient\n\t\t\t\t\tapiBaseUrl={props.apiBaseUrl}\n\t\t\t\t\tsessionToken={props.sessionToken}\n\t\t\t\t\tloginToken={props.loginToken}\n\t\t\t\t\tproject={props.project}\n\t\t\t\t\tstage={props.stage}\n\t\t\t\t>\n\t\t\t\t\t<EnvironmentExtensionProvider extension={projectEnvironmentExtension} state={props.project ?? null}>\n\t\t\t\t\t\t<DataViewPageNameKeyProvider>\n\t\t\t\t\t\t\t<IdentityProvider>\n\t\t\t\t\t\t\t\t<IdentityEnvironmentProvider>\n\t\t\t\t\t\t\t\t\t{props.children}\n\t\t\t\t\t\t\t\t</IdentityEnvironmentProvider>\n\t\t\t\t\t\t\t</IdentityProvider>\n\t\t\t\t\t\t</DataViewPageNameKeyProvider>\n\t\t\t\t\t</EnvironmentExtensionProvider>\n\t\t\t\t</ContemberClient>\n\t\t\t</RoutingProvider>\n\t\t</EnvironmentContext.Provider>\n\t)\n}\n"],"names":["this"],"mappings":";;;;;;AAeA,MAAM,gBAAgB,CAAC,UAA+C;AACjE,MAAA,OAAO,MAAM,eAAe,UAAU;AACnC,UAAA,IAAI,MAAM,iFAAiF;AAAA,EAAA;AAEnG;AAKa,MAAA,wBAAwB,CAAC,UAAsC;AAC3E,gBAAc,KAAK;AAEnB,QAAM,UAAU,MAAM,eAAe,YAAY,OAAO;AAExD,QAAM,UAA+B;AAAA,IACpC,UAAU,MAAM;AAAA,IAChB,QAAQ,MAAM,UAAU,EAAE,OAAO,EAAE,MAAM,MAAM;AAAA,IAC/C,mBAAmB,QAAQ,iBAAiB;AAAA,EAC7C;AAIC,SAAA,uBAAC,mBAAmB,UAAnB,EAA4B,OAAO,SACnC,UAAA,uBAAC,iBAAiB,EAAA,GAAG,SACpB,UAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACA,YAAY,MAAM;AAAA,MAClB,cAAc,MAAM;AAAA,MACpB,YAAY,MAAM;AAAA,MAClB,SAAS,MAAM;AAAA,MACf,OAAO,MAAM;AAAA,MAEb,UAAC,uBAAA,8BAAA,EAA6B,WAAW,6BAA6B,OAAO,MAAM,WAAW,MAC7F,UAAA,uBAAC,+BACA,UAAC,uBAAA,kBAAA,EACA,UAAC,uBAAA,6BAAA,EACC,gBAAM,SADR,GAAA,QAAA,OAAA;AAAA,QAAA,UAAA;AAAA,QAAA,YAAA;AAAA,QAAA,cAAA;AAAA,MAAA,GAAAA,MAEA,EAHD,GAAA,QAAA,OAAA;AAAA,QAAA,UAAA;AAAA,QAAA,YAAA;AAAA,QAAA,cAAA;AAAA,MAAA,GAAAA,MAIA,EALD,GAAA,QAAA,OAAA;AAAA,QAAA,UAAA;AAAA,QAAA,YAAA;AAAA,QAAA,cAAA;AAAA,MAAA,GAAAA,MAMA,EAPD,GAAA,QAAA,OAAA;AAAA,QAAA,UAAA;AAAA,QAAA,YAAA;AAAA,QAAA,cAAA;AAAA,MAAA,GAQAA,MAAA;AAAA,IAAA;AAAA,IAfD;AAAA,IAAA;AAAA,IAAA;AAAA,MAAA,UAAA;AAAA,MAAA,YAAA;AAAA,MAAA,cAAA;AAAA,IAAA;AAAA,IAAAA;AAAAA,EAAA,KADD,QAAA,OAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAAA,GAAAA,MAkBA,EAnBD,GAAA,QAAA,OAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAoBA,GAAAA,MAAA;AAEF;"}
@@ -1 +1 @@
1
- {"version":3,"file":"DataViewPageNameKeyProvider.cjs","sources":["../../../../../packages/interface/src/bootstrap/DataViewPageNameKeyProvider.tsx"],"sourcesContent":["import { useCurrentRequest } from '@contember/react-routing'\nimport { DataViewKeyProvider } from '@contember/react-dataview'\nimport { ReactNode } from 'react'\n\nexport const DataViewPageNameKeyProvider = ({ children }: { children: ReactNode }) => {\n\tconst pageName = useCurrentRequest()?.pageName\n\n\treturn (\n\t\t<DataViewKeyProvider value={pageName ?? ''}>\n\t\t\t{children}\n\t\t</DataViewKeyProvider>\n\t)\n}\n"],"names":["useCurrentRequest","jsxDEV","DataViewKeyProvider","this"],"mappings":";;;;;AAIO,MAAM,8BAA8B,CAAC,EAAE,eAAwC;AAC/E,QAAA,WAAWA,+BAAqB,GAAA;AAEtC,SACEC,8BAAA,OAAAC,mCAAA,EAAoB,OAAO,YAAY,IACtC,SADF,GAAA,QAAA,OAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAEA,GAAAC,MAAA;AAEF;;"}
1
+ {"version":3,"file":"DataViewPageNameKeyProvider.cjs","sources":["../../../../../packages/interface/src/bootstrap/DataViewPageNameKeyProvider.tsx"],"sourcesContent":["import { useCurrentRequest } from '@contember/react-routing'\nimport { DataViewKeyProvider } from '@contember/react-dataview'\nimport { ReactNode } from 'react'\n\nexport const DataViewPageNameKeyProvider = ({ children }: { children: ReactNode }) => {\n\tconst pageName = useCurrentRequest()?.pageName\n\n\treturn (\n\t\t<DataViewKeyProvider value={pageName ?? ''}>\n\t\t\t{children}\n\t\t</DataViewKeyProvider>\n\t)\n}\n"],"names":["useCurrentRequest","jsxDEV","DataViewKeyProvider","this"],"mappings":";;;;;AAIO,MAAM,8BAA8B,CAAC,EAAE,eAAwC;AAC/E,QAAA,WAAWA,kCAAqB;AAEtC,SACEC,8BAAA,OAAAC,mCAAA,EAAoB,OAAO,YAAY,IACtC,SADF,GAAA,QAAA,OAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAEA,GAAAC,MAAA;AAEF;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"DataViewPageNameKeyProvider.js","sources":["../../../../../packages/interface/src/bootstrap/DataViewPageNameKeyProvider.tsx"],"sourcesContent":["import { useCurrentRequest } from '@contember/react-routing'\nimport { DataViewKeyProvider } from '@contember/react-dataview'\nimport { ReactNode } from 'react'\n\nexport const DataViewPageNameKeyProvider = ({ children }: { children: ReactNode }) => {\n\tconst pageName = useCurrentRequest()?.pageName\n\n\treturn (\n\t\t<DataViewKeyProvider value={pageName ?? ''}>\n\t\t\t{children}\n\t\t</DataViewKeyProvider>\n\t)\n}\n"],"names":["this"],"mappings":";;;AAIO,MAAM,8BAA8B,CAAC,EAAE,eAAwC;AAC/E,QAAA,WAAW,kBAAqB,GAAA;AAEtC,SACE,uBAAA,qBAAA,EAAoB,OAAO,YAAY,IACtC,SADF,GAAA,QAAA,OAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAEA,GAAAA,MAAA;AAEF;"}
1
+ {"version":3,"file":"DataViewPageNameKeyProvider.js","sources":["../../../../../packages/interface/src/bootstrap/DataViewPageNameKeyProvider.tsx"],"sourcesContent":["import { useCurrentRequest } from '@contember/react-routing'\nimport { DataViewKeyProvider } from '@contember/react-dataview'\nimport { ReactNode } from 'react'\n\nexport const DataViewPageNameKeyProvider = ({ children }: { children: ReactNode }) => {\n\tconst pageName = useCurrentRequest()?.pageName\n\n\treturn (\n\t\t<DataViewKeyProvider value={pageName ?? ''}>\n\t\t\t{children}\n\t\t</DataViewKeyProvider>\n\t)\n}\n"],"names":["this"],"mappings":";;;AAIO,MAAM,8BAA8B,CAAC,EAAE,eAAwC;AAC/E,QAAA,WAAW,qBAAqB;AAEtC,SACE,uBAAA,qBAAA,EAAoB,OAAO,YAAY,IACtC,SADF,GAAA,QAAA,OAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAEA,GAAAA,MAAA;AAEF;"}
@@ -17,7 +17,7 @@ const DisconnectEntityTrigger = ({ immediatePersist, onPersistError, onPersistSu
17
17
  if (!parent) {
18
18
  throw new reactBinding.BindingError("Cannot disconnect root entity");
19
19
  }
20
- if (parent instanceof reactBinding.EntityListAccessor) {
20
+ if (reactBinding.isEntityListAccessor(parent)) {
21
21
  parent.disconnectEntity(entity);
22
22
  } else {
23
23
  const subTreeNode = entity.environment.getSubTreeNode();
@@ -42,7 +42,7 @@ const DisconnectEntityTrigger = ({ immediatePersist, onPersistError, onPersistSu
42
42
  false,
43
43
  {
44
44
  fileName: "/home/runner/work/contember/contember/packages/interface/src/components/binding/DisconnectEntityTrigger.tsx",
45
- lineNumber: 47,
45
+ lineNumber: 48,
46
46
  columnNumber: 3
47
47
  },
48
48
  void 0
@@ -1 +1 @@
1
- {"version":3,"file":"DisconnectEntityTrigger.cjs","sources":["../../../../../../packages/interface/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","jsxDEV","this"],"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,8BAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACA;AAAA,MACA,UAAU,aAAa,OAAO;AAAA,MAC7B,GAAG;AAAA,IAAA;AAAA,IAHL;AAAA,IAAA;AAAA,IAAA;AAAA,MAAA,UAAA;AAAA,MAAA,YAAA;AAAA,MAAA,cAAA;AAAA,IAAA;AAAA,IAAAC;AAAAA,EAAA;AAMF;;"}
1
+ {"version":3,"file":"DisconnectEntityTrigger.cjs","sources":["../../../../../../packages/interface/src/components/binding/DisconnectEntityTrigger.tsx"],"sourcesContent":["import { ComponentType, ReactNode, useCallback } from 'react'\nimport { Slot } from '@radix-ui/react-slot'\nimport { BindingError, EntityListAccessor, ErrorPersistResult,\n\tisEntityListAccessor, 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 (isEntityListAccessor(parent)) {\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","isEntityListAccessor","jsxDEV","this"],"mappings":";;;;;;AAMA,MAAM,aAAaA,UAAA;AAUN,MAAA,0BAA0B,CAAC,EAAE,kBAAkB,gBAAgB,kBAAkB,OAAO,GAAG,YAA0C;AACjJ,QAAM,SAASC,aAAAA,UAAU;AACzB,QAAM,iBAAiBC,aAAAA,WAAW;AAClC,QAAM,aAAaC,aAAAA,iBAAiB;AAC9B,QAAA,UAAUC,MAAAA,YAAY,MAAM;AACjC,QAAI,OAAO;AACH,aAAA,wBAAwB,EAAE,OAAO;AAAA,IAAA,OAClC;AACA,YAAA,SAAS,OAAO,UAAU;AAChC,UAAI,CAAC,QAAQ;AACN,cAAA,IAAIC,0BAAa,+BAA+B;AAAA,MAAA;AAEnD,UAAAC,aAAAA,qBAAqB,MAAM,GAAG;AACjC,eAAO,iBAAiB,MAAM;AAAA,MAAA,OACxB;AACA,cAAA,cAAc,OAAO,YAAY,eAAe;AAClD,YAAA,YAAY,SAAS,UAAU;AAC5B,gBAAA,IAAID,0BAAa,+BAA+B;AAAA,QAAA;AAEvD,eAAO,wBAAwB,EAAE,OAAO,YAAY,MAAM,MAAM;AAAA,MAAA;AAAA,IACjE;AAGD,QAAI,kBAAkB;AACrB,qBACE,EAAA,KAAK,gBAAgB,EACrB,MAAM,cAAc;AAAA,IAAA;AAAA,EACvB,GACE,CAAC,OAAO,kBAAkB,QAAQ,gBAAgB,kBAAkB,cAAc,CAAC;AAGrF,SAAAE,8BAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACA;AAAA,MACA,UAAU,aAAa,OAAO;AAAA,MAC7B,GAAG;AAAA,IAAA;AAAA,IAHL;AAAA,IAAA;AAAA,IAAA;AAAA,MAAA,UAAA;AAAA,MAAA,YAAA;AAAA,MAAA,cAAA;AAAA,IAAA;AAAA,IAAAC;AAAAA,EAIA;AAEF;;"}
@@ -1,7 +1,7 @@
1
1
  import { jsxDEV } from "react/jsx-dev-runtime";
2
2
  import { useCallback } from "react";
3
3
  import { Slot } from "@radix-ui/react-slot";
4
- import { useEntity, usePersist, useMutationState, BindingError, EntityListAccessor } from "@contember/react-binding";
4
+ import { useEntity, usePersist, useMutationState, BindingError, isEntityListAccessor } from "@contember/react-binding";
5
5
  const SlotButton = Slot;
6
6
  const DisconnectEntityTrigger = ({ immediatePersist, onPersistError, onPersistSuccess, field, ...props }) => {
7
7
  const entity = useEntity();
@@ -15,7 +15,7 @@ const DisconnectEntityTrigger = ({ immediatePersist, onPersistError, onPersistSu
15
15
  if (!parent) {
16
16
  throw new BindingError("Cannot disconnect root entity");
17
17
  }
18
- if (parent instanceof EntityListAccessor) {
18
+ if (isEntityListAccessor(parent)) {
19
19
  parent.disconnectEntity(entity);
20
20
  } else {
21
21
  const subTreeNode = entity.environment.getSubTreeNode();
@@ -40,7 +40,7 @@ const DisconnectEntityTrigger = ({ immediatePersist, onPersistError, onPersistSu
40
40
  false,
41
41
  {
42
42
  fileName: "/home/runner/work/contember/contember/packages/interface/src/components/binding/DisconnectEntityTrigger.tsx",
43
- lineNumber: 47,
43
+ lineNumber: 48,
44
44
  columnNumber: 3
45
45
  },
46
46
  void 0
@@ -1 +1 @@
1
- {"version":3,"file":"DisconnectEntityTrigger.js","sources":["../../../../../../packages/interface/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":["this"],"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,IAHL;AAAA,IAAA;AAAA,IAAA;AAAA,MAAA,UAAA;AAAA,MAAA,YAAA;AAAA,MAAA,cAAA;AAAA,IAAA;AAAA,IAAAA;AAAAA,EAAA;AAMF;"}
1
+ {"version":3,"file":"DisconnectEntityTrigger.js","sources":["../../../../../../packages/interface/src/components/binding/DisconnectEntityTrigger.tsx"],"sourcesContent":["import { ComponentType, ReactNode, useCallback } from 'react'\nimport { Slot } from '@radix-ui/react-slot'\nimport { BindingError, EntityListAccessor, ErrorPersistResult,\n\tisEntityListAccessor, 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 (isEntityListAccessor(parent)) {\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":["this"],"mappings":";;;;AAMA,MAAM,aAAa;AAUN,MAAA,0BAA0B,CAAC,EAAE,kBAAkB,gBAAgB,kBAAkB,OAAO,GAAG,YAA0C;AACjJ,QAAM,SAAS,UAAU;AACzB,QAAM,iBAAiB,WAAW;AAClC,QAAM,aAAa,iBAAiB;AAC9B,QAAA,UAAU,YAAY,MAAM;AACjC,QAAI,OAAO;AACH,aAAA,wBAAwB,EAAE,OAAO;AAAA,IAAA,OAClC;AACA,YAAA,SAAS,OAAO,UAAU;AAChC,UAAI,CAAC,QAAQ;AACN,cAAA,IAAI,aAAa,+BAA+B;AAAA,MAAA;AAEnD,UAAA,qBAAqB,MAAM,GAAG;AACjC,eAAO,iBAAiB,MAAM;AAAA,MAAA,OACxB;AACA,cAAA,cAAc,OAAO,YAAY,eAAe;AAClD,YAAA,YAAY,SAAS,UAAU;AAC5B,gBAAA,IAAI,aAAa,+BAA+B;AAAA,QAAA;AAEvD,eAAO,wBAAwB,EAAE,OAAO,YAAY,MAAM,MAAM;AAAA,MAAA;AAAA,IACjE;AAGD,QAAI,kBAAkB;AACrB,qBACE,EAAA,KAAK,gBAAgB,EACrB,MAAM,cAAc;AAAA,IAAA;AAAA,EACvB,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,IAHL;AAAA,IAAA;AAAA,IAAA;AAAA,MAAA,UAAA;AAAA,MAAA,YAAA;AAAA,MAAA,cAAA;AAAA,IAAA;AAAA,IAAAA;AAAAA,EAIA;AAEF;"}
@@ -1 +1 @@
1
- {"version":3,"file":"EntityBeforePersist.cjs","sources":["../../../../../../packages/interface/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
+ {"version":3,"file":"EntityBeforePersist.cjs","sources":["../../../../../../packages/interface/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,eAAAA,uBAAuB,QAAQ;AACxB,SAAA;AACR;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"RedirectOnPersist.cjs","sources":["../../../../../../packages/interface/src/components/binding/RedirectOnPersist.tsx"],"sourcesContent":["import { useEntityPersistSuccess } from '@contember/react-binding'\nimport { RequestParameters, useRedirect } from '@contember/react-routing'\nimport { RoutingLinkTarget } from '@contember/react-routing'\n\nexport const RedirectOnPersist = ({ to, parameters }: { to: RoutingLinkTarget; parameters?: RequestParameters }) => {\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, parameters)\n\t})\n\treturn null\n}\n"],"names":["useRedirect","useEntityPersistSuccess"],"mappings":";;;;AAIO,MAAM,oBAAoB,CAAC,EAAE,IAAI,iBAA4E;AACnH,QAAM,WAAWA,aAAAA;AACOC,uCAAA,CAAC,WAAW,YAAY;AAC3C,QAAA,QAAQ,gBAAgB,eAAe;AAC1C;AAAA,IACD;AACA,aAAS,IAAI,UAAU;AAAA,EAAA,CACvB;AACM,SAAA;AACR;;"}
1
+ {"version":3,"file":"RedirectOnPersist.cjs","sources":["../../../../../../packages/interface/src/components/binding/RedirectOnPersist.tsx"],"sourcesContent":["import { useEntityPersistSuccess } from '@contember/react-binding'\nimport { RequestParameters, useRedirect } from '@contember/react-routing'\nimport { RoutingLinkTarget } from '@contember/react-routing'\n\nexport const RedirectOnPersist = ({ to, parameters }: { to: RoutingLinkTarget; parameters?: RequestParameters }) => {\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, parameters)\n\t})\n\treturn null\n}\n"],"names":["useRedirect","useEntityPersistSuccess"],"mappings":";;;;AAIO,MAAM,oBAAoB,CAAC,EAAE,IAAI,iBAA4E;AACnH,QAAM,WAAWA,aAAAA,YAAY;AACLC,uCAAA,CAAC,WAAW,YAAY;AAC3C,QAAA,QAAQ,gBAAgB,eAAe;AAC1C;AAAA,IAAA;AAED,aAAS,IAAI,UAAU;AAAA,EAAA,CACvB;AACM,SAAA;AACR;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"RedirectOnPersist.js","sources":["../../../../../../packages/interface/src/components/binding/RedirectOnPersist.tsx"],"sourcesContent":["import { useEntityPersistSuccess } from '@contember/react-binding'\nimport { RequestParameters, useRedirect } from '@contember/react-routing'\nimport { RoutingLinkTarget } from '@contember/react-routing'\n\nexport const RedirectOnPersist = ({ to, parameters }: { to: RoutingLinkTarget; parameters?: RequestParameters }) => {\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, parameters)\n\t})\n\treturn null\n}\n"],"names":[],"mappings":";;AAIO,MAAM,oBAAoB,CAAC,EAAE,IAAI,iBAA4E;AACnH,QAAM,WAAW;AACO,0BAAA,CAAC,WAAW,YAAY;AAC3C,QAAA,QAAQ,gBAAgB,eAAe;AAC1C;AAAA,IACD;AACA,aAAS,IAAI,UAAU;AAAA,EAAA,CACvB;AACM,SAAA;AACR;"}
1
+ {"version":3,"file":"RedirectOnPersist.js","sources":["../../../../../../packages/interface/src/components/binding/RedirectOnPersist.tsx"],"sourcesContent":["import { useEntityPersistSuccess } from '@contember/react-binding'\nimport { RequestParameters, useRedirect } from '@contember/react-routing'\nimport { RoutingLinkTarget } from '@contember/react-routing'\n\nexport const RedirectOnPersist = ({ to, parameters }: { to: RoutingLinkTarget; parameters?: RequestParameters }) => {\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, parameters)\n\t})\n\treturn null\n}\n"],"names":[],"mappings":";;AAIO,MAAM,oBAAoB,CAAC,EAAE,IAAI,iBAA4E;AACnH,QAAM,WAAW,YAAY;AACL,0BAAA,CAAC,WAAW,YAAY;AAC3C,QAAA,QAAQ,gBAAgB,eAAe;AAC1C;AAAA,IAAA;AAED,aAAS,IAAI,UAAU;AAAA,EAAA,CACvB;AACM,SAAA;AACR;"}
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const reactBinding = require("@contember/react-binding");
4
+ const React = require("react");
5
+ const reactRouting = require("@contember/react-routing");
6
+ const useBlockNavigationOnDirtyState = (handler, options) => {
7
+ const isDirty = reactBinding.useDirtinessState();
8
+ const isDirtyRef = React.useRef(isDirty);
9
+ isDirtyRef.current = isDirty;
10
+ const isMutating = reactBinding.useMutationState();
11
+ const isMutatingRef = React.useRef(isMutating);
12
+ isMutatingRef.current = isMutating;
13
+ const persist = reactBinding.usePersist();
14
+ reactRouting.useRegisterRequestChangeListener(React.useCallback(async (event) => {
15
+ if (!isDirtyRef.current || isMutatingRef.current) {
16
+ return;
17
+ }
18
+ const result = await handler();
19
+ if (result === "cancel") {
20
+ event.abortNavigation();
21
+ return;
22
+ }
23
+ if (result === "save") {
24
+ try {
25
+ const result2 = await persist();
26
+ options?.onPersistSuccess?.(result2);
27
+ } catch (e) {
28
+ options?.onPersistError?.(e);
29
+ event.abortNavigation();
30
+ return;
31
+ }
32
+ }
33
+ }, [handler, options, persist]));
34
+ };
35
+ exports.useBlockNavigationOnDirtyState = useBlockNavigationOnDirtyState;
36
+ //# sourceMappingURL=useBlockNavigationOnDirtyState.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useBlockNavigationOnDirtyState.cjs","sources":["../../../../../packages/interface/src/hooks/useBlockNavigationOnDirtyState.ts"],"sourcesContent":["import { ErrorPersistResult, SuccessfulPersistResult, useDirtinessState, useMutationState, usePersist } from '@contember/react-binding'\nimport { useCallback, useRef } from 'react'\nimport { useRegisterRequestChangeListener } from '@contember/react-routing'\n\nexport type BlockNavigationOnDirtyStateResult = 'save' | 'discard' | 'cancel'\n\nexport const useBlockNavigationOnDirtyState = (handler: () => Promise<BlockNavigationOnDirtyStateResult>, options?: {\n\tonPersistSuccess?: (result: SuccessfulPersistResult) => void\n\tonPersistError?: (result: ErrorPersistResult) => void\n}) => {\n\tconst isDirty = useDirtinessState()\n\tconst isDirtyRef = useRef(isDirty)\n\tisDirtyRef.current = isDirty\n\tconst isMutating = useMutationState()\n\tconst isMutatingRef = useRef(isMutating)\n\tisMutatingRef.current = isMutating\n\tconst persist = usePersist()\n\n\tuseRegisterRequestChangeListener(useCallback(async event => {\n\t\tif (!isDirtyRef.current || isMutatingRef.current) {\n\t\t\treturn\n\t\t}\n\t\tconst result = await handler()\n\t\tif (result === 'cancel') {\n\t\t\tevent.abortNavigation()\n\t\t\treturn\n\t\t}\n\n\t\tif (result === 'save') {\n\t\t\ttry {\n\t\t\t\tconst result = await persist()\n\t\t\t\toptions?.onPersistSuccess?.(result)\n\t\t\t} catch (e: any) {\n\t\t\t\toptions?.onPersistError?.(e)\n\t\t\t\tevent.abortNavigation()\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t}, [handler, options, persist]))\n}\n"],"names":["useDirtinessState","useRef","useMutationState","usePersist","useRegisterRequestChangeListener","useCallback","result"],"mappings":";;;;;AAMa,MAAA,iCAAiC,CAAC,SAA2D,YAGpG;AACL,QAAM,UAAUA,aAAAA,kBAAkB;AAC5B,QAAA,aAAaC,aAAO,OAAO;AACjC,aAAW,UAAU;AACrB,QAAM,aAAaC,aAAAA,iBAAiB;AAC9B,QAAA,gBAAgBD,aAAO,UAAU;AACvC,gBAAc,UAAU;AACxB,QAAM,UAAUE,aAAAA,WAAW;AAEMC,gDAAAC,MAAAA,YAAY,OAAM,UAAS;AAC3D,QAAI,CAAC,WAAW,WAAW,cAAc,SAAS;AACjD;AAAA,IAAA;AAEK,UAAA,SAAS,MAAM,QAAQ;AAC7B,QAAI,WAAW,UAAU;AACxB,YAAM,gBAAgB;AACtB;AAAA,IAAA;AAGD,QAAI,WAAW,QAAQ;AAClB,UAAA;AACGC,cAAAA,UAAS,MAAM,QAAQ;AAC7B,iBAAS,mBAAmBA,OAAM;AAAA,eAC1B,GAAQ;AAChB,iBAAS,iBAAiB,CAAC;AAC3B,cAAM,gBAAgB;AACtB;AAAA,MAAA;AAAA,IACD;AAAA,KAEC,CAAC,SAAS,SAAS,OAAO,CAAC,CAAC;AAChC;;"}
@@ -0,0 +1,36 @@
1
+ import { useDirtinessState, useMutationState, usePersist } from "@contember/react-binding";
2
+ import { useRef, useCallback } from "react";
3
+ import { useRegisterRequestChangeListener } from "@contember/react-routing";
4
+ const useBlockNavigationOnDirtyState = (handler, options) => {
5
+ const isDirty = useDirtinessState();
6
+ const isDirtyRef = useRef(isDirty);
7
+ isDirtyRef.current = isDirty;
8
+ const isMutating = useMutationState();
9
+ const isMutatingRef = useRef(isMutating);
10
+ isMutatingRef.current = isMutating;
11
+ const persist = usePersist();
12
+ useRegisterRequestChangeListener(useCallback(async (event) => {
13
+ if (!isDirtyRef.current || isMutatingRef.current) {
14
+ return;
15
+ }
16
+ const result = await handler();
17
+ if (result === "cancel") {
18
+ event.abortNavigation();
19
+ return;
20
+ }
21
+ if (result === "save") {
22
+ try {
23
+ const result2 = await persist();
24
+ options?.onPersistSuccess?.(result2);
25
+ } catch (e) {
26
+ options?.onPersistError?.(e);
27
+ event.abortNavigation();
28
+ return;
29
+ }
30
+ }
31
+ }, [handler, options, persist]));
32
+ };
33
+ export {
34
+ useBlockNavigationOnDirtyState
35
+ };
36
+ //# sourceMappingURL=useBlockNavigationOnDirtyState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useBlockNavigationOnDirtyState.js","sources":["../../../../../packages/interface/src/hooks/useBlockNavigationOnDirtyState.ts"],"sourcesContent":["import { ErrorPersistResult, SuccessfulPersistResult, useDirtinessState, useMutationState, usePersist } from '@contember/react-binding'\nimport { useCallback, useRef } from 'react'\nimport { useRegisterRequestChangeListener } from '@contember/react-routing'\n\nexport type BlockNavigationOnDirtyStateResult = 'save' | 'discard' | 'cancel'\n\nexport const useBlockNavigationOnDirtyState = (handler: () => Promise<BlockNavigationOnDirtyStateResult>, options?: {\n\tonPersistSuccess?: (result: SuccessfulPersistResult) => void\n\tonPersistError?: (result: ErrorPersistResult) => void\n}) => {\n\tconst isDirty = useDirtinessState()\n\tconst isDirtyRef = useRef(isDirty)\n\tisDirtyRef.current = isDirty\n\tconst isMutating = useMutationState()\n\tconst isMutatingRef = useRef(isMutating)\n\tisMutatingRef.current = isMutating\n\tconst persist = usePersist()\n\n\tuseRegisterRequestChangeListener(useCallback(async event => {\n\t\tif (!isDirtyRef.current || isMutatingRef.current) {\n\t\t\treturn\n\t\t}\n\t\tconst result = await handler()\n\t\tif (result === 'cancel') {\n\t\t\tevent.abortNavigation()\n\t\t\treturn\n\t\t}\n\n\t\tif (result === 'save') {\n\t\t\ttry {\n\t\t\t\tconst result = await persist()\n\t\t\t\toptions?.onPersistSuccess?.(result)\n\t\t\t} catch (e: any) {\n\t\t\t\toptions?.onPersistError?.(e)\n\t\t\t\tevent.abortNavigation()\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t}, [handler, options, persist]))\n}\n"],"names":["result"],"mappings":";;;AAMa,MAAA,iCAAiC,CAAC,SAA2D,YAGpG;AACL,QAAM,UAAU,kBAAkB;AAC5B,QAAA,aAAa,OAAO,OAAO;AACjC,aAAW,UAAU;AACrB,QAAM,aAAa,iBAAiB;AAC9B,QAAA,gBAAgB,OAAO,UAAU;AACvC,gBAAc,UAAU;AACxB,QAAM,UAAU,WAAW;AAEM,mCAAA,YAAY,OAAM,UAAS;AAC3D,QAAI,CAAC,WAAW,WAAW,cAAc,SAAS;AACjD;AAAA,IAAA;AAEK,UAAA,SAAS,MAAM,QAAQ;AAC7B,QAAI,WAAW,UAAU;AACxB,YAAM,gBAAgB;AACtB;AAAA,IAAA;AAGD,QAAI,WAAW,QAAQ;AAClB,UAAA;AACGA,cAAAA,UAAS,MAAM,QAAQ;AAC7B,iBAAS,mBAAmBA,OAAM;AAAA,eAC1B,GAAQ;AAChB,iBAAS,iBAAiB,CAAC;AAC3B,cAAM,gBAAgB;AACtB;AAAA,MAAA;AAAA,IACD;AAAA,KAEC,CAAC,SAAS,SAAS,OAAO,CAAC,CAAC;AAChC;"}
@@ -13,7 +13,7 @@ const useIsApplicationOutdated = ({ checkIntervalMs = defaultCheckIntervalMs } =
13
13
  return;
14
14
  }
15
15
  const version = await fetchVersion();
16
- if (version !== initialVersion) {
16
+ if (version && version !== initialVersion) {
17
17
  setIsOutdated(true);
18
18
  }
19
19
  }, [fetchVersion, initialVersion]);
@@ -1 +1 @@
1
- {"version":3,"file":"useIsApplicationOutdated.cjs","sources":["../../../../../packages/interface/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
+ {"version":3,"file":"useIsApplicationOutdated.cjs","sources":["../../../../../packages/interface/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 && 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,MAAAA,SAAS,KAAK;AAClD,QAAM,eAAe,gBAAgB;AAE/B,QAAA,eAAeC,MAAAA,YAAY,YAAY;AAC5C,QAAI,SAAS,QAAQ;AACpB;AAAA,IAAA;AAEK,UAAA,UAAU,MAAM,aAAa;AAC/B,QAAA,WAAW,YAAY,gBAAgB;AAC1C,oBAAc,IAAI;AAAA,IAAA;AAAA,EACnB,GACE,CAAC,cAAc,cAAc,CAAC;AACjC,QAAM,cAAc,CAAC,CAAC,kBAAkB,CAAC;AAEzCC,QAAAA,UAAU,MAAM;AACf,QAAI,CAAC,aAAa;AACjB;AAAA,IAAA;AAEK,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,IAAA;AAEQ,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,KAAK;AACxD,YAAA,OAAO,SAAS,cAAc,MAAM;AAC1C,WAAK,YAAY;AACjB,aAAO,uBAAuB,IAAI;AAAA,aAC1B,GAAG;AACX,cAAQ,MAAM,CAAC;AACR,aAAA;AAAA,IAAA;AAAA,EAET,GAAG,EAAE;AACN;;"}
@@ -11,7 +11,7 @@ const useIsApplicationOutdated = ({ checkIntervalMs = defaultCheckIntervalMs } =
11
11
  return;
12
12
  }
13
13
  const version = await fetchVersion();
14
- if (version !== initialVersion) {
14
+ if (version && version !== initialVersion) {
15
15
  setIsOutdated(true);
16
16
  }
17
17
  }, [fetchVersion, initialVersion]);
@@ -1 +1 @@
1
- {"version":3,"file":"useIsApplicationOutdated.js","sources":["../../../../../packages/interface/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
+ {"version":3,"file":"useIsApplicationOutdated.js","sources":["../../../../../packages/interface/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 && 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,gBAAgB;AAE/B,QAAA,eAAe,YAAY,YAAY;AAC5C,QAAI,SAAS,QAAQ;AACpB;AAAA,IAAA;AAEK,UAAA,UAAU,MAAM,aAAa;AAC/B,QAAA,WAAW,YAAY,gBAAgB;AAC1C,oBAAc,IAAI;AAAA,IAAA;AAAA,EACnB,GACE,CAAC,cAAc,cAAc,CAAC;AACjC,QAAM,cAAc,CAAC,CAAC,kBAAkB,CAAC;AAEzC,YAAU,MAAM;AACf,QAAI,CAAC,aAAa;AACjB;AAAA,IAAA;AAEK,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,IAAA;AAEQ,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,KAAK;AACxD,YAAA,OAAO,SAAS,cAAc,MAAM;AAC1C,WAAK,YAAY;AACjB,aAAO,uBAAuB,IAAI;AAAA,aAC1B,GAAG;AACX,cAAQ,MAAM,CAAC;AACR,aAAA;AAAA,IAAA;AAAA,EAET,GAAG,EAAE;AACN;"}
@@ -6,24 +6,22 @@ const reactIdentity = require("@contember/react-identity");
6
6
  const reactDevbar = require("@contember/react-devbar");
7
7
  const ApplicationEntrypoint = require("./src/bootstrap/ApplicationEntrypoint.cjs");
8
8
  const ClearFieldTrigger = require("./src/components/binding/ClearFieldTrigger.cjs");
9
- const DeleteEntityTrigger = require("./src/components/binding/DeleteEntityTrigger.cjs");
10
9
  const DisconnectEntityTrigger = require("./src/components/binding/DisconnectEntityTrigger.cjs");
11
- const PersistTrigger = require("./src/components/binding/PersistTrigger.cjs");
12
10
  const EntityBeforePersist = require("./src/components/binding/EntityBeforePersist.cjs");
13
11
  const RedirectOnPersist = require("./src/components/binding/RedirectOnPersist.cjs");
14
12
  const useIsApplicationOutdated = require("./src/hooks/useIsApplicationOutdated.cjs");
13
+ const useBlockNavigationOnDirtyState = require("./src/hooks/useBlockNavigationOnDirtyState.cjs");
15
14
  Object.defineProperty(exports, "createErrorHandler", {
16
15
  enumerable: true,
17
16
  get: () => reactDevbar.createErrorHandler
18
17
  });
19
18
  exports.ApplicationEntrypoint = ApplicationEntrypoint.ApplicationEntrypoint;
20
19
  exports.ClearFieldTrigger = ClearFieldTrigger.ClearFieldTrigger;
21
- exports.DeleteEntityTrigger = DeleteEntityTrigger.DeleteEntityTrigger;
22
20
  exports.DisconnectEntityTrigger = DisconnectEntityTrigger.DisconnectEntityTrigger;
23
- exports.PersistTrigger = PersistTrigger.PersistTrigger;
24
21
  exports.EntityBeforePersist = EntityBeforePersist.EntityBeforePersist;
25
22
  exports.RedirectOnPersist = RedirectOnPersist.RedirectOnPersist;
26
23
  exports.useIsApplicationOutdated = useIsApplicationOutdated.useIsApplicationOutdated;
24
+ exports.useBlockNavigationOnDirtyState = useBlockNavigationOnDirtyState.useBlockNavigationOnDirtyState;
27
25
  Object.keys(reactRouting).forEach((k) => {
28
26
  if (k !== "default" && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, {
29
27
  enumerable: true,
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -4,21 +4,19 @@ export * from "@contember/react-identity";
4
4
  import { createErrorHandler } from "@contember/react-devbar";
5
5
  import { ApplicationEntrypoint } from "./src/bootstrap/ApplicationEntrypoint.js";
6
6
  import { ClearFieldTrigger } from "./src/components/binding/ClearFieldTrigger.js";
7
- import { DeleteEntityTrigger } from "./src/components/binding/DeleteEntityTrigger.js";
8
7
  import { DisconnectEntityTrigger } from "./src/components/binding/DisconnectEntityTrigger.js";
9
- import { PersistTrigger } from "./src/components/binding/PersistTrigger.js";
10
8
  import { EntityBeforePersist } from "./src/components/binding/EntityBeforePersist.js";
11
9
  import { RedirectOnPersist } from "./src/components/binding/RedirectOnPersist.js";
12
10
  import { useIsApplicationOutdated } from "./src/hooks/useIsApplicationOutdated.js";
11
+ import { useBlockNavigationOnDirtyState } from "./src/hooks/useBlockNavigationOnDirtyState.js";
13
12
  export {
14
13
  ApplicationEntrypoint,
15
14
  ClearFieldTrigger,
16
- DeleteEntityTrigger,
17
15
  DisconnectEntityTrigger,
18
16
  EntityBeforePersist,
19
- PersistTrigger,
20
17
  RedirectOnPersist,
21
18
  createErrorHandler,
19
+ useBlockNavigationOnDirtyState,
22
20
  useIsApplicationOutdated
23
21
  };
24
22
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"ApplicationEntrypoint.cjs","sources":["../../../../../packages/interface/src/bootstrap/ApplicationEntrypoint.tsx"],"sourcesContent":["import { Environment, EnvironmentContext, EnvironmentExtensionProvider } from '@contember/react-binding'\nimport { ContemberClient, ContemberClientProps } from '@contember/react-client'\nimport { ReactNode } from 'react'\nimport { RequestProvider, RouteMap, RoutingContext, RoutingContextValue, RoutingProvider, SelectedDimension } from '@contember/react-routing'\nimport { DataViewPageNameKeyProvider } from './DataViewPageNameKeyProvider'\nimport { IdentityEnvironmentProvider, IdentityProvider, projectEnvironmentExtension } from '@contember/react-identity'\n\nexport interface ApplicationEntrypointProps extends ContemberClientProps {\n\tbasePath: string\n\tsessionToken?: string\n\troutes?: RouteMap\n\tchildren: ReactNode\n\tenvironment?: Environment\n}\n\nconst validateProps = (props: Partial<ApplicationEntrypointProps>) => {\n\tif (typeof props.apiBaseUrl !== 'string') {\n\t\tthrow new Error(`The ENV variables haven't been set. Check your \\`.env.development.local\\` file.`) // TODO: better message\n\t}\n}\n\n/**\n * @group Entrypoints\n */\nexport const ApplicationEntrypoint = (props: ApplicationEntrypointProps) => {\n\tvalidateProps(props)\n\n\tconst rootEnv = props.environment ?? Environment.create()\n\n\tconst routing: RoutingContextValue = {\n\t\tbasePath: props.basePath,\n\t\troutes: props.routes ?? { index: { path: '/' } },\n\t\tdefaultDimensions: rootEnv.getAllDimensions(),\n\t}\n\n\n\treturn (\n\t\t<EnvironmentContext.Provider value={rootEnv}>\n\t\t\t<RoutingProvider {...routing}>\n\t\t\t\t<ContemberClient\n\t\t\t\t\tapiBaseUrl={props.apiBaseUrl}\n\t\t\t\t\tsessionToken={props.sessionToken}\n\t\t\t\t\tloginToken={props.loginToken}\n\t\t\t\t\tproject={props.project}\n\t\t\t\t\tstage={props.stage}\n\t\t\t\t>\n\t\t\t\t\t<EnvironmentExtensionProvider extension={projectEnvironmentExtension} state={props.project ?? null}>\n\t\t\t\t\t\t<DataViewPageNameKeyProvider>\n\t\t\t\t\t\t\t<IdentityProvider>\n\t\t\t\t\t\t\t\t<IdentityEnvironmentProvider>\n\t\t\t\t\t\t\t\t\t{props.children}\n\t\t\t\t\t\t\t\t</IdentityEnvironmentProvider>\n\t\t\t\t\t\t\t</IdentityProvider>\n\t\t\t\t\t\t</DataViewPageNameKeyProvider>\n\t\t\t\t\t</EnvironmentExtensionProvider>\n\t\t\t\t</ContemberClient>\n\t\t\t</RoutingProvider>\n\t\t</EnvironmentContext.Provider>\n\t)\n}\n"],"names":["Environment","jsx","EnvironmentContext","RoutingProvider","ContemberClient","EnvironmentExtensionProvider","projectEnvironmentExtension","DataViewPageNameKeyProvider","IdentityProvider","IdentityEnvironmentProvider"],"mappings":";;;;;;;;AAeA,MAAM,gBAAgB,CAAC,UAA+C;AACjE,MAAA,OAAO,MAAM,eAAe,UAAU;AACnC,UAAA,IAAI,MAAM,iFAAiF;AAAA,EAClG;AACD;AAKa,MAAA,wBAAwB,CAAC,UAAsC;AAC3E,gBAAc,KAAK;AAEnB,QAAM,UAAU,MAAM,eAAeA,aAAA,YAAY,OAAO;AAExD,QAAM,UAA+B;AAAA,IACpC,UAAU,MAAM;AAAA,IAChB,QAAQ,MAAM,UAAU,EAAE,OAAO,EAAE,MAAM,MAAM;AAAA,IAC/C,mBAAmB,QAAQ,iBAAiB;AAAA,EAAA;AAK5C,SAAAC,2BAAA,IAACC,gCAAmB,UAAnB,EAA4B,OAAO,SACnC,UAAAD,2BAAAA,IAACE,aAAAA,iBAAiB,EAAA,GAAG,SACpB,UAAAF,2BAAA;AAAA,IAACG,YAAA;AAAA,IAAA;AAAA,MACA,YAAY,MAAM;AAAA,MAClB,cAAc,MAAM;AAAA,MACpB,YAAY,MAAM;AAAA,MAClB,SAAS,MAAM;AAAA,MACf,OAAO,MAAM;AAAA,MAEb,yCAACC,aAAAA,8BAA6B,EAAA,WAAWC,cAAAA,6BAA6B,OAAO,MAAM,WAAW,MAC7F,UAAAL,2BAAAA,IAACM,4BAAAA,6BACA,EAAA,UAAAN,2BAAAA,IAACO,cAAAA,oBACA,UAACP,2BAAAA,IAAAQ,cAAAA,6BAAA,EACC,gBAAM,SACR,CAAA,GACD,GACD,EACD,CAAA;AAAA,IAAA;AAAA,EAAA,EAEF,CAAA,EACD,CAAA;AAEF;;"}
1
+ {"version":3,"file":"ApplicationEntrypoint.cjs","sources":["../../../../../packages/interface/src/bootstrap/ApplicationEntrypoint.tsx"],"sourcesContent":["import { Environment, EnvironmentContext, EnvironmentExtensionProvider } from '@contember/react-binding'\nimport { ContemberClient, ContemberClientProps } from '@contember/react-client'\nimport { ReactNode } from 'react'\nimport { RouteMap, RoutingContextValue, RoutingProvider } from '@contember/react-routing'\nimport { DataViewPageNameKeyProvider } from './DataViewPageNameKeyProvider'\nimport { IdentityEnvironmentProvider, IdentityProvider, projectEnvironmentExtension } from '@contember/react-identity'\n\nexport interface ApplicationEntrypointProps extends ContemberClientProps {\n\tbasePath: string\n\tsessionToken?: string\n\troutes?: RouteMap\n\tchildren: ReactNode\n\tenvironment?: Environment\n}\n\nconst validateProps = (props: Partial<ApplicationEntrypointProps>) => {\n\tif (typeof props.apiBaseUrl !== 'string') {\n\t\tthrow new Error(`The ENV variables haven't been set. Check your \\`.env.development.local\\` file.`) // TODO: better message\n\t}\n}\n\n/**\n * @group Entrypoints\n */\nexport const ApplicationEntrypoint = (props: ApplicationEntrypointProps) => {\n\tvalidateProps(props)\n\n\tconst rootEnv = props.environment ?? Environment.create()\n\n\tconst routing: RoutingContextValue = {\n\t\tbasePath: props.basePath,\n\t\troutes: props.routes ?? { index: { path: '/' } },\n\t\tdefaultDimensions: rootEnv.getAllDimensions(),\n\t}\n\n\n\treturn (\n\t\t<EnvironmentContext.Provider value={rootEnv}>\n\t\t\t<RoutingProvider {...routing}>\n\t\t\t\t<ContemberClient\n\t\t\t\t\tapiBaseUrl={props.apiBaseUrl}\n\t\t\t\t\tsessionToken={props.sessionToken}\n\t\t\t\t\tloginToken={props.loginToken}\n\t\t\t\t\tproject={props.project}\n\t\t\t\t\tstage={props.stage}\n\t\t\t\t>\n\t\t\t\t\t<EnvironmentExtensionProvider extension={projectEnvironmentExtension} state={props.project ?? null}>\n\t\t\t\t\t\t<DataViewPageNameKeyProvider>\n\t\t\t\t\t\t\t<IdentityProvider>\n\t\t\t\t\t\t\t\t<IdentityEnvironmentProvider>\n\t\t\t\t\t\t\t\t\t{props.children}\n\t\t\t\t\t\t\t\t</IdentityEnvironmentProvider>\n\t\t\t\t\t\t\t</IdentityProvider>\n\t\t\t\t\t\t</DataViewPageNameKeyProvider>\n\t\t\t\t\t</EnvironmentExtensionProvider>\n\t\t\t\t</ContemberClient>\n\t\t\t</RoutingProvider>\n\t\t</EnvironmentContext.Provider>\n\t)\n}\n"],"names":["Environment","jsx","EnvironmentContext","RoutingProvider","ContemberClient","EnvironmentExtensionProvider","projectEnvironmentExtension","DataViewPageNameKeyProvider","IdentityProvider","IdentityEnvironmentProvider"],"mappings":";;;;;;;;AAeA,MAAM,gBAAgB,CAAC,UAA+C;AACjE,MAAA,OAAO,MAAM,eAAe,UAAU;AACnC,UAAA,IAAI,MAAM,iFAAiF;AAAA,EAAA;AAEnG;AAKa,MAAA,wBAAwB,CAAC,UAAsC;AAC3E,gBAAc,KAAK;AAEnB,QAAM,UAAU,MAAM,eAAeA,aAAAA,YAAY,OAAO;AAExD,QAAM,UAA+B;AAAA,IACpC,UAAU,MAAM;AAAA,IAChB,QAAQ,MAAM,UAAU,EAAE,OAAO,EAAE,MAAM,MAAM;AAAA,IAC/C,mBAAmB,QAAQ,iBAAiB;AAAA,EAC7C;AAIC,SAAAC,2BAAA,IAACC,gCAAmB,UAAnB,EAA4B,OAAO,SACnC,UAAAD,2BAAAA,IAACE,aAAAA,iBAAiB,EAAA,GAAG,SACpB,UAAAF,2BAAA;AAAA,IAACG,YAAA;AAAA,IAAA;AAAA,MACA,YAAY,MAAM;AAAA,MAClB,cAAc,MAAM;AAAA,MACpB,YAAY,MAAM;AAAA,MAClB,SAAS,MAAM;AAAA,MACf,OAAO,MAAM;AAAA,MAEb,yCAACC,2CAA6B,EAAA,WAAWC,2CAA6B,OAAO,MAAM,WAAW,MAC7F,UAAAL,2BAAA,IAACM,4BACA,6BAAA,EAAA,UAAAN,2BAAA,IAACO,kCACA,UAACP,2BAAA,IAAAQ,cAAA,6BAAA,EACC,gBAAM,SACR,CAAA,EACD,CAAA,EACD,CAAA,EACD,CAAA;AAAA,IAAA;AAAA,KAEF,EACD,CAAA;AAEF;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"ApplicationEntrypoint.js","sources":["../../../../../packages/interface/src/bootstrap/ApplicationEntrypoint.tsx"],"sourcesContent":["import { Environment, EnvironmentContext, EnvironmentExtensionProvider } from '@contember/react-binding'\nimport { ContemberClient, ContemberClientProps } from '@contember/react-client'\nimport { ReactNode } from 'react'\nimport { RequestProvider, RouteMap, RoutingContext, RoutingContextValue, RoutingProvider, SelectedDimension } from '@contember/react-routing'\nimport { DataViewPageNameKeyProvider } from './DataViewPageNameKeyProvider'\nimport { IdentityEnvironmentProvider, IdentityProvider, projectEnvironmentExtension } from '@contember/react-identity'\n\nexport interface ApplicationEntrypointProps extends ContemberClientProps {\n\tbasePath: string\n\tsessionToken?: string\n\troutes?: RouteMap\n\tchildren: ReactNode\n\tenvironment?: Environment\n}\n\nconst validateProps = (props: Partial<ApplicationEntrypointProps>) => {\n\tif (typeof props.apiBaseUrl !== 'string') {\n\t\tthrow new Error(`The ENV variables haven't been set. Check your \\`.env.development.local\\` file.`) // TODO: better message\n\t}\n}\n\n/**\n * @group Entrypoints\n */\nexport const ApplicationEntrypoint = (props: ApplicationEntrypointProps) => {\n\tvalidateProps(props)\n\n\tconst rootEnv = props.environment ?? Environment.create()\n\n\tconst routing: RoutingContextValue = {\n\t\tbasePath: props.basePath,\n\t\troutes: props.routes ?? { index: { path: '/' } },\n\t\tdefaultDimensions: rootEnv.getAllDimensions(),\n\t}\n\n\n\treturn (\n\t\t<EnvironmentContext.Provider value={rootEnv}>\n\t\t\t<RoutingProvider {...routing}>\n\t\t\t\t<ContemberClient\n\t\t\t\t\tapiBaseUrl={props.apiBaseUrl}\n\t\t\t\t\tsessionToken={props.sessionToken}\n\t\t\t\t\tloginToken={props.loginToken}\n\t\t\t\t\tproject={props.project}\n\t\t\t\t\tstage={props.stage}\n\t\t\t\t>\n\t\t\t\t\t<EnvironmentExtensionProvider extension={projectEnvironmentExtension} state={props.project ?? null}>\n\t\t\t\t\t\t<DataViewPageNameKeyProvider>\n\t\t\t\t\t\t\t<IdentityProvider>\n\t\t\t\t\t\t\t\t<IdentityEnvironmentProvider>\n\t\t\t\t\t\t\t\t\t{props.children}\n\t\t\t\t\t\t\t\t</IdentityEnvironmentProvider>\n\t\t\t\t\t\t\t</IdentityProvider>\n\t\t\t\t\t\t</DataViewPageNameKeyProvider>\n\t\t\t\t\t</EnvironmentExtensionProvider>\n\t\t\t\t</ContemberClient>\n\t\t\t</RoutingProvider>\n\t\t</EnvironmentContext.Provider>\n\t)\n}\n"],"names":[],"mappings":";;;;;;AAeA,MAAM,gBAAgB,CAAC,UAA+C;AACjE,MAAA,OAAO,MAAM,eAAe,UAAU;AACnC,UAAA,IAAI,MAAM,iFAAiF;AAAA,EAClG;AACD;AAKa,MAAA,wBAAwB,CAAC,UAAsC;AAC3E,gBAAc,KAAK;AAEnB,QAAM,UAAU,MAAM,eAAe,YAAY,OAAO;AAExD,QAAM,UAA+B;AAAA,IACpC,UAAU,MAAM;AAAA,IAChB,QAAQ,MAAM,UAAU,EAAE,OAAO,EAAE,MAAM,MAAM;AAAA,IAC/C,mBAAmB,QAAQ,iBAAiB;AAAA,EAAA;AAK5C,SAAA,oBAAC,mBAAmB,UAAnB,EAA4B,OAAO,SACnC,UAAA,oBAAC,iBAAiB,EAAA,GAAG,SACpB,UAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACA,YAAY,MAAM;AAAA,MAClB,cAAc,MAAM;AAAA,MACpB,YAAY,MAAM;AAAA,MAClB,SAAS,MAAM;AAAA,MACf,OAAO,MAAM;AAAA,MAEb,8BAAC,8BAA6B,EAAA,WAAW,6BAA6B,OAAO,MAAM,WAAW,MAC7F,UAAA,oBAAC,6BACA,EAAA,UAAA,oBAAC,oBACA,UAAC,oBAAA,6BAAA,EACC,gBAAM,SACR,CAAA,GACD,GACD,EACD,CAAA;AAAA,IAAA;AAAA,EAAA,EAEF,CAAA,EACD,CAAA;AAEF;"}
1
+ {"version":3,"file":"ApplicationEntrypoint.js","sources":["../../../../../packages/interface/src/bootstrap/ApplicationEntrypoint.tsx"],"sourcesContent":["import { Environment, EnvironmentContext, EnvironmentExtensionProvider } from '@contember/react-binding'\nimport { ContemberClient, ContemberClientProps } from '@contember/react-client'\nimport { ReactNode } from 'react'\nimport { RouteMap, RoutingContextValue, RoutingProvider } from '@contember/react-routing'\nimport { DataViewPageNameKeyProvider } from './DataViewPageNameKeyProvider'\nimport { IdentityEnvironmentProvider, IdentityProvider, projectEnvironmentExtension } from '@contember/react-identity'\n\nexport interface ApplicationEntrypointProps extends ContemberClientProps {\n\tbasePath: string\n\tsessionToken?: string\n\troutes?: RouteMap\n\tchildren: ReactNode\n\tenvironment?: Environment\n}\n\nconst validateProps = (props: Partial<ApplicationEntrypointProps>) => {\n\tif (typeof props.apiBaseUrl !== 'string') {\n\t\tthrow new Error(`The ENV variables haven't been set. Check your \\`.env.development.local\\` file.`) // TODO: better message\n\t}\n}\n\n/**\n * @group Entrypoints\n */\nexport const ApplicationEntrypoint = (props: ApplicationEntrypointProps) => {\n\tvalidateProps(props)\n\n\tconst rootEnv = props.environment ?? Environment.create()\n\n\tconst routing: RoutingContextValue = {\n\t\tbasePath: props.basePath,\n\t\troutes: props.routes ?? { index: { path: '/' } },\n\t\tdefaultDimensions: rootEnv.getAllDimensions(),\n\t}\n\n\n\treturn (\n\t\t<EnvironmentContext.Provider value={rootEnv}>\n\t\t\t<RoutingProvider {...routing}>\n\t\t\t\t<ContemberClient\n\t\t\t\t\tapiBaseUrl={props.apiBaseUrl}\n\t\t\t\t\tsessionToken={props.sessionToken}\n\t\t\t\t\tloginToken={props.loginToken}\n\t\t\t\t\tproject={props.project}\n\t\t\t\t\tstage={props.stage}\n\t\t\t\t>\n\t\t\t\t\t<EnvironmentExtensionProvider extension={projectEnvironmentExtension} state={props.project ?? null}>\n\t\t\t\t\t\t<DataViewPageNameKeyProvider>\n\t\t\t\t\t\t\t<IdentityProvider>\n\t\t\t\t\t\t\t\t<IdentityEnvironmentProvider>\n\t\t\t\t\t\t\t\t\t{props.children}\n\t\t\t\t\t\t\t\t</IdentityEnvironmentProvider>\n\t\t\t\t\t\t\t</IdentityProvider>\n\t\t\t\t\t\t</DataViewPageNameKeyProvider>\n\t\t\t\t\t</EnvironmentExtensionProvider>\n\t\t\t\t</ContemberClient>\n\t\t\t</RoutingProvider>\n\t\t</EnvironmentContext.Provider>\n\t)\n}\n"],"names":[],"mappings":";;;;;;AAeA,MAAM,gBAAgB,CAAC,UAA+C;AACjE,MAAA,OAAO,MAAM,eAAe,UAAU;AACnC,UAAA,IAAI,MAAM,iFAAiF;AAAA,EAAA;AAEnG;AAKa,MAAA,wBAAwB,CAAC,UAAsC;AAC3E,gBAAc,KAAK;AAEnB,QAAM,UAAU,MAAM,eAAe,YAAY,OAAO;AAExD,QAAM,UAA+B;AAAA,IACpC,UAAU,MAAM;AAAA,IAChB,QAAQ,MAAM,UAAU,EAAE,OAAO,EAAE,MAAM,MAAM;AAAA,IAC/C,mBAAmB,QAAQ,iBAAiB;AAAA,EAC7C;AAIC,SAAA,oBAAC,mBAAmB,UAAnB,EAA4B,OAAO,SACnC,UAAA,oBAAC,iBAAiB,EAAA,GAAG,SACpB,UAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACA,YAAY,MAAM;AAAA,MAClB,cAAc,MAAM;AAAA,MACpB,YAAY,MAAM;AAAA,MAClB,SAAS,MAAM;AAAA,MACf,OAAO,MAAM;AAAA,MAEb,8BAAC,8BAA6B,EAAA,WAAW,6BAA6B,OAAO,MAAM,WAAW,MAC7F,UAAA,oBAAC,6BACA,EAAA,UAAA,oBAAC,oBACA,UAAC,oBAAA,6BAAA,EACC,gBAAM,SACR,CAAA,EACD,CAAA,EACD,CAAA,EACD,CAAA;AAAA,IAAA;AAAA,KAEF,EACD,CAAA;AAEF;"}
@@ -1 +1 @@
1
- {"version":3,"file":"DataViewPageNameKeyProvider.cjs","sources":["../../../../../packages/interface/src/bootstrap/DataViewPageNameKeyProvider.tsx"],"sourcesContent":["import { useCurrentRequest } from '@contember/react-routing'\nimport { DataViewKeyProvider } from '@contember/react-dataview'\nimport { ReactNode } from 'react'\n\nexport const DataViewPageNameKeyProvider = ({ children }: { children: ReactNode }) => {\n\tconst pageName = useCurrentRequest()?.pageName\n\n\treturn (\n\t\t<DataViewKeyProvider value={pageName ?? ''}>\n\t\t\t{children}\n\t\t</DataViewKeyProvider>\n\t)\n}\n"],"names":["useCurrentRequest","jsx","DataViewKeyProvider"],"mappings":";;;;;AAIO,MAAM,8BAA8B,CAAC,EAAE,eAAwC;AAC/E,QAAA,WAAWA,+BAAqB,GAAA;AAEtC,SACEC,2BAAAA,IAAAC,cAAAA,qBAAA,EAAoB,OAAO,YAAY,IACtC,SACF,CAAA;AAEF;;"}
1
+ {"version":3,"file":"DataViewPageNameKeyProvider.cjs","sources":["../../../../../packages/interface/src/bootstrap/DataViewPageNameKeyProvider.tsx"],"sourcesContent":["import { useCurrentRequest } from '@contember/react-routing'\nimport { DataViewKeyProvider } from '@contember/react-dataview'\nimport { ReactNode } from 'react'\n\nexport const DataViewPageNameKeyProvider = ({ children }: { children: ReactNode }) => {\n\tconst pageName = useCurrentRequest()?.pageName\n\n\treturn (\n\t\t<DataViewKeyProvider value={pageName ?? ''}>\n\t\t\t{children}\n\t\t</DataViewKeyProvider>\n\t)\n}\n"],"names":["useCurrentRequest","jsx","DataViewKeyProvider"],"mappings":";;;;;AAIO,MAAM,8BAA8B,CAAC,EAAE,eAAwC;AAC/E,QAAA,WAAWA,kCAAqB;AAEtC,SACEC,2BAAAA,IAAAC,cAAAA,qBAAA,EAAoB,OAAO,YAAY,IACtC,UACF;AAEF;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"DataViewPageNameKeyProvider.js","sources":["../../../../../packages/interface/src/bootstrap/DataViewPageNameKeyProvider.tsx"],"sourcesContent":["import { useCurrentRequest } from '@contember/react-routing'\nimport { DataViewKeyProvider } from '@contember/react-dataview'\nimport { ReactNode } from 'react'\n\nexport const DataViewPageNameKeyProvider = ({ children }: { children: ReactNode }) => {\n\tconst pageName = useCurrentRequest()?.pageName\n\n\treturn (\n\t\t<DataViewKeyProvider value={pageName ?? ''}>\n\t\t\t{children}\n\t\t</DataViewKeyProvider>\n\t)\n}\n"],"names":[],"mappings":";;;AAIO,MAAM,8BAA8B,CAAC,EAAE,eAAwC;AAC/E,QAAA,WAAW,kBAAqB,GAAA;AAEtC,SACE,oBAAA,qBAAA,EAAoB,OAAO,YAAY,IACtC,SACF,CAAA;AAEF;"}
1
+ {"version":3,"file":"DataViewPageNameKeyProvider.js","sources":["../../../../../packages/interface/src/bootstrap/DataViewPageNameKeyProvider.tsx"],"sourcesContent":["import { useCurrentRequest } from '@contember/react-routing'\nimport { DataViewKeyProvider } from '@contember/react-dataview'\nimport { ReactNode } from 'react'\n\nexport const DataViewPageNameKeyProvider = ({ children }: { children: ReactNode }) => {\n\tconst pageName = useCurrentRequest()?.pageName\n\n\treturn (\n\t\t<DataViewKeyProvider value={pageName ?? ''}>\n\t\t\t{children}\n\t\t</DataViewKeyProvider>\n\t)\n}\n"],"names":[],"mappings":";;;AAIO,MAAM,8BAA8B,CAAC,EAAE,eAAwC;AAC/E,QAAA,WAAW,qBAAqB;AAEtC,SACE,oBAAA,qBAAA,EAAoB,OAAO,YAAY,IACtC,UACF;AAEF;"}
@@ -1 +1 @@
1
- {"version":3,"file":"ClearFieldTrigger.cjs","sources":["../../../../../../packages/interface/src/components/binding/ClearFieldTrigger.tsx"],"sourcesContent":["import { ReactNode, useCallback } from 'react'\nimport { Slot } from '@radix-ui/react-slot'\nimport { Component, Field, SugaredRelativeSingleField, useField } from '@contember/react-binding'\n\nexport interface ClearFieldTriggerProps {\n\tfield: SugaredRelativeSingleField['field']\n\tchildren: ReactNode\n}\n\nexport const ClearFieldTrigger = Component<ClearFieldTriggerProps>(({ field, ...props }) => {\n\tconst fieldAccessor = useField(field)\n\tconst clearField = useCallback(() => {\n\t\tfieldAccessor.updateValue(null)\n\t}, [fieldAccessor])\n\treturn <Slot onClick={clearField} {...props} />\n}, ({ field }) => {\n\treturn <Field field={field} />\n})\n"],"names":["Component","useField","useCallback","jsx","Slot","Field"],"mappings":";;;;;;AASO,MAAM,oBAAoBA,aAAAA,UAAkC,CAAC,EAAE,OAAO,GAAG,YAAY;AACrF,QAAA,gBAAgBC,sBAAS,KAAK;AAC9B,QAAA,aAAaC,MAAAA,YAAY,MAAM;AACpC,kBAAc,YAAY,IAAI;AAAA,EAAA,GAC5B,CAAC,aAAa,CAAC;AAClB,SAAQC,2BAAAA,IAAAC,UAAAA,MAAA,EAAK,SAAS,YAAa,GAAG,MAAO,CAAA;AAC9C,GAAG,CAAC,EAAE,YAAY;AACV,SAAAD,+BAACE,aAAAA,SAAM,MAAc,CAAA;AAC7B,CAAC;;"}
1
+ {"version":3,"file":"ClearFieldTrigger.cjs","sources":["../../../../../../packages/interface/src/components/binding/ClearFieldTrigger.tsx"],"sourcesContent":["import { ReactNode, useCallback } from 'react'\nimport { Slot } from '@radix-ui/react-slot'\nimport { Component, Field, SugaredRelativeSingleField, useField } from '@contember/react-binding'\n\nexport interface ClearFieldTriggerProps {\n\tfield: SugaredRelativeSingleField['field']\n\tchildren: ReactNode\n}\n\nexport const ClearFieldTrigger = Component<ClearFieldTriggerProps>(({ field, ...props }) => {\n\tconst fieldAccessor = useField(field)\n\tconst clearField = useCallback(() => {\n\t\tfieldAccessor.updateValue(null)\n\t}, [fieldAccessor])\n\treturn <Slot onClick={clearField} {...props} />\n}, ({ field }) => {\n\treturn <Field field={field} />\n})\n"],"names":["Component","useField","useCallback","jsx","Slot","Field"],"mappings":";;;;;;AASO,MAAM,oBAAoBA,aAAAA,UAAkC,CAAC,EAAE,OAAO,GAAG,YAAY;AACrF,QAAA,gBAAgBC,sBAAS,KAAK;AAC9B,QAAA,aAAaC,MAAAA,YAAY,MAAM;AACpC,kBAAc,YAAY,IAAI;AAAA,EAAA,GAC5B,CAAC,aAAa,CAAC;AAClB,SAAQC,2BAAAA,IAAAC,UAAAA,MAAA,EAAK,SAAS,YAAa,GAAG,OAAO;AAC9C,GAAG,CAAC,EAAE,YAAY;AACV,SAAAD,+BAACE,aAAAA,SAAM,OAAc;AAC7B,CAAC;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"ClearFieldTrigger.js","sources":["../../../../../../packages/interface/src/components/binding/ClearFieldTrigger.tsx"],"sourcesContent":["import { ReactNode, useCallback } from 'react'\nimport { Slot } from '@radix-ui/react-slot'\nimport { Component, Field, SugaredRelativeSingleField, useField } from '@contember/react-binding'\n\nexport interface ClearFieldTriggerProps {\n\tfield: SugaredRelativeSingleField['field']\n\tchildren: ReactNode\n}\n\nexport const ClearFieldTrigger = Component<ClearFieldTriggerProps>(({ field, ...props }) => {\n\tconst fieldAccessor = useField(field)\n\tconst clearField = useCallback(() => {\n\t\tfieldAccessor.updateValue(null)\n\t}, [fieldAccessor])\n\treturn <Slot onClick={clearField} {...props} />\n}, ({ field }) => {\n\treturn <Field field={field} />\n})\n"],"names":[],"mappings":";;;;AASO,MAAM,oBAAoB,UAAkC,CAAC,EAAE,OAAO,GAAG,YAAY;AACrF,QAAA,gBAAgB,SAAS,KAAK;AAC9B,QAAA,aAAa,YAAY,MAAM;AACpC,kBAAc,YAAY,IAAI;AAAA,EAAA,GAC5B,CAAC,aAAa,CAAC;AAClB,SAAQ,oBAAA,MAAA,EAAK,SAAS,YAAa,GAAG,MAAO,CAAA;AAC9C,GAAG,CAAC,EAAE,YAAY;AACV,SAAA,oBAAC,SAAM,MAAc,CAAA;AAC7B,CAAC;"}
1
+ {"version":3,"file":"ClearFieldTrigger.js","sources":["../../../../../../packages/interface/src/components/binding/ClearFieldTrigger.tsx"],"sourcesContent":["import { ReactNode, useCallback } from 'react'\nimport { Slot } from '@radix-ui/react-slot'\nimport { Component, Field, SugaredRelativeSingleField, useField } from '@contember/react-binding'\n\nexport interface ClearFieldTriggerProps {\n\tfield: SugaredRelativeSingleField['field']\n\tchildren: ReactNode\n}\n\nexport const ClearFieldTrigger = Component<ClearFieldTriggerProps>(({ field, ...props }) => {\n\tconst fieldAccessor = useField(field)\n\tconst clearField = useCallback(() => {\n\t\tfieldAccessor.updateValue(null)\n\t}, [fieldAccessor])\n\treturn <Slot onClick={clearField} {...props} />\n}, ({ field }) => {\n\treturn <Field field={field} />\n})\n"],"names":[],"mappings":";;;;AASO,MAAM,oBAAoB,UAAkC,CAAC,EAAE,OAAO,GAAG,YAAY;AACrF,QAAA,gBAAgB,SAAS,KAAK;AAC9B,QAAA,aAAa,YAAY,MAAM;AACpC,kBAAc,YAAY,IAAI;AAAA,EAAA,GAC5B,CAAC,aAAa,CAAC;AAClB,SAAQ,oBAAA,MAAA,EAAK,SAAS,YAAa,GAAG,OAAO;AAC9C,GAAG,CAAC,EAAE,YAAY;AACV,SAAA,oBAAC,SAAM,OAAc;AAC7B,CAAC;"}
@@ -17,7 +17,7 @@ const DisconnectEntityTrigger = ({ immediatePersist, onPersistError, onPersistSu
17
17
  if (!parent) {
18
18
  throw new reactBinding.BindingError("Cannot disconnect root entity");
19
19
  }
20
- if (parent instanceof reactBinding.EntityListAccessor) {
20
+ if (reactBinding.isEntityListAccessor(parent)) {
21
21
  parent.disconnectEntity(entity);
22
22
  } else {
23
23
  const subTreeNode = entity.environment.getSubTreeNode();
@@ -1 +1 @@
1
- {"version":3,"file":"DisconnectEntityTrigger.cjs","sources":["../../../../../../packages/interface/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
+ {"version":3,"file":"DisconnectEntityTrigger.cjs","sources":["../../../../../../packages/interface/src/components/binding/DisconnectEntityTrigger.tsx"],"sourcesContent":["import { ComponentType, ReactNode, useCallback } from 'react'\nimport { Slot } from '@radix-ui/react-slot'\nimport { BindingError, EntityListAccessor, ErrorPersistResult,\n\tisEntityListAccessor, 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 (isEntityListAccessor(parent)) {\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","isEntityListAccessor","jsx"],"mappings":";;;;;;AAMA,MAAM,aAAaA,UAAA;AAUN,MAAA,0BAA0B,CAAC,EAAE,kBAAkB,gBAAgB,kBAAkB,OAAO,GAAG,YAA0C;AACjJ,QAAM,SAASC,aAAAA,UAAU;AACzB,QAAM,iBAAiBC,aAAAA,WAAW;AAClC,QAAM,aAAaC,aAAAA,iBAAiB;AAC9B,QAAA,UAAUC,MAAAA,YAAY,MAAM;AACjC,QAAI,OAAO;AACH,aAAA,wBAAwB,EAAE,OAAO;AAAA,IAAA,OAClC;AACA,YAAA,SAAS,OAAO,UAAU;AAChC,UAAI,CAAC,QAAQ;AACN,cAAA,IAAIC,0BAAa,+BAA+B;AAAA,MAAA;AAEnD,UAAAC,aAAAA,qBAAqB,MAAM,GAAG;AACjC,eAAO,iBAAiB,MAAM;AAAA,MAAA,OACxB;AACA,cAAA,cAAc,OAAO,YAAY,eAAe;AAClD,YAAA,YAAY,SAAS,UAAU;AAC5B,gBAAA,IAAID,0BAAa,+BAA+B;AAAA,QAAA;AAEvD,eAAO,wBAAwB,EAAE,OAAO,YAAY,MAAM,MAAM;AAAA,MAAA;AAAA,IACjE;AAGD,QAAI,kBAAkB;AACrB,qBACE,EAAA,KAAK,gBAAgB,EACrB,MAAM,cAAc;AAAA,IAAA;AAAA,EACvB,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,EACL;AAEF;;"}
@@ -1,7 +1,7 @@
1
1
  import { jsx } from "react/jsx-runtime";
2
2
  import { useCallback } from "react";
3
3
  import { Slot } from "@radix-ui/react-slot";
4
- import { useEntity, usePersist, useMutationState, BindingError, EntityListAccessor } from "@contember/react-binding";
4
+ import { useEntity, usePersist, useMutationState, BindingError, isEntityListAccessor } from "@contember/react-binding";
5
5
  const SlotButton = Slot;
6
6
  const DisconnectEntityTrigger = ({ immediatePersist, onPersistError, onPersistSuccess, field, ...props }) => {
7
7
  const entity = useEntity();
@@ -15,7 +15,7 @@ const DisconnectEntityTrigger = ({ immediatePersist, onPersistError, onPersistSu
15
15
  if (!parent) {
16
16
  throw new BindingError("Cannot disconnect root entity");
17
17
  }
18
- if (parent instanceof EntityListAccessor) {
18
+ if (isEntityListAccessor(parent)) {
19
19
  parent.disconnectEntity(entity);
20
20
  } else {
21
21
  const subTreeNode = entity.environment.getSubTreeNode();