@webiny/app-record-locking 6.0.0-alpha.5 → 6.0.0-rc.0

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 (124) hide show
  1. package/README.md +8 -9
  2. package/components/HeadlessCmsActionsAcoCell.js +4 -4
  3. package/components/HeadlessCmsActionsAcoCell.js.map +1 -1
  4. package/components/HeadlessCmsContentEntry/ContentEntryGuard.d.ts +1 -1
  5. package/components/HeadlessCmsContentEntry/ContentEntryGuard.js +6 -4
  6. package/components/HeadlessCmsContentEntry/ContentEntryGuard.js.map +1 -1
  7. package/components/HeadlessCmsContentEntry/ContentEntryLocker.d.ts +2 -2
  8. package/components/HeadlessCmsContentEntry/ContentEntryLocker.js +1 -1
  9. package/components/HeadlessCmsContentEntry/ContentEntryLocker.js.map +1 -1
  10. package/components/HeadlessCmsContentEntry/HeadlessCmsContentEntry.js +4 -5
  11. package/components/HeadlessCmsContentEntry/HeadlessCmsContentEntry.js.map +1 -1
  12. package/components/HeadlessCmsContentEntry/index.d.ts +1 -1
  13. package/components/HeadlessCmsContentEntry/index.js +1 -1
  14. package/components/HeadlessCmsContentEntry/index.js.map +1 -1
  15. package/components/LockedRecord/LockedRecord.d.ts +1 -1
  16. package/components/LockedRecord/LockedRecord.js +9 -9
  17. package/components/LockedRecord/LockedRecord.js.map +1 -1
  18. package/components/LockedRecord/LockedRecordForceUnlock.d.ts +1 -1
  19. package/components/LockedRecord/LockedRecordForceUnlock.js +5 -9
  20. package/components/LockedRecord/LockedRecordForceUnlock.js.map +1 -1
  21. package/components/LockedRecord/index.d.ts +1 -1
  22. package/components/LockedRecord/index.js +1 -1
  23. package/components/LockedRecord/index.js.map +1 -1
  24. package/components/RecordLockingProvider.d.ts +1 -1
  25. package/components/RecordLockingProvider.js +1 -1
  26. package/components/RecordLockingProvider.js.map +1 -1
  27. package/components/SecurityPermissions.d.ts +2 -0
  28. package/components/SecurityPermissions.js +23 -0
  29. package/components/SecurityPermissions.js.map +1 -0
  30. package/components/decorators/UseContentEntriesListHookDecorator.d.ts +1 -2
  31. package/components/decorators/UseContentEntriesListHookDecorator.js +4 -2
  32. package/components/decorators/UseContentEntriesListHookDecorator.js.map +1 -1
  33. package/components/decorators/UseRecordsDecorator.d.ts +1 -2
  34. package/components/decorators/UseSaveEntryDecorator.d.ts +1 -2
  35. package/components/decorators/UseSaveEntryDecorator.js +1 -1
  36. package/components/decorators/UseSaveEntryDecorator.js.map +1 -1
  37. package/domain/RecordLocking.d.ts +9 -9
  38. package/domain/RecordLocking.js +12 -11
  39. package/domain/RecordLocking.js.map +1 -1
  40. package/domain/RecordLockingClient.d.ts +1 -1
  41. package/domain/RecordLockingClient.js.map +1 -1
  42. package/domain/RecordLockingGetLockRecord.d.ts +2 -2
  43. package/domain/RecordLockingGetLockRecord.js +1 -1
  44. package/domain/RecordLockingGetLockRecord.js.map +1 -1
  45. package/domain/RecordLockingGetLockedEntryLockRecord.d.ts +2 -2
  46. package/domain/RecordLockingGetLockedEntryLockRecord.js +1 -1
  47. package/domain/RecordLockingGetLockedEntryLockRecord.js.map +1 -1
  48. package/domain/RecordLockingIsEntryLocked.d.ts +2 -2
  49. package/domain/RecordLockingIsEntryLocked.js +1 -1
  50. package/domain/RecordLockingIsEntryLocked.js.map +1 -1
  51. package/domain/RecordLockingListLockRecords.d.ts +2 -2
  52. package/domain/RecordLockingListLockRecords.js +2 -2
  53. package/domain/RecordLockingListLockRecords.js.map +1 -1
  54. package/domain/RecordLockingLockEntry.d.ts +2 -2
  55. package/domain/RecordLockingLockEntry.js +0 -2
  56. package/domain/RecordLockingLockEntry.js.map +1 -1
  57. package/domain/RecordLockingUnlockEntry.d.ts +2 -2
  58. package/domain/RecordLockingUnlockEntry.js +1 -1
  59. package/domain/RecordLockingUnlockEntry.js.map +1 -1
  60. package/domain/RecordLockingUpdateEntryLock.d.ts +2 -2
  61. package/domain/RecordLockingUpdateEntryLock.js +1 -1
  62. package/domain/RecordLockingUpdateEntryLock.js.map +1 -1
  63. package/domain/abstractions/IRecordLocking.d.ts +2 -2
  64. package/domain/abstractions/IRecordLocking.js.map +1 -1
  65. package/domain/abstractions/IRecordLockingGetLockRecord.d.ts +1 -1
  66. package/domain/abstractions/IRecordLockingGetLockRecord.js.map +1 -1
  67. package/domain/abstractions/IRecordLockingGetLockedEntryLockRecord.d.ts +1 -1
  68. package/domain/abstractions/IRecordLockingGetLockedEntryLockRecord.js.map +1 -1
  69. package/domain/abstractions/IRecordLockingListLockRecords.d.ts +1 -1
  70. package/domain/abstractions/IRecordLockingListLockRecords.js.map +1 -1
  71. package/domain/abstractions/IRecordLockingLockEntry.d.ts +1 -1
  72. package/domain/abstractions/IRecordLockingLockEntry.js.map +1 -1
  73. package/domain/abstractions/IRecordLockingUnlockEntry.d.ts +1 -1
  74. package/domain/abstractions/IRecordLockingUnlockEntry.js.map +1 -1
  75. package/domain/abstractions/IRecordLockingUpdateEntryLock.d.ts +1 -1
  76. package/domain/abstractions/IRecordLockingUpdateEntryLock.js.map +1 -1
  77. package/domain/graphql/getLockRecord.d.ts +2 -2
  78. package/domain/graphql/getLockRecord.js +1 -1
  79. package/domain/graphql/getLockRecord.js.map +1 -1
  80. package/domain/graphql/getLockedEntryLockRecord.d.ts +2 -2
  81. package/domain/graphql/getLockedEntryLockRecord.js +1 -1
  82. package/domain/graphql/getLockedEntryLockRecord.js.map +1 -1
  83. package/domain/graphql/isEntryLocked.d.ts +2 -2
  84. package/domain/graphql/isEntryLocked.js +1 -1
  85. package/domain/graphql/isEntryLocked.js.map +1 -1
  86. package/domain/graphql/listLockRecords.d.ts +2 -2
  87. package/domain/graphql/listLockRecords.js +1 -1
  88. package/domain/graphql/listLockRecords.js.map +1 -1
  89. package/domain/graphql/lockEntry.d.ts +2 -2
  90. package/domain/graphql/lockEntry.js +1 -1
  91. package/domain/graphql/lockEntry.js.map +1 -1
  92. package/domain/graphql/unlockEntry.d.ts +2 -2
  93. package/domain/graphql/unlockEntry.js +1 -1
  94. package/domain/graphql/unlockEntry.js.map +1 -1
  95. package/domain/graphql/updateEntryLock.d.ts +2 -2
  96. package/domain/graphql/updateEntryLock.js +1 -1
  97. package/domain/graphql/updateEntryLock.js.map +1 -1
  98. package/domain/utils/createRecordLockingClient.d.ts +1 -1
  99. package/domain/utils/createRecordLockingClient.js +1 -1
  100. package/domain/utils/createRecordLockingClient.js.map +1 -1
  101. package/domain/utils/createRecordLockingError.d.ts +1 -1
  102. package/domain/utils/createRecordLockingError.js.map +1 -1
  103. package/hooks/index.d.ts +2 -2
  104. package/hooks/index.js +2 -2
  105. package/hooks/index.js.map +1 -1
  106. package/hooks/usePermission.js +7 -8
  107. package/hooks/usePermission.js.map +1 -1
  108. package/hooks/useRecordLocking.d.ts +1 -1
  109. package/hooks/useRecordLocking.js +1 -1
  110. package/hooks/useRecordLocking.js.map +1 -1
  111. package/index.d.ts +2 -2
  112. package/index.js +8 -10
  113. package/index.js.map +1 -1
  114. package/package.json +16 -24
  115. package/types.d.ts +24 -7
  116. package/types.js.map +1 -1
  117. package/utils/createCacheKey.d.ts +1 -1
  118. package/utils/createCacheKey.js.map +1 -1
  119. package/components/permissionRenderer/RecordLockingPermissions.d.ts +0 -7
  120. package/components/permissionRenderer/RecordLockingPermissions.js +0 -71
  121. package/components/permissionRenderer/RecordLockingPermissions.js.map +0 -1
  122. package/components/permissionRenderer/index.d.ts +0 -2
  123. package/components/permissionRenderer/index.js +0 -21
  124. package/components/permissionRenderer/index.js.map +0 -1
package/README.md CHANGED
@@ -1,12 +1,11 @@
1
1
  # @webiny/app-record-locking
2
- [![](https://img.shields.io/npm/dw/@webiny/app-record-locking.svg)](https://www.npmjs.com/package/@webiny/app-record-locking)
3
- [![](https://img.shields.io/npm/v/@webiny/app-record-locking.svg)](https://www.npmjs.com/package/@webiny/app-record-locking)
4
- [![code style: prettier](https://img.shields.io/badge/code_style-prettier-ff69b4.svg?style=flat-square)](https://github.com/prettier/prettier)
5
- [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](http://makeapullrequest.com)
6
2
 
7
- Exposes a simple `SocketsProvider` React provider component and enables you to quickly send socket messages via the `useSockets` React hook.
3
+ > [!NOTE]
4
+ > This package is part of the [Webiny](https://www.webiny.com) monorepo.
5
+ > It’s **included in every Webiny project by default** and is not meant to be used as a standalone package.
8
6
 
9
- ## Install
10
- ```
11
- yarn add @webiny/app-record-locking
12
- ```
7
+ 📘 **Documentation:** [https://www.webiny.com/docs](https://www.webiny.com/docs)
8
+
9
+ ---
10
+
11
+ _This README file is automatically generated during the publish process._
@@ -1,10 +1,10 @@
1
1
  import React from "react";
2
2
  import { ContentEntryListConfig, useModel } from "@webiny/app-headless-cms";
3
3
  import { ReactComponent as LockedIcon } from "@webiny/icons/lock.svg";
4
- import { useRecordLocking } from "../hooks";
5
- import { UseContentEntriesListHookDecorator } from "./decorators/UseContentEntriesListHookDecorator";
6
- import { UseSaveEntryDecorator } from "./decorators/UseSaveEntryDecorator";
7
- import { UseRecordsDecorator } from "./decorators/UseRecordsDecorator";
4
+ import { useRecordLocking } from "../hooks/index.js";
5
+ import { UseContentEntriesListHookDecorator } from "./decorators/UseContentEntriesListHookDecorator.js";
6
+ import { UseSaveEntryDecorator } from "./decorators/UseSaveEntryDecorator.js";
7
+ import { UseRecordsDecorator } from "./decorators/UseRecordsDecorator.js";
8
8
  import { Icon, Tooltip } from "@webiny/admin-ui";
9
9
  const {
10
10
  Browser
@@ -1 +1 @@
1
- {"version":3,"names":["React","ContentEntryListConfig","useModel","ReactComponent","LockedIcon","useRecordLocking","UseContentEntriesListHookDecorator","UseSaveEntryDecorator","UseRecordsDecorator","Icon","Tooltip","Browser","ActionsCell","children","model","getLockRecordEntry","isRecordLocked","useTableRow","isFolderRow","Table","Column","row","createElement","Fragment","entry","id","$locked","side","content","name","lockedBy","displayName","trigger","icon","label","color","RecordLockingCellActions","createDecorator","Original","props","cell","Object","assign","HeadlessCmsActionsAcoCell"],"sources":["HeadlessCmsActionsAcoCell.tsx"],"sourcesContent":["import React from \"react\";\nimport { ContentEntryListConfig, useModel } from \"@webiny/app-headless-cms\";\nimport { ReactComponent as LockedIcon } from \"@webiny/icons/lock.svg\";\nimport { useRecordLocking } from \"~/hooks\";\nimport { UseContentEntriesListHookDecorator } from \"./decorators/UseContentEntriesListHookDecorator\";\nimport { UseSaveEntryDecorator } from \"~/components/decorators/UseSaveEntryDecorator\";\nimport { UseRecordsDecorator } from \"./decorators/UseRecordsDecorator\";\nimport { Icon, Tooltip } from \"@webiny/admin-ui\";\n\nconst { Browser } = ContentEntryListConfig;\n\ninterface ActionsCellProps {\n children: React.ReactNode;\n}\n\nconst ActionsCell = ({ children }: ActionsCellProps) => {\n const { model } = useModel();\n const { getLockRecordEntry, isRecordLocked } = useRecordLocking();\n\n const { useTableRow, isFolderRow } = Browser.Table.Column;\n const { row } = useTableRow();\n\n if (isFolderRow(row)) {\n return <>{children}</>;\n }\n\n const entry = getLockRecordEntry(row.id);\n\n if (!isRecordLocked(entry) || !entry?.$locked) {\n return <>{children}</>;\n }\n return (\n <Tooltip\n side={\"left\"}\n content={`This ${model.name} is currently locked by ${entry.$locked.lockedBy.displayName}.`}\n trigger={<Icon icon={<LockedIcon />} label={\"Locked entry\"} color={\"neutral-light\"} />}\n />\n );\n};\n\nconst RecordLockingCellActions = Browser.Table.Column.createDecorator(Original => {\n return function RecordLockingCellActions(props) {\n if (props.name === \"actions\" && props.cell) {\n return <Original {...props} cell={<ActionsCell>{props.cell}</ActionsCell>} />;\n }\n\n return <Original {...props} />;\n };\n});\n\nexport const HeadlessCmsActionsAcoCell = () => {\n return (\n <>\n <UseContentEntriesListHookDecorator />\n <UseSaveEntryDecorator />\n <RecordLockingCellActions />\n <UseRecordsDecorator />\n </>\n );\n};\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,sBAAsB,EAAEC,QAAQ,QAAQ,0BAA0B;AAC3E,SAASC,cAAc,IAAIC,UAAU,QAAQ,wBAAwB;AACrE,SAASC,gBAAgB;AACzB,SAASC,kCAAkC;AAC3C,SAASC,qBAAqB;AAC9B,SAASC,mBAAmB;AAC5B,SAASC,IAAI,EAAEC,OAAO,QAAQ,kBAAkB;AAEhD,MAAM;EAAEC;AAAQ,CAAC,GAAGV,sBAAsB;AAM1C,MAAMW,WAAW,GAAGA,CAAC;EAAEC;AAA2B,CAAC,KAAK;EACpD,MAAM;IAAEC;EAAM,CAAC,GAAGZ,QAAQ,CAAC,CAAC;EAC5B,MAAM;IAAEa,kBAAkB;IAAEC;EAAe,CAAC,GAAGX,gBAAgB,CAAC,CAAC;EAEjE,MAAM;IAAEY,WAAW;IAAEC;EAAY,CAAC,GAAGP,OAAO,CAACQ,KAAK,CAACC,MAAM;EACzD,MAAM;IAAEC;EAAI,CAAC,GAAGJ,WAAW,CAAC,CAAC;EAE7B,IAAIC,WAAW,CAACG,GAAG,CAAC,EAAE;IAClB,oBAAOrB,KAAA,CAAAsB,aAAA,CAAAtB,KAAA,CAAAuB,QAAA,QAAGV,QAAW,CAAC;EAC1B;EAEA,MAAMW,KAAK,GAAGT,kBAAkB,CAACM,GAAG,CAACI,EAAE,CAAC;EAExC,IAAI,CAACT,cAAc,CAACQ,KAAK,CAAC,IAAI,CAACA,KAAK,EAAEE,OAAO,EAAE;IAC3C,oBAAO1B,KAAA,CAAAsB,aAAA,CAAAtB,KAAA,CAAAuB,QAAA,QAAGV,QAAW,CAAC;EAC1B;EACA,oBACIb,KAAA,CAAAsB,aAAA,CAACZ,OAAO;IACJiB,IAAI,EAAE,MAAO;IACbC,OAAO,EAAE,QAAQd,KAAK,CAACe,IAAI,2BAA2BL,KAAK,CAACE,OAAO,CAACI,QAAQ,CAACC,WAAW,GAAI;IAC5FC,OAAO,eAAEhC,KAAA,CAAAsB,aAAA,CAACb,IAAI;MAACwB,IAAI,eAAEjC,KAAA,CAAAsB,aAAA,CAAClB,UAAU,MAAE,CAAE;MAAC8B,KAAK,EAAE,cAAe;MAACC,KAAK,EAAE;IAAgB,CAAE;EAAE,CAC1F,CAAC;AAEV,CAAC;AAED,MAAMC,wBAAwB,GAAGzB,OAAO,CAACQ,KAAK,CAACC,MAAM,CAACiB,eAAe,CAACC,QAAQ,IAAI;EAC9E,OAAO,SAASF,wBAAwBA,CAACG,KAAK,EAAE;IAC5C,IAAIA,KAAK,CAACV,IAAI,KAAK,SAAS,IAAIU,KAAK,CAACC,IAAI,EAAE;MACxC,oBAAOxC,KAAA,CAAAsB,aAAA,CAACgB,QAAQ,EAAAG,MAAA,CAAAC,MAAA,KAAKH,KAAK;QAAEC,IAAI,eAAExC,KAAA,CAAAsB,aAAA,CAACV,WAAW,QAAE2B,KAAK,CAACC,IAAkB;MAAE,EAAE,CAAC;IACjF;IAEA,oBAAOxC,KAAA,CAAAsB,aAAA,CAACgB,QAAQ,EAAKC,KAAQ,CAAC;EAClC,CAAC;AACL,CAAC,CAAC;AAEF,OAAO,MAAMI,yBAAyB,GAAGA,CAAA,KAAM;EAC3C,oBACI3C,KAAA,CAAAsB,aAAA,CAAAtB,KAAA,CAAAuB,QAAA,qBACIvB,KAAA,CAAAsB,aAAA,CAAChB,kCAAkC,MAAE,CAAC,eACtCN,KAAA,CAAAsB,aAAA,CAACf,qBAAqB,MAAE,CAAC,eACzBP,KAAA,CAAAsB,aAAA,CAACc,wBAAwB,MAAE,CAAC,eAC5BpC,KAAA,CAAAsB,aAAA,CAACd,mBAAmB,MAAE,CACxB,CAAC;AAEX,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["React","ContentEntryListConfig","useModel","ReactComponent","LockedIcon","useRecordLocking","UseContentEntriesListHookDecorator","UseSaveEntryDecorator","UseRecordsDecorator","Icon","Tooltip","Browser","ActionsCell","children","model","getLockRecordEntry","isRecordLocked","useTableRow","isFolderRow","Table","Column","row","createElement","Fragment","entry","id","$locked","side","content","name","lockedBy","displayName","trigger","icon","label","color","RecordLockingCellActions","createDecorator","Original","props","cell","Object","assign","HeadlessCmsActionsAcoCell"],"sources":["HeadlessCmsActionsAcoCell.tsx"],"sourcesContent":["import React from \"react\";\nimport { ContentEntryListConfig, useModel } from \"@webiny/app-headless-cms\";\nimport { ReactComponent as LockedIcon } from \"@webiny/icons/lock.svg\";\nimport { useRecordLocking } from \"~/hooks/index.js\";\nimport { UseContentEntriesListHookDecorator } from \"./decorators/UseContentEntriesListHookDecorator.js\";\nimport { UseSaveEntryDecorator } from \"~/components/decorators/UseSaveEntryDecorator.js\";\nimport { UseRecordsDecorator } from \"./decorators/UseRecordsDecorator.js\";\nimport { Icon, Tooltip } from \"@webiny/admin-ui\";\n\nconst { Browser } = ContentEntryListConfig;\n\ninterface ActionsCellProps {\n children: React.ReactNode;\n}\n\nconst ActionsCell = ({ children }: ActionsCellProps) => {\n const { model } = useModel();\n const { getLockRecordEntry, isRecordLocked } = useRecordLocking();\n\n const { useTableRow, isFolderRow } = Browser.Table.Column;\n const { row } = useTableRow();\n\n if (isFolderRow(row)) {\n return <>{children}</>;\n }\n\n const entry = getLockRecordEntry(row.id);\n\n if (!isRecordLocked(entry) || !entry?.$locked) {\n return <>{children}</>;\n }\n return (\n <Tooltip\n side={\"left\"}\n content={`This ${model.name} is currently locked by ${entry.$locked.lockedBy.displayName}.`}\n trigger={<Icon icon={<LockedIcon />} label={\"Locked entry\"} color={\"neutral-light\"} />}\n />\n );\n};\n\nconst RecordLockingCellActions = Browser.Table.Column.createDecorator(Original => {\n return function RecordLockingCellActions(props) {\n if (props.name === \"actions\" && props.cell) {\n return <Original {...props} cell={<ActionsCell>{props.cell}</ActionsCell>} />;\n }\n\n return <Original {...props} />;\n };\n});\n\nexport const HeadlessCmsActionsAcoCell = () => {\n return (\n <>\n <UseContentEntriesListHookDecorator />\n <UseSaveEntryDecorator />\n <RecordLockingCellActions />\n <UseRecordsDecorator />\n </>\n );\n};\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,sBAAsB,EAAEC,QAAQ,QAAQ,0BAA0B;AAC3E,SAASC,cAAc,IAAIC,UAAU,QAAQ,wBAAwB;AACrE,SAASC,gBAAgB;AACzB,SAASC,kCAAkC;AAC3C,SAASC,qBAAqB;AAC9B,SAASC,mBAAmB;AAC5B,SAASC,IAAI,EAAEC,OAAO,QAAQ,kBAAkB;AAEhD,MAAM;EAAEC;AAAQ,CAAC,GAAGV,sBAAsB;AAM1C,MAAMW,WAAW,GAAGA,CAAC;EAAEC;AAA2B,CAAC,KAAK;EACpD,MAAM;IAAEC;EAAM,CAAC,GAAGZ,QAAQ,CAAC,CAAC;EAC5B,MAAM;IAAEa,kBAAkB;IAAEC;EAAe,CAAC,GAAGX,gBAAgB,CAAC,CAAC;EAEjE,MAAM;IAAEY,WAAW;IAAEC;EAAY,CAAC,GAAGP,OAAO,CAACQ,KAAK,CAACC,MAAM;EACzD,MAAM;IAAEC;EAAI,CAAC,GAAGJ,WAAW,CAAC,CAAC;EAE7B,IAAIC,WAAW,CAACG,GAAG,CAAC,EAAE;IAClB,oBAAOrB,KAAA,CAAAsB,aAAA,CAAAtB,KAAA,CAAAuB,QAAA,QAAGV,QAAW,CAAC;EAC1B;EAEA,MAAMW,KAAK,GAAGT,kBAAkB,CAACM,GAAG,CAACI,EAAE,CAAC;EAExC,IAAI,CAACT,cAAc,CAACQ,KAAK,CAAC,IAAI,CAACA,KAAK,EAAEE,OAAO,EAAE;IAC3C,oBAAO1B,KAAA,CAAAsB,aAAA,CAAAtB,KAAA,CAAAuB,QAAA,QAAGV,QAAW,CAAC;EAC1B;EACA,oBACIb,KAAA,CAAAsB,aAAA,CAACZ,OAAO;IACJiB,IAAI,EAAE,MAAO;IACbC,OAAO,EAAE,QAAQd,KAAK,CAACe,IAAI,2BAA2BL,KAAK,CAACE,OAAO,CAACI,QAAQ,CAACC,WAAW,GAAI;IAC5FC,OAAO,eAAEhC,KAAA,CAAAsB,aAAA,CAACb,IAAI;MAACwB,IAAI,eAAEjC,KAAA,CAAAsB,aAAA,CAAClB,UAAU,MAAE,CAAE;MAAC8B,KAAK,EAAE,cAAe;MAACC,KAAK,EAAE;IAAgB,CAAE;EAAE,CAC1F,CAAC;AAEV,CAAC;AAED,MAAMC,wBAAwB,GAAGzB,OAAO,CAACQ,KAAK,CAACC,MAAM,CAACiB,eAAe,CAACC,QAAQ,IAAI;EAC9E,OAAO,SAASF,wBAAwBA,CAACG,KAAK,EAAE;IAC5C,IAAIA,KAAK,CAACV,IAAI,KAAK,SAAS,IAAIU,KAAK,CAACC,IAAI,EAAE;MACxC,oBAAOxC,KAAA,CAAAsB,aAAA,CAACgB,QAAQ,EAAAG,MAAA,CAAAC,MAAA,KAAKH,KAAK;QAAEC,IAAI,eAAExC,KAAA,CAAAsB,aAAA,CAACV,WAAW,QAAE2B,KAAK,CAACC,IAAkB;MAAE,EAAE,CAAC;IACjF;IAEA,oBAAOxC,KAAA,CAAAsB,aAAA,CAACgB,QAAQ,EAAKC,KAAQ,CAAC;EAClC,CAAC;AACL,CAAC,CAAC;AAEF,OAAO,MAAMI,yBAAyB,GAAGA,CAAA,KAAM;EAC3C,oBACI3C,KAAA,CAAAsB,aAAA,CAAAtB,KAAA,CAAAuB,QAAA,qBACIvB,KAAA,CAAAsB,aAAA,CAAChB,kCAAkC,MAAE,CAAC,eACtCN,KAAA,CAAAsB,aAAA,CAACf,qBAAqB,MAAE,CAAC,eACzBP,KAAA,CAAAsB,aAAA,CAACc,wBAAwB,MAAE,CAAC,eAC5BpC,KAAA,CAAAsB,aAAA,CAACd,mBAAmB,MAAE,CACxB,CAAC;AAEX,CAAC","ignoreList":[]}
@@ -1,5 +1,5 @@
1
1
  import React from "react";
2
- import type { CmsContentEntry, CmsModel } from "@webiny/app-headless-cms/types";
2
+ import type { CmsContentEntry, CmsModel } from "@webiny/app-headless-cms/types.js";
3
3
  export interface IContentEntryGuardProps {
4
4
  loading: boolean;
5
5
  entry: CmsContentEntry;
@@ -1,6 +1,6 @@
1
1
  import React, { useEffect, useState } from "react";
2
- import { useRecordLocking } from "../../hooks";
3
- import { LockedRecord } from "../LockedRecord";
2
+ import { useRecordLocking } from "../../hooks/index.js";
3
+ import { LockedRecord } from "../LockedRecord/index.js";
4
4
  import { OverlayLoader } from "@webiny/admin-ui";
5
5
  export const ContentEntryGuard = props => {
6
6
  const {
@@ -27,8 +27,10 @@ export const ContentEntryGuard = props => {
27
27
  }, [entry.id, loading]);
28
28
  if (locked === undefined) {
29
29
  return /*#__PURE__*/React.createElement("div", {
30
- className: "wby-h-screen wby-w-screen wby-fixed wby-top-0 wby-left-0 wby-z-20"
31
- }, /*#__PURE__*/React.createElement(OverlayLoader, null));
30
+ className: "h-screen w-screen fixed top-0 left-0 z-20"
31
+ }, /*#__PURE__*/React.createElement(OverlayLoader, {
32
+ text: "Checking record status..."
33
+ }));
32
34
  } else if (locked) {
33
35
  return /*#__PURE__*/React.createElement(LockedRecord, {
34
36
  record: locked
@@ -1 +1 @@
1
- {"version":3,"names":["React","useEffect","useState","useRecordLocking","LockedRecord","OverlayLoader","ContentEntryGuard","props","loading","entry","model","children","fetchLockedEntryLockRecord","locked","setLocked","undefined","id","result","$lockingType","modelId","createElement","className","record"],"sources":["ContentEntryGuard.tsx"],"sourcesContent":["import React, { useEffect, useState } from \"react\";\nimport { useRecordLocking } from \"~/hooks\";\nimport { LockedRecord } from \"../LockedRecord\";\nimport type { IRecordLockingLockRecord } from \"~/types\";\nimport type { CmsContentEntry, CmsModel } from \"@webiny/app-headless-cms/types\";\nimport { OverlayLoader } from \"@webiny/admin-ui\";\n\nexport interface IContentEntryGuardProps {\n loading: boolean;\n entry: CmsContentEntry;\n model: CmsModel;\n children: React.ReactElement;\n}\n\nexport const ContentEntryGuard = (props: IContentEntryGuardProps) => {\n const { loading, entry, model, children } = props;\n const { fetchLockedEntryLockRecord } = useRecordLocking();\n\n const [locked, setLocked] = useState<IRecordLockingLockRecord | null | undefined>(undefined);\n\n useEffect(() => {\n if (!entry.id || loading || locked !== undefined) {\n return;\n }\n (async () => {\n const result = await fetchLockedEntryLockRecord({\n id: entry.id,\n $lockingType: model.modelId\n });\n setLocked(result);\n })();\n }, [entry.id, loading]);\n\n if (locked === undefined) {\n return (\n <div className={\"wby-h-screen wby-w-screen wby-fixed wby-top-0 wby-left-0 wby-z-20\"}>\n <OverlayLoader />\n </div>\n );\n } else if (locked) {\n return <LockedRecord record={locked} />;\n }\n\n return children;\n};\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,SAAS,EAAEC,QAAQ,QAAQ,OAAO;AAClD,SAASC,gBAAgB;AACzB,SAASC,YAAY;AAGrB,SAASC,aAAa,QAAQ,kBAAkB;AAShD,OAAO,MAAMC,iBAAiB,GAAIC,KAA8B,IAAK;EACjE,MAAM;IAAEC,OAAO;IAAEC,KAAK;IAAEC,KAAK;IAAEC;EAAS,CAAC,GAAGJ,KAAK;EACjD,MAAM;IAAEK;EAA2B,CAAC,GAAGT,gBAAgB,CAAC,CAAC;EAEzD,MAAM,CAACU,MAAM,EAAEC,SAAS,CAAC,GAAGZ,QAAQ,CAA8Ca,SAAS,CAAC;EAE5Fd,SAAS,CAAC,MAAM;IACZ,IAAI,CAACQ,KAAK,CAACO,EAAE,IAAIR,OAAO,IAAIK,MAAM,KAAKE,SAAS,EAAE;MAC9C;IACJ;IACA,CAAC,YAAY;MACT,MAAME,MAAM,GAAG,MAAML,0BAA0B,CAAC;QAC5CI,EAAE,EAAEP,KAAK,CAACO,EAAE;QACZE,YAAY,EAAER,KAAK,CAACS;MACxB,CAAC,CAAC;MACFL,SAAS,CAACG,MAAM,CAAC;IACrB,CAAC,EAAE,CAAC;EACR,CAAC,EAAE,CAACR,KAAK,CAACO,EAAE,EAAER,OAAO,CAAC,CAAC;EAEvB,IAAIK,MAAM,KAAKE,SAAS,EAAE;IACtB,oBACIf,KAAA,CAAAoB,aAAA;MAAKC,SAAS,EAAE;IAAoE,gBAChFrB,KAAA,CAAAoB,aAAA,CAACf,aAAa,MAAE,CACf,CAAC;EAEd,CAAC,MAAM,IAAIQ,MAAM,EAAE;IACf,oBAAOb,KAAA,CAAAoB,aAAA,CAAChB,YAAY;MAACkB,MAAM,EAAET;IAAO,CAAE,CAAC;EAC3C;EAEA,OAAOF,QAAQ;AACnB,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["React","useEffect","useState","useRecordLocking","LockedRecord","OverlayLoader","ContentEntryGuard","props","loading","entry","model","children","fetchLockedEntryLockRecord","locked","setLocked","undefined","id","result","$lockingType","modelId","createElement","className","text","record"],"sources":["ContentEntryGuard.tsx"],"sourcesContent":["import React, { useEffect, useState } from \"react\";\nimport { useRecordLocking } from \"~/hooks/index.js\";\nimport { LockedRecord } from \"../LockedRecord/index.js\";\nimport type { IRecordLockingLockRecord } from \"~/types.js\";\nimport type { CmsContentEntry, CmsModel } from \"@webiny/app-headless-cms/types.js\";\nimport { OverlayLoader } from \"@webiny/admin-ui\";\n\nexport interface IContentEntryGuardProps {\n loading: boolean;\n entry: CmsContentEntry;\n model: CmsModel;\n children: React.ReactElement;\n}\n\nexport const ContentEntryGuard = (props: IContentEntryGuardProps) => {\n const { loading, entry, model, children } = props;\n const { fetchLockedEntryLockRecord } = useRecordLocking();\n\n const [locked, setLocked] = useState<IRecordLockingLockRecord | null | undefined>(undefined);\n\n useEffect(() => {\n if (!entry.id || loading || locked !== undefined) {\n return;\n }\n (async () => {\n const result = await fetchLockedEntryLockRecord({\n id: entry.id,\n $lockingType: model.modelId\n });\n setLocked(result);\n })();\n }, [entry.id, loading]);\n\n if (locked === undefined) {\n return (\n <div className={\"h-screen w-screen fixed top-0 left-0 z-20\"}>\n <OverlayLoader text={\"Checking record status...\"} />\n </div>\n );\n } else if (locked) {\n return <LockedRecord record={locked} />;\n }\n\n return children;\n};\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,SAAS,EAAEC,QAAQ,QAAQ,OAAO;AAClD,SAASC,gBAAgB;AACzB,SAASC,YAAY;AAGrB,SAASC,aAAa,QAAQ,kBAAkB;AAShD,OAAO,MAAMC,iBAAiB,GAAIC,KAA8B,IAAK;EACjE,MAAM;IAAEC,OAAO;IAAEC,KAAK;IAAEC,KAAK;IAAEC;EAAS,CAAC,GAAGJ,KAAK;EACjD,MAAM;IAAEK;EAA2B,CAAC,GAAGT,gBAAgB,CAAC,CAAC;EAEzD,MAAM,CAACU,MAAM,EAAEC,SAAS,CAAC,GAAGZ,QAAQ,CAA8Ca,SAAS,CAAC;EAE5Fd,SAAS,CAAC,MAAM;IACZ,IAAI,CAACQ,KAAK,CAACO,EAAE,IAAIR,OAAO,IAAIK,MAAM,KAAKE,SAAS,EAAE;MAC9C;IACJ;IACA,CAAC,YAAY;MACT,MAAME,MAAM,GAAG,MAAML,0BAA0B,CAAC;QAC5CI,EAAE,EAAEP,KAAK,CAACO,EAAE;QACZE,YAAY,EAAER,KAAK,CAACS;MACxB,CAAC,CAAC;MACFL,SAAS,CAACG,MAAM,CAAC;IACrB,CAAC,EAAE,CAAC;EACR,CAAC,EAAE,CAACR,KAAK,CAACO,EAAE,EAAER,OAAO,CAAC,CAAC;EAEvB,IAAIK,MAAM,KAAKE,SAAS,EAAE;IACtB,oBACIf,KAAA,CAAAoB,aAAA;MAAKC,SAAS,EAAE;IAA4C,gBACxDrB,KAAA,CAAAoB,aAAA,CAACf,aAAa;MAACiB,IAAI,EAAE;IAA4B,CAAE,CAClD,CAAC;EAEd,CAAC,MAAM,IAAIT,MAAM,EAAE;IACf,oBAAOb,KAAA,CAAAoB,aAAA,CAAChB,YAAY;MAACmB,MAAM,EAAEV;IAAO,CAAE,CAAC;EAC3C;EAEA,OAAOF,QAAQ;AACnB,CAAC","ignoreList":[]}
@@ -1,7 +1,7 @@
1
1
  import React from "react";
2
- import type { IRecordLockingIdentity, IRecordLockingLockRecord } from "../../types";
2
+ import type { IRecordLockingIdentity, IRecordLockingLockRecord } from "../../types.js";
3
3
  import type { IncomingGenericData } from "@webiny/app-websockets";
4
- import type { CmsContentEntry, CmsModel } from "@webiny/app-headless-cms/types";
4
+ import type { CmsContentEntry, CmsModel } from "@webiny/app-headless-cms/types.js";
5
5
  export interface IContentEntryLockerProps {
6
6
  entry: CmsContentEntry;
7
7
  model: CmsModel;
@@ -1,5 +1,5 @@
1
1
  import React, { useEffect, useRef } from "react";
2
- import { useRecordLocking } from "../../hooks";
2
+ import { useRecordLocking } from "../../hooks/index.js";
3
3
  import { useWebsockets } from "@webiny/app-websockets";
4
4
  import { parseIdentifier } from "@webiny/utils";
5
5
  import { useDialogs } from "@webiny/app-admin";
@@ -1 +1 @@
1
- {"version":3,"names":["React","useEffect","useRef","useRecordLocking","useWebsockets","parseIdentifier","useDialogs","autoUpdateTimeout","ForceUnlocked","user","createElement","Fragment","displayName","ContentEntryLocker","onEntryUnlocked","onDisablePrompt","entry","model","children","updateEntryLock","removeEntryLock","websockets","showDialog","entryLockerTimeout","id","entryId","onMessageSub","onMessage","incoming","data","$lockingType","modelId","title","content","acceptLabel","onClose","undefined","cancelLabel","off","current","updateLock","result","error","message","createTimeout","window","setTimeout","clearTimeout"],"sources":["ContentEntryLocker.tsx"],"sourcesContent":["import React, { useEffect, useRef } from \"react\";\nimport { useRecordLocking } from \"~/hooks\";\nimport type { IRecordLockingIdentity, IRecordLockingLockRecord } from \"~/types\";\nimport type { IncomingGenericData } from \"@webiny/app-websockets\";\nimport { useWebsockets } from \"@webiny/app-websockets\";\nimport { parseIdentifier } from \"@webiny/utils\";\nimport { useDialogs } from \"@webiny/app-admin\";\nimport type { CmsContentEntry, CmsModel } from \"@webiny/app-headless-cms/types\";\n\nconst autoUpdateTimeout = 20;\n\nexport interface IContentEntryLockerProps {\n entry: CmsContentEntry;\n model: CmsModel;\n onEntryUnlocked: () => void;\n onDisablePrompt: (flag: boolean) => void;\n children: React.ReactElement;\n}\n\nexport interface IKickOutWebsocketsMessage extends IncomingGenericData {\n data: {\n record: IRecordLockingLockRecord;\n user: IRecordLockingIdentity;\n };\n}\ninterface IForceUnlockedProps {\n user: IRecordLockingIdentity;\n}\nconst ForceUnlocked = ({ user }: IForceUnlockedProps) => {\n return (\n <>\n The entry you were editing was forcefully unlocked by{\" \"}\n <strong>{user.displayName || \"Unknown user\"}</strong>. Unfortunately, this means you\n lost the unsaved changes.\n </>\n );\n};\n\nexport const ContentEntryLocker = ({\n onEntryUnlocked,\n onDisablePrompt,\n entry,\n model,\n children\n}: IContentEntryLockerProps) => {\n const { updateEntryLock, removeEntryLock } = useRecordLocking();\n const websockets = useWebsockets();\n const { showDialog } = useDialogs();\n\n const entryLockerTimeout = useRef<number | null>(null);\n\n useEffect(() => {\n if (!entry.id) {\n return;\n }\n const { id: entryId } = parseIdentifier(entry.id);\n\n let onMessageSub = websockets.onMessage<IKickOutWebsocketsMessage>(\n `recordLocking.entry.kickOut.${entryId}`,\n async incoming => {\n const { user } = incoming.data;\n onDisablePrompt(true);\n removeEntryLock({\n id: entryId,\n $lockingType: model.modelId\n });\n showDialog({\n title: \"Entry was forcefully unlocked!\",\n content: <ForceUnlocked user={user} />,\n acceptLabel: \"Ok\",\n onClose: undefined,\n cancelLabel: undefined\n });\n onEntryUnlocked();\n }\n );\n\n return () => {\n onMessageSub.off();\n /**\n * Lets null subscriptions, just in case it...\n */\n // @ts-expect-error\n onMessageSub = null;\n };\n }, [entry.id, onEntryUnlocked, model.modelId]);\n\n useEffect(() => {\n if (!entry.id) {\n return;\n }\n\n if (entryLockerTimeout.current) {\n return;\n }\n\n const updateLock = async () => {\n const result = await updateEntryLock({\n id: entry.id,\n $lockingType: model.modelId\n });\n if (result.error) {\n showDialog({\n title: \"There was an error while updating the entry lock.\",\n content: result.error.message,\n acceptLabel: \"Ok\",\n onClose: undefined,\n cancelLabel: undefined\n });\n onEntryUnlocked();\n return;\n }\n createTimeout();\n };\n\n const createTimeout = () => {\n entryLockerTimeout.current = window.setTimeout(() => {\n updateLock();\n }, autoUpdateTimeout * 1000);\n };\n\n updateLock();\n return () => {\n if (!entryLockerTimeout.current) {\n return;\n }\n clearTimeout(entryLockerTimeout.current);\n entryLockerTimeout.current = null;\n };\n }, [entry.id, onEntryUnlocked]);\n\n return <>{children}</>;\n};\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,SAAS,EAAEC,MAAM,QAAQ,OAAO;AAChD,SAASC,gBAAgB;AAGzB,SAASC,aAAa,QAAQ,wBAAwB;AACtD,SAASC,eAAe,QAAQ,eAAe;AAC/C,SAASC,UAAU,QAAQ,mBAAmB;AAG9C,MAAMC,iBAAiB,GAAG,EAAE;AAmB5B,MAAMC,aAAa,GAAGA,CAAC;EAAEC;AAA0B,CAAC,KAAK;EACrD,oBACIT,KAAA,CAAAU,aAAA,CAAAV,KAAA,CAAAW,QAAA,QAAE,uDACuD,EAAC,GAAG,eACzDX,KAAA,CAAAU,aAAA,iBAASD,IAAI,CAACG,WAAW,IAAI,cAAuB,CAAC,6DAEvD,CAAC;AAEX,CAAC;AAED,OAAO,MAAMC,kBAAkB,GAAGA,CAAC;EAC/BC,eAAe;EACfC,eAAe;EACfC,KAAK;EACLC,KAAK;EACLC;AACsB,CAAC,KAAK;EAC5B,MAAM;IAAEC,eAAe;IAAEC;EAAgB,CAAC,GAAGjB,gBAAgB,CAAC,CAAC;EAC/D,MAAMkB,UAAU,GAAGjB,aAAa,CAAC,CAAC;EAClC,MAAM;IAAEkB;EAAW,CAAC,GAAGhB,UAAU,CAAC,CAAC;EAEnC,MAAMiB,kBAAkB,GAAGrB,MAAM,CAAgB,IAAI,CAAC;EAEtDD,SAAS,CAAC,MAAM;IACZ,IAAI,CAACe,KAAK,CAACQ,EAAE,EAAE;MACX;IACJ;IACA,MAAM;MAAEA,EAAE,EAAEC;IAAQ,CAAC,GAAGpB,eAAe,CAACW,KAAK,CAACQ,EAAE,CAAC;IAEjD,IAAIE,YAAY,GAAGL,UAAU,CAACM,SAAS,CACnC,+BAA+BF,OAAO,EAAE,EACxC,MAAMG,QAAQ,IAAI;MACd,MAAM;QAAEnB;MAAK,CAAC,GAAGmB,QAAQ,CAACC,IAAI;MAC9Bd,eAAe,CAAC,IAAI,CAAC;MACrBK,eAAe,CAAC;QACZI,EAAE,EAAEC,OAAO;QACXK,YAAY,EAAEb,KAAK,CAACc;MACxB,CAAC,CAAC;MACFT,UAAU,CAAC;QACPU,KAAK,EAAE,gCAAgC;QACvCC,OAAO,eAAEjC,KAAA,CAAAU,aAAA,CAACF,aAAa;UAACC,IAAI,EAAEA;QAAK,CAAE,CAAC;QACtCyB,WAAW,EAAE,IAAI;QACjBC,OAAO,EAAEC,SAAS;QAClBC,WAAW,EAAED;MACjB,CAAC,CAAC;MACFtB,eAAe,CAAC,CAAC;IACrB,CACJ,CAAC;IAED,OAAO,MAAM;MACTY,YAAY,CAACY,GAAG,CAAC,CAAC;MAClB;AACZ;AACA;MACY;MACAZ,YAAY,GAAG,IAAI;IACvB,CAAC;EACL,CAAC,EAAE,CAACV,KAAK,CAACQ,EAAE,EAAEV,eAAe,EAAEG,KAAK,CAACc,OAAO,CAAC,CAAC;EAE9C9B,SAAS,CAAC,MAAM;IACZ,IAAI,CAACe,KAAK,CAACQ,EAAE,EAAE;MACX;IACJ;IAEA,IAAID,kBAAkB,CAACgB,OAAO,EAAE;MAC5B;IACJ;IAEA,MAAMC,UAAU,GAAG,MAAAA,CAAA,KAAY;MAC3B,MAAMC,MAAM,GAAG,MAAMtB,eAAe,CAAC;QACjCK,EAAE,EAAER,KAAK,CAACQ,EAAE;QACZM,YAAY,EAAEb,KAAK,CAACc;MACxB,CAAC,CAAC;MACF,IAAIU,MAAM,CAACC,KAAK,EAAE;QACdpB,UAAU,CAAC;UACPU,KAAK,EAAE,mDAAmD;UAC1DC,OAAO,EAAEQ,MAAM,CAACC,KAAK,CAACC,OAAO;UAC7BT,WAAW,EAAE,IAAI;UACjBC,OAAO,EAAEC,SAAS;UAClBC,WAAW,EAAED;QACjB,CAAC,CAAC;QACFtB,eAAe,CAAC,CAAC;QACjB;MACJ;MACA8B,aAAa,CAAC,CAAC;IACnB,CAAC;IAED,MAAMA,aAAa,GAAGA,CAAA,KAAM;MACxBrB,kBAAkB,CAACgB,OAAO,GAAGM,MAAM,CAACC,UAAU,CAAC,MAAM;QACjDN,UAAU,CAAC,CAAC;MAChB,CAAC,EAAEjC,iBAAiB,GAAG,IAAI,CAAC;IAChC,CAAC;IAEDiC,UAAU,CAAC,CAAC;IACZ,OAAO,MAAM;MACT,IAAI,CAACjB,kBAAkB,CAACgB,OAAO,EAAE;QAC7B;MACJ;MACAQ,YAAY,CAACxB,kBAAkB,CAACgB,OAAO,CAAC;MACxChB,kBAAkB,CAACgB,OAAO,GAAG,IAAI;IACrC,CAAC;EACL,CAAC,EAAE,CAACvB,KAAK,CAACQ,EAAE,EAAEV,eAAe,CAAC,CAAC;EAE/B,oBAAOd,KAAA,CAAAU,aAAA,CAAAV,KAAA,CAAAW,QAAA,QAAGO,QAAW,CAAC;AAC1B,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["React","useEffect","useRef","useRecordLocking","useWebsockets","parseIdentifier","useDialogs","autoUpdateTimeout","ForceUnlocked","user","createElement","Fragment","displayName","ContentEntryLocker","onEntryUnlocked","onDisablePrompt","entry","model","children","updateEntryLock","removeEntryLock","websockets","showDialog","entryLockerTimeout","id","entryId","onMessageSub","onMessage","incoming","data","$lockingType","modelId","title","content","acceptLabel","onClose","undefined","cancelLabel","off","current","updateLock","result","error","message","createTimeout","window","setTimeout","clearTimeout"],"sources":["ContentEntryLocker.tsx"],"sourcesContent":["import React, { useEffect, useRef } from \"react\";\nimport { useRecordLocking } from \"~/hooks/index.js\";\nimport type { IRecordLockingIdentity, IRecordLockingLockRecord } from \"~/types.js\";\nimport type { IncomingGenericData } from \"@webiny/app-websockets\";\nimport { useWebsockets } from \"@webiny/app-websockets\";\nimport { parseIdentifier } from \"@webiny/utils\";\nimport { useDialogs } from \"@webiny/app-admin\";\nimport type { CmsContentEntry, CmsModel } from \"@webiny/app-headless-cms/types.js\";\n\nconst autoUpdateTimeout = 20;\n\nexport interface IContentEntryLockerProps {\n entry: CmsContentEntry;\n model: CmsModel;\n onEntryUnlocked: () => void;\n onDisablePrompt: (flag: boolean) => void;\n children: React.ReactElement;\n}\n\nexport interface IKickOutWebsocketsMessage extends IncomingGenericData {\n data: {\n record: IRecordLockingLockRecord;\n user: IRecordLockingIdentity;\n };\n}\ninterface IForceUnlockedProps {\n user: IRecordLockingIdentity;\n}\nconst ForceUnlocked = ({ user }: IForceUnlockedProps) => {\n return (\n <>\n The entry you were editing was forcefully unlocked by{\" \"}\n <strong>{user.displayName || \"Unknown user\"}</strong>. Unfortunately, this means you\n lost the unsaved changes.\n </>\n );\n};\n\nexport const ContentEntryLocker = ({\n onEntryUnlocked,\n onDisablePrompt,\n entry,\n model,\n children\n}: IContentEntryLockerProps) => {\n const { updateEntryLock, removeEntryLock } = useRecordLocking();\n const websockets = useWebsockets();\n const { showDialog } = useDialogs();\n\n const entryLockerTimeout = useRef<number | null>(null);\n\n useEffect(() => {\n if (!entry.id) {\n return;\n }\n const { id: entryId } = parseIdentifier(entry.id);\n\n let onMessageSub = websockets.onMessage<IKickOutWebsocketsMessage>(\n `recordLocking.entry.kickOut.${entryId}`,\n async incoming => {\n const { user } = incoming.data;\n onDisablePrompt(true);\n removeEntryLock({\n id: entryId,\n $lockingType: model.modelId\n });\n showDialog({\n title: \"Entry was forcefully unlocked!\",\n content: <ForceUnlocked user={user} />,\n acceptLabel: \"Ok\",\n onClose: undefined,\n cancelLabel: undefined\n });\n onEntryUnlocked();\n }\n );\n\n return () => {\n onMessageSub.off();\n /**\n * Lets null subscriptions, just in case it...\n */\n // @ts-expect-error\n onMessageSub = null;\n };\n }, [entry.id, onEntryUnlocked, model.modelId]);\n\n useEffect(() => {\n if (!entry.id) {\n return;\n }\n\n if (entryLockerTimeout.current) {\n return;\n }\n\n const updateLock = async () => {\n const result = await updateEntryLock({\n id: entry.id,\n $lockingType: model.modelId\n });\n if (result.error) {\n showDialog({\n title: \"There was an error while updating the entry lock.\",\n content: result.error.message,\n acceptLabel: \"Ok\",\n onClose: undefined,\n cancelLabel: undefined\n });\n onEntryUnlocked();\n return;\n }\n createTimeout();\n };\n\n const createTimeout = () => {\n entryLockerTimeout.current = window.setTimeout(() => {\n updateLock();\n }, autoUpdateTimeout * 1000);\n };\n\n updateLock();\n return () => {\n if (!entryLockerTimeout.current) {\n return;\n }\n clearTimeout(entryLockerTimeout.current);\n entryLockerTimeout.current = null;\n };\n }, [entry.id, onEntryUnlocked]);\n\n return <>{children}</>;\n};\n"],"mappings":"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","ignoreList":[]}
@@ -1,15 +1,14 @@
1
1
  import React, { useState } from "react";
2
- import { CompositionScope, createGenericContext } from "@webiny/app-admin";
2
+ import { CompositionScope, createGenericContext, NavigationPrompt } from "@webiny/app-admin";
3
3
  import { ContentEntryEditorConfig, ContentEntryListConfig } from "@webiny/app-headless-cms";
4
- import { Prompt } from "@webiny/react-router";
5
- import { ContentEntryGuard } from "./ContentEntryGuard";
6
- import { ContentEntryLocker } from "./ContentEntryLocker";
4
+ import { ContentEntryGuard } from "./ContentEntryGuard.js";
5
+ import { ContentEntryLocker } from "./ContentEntryLocker.js";
7
6
  const {
8
7
  ContentEntry,
9
8
  SingletonContentEntry
10
9
  } = ContentEntryEditorConfig;
11
10
  const DisablePrompt = createGenericContext("DisablePrompt");
12
- const PromptDecorator = Prompt.createDecorator(Original => {
11
+ const PromptDecorator = NavigationPrompt.createDecorator(Original => {
13
12
  return function Prompt(props) {
14
13
  const {
15
14
  disablePrompt
@@ -1 +1 @@
1
- {"version":3,"names":["React","useState","CompositionScope","createGenericContext","ContentEntryEditorConfig","ContentEntryListConfig","Prompt","ContentEntryGuard","ContentEntryLocker","ContentEntry","SingletonContentEntry","DisablePrompt","PromptDecorator","createDecorator","Original","props","disablePrompt","useHook","when","createElement","message","ContentEntryDecorator","RecordLockingContentEntry","setDisablePrompt","entry","contentModel","loading","useContentEntry","navigateTo","ContentEntries","useContentEntriesList","id","Provider","model","Object","assign","onDisablePrompt","flag","onEntryUnlocked","SingletonContentEntryDecorator","RecordLockingSingletonContentEntry","useSingletonContentEntry","HeadlessCmsContentEntry","Fragment","name"],"sources":["HeadlessCmsContentEntry.tsx"],"sourcesContent":["import React, { useState } from \"react\";\nimport { CompositionScope, createGenericContext } from \"@webiny/app-admin\";\nimport { ContentEntryEditorConfig, ContentEntryListConfig } from \"@webiny/app-headless-cms\";\nimport { Prompt } from \"@webiny/react-router\";\nimport { ContentEntryGuard } from \"./ContentEntryGuard\";\nimport { ContentEntryLocker } from \"./ContentEntryLocker\";\n\nconst { ContentEntry, SingletonContentEntry } = ContentEntryEditorConfig;\n\nconst DisablePrompt = createGenericContext<{ disablePrompt: boolean }>(\"DisablePrompt\");\n\nconst PromptDecorator = Prompt.createDecorator(Original => {\n return function Prompt(props) {\n const { disablePrompt } = DisablePrompt.useHook();\n const when = disablePrompt === true ? false : props.when;\n return <Original message={props.message} when={when} />;\n };\n});\n\nconst ContentEntryDecorator = ContentEntry.createDecorator(Original => {\n return function RecordLockingContentEntry() {\n const [disablePrompt, setDisablePrompt] = useState(false);\n const { entry, contentModel, loading } = ContentEntry.useContentEntry();\n const { navigateTo } = ContentEntryListConfig.ContentEntries.useContentEntriesList();\n /**\n * New entry does not have ID yet.\n */\n if (!entry?.id) {\n return (\n <DisablePrompt.Provider disablePrompt={disablePrompt}>\n <Original />\n </DisablePrompt.Provider>\n );\n }\n /**\n * Continue with existing entry.\n */\n const props = { entry, model: contentModel };\n\n return (\n <ContentEntryGuard {...props} loading={loading}>\n <ContentEntryLocker\n {...props}\n onDisablePrompt={flag => setDisablePrompt(flag)}\n onEntryUnlocked={navigateTo}\n >\n <DisablePrompt.Provider disablePrompt={disablePrompt}>\n <Original />\n </DisablePrompt.Provider>\n </ContentEntryLocker>\n </ContentEntryGuard>\n );\n };\n});\n\nconst SingletonContentEntryDecorator = SingletonContentEntry.createDecorator(Original => {\n return function RecordLockingSingletonContentEntry() {\n const [disablePrompt, setDisablePrompt] = useState(false);\n const { entry, contentModel, loading } = SingletonContentEntry.useSingletonContentEntry();\n\n const props = { entry, model: contentModel };\n\n return (\n <ContentEntryGuard {...props} loading={loading}>\n <ContentEntryLocker\n {...props}\n onDisablePrompt={flag => setDisablePrompt(flag)}\n onEntryUnlocked={() => {\n // There's nowhere to go, since singleton entry doesn't have a list view.\n }}\n >\n <DisablePrompt.Provider disablePrompt={disablePrompt}>\n <Original />\n </DisablePrompt.Provider>\n </ContentEntryLocker>\n </ContentEntryGuard>\n );\n };\n});\n\nexport const HeadlessCmsContentEntry = () => {\n return (\n <>\n <ContentEntryDecorator />\n <SingletonContentEntryDecorator />\n <CompositionScope name={\"cms.contentEntryForm\"}>\n <PromptDecorator />\n </CompositionScope>\n </>\n );\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["React","useState","CompositionScope","createGenericContext","NavigationPrompt","ContentEntryEditorConfig","ContentEntryListConfig","ContentEntryGuard","ContentEntryLocker","ContentEntry","SingletonContentEntry","DisablePrompt","PromptDecorator","createDecorator","Original","Prompt","props","disablePrompt","useHook","when","createElement","message","ContentEntryDecorator","RecordLockingContentEntry","setDisablePrompt","entry","contentModel","loading","useContentEntry","navigateTo","ContentEntries","useContentEntriesList","id","Provider","model","Object","assign","onDisablePrompt","flag","onEntryUnlocked","SingletonContentEntryDecorator","RecordLockingSingletonContentEntry","useSingletonContentEntry","HeadlessCmsContentEntry","Fragment","name"],"sources":["HeadlessCmsContentEntry.tsx"],"sourcesContent":["import React, { useState } from \"react\";\nimport { CompositionScope, createGenericContext, NavigationPrompt } from \"@webiny/app-admin\";\nimport { ContentEntryEditorConfig, ContentEntryListConfig } from \"@webiny/app-headless-cms\";\nimport { ContentEntryGuard } from \"./ContentEntryGuard.js\";\nimport { ContentEntryLocker } from \"./ContentEntryLocker.js\";\n\nconst { ContentEntry, SingletonContentEntry } = ContentEntryEditorConfig;\n\nconst DisablePrompt = createGenericContext<{ disablePrompt: boolean }>(\"DisablePrompt\");\n\nconst PromptDecorator = NavigationPrompt.createDecorator(Original => {\n return function Prompt(props) {\n const { disablePrompt } = DisablePrompt.useHook();\n const when = disablePrompt === true ? false : props.when;\n return <Original message={props.message} when={when} />;\n };\n});\n\nconst ContentEntryDecorator = ContentEntry.createDecorator(Original => {\n return function RecordLockingContentEntry() {\n const [disablePrompt, setDisablePrompt] = useState(false);\n const { entry, contentModel, loading } = ContentEntry.useContentEntry();\n const { navigateTo } = ContentEntryListConfig.ContentEntries.useContentEntriesList();\n /**\n * New entry does not have ID yet.\n */\n if (!entry?.id) {\n return (\n <DisablePrompt.Provider disablePrompt={disablePrompt}>\n <Original />\n </DisablePrompt.Provider>\n );\n }\n /**\n * Continue with existing entry.\n */\n const props = { entry, model: contentModel };\n\n return (\n <ContentEntryGuard {...props} loading={loading}>\n <ContentEntryLocker\n {...props}\n onDisablePrompt={flag => setDisablePrompt(flag)}\n onEntryUnlocked={navigateTo}\n >\n <DisablePrompt.Provider disablePrompt={disablePrompt}>\n <Original />\n </DisablePrompt.Provider>\n </ContentEntryLocker>\n </ContentEntryGuard>\n );\n };\n});\n\nconst SingletonContentEntryDecorator = SingletonContentEntry.createDecorator(Original => {\n return function RecordLockingSingletonContentEntry() {\n const [disablePrompt, setDisablePrompt] = useState(false);\n const { entry, contentModel, loading } = SingletonContentEntry.useSingletonContentEntry();\n\n const props = { entry, model: contentModel };\n\n return (\n <ContentEntryGuard {...props} loading={loading}>\n <ContentEntryLocker\n {...props}\n onDisablePrompt={flag => setDisablePrompt(flag)}\n onEntryUnlocked={() => {\n // There's nowhere to go, since singleton entry doesn't have a list view.\n }}\n >\n <DisablePrompt.Provider disablePrompt={disablePrompt}>\n <Original />\n </DisablePrompt.Provider>\n </ContentEntryLocker>\n </ContentEntryGuard>\n );\n };\n});\n\nexport const HeadlessCmsContentEntry = () => {\n return (\n <>\n <ContentEntryDecorator />\n <SingletonContentEntryDecorator />\n <CompositionScope name={\"cms.contentEntryForm\"}>\n <PromptDecorator />\n </CompositionScope>\n </>\n );\n};\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- export * from "./HeadlessCmsContentEntry";
1
+ export * from "./HeadlessCmsContentEntry.js";
@@ -1,3 +1,3 @@
1
- export * from "./HeadlessCmsContentEntry";
1
+ export * from "./HeadlessCmsContentEntry.js";
2
2
 
3
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["index.ts"],"sourcesContent":["export * from \"./HeadlessCmsContentEntry\";\n"],"mappings":"AAAA","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["index.ts"],"sourcesContent":["export * from \"./HeadlessCmsContentEntry.js\";\n"],"mappings":"AAAA","ignoreList":[]}
@@ -1,5 +1,5 @@
1
1
  import React from "react";
2
- import type { IRecordLockingLockRecord } from "../../types";
2
+ import type { IRecordLockingLockRecord } from "../../types.js";
3
3
  export interface ILockedRecordProps {
4
4
  record: IRecordLockingLockRecord;
5
5
  }
@@ -1,20 +1,20 @@
1
1
  import React from "react";
2
2
  import { ReactComponent as LockIcon } from "@webiny/icons/lock.svg";
3
3
  import { Grid, Heading, Icon, Text } from "@webiny/admin-ui";
4
- import { useRecordLocking } from "../../hooks";
4
+ import { useRecordLocking } from "../../hooks/index.js";
5
5
  import { useContentEntry } from "@webiny/app-headless-cms";
6
- import { LockedRecordForceUnlock } from "./LockedRecordForceUnlock";
6
+ import { LockedRecordForceUnlock } from "./LockedRecordForceUnlock.js";
7
7
  const Wrapper = ({
8
8
  children
9
9
  }) => {
10
10
  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
11
- className: "wby-w-5/12 wby-absolute wby-top-1/2 wby-left-1/2 wby--translate-x-1/2 wby--translate-y-1/2 wby-z-50"
11
+ className: "w-5/12 absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 z-50"
12
12
  }, /*#__PURE__*/React.createElement("div", {
13
- className: "wby-flex wby-p-lg wby-border-sm wby-border-neutral-dimmed-darker wby-rounded-3xl wby-bg-neutral-base"
13
+ className: "flex p-lg border-sm border-neutral-dimmed-darker rounded-3xl bg-neutral-base"
14
14
  }, /*#__PURE__*/React.createElement(Grid, null, /*#__PURE__*/React.createElement(Grid.Column, {
15
15
  span: 3
16
16
  }, /*#__PURE__*/React.createElement("div", {
17
- className: "wby-h-full wby-flex wby-items-center wby-justify-center wby-bg-neutral-dimmed wby-rounded-md wby-p-lg"
17
+ className: "h-full flex items-center justify-center bg-neutral-dimmed rounded-md p-lg"
18
18
  }, /*#__PURE__*/React.createElement(Icon, {
19
19
  style: {
20
20
  width: "64px",
@@ -27,7 +27,7 @@ const Wrapper = ({
27
27
  }))), /*#__PURE__*/React.createElement(Grid.Column, {
28
28
  span: 9
29
29
  }, /*#__PURE__*/React.createElement("div", {
30
- className: "wby-flex wby-flex-col wby-justify-center"
30
+ className: "flex flex-col justify-center"
31
31
  }, children))))));
32
32
  };
33
33
  const Title = () => {
@@ -36,7 +36,7 @@ const Title = () => {
36
36
  } = useContentEntry();
37
37
  return /*#__PURE__*/React.createElement(Heading, {
38
38
  level: 4,
39
- className: "wby-mb-sm"
39
+ className: "mb-sm"
40
40
  }, "Record (", entry.meta.title, ") is locked!");
41
41
  };
42
42
  export const LockedRecord = ({
@@ -52,14 +52,14 @@ export const LockedRecord = ({
52
52
  return /*#__PURE__*/React.createElement(Wrapper, null, /*#__PURE__*/React.createElement(Title, null), /*#__PURE__*/React.createElement(Text, null, "This record is locked, but the system cannot find the user that created the record lock. A force-unlock is required to regain editing capabilities for this record."), /*#__PURE__*/React.createElement(LockedRecordForceUnlock, {
53
53
  id: lockRecordEntry.id,
54
54
  type: record.$lockingType,
55
- title: record.data.meta.title
55
+ title: record.meta?.title
56
56
  }));
57
57
  }
58
58
  return /*#__PURE__*/React.createElement(Wrapper, null, /*#__PURE__*/React.createElement(Title, null), /*#__PURE__*/React.createElement(Text, null, "It is locked because ", /*#__PURE__*/React.createElement("strong", null, lockRecordEntry.lockedBy.displayName), " is currently editing this record. You can either contact the user and ask them to unlock the record, or you can wait for the lock to expire."), /*#__PURE__*/React.createElement(LockedRecordForceUnlock, {
59
59
  id: lockRecordEntry.id,
60
60
  type: record.$lockingType,
61
61
  lockedBy: lockRecordEntry.lockedBy,
62
- title: record.data.meta.title
62
+ title: record.meta?.title
63
63
  }));
64
64
  };
65
65
 
@@ -1 +1 @@
1
- {"version":3,"names":["React","ReactComponent","LockIcon","Grid","Heading","Icon","Text","useRecordLocking","useContentEntry","LockedRecordForceUnlock","Wrapper","children","createElement","Fragment","className","Column","span","style","width","height","icon","label","color","size","Title","entry","level","meta","title","LockedRecord","record","lockRecordEntry","getLockRecordEntry","id","lockedBy","type","$lockingType","data","displayName"],"sources":["LockedRecord.tsx"],"sourcesContent":["import React from \"react\";\nimport { ReactComponent as LockIcon } from \"@webiny/icons/lock.svg\";\nimport { Grid, Heading, Icon, Text } from \"@webiny/admin-ui\";\nimport { useRecordLocking } from \"~/hooks\";\nimport { useContentEntry } from \"@webiny/app-headless-cms\";\nimport { LockedRecordForceUnlock } from \"./LockedRecordForceUnlock\";\nimport type { IRecordLockingLockRecord } from \"~/types\";\n\ninterface IWrapperProps {\n children: React.ReactNode;\n}\n\nconst Wrapper = ({ children }: IWrapperProps) => {\n return (\n <>\n <div className=\"wby-w-5/12 wby-absolute wby-top-1/2 wby-left-1/2 wby--translate-x-1/2 wby--translate-y-1/2 wby-z-50\">\n <div\n className={\n \"wby-flex wby-p-lg wby-border-sm wby-border-neutral-dimmed-darker wby-rounded-3xl wby-bg-neutral-base\"\n }\n >\n <Grid>\n <Grid.Column span={3}>\n <div className=\"wby-h-full wby-flex wby-items-center wby-justify-center wby-bg-neutral-dimmed wby-rounded-md wby-p-lg\">\n <Icon\n style={{\n width: \"64px\",\n height: \"64px\"\n }}\n icon={<LockIcon />}\n label={\"Locked Record\"}\n color={\"accent\"}\n size={\"lg\"}\n />\n </div>\n </Grid.Column>\n <Grid.Column span={9}>\n <div className={\"wby-flex wby-flex-col wby-justify-center\"}>\n {children}\n </div>\n </Grid.Column>\n </Grid>\n </div>\n </div>\n {/*<div className=\"wby-absolute wby-inset-0 wby-bg-neutral-dark/50 wby-z-45\"></div>*/}\n </>\n );\n};\n\nconst Title = () => {\n const { entry } = useContentEntry();\n return (\n <Heading level={4} className={\"wby-mb-sm\"}>\n Record ({entry.meta.title}) is locked!\n </Heading>\n );\n};\n\nexport interface ILockedRecordProps {\n record: IRecordLockingLockRecord;\n}\n\nexport const LockedRecord = ({ record: lockRecordEntry }: ILockedRecordProps) => {\n const { getLockRecordEntry } = useRecordLocking();\n\n const record = getLockRecordEntry(lockRecordEntry.id);\n\n if (!record) {\n return (\n <Wrapper>\n <Text>Could not find the lock record. Please refresh the Admin UI.</Text>\n </Wrapper>\n );\n } else if (!lockRecordEntry?.lockedBy) {\n return (\n <Wrapper>\n <Title />\n <Text>\n This record is locked, but the system cannot find the user that created the\n record lock. A force-unlock is required to regain editing capabilities for this\n record.\n </Text>\n <LockedRecordForceUnlock\n id={lockRecordEntry.id}\n type={record.$lockingType}\n title={record.data.meta.title}\n />\n </Wrapper>\n );\n }\n return (\n <Wrapper>\n <Title />\n <Text>\n It is locked because <strong>{lockRecordEntry.lockedBy.displayName}</strong> is\n currently editing this record. You can either contact the user and ask them to\n unlock the record, or you can wait for the lock to expire.\n </Text>\n <LockedRecordForceUnlock\n id={lockRecordEntry.id}\n type={record.$lockingType}\n lockedBy={lockRecordEntry.lockedBy}\n title={record.data.meta.title}\n />\n </Wrapper>\n );\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["React","ReactComponent","LockIcon","Grid","Heading","Icon","Text","useRecordLocking","useContentEntry","LockedRecordForceUnlock","Wrapper","children","createElement","Fragment","className","Column","span","style","width","height","icon","label","color","size","Title","entry","level","meta","title","LockedRecord","record","lockRecordEntry","getLockRecordEntry","id","lockedBy","type","$lockingType","displayName"],"sources":["LockedRecord.tsx"],"sourcesContent":["import React from \"react\";\nimport { ReactComponent as LockIcon } from \"@webiny/icons/lock.svg\";\nimport { Grid, Heading, Icon, Text } from \"@webiny/admin-ui\";\nimport { useRecordLocking } from \"~/hooks/index.js\";\nimport { useContentEntry } from \"@webiny/app-headless-cms\";\nimport { LockedRecordForceUnlock } from \"./LockedRecordForceUnlock.js\";\nimport type { IRecordLockingLockRecord } from \"~/types.js\";\n\ninterface IWrapperProps {\n children: React.ReactNode;\n}\n\nconst Wrapper = ({ children }: IWrapperProps) => {\n return (\n <>\n <div className=\"w-5/12 absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 z-50\">\n <div\n className={\n \"flex p-lg border-sm border-neutral-dimmed-darker rounded-3xl bg-neutral-base\"\n }\n >\n <Grid>\n <Grid.Column span={3}>\n <div className=\"h-full flex items-center justify-center bg-neutral-dimmed rounded-md p-lg\">\n <Icon\n style={{\n width: \"64px\",\n height: \"64px\"\n }}\n icon={<LockIcon />}\n label={\"Locked Record\"}\n color={\"accent\"}\n size={\"lg\"}\n />\n </div>\n </Grid.Column>\n <Grid.Column span={9}>\n <div className={\"flex flex-col justify-center\"}>{children}</div>\n </Grid.Column>\n </Grid>\n </div>\n </div>\n {/*<div className=\"absolute inset-0 bg-neutral-dark/50 z-45\"></div>*/}\n </>\n );\n};\n\nconst Title = () => {\n const { entry } = useContentEntry();\n return (\n <Heading level={4} className={\"mb-sm\"}>\n Record ({entry.meta.title}) is locked!\n </Heading>\n );\n};\n\nexport interface ILockedRecordProps {\n record: IRecordLockingLockRecord;\n}\n\nexport const LockedRecord = ({ record: lockRecordEntry }: ILockedRecordProps) => {\n const { getLockRecordEntry } = useRecordLocking();\n\n const record = getLockRecordEntry(lockRecordEntry.id);\n\n if (!record) {\n return (\n <Wrapper>\n <Text>Could not find the lock record. Please refresh the Admin UI.</Text>\n </Wrapper>\n );\n } else if (!lockRecordEntry?.lockedBy) {\n return (\n <Wrapper>\n <Title />\n <Text>\n This record is locked, but the system cannot find the user that created the\n record lock. A force-unlock is required to regain editing capabilities for this\n record.\n </Text>\n <LockedRecordForceUnlock\n id={lockRecordEntry.id}\n type={record.$lockingType}\n title={record.meta?.title}\n />\n </Wrapper>\n );\n }\n return (\n <Wrapper>\n <Title />\n <Text>\n It is locked because <strong>{lockRecordEntry.lockedBy.displayName}</strong> is\n currently editing this record. You can either contact the user and ask them to\n unlock the record, or you can wait for the lock to expire.\n </Text>\n <LockedRecordForceUnlock\n id={lockRecordEntry.id}\n type={record.$lockingType}\n lockedBy={lockRecordEntry.lockedBy}\n title={record.meta?.title}\n />\n </Wrapper>\n );\n};\n"],"mappings":"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","ignoreList":[]}
@@ -1,5 +1,5 @@
1
1
  import React from "react";
2
- import type { IRecordLockingIdentity } from "../../types";
2
+ import type { IRecordLockingIdentity } from "../../types.js";
3
3
  export interface ILockedRecordForceUnlockProps {
4
4
  id: string;
5
5
  type: string;
@@ -1,9 +1,8 @@
1
1
  import React, { useCallback, useEffect, useState } from "react";
2
2
  import { Alert, Button, Text } from "@webiny/admin-ui";
3
3
  import { useConfirmationDialog, useSnackbar } from "@webiny/app-admin";
4
- import { useRecordLocking, usePermission } from "../../hooks";
5
- import { useRouter } from "@webiny/react-router";
6
4
  import { useContentEntriesList } from "@webiny/app-headless-cms";
5
+ import { useRecordLocking, usePermission } from "../../hooks/index.js";
7
6
  const ErrorMessage = props => {
8
7
  const {
9
8
  title,
@@ -12,7 +11,7 @@ const ErrorMessage = props => {
12
11
  return /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(Alert, {
13
12
  type: "warning",
14
13
  title: "Warning",
15
- className: "wby-mb-md"
14
+ className: "mb-md"
16
15
  }, /*#__PURE__*/React.createElement("strong", null, lockedBy?.displayName || "Unknown user"), " is currently editing this record.", /*#__PURE__*/React.createElement("br", null), " If you force unlock it, they could potentially lose their changes."), /*#__PURE__*/React.createElement(Text, null, "You are about to forcefully unlock the ", /*#__PURE__*/React.createElement("strong", null, title), " entry. Are you sure you want to continue?"));
17
16
  };
18
17
  export const LockedRecordForceUnlock = props => {
@@ -31,9 +30,6 @@ export const LockedRecordForceUnlock = props => {
31
30
  const {
32
31
  showSnackbar
33
32
  } = useSnackbar();
34
- const {
35
- history
36
- } = useRouter();
37
33
  const [error, setError] = useState();
38
34
  useEffect(() => {
39
35
  if (!error?.message) {
@@ -54,7 +50,7 @@ export const LockedRecordForceUnlock = props => {
54
50
  }
55
51
  setError(result.error);
56
52
  });
57
- }, [props.id, history, navigateTo]);
53
+ }, [props.id, navigateTo]);
58
54
  const {
59
55
  canForceUnlock
60
56
  } = usePermission();
@@ -62,10 +58,10 @@ export const LockedRecordForceUnlock = props => {
62
58
  return null;
63
59
  }
64
60
  return /*#__PURE__*/React.createElement("div", {
65
- className: "wby-mt-md"
61
+ className: "mt-md"
66
62
  }, /*#__PURE__*/React.createElement(Text, {
67
63
  as: "div",
68
- className: "wby-mb-md"
64
+ className: "mb-md"
69
65
  }, "Because you have a full access to the system, you can force unlock the record."), /*#__PURE__*/React.createElement(Button, {
70
66
  onClick: onClick,
71
67
  text: "Unlock and go back"
@@ -1 +1 @@
1
- {"version":3,"names":["React","useCallback","useEffect","useState","Alert","Button","Text","useConfirmationDialog","useSnackbar","useRecordLocking","usePermission","useRouter","useContentEntriesList","ErrorMessage","props","title","lockedBy","createElement","type","className","displayName","LockedRecordForceUnlock","unlockEntryForce","navigateTo","showConfirmation","showForceUnlockConfirmation","message","showSnackbar","history","error","setError","console","onClick","result","id","$lockingType","canForceUnlock","as","text"],"sources":["LockedRecordForceUnlock.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useState } from \"react\";\nimport { Alert, Button, Text } from \"@webiny/admin-ui\";\nimport type { IRecordLockingError, IRecordLockingIdentity } from \"~/types\";\nimport { useConfirmationDialog, useSnackbar } from \"@webiny/app-admin\";\nimport { useRecordLocking, usePermission } from \"~/hooks\";\nimport { useRouter } from \"@webiny/react-router\";\nimport { useContentEntriesList } from \"@webiny/app-headless-cms\";\n\nexport interface ILockedRecordForceUnlockProps {\n id: string;\n type: string;\n title: string;\n lockedBy?: IRecordLockingIdentity;\n}\n\nconst ErrorMessage = (props: ILockedRecordForceUnlockProps) => {\n const { title, lockedBy } = props;\n return (\n <div>\n <Alert type=\"warning\" title=\"Warning\" className={\"wby-mb-md\"}>\n <strong>{lockedBy?.displayName || \"Unknown user\"}</strong> is currently editing this\n record.\n <br /> If you force unlock it, they could potentially lose their changes.\n </Alert>\n\n <Text>\n You are about to forcefully unlock the <strong>{title}</strong> entry. Are you sure\n you want to continue?\n </Text>\n </div>\n );\n};\n\nexport const LockedRecordForceUnlock = (props: ILockedRecordForceUnlockProps) => {\n const { unlockEntryForce } = useRecordLocking();\n\n const { navigateTo } = useContentEntriesList();\n const { showConfirmation: showForceUnlockConfirmation } = useConfirmationDialog({\n title: \"Force unlock the entry\",\n message: <ErrorMessage {...props} />\n });\n const { showSnackbar } = useSnackbar();\n\n const { history } = useRouter();\n\n const [error, setError] = useState<IRecordLockingError>();\n\n useEffect(() => {\n if (!error?.message) {\n return;\n }\n console.error(error);\n showSnackbar(error.message);\n }, [error?.message]);\n\n const onClick = useCallback(() => {\n showForceUnlockConfirmation(async () => {\n const result = await unlockEntryForce({\n id: props.id,\n $lockingType: props.type\n });\n if (!result.error) {\n navigateTo();\n return;\n }\n setError(result.error);\n });\n }, [props.id, history, navigateTo]);\n\n const { canForceUnlock } = usePermission();\n if (!canForceUnlock) {\n return null;\n }\n\n return (\n <div className=\"wby-mt-md\">\n <Text as={\"div\"} className={\"wby-mb-md\"}>\n Because you have a full access to the system, you can force unlock the record.\n </Text>\n <Button onClick={onClick} text={\"Unlock and go back\"} />\n </div>\n );\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["React","useCallback","useEffect","useState","Alert","Button","Text","useConfirmationDialog","useSnackbar","useContentEntriesList","useRecordLocking","usePermission","ErrorMessage","props","title","lockedBy","createElement","type","className","displayName","LockedRecordForceUnlock","unlockEntryForce","navigateTo","showConfirmation","showForceUnlockConfirmation","message","showSnackbar","error","setError","console","onClick","result","id","$lockingType","canForceUnlock","as","text"],"sources":["LockedRecordForceUnlock.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useState } from \"react\";\nimport { Alert, Button, Text } from \"@webiny/admin-ui\";\nimport type { IRecordLockingError, IRecordLockingIdentity } from \"~/types.js\";\nimport { useConfirmationDialog, useSnackbar } from \"@webiny/app-admin\";\nimport { useContentEntriesList } from \"@webiny/app-headless-cms\";\nimport { useRecordLocking, usePermission } from \"~/hooks/index.js\";\n\nexport interface ILockedRecordForceUnlockProps {\n id: string;\n type: string;\n title: string;\n lockedBy?: IRecordLockingIdentity;\n}\n\nconst ErrorMessage = (props: ILockedRecordForceUnlockProps) => {\n const { title, lockedBy } = props;\n return (\n <div>\n <Alert type=\"warning\" title=\"Warning\" className={\"mb-md\"}>\n <strong>{lockedBy?.displayName || \"Unknown user\"}</strong> is currently editing this\n record.\n <br /> If you force unlock it, they could potentially lose their changes.\n </Alert>\n\n <Text>\n You are about to forcefully unlock the <strong>{title}</strong> entry. Are you sure\n you want to continue?\n </Text>\n </div>\n );\n};\n\nexport const LockedRecordForceUnlock = (props: ILockedRecordForceUnlockProps) => {\n const { unlockEntryForce } = useRecordLocking();\n\n const { navigateTo } = useContentEntriesList();\n const { showConfirmation: showForceUnlockConfirmation } = useConfirmationDialog({\n title: \"Force unlock the entry\",\n message: <ErrorMessage {...props} />\n });\n const { showSnackbar } = useSnackbar();\n\n const [error, setError] = useState<IRecordLockingError>();\n\n useEffect(() => {\n if (!error?.message) {\n return;\n }\n console.error(error);\n showSnackbar(error.message);\n }, [error?.message]);\n\n const onClick = useCallback(() => {\n showForceUnlockConfirmation(async () => {\n const result = await unlockEntryForce({\n id: props.id,\n $lockingType: props.type\n });\n if (!result.error) {\n navigateTo();\n return;\n }\n setError(result.error);\n });\n }, [props.id, navigateTo]);\n\n const { canForceUnlock } = usePermission();\n if (!canForceUnlock) {\n return null;\n }\n\n return (\n <div className=\"mt-md\">\n <Text as={\"div\"} className={\"mb-md\"}>\n Because you have a full access to the system, you can force unlock the record.\n </Text>\n <Button onClick={onClick} text={\"Unlock and go back\"} />\n </div>\n );\n};\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,WAAW,EAAEC,SAAS,EAAEC,QAAQ,QAAQ,OAAO;AAC/D,SAASC,KAAK,EAAEC,MAAM,EAAEC,IAAI,QAAQ,kBAAkB;AAEtD,SAASC,qBAAqB,EAAEC,WAAW,QAAQ,mBAAmB;AACtE,SAASC,qBAAqB,QAAQ,0BAA0B;AAChE,SAASC,gBAAgB,EAAEC,aAAa;AASxC,MAAMC,YAAY,GAAIC,KAAoC,IAAK;EAC3D,MAAM;IAAEC,KAAK;IAAEC;EAAS,CAAC,GAAGF,KAAK;EACjC,oBACIb,KAAA,CAAAgB,aAAA,2BACIhB,KAAA,CAAAgB,aAAA,CAACZ,KAAK;IAACa,IAAI,EAAC,SAAS;IAACH,KAAK,EAAC,SAAS;IAACI,SAAS,EAAE;EAAQ,gBACrDlB,KAAA,CAAAgB,aAAA,iBAASD,QAAQ,EAAEI,WAAW,IAAI,cAAuB,CAAC,sCAE1D,eAAAnB,KAAA,CAAAgB,aAAA,WAAK,CAAC,uEACH,CAAC,eAERhB,KAAA,CAAAgB,aAAA,CAACV,IAAI,QAAC,yCACqC,eAAAN,KAAA,CAAAgB,aAAA,iBAASF,KAAc,CAAC,8CAE7D,CACL,CAAC;AAEd,CAAC;AAED,OAAO,MAAMM,uBAAuB,GAAIP,KAAoC,IAAK;EAC7E,MAAM;IAAEQ;EAAiB,CAAC,GAAGX,gBAAgB,CAAC,CAAC;EAE/C,MAAM;IAAEY;EAAW,CAAC,GAAGb,qBAAqB,CAAC,CAAC;EAC9C,MAAM;IAAEc,gBAAgB,EAAEC;EAA4B,CAAC,GAAGjB,qBAAqB,CAAC;IAC5EO,KAAK,EAAE,wBAAwB;IAC/BW,OAAO,eAAEzB,KAAA,CAAAgB,aAAA,CAACJ,YAAY,EAAKC,KAAQ;EACvC,CAAC,CAAC;EACF,MAAM;IAAEa;EAAa,CAAC,GAAGlB,WAAW,CAAC,CAAC;EAEtC,MAAM,CAACmB,KAAK,EAAEC,QAAQ,CAAC,GAAGzB,QAAQ,CAAsB,CAAC;EAEzDD,SAAS,CAAC,MAAM;IACZ,IAAI,CAACyB,KAAK,EAAEF,OAAO,EAAE;MACjB;IACJ;IACAI,OAAO,CAACF,KAAK,CAACA,KAAK,CAAC;IACpBD,YAAY,CAACC,KAAK,CAACF,OAAO,CAAC;EAC/B,CAAC,EAAE,CAACE,KAAK,EAAEF,OAAO,CAAC,CAAC;EAEpB,MAAMK,OAAO,GAAG7B,WAAW,CAAC,MAAM;IAC9BuB,2BAA2B,CAAC,YAAY;MACpC,MAAMO,MAAM,GAAG,MAAMV,gBAAgB,CAAC;QAClCW,EAAE,EAAEnB,KAAK,CAACmB,EAAE;QACZC,YAAY,EAAEpB,KAAK,CAACI;MACxB,CAAC,CAAC;MACF,IAAI,CAACc,MAAM,CAACJ,KAAK,EAAE;QACfL,UAAU,CAAC,CAAC;QACZ;MACJ;MACAM,QAAQ,CAACG,MAAM,CAACJ,KAAK,CAAC;IAC1B,CAAC,CAAC;EACN,CAAC,EAAE,CAACd,KAAK,CAACmB,EAAE,EAAEV,UAAU,CAAC,CAAC;EAE1B,MAAM;IAAEY;EAAe,CAAC,GAAGvB,aAAa,CAAC,CAAC;EAC1C,IAAI,CAACuB,cAAc,EAAE;IACjB,OAAO,IAAI;EACf;EAEA,oBACIlC,KAAA,CAAAgB,aAAA;IAAKE,SAAS,EAAC;EAAO,gBAClBlB,KAAA,CAAAgB,aAAA,CAACV,IAAI;IAAC6B,EAAE,EAAE,KAAM;IAACjB,SAAS,EAAE;EAAQ,GAAC,gFAE/B,CAAC,eACPlB,KAAA,CAAAgB,aAAA,CAACX,MAAM;IAACyB,OAAO,EAAEA,OAAQ;IAACM,IAAI,EAAE;EAAqB,CAAE,CACtD,CAAC;AAEd,CAAC","ignoreList":[]}
@@ -1 +1 @@
1
- export * from "./LockedRecord";
1
+ export * from "./LockedRecord.js";
@@ -1,3 +1,3 @@
1
- export * from "./LockedRecord";
1
+ export * from "./LockedRecord.js";
2
2
 
3
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["index.ts"],"sourcesContent":["export * from \"./LockedRecord\";\n"],"mappings":"AAAA","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["index.ts"],"sourcesContent":["export * from \"./LockedRecord.js\";\n"],"mappings":"AAAA","ignoreList":[]}
@@ -1,5 +1,5 @@
1
1
  import React from "react";
2
- import type { IPossiblyRecordLockingRecord, IRecordLockingContext } from "../types";
2
+ import type { IPossiblyRecordLockingRecord, IRecordLockingContext } from "../types.js";
3
3
  export interface IRecordLockingProviderProps {
4
4
  children: React.ReactNode;
5
5
  }
@@ -1,6 +1,6 @@
1
1
  import React, { useCallback, useMemo, useState } from "react";
2
2
  import { useApolloClient } from "@apollo/react-hooks";
3
- import { createRecordLocking } from "../domain/RecordLocking";
3
+ import { createRecordLocking } from "../domain/RecordLocking.js";
4
4
  import { useStateIfMounted } from "@webiny/app-admin";
5
5
  export const RecordLockingContext = /*#__PURE__*/React.createContext({});
6
6
  const isSameArray = (existingRecords, newRecords) => {
@@ -1 +1 @@
1
- {"version":3,"names":["React","useCallback","useMemo","useState","useApolloClient","createRecordLocking","useStateIfMounted","RecordLockingContext","createContext","isSameArray","existingRecords","newRecords","length","every","record","index","newRecord","id","savedOn","getData","records","map","RecordLockingProvider","props","client","loading","setLoading","recordLocking","error","setError","setRecords","setRecordsIfNeeded","sameArray","value","updateEntryLock","params","result","target","data","message","code","prev","item","entryId","$locked","unlockEntry","unlockEntryForce","isLockExpired","input","isRecordLocked","getLockRecordEntry","removeEntryLock","fetchLockRecord","ex","fetchLockedEntryLockRecord","folderId","type","createElement","Provider","Object","assign"],"sources":["RecordLockingProvider.tsx"],"sourcesContent":["import React, { useCallback, useMemo, useState } from \"react\";\nimport { useApolloClient } from \"@apollo/react-hooks\";\nimport { createRecordLocking } from \"~/domain/RecordLocking\";\nimport type {\n IFetchLockedEntryLockRecordParams,\n IFetchLockRecordParams,\n IPossiblyRecordLockingRecord,\n IRecordLockingContext,\n IRecordLockingError,\n IUnlockEntryParams,\n IUpdateEntryLockParams\n} from \"~/types\";\nimport { useStateIfMounted } from \"@webiny/app-admin\";\n\nexport interface IRecordLockingProviderProps {\n children: React.ReactNode;\n}\n\nexport const RecordLockingContext = React.createContext({} as unknown as IRecordLockingContext);\n\nconst isSameArray = (\n existingRecords: Pick<IPossiblyRecordLockingRecord[\"data\"], \"id\" | \"savedOn\">[],\n newRecords: Pick<IPossiblyRecordLockingRecord[\"data\"], \"id\" | \"savedOn\">[]\n): boolean => {\n if (existingRecords.length !== newRecords.length) {\n return false;\n }\n return existingRecords.every((record, index) => {\n const newRecord = newRecords[index];\n if (!newRecord) {\n return false;\n }\n\n return newRecord.id === record.id && newRecord.savedOn === record.savedOn;\n });\n};\n\nconst getData = (records: IPossiblyRecordLockingRecord[]) => {\n return records.map(record => ({\n id: record.id,\n savedOn: record.savedOn\n }));\n};\n\nexport const RecordLockingProvider = (props: IRecordLockingProviderProps) => {\n const client = useApolloClient();\n\n const [loading, setLoading] = useState(false);\n\n const recordLocking = useMemo(() => {\n return createRecordLocking({\n client,\n setLoading\n });\n }, []);\n\n const [error, setError] = useStateIfMounted<IRecordLockingError | null>(null);\n\n const [records, setRecords] = useStateIfMounted<IPossiblyRecordLockingRecord[]>([]);\n\n const setRecordsIfNeeded = useCallback(\n (newRecords: IPossiblyRecordLockingRecord[]) => {\n const sameArray = isSameArray(getData(records), getData(newRecords));\n if (sameArray) {\n return;\n }\n setRecords(newRecords);\n },\n [records]\n );\n\n const value: IRecordLockingContext = {\n async updateEntryLock(params: IUpdateEntryLockParams) {\n const result = await recordLocking.updateEntryLock(params);\n if (result.error) {\n setError(result.error);\n return result;\n }\n const target = result.data;\n if (!target?.id) {\n const error = {\n message: \"No data returned from server.\",\n code: \"NO_DATA\"\n };\n setError(error);\n return {\n error,\n data: null\n };\n }\n\n setRecords(prev => {\n return prev.map(item => {\n if (item.entryId === target.id) {\n return {\n ...item,\n $locked: result.data\n };\n }\n return item;\n });\n });\n return result;\n },\n async unlockEntry(params: IUnlockEntryParams) {\n return await recordLocking.unlockEntry(params);\n },\n async unlockEntryForce(params: IUnlockEntryParams) {\n return await recordLocking.unlockEntry(params, true);\n },\n isLockExpired(input: Date | string): boolean {\n return recordLocking.isLockExpired(input);\n },\n isRecordLocked(record) {\n if (!record) {\n return false;\n }\n return recordLocking.isRecordLocked(record);\n },\n getLockRecordEntry(id: string) {\n return recordLocking.getLockRecordEntry(id);\n },\n removeEntryLock(params: IUnlockEntryParams) {\n return recordLocking.removeEntryLock(params);\n },\n async fetchLockRecord(params: IFetchLockRecordParams) {\n try {\n return await recordLocking.fetchLockRecord(params);\n } catch (ex) {\n return {\n data: null,\n error: ex\n };\n }\n },\n async fetchLockedEntryLockRecord(params: IFetchLockedEntryLockRecordParams) {\n return recordLocking.fetchLockedEntryLockRecord(params);\n },\n async setRecords(folderId, type, newRecords) {\n setRecordsIfNeeded(newRecords);\n\n const result = await recordLocking.setRecords(folderId, type, newRecords);\n if (!result) {\n return;\n }\n setRecords(result);\n },\n error,\n records,\n loading\n };\n\n return <RecordLockingContext.Provider {...props} value={value} />;\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["React","useCallback","useMemo","useState","useApolloClient","createRecordLocking","useStateIfMounted","RecordLockingContext","createContext","isSameArray","existingRecords","newRecords","length","every","record","index","newRecord","id","savedOn","getData","records","map","RecordLockingProvider","props","client","loading","setLoading","recordLocking","error","setError","setRecords","setRecordsIfNeeded","sameArray","value","updateEntryLock","params","result","target","data","message","code","prev","item","entryId","$locked","unlockEntry","unlockEntryForce","isLockExpired","input","isRecordLocked","getLockRecordEntry","removeEntryLock","fetchLockRecord","ex","fetchLockedEntryLockRecord","folderId","type","createElement","Provider","Object","assign"],"sources":["RecordLockingProvider.tsx"],"sourcesContent":["import React, { useCallback, useMemo, useState } from \"react\";\nimport { useApolloClient } from \"@apollo/react-hooks\";\nimport { createRecordLocking } from \"~/domain/RecordLocking.js\";\nimport type {\n IFetchLockedEntryLockRecordParams,\n IFetchLockRecordParams,\n IPossiblyRecordLockingRecord,\n IRecordLockingContext,\n IRecordLockingError,\n IUnlockEntryParams,\n IUpdateEntryLockParams\n} from \"~/types.js\";\nimport { useStateIfMounted } from \"@webiny/app-admin\";\n\nexport interface IRecordLockingProviderProps {\n children: React.ReactNode;\n}\n\nexport const RecordLockingContext = React.createContext({} as unknown as IRecordLockingContext);\n\nconst isSameArray = (\n existingRecords: Pick<IPossiblyRecordLockingRecord, \"id\" | \"savedOn\">[],\n newRecords: Pick<IPossiblyRecordLockingRecord, \"id\" | \"savedOn\">[]\n): boolean => {\n if (existingRecords.length !== newRecords.length) {\n return false;\n }\n return existingRecords.every((record, index) => {\n const newRecord = newRecords[index];\n if (!newRecord) {\n return false;\n }\n\n return newRecord.id === record.id && newRecord.savedOn === record.savedOn;\n });\n};\n\nconst getData = (records: IPossiblyRecordLockingRecord[]) => {\n return records.map(record => ({\n id: record.id,\n savedOn: record.savedOn\n }));\n};\n\nexport const RecordLockingProvider = (props: IRecordLockingProviderProps) => {\n const client = useApolloClient();\n\n const [loading, setLoading] = useState(false);\n\n const recordLocking = useMemo(() => {\n return createRecordLocking({\n client,\n setLoading\n });\n }, []);\n\n const [error, setError] = useStateIfMounted<IRecordLockingError | null>(null);\n\n const [records, setRecords] = useStateIfMounted<IPossiblyRecordLockingRecord[]>([]);\n\n const setRecordsIfNeeded = useCallback(\n (newRecords: IPossiblyRecordLockingRecord[]) => {\n const sameArray = isSameArray(getData(records), getData(newRecords));\n if (sameArray) {\n return;\n }\n setRecords(newRecords);\n },\n [records]\n );\n\n const value: IRecordLockingContext = {\n async updateEntryLock(params: IUpdateEntryLockParams) {\n const result = await recordLocking.updateEntryLock(params);\n if (result.error) {\n setError(result.error);\n return result;\n }\n const target = result.data;\n if (!target?.id) {\n const error = {\n message: \"No data returned from server.\",\n code: \"NO_DATA\"\n };\n setError(error);\n return {\n error,\n data: null\n };\n }\n\n setRecords(prev => {\n return prev.map(item => {\n if (item.entryId === target.id) {\n return {\n ...item,\n $locked: result.data\n };\n }\n return item;\n });\n });\n return result;\n },\n async unlockEntry(params: IUnlockEntryParams) {\n return await recordLocking.unlockEntry(params);\n },\n async unlockEntryForce(params: IUnlockEntryParams) {\n return await recordLocking.unlockEntry(params, true);\n },\n isLockExpired(input: Date | string): boolean {\n return recordLocking.isLockExpired(input);\n },\n isRecordLocked(record) {\n if (!record) {\n return false;\n }\n return recordLocking.isRecordLocked(record);\n },\n getLockRecordEntry(id: string) {\n return recordLocking.getLockRecordEntry(id);\n },\n removeEntryLock(params: IUnlockEntryParams) {\n return recordLocking.removeEntryLock(params);\n },\n async fetchLockRecord(params: IFetchLockRecordParams) {\n try {\n return await recordLocking.fetchLockRecord(params);\n } catch (ex) {\n return {\n data: null,\n error: ex\n };\n }\n },\n async fetchLockedEntryLockRecord(params: IFetchLockedEntryLockRecordParams) {\n return recordLocking.fetchLockedEntryLockRecord(params);\n },\n async setRecords(folderId, type, newRecords) {\n setRecordsIfNeeded(newRecords);\n\n const result = await recordLocking.setRecords(folderId, type, newRecords);\n if (!result) {\n return;\n }\n setRecords(result);\n },\n error,\n records,\n loading\n };\n\n return <RecordLockingContext.Provider {...props} value={value} />;\n};\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ import React from "react";
2
+ export declare const SecurityPermissions: () => React.JSX.Element;
@@ -0,0 +1,23 @@
1
+ import React from "react";
2
+ import { AdminConfig } from "@webiny/app-admin";
3
+ import { ReactComponent as LockIcon } from "@webiny/icons/lock.svg";
4
+ const {
5
+ Security
6
+ } = AdminConfig;
7
+ export const SecurityPermissions = () => {
8
+ return /*#__PURE__*/React.createElement(AdminConfig, null, /*#__PURE__*/React.createElement(Security.Permissions, {
9
+ name: "record-locking",
10
+ title: "Record Locking",
11
+ description: "Manage Record Locking permissions.",
12
+ icon: /*#__PURE__*/React.createElement(LockIcon, null),
13
+ schema: {
14
+ prefix: "recordLocking",
15
+ fullAccess: {
16
+ name: "recordLocking",
17
+ canForceUnlock: true
18
+ }
19
+ }
20
+ }));
21
+ };
22
+
23
+ //# sourceMappingURL=SecurityPermissions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","AdminConfig","ReactComponent","LockIcon","Security","SecurityPermissions","createElement","Permissions","name","title","description","icon","schema","prefix","fullAccess","canForceUnlock"],"sources":["SecurityPermissions.tsx"],"sourcesContent":["import React from \"react\";\nimport { AdminConfig } from \"@webiny/app-admin\";\nimport { ReactComponent as LockIcon } from \"@webiny/icons/lock.svg\";\n\nconst { Security } = AdminConfig;\n\nexport const SecurityPermissions = () => {\n return (\n <AdminConfig>\n <Security.Permissions\n name=\"record-locking\"\n title=\"Record Locking\"\n description=\"Manage Record Locking permissions.\"\n icon={<LockIcon />}\n schema={{\n prefix: \"recordLocking\",\n fullAccess: { name: \"recordLocking\", canForceUnlock: true }\n }}\n />\n </AdminConfig>\n );\n};\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,WAAW,QAAQ,mBAAmB;AAC/C,SAASC,cAAc,IAAIC,QAAQ,QAAQ,wBAAwB;AAEnE,MAAM;EAAEC;AAAS,CAAC,GAAGH,WAAW;AAEhC,OAAO,MAAMI,mBAAmB,GAAGA,CAAA,KAAM;EACrC,oBACIL,KAAA,CAAAM,aAAA,CAACL,WAAW,qBACRD,KAAA,CAAAM,aAAA,CAACF,QAAQ,CAACG,WAAW;IACjBC,IAAI,EAAC,gBAAgB;IACrBC,KAAK,EAAC,gBAAgB;IACtBC,WAAW,EAAC,oCAAoC;IAChDC,IAAI,eAAEX,KAAA,CAAAM,aAAA,CAACH,QAAQ,MAAE,CAAE;IACnBS,MAAM,EAAE;MACJC,MAAM,EAAE,eAAe;MACvBC,UAAU,EAAE;QAAEN,IAAI,EAAE,eAAe;QAAEO,cAAc,EAAE;MAAK;IAC9D;EAAE,CACL,CACQ,CAAC;AAEtB,CAAC","ignoreList":[]}
@@ -1,2 +1 @@
1
- /// <reference types="react" />
2
- export declare const UseContentEntriesListHookDecorator: () => import("react").JSX.Element;
1
+ export declare const UseContentEntriesListHookDecorator: () => React.JSX.Element;