@webiny/app-record-locking 0.0.0-unstable.6f45466a1d → 0.0.0-unstable.7be00a75a9

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 (113) hide show
  1. package/components/HeadlessCmsActionsAcoCell.js +29 -51
  2. package/components/HeadlessCmsActionsAcoCell.js.map +1 -1
  3. package/components/HeadlessCmsContentEntry/ContentEntryGuard.js +26 -34
  4. package/components/HeadlessCmsContentEntry/ContentEntryGuard.js.map +1 -1
  5. package/components/HeadlessCmsContentEntry/ContentEntryLocker.d.ts +1 -1
  6. package/components/HeadlessCmsContentEntry/ContentEntryLocker.js +70 -96
  7. package/components/HeadlessCmsContentEntry/ContentEntryLocker.js.map +1 -1
  8. package/components/HeadlessCmsContentEntry/HeadlessCmsContentEntry.js +38 -83
  9. package/components/HeadlessCmsContentEntry/HeadlessCmsContentEntry.js.map +1 -1
  10. package/components/HeadlessCmsContentEntry/index.js +0 -2
  11. package/components/LockedRecord/LockedRecord.js +45 -57
  12. package/components/LockedRecord/LockedRecord.js.map +1 -1
  13. package/components/LockedRecord/LockedRecordForceUnlock.js +49 -63
  14. package/components/LockedRecord/LockedRecordForceUnlock.js.map +1 -1
  15. package/components/LockedRecord/index.js +0 -2
  16. package/components/RecordLockingProvider.js +103 -117
  17. package/components/RecordLockingProvider.js.map +1 -1
  18. package/components/SecurityPermissions.d.ts +2 -0
  19. package/components/SecurityPermissions.js +15 -0
  20. package/components/SecurityPermissions.js.map +1 -0
  21. package/components/decorators/UseContentEntriesListHookDecorator.js +18 -18
  22. package/components/decorators/UseContentEntriesListHookDecorator.js.map +1 -1
  23. package/components/decorators/UseRecordsDecorator.js +13 -22
  24. package/components/decorators/UseRecordsDecorator.js.map +1 -1
  25. package/components/decorators/UseSaveEntryDecorator.js +35 -49
  26. package/components/decorators/UseSaveEntryDecorator.js.map +1 -1
  27. package/domain/RecordLocking.js +229 -291
  28. package/domain/RecordLocking.js.map +1 -1
  29. package/domain/RecordLockingClient.js +17 -16
  30. package/domain/RecordLockingClient.js.map +1 -1
  31. package/domain/RecordLockingGetLockRecord.js +13 -15
  32. package/domain/RecordLockingGetLockRecord.js.map +1 -1
  33. package/domain/RecordLockingGetLockedEntryLockRecord.js +12 -13
  34. package/domain/RecordLockingGetLockedEntryLockRecord.js.map +1 -1
  35. package/domain/RecordLockingIsEntryLocked.js +15 -14
  36. package/domain/RecordLockingIsEntryLocked.js.map +1 -1
  37. package/domain/RecordLockingListLockRecords.js +18 -24
  38. package/domain/RecordLockingListLockRecords.js.map +1 -1
  39. package/domain/RecordLockingLockEntry.js +8 -9
  40. package/domain/RecordLockingLockEntry.js.map +1 -1
  41. package/domain/RecordLockingUnlockEntry.js +12 -13
  42. package/domain/RecordLockingUnlockEntry.js.map +1 -1
  43. package/domain/RecordLockingUpdateEntryLock.js +12 -13
  44. package/domain/RecordLockingUpdateEntryLock.js.map +1 -1
  45. package/domain/abstractions/IRecordLocking.js +0 -3
  46. package/domain/abstractions/IRecordLockingClient.js +0 -3
  47. package/domain/abstractions/IRecordLockingGetLockRecord.js +0 -3
  48. package/domain/abstractions/IRecordLockingGetLockedEntryLockRecord.js +0 -3
  49. package/domain/abstractions/IRecordLockingIsEntryLocked.js +0 -3
  50. package/domain/abstractions/IRecordLockingListLockRecords.js +0 -3
  51. package/domain/abstractions/IRecordLockingLockEntry.js +0 -3
  52. package/domain/abstractions/IRecordLockingUnlockEntry.js +0 -3
  53. package/domain/abstractions/IRecordLockingUpdateEntryLock.js +0 -3
  54. package/domain/graphql/fields.js +3 -2
  55. package/domain/graphql/fields.js.map +1 -1
  56. package/domain/graphql/getLockRecord.js +3 -2
  57. package/domain/graphql/getLockRecord.js.map +1 -1
  58. package/domain/graphql/getLockedEntryLockRecord.js +3 -2
  59. package/domain/graphql/getLockedEntryLockRecord.js.map +1 -1
  60. package/domain/graphql/isEntryLocked.js +3 -2
  61. package/domain/graphql/isEntryLocked.js.map +1 -1
  62. package/domain/graphql/listLockRecords.js +4 -5
  63. package/domain/graphql/listLockRecords.js.map +1 -1
  64. package/domain/graphql/lockEntry.js +3 -4
  65. package/domain/graphql/lockEntry.js.map +1 -1
  66. package/domain/graphql/unlockEntry.js +3 -2
  67. package/domain/graphql/unlockEntry.js.map +1 -1
  68. package/domain/graphql/updateEntryLock.js +3 -2
  69. package/domain/graphql/updateEntryLock.js.map +1 -1
  70. package/domain/permissionsSchema.d.ts +6 -0
  71. package/domain/permissionsSchema.js +10 -0
  72. package/domain/permissionsSchema.js.map +1 -0
  73. package/domain/utils/createRecordLockingClient.js +5 -6
  74. package/domain/utils/createRecordLockingClient.js.map +1 -1
  75. package/domain/utils/createRecordLockingError.js +10 -11
  76. package/domain/utils/createRecordLockingError.js.map +1 -1
  77. package/features/permissions/abstractions.d.ts +17 -0
  78. package/features/permissions/abstractions.js +6 -0
  79. package/features/permissions/abstractions.js.map +1 -0
  80. package/features/permissions/feature.d.ts +14 -0
  81. package/features/permissions/feature.js +7 -0
  82. package/features/permissions/feature.js.map +1 -0
  83. package/hooks/index.js +0 -2
  84. package/hooks/usePermission.js +14 -15
  85. package/hooks/usePermission.js.map +1 -1
  86. package/hooks/useRecordLocking.js +5 -6
  87. package/hooks/useRecordLocking.js.map +1 -1
  88. package/index.js +17 -21
  89. package/index.js.map +1 -1
  90. package/package.json +25 -22
  91. package/types.d.ts +1 -1
  92. package/types.js +0 -3
  93. package/utils/createCacheKey.js +9 -10
  94. package/utils/createCacheKey.js.map +1 -1
  95. package/components/HeadlessCmsContentEntry/index.js.map +0 -1
  96. package/components/LockedRecord/index.js.map +0 -1
  97. package/components/permissionRenderer/RecordLockingPermissions.d.ts +0 -7
  98. package/components/permissionRenderer/RecordLockingPermissions.js +0 -71
  99. package/components/permissionRenderer/RecordLockingPermissions.js.map +0 -1
  100. package/components/permissionRenderer/index.d.ts +0 -2
  101. package/components/permissionRenderer/index.js +0 -21
  102. package/components/permissionRenderer/index.js.map +0 -1
  103. package/domain/abstractions/IRecordLocking.js.map +0 -1
  104. package/domain/abstractions/IRecordLockingClient.js.map +0 -1
  105. package/domain/abstractions/IRecordLockingGetLockRecord.js.map +0 -1
  106. package/domain/abstractions/IRecordLockingGetLockedEntryLockRecord.js.map +0 -1
  107. package/domain/abstractions/IRecordLockingIsEntryLocked.js.map +0 -1
  108. package/domain/abstractions/IRecordLockingListLockRecords.js.map +0 -1
  109. package/domain/abstractions/IRecordLockingLockEntry.js.map +0 -1
  110. package/domain/abstractions/IRecordLockingUnlockEntry.js.map +0 -1
  111. package/domain/abstractions/IRecordLockingUpdateEntryLock.js.map +0 -1
  112. package/hooks/index.js.map +0 -1
  113. package/types.js.map +0 -1
@@ -1,7 +1,6 @@
1
- import gql from "graphql-tag";
1
+ import graphql_tag from "graphql-tag";
2
2
  import { ERROR_FIELDS, LOCK_RECORD_FIELDS } from "./fields.js";
3
- export const createLockGraphQL = () => {
4
- return gql`
3
+ const createLockGraphQL = ()=>graphql_tag`
5
4
  mutation RecordLockingLockEntry($id: ID!, $type: String!) {
6
5
  recordLocking {
7
6
  lockEntry(id: $id, type: $type) {
@@ -15,6 +14,6 @@ export const createLockGraphQL = () => {
15
14
  }
16
15
  }
17
16
  `;
18
- };
17
+ export { createLockGraphQL };
19
18
 
20
19
  //# sourceMappingURL=lockEntry.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["gql","ERROR_FIELDS","LOCK_RECORD_FIELDS","createLockGraphQL"],"sources":["lockEntry.ts"],"sourcesContent":["import gql from \"graphql-tag\";\nimport { ERROR_FIELDS, LOCK_RECORD_FIELDS } from \"./fields.js\";\nimport type { IRecordLockingError, IRecordLockingLockRecord } from \"~/types.js\";\nimport type { IRecordLockingLockEntryParams } from \"~/domain/abstractions/IRecordLockingLockEntry.js\";\n\nexport type IRecordLockingLockEntryVariables = IRecordLockingLockEntryParams;\n\nexport interface IRecordLockingLockEntryResponse {\n recordLocking: {\n lockEntry: {\n data: IRecordLockingLockRecord | null;\n error: IRecordLockingError | null;\n };\n };\n}\n\nexport const createLockGraphQL = () => {\n return gql`\n mutation RecordLockingLockEntry($id: ID!, $type: String!) {\n recordLocking {\n lockEntry(id: $id, type: $type) {\n data {\n ${LOCK_RECORD_FIELDS}\n }\n error {\n ${ERROR_FIELDS}\n }\n }\n }\n }\n `;\n};\n"],"mappings":"AAAA,OAAOA,GAAG,MAAM,aAAa;AAC7B,SAASC,YAAY,EAAEC,kBAAkB;AAezC,OAAO,MAAMC,iBAAiB,GAAGA,CAAA,KAAM;EACnC,OAAOH,GAAG;AACd;AACA;AACA;AACA;AACA,0BAA0BE,kBAAkB;AAC5C;AACA;AACA,0BAA0BD,YAAY;AACtC;AACA;AACA;AACA;AACA,KAAK;AACL,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"domain/graphql/lockEntry.js","sources":["../../../src/domain/graphql/lockEntry.ts"],"sourcesContent":["import gql from \"graphql-tag\";\nimport { ERROR_FIELDS, LOCK_RECORD_FIELDS } from \"./fields.js\";\nimport type { IRecordLockingError, IRecordLockingLockRecord } from \"~/types.js\";\nimport type { IRecordLockingLockEntryParams } from \"~/domain/abstractions/IRecordLockingLockEntry.js\";\n\nexport type IRecordLockingLockEntryVariables = IRecordLockingLockEntryParams;\n\nexport interface IRecordLockingLockEntryResponse {\n recordLocking: {\n lockEntry: {\n data: IRecordLockingLockRecord | null;\n error: IRecordLockingError | null;\n };\n };\n}\n\nexport const createLockGraphQL = () => {\n return gql`\n mutation RecordLockingLockEntry($id: ID!, $type: String!) {\n recordLocking {\n lockEntry(id: $id, type: $type) {\n data {\n ${LOCK_RECORD_FIELDS}\n }\n error {\n ${ERROR_FIELDS}\n }\n }\n }\n }\n `;\n};\n"],"names":["createLockGraphQL","gql","LOCK_RECORD_FIELDS","ERROR_FIELDS"],"mappings":";;AAgBO,MAAMA,oBAAoB,IACtBC,WAAG,CAAC;;;;;wBAKS,EAAEC,mBAAmB;;;wBAGrB,EAAEC,aAAa;;;;;IAKnC,CAAC"}
@@ -1,6 +1,6 @@
1
- import gql from "graphql-tag";
1
+ import graphql_tag from "graphql-tag";
2
2
  import { ERROR_FIELDS, LOCK_RECORD_FIELDS } from "./fields.js";
3
- export const UNLOCK_ENTRY_MUTATION = gql`
3
+ const UNLOCK_ENTRY_MUTATION = graphql_tag`
4
4
  mutation RecordLockingUnlockEntry($id: ID!, $type: String!, $force: Boolean) {
5
5
  recordLocking {
6
6
  unlockEntry(id: $id, type: $type, force: $force) {
@@ -14,5 +14,6 @@ export const UNLOCK_ENTRY_MUTATION = gql`
14
14
  }
15
15
  }
16
16
  `;
17
+ export { UNLOCK_ENTRY_MUTATION };
17
18
 
18
19
  //# sourceMappingURL=unlockEntry.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["gql","ERROR_FIELDS","LOCK_RECORD_FIELDS","UNLOCK_ENTRY_MUTATION"],"sources":["unlockEntry.ts"],"sourcesContent":["import gql from \"graphql-tag\";\nimport { ERROR_FIELDS, LOCK_RECORD_FIELDS } from \"./fields.js\";\nimport type { IRecordLockingError, IRecordLockingLockRecord } from \"~/types.js\";\nimport type { IRecordLockingUnlockEntryParams } from \"../abstractions/IRecordLockingUnlockEntry.js\";\n\nexport type IRecordLockingUnlockEntryVariables = IRecordLockingUnlockEntryParams;\n\nexport interface RecordLockingUnlockEntryResponse {\n recordLocking: {\n unlockEntry: {\n data: IRecordLockingLockRecord | null;\n error: IRecordLockingError | null;\n };\n };\n}\n\nexport const UNLOCK_ENTRY_MUTATION = gql`\n mutation RecordLockingUnlockEntry($id: ID!, $type: String!, $force: Boolean) {\n recordLocking {\n unlockEntry(id: $id, type: $type, force: $force) {\n data {\n ${LOCK_RECORD_FIELDS}\n }\n error {\n ${ERROR_FIELDS}\n }\n }\n }\n }\n`;\n"],"mappings":"AAAA,OAAOA,GAAG,MAAM,aAAa;AAC7B,SAASC,YAAY,EAAEC,kBAAkB;AAezC,OAAO,MAAMC,qBAAqB,GAAGH,GAAG;AACxC;AACA;AACA;AACA;AACA,sBAAsBE,kBAAkB;AACxC;AACA;AACA,sBAAsBD,YAAY;AAClC;AACA;AACA;AACA;AACA,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"domain/graphql/unlockEntry.js","sources":["../../../src/domain/graphql/unlockEntry.ts"],"sourcesContent":["import gql from \"graphql-tag\";\nimport { ERROR_FIELDS, LOCK_RECORD_FIELDS } from \"./fields.js\";\nimport type { IRecordLockingError, IRecordLockingLockRecord } from \"~/types.js\";\nimport type { IRecordLockingUnlockEntryParams } from \"../abstractions/IRecordLockingUnlockEntry.js\";\n\nexport type IRecordLockingUnlockEntryVariables = IRecordLockingUnlockEntryParams;\n\nexport interface RecordLockingUnlockEntryResponse {\n recordLocking: {\n unlockEntry: {\n data: IRecordLockingLockRecord | null;\n error: IRecordLockingError | null;\n };\n };\n}\n\nexport const UNLOCK_ENTRY_MUTATION = gql`\n mutation RecordLockingUnlockEntry($id: ID!, $type: String!, $force: Boolean) {\n recordLocking {\n unlockEntry(id: $id, type: $type, force: $force) {\n data {\n ${LOCK_RECORD_FIELDS}\n }\n error {\n ${ERROR_FIELDS}\n }\n }\n }\n }\n`;\n"],"names":["UNLOCK_ENTRY_MUTATION","gql","LOCK_RECORD_FIELDS","ERROR_FIELDS"],"mappings":";;AAgBO,MAAMA,wBAAwBC,WAAG,CAAC;;;;;oBAKrB,EAAEC,mBAAmB;;;oBAGrB,EAAEC,aAAa;;;;;AAKnC,CAAC"}
@@ -1,6 +1,6 @@
1
- import gql from "graphql-tag";
1
+ import graphql_tag from "graphql-tag";
2
2
  import { ERROR_FIELDS, LOCK_RECORD_FIELDS } from "./fields.js";
3
- export const UPDATE_ENTRY_LOCK = gql`
3
+ const UPDATE_ENTRY_LOCK = graphql_tag`
4
4
  mutation RecordLockingUpdateEntryLock($id: ID!, $type: String!) {
5
5
  recordLocking {
6
6
  updateEntryLock(id: $id, type: $type) {
@@ -14,5 +14,6 @@ export const UPDATE_ENTRY_LOCK = gql`
14
14
  }
15
15
  }
16
16
  `;
17
+ export { UPDATE_ENTRY_LOCK };
17
18
 
18
19
  //# sourceMappingURL=updateEntryLock.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["gql","ERROR_FIELDS","LOCK_RECORD_FIELDS","UPDATE_ENTRY_LOCK"],"sources":["updateEntryLock.ts"],"sourcesContent":["import gql from \"graphql-tag\";\nimport { ERROR_FIELDS, LOCK_RECORD_FIELDS } from \"./fields.js\";\nimport type { IRecordLockingError, IRecordLockingLockRecord } from \"~/types.js\";\nimport type { IRecordLockingUpdateEntryLockExecuteParams } from \"~/domain/abstractions/IRecordLockingUpdateEntryLock.js\";\n\nexport type IRecordLockingUpdateEntryLockVariables = IRecordLockingUpdateEntryLockExecuteParams;\n\nexport interface IRecordLockingUpdateEntryLockResponse {\n recordLocking: {\n updateEntryLock: {\n data: IRecordLockingLockRecord | null;\n error: IRecordLockingError | null;\n };\n };\n}\n\nexport const UPDATE_ENTRY_LOCK = gql`\n mutation RecordLockingUpdateEntryLock($id: ID!, $type: String!) {\n recordLocking {\n updateEntryLock(id: $id, type: $type) {\n data {\n ${LOCK_RECORD_FIELDS}\n }\n error {\n ${ERROR_FIELDS}\n }\n }\n }\n }\n`;\n"],"mappings":"AAAA,OAAOA,GAAG,MAAM,aAAa;AAC7B,SAASC,YAAY,EAAEC,kBAAkB;AAezC,OAAO,MAAMC,iBAAiB,GAAGH,GAAG;AACpC;AACA;AACA;AACA;AACA,sBAAsBE,kBAAkB;AACxC;AACA;AACA,sBAAsBD,YAAY;AAClC;AACA;AACA;AACA;AACA,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"domain/graphql/updateEntryLock.js","sources":["../../../src/domain/graphql/updateEntryLock.ts"],"sourcesContent":["import gql from \"graphql-tag\";\nimport { ERROR_FIELDS, LOCK_RECORD_FIELDS } from \"./fields.js\";\nimport type { IRecordLockingError, IRecordLockingLockRecord } from \"~/types.js\";\nimport type { IRecordLockingUpdateEntryLockExecuteParams } from \"~/domain/abstractions/IRecordLockingUpdateEntryLock.js\";\n\nexport type IRecordLockingUpdateEntryLockVariables = IRecordLockingUpdateEntryLockExecuteParams;\n\nexport interface IRecordLockingUpdateEntryLockResponse {\n recordLocking: {\n updateEntryLock: {\n data: IRecordLockingLockRecord | null;\n error: IRecordLockingError | null;\n };\n };\n}\n\nexport const UPDATE_ENTRY_LOCK = gql`\n mutation RecordLockingUpdateEntryLock($id: ID!, $type: String!) {\n recordLocking {\n updateEntryLock(id: $id, type: $type) {\n data {\n ${LOCK_RECORD_FIELDS}\n }\n error {\n ${ERROR_FIELDS}\n }\n }\n }\n }\n`;\n"],"names":["UPDATE_ENTRY_LOCK","gql","LOCK_RECORD_FIELDS","ERROR_FIELDS"],"mappings":";;AAgBO,MAAMA,oBAAoBC,WAAG,CAAC;;;;;oBAKjB,EAAEC,mBAAmB;;;oBAGrB,EAAEC,aAAa;;;;;AAKnC,CAAC"}
@@ -0,0 +1,6 @@
1
+ export declare const RECORD_LOCKING_PERMISSIONS_SCHEMA: {
2
+ readonly prefix: "recordLocking";
3
+ readonly fullAccess: {
4
+ readonly canForceUnlock: true;
5
+ };
6
+ };
@@ -0,0 +1,10 @@
1
+ import { createPermissionSchema } from "@webiny/app-admin";
2
+ const RECORD_LOCKING_PERMISSIONS_SCHEMA = createPermissionSchema({
3
+ prefix: "recordLocking",
4
+ fullAccess: {
5
+ canForceUnlock: true
6
+ }
7
+ });
8
+ export { RECORD_LOCKING_PERMISSIONS_SCHEMA };
9
+
10
+ //# sourceMappingURL=permissionsSchema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domain/permissionsSchema.js","sources":["../../src/domain/permissionsSchema.ts"],"sourcesContent":["import { createPermissionSchema } from \"@webiny/app-admin\";\n\nexport const RECORD_LOCKING_PERMISSIONS_SCHEMA = createPermissionSchema({\n prefix: \"recordLocking\",\n fullAccess: { canForceUnlock: true }\n});\n"],"names":["RECORD_LOCKING_PERMISSIONS_SCHEMA","createPermissionSchema"],"mappings":";AAEO,MAAMA,oCAAoCC,uBAAuB;IACpE,QAAQ;IACR,YAAY;QAAE,gBAAgB;IAAK;AACvC"}
@@ -1,12 +1,11 @@
1
1
  import { RecordLockingClient } from "../RecordLockingClient.js";
2
2
  import { ApolloClient } from "apollo-client";
3
- export const createRecordLockingClient = client => {
4
- if (client instanceof ApolloClient) {
5
- return new RecordLockingClient({
6
- client
3
+ const createRecordLockingClient = (client)=>{
4
+ if (client instanceof ApolloClient) return new RecordLockingClient({
5
+ client
7
6
  });
8
- }
9
- return client;
7
+ return client;
10
8
  };
9
+ export { createRecordLockingClient };
11
10
 
12
11
  //# sourceMappingURL=createRecordLockingClient.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["RecordLockingClient","ApolloClient","createRecordLockingClient","client"],"sources":["createRecordLockingClient.ts"],"sourcesContent":["import type { IRecordLockingClient } from \"~/domain/abstractions/IRecordLockingClient.js\";\nimport { RecordLockingClient } from \"~/domain/RecordLockingClient.js\";\nimport { ApolloClient } from \"apollo-client\";\n\nexport const createRecordLockingClient = (client: IRecordLockingClient | ApolloClient<any>) => {\n if (client instanceof ApolloClient) {\n return new RecordLockingClient({ client });\n }\n return client;\n};\n"],"mappings":"AACA,SAASA,mBAAmB;AAC5B,SAASC,YAAY,QAAQ,eAAe;AAE5C,OAAO,MAAMC,yBAAyB,GAAIC,MAAgD,IAAK;EAC3F,IAAIA,MAAM,YAAYF,YAAY,EAAE;IAChC,OAAO,IAAID,mBAAmB,CAAC;MAAEG;IAAO,CAAC,CAAC;EAC9C;EACA,OAAOA,MAAM;AACjB,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"domain/utils/createRecordLockingClient.js","sources":["../../../src/domain/utils/createRecordLockingClient.ts"],"sourcesContent":["import type { IRecordLockingClient } from \"~/domain/abstractions/IRecordLockingClient.js\";\nimport { RecordLockingClient } from \"~/domain/RecordLockingClient.js\";\nimport { ApolloClient } from \"apollo-client\";\n\nexport const createRecordLockingClient = (client: IRecordLockingClient | ApolloClient<any>) => {\n if (client instanceof ApolloClient) {\n return new RecordLockingClient({ client });\n }\n return client;\n};\n"],"names":["createRecordLockingClient","client","ApolloClient","RecordLockingClient"],"mappings":";;AAIO,MAAMA,4BAA4B,CAACC;IACtC,IAAIA,kBAAkBC,cAClB,OAAO,IAAIC,oBAAoB;QAAEF;IAAO;IAE5C,OAAOA;AACX"}
@@ -1,16 +1,15 @@
1
- export const createRecordLockingError = error => {
2
- if (error instanceof Error) {
1
+ const createRecordLockingError = (error)=>{
2
+ if (error instanceof Error) return {
3
+ message: error.message,
4
+ code: error.code || "UNKNOWN_ERROR",
5
+ data: error.data
6
+ };
3
7
  return {
4
- message: error.message,
5
- code: error.code || "UNKNOWN_ERROR",
6
- data: error.data
8
+ message: error.message,
9
+ code: error.code,
10
+ data: error.data
7
11
  };
8
- }
9
- return {
10
- message: error.message,
11
- code: error.code,
12
- data: error.data
13
- };
14
12
  };
13
+ export { createRecordLockingError };
15
14
 
16
15
  //# sourceMappingURL=createRecordLockingError.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["createRecordLockingError","error","Error","message","code","data"],"sources":["createRecordLockingError.ts"],"sourcesContent":["import type { IRecordLockingError } from \"~/types.js\";\n\nexport interface IError extends Error {\n code?: string;\n data?: any;\n}\n\nexport const createRecordLockingError = (\n error: IError | IRecordLockingError\n): IRecordLockingError => {\n if (error instanceof Error) {\n return {\n message: error.message,\n code: error.code || \"UNKNOWN_ERROR\",\n data: error.data\n };\n }\n return {\n message: error.message,\n code: error.code,\n data: error.data\n };\n};\n"],"mappings":"AAOA,OAAO,MAAMA,wBAAwB,GACjCC,KAAmC,IACb;EACtB,IAAIA,KAAK,YAAYC,KAAK,EAAE;IACxB,OAAO;MACHC,OAAO,EAAEF,KAAK,CAACE,OAAO;MACtBC,IAAI,EAAEH,KAAK,CAACG,IAAI,IAAI,eAAe;MACnCC,IAAI,EAAEJ,KAAK,CAACI;IAChB,CAAC;EACL;EACA,OAAO;IACHF,OAAO,EAAEF,KAAK,CAACE,OAAO;IACtBC,IAAI,EAAEH,KAAK,CAACG,IAAI;IAChBC,IAAI,EAAEJ,KAAK,CAACI;EAChB,CAAC;AACL,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"domain/utils/createRecordLockingError.js","sources":["../../../src/domain/utils/createRecordLockingError.ts"],"sourcesContent":["import type { IRecordLockingError } from \"~/types.js\";\n\nexport interface IError extends Error {\n code?: string;\n data?: any;\n}\n\nexport const createRecordLockingError = (\n error: IError | IRecordLockingError\n): IRecordLockingError => {\n if (error instanceof Error) {\n return {\n message: error.message,\n code: error.code || \"UNKNOWN_ERROR\",\n data: error.data\n };\n }\n return {\n message: error.message,\n code: error.code,\n data: error.data\n };\n};\n"],"names":["createRecordLockingError","error","Error"],"mappings":"AAOO,MAAMA,2BAA2B,CACpCC;IAEA,IAAIA,iBAAiBC,OACjB,OAAO;QACH,SAASD,MAAM,OAAO;QACtB,MAAMA,MAAM,IAAI,IAAI;QACpB,MAAMA,MAAM,IAAI;IACpB;IAEJ,OAAO;QACH,SAASA,MAAM,OAAO;QACtB,MAAMA,MAAM,IAAI;QAChB,MAAMA,MAAM,IAAI;IACpB;AACJ"}
@@ -0,0 +1,17 @@
1
+ import type { Permissions } from "@webiny/app-admin/exports/admin/security.js";
2
+ import { RECORD_LOCKING_PERMISSIONS_SCHEMA } from "../../domain/permissionsSchema.js";
3
+ export declare const RecordLockingPermissions: import("@webiny/di").Abstraction<{
4
+ canAccess: (entityId: never) => boolean;
5
+ canAction: (action: string, entityId: never) => boolean;
6
+ } & {
7
+ canRead: (entityId: string) => boolean;
8
+ canCreate: (entityId: string) => boolean;
9
+ canEdit: (entityId: string, item?: import("@webiny/app-admin/permissions").OwnableItem) => boolean;
10
+ canDelete: (entityId: string, item?: import("@webiny/app-admin/permissions").OwnableItem) => boolean;
11
+ } & {
12
+ canPublish: (entityId: string) => boolean;
13
+ canUnpublish: (entityId: string) => boolean;
14
+ }>;
15
+ export declare namespace RecordLockingPermissions {
16
+ type Interface = Permissions<typeof RECORD_LOCKING_PERMISSIONS_SCHEMA>;
17
+ }
@@ -0,0 +1,6 @@
1
+ import { createPermissionsAbstraction } from "@webiny/app-admin/exports/admin/security.js";
2
+ import { RECORD_LOCKING_PERMISSIONS_SCHEMA } from "../../domain/permissionsSchema.js";
3
+ const RecordLockingPermissions = createPermissionsAbstraction(RECORD_LOCKING_PERMISSIONS_SCHEMA);
4
+ export { RecordLockingPermissions };
5
+
6
+ //# sourceMappingURL=abstractions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/permissions/abstractions.js","sources":["../../../src/features/permissions/abstractions.ts"],"sourcesContent":["import { createPermissionsAbstraction } from \"@webiny/app-admin/exports/admin/security.js\";\nimport type { Permissions } from \"@webiny/app-admin/exports/admin/security.js\";\nimport { RECORD_LOCKING_PERMISSIONS_SCHEMA } from \"~/domain/permissionsSchema.js\";\n\nexport const RecordLockingPermissions = createPermissionsAbstraction(\n RECORD_LOCKING_PERMISSIONS_SCHEMA\n);\n\nexport namespace RecordLockingPermissions {\n export type Interface = Permissions<typeof RECORD_LOCKING_PERMISSIONS_SCHEMA>;\n}\n"],"names":["RecordLockingPermissions","createPermissionsAbstraction","RECORD_LOCKING_PERMISSIONS_SCHEMA"],"mappings":";;AAIO,MAAMA,2BAA2BC,6BACpCC"}
@@ -0,0 +1,14 @@
1
+ export declare const RecordLockingPermissionsFeature: import("@webiny/feature/admin/createFeature.js").FeatureDefinition<{
2
+ permissions: {
3
+ canAccess: (entityId: never) => boolean;
4
+ canAction: (action: string, entityId: never) => boolean;
5
+ } & {
6
+ canRead: (entityId: string) => boolean;
7
+ canCreate: (entityId: string) => boolean;
8
+ canEdit: (entityId: string, item?: import("@webiny/app-admin/index.js").OwnableItem) => boolean;
9
+ canDelete: (entityId: string, item?: import("@webiny/app-admin/index.js").OwnableItem) => boolean;
10
+ } & {
11
+ canPublish: (entityId: string) => boolean;
12
+ canUnpublish: (entityId: string) => boolean;
13
+ };
14
+ }, []>;
@@ -0,0 +1,7 @@
1
+ import { createPermissionsFeature } from "@webiny/app-admin/exports/admin/security.js";
2
+ import { RECORD_LOCKING_PERMISSIONS_SCHEMA } from "../../domain/permissionsSchema.js";
3
+ import { RecordLockingPermissions } from "./abstractions.js";
4
+ const RecordLockingPermissionsFeature = createPermissionsFeature(RECORD_LOCKING_PERMISSIONS_SCHEMA, RecordLockingPermissions);
5
+ export { RecordLockingPermissionsFeature };
6
+
7
+ //# sourceMappingURL=feature.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/permissions/feature.js","sources":["../../../src/features/permissions/feature.ts"],"sourcesContent":["import { createPermissionsFeature } from \"@webiny/app-admin/exports/admin/security.js\";\nimport { RECORD_LOCKING_PERMISSIONS_SCHEMA } from \"~/domain/permissionsSchema.js\";\nimport { RecordLockingPermissions } from \"./abstractions.js\";\n\nexport const RecordLockingPermissionsFeature = createPermissionsFeature(\n RECORD_LOCKING_PERMISSIONS_SCHEMA,\n RecordLockingPermissions\n);\n"],"names":["RecordLockingPermissionsFeature","createPermissionsFeature","RECORD_LOCKING_PERMISSIONS_SCHEMA","RecordLockingPermissions"],"mappings":";;;AAIO,MAAMA,kCAAkCC,yBAC3CC,mCACAC"}
package/hooks/index.js CHANGED
@@ -1,4 +1,2 @@
1
1
  export * from "./useRecordLocking.js";
2
2
  export * from "./usePermission.js";
3
-
4
- //# sourceMappingURL=index.js.map
@@ -1,20 +1,19 @@
1
1
  import { useMemo } from "react";
2
2
  import { useIdentity } from "@webiny/app-admin";
3
- export const usePermission = () => {
4
- const {
5
- identity
6
- } = useIdentity();
7
- const canForceUnlock = useMemo(() => {
8
- const hasFullAccess = !!identity.getPermission("recordLocking.*");
9
- if (hasFullAccess) {
10
- return true;
11
- }
12
- const permission = identity.getPermission("recordLocking");
13
- return permission?.canForceUnlock === "yes";
14
- }, [identity]);
15
- return {
16
- canForceUnlock
17
- };
3
+ const usePermission = ()=>{
4
+ const { identity } = useIdentity();
5
+ const canForceUnlock = useMemo(()=>{
6
+ const hasFullAccess = !!identity.getPermission("recordLocking.*");
7
+ if (hasFullAccess) return true;
8
+ const permission = identity.getPermission("recordLocking");
9
+ return permission?.canForceUnlock === true;
10
+ }, [
11
+ identity
12
+ ]);
13
+ return {
14
+ canForceUnlock
15
+ };
18
16
  };
17
+ export { usePermission };
19
18
 
20
19
  //# sourceMappingURL=usePermission.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["useMemo","useIdentity","usePermission","identity","canForceUnlock","hasFullAccess","getPermission","permission"],"sources":["usePermission.ts"],"sourcesContent":["import { useMemo } from \"react\";\nimport { useIdentity } from \"@webiny/app-admin\";\n\nexport const usePermission = () => {\n const { identity } = useIdentity();\n\n const canForceUnlock = useMemo(() => {\n const hasFullAccess = !!identity.getPermission(\"recordLocking.*\");\n if (hasFullAccess) {\n return true;\n }\n const permission = identity.getPermission(\"recordLocking\");\n return permission?.canForceUnlock === \"yes\";\n }, [identity]);\n\n return {\n canForceUnlock\n };\n};\n"],"mappings":"AAAA,SAASA,OAAO,QAAQ,OAAO;AAC/B,SAASC,WAAW,QAAQ,mBAAmB;AAE/C,OAAO,MAAMC,aAAa,GAAGA,CAAA,KAAM;EAC/B,MAAM;IAAEC;EAAS,CAAC,GAAGF,WAAW,CAAC,CAAC;EAElC,MAAMG,cAAc,GAAGJ,OAAO,CAAC,MAAM;IACjC,MAAMK,aAAa,GAAG,CAAC,CAACF,QAAQ,CAACG,aAAa,CAAC,iBAAiB,CAAC;IACjE,IAAID,aAAa,EAAE;MACf,OAAO,IAAI;IACf;IACA,MAAME,UAAU,GAAGJ,QAAQ,CAACG,aAAa,CAAC,eAAe,CAAC;IAC1D,OAAOC,UAAU,EAAEH,cAAc,KAAK,KAAK;EAC/C,CAAC,EAAE,CAACD,QAAQ,CAAC,CAAC;EAEd,OAAO;IACHC;EACJ,CAAC;AACL,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"hooks/usePermission.js","sources":["../../src/hooks/usePermission.ts"],"sourcesContent":["import { useMemo } from \"react\";\nimport { useIdentity } from \"@webiny/app-admin\";\n\nexport const usePermission = () => {\n const { identity } = useIdentity();\n\n const canForceUnlock = useMemo(() => {\n const hasFullAccess = !!identity.getPermission(\"recordLocking.*\");\n if (hasFullAccess) {\n return true;\n }\n const permission = identity.getPermission(\"recordLocking\");\n return permission?.canForceUnlock === true;\n }, [identity]);\n\n return {\n canForceUnlock\n };\n};\n"],"names":["usePermission","identity","useIdentity","canForceUnlock","useMemo","hasFullAccess","permission"],"mappings":";;AAGO,MAAMA,gBAAgB;IACzB,MAAM,EAAEC,QAAQ,EAAE,GAAGC;IAErB,MAAMC,iBAAiBC,QAAQ;QAC3B,MAAMC,gBAAgB,CAAC,CAACJ,SAAS,aAAa,CAAC;QAC/C,IAAII,eACA,OAAO;QAEX,MAAMC,aAAaL,SAAS,aAAa,CAAC;QAC1C,OAAOK,YAAY,mBAAmB;IAC1C,GAAG;QAACL;KAAS;IAEb,OAAO;QACHE;IACJ;AACJ"}
@@ -1,12 +1,11 @@
1
1
  import { WebinyError } from "@webiny/error";
2
2
  import { useContext } from "react";
3
3
  import { RecordLockingContext } from "../components/RecordLockingProvider.js";
4
- export const useRecordLocking = () => {
5
- const context = useContext(RecordLockingContext);
6
- if (!context) {
7
- throw new WebinyError("useRecordLocking must be used within a RecordLockingProvider.");
8
- }
9
- return context;
4
+ const useRecordLocking = ()=>{
5
+ const context = useContext(RecordLockingContext);
6
+ if (!context) throw new WebinyError("useRecordLocking must be used within a RecordLockingProvider.");
7
+ return context;
10
8
  };
9
+ export { useRecordLocking };
11
10
 
12
11
  //# sourceMappingURL=useRecordLocking.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["WebinyError","useContext","RecordLockingContext","useRecordLocking","context"],"sources":["useRecordLocking.ts"],"sourcesContent":["import { WebinyError } from \"@webiny/error\";\nimport { useContext } from \"react\";\nimport { RecordLockingContext } from \"~/components/RecordLockingProvider.js\";\nimport type { IRecordLockingContext, IPossiblyRecordLockingRecord } from \"~/types.js\";\n\nexport const useRecordLocking = <\n T extends IPossiblyRecordLockingRecord = IPossiblyRecordLockingRecord\n>() => {\n const context = useContext(RecordLockingContext);\n if (!context) {\n throw new WebinyError(\"useRecordLocking must be used within a RecordLockingProvider.\");\n }\n return context as IRecordLockingContext<T>;\n};\n"],"mappings":"AAAA,SAASA,WAAW,QAAQ,eAAe;AAC3C,SAASC,UAAU,QAAQ,OAAO;AAClC,SAASC,oBAAoB;AAG7B,OAAO,MAAMC,gBAAgB,GAAGA,CAAA,KAEzB;EACH,MAAMC,OAAO,GAAGH,UAAU,CAACC,oBAAoB,CAAC;EAChD,IAAI,CAACE,OAAO,EAAE;IACV,MAAM,IAAIJ,WAAW,CAAC,+DAA+D,CAAC;EAC1F;EACA,OAAOI,OAAO;AAClB,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"hooks/useRecordLocking.js","sources":["../../src/hooks/useRecordLocking.ts"],"sourcesContent":["import { WebinyError } from \"@webiny/error\";\nimport { useContext } from \"react\";\nimport { RecordLockingContext } from \"~/components/RecordLockingProvider.js\";\nimport type { IRecordLockingContext, IPossiblyRecordLockingRecord } from \"~/types.js\";\n\nexport const useRecordLocking = <\n T extends IPossiblyRecordLockingRecord = IPossiblyRecordLockingRecord\n>() => {\n const context = useContext(RecordLockingContext);\n if (!context) {\n throw new WebinyError(\"useRecordLocking must be used within a RecordLockingProvider.\");\n }\n return context as IRecordLockingContext<T>;\n};\n"],"names":["useRecordLocking","context","useContext","RecordLockingContext","WebinyError"],"mappings":";;;AAKO,MAAMA,mBAAmB;IAG5B,MAAMC,UAAUC,WAAWC;IAC3B,IAAI,CAACF,SACD,MAAM,IAAIG,YAAY;IAE1B,OAAOH;AACX"}
package/index.js CHANGED
@@ -1,29 +1,25 @@
1
- import React from "react";
1
+ import react from "react";
2
2
  import { Provider } from "@webiny/app";
3
- import { RecordLockingProvider as RecordLockingProviderComponent } from "./components/RecordLockingProvider.js";
3
+ import { RegisterFeature, useWcp } from "@webiny/app-admin";
4
+ import { RecordLockingProvider as RecordLockingProvider_js_RecordLockingProvider } from "./components/RecordLockingProvider.js";
4
5
  import { HeadlessCmsActionsAcoCell } from "./components/HeadlessCmsActionsAcoCell.js";
5
6
  import { HeadlessCmsContentEntry } from "./components/HeadlessCmsContentEntry/index.js";
6
- import { useWcp } from "@webiny/app-admin";
7
- import { plugins } from "@webiny/plugins";
8
- import { recordLockingPermissionRenderer } from "./components/permissionRenderer/index.js";
7
+ import { SecurityPermissions } from "./components/SecurityPermissions.js";
8
+ import { RecordLockingPermissionsFeature } from "./features/permissions/feature.js";
9
9
  export * from "./components/RecordLockingProvider.js";
10
10
  export * from "./hooks/index.js";
11
- const RecordLockingHoc = Component => {
12
- return function RecordLockingProvider({
13
- children
14
- }) {
15
- return /*#__PURE__*/React.createElement(Component, null, /*#__PURE__*/React.createElement(RecordLockingProviderComponent, null, children));
16
- };
17
- };
18
- export const RecordLocking = () => {
19
- const wcp = useWcp();
20
- if (!wcp.canUseRecordLocking()) {
21
- return null;
22
- }
23
- plugins.register(recordLockingPermissionRenderer);
24
- return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Provider, {
25
- hoc: RecordLockingHoc
26
- }), /*#__PURE__*/React.createElement(HeadlessCmsActionsAcoCell, null), /*#__PURE__*/React.createElement(HeadlessCmsContentEntry, null));
11
+ const RecordLockingHoc = (Component)=>function({ children }) {
12
+ return /*#__PURE__*/ react.createElement(Component, null, /*#__PURE__*/ react.createElement(RecordLockingProvider_js_RecordLockingProvider, null, children));
13
+ };
14
+ const RecordLocking = ()=>{
15
+ const wcp = useWcp();
16
+ if (!wcp.canUseRecordLocking()) return null;
17
+ return /*#__PURE__*/ react.createElement(react.Fragment, null, /*#__PURE__*/ react.createElement(RegisterFeature, {
18
+ feature: RecordLockingPermissionsFeature
19
+ }), /*#__PURE__*/ react.createElement(SecurityPermissions, null), /*#__PURE__*/ react.createElement(Provider, {
20
+ hoc: RecordLockingHoc
21
+ }), /*#__PURE__*/ react.createElement(HeadlessCmsActionsAcoCell, null), /*#__PURE__*/ react.createElement(HeadlessCmsContentEntry, null));
27
22
  };
23
+ export { RecordLocking };
28
24
 
29
25
  //# sourceMappingURL=index.js.map
package/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"names":["React","Provider","RecordLockingProvider","RecordLockingProviderComponent","HeadlessCmsActionsAcoCell","HeadlessCmsContentEntry","useWcp","plugins","recordLockingPermissionRenderer","RecordLockingHoc","Component","children","createElement","RecordLocking","wcp","canUseRecordLocking","register","Fragment","hoc"],"sources":["index.tsx"],"sourcesContent":["import React from \"react\";\nimport { Provider } from \"@webiny/app\";\nimport { RecordLockingProvider as RecordLockingProviderComponent } from \"~/components/RecordLockingProvider.js\";\nimport { HeadlessCmsActionsAcoCell } from \"~/components/HeadlessCmsActionsAcoCell.js\";\nimport { HeadlessCmsContentEntry } from \"~/components/HeadlessCmsContentEntry/index.js\";\nimport { useWcp } from \"@webiny/app-admin\";\nimport { plugins } from \"@webiny/plugins\";\nimport { recordLockingPermissionRenderer } from \"~/components/permissionRenderer/index.js\";\n\nexport * from \"~/components/RecordLockingProvider.js\";\nexport * from \"~/hooks/index.js\";\n\nexport interface RecordLockingProviderProps {\n children: React.ReactNode;\n}\n\nconst RecordLockingHoc = (Component: React.ComponentType<RecordLockingProviderProps>) => {\n return function RecordLockingProvider({ children }: RecordLockingProviderProps) {\n return (\n <Component>\n <RecordLockingProviderComponent>{children}</RecordLockingProviderComponent>\n </Component>\n );\n };\n};\n\nexport const RecordLocking = () => {\n const wcp = useWcp();\n\n if (!wcp.canUseRecordLocking()) {\n return null;\n }\n plugins.register(recordLockingPermissionRenderer);\n\n return (\n <>\n <Provider hoc={RecordLockingHoc} />\n <HeadlessCmsActionsAcoCell />\n <HeadlessCmsContentEntry />\n </>\n );\n};\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,QAAQ,QAAQ,aAAa;AACtC,SAASC,qBAAqB,IAAIC,8BAA8B;AAChE,SAASC,yBAAyB;AAClC,SAASC,uBAAuB;AAChC,SAASC,MAAM,QAAQ,mBAAmB;AAC1C,SAASC,OAAO,QAAQ,iBAAiB;AACzC,SAASC,+BAA+B;AAExC;AACA;AAMA,MAAMC,gBAAgB,GAAIC,SAA0D,IAAK;EACrF,OAAO,SAASR,qBAAqBA,CAAC;IAAES;EAAqC,CAAC,EAAE;IAC5E,oBACIX,KAAA,CAAAY,aAAA,CAACF,SAAS,qBACNV,KAAA,CAAAY,aAAA,CAACT,8BAA8B,QAAEQ,QAAyC,CACnE,CAAC;EAEpB,CAAC;AACL,CAAC;AAED,OAAO,MAAME,aAAa,GAAGA,CAAA,KAAM;EAC/B,MAAMC,GAAG,GAAGR,MAAM,CAAC,CAAC;EAEpB,IAAI,CAACQ,GAAG,CAACC,mBAAmB,CAAC,CAAC,EAAE;IAC5B,OAAO,IAAI;EACf;EACAR,OAAO,CAACS,QAAQ,CAACR,+BAA+B,CAAC;EAEjD,oBACIR,KAAA,CAAAY,aAAA,CAAAZ,KAAA,CAAAiB,QAAA,qBACIjB,KAAA,CAAAY,aAAA,CAACX,QAAQ;IAACiB,GAAG,EAAET;EAAiB,CAAE,CAAC,eACnCT,KAAA,CAAAY,aAAA,CAACR,yBAAyB,MAAE,CAAC,eAC7BJ,KAAA,CAAAY,aAAA,CAACP,uBAAuB,MAAE,CAC5B,CAAC;AAEX,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"index.js","sources":["../src/index.tsx"],"sourcesContent":["import React from \"react\";\nimport { Provider } from \"@webiny/app\";\nimport { RegisterFeature } from \"@webiny/app-admin\";\nimport { RecordLockingProvider as RecordLockingProviderComponent } from \"~/components/RecordLockingProvider.js\";\nimport { HeadlessCmsActionsAcoCell } from \"~/components/HeadlessCmsActionsAcoCell.js\";\nimport { HeadlessCmsContentEntry } from \"~/components/HeadlessCmsContentEntry/index.js\";\nimport { useWcp } from \"@webiny/app-admin\";\nimport { SecurityPermissions } from \"~/components/SecurityPermissions.js\";\nimport { RecordLockingPermissionsFeature } from \"~/features/permissions/feature.js\";\n\nexport * from \"~/components/RecordLockingProvider.js\";\nexport * from \"~/hooks/index.js\";\n\nexport interface RecordLockingProviderProps {\n children: React.ReactNode;\n}\n\nconst RecordLockingHoc = (Component: React.ComponentType<RecordLockingProviderProps>) => {\n return function RecordLockingProvider({ children }: RecordLockingProviderProps) {\n return (\n <Component>\n <RecordLockingProviderComponent>{children}</RecordLockingProviderComponent>\n </Component>\n );\n };\n};\n\nexport const RecordLocking = () => {\n const wcp = useWcp();\n\n if (!wcp.canUseRecordLocking()) {\n return null;\n }\n\n return (\n <>\n <RegisterFeature feature={RecordLockingPermissionsFeature} />\n <SecurityPermissions />\n <Provider hoc={RecordLockingHoc} />\n <HeadlessCmsActionsAcoCell />\n <HeadlessCmsContentEntry />\n </>\n );\n};\n"],"names":["RecordLockingHoc","Component","children","RecordLockingProviderComponent","RecordLocking","wcp","useWcp","RegisterFeature","RecordLockingPermissionsFeature","SecurityPermissions","Provider","HeadlessCmsActionsAcoCell","HeadlessCmsContentEntry"],"mappings":";;;;;;;;;;AAiBA,MAAMA,mBAAmB,CAACC,YACf,SAA+B,EAAEC,QAAQ,EAA8B;QAC1E,OAAO,WAAP,GACI,oBAACD,WAAAA,MAAAA,WAAAA,GACG,oBAACE,gDAA8BA,MAAED;IAG7C;AAGG,MAAME,gBAAgB;IACzB,MAAMC,MAAMC;IAEZ,IAAI,CAACD,IAAI,mBAAmB,IACxB,OAAO;IAGX,OAAO,WAAP,GACI,wDACI,oBAACE,iBAAeA;QAAC,SAASC;sBAC1B,oBAACC,qBAAmBA,OAAAA,WAAAA,GACpB,oBAACC,UAAQA;QAAC,KAAKV;sBACf,oBAACW,2BAAyBA,OAAAA,WAAAA,GAC1B,oBAACC,yBAAuBA;AAGpC"}
package/package.json CHANGED
@@ -1,8 +1,11 @@
1
1
  {
2
2
  "name": "@webiny/app-record-locking",
3
- "version": "0.0.0-unstable.6f45466a1d",
3
+ "version": "0.0.0-unstable.7be00a75a9",
4
4
  "type": "module",
5
- "main": "index.js",
5
+ "exports": {
6
+ ".": "./index.js",
7
+ "./*": "./*"
8
+ },
6
9
  "repository": {
7
10
  "type": "git",
8
11
  "url": "https://github.com/webiny/webiny-js.git"
@@ -15,32 +18,32 @@
15
18
  "license": "MIT",
16
19
  "dependencies": {
17
20
  "@apollo/react-hooks": "3.1.5",
18
- "@webiny/admin-ui": "0.0.0-unstable.6f45466a1d",
19
- "@webiny/app": "0.0.0-unstable.6f45466a1d",
20
- "@webiny/app-aco": "0.0.0-unstable.6f45466a1d",
21
- "@webiny/app-admin": "0.0.0-unstable.6f45466a1d",
22
- "@webiny/app-headless-cms": "0.0.0-unstable.6f45466a1d",
23
- "@webiny/app-websockets": "0.0.0-unstable.6f45466a1d",
24
- "@webiny/error": "0.0.0-unstable.6f45466a1d",
25
- "@webiny/form": "0.0.0-unstable.6f45466a1d",
26
- "@webiny/icons": "0.0.0-unstable.6f45466a1d",
27
- "@webiny/plugins": "0.0.0-unstable.6f45466a1d",
28
- "@webiny/utils": "0.0.0-unstable.6f45466a1d",
21
+ "@webiny/admin-ui": "0.0.0-unstable.7be00a75a9",
22
+ "@webiny/app": "0.0.0-unstable.7be00a75a9",
23
+ "@webiny/app-aco": "0.0.0-unstable.7be00a75a9",
24
+ "@webiny/app-admin": "0.0.0-unstable.7be00a75a9",
25
+ "@webiny/app-headless-cms": "0.0.0-unstable.7be00a75a9",
26
+ "@webiny/app-websockets": "0.0.0-unstable.7be00a75a9",
27
+ "@webiny/error": "0.0.0-unstable.7be00a75a9",
28
+ "@webiny/icons": "0.0.0-unstable.7be00a75a9",
29
+ "@webiny/utils": "0.0.0-unstable.7be00a75a9",
29
30
  "apollo-client": "2.6.10",
30
31
  "apollo-link": "1.2.14",
31
- "crypto-hash": "3.1.0",
32
+ "crypto-hash": "4.0.1",
32
33
  "graphql-tag": "2.12.6",
33
- "react": "18.2.0",
34
- "react-dom": "18.2.0"
34
+ "react": "18.3.1",
35
+ "react-dom": "18.3.1"
35
36
  },
36
37
  "devDependencies": {
37
- "@webiny/build-tools": "0.0.0-unstable.6f45466a1d",
38
- "rimraf": "6.1.2",
39
- "typescript": "5.9.3"
38
+ "@webiny/build-tools": "0.0.0-unstable.7be00a75a9",
39
+ "rimraf": "6.1.3",
40
+ "typescript": "6.0.3"
40
41
  },
41
42
  "publishConfig": {
42
- "access": "public",
43
- "directory": "dist"
43
+ "access": "public"
44
44
  },
45
- "gitHead": "6f45466a1d9fb94f6156923501eb90ac303b81a5"
45
+ "gitHead": "8476da73b653c89cc1474d968baf55c1b0ae0e5f",
46
+ "webiny": {
47
+ "publishFrom": "dist"
48
+ }
46
49
  }
package/types.d.ts CHANGED
@@ -88,5 +88,5 @@ export interface IRecordLockingError<T = GenericRecord> {
88
88
  data?: T;
89
89
  }
90
90
  export interface RecordLockingSecurityPermission extends Identity.Permission {
91
- canForceUnlock?: string;
91
+ canForceUnlock?: boolean;
92
92
  }
package/types.js CHANGED
@@ -1,3 +0,0 @@
1
- export {};
2
-
3
- //# sourceMappingURL=types.js.map
@@ -1,15 +1,14 @@
1
1
  import { sha1 } from "crypto-hash";
2
- const createKey = input => {
3
- if (typeof input === "string") {
4
- return input;
5
- }
6
- return JSON.stringify(input);
2
+ const createKey = (input)=>{
3
+ if ("string" == typeof input) return input;
4
+ return JSON.stringify(input);
7
5
  };
8
- export const createCacheKey = input => {
9
- const key = createKey(input);
10
- return sha1(key, {
11
- outputFormat: "hex"
12
- });
6
+ const createCacheKey = (input)=>{
7
+ const key = createKey(input);
8
+ return sha1(key, {
9
+ outputFormat: "hex"
10
+ });
13
11
  };
12
+ export { createCacheKey };
14
13
 
15
14
  //# sourceMappingURL=createCacheKey.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["sha1","createKey","input","JSON","stringify","createCacheKey","key","outputFormat"],"sources":["createCacheKey.ts"],"sourcesContent":["import type { GenericRecord } from \"@webiny/app/types.js\";\nimport { sha1 } from \"crypto-hash\";\n\nexport type ICreateCacheKeyInput = string | GenericRecord | ICreateCacheKeyInput[];\n\nconst createKey = (input: ICreateCacheKeyInput): string => {\n if (typeof input === \"string\") {\n return input;\n }\n return JSON.stringify(input);\n};\n\nexport const createCacheKey = (input: ICreateCacheKeyInput): Promise<string> => {\n const key = createKey(input);\n\n return sha1(key, {\n outputFormat: \"hex\"\n });\n};\n"],"mappings":"AACA,SAASA,IAAI,QAAQ,aAAa;AAIlC,MAAMC,SAAS,GAAIC,KAA2B,IAAa;EACvD,IAAI,OAAOA,KAAK,KAAK,QAAQ,EAAE;IAC3B,OAAOA,KAAK;EAChB;EACA,OAAOC,IAAI,CAACC,SAAS,CAACF,KAAK,CAAC;AAChC,CAAC;AAED,OAAO,MAAMG,cAAc,GAAIH,KAA2B,IAAsB;EAC5E,MAAMI,GAAG,GAAGL,SAAS,CAACC,KAAK,CAAC;EAE5B,OAAOF,IAAI,CAACM,GAAG,EAAE;IACbC,YAAY,EAAE;EAClB,CAAC,CAAC;AACN,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"utils/createCacheKey.js","sources":["../../src/utils/createCacheKey.ts"],"sourcesContent":["import type { GenericRecord } from \"@webiny/app/types.js\";\nimport { sha1 } from \"crypto-hash\";\n\nexport type ICreateCacheKeyInput = string | GenericRecord | ICreateCacheKeyInput[];\n\nconst createKey = (input: ICreateCacheKeyInput): string => {\n if (typeof input === \"string\") {\n return input;\n }\n return JSON.stringify(input);\n};\n\nexport const createCacheKey = (input: ICreateCacheKeyInput): Promise<string> => {\n const key = createKey(input);\n\n return sha1(key, {\n outputFormat: \"hex\"\n });\n};\n"],"names":["createKey","input","JSON","createCacheKey","key","sha1"],"mappings":";AAKA,MAAMA,YAAY,CAACC;IACf,IAAI,AAAiB,YAAjB,OAAOA,OACP,OAAOA;IAEX,OAAOC,KAAK,SAAS,CAACD;AAC1B;AAEO,MAAME,iBAAiB,CAACF;IAC3B,MAAMG,MAAMJ,UAAUC;IAEtB,OAAOI,KAAKD,KAAK;QACb,cAAc;IAClB;AACJ"}
@@ -1 +0,0 @@
1
- {"version":3,"names":[],"sources":["index.ts"],"sourcesContent":["export * from \"./HeadlessCmsContentEntry.js\";\n"],"mappings":"AAAA","ignoreList":[]}
@@ -1 +0,0 @@
1
- {"version":3,"names":[],"sources":["index.ts"],"sourcesContent":["export * from \"./LockedRecord.js\";\n"],"mappings":"AAAA","ignoreList":[]}
@@ -1,7 +0,0 @@
1
- import React from "react";
2
- import type { RecordLockingSecurityPermission } from "../../types.js";
3
- export interface RecordLockingPermissionsProps {
4
- value: RecordLockingSecurityPermission[];
5
- onChange: (value: RecordLockingSecurityPermission[]) => void;
6
- }
7
- export declare const RecordLockingPermissions: ({ value, onChange }: RecordLockingPermissionsProps) => React.JSX.Element;
@@ -1,71 +0,0 @@
1
- import React, { useCallback, useMemo } from "react";
2
- import { i18n } from "@webiny/app/i18n/index.js";
3
- import { gridWithPaddingClass, PermissionInfo } from "@webiny/app-admin";
4
- import { Form } from "@webiny/form";
5
- import { Grid, Select } from "@webiny/admin-ui";
6
- const t = i18n.ns("app-record-locking/components/permissionRenderer");
7
- const RECORD_LOCKING_PERMISSION = "recordLocking";
8
- export const RecordLockingPermissions = ({
9
- value,
10
- onChange
11
- }) => {
12
- const onFormChange = useCallback(data => {
13
- const newValue = value.filter(p => {
14
- return p.name.startsWith(RECORD_LOCKING_PERMISSION) === false;
15
- });
16
- if (!data.canForceUnlock || data.canForceUnlock === "no") {
17
- onChange(newValue);
18
- return;
19
- }
20
- onChange([...newValue, {
21
- name: "recordLocking",
22
- canForceUnlock: "yes"
23
- }]);
24
- }, [value]);
25
- const formData = useMemo(() => {
26
- if (!Array.isArray(value)) {
27
- return {};
28
- }
29
- const hasFullAccess = value.some(item => item.name === "*");
30
- if (hasFullAccess) {
31
- return {
32
- canForceUnlock: "yes"
33
- };
34
- }
35
- const permissions = value.filter(item => item.name.startsWith(RECORD_LOCKING_PERMISSION));
36
- if (!permissions.length || !permissions.some(item => !!item.canForceUnlock)) {
37
- return {};
38
- }
39
- return {
40
- canForceUnlock: "yes"
41
- };
42
- }, []);
43
- return /*#__PURE__*/React.createElement(Form, {
44
- data: formData,
45
- onChange: onFormChange
46
- }, ({
47
- Bind
48
- }) => {
49
- return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Grid, {
50
- className: gridWithPaddingClass
51
- }, /*#__PURE__*/React.createElement(Grid.Column, {
52
- span: 6
53
- }, /*#__PURE__*/React.createElement(PermissionInfo, {
54
- title: t`Advanced Record Locking`
55
- })), /*#__PURE__*/React.createElement(Grid.Column, {
56
- span: 6
57
- }, /*#__PURE__*/React.createElement(Bind, {
58
- name: "canForceUnlock"
59
- }, /*#__PURE__*/React.createElement(Select, {
60
- options: [{
61
- label: t`No Access`,
62
- value: "no"
63
- }, {
64
- label: t`Full Access`,
65
- value: "yes"
66
- }]
67
- })))));
68
- });
69
- };
70
-
71
- //# sourceMappingURL=RecordLockingPermissions.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["React","useCallback","useMemo","i18n","gridWithPaddingClass","PermissionInfo","Form","Grid","Select","t","ns","RECORD_LOCKING_PERMISSION","RecordLockingPermissions","value","onChange","onFormChange","data","newValue","filter","p","name","startsWith","canForceUnlock","formData","Array","isArray","hasFullAccess","some","item","permissions","length","createElement","Bind","Fragment","className","Column","span","title","options","label"],"sources":["RecordLockingPermissions.tsx"],"sourcesContent":["import React, { useCallback, useMemo } from \"react\";\nimport { i18n } from \"@webiny/app/i18n/index.js\";\nimport { gridWithPaddingClass, PermissionInfo } from \"@webiny/app-admin\";\nimport { Form } from \"@webiny/form\";\nimport type { RecordLockingSecurityPermission } from \"~/types.js\";\nimport { Grid, Select } from \"@webiny/admin-ui\";\n\nconst t = i18n.ns(\"app-record-locking/components/permissionRenderer\");\n\nconst RECORD_LOCKING_PERMISSION = \"recordLocking\";\n\nexport interface RecordLockingPermissionsProps {\n value: RecordLockingSecurityPermission[];\n onChange: (value: RecordLockingSecurityPermission[]) => void;\n}\n\nexport const RecordLockingPermissions = ({ value, onChange }: RecordLockingPermissionsProps) => {\n const onFormChange = useCallback(\n (data: RecordLockingSecurityPermission) => {\n const newValue = value.filter(p => {\n return p.name.startsWith(RECORD_LOCKING_PERMISSION) === false;\n });\n\n if (!data.canForceUnlock || data.canForceUnlock === \"no\") {\n onChange(newValue);\n return;\n }\n\n onChange([\n ...newValue,\n {\n name: \"recordLocking\",\n canForceUnlock: \"yes\"\n }\n ]);\n },\n [value]\n );\n\n const formData = useMemo(() => {\n if (!Array.isArray(value)) {\n return {};\n }\n\n const hasFullAccess = value.some(item => item.name === \"*\");\n\n if (hasFullAccess) {\n return {\n canForceUnlock: \"yes\"\n };\n }\n\n const permissions = value.filter(item => item.name.startsWith(RECORD_LOCKING_PERMISSION));\n\n if (!permissions.length || !permissions.some(item => !!item.canForceUnlock)) {\n return {};\n }\n\n return {\n canForceUnlock: \"yes\"\n };\n }, []);\n\n return (\n <Form<RecordLockingSecurityPermission> data={formData} onChange={onFormChange}>\n {({ Bind }) => {\n return (\n <>\n <Grid className={gridWithPaddingClass}>\n <Grid.Column span={6}>\n <PermissionInfo title={t`Advanced Record Locking`} />\n </Grid.Column>\n <Grid.Column span={6}>\n <Bind name={\"canForceUnlock\"}>\n <Select\n options={[\n { label: t`No Access`, value: \"no\" },\n { label: t`Full Access`, value: \"yes\" }\n ]}\n ></Select>\n </Bind>\n </Grid.Column>\n </Grid>\n </>\n );\n }}\n </Form>\n );\n};\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,WAAW,EAAEC,OAAO,QAAQ,OAAO;AACnD,SAASC,IAAI,QAAQ,2BAA2B;AAChD,SAASC,oBAAoB,EAAEC,cAAc,QAAQ,mBAAmB;AACxE,SAASC,IAAI,QAAQ,cAAc;AAEnC,SAASC,IAAI,EAAEC,MAAM,QAAQ,kBAAkB;AAE/C,MAAMC,CAAC,GAAGN,IAAI,CAACO,EAAE,CAAC,kDAAkD,CAAC;AAErE,MAAMC,yBAAyB,GAAG,eAAe;AAOjD,OAAO,MAAMC,wBAAwB,GAAGA,CAAC;EAAEC,KAAK;EAAEC;AAAwC,CAAC,KAAK;EAC5F,MAAMC,YAAY,GAAGd,WAAW,CAC3Be,IAAqC,IAAK;IACvC,MAAMC,QAAQ,GAAGJ,KAAK,CAACK,MAAM,CAACC,CAAC,IAAI;MAC/B,OAAOA,CAAC,CAACC,IAAI,CAACC,UAAU,CAACV,yBAAyB,CAAC,KAAK,KAAK;IACjE,CAAC,CAAC;IAEF,IAAI,CAACK,IAAI,CAACM,cAAc,IAAIN,IAAI,CAACM,cAAc,KAAK,IAAI,EAAE;MACtDR,QAAQ,CAACG,QAAQ,CAAC;MAClB;IACJ;IAEAH,QAAQ,CAAC,CACL,GAAGG,QAAQ,EACX;MACIG,IAAI,EAAE,eAAe;MACrBE,cAAc,EAAE;IACpB,CAAC,CACJ,CAAC;EACN,CAAC,EACD,CAACT,KAAK,CACV,CAAC;EAED,MAAMU,QAAQ,GAAGrB,OAAO,CAAC,MAAM;IAC3B,IAAI,CAACsB,KAAK,CAACC,OAAO,CAACZ,KAAK,CAAC,EAAE;MACvB,OAAO,CAAC,CAAC;IACb;IAEA,MAAMa,aAAa,GAAGb,KAAK,CAACc,IAAI,CAACC,IAAI,IAAIA,IAAI,CAACR,IAAI,KAAK,GAAG,CAAC;IAE3D,IAAIM,aAAa,EAAE;MACf,OAAO;QACHJ,cAAc,EAAE;MACpB,CAAC;IACL;IAEA,MAAMO,WAAW,GAAGhB,KAAK,CAACK,MAAM,CAACU,IAAI,IAAIA,IAAI,CAACR,IAAI,CAACC,UAAU,CAACV,yBAAyB,CAAC,CAAC;IAEzF,IAAI,CAACkB,WAAW,CAACC,MAAM,IAAI,CAACD,WAAW,CAACF,IAAI,CAACC,IAAI,IAAI,CAAC,CAACA,IAAI,CAACN,cAAc,CAAC,EAAE;MACzE,OAAO,CAAC,CAAC;IACb;IAEA,OAAO;MACHA,cAAc,EAAE;IACpB,CAAC;EACL,CAAC,EAAE,EAAE,CAAC;EAEN,oBACItB,KAAA,CAAA+B,aAAA,CAACzB,IAAI;IAAkCU,IAAI,EAAEO,QAAS;IAACT,QAAQ,EAAEC;EAAa,GACzE,CAAC;IAAEiB;EAAK,CAAC,KAAK;IACX,oBACIhC,KAAA,CAAA+B,aAAA,CAAA/B,KAAA,CAAAiC,QAAA,qBACIjC,KAAA,CAAA+B,aAAA,CAACxB,IAAI;MAAC2B,SAAS,EAAE9B;IAAqB,gBAClCJ,KAAA,CAAA+B,aAAA,CAACxB,IAAI,CAAC4B,MAAM;MAACC,IAAI,EAAE;IAAE,gBACjBpC,KAAA,CAAA+B,aAAA,CAAC1B,cAAc;MAACgC,KAAK,EAAE5B,CAAC;IAA0B,CAAE,CAC3C,CAAC,eACdT,KAAA,CAAA+B,aAAA,CAACxB,IAAI,CAAC4B,MAAM;MAACC,IAAI,EAAE;IAAE,gBACjBpC,KAAA,CAAA+B,aAAA,CAACC,IAAI;MAACZ,IAAI,EAAE;IAAiB,gBACzBpB,KAAA,CAAA+B,aAAA,CAACvB,MAAM;MACH8B,OAAO,EAAE,CACL;QAAEC,KAAK,EAAE9B,CAAC,WAAW;QAAEI,KAAK,EAAE;MAAK,CAAC,EACpC;QAAE0B,KAAK,EAAE9B,CAAC,aAAa;QAAEI,KAAK,EAAE;MAAM,CAAC;IACzC,CACG,CACP,CACG,CACX,CACR,CAAC;EAEX,CACE,CAAC;AAEf,CAAC","ignoreList":[]}
@@ -1,2 +0,0 @@
1
- import type { AdminAppPermissionRendererPlugin } from "@webiny/app-admin/types.js";
2
- export declare const recordLockingPermissionRenderer: AdminAppPermissionRendererPlugin;