@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.
- package/components/HeadlessCmsActionsAcoCell.js +29 -51
- package/components/HeadlessCmsActionsAcoCell.js.map +1 -1
- package/components/HeadlessCmsContentEntry/ContentEntryGuard.js +26 -34
- package/components/HeadlessCmsContentEntry/ContentEntryGuard.js.map +1 -1
- package/components/HeadlessCmsContentEntry/ContentEntryLocker.d.ts +1 -1
- package/components/HeadlessCmsContentEntry/ContentEntryLocker.js +70 -96
- package/components/HeadlessCmsContentEntry/ContentEntryLocker.js.map +1 -1
- package/components/HeadlessCmsContentEntry/HeadlessCmsContentEntry.js +38 -83
- package/components/HeadlessCmsContentEntry/HeadlessCmsContentEntry.js.map +1 -1
- package/components/HeadlessCmsContentEntry/index.js +0 -2
- package/components/LockedRecord/LockedRecord.js +45 -57
- package/components/LockedRecord/LockedRecord.js.map +1 -1
- package/components/LockedRecord/LockedRecordForceUnlock.js +49 -63
- package/components/LockedRecord/LockedRecordForceUnlock.js.map +1 -1
- package/components/LockedRecord/index.js +0 -2
- package/components/RecordLockingProvider.js +103 -117
- package/components/RecordLockingProvider.js.map +1 -1
- package/components/SecurityPermissions.d.ts +2 -0
- package/components/SecurityPermissions.js +15 -0
- package/components/SecurityPermissions.js.map +1 -0
- package/components/decorators/UseContentEntriesListHookDecorator.js +18 -18
- package/components/decorators/UseContentEntriesListHookDecorator.js.map +1 -1
- package/components/decorators/UseRecordsDecorator.js +13 -22
- package/components/decorators/UseRecordsDecorator.js.map +1 -1
- package/components/decorators/UseSaveEntryDecorator.js +35 -49
- package/components/decorators/UseSaveEntryDecorator.js.map +1 -1
- package/domain/RecordLocking.js +229 -291
- package/domain/RecordLocking.js.map +1 -1
- package/domain/RecordLockingClient.js +17 -16
- package/domain/RecordLockingClient.js.map +1 -1
- package/domain/RecordLockingGetLockRecord.js +13 -15
- package/domain/RecordLockingGetLockRecord.js.map +1 -1
- package/domain/RecordLockingGetLockedEntryLockRecord.js +12 -13
- package/domain/RecordLockingGetLockedEntryLockRecord.js.map +1 -1
- package/domain/RecordLockingIsEntryLocked.js +15 -14
- package/domain/RecordLockingIsEntryLocked.js.map +1 -1
- package/domain/RecordLockingListLockRecords.js +18 -24
- package/domain/RecordLockingListLockRecords.js.map +1 -1
- package/domain/RecordLockingLockEntry.js +8 -9
- package/domain/RecordLockingLockEntry.js.map +1 -1
- package/domain/RecordLockingUnlockEntry.js +12 -13
- package/domain/RecordLockingUnlockEntry.js.map +1 -1
- package/domain/RecordLockingUpdateEntryLock.js +12 -13
- package/domain/RecordLockingUpdateEntryLock.js.map +1 -1
- package/domain/abstractions/IRecordLocking.js +0 -3
- package/domain/abstractions/IRecordLockingClient.js +0 -3
- package/domain/abstractions/IRecordLockingGetLockRecord.js +0 -3
- package/domain/abstractions/IRecordLockingGetLockedEntryLockRecord.js +0 -3
- package/domain/abstractions/IRecordLockingIsEntryLocked.js +0 -3
- package/domain/abstractions/IRecordLockingListLockRecords.js +0 -3
- package/domain/abstractions/IRecordLockingLockEntry.js +0 -3
- package/domain/abstractions/IRecordLockingUnlockEntry.js +0 -3
- package/domain/abstractions/IRecordLockingUpdateEntryLock.js +0 -3
- package/domain/graphql/fields.js +3 -2
- package/domain/graphql/fields.js.map +1 -1
- package/domain/graphql/getLockRecord.js +3 -2
- package/domain/graphql/getLockRecord.js.map +1 -1
- package/domain/graphql/getLockedEntryLockRecord.js +3 -2
- package/domain/graphql/getLockedEntryLockRecord.js.map +1 -1
- package/domain/graphql/isEntryLocked.js +3 -2
- package/domain/graphql/isEntryLocked.js.map +1 -1
- package/domain/graphql/listLockRecords.js +4 -5
- package/domain/graphql/listLockRecords.js.map +1 -1
- package/domain/graphql/lockEntry.js +3 -4
- package/domain/graphql/lockEntry.js.map +1 -1
- package/domain/graphql/unlockEntry.js +3 -2
- package/domain/graphql/unlockEntry.js.map +1 -1
- package/domain/graphql/updateEntryLock.js +3 -2
- package/domain/graphql/updateEntryLock.js.map +1 -1
- package/domain/permissionsSchema.d.ts +6 -0
- package/domain/permissionsSchema.js +10 -0
- package/domain/permissionsSchema.js.map +1 -0
- package/domain/utils/createRecordLockingClient.js +5 -6
- package/domain/utils/createRecordLockingClient.js.map +1 -1
- package/domain/utils/createRecordLockingError.js +10 -11
- package/domain/utils/createRecordLockingError.js.map +1 -1
- package/features/permissions/abstractions.d.ts +17 -0
- package/features/permissions/abstractions.js +6 -0
- package/features/permissions/abstractions.js.map +1 -0
- package/features/permissions/feature.d.ts +14 -0
- package/features/permissions/feature.js +7 -0
- package/features/permissions/feature.js.map +1 -0
- package/hooks/index.js +0 -2
- package/hooks/usePermission.js +14 -15
- package/hooks/usePermission.js.map +1 -1
- package/hooks/useRecordLocking.js +5 -6
- package/hooks/useRecordLocking.js.map +1 -1
- package/index.js +17 -21
- package/index.js.map +1 -1
- package/package.json +25 -22
- package/types.d.ts +1 -1
- package/types.js +0 -3
- package/utils/createCacheKey.js +9 -10
- package/utils/createCacheKey.js.map +1 -1
- package/components/HeadlessCmsContentEntry/index.js.map +0 -1
- package/components/LockedRecord/index.js.map +0 -1
- package/components/permissionRenderer/RecordLockingPermissions.d.ts +0 -7
- package/components/permissionRenderer/RecordLockingPermissions.js +0 -71
- package/components/permissionRenderer/RecordLockingPermissions.js.map +0 -1
- package/components/permissionRenderer/index.d.ts +0 -2
- package/components/permissionRenderer/index.js +0 -21
- package/components/permissionRenderer/index.js.map +0 -1
- package/domain/abstractions/IRecordLocking.js.map +0 -1
- package/domain/abstractions/IRecordLockingClient.js.map +0 -1
- package/domain/abstractions/IRecordLockingGetLockRecord.js.map +0 -1
- package/domain/abstractions/IRecordLockingGetLockedEntryLockRecord.js.map +0 -1
- package/domain/abstractions/IRecordLockingIsEntryLocked.js.map +0 -1
- package/domain/abstractions/IRecordLockingListLockRecords.js.map +0 -1
- package/domain/abstractions/IRecordLockingLockEntry.js.map +0 -1
- package/domain/abstractions/IRecordLockingUnlockEntry.js.map +0 -1
- package/domain/abstractions/IRecordLockingUpdateEntryLock.js.map +0 -1
- package/hooks/index.js.map +0 -1
- package/types.js.map +0 -1
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import
|
|
1
|
+
import graphql_tag from "graphql-tag";
|
|
2
2
|
import { ERROR_FIELDS, LOCK_RECORD_FIELDS } from "./fields.js";
|
|
3
|
-
|
|
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,"
|
|
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
|
|
1
|
+
import graphql_tag from "graphql-tag";
|
|
2
2
|
import { ERROR_FIELDS, LOCK_RECORD_FIELDS } from "./fields.js";
|
|
3
|
-
|
|
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,"
|
|
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
|
|
1
|
+
import graphql_tag from "graphql-tag";
|
|
2
2
|
import { ERROR_FIELDS, LOCK_RECORD_FIELDS } from "./fields.js";
|
|
3
|
-
|
|
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,"
|
|
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,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
|
-
|
|
4
|
-
|
|
5
|
-
|
|
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,"
|
|
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
|
-
|
|
2
|
-
|
|
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
|
-
|
|
5
|
-
|
|
6
|
-
|
|
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,"
|
|
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
package/hooks/usePermission.js
CHANGED
|
@@ -1,20 +1,19 @@
|
|
|
1
1
|
import { useMemo } from "react";
|
|
2
2
|
import { useIdentity } from "@webiny/app-admin";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
return
|
|
14
|
-
|
|
15
|
-
|
|
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,"
|
|
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
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
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,"
|
|
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
|
|
1
|
+
import react from "react";
|
|
2
2
|
import { Provider } from "@webiny/app";
|
|
3
|
-
import {
|
|
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 {
|
|
7
|
-
import {
|
|
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
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
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,"
|
|
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.
|
|
3
|
+
"version": "0.0.0-unstable.7be00a75a9",
|
|
4
4
|
"type": "module",
|
|
5
|
-
"
|
|
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.
|
|
19
|
-
"@webiny/app": "0.0.0-unstable.
|
|
20
|
-
"@webiny/app-aco": "0.0.0-unstable.
|
|
21
|
-
"@webiny/app-admin": "0.0.0-unstable.
|
|
22
|
-
"@webiny/app-headless-cms": "0.0.0-unstable.
|
|
23
|
-
"@webiny/app-websockets": "0.0.0-unstable.
|
|
24
|
-
"@webiny/error": "0.0.0-unstable.
|
|
25
|
-
"@webiny/
|
|
26
|
-
"@webiny/
|
|
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": "
|
|
32
|
+
"crypto-hash": "4.0.1",
|
|
32
33
|
"graphql-tag": "2.12.6",
|
|
33
|
-
"react": "18.
|
|
34
|
-
"react-dom": "18.
|
|
34
|
+
"react": "18.3.1",
|
|
35
|
+
"react-dom": "18.3.1"
|
|
35
36
|
},
|
|
36
37
|
"devDependencies": {
|
|
37
|
-
"@webiny/build-tools": "0.0.0-unstable.
|
|
38
|
-
"rimraf": "6.1.
|
|
39
|
-
"typescript": "
|
|
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": "
|
|
45
|
+
"gitHead": "8476da73b653c89cc1474d968baf55c1b0ae0e5f",
|
|
46
|
+
"webiny": {
|
|
47
|
+
"publishFrom": "dist"
|
|
48
|
+
}
|
|
46
49
|
}
|
package/types.d.ts
CHANGED
package/types.js
CHANGED
package/utils/createCacheKey.js
CHANGED
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
import { sha1 } from "crypto-hash";
|
|
2
|
-
const createKey = input
|
|
3
|
-
|
|
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
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
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,"
|
|
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":"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","ignoreList":[]}
|